From bfcc0439fe86ebb05206a4579f2a653e41c2822b Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Thu, 1 Oct 2026 00:40:04 +0000 Subject: [PATCH] feat: keep every portaled component inside a shadow root Selects, comboboxes, menus, hover cards, context menus and toasts now resolve their teleport target through usePortalTarget like the dialogs already did, and expose a `to` override. The shadow-root container mirrors the nearest dark/light scheme class so dark tokens still apply to portaled content, and `shimmer` no longer hard-codes html.dark. Closes #30 --- AGENTS.md | 4 + packages/design/README.md | 30 +-- .../components/Feedback/FeedbackToasts.vue | 14 +- .../design/components/Form/FormCombobox.vue | 26 +-- .../design/components/Form/FormSelect.vue | 9 +- .../components/Layout/LayoutMenubar.vue | 11 +- .../components/Overlay/OverlayConfirm.vue | 74 +++---- .../components/Overlay/OverlayContextMenu.vue | 9 +- .../components/Overlay/OverlayDrawer.vue | 75 ++++--- .../components/Overlay/OverlayDropdown.vue | 9 +- .../components/Overlay/OverlayDropdownSub.vue | 9 +- .../components/Overlay/OverlayHoverCard.vue | 9 +- .../components/Overlay/OverlayModal.vue | 90 ++++---- packages/design/components/Overview.mdx | 5 + .../components/Utility/ShadowRoot.stories.ts | 145 +++++++++++++ packages/design/composables/portalTarget.ts | 47 ++-- packages/design/test/overlay-portal.test.ts | 66 ------ packages/design/test/portal.test.ts | 200 ++++++++++++++++++ packages/design/test/scroll-fade.test.ts | 2 +- packages/design/unocss/shimmer.ts | 2 +- 20 files changed, 582 insertions(+), 254 deletions(-) create mode 100644 packages/design/components/Utility/ShadowRoot.stories.ts delete mode 100644 packages/design/test/overlay-portal.test.ts create mode 100644 packages/design/test/portal.test.ts diff --git a/AGENTS.md b/AGENTS.md index d1fdc74..e9dc1db 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -13,6 +13,10 @@ still apply). the Phosphor set already installed via `presetIcons`) on a `