@wordpress/ui 0.11.1-next.v.202604091042.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -1
- package/CONTRIBUTING.md +124 -0
- package/README.md +17 -9
- package/build/alert-dialog/index.cjs +3 -0
- package/build/alert-dialog/index.cjs.map +2 -2
- package/build/alert-dialog/popup.cjs +120 -55
- package/build/alert-dialog/popup.cjs.map +3 -3
- package/build/alert-dialog/portal.cjs +38 -0
- package/build/alert-dialog/portal.cjs.map +7 -0
- package/build/alert-dialog/types.cjs.map +1 -1
- package/build/badge/badge.cjs +14 -14
- package/build/badge/badge.cjs.map +2 -2
- package/build/button/button.cjs +6 -6
- package/build/button/button.cjs.map +2 -2
- package/build/card/content.cjs +4 -4
- package/build/card/content.cjs.map +2 -2
- package/build/card/full-bleed.cjs +4 -4
- package/build/card/full-bleed.cjs.map +2 -2
- package/build/card/header.cjs +4 -4
- package/build/card/header.cjs.map +2 -2
- package/build/card/root.cjs +4 -4
- package/build/card/root.cjs.map +2 -2
- package/build/card/title.cjs +5 -25
- package/build/card/title.cjs.map +4 -4
- package/build/collapsible-card/content.cjs +9 -5
- package/build/collapsible-card/content.cjs.map +2 -2
- package/build/collapsible-card/header.cjs +14 -4
- package/build/collapsible-card/header.cjs.map +3 -3
- package/build/dialog/content.cjs +85 -0
- package/build/dialog/content.cjs.map +7 -0
- package/build/dialog/context.cjs +12 -44
- package/build/dialog/context.cjs.map +2 -2
- package/build/dialog/description.cjs +59 -0
- package/build/dialog/description.cjs.map +7 -0
- package/build/dialog/footer.cjs +5 -4
- package/build/dialog/footer.cjs.map +2 -2
- package/build/dialog/header.cjs +5 -4
- package/build/dialog/header.cjs.map +2 -2
- package/build/dialog/index.cjs +9 -0
- package/build/dialog/index.cjs.map +2 -2
- package/build/dialog/popup.cjs +21 -8
- package/build/dialog/popup.cjs.map +2 -2
- package/build/dialog/portal.cjs +38 -0
- package/build/dialog/portal.cjs.map +7 -0
- package/build/dialog/root.cjs +3 -2
- package/build/dialog/root.cjs.map +2 -2
- package/build/dialog/title.cjs +16 -22
- package/build/dialog/title.cjs.map +3 -3
- package/build/dialog/types.cjs.map +1 -1
- package/build/drawer/action.cjs +48 -0
- package/build/drawer/action.cjs.map +7 -0
- package/build/drawer/close-icon.cjs +58 -0
- package/build/drawer/close-icon.cjs.map +7 -0
- package/build/drawer/content.cjs +86 -0
- package/build/drawer/content.cjs.map +7 -0
- package/build/drawer/context.cjs +44 -0
- package/build/drawer/context.cjs.map +7 -0
- package/build/drawer/description.cjs +47 -0
- package/build/drawer/description.cjs.map +7 -0
- package/build/drawer/footer.cjs +65 -0
- package/build/drawer/footer.cjs.map +7 -0
- package/build/drawer/header.cjs +65 -0
- package/build/drawer/header.cjs.map +7 -0
- package/build/drawer/index.cjs +61 -0
- package/build/drawer/index.cjs.map +7 -0
- package/build/drawer/popup.cjs +103 -0
- package/build/drawer/popup.cjs.map +7 -0
- package/build/drawer/portal.cjs +38 -0
- package/build/drawer/portal.cjs.map +7 -0
- package/build/drawer/root.cjs +49 -0
- package/build/drawer/root.cjs.map +7 -0
- package/build/drawer/title.cjs +70 -0
- package/build/drawer/title.cjs.map +7 -0
- package/build/drawer/trigger.cjs +38 -0
- package/build/drawer/trigger.cjs.map +7 -0
- package/build/drawer/types.cjs +19 -0
- package/build/drawer/types.cjs.map +7 -0
- package/build/empty-state/actions.cjs +3 -3
- package/build/empty-state/actions.cjs.map +2 -2
- package/build/empty-state/description.cjs +8 -5
- package/build/empty-state/description.cjs.map +2 -2
- package/build/empty-state/icon.cjs +3 -3
- package/build/empty-state/icon.cjs.map +2 -2
- package/build/empty-state/root.cjs +3 -3
- package/build/empty-state/root.cjs.map +2 -2
- package/build/empty-state/title.cjs +8 -5
- package/build/empty-state/title.cjs.map +2 -2
- package/build/empty-state/visual.cjs +3 -3
- package/build/empty-state/visual.cjs.map +2 -2
- package/build/form/primitives/autocomplete/clear.cjs +62 -0
- package/build/form/primitives/autocomplete/clear.cjs.map +7 -0
- package/build/form/primitives/autocomplete/collection.cjs +38 -0
- package/build/form/primitives/autocomplete/collection.cjs.map +7 -0
- package/build/form/primitives/autocomplete/empty.cjs +67 -0
- package/build/form/primitives/autocomplete/empty.cjs.map +7 -0
- package/build/form/primitives/autocomplete/index.cjs +64 -0
- package/build/form/primitives/autocomplete/index.cjs.map +7 -0
- package/build/form/primitives/autocomplete/input-group.cjs +36 -0
- package/build/form/primitives/autocomplete/input-group.cjs.map +7 -0
- package/build/form/primitives/autocomplete/input.cjs +47 -0
- package/build/form/primitives/autocomplete/input.cjs.map +7 -0
- package/build/form/primitives/autocomplete/item.cjs +81 -0
- package/build/form/primitives/autocomplete/item.cjs.map +7 -0
- package/build/form/primitives/autocomplete/list-body.cjs +57 -0
- package/build/form/primitives/autocomplete/list-body.cjs.map +7 -0
- package/build/form/primitives/autocomplete/list.cjs +67 -0
- package/build/form/primitives/autocomplete/list.cjs.map +7 -0
- package/build/form/primitives/autocomplete/popup.cjs +102 -0
- package/build/form/primitives/autocomplete/popup.cjs.map +7 -0
- package/build/form/primitives/autocomplete/portal.cjs +38 -0
- package/build/form/primitives/autocomplete/portal.cjs.map +7 -0
- package/build/form/primitives/autocomplete/root.cjs +35 -0
- package/build/form/primitives/autocomplete/root.cjs.map +7 -0
- package/build/form/primitives/autocomplete/types.cjs +19 -0
- package/build/form/primitives/autocomplete/types.cjs.map +7 -0
- package/build/form/primitives/autocomplete/value.cjs +35 -0
- package/build/form/primitives/autocomplete/value.cjs.map +7 -0
- package/build/form/primitives/field/description.cjs +6 -6
- package/build/form/primitives/field/description.cjs.map +2 -2
- package/build/form/primitives/field/details.cjs +4 -4
- package/build/form/primitives/field/details.cjs.map +2 -2
- package/build/form/primitives/field/label.cjs +8 -8
- package/build/form/primitives/field/label.cjs.map +2 -2
- package/build/form/primitives/field/root.cjs +2 -2
- package/build/form/primitives/field/root.cjs.map +2 -2
- package/build/form/primitives/fieldset/description.cjs +6 -6
- package/build/form/primitives/fieldset/description.cjs.map +2 -2
- package/build/form/primitives/fieldset/details.cjs +3 -3
- package/build/form/primitives/fieldset/details.cjs.map +2 -2
- package/build/form/primitives/fieldset/legend.cjs +8 -7
- package/build/form/primitives/fieldset/legend.cjs.map +2 -2
- package/build/form/primitives/index.cjs +3 -0
- package/build/form/primitives/index.cjs.map +2 -2
- package/build/form/primitives/input/input.cjs +6 -6
- package/build/form/primitives/input/input.cjs.map +2 -2
- package/build/form/primitives/input-layout/input-layout.cjs +6 -6
- package/build/form/primitives/input-layout/input-layout.cjs.map +2 -2
- package/build/form/primitives/input-layout/slot.cjs +3 -3
- package/build/form/primitives/input-layout/slot.cjs.map +2 -2
- package/build/form/primitives/select/index.cjs +3 -0
- package/build/form/primitives/select/index.cjs.map +2 -2
- package/build/form/primitives/select/item.cjs +4 -5
- package/build/form/primitives/select/item.cjs.map +2 -2
- package/build/form/primitives/select/popup.cjs +12 -11
- package/build/form/primitives/select/popup.cjs.map +2 -2
- package/build/form/primitives/select/portal.cjs +38 -0
- package/build/form/primitives/select/portal.cjs.map +7 -0
- package/build/form/primitives/select/trigger.cjs +3 -3
- package/build/form/primitives/select/trigger.cjs.map +1 -1
- package/build/form/primitives/select/types.cjs.map +1 -1
- package/build/form/primitives/textarea/textarea.cjs +3 -3
- package/build/form/primitives/textarea/textarea.cjs.map +2 -2
- package/build/index.cjs +3 -0
- package/build/index.cjs.map +2 -2
- package/build/link/link.cjs +11 -21
- package/build/link/link.cjs.map +2 -2
- package/build/link/types.cjs.map +1 -1
- package/build/notice/action-button.cjs +3 -3
- package/build/notice/action-button.cjs.map +2 -2
- package/build/notice/action-link.cjs +8 -7
- package/build/notice/action-link.cjs.map +2 -2
- package/build/notice/actions.cjs +3 -3
- package/build/notice/actions.cjs.map +2 -2
- package/build/notice/close-icon.cjs +3 -3
- package/build/notice/close-icon.cjs.map +2 -2
- package/build/notice/description.cjs +3 -3
- package/build/notice/description.cjs.map +2 -2
- package/build/notice/root.cjs +3 -3
- package/build/notice/root.cjs.map +2 -2
- package/build/notice/title.cjs +3 -3
- package/build/notice/title.cjs.map +2 -2
- package/build/popover/arrow.cjs +4 -4
- package/build/popover/arrow.cjs.map +2 -2
- package/build/popover/context.cjs +4 -44
- package/build/popover/context.cjs.map +2 -2
- package/build/popover/description.cjs +2 -25
- package/build/popover/description.cjs.map +4 -4
- package/build/popover/index.cjs +3 -0
- package/build/popover/index.cjs.map +2 -2
- package/build/popover/popup.cjs +15 -15
- package/build/popover/popup.cjs.map +2 -2
- package/build/popover/portal.cjs +38 -0
- package/build/popover/portal.cjs.map +7 -0
- package/build/popover/root.cjs.map +1 -1
- package/build/popover/title.cjs +19 -5
- package/build/popover/title.cjs.map +3 -3
- package/build/popover/types.cjs.map +1 -1
- package/build/tabs/context.cjs +9 -22
- package/build/tabs/context.cjs.map +2 -2
- package/build/tabs/list.cjs +4 -5
- package/build/tabs/list.cjs.map +2 -2
- package/build/tabs/panel.cjs +19 -6
- package/build/tabs/panel.cjs.map +3 -3
- package/build/tabs/tab.cjs +4 -4
- package/build/tabs/tab.cjs.map +2 -2
- package/build/text/text.cjs +8 -8
- package/build/text/text.cjs.map +2 -2
- package/build/tooltip/index.cjs +3 -0
- package/build/tooltip/index.cjs.map +2 -2
- package/build/tooltip/popup.cjs +11 -13
- package/build/tooltip/popup.cjs.map +3 -3
- package/build/tooltip/portal.cjs +38 -0
- package/build/tooltip/portal.cjs.map +7 -0
- package/build/tooltip/provider.cjs +2 -2
- package/build/tooltip/provider.cjs.map +3 -3
- package/build/tooltip/root.cjs.map +3 -3
- package/build/tooltip/trigger.cjs +2 -2
- package/build/tooltip/trigger.cjs.map +3 -3
- package/build/tooltip/types.cjs.map +1 -1
- package/build/utils/create-overlay-modal-context.cjs +48 -0
- package/build/utils/create-overlay-modal-context.cjs.map +7 -0
- package/build/utils/create-overlay-title-validation.cjs +93 -0
- package/build/utils/create-overlay-title-validation.cjs.map +7 -0
- package/build/utils/render-portal-with-children.cjs +37 -0
- package/build/utils/render-portal-with-children.cjs.map +7 -0
- package/build/utils/types.cjs.map +1 -1
- package/build/utils/use-deprioritized-initial-focus.cjs +8 -8
- package/build/utils/use-deprioritized-initial-focus.cjs.map +2 -2
- package/build/utils/use-overlay-scroll-state-attributes.cjs +140 -0
- package/build/utils/use-overlay-scroll-state-attributes.cjs.map +7 -0
- package/build/utils/use-schedule-validation.cjs +59 -0
- package/build/utils/use-schedule-validation.cjs.map +7 -0
- package/build/visually-hidden/visually-hidden.cjs +5 -1
- package/build/visually-hidden/visually-hidden.cjs.map +2 -2
- package/build-module/alert-dialog/index.mjs +2 -0
- package/build-module/alert-dialog/index.mjs.map +2 -2
- package/build-module/alert-dialog/popup.mjs +124 -56
- package/build-module/alert-dialog/popup.mjs.map +3 -3
- package/build-module/alert-dialog/portal.mjs +13 -0
- package/build-module/alert-dialog/portal.mjs.map +7 -0
- package/build-module/badge/badge.mjs +14 -14
- package/build-module/badge/badge.mjs.map +2 -2
- package/build-module/button/button.mjs +6 -6
- package/build-module/button/button.mjs.map +2 -2
- package/build-module/card/content.mjs +4 -4
- package/build-module/card/content.mjs.map +2 -2
- package/build-module/card/full-bleed.mjs +4 -4
- package/build-module/card/full-bleed.mjs.map +2 -2
- package/build-module/card/header.mjs +4 -4
- package/build-module/card/header.mjs.map +2 -2
- package/build-module/card/root.mjs +4 -4
- package/build-module/card/root.mjs.map +2 -2
- package/build-module/card/title.mjs +5 -15
- package/build-module/card/title.mjs.map +3 -3
- package/build-module/collapsible-card/content.mjs +9 -5
- package/build-module/collapsible-card/content.mjs.map +2 -2
- package/build-module/collapsible-card/header.mjs +14 -4
- package/build-module/collapsible-card/header.mjs.map +3 -3
- package/build-module/dialog/content.mjs +50 -0
- package/build-module/dialog/content.mjs.map +7 -0
- package/build-module/dialog/context.mjs +10 -51
- package/build-module/dialog/context.mjs.map +2 -2
- package/build-module/dialog/description.mjs +34 -0
- package/build-module/dialog/description.mjs.map +7 -0
- package/build-module/dialog/footer.mjs +5 -4
- package/build-module/dialog/footer.mjs.map +2 -2
- package/build-module/dialog/header.mjs +5 -4
- package/build-module/dialog/header.mjs.map +2 -2
- package/build-module/dialog/index.mjs +6 -0
- package/build-module/dialog/index.mjs.map +2 -2
- package/build-module/dialog/popup.mjs +23 -10
- package/build-module/dialog/popup.mjs.map +2 -2
- package/build-module/dialog/portal.mjs +13 -0
- package/build-module/dialog/portal.mjs.map +7 -0
- package/build-module/dialog/root.mjs +3 -2
- package/build-module/dialog/root.mjs.map +2 -2
- package/build-module/dialog/title.mjs +17 -13
- package/build-module/dialog/title.mjs.map +2 -2
- package/build-module/drawer/action.mjs +23 -0
- package/build-module/drawer/action.mjs.map +7 -0
- package/build-module/drawer/close-icon.mjs +33 -0
- package/build-module/drawer/close-icon.mjs.map +7 -0
- package/build-module/drawer/content.mjs +51 -0
- package/build-module/drawer/content.mjs.map +7 -0
- package/build-module/drawer/context.mjs +16 -0
- package/build-module/drawer/context.mjs.map +7 -0
- package/build-module/drawer/description.mjs +22 -0
- package/build-module/drawer/description.mjs.map +7 -0
- package/build-module/drawer/footer.mjs +30 -0
- package/build-module/drawer/footer.mjs.map +7 -0
- package/build-module/drawer/header.mjs +30 -0
- package/build-module/drawer/header.mjs.map +7 -0
- package/build-module/drawer/index.mjs +26 -0
- package/build-module/drawer/index.mjs.map +7 -0
- package/build-module/drawer/popup.mjs +70 -0
- package/build-module/drawer/popup.mjs.map +7 -0
- package/build-module/drawer/portal.mjs +13 -0
- package/build-module/drawer/portal.mjs.map +7 -0
- package/build-module/drawer/root.mjs +24 -0
- package/build-module/drawer/root.mjs.map +7 -0
- package/build-module/drawer/title.mjs +45 -0
- package/build-module/drawer/title.mjs.map +7 -0
- package/build-module/drawer/trigger.mjs +13 -0
- package/build-module/drawer/trigger.mjs.map +7 -0
- package/build-module/drawer/types.mjs +1 -0
- package/build-module/empty-state/actions.mjs +3 -3
- package/build-module/empty-state/actions.mjs.map +2 -2
- package/build-module/empty-state/description.mjs +8 -5
- package/build-module/empty-state/description.mjs.map +2 -2
- package/build-module/empty-state/icon.mjs +3 -3
- package/build-module/empty-state/icon.mjs.map +2 -2
- package/build-module/empty-state/root.mjs +3 -3
- package/build-module/empty-state/root.mjs.map +2 -2
- package/build-module/empty-state/title.mjs +8 -5
- package/build-module/empty-state/title.mjs.map +2 -2
- package/build-module/empty-state/visual.mjs +3 -3
- package/build-module/empty-state/visual.mjs.map +2 -2
- package/build-module/form/primitives/autocomplete/clear.mjs +37 -0
- package/build-module/form/primitives/autocomplete/clear.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/collection.mjs +13 -0
- package/build-module/form/primitives/autocomplete/collection.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/empty.mjs +32 -0
- package/build-module/form/primitives/autocomplete/empty.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/index.mjs +28 -0
- package/build-module/form/primitives/autocomplete/index.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/input-group.mjs +11 -0
- package/build-module/form/primitives/autocomplete/input-group.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/input.mjs +22 -0
- package/build-module/form/primitives/autocomplete/input.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/item.mjs +46 -0
- package/build-module/form/primitives/autocomplete/item.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/list-body.mjs +32 -0
- package/build-module/form/primitives/autocomplete/list-body.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/list.mjs +32 -0
- package/build-module/form/primitives/autocomplete/list.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/popup.mjs +69 -0
- package/build-module/form/primitives/autocomplete/popup.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/portal.mjs +13 -0
- package/build-module/form/primitives/autocomplete/portal.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/root.mjs +10 -0
- package/build-module/form/primitives/autocomplete/root.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/types.mjs +1 -0
- package/build-module/form/primitives/autocomplete/value.mjs +10 -0
- package/build-module/form/primitives/autocomplete/value.mjs.map +7 -0
- package/build-module/form/primitives/field/description.mjs +6 -6
- package/build-module/form/primitives/field/description.mjs.map +2 -2
- package/build-module/form/primitives/field/details.mjs +4 -4
- package/build-module/form/primitives/field/details.mjs.map +2 -2
- package/build-module/form/primitives/field/label.mjs +8 -8
- package/build-module/form/primitives/field/label.mjs.map +2 -2
- package/build-module/form/primitives/field/root.mjs +2 -2
- package/build-module/form/primitives/field/root.mjs.map +2 -2
- package/build-module/form/primitives/fieldset/description.mjs +6 -6
- package/build-module/form/primitives/fieldset/description.mjs.map +2 -2
- package/build-module/form/primitives/fieldset/details.mjs +3 -3
- package/build-module/form/primitives/fieldset/details.mjs.map +2 -2
- package/build-module/form/primitives/fieldset/legend.mjs +8 -7
- package/build-module/form/primitives/fieldset/legend.mjs.map +2 -2
- package/build-module/form/primitives/index.mjs +2 -0
- package/build-module/form/primitives/index.mjs.map +2 -2
- package/build-module/form/primitives/input/input.mjs +6 -6
- package/build-module/form/primitives/input/input.mjs.map +2 -2
- package/build-module/form/primitives/input-layout/input-layout.mjs +6 -6
- package/build-module/form/primitives/input-layout/input-layout.mjs.map +2 -2
- package/build-module/form/primitives/input-layout/slot.mjs +3 -3
- package/build-module/form/primitives/input-layout/slot.mjs.map +2 -2
- package/build-module/form/primitives/select/index.mjs +2 -0
- package/build-module/form/primitives/select/index.mjs.map +2 -2
- package/build-module/form/primitives/select/item.mjs +4 -5
- package/build-module/form/primitives/select/item.mjs.map +2 -2
- package/build-module/form/primitives/select/popup.mjs +12 -11
- package/build-module/form/primitives/select/popup.mjs.map +2 -2
- package/build-module/form/primitives/select/portal.mjs +13 -0
- package/build-module/form/primitives/select/portal.mjs.map +7 -0
- package/build-module/form/primitives/select/trigger.mjs +3 -3
- package/build-module/form/primitives/select/trigger.mjs.map +1 -1
- package/build-module/form/primitives/textarea/textarea.mjs +3 -3
- package/build-module/form/primitives/textarea/textarea.mjs.map +2 -2
- package/build-module/index.mjs +2 -0
- package/build-module/index.mjs.map +2 -2
- package/build-module/link/link.mjs +11 -21
- package/build-module/link/link.mjs.map +2 -2
- package/build-module/notice/action-button.mjs +3 -3
- package/build-module/notice/action-button.mjs.map +2 -2
- package/build-module/notice/action-link.mjs +8 -7
- package/build-module/notice/action-link.mjs.map +2 -2
- package/build-module/notice/actions.mjs +3 -3
- package/build-module/notice/actions.mjs.map +2 -2
- package/build-module/notice/close-icon.mjs +3 -3
- package/build-module/notice/close-icon.mjs.map +2 -2
- package/build-module/notice/description.mjs +3 -3
- package/build-module/notice/description.mjs.map +2 -2
- package/build-module/notice/root.mjs +3 -3
- package/build-module/notice/root.mjs.map +2 -2
- package/build-module/notice/title.mjs +3 -3
- package/build-module/notice/title.mjs.map +2 -2
- package/build-module/popover/arrow.mjs +4 -4
- package/build-module/popover/arrow.mjs.map +2 -2
- package/build-module/popover/context.mjs +4 -51
- package/build-module/popover/context.mjs.map +2 -2
- package/build-module/popover/description.mjs +2 -15
- package/build-module/popover/description.mjs.map +3 -3
- package/build-module/popover/index.mjs +2 -0
- package/build-module/popover/index.mjs.map +2 -2
- package/build-module/popover/popup.mjs +16 -16
- package/build-module/popover/popup.mjs.map +2 -2
- package/build-module/popover/portal.mjs +13 -0
- package/build-module/popover/portal.mjs.map +7 -0
- package/build-module/popover/root.mjs.map +1 -1
- package/build-module/popover/title.mjs +20 -6
- package/build-module/popover/title.mjs.map +3 -3
- package/build-module/tabs/context.mjs +11 -24
- package/build-module/tabs/context.mjs.map +2 -2
- package/build-module/tabs/list.mjs +4 -5
- package/build-module/tabs/list.mjs.map +2 -2
- package/build-module/tabs/panel.mjs +19 -6
- package/build-module/tabs/panel.mjs.map +3 -3
- package/build-module/tabs/tab.mjs +4 -4
- package/build-module/tabs/tab.mjs.map +2 -2
- package/build-module/text/text.mjs +8 -8
- package/build-module/text/text.mjs.map +2 -2
- package/build-module/tooltip/index.mjs +2 -0
- package/build-module/tooltip/index.mjs.map +2 -2
- package/build-module/tooltip/popup.mjs +14 -16
- package/build-module/tooltip/popup.mjs.map +2 -2
- package/build-module/tooltip/portal.mjs +13 -0
- package/build-module/tooltip/portal.mjs.map +7 -0
- package/build-module/tooltip/provider.mjs +3 -3
- package/build-module/tooltip/provider.mjs.map +2 -2
- package/build-module/tooltip/root.mjs +2 -2
- package/build-module/tooltip/root.mjs.map +2 -2
- package/build-module/tooltip/trigger.mjs +3 -3
- package/build-module/tooltip/trigger.mjs.map +2 -2
- package/build-module/utils/create-overlay-modal-context.mjs +23 -0
- package/build-module/utils/create-overlay-modal-context.mjs.map +7 -0
- package/build-module/utils/create-overlay-title-validation.mjs +75 -0
- package/build-module/utils/create-overlay-title-validation.mjs.map +7 -0
- package/build-module/utils/render-portal-with-children.mjs +12 -0
- package/build-module/utils/render-portal-with-children.mjs.map +7 -0
- package/build-module/utils/use-deprioritized-initial-focus.mjs +9 -9
- package/build-module/utils/use-deprioritized-initial-focus.mjs.map +2 -2
- package/build-module/utils/use-overlay-scroll-state-attributes.mjs +114 -0
- package/build-module/utils/use-overlay-scroll-state-attributes.mjs.map +7 -0
- package/build-module/utils/use-schedule-validation.mjs +34 -0
- package/build-module/utils/use-schedule-validation.mjs.map +7 -0
- package/build-module/visually-hidden/visually-hidden.mjs +5 -1
- package/build-module/visually-hidden/visually-hidden.mjs.map +2 -2
- package/build-types/alert-dialog/index.d.ts +1 -0
- package/build-types/alert-dialog/index.d.ts.map +1 -1
- package/build-types/alert-dialog/popup.d.ts.map +1 -1
- package/build-types/alert-dialog/portal.d.ts +9 -0
- package/build-types/alert-dialog/portal.d.ts.map +1 -0
- package/build-types/alert-dialog/stories/index.story.d.ts +29 -1
- package/build-types/alert-dialog/stories/index.story.d.ts.map +1 -1
- package/build-types/alert-dialog/types.d.ts +27 -1
- package/build-types/alert-dialog/types.d.ts.map +1 -1
- package/build-types/badge/badge.d.ts.map +1 -1
- package/build-types/badge/stories/index.story.d.ts.map +1 -1
- package/build-types/card/stories/index.story.d.ts.map +1 -1
- package/build-types/card/title.d.ts.map +1 -1
- package/build-types/collapsible/panel.d.ts +2 -1
- package/build-types/collapsible/panel.d.ts.map +1 -1
- package/build-types/collapsible/root.d.ts +2 -1
- package/build-types/collapsible/root.d.ts.map +1 -1
- package/build-types/collapsible/stories/index.story.d.ts.map +1 -1
- package/build-types/collapsible/trigger.d.ts +2 -1
- package/build-types/collapsible/trigger.d.ts.map +1 -1
- package/build-types/collapsible-card/content.d.ts.map +1 -1
- package/build-types/collapsible-card/header.d.ts.map +1 -1
- package/build-types/collapsible-card/stories/index.story.d.ts.map +1 -1
- package/build-types/dialog/content.d.ts +17 -0
- package/build-types/dialog/content.d.ts.map +1 -0
- package/build-types/dialog/context.d.ts +11 -16
- package/build-types/dialog/context.d.ts.map +1 -1
- package/build-types/dialog/description.d.ts +9 -0
- package/build-types/dialog/description.d.ts.map +1 -0
- package/build-types/dialog/footer.d.ts +8 -1
- package/build-types/dialog/footer.d.ts.map +1 -1
- package/build-types/dialog/header.d.ts +8 -1
- package/build-types/dialog/header.d.ts.map +1 -1
- package/build-types/dialog/index.d.ts +4 -1
- package/build-types/dialog/index.d.ts.map +1 -1
- package/build-types/dialog/popup.d.ts +3 -0
- package/build-types/dialog/popup.d.ts.map +1 -1
- package/build-types/dialog/portal.d.ts +10 -0
- package/build-types/dialog/portal.d.ts.map +1 -0
- package/build-types/dialog/root.d.ts +14 -4
- package/build-types/dialog/root.d.ts.map +1 -1
- package/build-types/dialog/stories/index.story.d.ts +37 -6
- package/build-types/dialog/stories/index.story.d.ts.map +1 -1
- package/build-types/dialog/title.d.ts +12 -2
- package/build-types/dialog/title.d.ts.map +1 -1
- package/build-types/dialog/types.d.ts +66 -6
- package/build-types/dialog/types.d.ts.map +1 -1
- package/build-types/drawer/action.d.ts +8 -0
- package/build-types/drawer/action.d.ts.map +1 -0
- package/build-types/drawer/close-icon.d.ts +8 -0
- package/build-types/drawer/close-icon.d.ts.map +1 -0
- package/build-types/drawer/content.d.ts +21 -0
- package/build-types/drawer/content.d.ts.map +1 -0
- package/build-types/drawer/context.d.ts +20 -0
- package/build-types/drawer/context.d.ts.map +1 -0
- package/build-types/drawer/description.d.ts +9 -0
- package/build-types/drawer/description.d.ts.map +1 -0
- package/build-types/drawer/footer.d.ts +15 -0
- package/build-types/drawer/footer.d.ts.map +1 -0
- package/build-types/drawer/header.d.ts +15 -0
- package/build-types/drawer/header.d.ts.map +1 -0
- package/build-types/drawer/index.d.ts +13 -0
- package/build-types/drawer/index.d.ts.map +1 -0
- package/build-types/drawer/popup.d.ts +16 -0
- package/build-types/drawer/popup.d.ts.map +1 -0
- package/build-types/drawer/portal.d.ts +10 -0
- package/build-types/drawer/portal.d.ts.map +1 -0
- package/build-types/drawer/root.d.ts +21 -0
- package/build-types/drawer/root.d.ts.map +1 -0
- package/build-types/drawer/stories/index.story.d.ts +63 -0
- package/build-types/drawer/stories/index.story.d.ts.map +1 -0
- package/build-types/drawer/test/index.test.d.ts +2 -0
- package/build-types/drawer/test/index.test.d.ts.map +1 -0
- package/build-types/drawer/title.d.ts +22 -0
- package/build-types/drawer/title.d.ts.map +1 -0
- package/build-types/drawer/trigger.d.ts +7 -0
- package/build-types/drawer/trigger.d.ts.map +1 -0
- package/build-types/drawer/types.d.ts +146 -0
- package/build-types/drawer/types.d.ts.map +1 -0
- package/build-types/empty-state/description.d.ts.map +1 -1
- package/build-types/empty-state/stories/index.story.d.ts +1 -1
- package/build-types/empty-state/stories/index.story.d.ts.map +1 -1
- package/build-types/empty-state/title.d.ts.map +1 -1
- package/build-types/form/input-control/stories/index.story.d.ts +1 -1
- package/build-types/form/input-control/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/autocomplete/clear.d.ts +13 -0
- package/build-types/form/primitives/autocomplete/clear.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/collection.d.ts +3 -0
- package/build-types/form/primitives/autocomplete/collection.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/empty.d.ts +10 -0
- package/build-types/form/primitives/autocomplete/empty.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/index.d.ts +13 -0
- package/build-types/form/primitives/autocomplete/index.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/input-group.d.ts +16 -0
- package/build-types/form/primitives/autocomplete/input-group.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/input.d.ts +3 -0
- package/build-types/form/primitives/autocomplete/input.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/item.d.ts +10 -0
- package/build-types/form/primitives/autocomplete/item.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/list-body.d.ts +13 -0
- package/build-types/form/primitives/autocomplete/list-body.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/list.d.ts +11 -0
- package/build-types/form/primitives/autocomplete/list.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/popup.d.ts +11 -0
- package/build-types/form/primitives/autocomplete/popup.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/portal.d.ts +8 -0
- package/build-types/form/primitives/autocomplete/portal.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/root.d.ts +8 -0
- package/build-types/form/primitives/autocomplete/root.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/stories/fixtures.d.ts +8 -0
- package/build-types/form/primitives/autocomplete/stories/fixtures.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/stories/index.story.d.ts +41 -0
- package/build-types/form/primitives/autocomplete/stories/index.story.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/test/index.test.d.ts +2 -0
- package/build-types/form/primitives/autocomplete/test/index.test.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/types.d.ts +44 -0
- package/build-types/form/primitives/autocomplete/types.d.ts.map +1 -0
- package/build-types/form/primitives/autocomplete/value.d.ts +3 -0
- package/build-types/form/primitives/autocomplete/value.d.ts.map +1 -0
- package/build-types/form/primitives/field/description.d.ts +2 -1
- package/build-types/form/primitives/field/description.d.ts.map +1 -1
- package/build-types/form/primitives/field/details.d.ts +2 -1
- package/build-types/form/primitives/field/details.d.ts.map +1 -1
- package/build-types/form/primitives/field/label.d.ts +2 -1
- package/build-types/form/primitives/field/label.d.ts.map +1 -1
- package/build-types/form/primitives/field/stories/index.story.d.ts +1 -1
- package/build-types/form/primitives/field/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/fieldset/description.d.ts +2 -1
- package/build-types/form/primitives/fieldset/description.d.ts.map +1 -1
- package/build-types/form/primitives/fieldset/details.d.ts +2 -1
- package/build-types/form/primitives/fieldset/details.d.ts.map +1 -1
- package/build-types/form/primitives/fieldset/legend.d.ts +2 -1
- package/build-types/form/primitives/fieldset/legend.d.ts.map +1 -1
- package/build-types/form/primitives/fieldset/root.d.ts +2 -1
- package/build-types/form/primitives/fieldset/root.d.ts.map +1 -1
- package/build-types/form/primitives/fieldset/stories/index.story.d.ts +1 -1
- package/build-types/form/primitives/fieldset/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/index.d.ts +1 -0
- package/build-types/form/primitives/index.d.ts.map +1 -1
- package/build-types/form/primitives/input/stories/index.story.d.ts +1 -1
- package/build-types/form/primitives/input/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/input-layout/stories/index.story.d.ts +1 -1
- package/build-types/form/primitives/input-layout/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/select/index.d.ts +1 -0
- package/build-types/form/primitives/select/index.d.ts.map +1 -1
- package/build-types/form/primitives/select/item.d.ts +6 -2
- package/build-types/form/primitives/select/item.d.ts.map +1 -1
- package/build-types/form/primitives/select/popup.d.ts +10 -1
- package/build-types/form/primitives/select/popup.d.ts.map +1 -1
- package/build-types/form/primitives/select/portal.d.ts +8 -0
- package/build-types/form/primitives/select/portal.d.ts.map +1 -0
- package/build-types/form/primitives/select/stories/index.story.d.ts +14 -6
- package/build-types/form/primitives/select/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/select/trigger.d.ts +12 -2
- package/build-types/form/primitives/select/trigger.d.ts.map +1 -1
- package/build-types/form/primitives/select/types.d.ts +18 -3
- package/build-types/form/primitives/select/types.d.ts.map +1 -1
- package/build-types/index.d.ts +1 -0
- package/build-types/index.d.ts.map +1 -1
- package/build-types/link/link.d.ts.map +1 -1
- package/build-types/link/stories/index.story.d.ts +2 -3
- package/build-types/link/stories/index.story.d.ts.map +1 -1
- package/build-types/link/types.d.ts +1 -2
- package/build-types/link/types.d.ts.map +1 -1
- package/build-types/notice/action-link.d.ts.map +1 -1
- package/build-types/popover/context.d.ts +6 -13
- package/build-types/popover/context.d.ts.map +1 -1
- package/build-types/popover/description.d.ts +0 -1
- package/build-types/popover/description.d.ts.map +1 -1
- package/build-types/popover/index.d.ts +2 -1
- package/build-types/popover/index.d.ts.map +1 -1
- package/build-types/popover/popup.d.ts +3 -2
- package/build-types/popover/popup.d.ts.map +1 -1
- package/build-types/popover/portal.d.ts +9 -0
- package/build-types/popover/portal.d.ts.map +1 -0
- package/build-types/popover/root.d.ts +2 -2
- package/build-types/popover/stories/index.story.d.ts +24 -16
- package/build-types/popover/stories/index.story.d.ts.map +1 -1
- package/build-types/popover/title.d.ts.map +1 -1
- package/build-types/popover/types.d.ts +8 -15
- package/build-types/popover/types.d.ts.map +1 -1
- package/build-types/stack/stories/index.story.d.ts.map +1 -1
- package/build-types/tabs/context.d.ts.map +1 -1
- package/build-types/tabs/list.d.ts +2 -1
- package/build-types/tabs/list.d.ts.map +1 -1
- package/build-types/tabs/panel.d.ts +2 -1
- package/build-types/tabs/panel.d.ts.map +1 -1
- package/build-types/tabs/root.d.ts +2 -1
- package/build-types/tabs/root.d.ts.map +1 -1
- package/build-types/tabs/stories/index.story.d.ts +1 -1
- package/build-types/tabs/stories/index.story.d.ts.map +1 -1
- package/build-types/tabs/tab.d.ts +2 -1
- package/build-types/tabs/tab.d.ts.map +1 -1
- package/build-types/text/stories/index.story.d.ts.map +1 -1
- package/build-types/tooltip/index.d.ts +2 -1
- package/build-types/tooltip/index.d.ts.map +1 -1
- package/build-types/tooltip/popup.d.ts.map +1 -1
- package/build-types/tooltip/portal.d.ts +8 -0
- package/build-types/tooltip/portal.d.ts.map +1 -0
- package/build-types/tooltip/provider.d.ts +1 -1
- package/build-types/tooltip/provider.d.ts.map +1 -1
- package/build-types/tooltip/root.d.ts +9 -8
- package/build-types/tooltip/root.d.ts.map +1 -1
- package/build-types/tooltip/stories/index.story.d.ts +18 -1
- package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
- package/build-types/tooltip/stories/usage-guidelines.story.d.ts +21 -0
- package/build-types/tooltip/stories/usage-guidelines.story.d.ts.map +1 -0
- package/build-types/tooltip/trigger.d.ts.map +1 -1
- package/build-types/tooltip/types.d.ts +13 -5
- package/build-types/tooltip/types.d.ts.map +1 -1
- package/build-types/utils/create-overlay-modal-context.d.ts +14 -0
- package/build-types/utils/create-overlay-modal-context.d.ts.map +1 -0
- package/build-types/utils/create-overlay-title-validation.d.ts +15 -0
- package/build-types/utils/create-overlay-title-validation.d.ts.map +1 -0
- package/build-types/utils/render-portal-with-children.d.ts +16 -0
- package/build-types/utils/render-portal-with-children.d.ts.map +1 -0
- package/build-types/utils/types.d.ts +6 -2
- package/build-types/utils/types.d.ts.map +1 -1
- package/build-types/utils/use-deprioritized-initial-focus.d.ts +9 -8
- package/build-types/utils/use-deprioritized-initial-focus.d.ts.map +1 -1
- package/build-types/utils/use-overlay-scroll-state-attributes.d.ts +85 -0
- package/build-types/utils/use-overlay-scroll-state-attributes.d.ts.map +1 -0
- package/build-types/utils/use-schedule-validation.d.ts +13 -0
- package/build-types/utils/use-schedule-validation.d.ts.map +1 -0
- package/build-types/visually-hidden/stories/index.story.d.ts +7 -0
- package/build-types/visually-hidden/stories/index.story.d.ts.map +1 -1
- package/build-types/visually-hidden/visually-hidden.d.ts +18 -0
- package/build-types/visually-hidden/visually-hidden.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/alert-dialog/index.ts +1 -0
- package/src/alert-dialog/popup.tsx +114 -45
- package/src/alert-dialog/portal.tsx +17 -0
- package/src/alert-dialog/stories/index.story.tsx +123 -3
- package/src/alert-dialog/style.module.css +13 -4
- package/src/alert-dialog/test/index.test.tsx +380 -0
- package/src/alert-dialog/types.ts +33 -1
- package/src/badge/badge.tsx +11 -14
- package/src/badge/stories/choosing-intent.story.tsx +1 -1
- package/src/badge/stories/index.story.tsx +1 -0
- package/src/badge/style.module.css +0 -4
- package/src/button/style.module.css +4 -4
- package/src/card/stories/index.story.tsx +5 -4
- package/src/card/style.module.css +0 -4
- package/src/card/test/index.test.tsx +17 -0
- package/src/card/title.tsx +6 -5
- package/src/collapsible/stories/index.story.tsx +1 -0
- package/src/collapsible-card/content.tsx +12 -1
- package/src/collapsible-card/header.tsx +2 -0
- package/src/collapsible-card/stories/index.story.tsx +6 -5
- package/src/collapsible-card/style.module.css +16 -4
- package/src/dialog/content.tsx +47 -0
- package/src/dialog/context.tsx +14 -98
- package/src/dialog/description.tsx +27 -0
- package/src/dialog/footer.tsx +10 -2
- package/src/dialog/header.tsx +10 -2
- package/src/dialog/index.ts +16 -1
- package/src/dialog/popup.tsx +28 -7
- package/src/dialog/portal.tsx +18 -0
- package/src/dialog/root.tsx +22 -5
- package/src/dialog/stories/index.story.tsx +224 -47
- package/src/dialog/style.module.css +78 -24
- package/src/dialog/test/index.test.tsx +907 -148
- package/src/dialog/title.tsx +27 -13
- package/src/dialog/types.ts +71 -5
- package/src/drawer/action.tsx +28 -0
- package/src/drawer/close-icon.tsx +33 -0
- package/src/drawer/content.tsx +50 -0
- package/src/drawer/context.tsx +29 -0
- package/src/drawer/description.tsx +25 -0
- package/src/drawer/footer.tsx +34 -0
- package/src/drawer/header.tsx +34 -0
- package/src/drawer/index.ts +25 -0
- package/src/drawer/popup.tsx +100 -0
- package/src/drawer/portal.tsx +18 -0
- package/src/drawer/root.tsx +41 -0
- package/src/drawer/stories/index.story.tsx +543 -0
- package/src/drawer/style.module.css +324 -0
- package/src/drawer/test/index.test.tsx +1097 -0
- package/src/drawer/title.tsx +53 -0
- package/src/drawer/trigger.tsx +14 -0
- package/src/drawer/types.ts +174 -0
- package/src/empty-state/description.tsx +6 -2
- package/src/empty-state/stories/index.story.tsx +2 -1
- package/src/empty-state/style.module.css +1 -1
- package/src/empty-state/test/description.test.tsx +13 -0
- package/src/empty-state/test/title.test.tsx +13 -0
- package/src/empty-state/title.tsx +9 -2
- package/src/form/input-control/stories/index.story.tsx +4 -1
- package/src/form/primitives/autocomplete/clear.tsx +35 -0
- package/src/form/primitives/autocomplete/collection.tsx +13 -0
- package/src/form/primitives/autocomplete/empty.tsx +17 -0
- package/src/form/primitives/autocomplete/index.ts +12 -0
- package/src/form/primitives/autocomplete/input-group.tsx +16 -0
- package/src/form/primitives/autocomplete/input.tsx +20 -0
- package/src/form/primitives/autocomplete/item.tsx +24 -0
- package/src/form/primitives/autocomplete/list-body.tsx +23 -0
- package/src/form/primitives/autocomplete/list.tsx +17 -0
- package/src/form/primitives/autocomplete/popup.tsx +42 -0
- package/src/form/primitives/autocomplete/portal.tsx +16 -0
- package/src/form/primitives/autocomplete/root.tsx +11 -0
- package/src/form/primitives/autocomplete/stories/fixtures.ts +35 -0
- package/src/form/primitives/autocomplete/stories/index.story.tsx +437 -0
- package/src/form/primitives/autocomplete/style.module.css +7 -0
- package/src/form/primitives/autocomplete/test/index.test.tsx +162 -0
- package/src/form/primitives/autocomplete/types.ts +74 -0
- package/src/form/primitives/autocomplete/value.tsx +6 -0
- package/src/form/primitives/field/details.tsx +4 -2
- package/src/form/primitives/field/label.tsx +9 -5
- package/src/form/primitives/field/root.tsx +2 -2
- package/src/form/primitives/field/stories/index.story.tsx +1 -1
- package/src/form/primitives/field/test/index.test.tsx +11 -0
- package/src/form/primitives/fieldset/legend.tsx +9 -4
- package/src/form/primitives/fieldset/stories/index.story.tsx +1 -1
- package/src/form/primitives/fieldset/test/index.test.tsx +22 -0
- package/src/form/primitives/index.ts +1 -0
- package/src/form/primitives/input/stories/index.story.tsx +2 -1
- package/src/form/primitives/input-layout/stories/index.story.tsx +2 -1
- package/src/form/primitives/input-layout/style.module.css +3 -3
- package/src/form/primitives/select/index.ts +1 -0
- package/src/form/primitives/select/item.tsx +0 -1
- package/src/form/primitives/select/popup.tsx +34 -34
- package/src/form/primitives/select/portal.tsx +16 -0
- package/src/form/primitives/select/stories/index.story.tsx +21 -7
- package/src/form/primitives/select/test/index.test.tsx +64 -1
- package/src/form/primitives/select/types.ts +21 -4
- package/src/index.ts +1 -0
- package/src/link/link.tsx +12 -26
- package/src/link/stories/index.story.tsx +6 -11
- package/src/link/style.module.css +6 -18
- package/src/link/test/index.test.tsx +31 -27
- package/src/link/types.ts +1 -2
- package/src/notice/action-link.tsx +7 -4
- package/src/notice/style.module.css +6 -6
- package/src/popover/context.tsx +6 -89
- package/src/popover/description.tsx +2 -11
- package/src/popover/index.ts +2 -1
- package/src/popover/popup.tsx +17 -15
- package/src/popover/portal.tsx +17 -0
- package/src/popover/root.tsx +2 -2
- package/src/popover/stories/index.story.tsx +57 -26
- package/src/popover/style.module.css +36 -7
- package/src/popover/test/index.test.tsx +189 -74
- package/src/popover/title.tsx +10 -9
- package/src/popover/types.ts +10 -15
- package/src/stack/stories/index.story.tsx +1 -0
- package/src/tabs/context.tsx +14 -34
- package/src/tabs/list.tsx +0 -1
- package/src/tabs/panel.tsx +7 -2
- package/src/tabs/stories/index.story.tsx +2 -1
- package/src/tabs/style.module.css +2 -19
- package/src/tabs/test/index.test.tsx +7 -3
- package/src/text/stories/index.story.tsx +1 -0
- package/src/text/style.module.css +49 -49
- package/src/text/text.tsx +2 -2
- package/src/tooltip/index.ts +2 -1
- package/src/tooltip/popup.tsx +24 -27
- package/src/tooltip/portal.tsx +16 -0
- package/src/tooltip/provider.tsx +3 -3
- package/src/tooltip/root.tsx +11 -10
- package/src/tooltip/stories/index.story.tsx +39 -1
- package/src/tooltip/stories/usage-guidelines.mdx +91 -0
- package/src/tooltip/stories/usage-guidelines.story.tsx +123 -0
- package/src/tooltip/style.module.css +14 -2
- package/src/tooltip/test/index.test.tsx +67 -0
- package/src/tooltip/trigger.tsx +3 -7
- package/src/tooltip/types.ts +16 -5
- package/src/utils/create-overlay-modal-context.tsx +34 -0
- package/src/utils/create-overlay-title-validation.tsx +116 -0
- package/src/utils/css/field.module.css +10 -10
- package/src/utils/css/global-css-defense.module.css +1 -1
- package/src/utils/css/item-popup.module.css +11 -13
- package/src/utils/css/overlay-chrome.module.css +222 -0
- package/src/utils/render-portal-with-children.ts +27 -0
- package/src/utils/test/use-deprioritized-initial-focus.test.tsx +3 -3
- package/src/utils/types.ts +7 -2
- package/src/utils/use-deprioritized-initial-focus.ts +23 -17
- package/src/utils/use-overlay-scroll-state-attributes.ts +272 -0
- package/src/utils/use-schedule-validation.ts +45 -0
- package/src/visually-hidden/stories/index.story.tsx +26 -0
- package/src/visually-hidden/visually-hidden.tsx +23 -1
- package/build/types/css-modules.d.cjs +0 -2
- package/build/types/react.d.cjs +0 -5
- package/build/types/react.d.cjs.map +0 -7
- package/build-module/types/css-modules.d.mjs +0 -1
- package/build-module/types/react.d.mjs +0 -3
- package/build-module/types/react.d.mjs.map +0 -7
- package/src/types/css-modules.d.ts +0 -4
- package/src/types/react.d.ts +0 -7
- /package/build-module/{types/css-modules.d.mjs.map → drawer/types.mjs.map} +0 -0
- /package/{build/types/css-modules.d.cjs.map → build-module/form/primitives/autocomplete/types.mjs.map} +0 -0
|
@@ -16,6 +16,24 @@ describe( 'Link', () => {
|
|
|
16
16
|
expect( ref.current ).toBeInstanceOf( HTMLAnchorElement );
|
|
17
17
|
} );
|
|
18
18
|
|
|
19
|
+
it( 'calls onClick when clicked (often used for analytics tracking)', async () => {
|
|
20
|
+
const user = userEvent.setup();
|
|
21
|
+
const onClick = jest.fn(
|
|
22
|
+
( event: React.MouseEvent< HTMLAnchorElement > ) =>
|
|
23
|
+
event.preventDefault()
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
render(
|
|
27
|
+
<Link href="/page" onClick={ onClick }>
|
|
28
|
+
Go to page
|
|
29
|
+
</Link>
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
await user.click( screen.getByRole( 'link', { name: 'Go to page' } ) );
|
|
33
|
+
|
|
34
|
+
expect( onClick ).toHaveBeenCalledTimes( 1 );
|
|
35
|
+
} );
|
|
36
|
+
|
|
19
37
|
describe( 'openInNewTab', () => {
|
|
20
38
|
it( 'sets target="_blank" when true', () => {
|
|
21
39
|
render(
|
|
@@ -47,47 +65,33 @@ describe( 'Link', () => {
|
|
|
47
65
|
|
|
48
66
|
expect(
|
|
49
67
|
screen.getByLabelText( '(opens in a new tab)' )
|
|
50
|
-
).
|
|
68
|
+
).toBeVisible();
|
|
51
69
|
} );
|
|
52
70
|
|
|
53
|
-
it( '
|
|
54
|
-
const user = userEvent.setup();
|
|
55
|
-
const onClick = jest.fn();
|
|
56
|
-
|
|
71
|
+
it( 'keeps the link text on the anchor element', () => {
|
|
57
72
|
render(
|
|
58
|
-
<Link href="
|
|
59
|
-
|
|
73
|
+
<Link href="https://example.com" openInNewTab>
|
|
74
|
+
External
|
|
60
75
|
</Link>
|
|
61
76
|
);
|
|
62
77
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
expect( onClick ).toHaveBeenCalledTimes( 1 );
|
|
66
|
-
expect( onClick.mock.calls[ 0 ][ 0 ].defaultPrevented ).toBe(
|
|
67
|
-
true
|
|
78
|
+
expect( screen.getByText( 'External' ) ).toBe(
|
|
79
|
+
screen.getByRole( 'link' )
|
|
68
80
|
);
|
|
69
81
|
} );
|
|
70
82
|
|
|
71
|
-
it( '
|
|
72
|
-
const user = userEvent.setup();
|
|
73
|
-
const onClick = jest.fn();
|
|
74
|
-
|
|
83
|
+
it( 'includes the new tab notice in the link name', () => {
|
|
75
84
|
render(
|
|
76
|
-
<Link
|
|
77
|
-
href="https://example.com"
|
|
78
|
-
openInNewTab
|
|
79
|
-
onClick={ onClick }
|
|
80
|
-
>
|
|
85
|
+
<Link href="https://example.com" openInNewTab>
|
|
81
86
|
External
|
|
82
87
|
</Link>
|
|
83
88
|
);
|
|
84
89
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
);
|
|
90
|
+
expect(
|
|
91
|
+
screen.getByRole( 'link', {
|
|
92
|
+
name: 'External (opens in a new tab)',
|
|
93
|
+
} )
|
|
94
|
+
).toBeVisible();
|
|
91
95
|
} );
|
|
92
96
|
} );
|
|
93
97
|
} );
|
package/src/link/types.ts
CHANGED
|
@@ -22,8 +22,7 @@ export interface LinkProps extends Omit< ComponentProps< 'a' >, 'target' > {
|
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Whether to open the link in a new browser tab.
|
|
25
|
-
* When true, sets `target="_blank"
|
|
26
|
-
* and prevents navigation for internal anchors (`#`-prefixed hrefs).
|
|
25
|
+
* When true, sets `target="_blank"` and appends a visual arrow indicator.
|
|
27
26
|
*
|
|
28
27
|
* @default false
|
|
29
28
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import clsx from 'clsx';
|
|
2
2
|
import { forwardRef } from '@wordpress/element';
|
|
3
3
|
import { Link } from '../link';
|
|
4
|
+
import { Text } from '../text';
|
|
4
5
|
import type { ActionLinkProps } from './types';
|
|
5
6
|
import styles from './style.module.css';
|
|
6
7
|
|
|
@@ -8,14 +9,16 @@ import styles from './style.module.css';
|
|
|
8
9
|
* An action link for use within Notice.Actions.
|
|
9
10
|
*/
|
|
10
11
|
export const ActionLink = forwardRef< HTMLAnchorElement, ActionLinkProps >(
|
|
11
|
-
function NoticeActionLink( { className, ...props }, ref ) {
|
|
12
|
+
function NoticeActionLink( { className, render, ...props }, ref ) {
|
|
12
13
|
return (
|
|
13
|
-
<
|
|
14
|
+
<Text
|
|
14
15
|
ref={ ref }
|
|
15
16
|
className={ clsx( styles[ 'action-link' ], className ) }
|
|
16
17
|
{ ...props }
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
variant="body-md"
|
|
19
|
+
render={
|
|
20
|
+
<Link tone="neutral" variant="default" render={ render } />
|
|
21
|
+
}
|
|
19
22
|
/>
|
|
20
23
|
);
|
|
21
24
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
@layer wp-ui-components {
|
|
4
4
|
.notice {
|
|
5
5
|
--icon-height: 24px;
|
|
6
|
-
--text-vertical-padding: calc((var(--icon-height) - var(--wpds-
|
|
6
|
+
--text-vertical-padding: calc((var(--icon-height) - var(--wpds-typography-line-height-sm)) / 2);
|
|
7
7
|
|
|
8
8
|
--wp-ui-notice-background-color: var(--wpds-color-bg-surface-neutral-weak);
|
|
9
9
|
--wp-ui-notice-border-color: var(--wpds-color-stroke-surface-neutral);
|
|
@@ -64,11 +64,6 @@
|
|
|
64
64
|
|
|
65
65
|
.action-link {
|
|
66
66
|
flex-shrink: 0;
|
|
67
|
-
font-family: var(--wpds-font-family-body);
|
|
68
|
-
font-size: var(--wpds-font-size-md);
|
|
69
|
-
font-weight: var(--wpds-font-weight-regular);
|
|
70
|
-
line-height: var(--wpds-font-line-height-sm);
|
|
71
|
-
margin-block: auto;
|
|
72
67
|
|
|
73
68
|
/* Add more horizontal space when following another action link/button */
|
|
74
69
|
&:not(:first-child) {
|
|
@@ -125,6 +120,11 @@
|
|
|
125
120
|
}
|
|
126
121
|
|
|
127
122
|
@layer wp-ui-compositions {
|
|
123
|
+
/* Override `Text` margin */
|
|
124
|
+
.action-link {
|
|
125
|
+
margin-block: auto;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
128
|
/* Add partial transparency to CloseIcon and outline/minimal ActionButton
|
|
129
129
|
* for a better look over tinted backgrounds */
|
|
130
130
|
.close-icon,
|
package/src/popover/context.tsx
CHANGED
|
@@ -1,100 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createContext,
|
|
3
|
-
useCallback,
|
|
4
|
-
useContext,
|
|
5
|
-
useEffect,
|
|
6
|
-
useMemo,
|
|
7
|
-
useRef,
|
|
8
|
-
} from '@wordpress/element';
|
|
1
|
+
import { createOverlayTitleValidation } from '../utils/create-overlay-title-validation';
|
|
9
2
|
|
|
10
|
-
|
|
11
|
-
* Whether validation is enabled. This is a build-time constant that allows
|
|
12
|
-
* bundlers to tree-shake all validation code in production builds.
|
|
13
|
-
*/
|
|
14
|
-
const VALIDATION_ENABLED = process.env.NODE_ENV !== 'production';
|
|
15
|
-
|
|
16
|
-
type PopoverValidationContextType = {
|
|
17
|
-
registerTitle: ( element: HTMLElement | null ) => void;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const PopoverValidationContext = VALIDATION_ENABLED
|
|
21
|
-
? createContext< PopoverValidationContextType | null >( null )
|
|
22
|
-
: ( null as unknown as React.Context< PopoverValidationContextType | null > );
|
|
23
|
-
|
|
24
|
-
function usePopoverValidationContextDev() {
|
|
25
|
-
return useContext( PopoverValidationContext );
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function usePopoverValidationContextProd() {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
3
|
+
const popoverTitleValidation = createOverlayTitleValidation( 'Popover' );
|
|
31
4
|
|
|
32
5
|
/**
|
|
33
6
|
* Hook to access the popover validation context.
|
|
34
7
|
* Returns null in production or if not within a Popover.Popup.
|
|
35
8
|
*/
|
|
36
|
-
export const usePopoverValidationContext =
|
|
37
|
-
|
|
38
|
-
: usePopoverValidationContextProd;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Development-only provider that tracks whether Popover.Title is rendered.
|
|
42
|
-
*/
|
|
43
|
-
function PopoverValidationProviderDev( {
|
|
44
|
-
children,
|
|
45
|
-
}: {
|
|
46
|
-
children: React.ReactNode;
|
|
47
|
-
} ) {
|
|
48
|
-
const titleElementRef = useRef< HTMLElement | null >( null );
|
|
49
|
-
|
|
50
|
-
const registerTitle = useCallback( ( element: HTMLElement | null ) => {
|
|
51
|
-
titleElementRef.current = element;
|
|
52
|
-
}, [] );
|
|
53
|
-
|
|
54
|
-
const contextValue = useMemo(
|
|
55
|
-
() => ( { registerTitle } ),
|
|
56
|
-
[ registerTitle ]
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
useEffect( () => {
|
|
60
|
-
const titleElement = titleElementRef.current;
|
|
61
|
-
|
|
62
|
-
if ( ! titleElement ) {
|
|
63
|
-
throw new Error(
|
|
64
|
-
'Popover: Missing <Popover.Title>. ' +
|
|
65
|
-
'For accessibility, every popover requires a title. ' +
|
|
66
|
-
'If needed, the title can be visually hidden but must not be omitted.'
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const textContent = titleElement.textContent?.trim();
|
|
71
|
-
if ( ! textContent ) {
|
|
72
|
-
throw new Error(
|
|
73
|
-
'Popover: <Popover.Title> cannot be empty. ' +
|
|
74
|
-
'Provide meaningful text content for the popover title.'
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
}, [] );
|
|
78
|
-
|
|
79
|
-
return (
|
|
80
|
-
<PopoverValidationContext.Provider value={ contextValue }>
|
|
81
|
-
{ children }
|
|
82
|
-
</PopoverValidationContext.Provider>
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function PopoverValidationProviderProd( {
|
|
87
|
-
children,
|
|
88
|
-
}: {
|
|
89
|
-
children: React.ReactNode;
|
|
90
|
-
} ) {
|
|
91
|
-
return <>{ children }</>;
|
|
92
|
-
}
|
|
9
|
+
export const usePopoverValidationContext =
|
|
10
|
+
popoverTitleValidation.useValidationContext;
|
|
93
11
|
|
|
94
12
|
/**
|
|
95
13
|
* Provider component that validates Popover.Title presence in development mode.
|
|
96
14
|
* In production, this component is a no-op and just renders children.
|
|
97
15
|
*/
|
|
98
|
-
export const PopoverValidationProvider =
|
|
99
|
-
|
|
100
|
-
: PopoverValidationProviderProd;
|
|
16
|
+
export const PopoverValidationProvider =
|
|
17
|
+
popoverTitleValidation.ValidationProvider;
|
|
@@ -1,29 +1,20 @@
|
|
|
1
1
|
import { Popover as _Popover } from '@base-ui/react/popover';
|
|
2
|
-
import clsx from 'clsx';
|
|
3
2
|
import { forwardRef } from '@wordpress/element';
|
|
4
3
|
import { Text } from '../text';
|
|
5
|
-
import styles from './style.module.css';
|
|
6
4
|
import type { DescriptionProps } from './types';
|
|
7
5
|
|
|
8
6
|
/**
|
|
9
7
|
* Renders an optional paragraph that describes the popover content.
|
|
10
8
|
*
|
|
11
9
|
* The rendered element is linked to the popup via `aria-describedby`.
|
|
12
|
-
* Uses the `body-md` text variant by default.
|
|
13
10
|
*/
|
|
14
11
|
const Description = forwardRef< HTMLParagraphElement, DescriptionProps >(
|
|
15
|
-
function PopoverDescription(
|
|
16
|
-
{ className, children, render, ...props },
|
|
17
|
-
ref
|
|
18
|
-
) {
|
|
12
|
+
function PopoverDescription( { children, ...props }, ref ) {
|
|
19
13
|
return (
|
|
20
14
|
<Text
|
|
21
15
|
ref={ ref }
|
|
22
16
|
variant="body-md"
|
|
23
|
-
render={
|
|
24
|
-
<_Popover.Description render={ render } { ...props } />
|
|
25
|
-
}
|
|
26
|
-
className={ clsx( styles.description, className ) }
|
|
17
|
+
render={ <_Popover.Description { ...props } /> }
|
|
27
18
|
>
|
|
28
19
|
{ children }
|
|
29
20
|
</Text>
|
package/src/popover/index.ts
CHANGED
|
@@ -2,8 +2,9 @@ import { Arrow } from './arrow';
|
|
|
2
2
|
import { Close } from './close';
|
|
3
3
|
import { Description } from './description';
|
|
4
4
|
import { Popup } from './popup';
|
|
5
|
+
import { Portal } from './portal';
|
|
5
6
|
import { Root } from './root';
|
|
6
7
|
import { Title } from './title';
|
|
7
8
|
import { Trigger } from './trigger';
|
|
8
9
|
|
|
9
|
-
export { Arrow, Close, Description, Popup, Root, Title, Trigger };
|
|
10
|
+
export { Arrow, Close, Description, Portal, Popup, Root, Title, Trigger };
|
package/src/popover/popup.tsx
CHANGED
|
@@ -9,7 +9,9 @@ import {
|
|
|
9
9
|
import { unlock } from '../lock-unlock';
|
|
10
10
|
import resetStyles from '../utils/css/resets.module.css';
|
|
11
11
|
import { useDeprioritizedInitialFocus } from '../utils/use-deprioritized-initial-focus';
|
|
12
|
+
import { renderPortalWithChildren } from '../utils/render-portal-with-children';
|
|
12
13
|
import { PopoverValidationProvider } from './context';
|
|
14
|
+
import { Portal } from './portal';
|
|
13
15
|
import styles from './style.module.css';
|
|
14
16
|
import type { PopupProps } from './types';
|
|
15
17
|
|
|
@@ -22,8 +24,9 @@ const CLOSE_ATTR = 'data-wp-ui-popover-close';
|
|
|
22
24
|
* Renders the floating popup container for the popover content.
|
|
23
25
|
*
|
|
24
26
|
* Handles portal rendering, positioning relative to the anchor, collision
|
|
25
|
-
* avoidance, focus management, and optional backdrop.
|
|
26
|
-
*
|
|
27
|
+
* avoidance, focus management, and optional backdrop. Use
|
|
28
|
+
* `portal={ <Popover.Portal container={ ... } /> }` for cross-document
|
|
29
|
+
* scenarios such as iframes.
|
|
27
30
|
*/
|
|
28
31
|
const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
|
|
29
32
|
{
|
|
@@ -38,13 +41,12 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
|
|
|
38
41
|
collisionAvoidance,
|
|
39
42
|
collisionBoundary,
|
|
40
43
|
collisionPadding,
|
|
41
|
-
|
|
44
|
+
portal,
|
|
42
45
|
finalFocus,
|
|
43
46
|
initialFocus,
|
|
44
47
|
side = 'bottom',
|
|
45
48
|
sideOffset = 8,
|
|
46
49
|
sticky,
|
|
47
|
-
style,
|
|
48
50
|
variant = 'default',
|
|
49
51
|
...props
|
|
50
52
|
},
|
|
@@ -52,7 +54,7 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
|
|
|
52
54
|
) {
|
|
53
55
|
const { resolvedInitialFocus, popupRef } = useDeprioritizedInitialFocus( {
|
|
54
56
|
initialFocus,
|
|
55
|
-
|
|
57
|
+
deprioritizedAttributes: [ CLOSE_ATTR ],
|
|
56
58
|
} );
|
|
57
59
|
const mergedPopupRef = useMergeRefs( [ ref, popupRef ] );
|
|
58
60
|
|
|
@@ -72,19 +74,17 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
|
|
|
72
74
|
side={ side }
|
|
73
75
|
sideOffset={ sideOffset }
|
|
74
76
|
sticky={ sticky }
|
|
75
|
-
|
|
76
|
-
className={ clsx(
|
|
77
|
-
resetStyles[ 'box-sizing' ],
|
|
78
|
-
styles.positioner,
|
|
79
|
-
className
|
|
80
|
-
) }
|
|
77
|
+
className={ clsx( resetStyles[ 'box-sizing' ], styles.positioner ) }
|
|
81
78
|
>
|
|
82
79
|
<ThemeProvider>
|
|
83
80
|
<_Popover.Popup
|
|
84
81
|
ref={ mergedPopupRef }
|
|
85
82
|
initialFocus={ resolvedInitialFocus }
|
|
86
83
|
finalFocus={ finalFocus }
|
|
87
|
-
className={ clsx(
|
|
84
|
+
className={ clsx(
|
|
85
|
+
variant !== 'unstyled' && styles.popup,
|
|
86
|
+
className
|
|
87
|
+
) }
|
|
88
88
|
{ ...props }
|
|
89
89
|
>
|
|
90
90
|
<PopoverValidationProvider>
|
|
@@ -95,12 +95,14 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
|
|
|
95
95
|
</_Popover.Positioner>
|
|
96
96
|
);
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
const portalChildren = (
|
|
99
|
+
<>
|
|
100
100
|
{ backdropElement }
|
|
101
101
|
{ positioner }
|
|
102
|
-
|
|
102
|
+
</>
|
|
103
103
|
);
|
|
104
|
+
|
|
105
|
+
return renderPortalWithChildren( portal, <Portal />, portalChildren );
|
|
104
106
|
} );
|
|
105
107
|
|
|
106
108
|
export { Popup };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Popover as _Popover } from '@base-ui/react/popover';
|
|
2
|
+
import { forwardRef } from '@wordpress/element';
|
|
3
|
+
import type { PortalProps } from './types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Root element that portals `Popover` floating content. Pass to
|
|
7
|
+
* `Popover.Popup`'s `portal` prop (for example `container` for
|
|
8
|
+
* cross-document rendering). When `portal` is omitted, `Popover.Popup` uses
|
|
9
|
+
* this component with default props.
|
|
10
|
+
*/
|
|
11
|
+
const Portal = forwardRef< HTMLDivElement, PortalProps >(
|
|
12
|
+
function PopoverPortal( props, ref ) {
|
|
13
|
+
return <_Popover.Portal ref={ ref } { ...props } />;
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export { Portal };
|
package/src/popover/root.tsx
CHANGED
|
@@ -12,8 +12,8 @@ import type { RootProps } from './types';
|
|
|
12
12
|
*
|
|
13
13
|
* - `Popover.Root` — provides open state and context to all sub-components.
|
|
14
14
|
* - `Popover.Trigger` — the button that toggles the popup.
|
|
15
|
-
* - `Popover.Popup` — the floating container (
|
|
16
|
-
* avoidance).
|
|
15
|
+
* - `Popover.Popup` — the floating container (positioning, collision
|
|
16
|
+
* avoidance); portals by default or via `portal={ <Popover.Portal /> }`.
|
|
17
17
|
* - `Popover.Arrow` — an optional arrow pointing toward the anchor.
|
|
18
18
|
* - `Popover.Title` — **required** heading that labels the popover for
|
|
19
19
|
* accessibility (can be visually hidden).
|
|
@@ -2,7 +2,8 @@ import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
|
2
2
|
import { useId, useRef, useState } from '@wordpress/element';
|
|
3
3
|
import { SlotFillProvider, Slot } from '@wordpress/components';
|
|
4
4
|
import { close, info } from '@wordpress/icons';
|
|
5
|
-
import
|
|
5
|
+
import * as Popover from '../';
|
|
6
|
+
import { VisuallyHidden } from '../../visually-hidden';
|
|
6
7
|
import { Icon } from '../../icon';
|
|
7
8
|
import { IconButton } from '../../icon-button';
|
|
8
9
|
import { GenericIframe, useMeasure } from './utils';
|
|
@@ -12,6 +13,7 @@ const meta: Meta< typeof Popover.Root > = {
|
|
|
12
13
|
component: Popover.Root,
|
|
13
14
|
subcomponents: {
|
|
14
15
|
'Popover.Trigger': Popover.Trigger,
|
|
16
|
+
'Popover.Portal': Popover.Portal,
|
|
15
17
|
'Popover.Popup': Popover.Popup,
|
|
16
18
|
'Popover.Arrow': Popover.Arrow,
|
|
17
19
|
'Popover.Title': Popover.Title,
|
|
@@ -442,10 +444,11 @@ export const OverlayPlacement: Story = {
|
|
|
442
444
|
};
|
|
443
445
|
|
|
444
446
|
/**
|
|
445
|
-
* To
|
|
446
|
-
* `<span>` with `display: contents` and pass
|
|
447
|
-
*
|
|
448
|
-
*
|
|
447
|
+
* To keep the floating layer **in page flow** next to surrounding layout,
|
|
448
|
+
* create a local ref to a `<span>` with `display: contents` and pass
|
|
449
|
+
* `portal={ <Popover.Portal container={ ref } /> }`. The popup still uses a
|
|
450
|
+
* portal, but the portal **mounts** into that subtree instead of
|
|
451
|
+
* `document.body`, while retaining positioning behavior.
|
|
449
452
|
*
|
|
450
453
|
* **Note:** `backdrop` will not cover the full viewport in this mode.
|
|
451
454
|
*/
|
|
@@ -462,7 +465,11 @@ export const Inline: Story = {
|
|
|
462
465
|
ref={ inlineContainerRef }
|
|
463
466
|
style={ { display: 'contents' } }
|
|
464
467
|
/>
|
|
465
|
-
<Popover.Popup
|
|
468
|
+
<Popover.Popup
|
|
469
|
+
portal={
|
|
470
|
+
<Popover.Portal container={ inlineContainerRef } />
|
|
471
|
+
}
|
|
472
|
+
>
|
|
466
473
|
<Popover.Arrow />
|
|
467
474
|
<Popover.Title
|
|
468
475
|
style={ {
|
|
@@ -472,8 +479,10 @@ export const Inline: Story = {
|
|
|
472
479
|
Inline Popover
|
|
473
480
|
</Popover.Title>
|
|
474
481
|
<Popover.Description>
|
|
475
|
-
This
|
|
476
|
-
|
|
482
|
+
This example still uses `Popover.Portal`, but the
|
|
483
|
+
portal `container` is the in-tree span above, so the
|
|
484
|
+
portal node mounts inside the wrapper instead of
|
|
485
|
+
`document.body`.
|
|
477
486
|
</Popover.Description>
|
|
478
487
|
</Popover.Popup>
|
|
479
488
|
</Popover.Root>
|
|
@@ -571,8 +580,8 @@ export const CollisionAvoidance: Story = {
|
|
|
571
580
|
|
|
572
581
|
/**
|
|
573
582
|
* When the popover's trigger lives inside an iframe but the popover should
|
|
574
|
-
* render in the parent document, pass a parent-document element
|
|
575
|
-
* `container`
|
|
583
|
+
* render in the parent document, pass a parent-document element through
|
|
584
|
+
* `portal={ <Popover.Portal container={ ... } /> }` on `Popover.Popup`.
|
|
576
585
|
*
|
|
577
586
|
* This technique is used in Gutenberg where the block editor canvas is an
|
|
578
587
|
* iframe but toolbars and menus must appear outside it.
|
|
@@ -623,8 +632,12 @@ export const CrossIframe: Story = {
|
|
|
623
632
|
Popover's anchor (inside iframe)
|
|
624
633
|
</Popover.Trigger>
|
|
625
634
|
<Popover.Popup
|
|
626
|
-
|
|
627
|
-
|
|
635
|
+
portal={
|
|
636
|
+
<Popover.Portal
|
|
637
|
+
container={
|
|
638
|
+
portalContainerRef as React.RefObject< HTMLElement >
|
|
639
|
+
}
|
|
640
|
+
/>
|
|
628
641
|
}
|
|
629
642
|
collisionBoundary={
|
|
630
643
|
iframeBoundary ?? undefined
|
|
@@ -660,9 +673,9 @@ export const CrossIframe: Story = {
|
|
|
660
673
|
* `@wordpress/components` as the render target.
|
|
661
674
|
*
|
|
662
675
|
* The `Slot` renders a `div` in the parent document, and its forwarded ref
|
|
663
|
-
* is passed to `Popover.
|
|
664
|
-
* the slot element. This mirrors the
|
|
665
|
-
* pattern.
|
|
676
|
+
* is passed to `Popover.Portal`'s `container` prop (via `Popover.Popup`'s
|
|
677
|
+
* `portal` prop) so the popup portals into the slot element. This mirrors the
|
|
678
|
+
* legacy Popover's `WithSlotOutsideIframe` pattern.
|
|
666
679
|
*/
|
|
667
680
|
export const CrossIframeWithSlotFill: Story = {
|
|
668
681
|
name: 'Cross-Iframe (SlotFill)',
|
|
@@ -712,8 +725,12 @@ export const CrossIframeWithSlotFill: Story = {
|
|
|
712
725
|
Popover's anchor (inside iframe)
|
|
713
726
|
</Popover.Trigger>
|
|
714
727
|
<Popover.Popup
|
|
715
|
-
|
|
716
|
-
|
|
728
|
+
portal={
|
|
729
|
+
<Popover.Portal
|
|
730
|
+
container={
|
|
731
|
+
slotRef as React.RefObject< HTMLElement >
|
|
732
|
+
}
|
|
733
|
+
/>
|
|
717
734
|
}
|
|
718
735
|
collisionBoundary={
|
|
719
736
|
iframeBoundary ?? undefined
|
|
@@ -745,12 +762,19 @@ export const CrossIframeWithSlotFill: Story = {
|
|
|
745
762
|
|
|
746
763
|
/**
|
|
747
764
|
* Popovers in Gutenberg are managed with explicit z-index values, which can
|
|
748
|
-
* create situations where a popover renders below another popover
|
|
749
|
-
* want it
|
|
765
|
+
* create situations where a popover renders below another popover when you
|
|
766
|
+
* want it above.
|
|
767
|
+
*
|
|
768
|
+
* The `--wp-ui-popover-z-index` CSS variable controls the z-index of the
|
|
769
|
+
* popover's positioner (and its optional backdrop). Override it either:
|
|
770
|
+
*
|
|
771
|
+
* - **Globally**, by setting the variable on `:root` or `body` (raises every
|
|
772
|
+
* popover in the page), or
|
|
773
|
+
* - **Per instance**, by passing a `Popover.Portal` with a `style` (or
|
|
774
|
+
* `className`) to `Popover.Popup`'s `portal` prop. The variable cascades
|
|
775
|
+
* from the portal wrapper to everything rendered inside it.
|
|
750
776
|
*
|
|
751
|
-
*
|
|
752
|
-
* `Popover.Popup` component, is an escape hatch that can be used to override
|
|
753
|
-
* the z-index of a given popover on a case-by-case basis.
|
|
777
|
+
* This story demonstrates the per-instance approach.
|
|
754
778
|
*/
|
|
755
779
|
export const WithCustomZIndex: Story = {
|
|
756
780
|
name: 'With Custom z-index',
|
|
@@ -758,7 +782,13 @@ export const WithCustomZIndex: Story = {
|
|
|
758
782
|
children: (
|
|
759
783
|
<>
|
|
760
784
|
<Popover.Trigger>Open Popover</Popover.Trigger>
|
|
761
|
-
<Popover.Popup
|
|
785
|
+
<Popover.Popup
|
|
786
|
+
portal={
|
|
787
|
+
<Popover.Portal
|
|
788
|
+
style={ { '--wp-ui-popover-z-index': '9999' } }
|
|
789
|
+
/>
|
|
790
|
+
}
|
|
791
|
+
>
|
|
762
792
|
<Popover.Arrow />
|
|
763
793
|
<Popover.Title
|
|
764
794
|
style={ {
|
|
@@ -768,8 +798,9 @@ export const WithCustomZIndex: Story = {
|
|
|
768
798
|
Custom z-index
|
|
769
799
|
</Popover.Title>
|
|
770
800
|
<Popover.Description>
|
|
771
|
-
This popover
|
|
772
|
-
`--wp-ui-popover-z-index` CSS custom property
|
|
801
|
+
This popover renders at `z-index: 9999` via the
|
|
802
|
+
`--wp-ui-popover-z-index` CSS custom property, set on
|
|
803
|
+
`Popover.Portal` through the `portal` prop.
|
|
773
804
|
</Popover.Description>
|
|
774
805
|
</Popover.Popup>
|
|
775
806
|
</>
|
|
@@ -1267,7 +1298,7 @@ export const HoverTrigger: Story = {
|
|
|
1267
1298
|
* popup itself, it's a popover. If the trigger's purpose is unrelated to
|
|
1268
1299
|
* opening the popup, it's a tooltip.
|
|
1269
1300
|
*/
|
|
1270
|
-
export const
|
|
1301
|
+
export const Infotip: Story = {
|
|
1271
1302
|
parameters: { controls: { disable: true } },
|
|
1272
1303
|
render: function Render( args ) {
|
|
1273
1304
|
return (
|
|
@@ -9,15 +9,43 @@
|
|
|
9
9
|
background-color: var(--wpds-color-bg-surface-neutral-strong);
|
|
10
10
|
padding: var(--wpds-dimension-padding-lg);
|
|
11
11
|
border-radius: var(--wpds-border-radius-md);
|
|
12
|
-
border: var(--wpds-border-width-xs) solid var(--wpds-color-stroke-surface-neutral
|
|
12
|
+
border: var(--wpds-border-width-xs) solid var(--wpds-color-stroke-surface-neutral);
|
|
13
13
|
box-shadow: var(--wpds-elevation-md);
|
|
14
|
-
font-family: var(--wpds-font-family-body);
|
|
15
|
-
font-size: var(--wpds-font-size-md);
|
|
16
|
-
line-height: var(--wpds-
|
|
14
|
+
font-family: var(--wpds-typography-font-family-body);
|
|
15
|
+
font-size: var(--wpds-typography-font-size-md);
|
|
16
|
+
line-height: var(--wpds-typography-line-height-md);
|
|
17
17
|
color: var(--wpds-color-fg-content-neutral);
|
|
18
18
|
outline: 0;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
/*
|
|
22
|
+
* When a backdrop is rendered alongside the popup, hide the
|
|
23
|
+
* regular-mode border. The backdrop already provides visual
|
|
24
|
+
* containment, so the border becomes redundant noise.
|
|
25
|
+
* `transparent` (not `none`) keeps popup geometry identical
|
|
26
|
+
* regardless of the `backdrop` prop — `box-sizing: border-box`
|
|
27
|
+
* absorbs the 1px into the existing box.
|
|
28
|
+
*/
|
|
29
|
+
.backdrop ~ * .popup {
|
|
30
|
+
border-color: transparent;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Forced-colors mode strips `box-shadow` and substitutes
|
|
35
|
+
* `background-color` with `Canvas` (the page background), so the
|
|
36
|
+
* boundary depends entirely on the border. Set `CanvasText`
|
|
37
|
+
* explicitly for both backdrop and non-backdrop popups:
|
|
38
|
+
* `transparent` is not substituted by the UA, and being
|
|
39
|
+
* explicit also removes any reliance on UA color-substitution
|
|
40
|
+
* behavior for the non-backdrop case.
|
|
41
|
+
*/
|
|
42
|
+
@media (forced-colors: active) {
|
|
43
|
+
.popup,
|
|
44
|
+
.backdrop ~ * .popup {
|
|
45
|
+
border-color: CanvasText;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
21
49
|
.arrow {
|
|
22
50
|
display: flex;
|
|
23
51
|
|
|
@@ -47,11 +75,12 @@
|
|
|
47
75
|
}
|
|
48
76
|
|
|
49
77
|
.arrow-stroke {
|
|
50
|
-
fill: var(--wpds-color-stroke-surface-neutral
|
|
78
|
+
fill: var(--wpds-color-stroke-surface-neutral);
|
|
51
79
|
}
|
|
52
80
|
|
|
53
|
-
.
|
|
54
|
-
color: var(--wpds-color-fg-content-neutral
|
|
81
|
+
.title {
|
|
82
|
+
color: var(--wpds-color-fg-content-neutral);
|
|
83
|
+
--_gcd-heading-color: var(--wpds-color-fg-content-neutral);
|
|
55
84
|
}
|
|
56
85
|
|
|
57
86
|
.backdrop {
|