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.
Architecture fit
lyra-ds/blade is a server-rendered Blade component library with a hard runtime coupling to two front-end packages: @lyra-ds/alpine ^1.1 and @lyra-ds/styles ^1.1. It is not a self-contained PHP package — adopting v1.0.0 means a coordinated three-artifact upgrade (Composer + npm).x-data policy: Alpine-bound components own their x-data and no longer forward consumer state. Cleaner contract, but it removes the escape hatch teams used for cross-component coordination. Consumers must wrap components in their own <div x-data> instead.file-manager dispatches open and navigate events, and tag/toast/action-bar gain interactive remove/close/clear actions. These are the intended integration points for routing, analytics, and state sync — treat them as public API and document them internally.<main>, focusable tooltip descriptions, data-table and date-range-picker a11y work). Net positive for procurement/audit review, but it shifts DOM contracts and tab order.Integration feasibility
data-table/date-range-picker a11y (#55), dropdown/tooltip item ids and Button-styled trigger (#49), tag/action-bar interactive actions (#61), file-upload controlled lifecycle (#54). These must be diffed from commits/rendered output before scoping.Technical risk
[role=status] on toast rows, button.lyra-sbgroup__item, #id as tablist, [role=listbox]/[role=option]/[aria-selected] in the workspace switcher, a[href="#"] breadcrumbs. Browser tests (Dusk, Playwright) and custom CSS are the primary blast radius.hidden with no static role/aria-selected; if Alpine 1.1+ is absent or misconfigured, tabs render as an empty shell rather than degrading visibly. Highest-severity risk. File-upload's controlled lifecycle carries the same class of risk.lyra:change. Any integration that intercepted that event (analytics, unsaved-changes guards, SPA-style routing) quietly stops firing.dropdown/tooltip id passthrough and Button-styled triggers, tag/toast/action-bar interactive buttons, and data-table/date-range-picker semantics are all DOM changes described only at a headline level. Budget discovery time rather than assuming "no impact."container max keywords now map to pixel widths (max="*" behavior change) and brand mark is optional with an aria-label initial fallback. These escape the component blast radius and can shift global page layouts and visual snapshots.<main tabindex="-1"> add new tab stops. Any test asserting keyboard sequence or first-focusable-element will fail.^1.1 on two packages; partial upgrades produce hard-to-diagnose rendering faults rather than clean errors.Key questions
data-table, date-range-picker, dropdown, tooltip, tag, and action-bar?lyra:change from anchor-based workspace items?x-data into <x-lyra::toast-stack> today (now unsupported)?data-table/date-range-picker markup and in dropdown/tooltip ids? (Requires commit-level review; not in the notes.)container max keywords, and will the pixel mapping shift our page gutters/widths?<x-lyra::brand> always rendering a logo image?file-manager open/navigate events something we should now consume for routing/analytics, or ignore for this cycle?Stack fit
@lyra-ds/styles.x-data encapsulates component state — good for isolation, requiring an explicit wrapper pattern for shared state.file-manager open/navigate; lyra:change on button-type switcher items and create action) are the sanctioned hooks; prefer them over DOM scraping.Migration path
lyra-ds/blade to 0.10.x in composer.json; snapshot current rendered markup for the affected component families (tabs, toast-stack, file-upload, workspace switcher, navigation, data-table, date-range-picker, dropdown, tooltip, tag, action-bar) as a baseline.0.10.0...1.0.0 at commit level for the components whose changes are only summarized: #55 (data-table/date-range-picker), #49 (dropdown/tooltip), #61 (tag/toast/action-bar), #54 (file-upload lifecycle). Extend the selector inventory accordingly.@lyra-ds/alpine and @lyra-ds/styles to ^1.1 together in a branch; verify tabs, toast-stack, file-upload, and workspace switcher render enhanced (non-hidden) markup.[data-lyra-toast-region] .lyra-toast (and ="assertive" for danger), .lyra-sbgroup__item / .lyra-bottomnav__item without element qualifiers, #id [data-lyra-tabs-enhanced], [data-lyra-tabs] button[data-value], section[data-value], .lyra-wssw__pop / .lyra-wssw__item[data-id] / [aria-current].lyra:change consumers in the workspace switcher; convert anchor items to native navigation or explicit button items.x-data passed to <x-lyra::toast-stack> with an outer wrapper div.container max keyword→pixel mapping and the optional brand mark against real page layouts and visual snapshots; fix reset styles for anchors (text-decoration, color).<main tabindex="-1">, focusable tooltip descriptions, and new interactive buttons on tag/toast/action-bar.^1.0.Compatibility
composer.json before scheduling.a may need review now that navigation items render anchors; same for any CSS targeting button.lyra-*.file-manager or tag/action-bar events, confirm event names/payloads against the source rather than the changelog.Sequencing
file-manager open/navigate, interactive clear/remove actions).container max/brand verification as its own PR so layout diffs aren't conflated with component diffs.main, given the release breadth and zero patch releases to date.Maintenance
lyra-ds/* (Composer and npm) to prevent drift.data-*-attribute queries aligned to the new markup.Support
@lyra-ds/alpine and @lyra-ds/styles versions in the app README and onboarding.x-data ownership policy needs a short internal guideline with the wrapper pattern.lyra:change — otherwise teams will debug analytics gaps as data issues.Scaling
file-manager events add a lightweight, non-polling integration path — cheaper than DOM observation if we need navigation telemetry.Failure modes
hidden), file-upload lifecycle misbehaves.button.lyra-* → unstyled navigation items and anchors with browser-default underlines/colors.[role=listbox], [role=status], a[href="#"], and tab-order assertions.lyra:change events → silent analytics/guard regressions, no error surfaced.container max keyword mapping → page-level width shifts that look like a design regression rather than a package upgrade.Ramp-up
How can I help you explore Laravel packages today?