Measured entry
tripled-bottom-modal
dialogglassmorphismmotion on file
A client-side React bottom modal that slides over a blurred backdrop and includes focus trapping, Escape dismissal, scroll locking, focus restoration, and reduced-motion handling. It ships as registry source and relies on Framer Motion, Lucide icons, Tailwind theme classes, and a shadcn Button import.



Measured
Every value below was written by the harness on the run that produced the frames above. None of it is derived from the prose.
| Build | OK |
|---|---|
| Mount | OK |
| Console errors | 0 |
| Uncaught page errors | 0 |
| Horizontal overflow | clean at 375, 768, 1440 |
| Axe critical | 0 |
| Axe serious | 0 |
| Axe moderate | 0 |
| Axe minor | 0 |
| Gzip marginal | 72.5 KB (137.9 KB build, 65.4 KB baseline) |
| Bare mode | FAIL |
| Provider required | NO |
| Demo used | written from the component source API |
What the harness recorded
BARE BUILD
✗ Build failed in 1m 21s error during build: [vite:load-fallback] Could not load <sandbox>/src/lib/utils (imported by src/components/ui/button.tsx): ENOENT: no such file or directory, open '<sandbox>/src/lib/utils'
Verdict
A sound, accessible starting point for a focused bottom confirmation modal, with clean responsive behavior in the harness. It is demo-shaped rather than reusable as shipped, and it needs a shadcn-style setup before it can build or mount in a bare React project.
Use it if
- You want a compact confirmation or welcome dialog anchored to the bottom edge.
- Your app already uses shadcn conventions, Tailwind theme tokens, and Framer Motion.
- You prefer an inspectable modal implementation with keyboard and focus behavior in the component itself.
Skip it if
- You need a general-purpose dialog primitive with nested dialogs, portals, or extensive composition APIs.
- You want to avoid the runtime and bundle cost of Framer Motion for a single transition.
- Your design system does not provide shadcn-style aliases, Button plumbing, or matching Tailwind tokens.
- You need the content and actions exposed as props without first refactoring the fixed demo copy.
Install
| Declared dependencies | framer-motion, react, radix-ui |
|---|---|
| Missing on install | none |
| Bare install | fails once the shadcn-style helpers are removed, so it needs that setup |
| Provider | no provider required in the harness |
In a non-shadcn project, add React, Framer Motion, Lucide React, a compatible Button component, the project alias used by the import, and any class-merging utility that Button expects. Also provide Tailwind with the semantic color, border, shadow, backdrop, and focus-ring classes used by the source, or translate those styles to your own system.
Source and credit
This page is a review, not a copy. The component source lives with its author and this site does not republish it. Read the license before you use anything.
Author repository
github.com/moumen-soliman/uitripledAlternatives
Other published entries for the dialog pattern, ordered by what they measured: mounts first, then clean axe scans, then bare-mode passes, then the smaller bundle.
- shadcn-dialogunclassified
- Renders
- YES
- A11y
- 0
- Gzip
- 26.7KB
- Bare
- fail
- Prov
- NO
- 8bitcn-dialogueskeuomorphism
- Renders
- YES
- A11y
- 0
- Gzip
- 34.2KB
- Bare
- fail
- Prov
- NO
- neobrutalism-dialogbrutalism
- Renders
- YES
- A11y
- 0
- Gzip
- 40.5KB
- Bare
- fail
- Prov
- NO
- neobrutalism-ndialogbrutalism
- Renders
- YES
- A11y
- 0
- Gzip
- 40.5KB
- Bare
- fail
- Prov
- NO
- neobrutalism-alert-dialogbrutalism
- Renders
- YES
- A11y
- 0
- Gzip
- 40.7KB
- Bare
- fail
- Prov
- NO
- shadcn-alert-dialogunclassified
- Renders
- YES
- A11y
- 0
- Gzip
- 41.5KB
- Bare
- fail
- Prov
- NO