pentiminax/ux-driver
A lightweight Laravel package that brings a driver-based approach to UX features, letting you define and swap user-experience behaviors through clean, configurable drivers. Integrates with Blade and Laravel's service container to keep interface logic organized, reusable, and easy to test.
Html\DriverOptions sink list and the single Model\Options pipeline turn "add a driver.js option" from a four-call-site hunt into a one-line change. That is a concrete reduction in the lead time for any future "support option X" request, and worth noting when estimating upcoming tour customization asks.StimulusContractTest parsing assets/src/ to fail the build when PHP and JS attribute names drift is the kind of thing you want to see before betting on a pre-1.0 dependency. It converts a class of silent runtime breakage into a red suite — relevant to any decision to depend on this in a customer-facing surface.Consider it when:
Look elsewhere when:
Driver:Step / Driver:Hint templates. This release removed Step::titleHtml(), descriptionHtml(), sideValue(), alignValue() (and Hint equivalents) from the Twig components; the escaping now lives on Model\Step / Model\Hint. Shipped templates are fine, custom ones must be migrated. Combined with Model\Hint::$element becoming nullable and getElement(): ?string, this is a real if small migration — budget a half-day of template review, not a sprint.To executives (one paragraph): We evaluated the Symfony UX Driver bundle at v0.2.0 as the mechanism for in-product onboarding tours and tooltips. This release adds no user-facing features — it is an internal cleanup that removes duplicated code across the Twig components, Twig builders and PHP builders. Its business value is narrower but real: it lowers the cost and risk of every future tour customization, and it adds automated tests that catch PHP/JS contract drift before it reaches customers. Recommendation: viable for a Symfony/Twig product, inappropriate for a Laravel one. Cost is low, vendor risk is zero, but it is pre-1.0 and should be pinned.
To engineering: No new API surface to adopt and no functional change on the happy path. Three things to know: (1) a <twig:Driver:Tour> no longer serializes animate, smoothScroll and allowClose unless explicitly set — the previously pinned values were driver.js defaults, so rendered behavior is identical, only the payload is shorter; showProgress is still forced true, now via Model\Tour::DEFAULTS. (2) Model\Hint::$element is nullable and getElement() returns ?string; the builder path is unchanged since Hints::addHint() still requires it. (3) The titleHtml() / descriptionHtml() / sideValue() / alignValue() helpers are gone from the Twig components — call Model\Step / Model\Hint instead. New public API (Model\Options, Enum\Normalizer, Model\OverlayOptions, Html\DriverOptions, StimulusContract, Tour::options(), Hints::options(), Hint::BEACON_OPTIONS) is worth knowing because it is where you extend options from now on — one entry in the per-type option table, not a new branch. Requirements are unchanged, so no dependency work.
To the product team: Nothing you can ship differently this sprint. The one process change worth adopting: when a tour needs a driver.js option the wrapper doesn't expose, the ask is now a small, well-scoped change rather than a refactor — treat those requests as normal backlog items instead of blocked-by-dependency items.
How can I help you explore Laravel packages today?