Product Decisions This Supports
- Choosing a dialog/modal pattern for core flows. The package owns the modal layer (stacking, depth, fullscreen variants), which is the plumbing behind multi-step flows: onboarding, checkout, editor panels, settings, media preview, confirmation chains. PM decision it informs: do we standardize on this modal system for the next few flows, or keep bespoke implementations per feature?
- Nested-flow design. Stacked modals with visual depth scaling imply a product that allows a modal to open on top of a modal. That is a UX decision, not just a technical one — it supports "drill-down without losing context" (e.g. list → record → edit) and it lets us reject full page navigations for short tasks.
- Fullscreen as a first-class layout choice (reinforced by v0.3.31). The fix means a
forceModalFullscreen panel keeps full size at every stack depth instead of shrinking and exposing the page behind it. Practically: fullscreen can now be trusted for data-dense or mobile-critical surfaces (long forms, tables, editors) even when other modals are open. That unlocks "fullscreen for complex, stacked sheet for simple" as a deliberate rule rather than a workaround.
- Build vs buy for UI infrastructure. Dialog infrastructure looks trivial and never is: focus trapping, escape/backdrop behavior, scroll locking, z-index and stacking order, animation state, mobile viewport quirks. Adopting a package converts weeks of design-system work into a dependency decision — a roadmap trade, not a code trade.
- Roadmap sequencing. Because modal behavior is centralized, later bets (guided tours, in-context editing, wizard-based onboarding, in-app announcements) become configuration rather than new UI engineering. That raises the expected value of scheduling those features earlier.
- Scope discipline. A small, single-purpose package signals that modal concerns stay isolated. PM can insist product requirements (depth behavior, fullscreen rules) live in a documented UX convention rather than being re-litigated per feature.
When to Consider This Package
Consider it when:
- The product is a Laravel/PHP app rendering modals server-side or via Blade/Livewire-style templates, and the team wants modal behavior handled once rather than per feature.
- The roadmap contains genuinely nested flows (modal opening a modal) and you want defined depth/scaling semantics instead of ad-hoc z-index patches.
- You need a fullscreen modal variant for mobile or data-heavy screens, and you want it to behave predictably when other modals are open.
- The team has no design-system owner and no appetite to build and maintain dialog primitives (focus management, scroll lock, escape handling) in-house.
- You can absorb a fast-moving pre-1.0 dependency: pin the version, read changelogs, and treat upgrades as scheduled work.
Look elsewhere when:
- You need a formally accessible, audited dialog implementation with documented WCAG conformance, screen-reader testing evidence, and an accessibility owner sign-off. This assessment has no such evidence; assume you must verify focus order, labeling, and keyboard behavior yourself.
- The product needs broader overlay primitives — drawers, popovers, tooltips, command palettes, toasts — as one coherent system. A single-purpose modal package will leave those to other tools and you may prefer one design system instead of three.
- You require an API stability guarantee, LTS, or vendor support/SLA. A 0.x version line implies breaking changes are permitted; that is a real cost for a surface every flow depends on.
- The stack is not Laravel/PHP, or modals are client-rendered by a JS framework where a native
<dialog>-based approach fits better.
- Modal usage is minimal (one or two confirmations). Then the dependency, upgrade attention, and abstraction cost exceed the benefit.
Caveats on this assessment: the only evidence reviewed is a release note for v0.3.31, which is a narrow bug fix with no new features, deprecations, or breaking changes. There has been no code audit, no documentation review, no accessibility check, and no maintainer/activity assessment. Treat the above as directional and gate adoption on a short spike.
How to Pitch It (Stakeholders)
For executives: We can stop hand-building modal windows in every feature and use a small, focused library instead. That removes a recurring chunk of front-end work from the roadmap, standardizes how our in-app flows look and behave, and reduces the "each screen behaves slightly differently" quality problem that generates support tickets. Cost is a dependency on a pre-1.0 open-source package: low cash cost, some ongoing upgrade attention. Risk is contained because it is one UI layer and can be replaced. Ask: approve a timeboxed spike, not a permanent commitment.
For engineering: It centralizes dialog behavior — stacking order, depth scaling, fullscreen panels — behind one API instead of per-feature hacks. The latest release (v0.3.31) is a focused fix: fullscreen panels no longer shrink when stacked, so they hold full size at any depth and stop leaking the page behind them. That removes a class of visual bugs in nested flows and makes fullscreen safe for dense forms. No breaking changes, no new API, no migrations in this release — upgrading is low-risk. Two conditions: pin the version and review each changelog before bumping, since 0.x permits breaking changes; and run our own accessibility pass on focus trapping, escape/backdrop behavior, and labeling, because we cannot assume it from release notes alone.
Recommended next step: one sprint-week spike — two real flows (one nested, one fullscreen-on-mobile), measured against our accessibility checklist and a written UX convention for when fullscreen vs stacked applies. Decide adopt-or-not on that evidence, then document the version pin and upgrade policy.