Skip to content

feat: add core overlay UI primitives (Popover, RadioGroup, Dialog, Sheet) - #137

Open
G-ELM wants to merge 4 commits into
ShadeProtocol:mainfrom
G-ELM:feat/tasks
Open

feat: add core overlay UI primitives (Popover, RadioGroup, Dialog, Sheet)#137
G-ELM wants to merge 4 commits into
ShadeProtocol:mainfrom
G-ELM:feat/tasks

Conversation

@G-ELM

@G-ELM G-ELM commented Jul 29, 2026

Copy link
Copy Markdown

Summary

  • Add src/components/ui/popover.tsx — anchored, non-modal popover built on
    @radix-ui/react-popover, for contextual panels like a wallet-address QR
    preview or an inline filter panel.
  • Add src/components/ui/radio-group.tsx — controllable single-select radio
    group built on @radix-ui/react-radio-group, for choices like the planned
    SubscriptionForm billing interval (Daily/Weekly/Monthly/Yearly).
  • Add src/components/ui/dialog.tsx — modal dialog built on the existing
    @radix-ui/react-dialog dependency, with Trigger, Content, Header, Footer,
    Title, Description, and overlay/close behaviors, for upcoming invoice
    cancellation confirmation, share invoice modal, and API key deletion flows.
  • Add src/components/ui/sheet.tsx — slide-out drawer built on
    @radix-ui/react-dialog with tw-animate-css slide animations from a
    configurable side (top/bottom/left/right), for the planned mobile
    navigation drawer and future drawers.
  • New dependencies: @radix-ui/react-popover, @radix-ui/react-radio-group.

All components are styled with the app's existing card/border/background
theme tokens (bg-popover, border-border, text-foreground,
text-muted-foreground, etc.) for visual consistency with the rest of the UI.

Test plan

  • Render Popover anchored to a trigger button; confirm it opens/closes
    on outside click and matches card styling in light/dark mode.
  • Render RadioGroup/RadioGroupItem with a controlled value; confirm
    only one option is selectable and state updates via onValueChange.
  • Render a demo Dialog; confirm it traps focus, closes on overlay click
    and Escape, and matches the visual theme.
  • Render Sheet with side="left" | "right" | "bottom"; confirm smooth
    slide in/out and dismissal on overlay click/Escape.

Closes #91
Closes #100
Closes #101
Closes #102

G-ELM added 4 commits July 29, 2026 16:21
Add a lightweight anchored popover primitive (src/components/ui/popover.tsx)
built on @radix-ui/react-popover for non-modal contextual panels such as a
wallet-address QR preview or an inline filter panel, styled to match the
app's card/border theme tokens.
Add a controllable RadioGroup primitive (src/components/ui/radio-group.tsx)
built on @radix-ui/react-radio-group so single-choice inputs, such as the
planned SubscriptionForm billing interval (Daily/Weekly/Monthly/Yearly),
can use a radio group instead of a select.
Add a modal Dialog primitive (src/components/ui/dialog.tsx) built on the
already-installed @radix-ui/react-dialog, exposing DialogTrigger,
DialogContent, DialogHeader, DialogFooter, DialogTitle, and
DialogDescription with overlay/close behaviors. Needed by planned invoice
cancellation confirmation, share invoice modal, and API key deletion flows.
Add a Sheet primitive (src/components/ui/sheet.tsx) built on
@radix-ui/react-dialog with tw-animate-css slide in/out transitions from a
configurable side (top, bottom, left, right). Intended for the planned
mobile navigation drawer and other future slide-out panels.
@drips-wave

drips-wave Bot commented Jul 29, 2026

Copy link
Copy Markdown

@G-ELM Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create Sheet (Slide-out Drawer) Component Create Popover Component Create RadioGroup Component Create Dialog Component

1 participant