lyra-ds/blade
Lyra DS Blade offers reusable Laravel Blade components for building consistent, accessible interfaces with the Lyra design system. Compose layouts, forms, and UI elements faster without repeating markup.
@lyra-ds/styles and @lyra-ds/alpine packages). Reaching v1.0.0 is the signal that matters for roadmap planning: the API is being declared stable, so it is now defensible to standardise product surfaces on it rather than hand-rolling Blade partials per team. Continuing to build bespoke components is now the harder-to-justify option.tabindex="-1" on <main>, real <a> elements for navigation instead of buttons, disclosure semantics replacing a misapplied listbox in the workspace switcher, and progressive-enhancement markup in tabs with a nav[data-lyra-tabs-fallback] anchor fallback. This is direct input to an accessibility audit/V PAT-style commitment and lets you sequence remediation work onto component upgrades rather than bespoke fixes.open/navigate events widen what can be shipped without new component investment.button→a, tabs id/selector relocation, workspace-switcher listbox→disclosure, file-upload lifecycle). That is a real, estimable line item for the next sprint or two, and it should be scheduled deliberately rather than absorbed as incidental work.@lyra-ds/alpine ^1.1, @lyra-ds/styles ^1.1) and a new policy constraint: Alpine-bound components own their x-data and do not forward a consumer-supplied one — consumers must wrap instead. Worth deciding (and documenting) as a house rule before teams discover it in code review.[role=status], #your-id as tablist, button.lyra-sbgroup__item, or [role="listbox"]/[role="option"] will silently pass review and fail in CI. Budget a test-harness sweep as part of the upgrade, not after it.Adopt when:
@lyra-ds/alpine and @lyra-ds/styles packages as a coordinated set.Look elsewhere or defer when:
x-data injection, or CSS/JS that selects on roles and ids. The owned-root policy and the markup rewrites mean your overrides are now the thing being broken.lyra:change — links now navigate natively, so any integration relying on that event must be reworked, and there is no compatibility shim offered.For executives: The component library we build product UI on has reached v1.0, which is the stability commitment we were waiting for before standardising across teams. The release is mostly accessibility and correctness work — proper screen-reader announcements, keyboard focus handling on every overlay, real links in navigation, skip links — which directly reduces our exposure on accessibility compliance and procurement questionnaires. It also adds three components we currently have on the roadmap as build items (OTP input, calendar view, workspace creation dialog), so some planned work becomes configuration instead of engineering. The cost is a one-time, well-scoped migration: several component markup contracts changed, so we should schedule roughly one focused iteration plus a test-suite sweep, and take the matching frontend dependency bump at the same time.
For engineering: Treat this as a breaking upgrade, not a drop-in. Actions: bump @lyra-ds/alpine and @lyra-ds/styles to ^1.1 in lockstep; migrate toast assertions from [role=status] to [data-lyra-toast-region] .lyra-toast; replace button.lyra-sbgroup__item / button.lyra-bottomnav__item selectors with class-only or :is(a, button) and review a reset styles; move tab selectors off #your-id onto #your-id [data-lyra-tabs-enhanced] / [data-lyra-tabs] button[data-value] / section[data-value] and only assert aria-selected after Alpine is ready; rewrite workspace-switcher selectors to .lyra-wssw__pop, .lyra-wssw__item[data-id] and [aria-current]; stop passing x-data into <x-lyra::toast-stack> and wrap it instead; re-verify file-upload against the Alpine 1.x controlled lifecycle. Also note role/aria-selected/tabindex on tabs are now runtime-only, so server-rendered snapshot tests will need adjusting.
How can I help you explore Laravel packages today?