Changelog
All notable open-core changes to the jml/brok package and registry items.
Unreleased
BREAKING: De-branded generic components (hard rename, no aliases)
-
Eight components wrongly prefixed
ai-were renamed to neutral names and moved from the nestedui/ai/namespace to a flat<x-ui.*>tag (each bumped to 2.0.0). There are no aliases — the old tags/slugs are gone. A new Chat & Messaging component group holds the two chat primitives. -
ai-api-key→masked-input(Forms & Inputs) -
ai-citation→citation(Data Display) -
ai-feedback→reaction-bar(Feedback & Status) — eventsai-feedback-vote/ai-feedback-share→reaction-bar-vote/reaction-bar-share -
ai-image-variants→image-picker(Media) — eventai-image-select→image-select -
ai-message→chat-bubble(Chat & Messaging) -
ai-chat-exchange→chat-thread(Chat & Messaging) — now depends onchat-bubble -
ai-suggestions→suggestion-chips(Forms & Inputs) — eventai-suggestion→suggestion-select -
ai-summary→summary-card(Data Display) -
A second wave of seven
ai--prefixed components were likewise hard-renamed (no aliases), bumped to 2.0.0, and — where they reimplemented an existing primitive — recomposed on that primitive. -
ai-token-counter→usage-meter(Data Display) — now composes theprogressprimitive; threshold tone warns as usage nears its total -
ai-context-gauge→usage-gauge(Data Display) — now composes thegaugeprimitive; supports asemiused/total readout and anarcpercentage with an optionalcaption -
ai-temperature→range-field(Forms & Inputs) — now composes thesliderprimitive; genericmin/max/step/value/label/decimalswith a live readout and an optional two-ended gradient legend -
ai-generated-code→code-block(Media) — copy is now thecopy-buttonprimitive; the AI-specific regenerate button became a generic$actionsslot -
ai-system-prompt→editable-card(Layout) — genericlabel/value/placeholderinline-editable text card -
ai-model-comparison→comparison-cards(Data Display) — generic option cards comparing arbitrary attribute rows + a primary metric, with any card flaggedrecommended -
ai-thinking-dots→dots-loader(Feedback & Status) — adds avariantprop:shimmerandbounce; per-variant classes in_styles.php -
progressbumped to 1.1.0 — added an optionaltoneprop (default/success/warning/destructive) on the fill indicator sousage-metercan signal a near-full value. -
sliderbumped to 1.1.0 — now dispatches a bubblingslider-changeCustomEvent on input so wrappers likerange-fieldcan react to value changes. -
select-advancedbumped to 1.1.0 — rich-option support:<x-ui.select-advanced.option>accepts optionaldescription,meta, and aniconslot (covers the removedai-model-selectorcase). Backward compatible. -
The
metersfamily (Data Display) gainedusage-meter("Usage (linear)") andusage-gauge("Usage (radial)").
Rebrand to Brok
-
Renamed the product from "JML UI" to Brok (a JML Agency B.V. project). Composer package
jml/ui→jml/brok, PHP namespaceJml\Ui→Jml\Brok, service providerJmlUiServiceProvider→BrokServiceProvider, JS runtime globalwindow.JmlUi→window.Brok, and package env varsJML_UI_*→BROK_*. -
The consumer-facing API stays neutral and unchanged (shadcn-style):
x-ui.*,ui:add/ui:*,ui.json,ui-lock.json,resources/views/components/ui, and theopen/protier keys. The Laravel config key was de-branded to the neutralconfig('ui.*')family. - Subtle Norse references (no UI theming): Sindri brands the Pro tier, Yggdrasil names the registry, and Bifröst names the registry client.
- Docker ops identifiers and dated historical docs were intentionally left unchanged.
Bundles (curated install presets)
-
Added bundles — maintainer-curated, role-based install presets. A bundle is a fileless
registry:bundleitem whose members live in itsregistryDependencies;php artisan ui:add bundles/<name>installs the whole curated set in one command. -
Shipped four open bundles:
bundles/core(essential primitives),bundles/landing-page,bundles/saas-app, andbundles/admin. -
Added the first pro bundle,
bundles/admin-pro: the open admin starter plus Pro dashboard/analytics/user-management/team/billing/settings/notification blocks. -
BuildRegistryrecognises the new type and rejects dependency cycles; the registry-item schema allowsregistry:bundleand a filelessfilesarray. -
Added a
/bundlesdocs page (catalog.bundles) and guards: registry↔catalog bundle parity, build-time cycle/unknown-member validation, a sandbox install dogfood (BundleInstallTest), and apackages/uitest pinning the zero-CLI-change resolution guarantee.
Component audit fixes
-
kanban (1.0.0 → 1.0.1): added a
destroy()handler that removes windowpointermove/pointerup/pointercancellisteners if the component is unmounted mid-drag, closing a listener leak. -
table-of-contents (1.0.0 → 1.0.1): auto-generated heading ids are now disambiguated (
-2,-3, …) so duplicate heading text no longer collapses active-section tracking onto the first match. -
select-advanced (1.0.0 → 1.0.1): added a
destroy()handler that clears the pending type-ahead timer so it cannot fire after teardown. -
status (1.0.0 → 1.1.0): refactored to read its variant/size class recipes from the shared
_styles.phpregistry, matchingstatus-indicator; behaviour unchanged. -
ai-api-key (1.0.0 → 1.0.1): now declares its
labeldependency — it composes<x-ui.label>but only listedinput-group, so a standalone install rendered an undefined component. Added aRegistryDependencyTestguard that fails if any component composes an<x-ui.*>it does not declare. -
Synced the docs-registry and sandbox installed mirrors and regenerated
ui-lock.json/.jmlbase caches for the changed items.
Navigation
- Surfaced kanban, which shipped in the open registry but had no catalog entry — so it was installable yet absent from the docs, sidebar nav, and every test. Added its catalog entry (Data Display group), docs preview, and render/a11y/install-lock coverage.
-
Added a registry → catalog parity guard (
CatalogNavigationTest) asserting everyregistry/open/components/*and every open/pro block has a catalog entry, so a component can no longer ship invisible to docs, nav, and tests. - Added component variant families for discovery: Status (status, status-indicator), Timeline (timeline, timeline-steps), Text Effects (text-animate, typewriter, kinetic-text-reveal, letter-cascade, particle-typography, text-repel, text-gradient), and Meters (gauge, circular-progress).
Repo hygiene
-
Moved internal system/execution planning documents under
docs/planning/and fixed references that pointed at the old repo-root paths.
Earlier
- Fixed open registry AI component manifest paths so source builds validate.
- Hardened registry item installation with target-path validation and hash verification.
-
Made
ui:installconservative on rerun so existing project files and lock metadata are preserved. - Added JavaScript import wiring and npm dependency notices for JS-backed registry items.
- Added open-core export tooling and stricter public-boundary audit checks.
- Added package command tests and registry-client path validation tests.
- Added CI matrix, browser smoke-test scaffolding, and open-source governance documents.