Skip to content

feat(popover): add Popover component#1748

Draft
te6-in wants to merge 8 commits into
devfrom
feat/popover
Draft

feat(popover): add Popover component#1748
te6-in wants to merge 8 commits into
devfrom
feat/popover

Conversation

@te6-in

@te6-in te6-in commented Jul 1, 2026

Copy link
Copy Markdown
Member

No description provided.

@changeset-bot

changeset-bot Bot commented Jul 1, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 7e2051f

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4a1a7c26-eb84-4953-9ee2-293e28088d83

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/popover

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Alpha Preview (Stackflow SPA)

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Alpha Preview (Storybook)

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Alpha Preview (Docs)

@te6-in te6-in changed the title feat(popover): add Popover component (rootage/recipe/styled) feat(popover): add Popover component Jul 1, 2026
te6-in and others added 6 commits July 20, 2026 18:16
Floating container Popover anchored to a trigger, with Header/Body/Footer
modeled on Side Panel and Menu-style safe-area/viewport clamping. Built on
the existing @seed-design/react-popover headless.

- rootage: popover + popover-close-button component specs (no size variant;
  content min-width 320, max-width 480, max-height 600)
- css/qvism-preset: popover slot recipe; content shrinks to the available
  viewport height, body owns the scroll divider + fog
- react-floating: emit --seed-popover-available-height and add an opt-in
  safeAreaAware collision padding (ported from useMenu); off by default so
  Tooltip/HelpBubble placement is unchanged
- react: styled Popover compound (Root/Trigger/Anchor/Positioner/Content/
  Header/Title/Description/Body/Footer/CloseButton, Arrow placeholder)
- docs: registry snippet, examples, mdx; Storybook story; stackflow-spa
  ActivityPopover

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add headless PopoverContent/Title/Description parts
- Move role="dialog" from the positioner to the content box
- Trap and loop focus within the content via Radix FocusScope (Radix/Ark
  parity), focusing the content container on open and returning focus to the
  trigger on close; keeps non-modal (no background inert/scroll lock)
- Wire presence-aware aria-labelledby/describedby in the hook (useField pattern)
  so a title-less popover never emits a dangling reference
- Add stackflow-spa a11y playground (ActivityPopoverPlayground)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
On WebKit before the guaranteed-invalid fix (Safari <16.4), a custom
property chain resolving to guaranteed-invalid inherits the ancestor
value instead of resetting (https://webkit.org/b/241433). Same fix as
d71f402 applied to side-panel and others; the popover branch predates
that sweep.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wire the width StyleProp on the content slot (auto default through the
box responsive vars, still capped by maxWidth/available-width), and drop
height/minHeight/maxHeight from PopoverContentProps — they were never
read by the recipe, so they type-checked but did nothing. Content height
stays governed by the body plus the design cap.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
te6-in and others added 2 commits July 20, 2026 18:43
The body is a scroll container, so browsers can give it keyboard focus
when it overflows. Same fix as 7127a1f applied to SidePanelBody; the
popover branch predates it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Merge symmetric paddingLeft/paddingRight pairs in the header, body, and
footer slots into paddingInline, following the ceec001 sweep the
popover branch predates. Asymmetric and single-side declarations stay
physical per the same convention.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

1 participant