CluPilotCloud/resources/views/components/ui
nexxo 0a89695189
tests / pest (push) Failing after 11m6s Details
tests / assets (push) Successful in 20s Details
tests / release (push) Has been skipped Details
R24: a modal is never taller than the screen
A modal grew with its content, so a form ran off the bottom of the window
and took its own save button with it — reachable only by scrolling the page
BEHIND the backdrop, which on a phone means not reachable at all. The
customer form with its eight fields is what made it obvious, but it was
true of every long modal in the console.

Two halves. The panel is capped once, in the published package view, so no
modal can opt out of it and none has to remember to: max-h in dvh rather
than vh, because on a phone the browser's own chrome counts towards vh and
that is exactly the case where the last centimetre decides whether the
button can be reached. And x-ui.modal is the other half — a header slot, a
scrolling body, a footer slot. min-h-0 on the body is the line that makes it
work: a flex child will not shrink below its content without it, and the
overflow never engages.

Fourteen modals converted: the ones that carry a field, which are the ones
that can grow. A two-line confirmation with one button has nothing that
needs to stay put, and the rule says so rather than leaving a footnote —
the test's criterion is the field, so the moment somebody adds an input to a
confirmation it fails and tells them.

A submit button in a footer sits outside the form it submits, so it carries
form="…". That is the price of a footer that does not scroll away, and an
HTML attribute rather than a workaround; there is a test for it, because
without it the button silently does nothing.

Two traps met on the way, both now scanned for. A Blade directive in a
component tag's attribute list (a conditional wire:poll on x-ui.modal)
compiles into the attribute bag and breaks the view outright — the same
mistake as @disabled on x-ui.button, which cost a debugging round earlier
this session; such attributes go on an element of their own. And Pest's
toContain() is variadic, so the second argument I passed as a failure
message was read as another needle: the assertion demanded that a footer
contain its own filename, and failed on a file that was correct.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 23:33:57 +02:00
..
alert.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
badge.blade.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
brand.blade.php Give people a way back in, and put the URL in English 2026-07-29 16:50:29 +02:00
button.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
card.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
chart.blade.php feat(dashboard): rich overview with Chart.js (customer-portal template) 2026-07-25 07:59:19 +02:00
checkbox.blade.php feat(admin): a console for creating, pricing and scheduling plans 2026-07-26 12:41:51 +02:00
delivery.blade.php Quote what a person pays, and tab the settings page 2026-07-29 19:18:10 +02:00
icon.blade.php List issued invoices in the console, with no way to change one 2026-07-29 02:21:15 +02:00
input.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
logo.blade.php feat(brand): CluPilot logo mark + SVG favicon across layouts 2026-07-25 15:31:33 +02:00
metric.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
modal.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
nav-item.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
otp-input.blade.php Give the console a front door of its own 2026-07-28 11:45:22 +02:00
progress-stepper.blade.php feat(portal): Fortify auth + Login/2FA/Dashboard + component kit 2026-07-25 01:20:25 +02:00
ring.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
spark.blade.php Measure what the template draws 2026-07-27 16:29:28 +02:00
stat-tile.blade.php feat(portal): Fortify auth + Login/2FA/Dashboard + component kit 2026-07-25 01:20:25 +02:00