@wordpress/ui 0.12.1-next.v.202604201441.0 → 0.13.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 +59 -2
- package/CONTRIBUTING.md +34 -0
- package/build/alert-dialog/index.cjs +3 -0
- package/build/alert-dialog/index.cjs.map +2 -2
- package/build/alert-dialog/popup.cjs +194 -59
- 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 +84 -5
- package/build/badge/badge.cjs.map +3 -3
- package/build/button/button.cjs +90 -20
- package/build/button/button.cjs.map +3 -3
- package/build/button/icon.cjs.map +2 -2
- package/build/button/index.cjs +1 -0
- package/build/button/index.cjs.map +3 -3
- package/build/button/types.cjs.map +1 -1
- package/build/card/content.cjs +84 -5
- package/build/card/content.cjs.map +3 -3
- package/build/card/full-bleed.cjs +84 -5
- package/build/card/full-bleed.cjs.map +3 -3
- package/build/card/header.cjs +84 -5
- package/build/card/header.cjs.map +3 -3
- package/build/card/root.cjs +86 -10
- package/build/card/root.cjs.map +3 -3
- package/build/collapsible-card/content.cjs +90 -7
- package/build/collapsible-card/content.cjs.map +3 -3
- package/build/collapsible-card/header.cjs +131 -52
- package/build/collapsible-card/header.cjs.map +3 -3
- package/build/dialog/content.cjs +161 -0
- package/build/dialog/content.cjs.map +7 -0
- package/build/dialog/context.cjs +12 -56
- package/build/dialog/context.cjs.map +2 -2
- package/build/dialog/description.cjs +138 -0
- package/build/dialog/description.cjs.map +7 -0
- package/build/dialog/footer.cjs +86 -6
- package/build/dialog/footer.cjs.map +3 -3
- package/build/dialog/header.cjs +86 -6
- package/build/dialog/header.cjs.map +3 -3
- package/build/dialog/index.cjs +9 -0
- package/build/dialog/index.cjs.map +2 -2
- package/build/dialog/popup.cjs +102 -11
- package/build/dialog/popup.cjs.map +3 -3
- 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 +85 -6
- 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 +170 -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 +144 -0
- package/build/drawer/footer.cjs.map +7 -0
- package/build/drawer/header.cjs +144 -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 +182 -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 +149 -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 +84 -5
- package/build/empty-state/actions.cjs.map +3 -3
- package/build/empty-state/description.cjs +84 -5
- package/build/empty-state/description.cjs.map +3 -3
- package/build/empty-state/icon.cjs +84 -5
- package/build/empty-state/icon.cjs.map +3 -3
- package/build/empty-state/root.cjs +84 -5
- package/build/empty-state/root.cjs.map +3 -3
- package/build/empty-state/title.cjs +84 -5
- package/build/empty-state/title.cjs.map +3 -3
- package/build/empty-state/visual.cjs +84 -5
- package/build/empty-state/visual.cjs.map +3 -3
- package/build/form/index.cjs +3 -1
- package/build/form/index.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 +146 -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 +157 -0
- package/build/form/primitives/autocomplete/item.cjs.map +7 -0
- package/build/form/primitives/autocomplete/list-body.cjs +136 -0
- package/build/form/primitives/autocomplete/list-body.cjs.map +7 -0
- package/build/form/primitives/autocomplete/list.cjs +146 -0
- package/build/form/primitives/autocomplete/list.cjs.map +7 -0
- package/build/form/primitives/autocomplete/popup.cjs +175 -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 +86 -10
- package/build/form/primitives/field/description.cjs.map +3 -3
- package/build/form/primitives/field/details.cjs +84 -5
- package/build/form/primitives/field/details.cjs.map +3 -3
- package/build/form/primitives/field/label.cjs +84 -5
- package/build/form/primitives/field/label.cjs.map +3 -3
- package/build/form/primitives/field/root.cjs +84 -5
- package/build/form/primitives/field/root.cjs.map +3 -3
- package/build/form/primitives/fieldset/description.cjs +86 -10
- package/build/form/primitives/fieldset/description.cjs.map +3 -3
- package/build/form/primitives/fieldset/details.cjs +84 -5
- package/build/form/primitives/fieldset/details.cjs.map +3 -3
- package/build/form/primitives/fieldset/legend.cjs +84 -5
- package/build/form/primitives/fieldset/legend.cjs.map +3 -3
- package/build/form/primitives/fieldset/root.cjs +84 -5
- package/build/form/primitives/fieldset/root.cjs.map +3 -3
- package/build/form/primitives/index.cjs +3 -0
- package/build/form/primitives/index.cjs.map +2 -2
- package/build/form/primitives/input/input.cjs +88 -15
- package/build/form/primitives/input/input.cjs.map +3 -3
- package/build/form/primitives/input-layout/input-layout.cjs +88 -15
- package/build/form/primitives/input-layout/input-layout.cjs.map +3 -3
- package/build/form/primitives/input-layout/slot.cjs +84 -5
- package/build/form/primitives/input-layout/slot.cjs.map +3 -3
- 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 +88 -13
- package/build/form/primitives/select/item.cjs.map +3 -3
- package/build/form/primitives/select/popup.cjs +97 -23
- package/build/form/primitives/select/popup.cjs.map +3 -3
- package/build/form/primitives/select/portal.cjs +38 -0
- package/build/form/primitives/select/portal.cjs.map +7 -0
- package/build/form/primitives/select/root.cjs.map +2 -2
- package/build/form/primitives/select/trigger.cjs +98 -16
- package/build/form/primitives/select/trigger.cjs.map +3 -3
- package/build/form/primitives/select/types.cjs.map +1 -1
- package/build/form/primitives/textarea/textarea.cjs +86 -10
- package/build/form/primitives/textarea/textarea.cjs.map +3 -3
- package/build/form/select-control/context.cjs +37 -0
- package/build/form/select-control/context.cjs.map +7 -0
- package/build/form/select-control/index.cjs +39 -0
- package/build/form/select-control/index.cjs.map +7 -0
- package/build/form/select-control/item.cjs +41 -0
- package/build/form/select-control/item.cjs.map +7 -0
- package/build/form/select-control/select-control.cjs +75 -0
- package/build/form/select-control/select-control.cjs.map +7 -0
- package/build/form/select-control/types.cjs +19 -0
- package/build/form/select-control/types.cjs.map +7 -0
- package/build/form/types.cjs.map +1 -1
- package/build/icon-button/icon-button.cjs +86 -6
- package/build/icon-button/icon-button.cjs.map +3 -3
- package/build/icon-button/types.cjs.map +1 -1
- package/build/index.cjs +3 -0
- package/build/index.cjs.map +2 -2
- package/build/link/link.cjs +90 -20
- package/build/link/link.cjs.map +3 -3
- package/build/notice/action-button.cjs +84 -5
- package/build/notice/action-button.cjs.map +3 -3
- package/build/notice/action-link.cjs +84 -5
- package/build/notice/action-link.cjs.map +3 -3
- package/build/notice/actions.cjs +84 -5
- package/build/notice/actions.cjs.map +3 -3
- package/build/notice/close-icon.cjs +84 -5
- package/build/notice/close-icon.cjs.map +3 -3
- package/build/notice/description.cjs +84 -5
- package/build/notice/description.cjs.map +3 -3
- package/build/notice/root.cjs +86 -10
- package/build/notice/root.cjs.map +3 -3
- package/build/notice/title.cjs +84 -5
- package/build/notice/title.cjs.map +3 -3
- package/build/popover/arrow.cjs +85 -6
- package/build/popover/arrow.cjs.map +3 -3
- package/build/popover/context.cjs +4 -56
- package/build/popover/context.cjs.map +2 -2
- package/build/popover/description.cjs +1 -24
- 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 +96 -23
- package/build/popover/popup.cjs.map +3 -3
- 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 +92 -2
- package/build/popover/title.cjs.map +3 -3
- package/build/popover/types.cjs.map +1 -1
- package/build/stack/stack.cjs +84 -5
- package/build/stack/stack.cjs.map +3 -3
- package/build/tabs/list.cjs +84 -5
- package/build/tabs/list.cjs.map +3 -3
- package/build/tabs/panel.cjs +86 -10
- package/build/tabs/panel.cjs.map +3 -3
- package/build/tabs/tab.cjs +84 -5
- package/build/tabs/tab.cjs.map +3 -3
- package/build/text/text.cjs +88 -12
- package/build/text/text.cjs.map +3 -3
- package/build/tooltip/index.cjs +6 -0
- package/build/tooltip/index.cjs.map +2 -2
- package/build/tooltip/popup.cjs +114 -46
- package/build/tooltip/popup.cjs.map +4 -4
- package/build/tooltip/portal.cjs +38 -0
- package/build/tooltip/portal.cjs.map +7 -0
- package/build/tooltip/positioner.cjs +159 -0
- package/build/tooltip/positioner.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-slot-with-children.cjs +34 -0
- package/build/utils/render-slot-with-children.cjs.map +7 -0
- 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/visually-hidden/visually-hidden.cjs +89 -6
- package/build/visually-hidden/visually-hidden.cjs.map +3 -3
- 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 +198 -60
- 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 +84 -5
- package/build-module/badge/badge.mjs.map +3 -3
- package/build-module/button/button.mjs +90 -20
- package/build-module/button/button.mjs.map +3 -3
- package/build-module/button/icon.mjs.map +2 -2
- package/build-module/button/index.mjs +3 -2
- package/build-module/button/index.mjs.map +2 -2
- package/build-module/card/content.mjs +84 -5
- package/build-module/card/content.mjs.map +3 -3
- package/build-module/card/full-bleed.mjs +84 -5
- package/build-module/card/full-bleed.mjs.map +3 -3
- package/build-module/card/header.mjs +84 -5
- package/build-module/card/header.mjs.map +3 -3
- package/build-module/card/root.mjs +86 -10
- package/build-module/card/root.mjs.map +3 -3
- package/build-module/collapsible-card/content.mjs +90 -7
- package/build-module/collapsible-card/content.mjs.map +3 -3
- package/build-module/collapsible-card/header.mjs +131 -52
- package/build-module/collapsible-card/header.mjs.map +3 -3
- package/build-module/dialog/content.mjs +126 -0
- package/build-module/dialog/content.mjs.map +7 -0
- package/build-module/dialog/context.mjs +10 -63
- package/build-module/dialog/context.mjs.map +2 -2
- package/build-module/dialog/description.mjs +113 -0
- package/build-module/dialog/description.mjs.map +7 -0
- package/build-module/dialog/footer.mjs +86 -6
- package/build-module/dialog/footer.mjs.map +3 -3
- package/build-module/dialog/header.mjs +86 -6
- package/build-module/dialog/header.mjs.map +3 -3
- package/build-module/dialog/index.mjs +6 -0
- package/build-module/dialog/index.mjs.map +2 -2
- package/build-module/dialog/popup.mjs +104 -13
- package/build-module/dialog/popup.mjs.map +3 -3
- 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 +85 -6
- package/build-module/dialog/title.mjs.map +3 -3
- 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 +135 -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 +109 -0
- package/build-module/drawer/footer.mjs.map +7 -0
- package/build-module/drawer/header.mjs +109 -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 +149 -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 +124 -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/drawer/types.mjs.map +7 -0
- package/build-module/empty-state/actions.mjs +84 -5
- package/build-module/empty-state/actions.mjs.map +3 -3
- package/build-module/empty-state/description.mjs +84 -5
- package/build-module/empty-state/description.mjs.map +3 -3
- package/build-module/empty-state/icon.mjs +84 -5
- package/build-module/empty-state/icon.mjs.map +3 -3
- package/build-module/empty-state/root.mjs +84 -5
- package/build-module/empty-state/root.mjs.map +3 -3
- package/build-module/empty-state/title.mjs +84 -5
- package/build-module/empty-state/title.mjs.map +3 -3
- package/build-module/empty-state/visual.mjs +84 -5
- package/build-module/empty-state/visual.mjs.map +3 -3
- package/build-module/form/index.mjs +1 -0
- package/build-module/form/index.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 +111 -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 +122 -0
- package/build-module/form/primitives/autocomplete/item.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/list-body.mjs +111 -0
- package/build-module/form/primitives/autocomplete/list-body.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/list.mjs +111 -0
- package/build-module/form/primitives/autocomplete/list.mjs.map +7 -0
- package/build-module/form/primitives/autocomplete/popup.mjs +142 -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/types.mjs.map +7 -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 +86 -10
- package/build-module/form/primitives/field/description.mjs.map +3 -3
- package/build-module/form/primitives/field/details.mjs +84 -5
- package/build-module/form/primitives/field/details.mjs.map +3 -3
- package/build-module/form/primitives/field/label.mjs +84 -5
- package/build-module/form/primitives/field/label.mjs.map +3 -3
- package/build-module/form/primitives/field/root.mjs +84 -5
- package/build-module/form/primitives/field/root.mjs.map +3 -3
- package/build-module/form/primitives/fieldset/description.mjs +86 -10
- package/build-module/form/primitives/fieldset/description.mjs.map +3 -3
- package/build-module/form/primitives/fieldset/details.mjs +84 -5
- package/build-module/form/primitives/fieldset/details.mjs.map +3 -3
- package/build-module/form/primitives/fieldset/legend.mjs +84 -5
- package/build-module/form/primitives/fieldset/legend.mjs.map +3 -3
- package/build-module/form/primitives/fieldset/root.mjs +84 -5
- package/build-module/form/primitives/fieldset/root.mjs.map +3 -3
- 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 +88 -15
- package/build-module/form/primitives/input/input.mjs.map +3 -3
- package/build-module/form/primitives/input-layout/input-layout.mjs +88 -15
- package/build-module/form/primitives/input-layout/input-layout.mjs.map +3 -3
- package/build-module/form/primitives/input-layout/slot.mjs +84 -5
- package/build-module/form/primitives/input-layout/slot.mjs.map +3 -3
- 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 +88 -13
- package/build-module/form/primitives/select/item.mjs.map +3 -3
- package/build-module/form/primitives/select/popup.mjs +97 -23
- package/build-module/form/primitives/select/popup.mjs.map +3 -3
- 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/root.mjs.map +2 -2
- package/build-module/form/primitives/select/trigger.mjs +98 -16
- package/build-module/form/primitives/select/trigger.mjs.map +3 -3
- package/build-module/form/primitives/textarea/textarea.mjs +86 -10
- package/build-module/form/primitives/textarea/textarea.mjs.map +3 -3
- package/build-module/form/select-control/context.mjs +11 -0
- package/build-module/form/select-control/context.mjs.map +7 -0
- package/build-module/form/select-control/index.mjs +14 -0
- package/build-module/form/select-control/index.mjs.map +7 -0
- package/build-module/form/select-control/item.mjs +16 -0
- package/build-module/form/select-control/item.mjs.map +7 -0
- package/build-module/form/select-control/select-control.mjs +50 -0
- package/build-module/form/select-control/select-control.mjs.map +7 -0
- package/build-module/form/select-control/types.mjs +1 -0
- package/build-module/form/select-control/types.mjs.map +7 -0
- package/build-module/icon-button/icon-button.mjs +86 -6
- package/build-module/icon-button/icon-button.mjs.map +3 -3
- package/build-module/index.mjs +2 -0
- package/build-module/index.mjs.map +2 -2
- package/build-module/link/link.mjs +90 -20
- package/build-module/link/link.mjs.map +3 -3
- package/build-module/notice/action-button.mjs +84 -5
- package/build-module/notice/action-button.mjs.map +3 -3
- package/build-module/notice/action-link.mjs +84 -5
- package/build-module/notice/action-link.mjs.map +3 -3
- package/build-module/notice/actions.mjs +84 -5
- package/build-module/notice/actions.mjs.map +3 -3
- package/build-module/notice/close-icon.mjs +84 -5
- package/build-module/notice/close-icon.mjs.map +3 -3
- package/build-module/notice/description.mjs +84 -5
- package/build-module/notice/description.mjs.map +3 -3
- package/build-module/notice/root.mjs +86 -10
- package/build-module/notice/root.mjs.map +3 -3
- package/build-module/notice/title.mjs +84 -5
- package/build-module/notice/title.mjs.map +3 -3
- package/build-module/popover/arrow.mjs +85 -6
- package/build-module/popover/arrow.mjs.map +3 -3
- package/build-module/popover/context.mjs +4 -63
- package/build-module/popover/context.mjs.map +2 -2
- package/build-module/popover/description.mjs +1 -14
- 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 +97 -24
- package/build-module/popover/popup.mjs.map +3 -3
- 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 +92 -2
- package/build-module/popover/title.mjs.map +3 -3
- package/build-module/stack/stack.mjs +84 -5
- package/build-module/stack/stack.mjs.map +3 -3
- package/build-module/tabs/list.mjs +84 -5
- package/build-module/tabs/list.mjs.map +3 -3
- package/build-module/tabs/panel.mjs +86 -10
- package/build-module/tabs/panel.mjs.map +3 -3
- package/build-module/tabs/tab.mjs +84 -5
- package/build-module/tabs/tab.mjs.map +3 -3
- package/build-module/text/text.mjs +88 -12
- package/build-module/text/text.mjs.map +3 -3
- package/build-module/tooltip/index.mjs +4 -0
- package/build-module/tooltip/index.mjs.map +2 -2
- package/build-module/tooltip/popup.mjs +115 -47
- package/build-module/tooltip/popup.mjs.map +3 -3
- package/build-module/tooltip/portal.mjs +13 -0
- package/build-module/tooltip/portal.mjs.map +7 -0
- package/build-module/tooltip/positioner.mjs +124 -0
- package/build-module/tooltip/positioner.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-slot-with-children.mjs +9 -0
- package/build-module/utils/render-slot-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/visually-hidden/visually-hidden.mjs +89 -6
- package/build-module/visually-hidden/visually-hidden.mjs.map +3 -3
- 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/root.d.ts +1 -1
- package/build-types/alert-dialog/root.d.ts.map +1 -1
- package/build-types/alert-dialog/stories/index.story.d.ts +28 -0
- package/build-types/alert-dialog/stories/index.story.d.ts.map +1 -1
- package/build-types/alert-dialog/types.d.ts +25 -3
- package/build-types/alert-dialog/types.d.ts.map +1 -1
- package/build-types/badge/stories/choosing-intent.story.d.ts.map +1 -1
- package/build-types/badge/stories/index.story.d.ts.map +1 -1
- package/build-types/button/button.d.ts +3 -0
- package/build-types/button/button.d.ts.map +1 -1
- package/build-types/button/icon.d.ts +1 -8
- package/build-types/button/icon.d.ts.map +1 -1
- package/build-types/button/index.d.ts +6 -5
- package/build-types/button/index.d.ts.map +1 -1
- package/build-types/button/stories/index.story.d.ts.map +1 -1
- package/build-types/button/types.d.ts +7 -0
- package/build-types/button/types.d.ts.map +1 -1
- package/build-types/card/stories/index.story.d.ts.map +1 -1
- package/build-types/collapsible/panel.d.ts +1 -1
- package/build-types/collapsible/root.d.ts +1 -1
- package/build-types/collapsible/stories/index.story.d.ts.map +1 -1
- package/build-types/collapsible/trigger.d.ts +1 -1
- package/build-types/collapsible-card/content.d.ts.map +1 -1
- package/build-types/collapsible-card/header.d.ts +6 -0
- package/build-types/collapsible-card/header.d.ts.map +1 -1
- package/build-types/collapsible-card/stories/index.story.d.ts +8 -0
- 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 +2 -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 +29 -6
- package/build-types/dialog/stories/index.story.d.ts.map +1 -1
- package/build-types/dialog/types.d.ts +60 -7
- 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 +24 -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 +15 -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/stories/index.story.d.ts.map +1 -1
- package/build-types/form/index.d.ts +1 -0
- package/build-types/form/index.d.ts.map +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/control.d.ts +2 -2
- package/build-types/form/primitives/field/description.d.ts +1 -1
- package/build-types/form/primitives/field/details.d.ts +1 -1
- package/build-types/form/primitives/field/label.d.ts +3 -3
- package/build-types/form/primitives/field/root.d.ts +3 -3
- package/build-types/form/primitives/field/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/fieldset/description.d.ts +1 -1
- package/build-types/form/primitives/fieldset/details.d.ts +1 -1
- package/build-types/form/primitives/fieldset/legend.d.ts +1 -1
- package/build-types/form/primitives/fieldset/root.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/input.d.ts +5 -5
- 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.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 +3 -3
- package/build-types/form/primitives/select/item.d.ts.map +1 -1
- package/build-types/form/primitives/select/popup.d.ts +2 -3
- 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/root.d.ts +12 -1
- package/build-types/form/primitives/select/root.d.ts.map +1 -1
- package/build-types/form/primitives/select/stories/index.story.d.ts +22 -11
- package/build-types/form/primitives/select/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/select/trigger.d.ts +5 -4
- package/build-types/form/primitives/select/trigger.d.ts.map +1 -1
- package/build-types/form/primitives/select/types.d.ts +19 -6
- package/build-types/form/primitives/select/types.d.ts.map +1 -1
- package/build-types/form/primitives/textarea/stories/index.story.d.ts.map +1 -1
- package/build-types/form/primitives/textarea/textarea.d.ts +2 -2
- package/build-types/form/select-control/context.d.ts +3 -0
- package/build-types/form/select-control/context.d.ts.map +1 -0
- package/build-types/form/select-control/index.d.ts +20 -0
- package/build-types/form/select-control/index.d.ts.map +1 -0
- package/build-types/form/select-control/item.d.ts +6 -0
- package/build-types/form/select-control/item.d.ts.map +1 -0
- package/build-types/form/select-control/select-control.d.ts +11 -0
- package/build-types/form/select-control/select-control.d.ts.map +1 -0
- package/build-types/form/select-control/stories/index.story.d.ts +40 -0
- package/build-types/form/select-control/stories/index.story.d.ts.map +1 -0
- package/build-types/form/select-control/test/index.test.d.ts +2 -0
- package/build-types/form/select-control/test/index.test.d.ts.map +1 -0
- package/build-types/form/select-control/types.d.ts +40 -0
- package/build-types/form/select-control/types.d.ts.map +1 -0
- package/build-types/form/types.d.ts +1 -1
- package/build-types/form/types.d.ts.map +1 -1
- package/build-types/icon/stories/index.story.d.ts.map +1 -1
- package/build-types/icon-button/icon-button.d.ts +2 -1
- package/build-types/icon-button/icon-button.d.ts.map +1 -1
- package/build-types/icon-button/stories/index.story.d.ts +5 -0
- package/build-types/icon-button/stories/index.story.d.ts.map +1 -1
- package/build-types/icon-button/types.d.ts +8 -0
- package/build-types/icon-button/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/stories/index.story.d.ts +2 -3
- package/build-types/link/stories/index.story.d.ts.map +1 -1
- package/build-types/notice/stories/index.story.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 +22 -14
- 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 +1 -1
- package/build-types/tabs/context.d.ts.map +1 -1
- package/build-types/tabs/list.d.ts +2 -2
- package/build-types/tabs/panel.d.ts +1 -1
- package/build-types/tabs/root.d.ts +1 -1
- package/build-types/tabs/stories/index.story.d.ts.map +1 -1
- package/build-types/tabs/tab.d.ts +1 -1
- package/build-types/text/stories/index.story.d.ts.map +1 -1
- package/build-types/tooltip/index.d.ts +3 -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/positioner.d.ts +9 -0
- package/build-types/tooltip/positioner.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/stories/index.story.d.ts +28 -2
- package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
- package/build-types/tooltip/stories/usage-guidelines.story.d.ts.map +1 -1
- package/build-types/tooltip/trigger.d.ts.map +1 -1
- package/build-types/tooltip/types.d.ts +20 -7
- 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-slot-with-children.d.ts +24 -0
- package/build-types/utils/render-slot-with-children.d.ts.map +1 -0
- 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/visually-hidden/stories/index.story.d.ts.map +1 -1
- package/build-types/visually-hidden/visually-hidden.d.ts +4 -20
- package/build-types/visually-hidden/visually-hidden.d.ts.map +1 -1
- package/package.json +14 -13
- 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 +129 -1
- package/src/alert-dialog/style.module.css +13 -4
- package/src/alert-dialog/test/index.test.tsx +329 -3
- package/src/alert-dialog/types.ts +30 -3
- package/src/badge/stories/index.story.tsx +6 -0
- package/src/button/button.tsx +3 -0
- package/src/button/icon.tsx +1 -8
- package/src/button/index.ts +5 -6
- package/src/button/stories/index.story.tsx +10 -0
- package/src/button/types.ts +8 -0
- package/src/card/stories/index.story.tsx +7 -0
- package/src/collapsible/stories/index.story.tsx +7 -0
- package/src/collapsible-card/content.tsx +12 -1
- package/src/collapsible-card/header.tsx +55 -42
- package/src/collapsible-card/stories/index.story.tsx +62 -0
- package/src/collapsible-card/style.module.css +36 -4
- package/src/collapsible-card/test/index.test.tsx +60 -1
- package/src/dialog/content.tsx +47 -0
- package/src/dialog/context.tsx +14 -111
- 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 +27 -8
- package/src/dialog/portal.tsx +18 -0
- package/src/dialog/root.tsx +22 -5
- package/src/dialog/stories/index.story.tsx +200 -48
- package/src/dialog/style.module.css +76 -44
- package/src/dialog/test/index.test.tsx +632 -12
- package/src/dialog/types.ts +64 -6
- package/src/drawer/action.tsx +28 -0
- package/src/drawer/close-icon.tsx +33 -0
- package/src/drawer/content.tsx +65 -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 +99 -0
- package/src/drawer/portal.tsx +18 -0
- package/src/drawer/root.tsx +41 -0
- package/src/drawer/stories/index.story.tsx +550 -0
- package/src/drawer/style.module.css +356 -0
- package/src/drawer/test/index.test.tsx +1153 -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/stories/index.story.tsx +7 -0
- package/src/form/index.ts +1 -0
- package/src/form/input-control/stories/index.story.tsx +7 -0
- 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 +445 -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/stories/index.story.tsx +12 -5
- package/src/form/primitives/fieldset/stories/index.story.tsx +10 -3
- package/src/form/primitives/index.ts +1 -0
- package/src/form/primitives/input/stories/index.story.tsx +7 -0
- package/src/form/primitives/input-layout/stories/index.story.tsx +8 -1
- package/src/form/primitives/select/index.ts +1 -0
- package/src/form/primitives/select/item.tsx +1 -2
- package/src/form/primitives/select/popup.tsx +34 -37
- package/src/form/primitives/select/portal.tsx +16 -0
- package/src/form/primitives/select/root.tsx +13 -2
- package/src/form/primitives/select/stories/index.story.tsx +152 -67
- package/src/form/primitives/select/test/index.test.tsx +130 -8
- package/src/form/primitives/select/trigger.tsx +11 -8
- package/src/form/primitives/select/types.ts +22 -7
- package/src/form/primitives/textarea/stories/index.story.tsx +7 -0
- package/src/form/select-control/context.tsx +9 -0
- package/src/form/select-control/index.ts +14 -0
- package/src/form/select-control/item.tsx +13 -0
- package/src/form/select-control/select-control.tsx +65 -0
- package/src/form/select-control/stories/index.story.tsx +220 -0
- package/src/form/select-control/test/index.test.tsx +196 -0
- package/src/form/select-control/types.ts +50 -0
- package/src/form/types.ts +1 -1
- package/src/icon/stories/index.story.tsx +7 -0
- package/src/icon-button/icon-button.tsx +2 -1
- package/src/icon-button/stories/index.story.tsx +20 -0
- package/src/icon-button/types.ts +9 -0
- package/src/index.ts +1 -0
- package/src/link/stories/index.story.tsx +12 -11
- package/src/link/style.module.css +2 -1
- package/src/notice/stories/index.story.tsx +7 -0
- package/src/popover/context.tsx +6 -105
- package/src/popover/description.tsx +1 -5
- package/src/popover/index.ts +2 -1
- package/src/popover/popup.tsx +15 -16
- package/src/popover/portal.tsx +17 -0
- package/src/popover/root.tsx +2 -2
- package/src/popover/stories/index.story.tsx +61 -24
- package/src/popover/style.module.css +34 -27
- package/src/popover/test/index.test.tsx +46 -7
- package/src/popover/title.tsx +3 -2
- package/src/popover/types.ts +10 -15
- package/src/stack/stories/index.story.tsx +6 -0
- package/src/tabs/stories/index.story.tsx +15 -1
- package/src/text/stories/index.story.tsx +6 -0
- package/src/text/style.module.css +25 -0
- package/src/text/text.tsx +2 -2
- package/src/tooltip/index.ts +3 -1
- package/src/tooltip/popup.tsx +32 -44
- package/src/tooltip/portal.tsx +16 -0
- package/src/tooltip/positioner.tsx +36 -0
- package/src/tooltip/provider.tsx +3 -3
- package/src/tooltip/root.tsx +2 -2
- package/src/tooltip/stories/index.story.tsx +97 -9
- package/src/tooltip/stories/usage-guidelines.story.tsx +5 -0
- package/src/tooltip/style.module.css +12 -12
- package/src/tooltip/test/index.test.tsx +9 -3
- package/src/tooltip/trigger.tsx +3 -7
- package/src/tooltip/types.ts +26 -9
- package/src/utils/create-overlay-modal-context.tsx +34 -0
- package/src/utils/create-overlay-title-validation.tsx +116 -0
- package/src/utils/css/dropdown-motion.module.css +3 -3
- package/src/utils/css/item-popup.module.css +14 -24
- package/src/utils/css/overlay-chrome.module.css +239 -0
- package/src/utils/css/select-trigger.module.css +5 -2
- package/src/utils/render-slot-with-children.ts +31 -0
- package/src/utils/test/use-deprioritized-initial-focus.test.tsx +3 -3
- package/src/utils/use-deprioritized-initial-focus.ts +23 -17
- package/src/utils/use-overlay-scroll-state-attributes.ts +272 -0
- package/src/visually-hidden/stories/index.story.tsx +7 -0
- package/src/visually-hidden/visually-hidden.tsx +9 -21
package/src/dialog/types.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import type { Dialog as _Dialog } from '@base-ui/react/dialog';
|
|
2
|
-
import type { ReactNode } from 'react';
|
|
2
|
+
import type { ComponentPropsWithoutRef, ReactElement, ReactNode } from 'react';
|
|
3
|
+
|
|
3
4
|
import type { Button } from '../button';
|
|
4
5
|
import type { IconButton } from '../icon-button';
|
|
5
6
|
import type { ComponentProps } from '../utils/types';
|
|
6
7
|
|
|
8
|
+
export type PortalProps = ComponentPropsWithoutRef< typeof _Dialog.Portal >;
|
|
9
|
+
|
|
7
10
|
export interface RootProps
|
|
8
11
|
extends Pick<
|
|
9
12
|
_Dialog.Root.Props,
|
|
10
13
|
| 'open'
|
|
11
14
|
| 'onOpenChange'
|
|
15
|
+
| 'onOpenChangeComplete'
|
|
12
16
|
| 'defaultOpen'
|
|
13
17
|
| 'modal'
|
|
14
18
|
| 'disablePointerDismissal'
|
|
@@ -35,18 +39,29 @@ export interface PopupProps
|
|
|
35
39
|
children?: ReactNode;
|
|
36
40
|
|
|
37
41
|
/**
|
|
38
|
-
*
|
|
42
|
+
* Optional portal element, typically `<Dialog.Portal />` with custom
|
|
43
|
+
* `container`, `className`, or `style`. The popup and backdrop are
|
|
44
|
+
* rendered as this portal's children (do not pass `children` on the portal
|
|
45
|
+
* element; they would be ignored).
|
|
46
|
+
*
|
|
47
|
+
* When omitted, `Dialog.Popup` uses `Dialog.Portal` with default props,
|
|
48
|
+
* rendering the portal in the current document's `<body>`.
|
|
39
49
|
*/
|
|
40
|
-
|
|
50
|
+
portal?: ReactElement< Omit< PortalProps, 'children' > >;
|
|
41
51
|
|
|
42
52
|
/**
|
|
43
53
|
* Renders the dialog at a preset width (excluding additional padding from
|
|
44
54
|
* the viewport edges).
|
|
45
55
|
*
|
|
56
|
+
* Height is not directly controlled by `size`: for every value except
|
|
57
|
+
* `'full'`, the dialog fits its content up to the viewport height
|
|
58
|
+
* (minus the viewport inset) and scrolls internally when it overflows.
|
|
59
|
+
* `'full'` stretches the dialog to the available viewport height.
|
|
60
|
+
*
|
|
46
61
|
* - `'small'` — narrow max-width.
|
|
47
62
|
* - `'medium'` — moderate max-width.
|
|
48
63
|
* - `'large'` — wide max-width.
|
|
49
|
-
* - `'stretch'` — no max-width, stretches to fill available
|
|
64
|
+
* - `'stretch'` — no max-width, stretches to fill available width.
|
|
50
65
|
* - `'full'` — stretches to fill available width and height.
|
|
51
66
|
*
|
|
52
67
|
* @default 'medium'
|
|
@@ -61,20 +76,56 @@ export interface ActionProps extends ComponentProps< typeof Button > {
|
|
|
61
76
|
children?: ReactNode;
|
|
62
77
|
}
|
|
63
78
|
|
|
64
|
-
export interface FooterProps extends ComponentProps< '
|
|
79
|
+
export interface FooterProps extends ComponentProps< 'footer' > {
|
|
65
80
|
/**
|
|
66
81
|
* The content to be rendered inside the component.
|
|
67
82
|
*/
|
|
68
83
|
children?: ReactNode;
|
|
69
84
|
}
|
|
70
85
|
|
|
71
|
-
export interface HeaderProps extends ComponentProps< '
|
|
86
|
+
export interface HeaderProps extends ComponentProps< 'header' > {
|
|
72
87
|
/**
|
|
73
88
|
* The content to be rendered inside the component.
|
|
74
89
|
*/
|
|
75
90
|
children?: ReactNode;
|
|
76
91
|
}
|
|
77
92
|
|
|
93
|
+
export interface ContentProps extends ComponentProps< 'div' > {
|
|
94
|
+
/**
|
|
95
|
+
* The body content to be rendered inside the scroll container.
|
|
96
|
+
*/
|
|
97
|
+
children?: ReactNode;
|
|
98
|
+
/**
|
|
99
|
+
* The scroll region automatically becomes a keyboard-reachable tab
|
|
100
|
+
* stop (`tabindex="0"`) whenever the body overflows, so keyboard
|
|
101
|
+
* users can arrow-scroll the region (WCAG 2.1.1). It becomes
|
|
102
|
+
* non-tabbable again as soon as the content no longer overflows.
|
|
103
|
+
*
|
|
104
|
+
* If you supply `tabIndex` explicitly, your value wins and is never
|
|
105
|
+
* overwritten — including `tabIndex={ -1 }` to opt out of the
|
|
106
|
+
* automatic tab stop entirely, and including overrides applied
|
|
107
|
+
* after the component had already managed the value.
|
|
108
|
+
*
|
|
109
|
+
* Two narrow edge cases:
|
|
110
|
+
* - If you later *remove* an explicit `tabIndex` at runtime, the
|
|
111
|
+
* component will resume managing it on the next overflow tick; it
|
|
112
|
+
* can't distinguish a previous explicit opt-out from an
|
|
113
|
+
* unconfigured state.
|
|
114
|
+
* - Passing `tabIndex={ 0 }` while the body overflows produces a
|
|
115
|
+
* value identical to the auto-managed one, so the component can
|
|
116
|
+
* no longer tell the two apart and may strip it on the next
|
|
117
|
+
* non-overflow tick. Pick a different value (or rely on the
|
|
118
|
+
* default behavior, which is already `0` while overflowing).
|
|
119
|
+
*
|
|
120
|
+
* Note: the scroll region is intentionally rendered without
|
|
121
|
+
* `role` / `aria-label`, so screen readers don't announce a
|
|
122
|
+
* generic "scrollable" landmark on top of the dialog's existing
|
|
123
|
+
* heading + body; the surrounding `Dialog.Title` and body content
|
|
124
|
+
* provide the context.
|
|
125
|
+
*/
|
|
126
|
+
tabIndex?: number;
|
|
127
|
+
}
|
|
128
|
+
|
|
78
129
|
export interface TitleProps extends ComponentProps< 'h2' > {
|
|
79
130
|
/**
|
|
80
131
|
* The title content to be rendered. This serves as both the visible
|
|
@@ -86,6 +137,13 @@ export interface TitleProps extends ComponentProps< 'h2' > {
|
|
|
86
137
|
children?: ReactNode;
|
|
87
138
|
}
|
|
88
139
|
|
|
140
|
+
export interface DescriptionProps extends ComponentProps< 'p' > {
|
|
141
|
+
/**
|
|
142
|
+
* The description content to be rendered inside the component.
|
|
143
|
+
*/
|
|
144
|
+
children?: ReactNode;
|
|
145
|
+
}
|
|
146
|
+
|
|
89
147
|
export interface CloseIconProps
|
|
90
148
|
extends Omit<
|
|
91
149
|
ComponentProps< typeof IconButton >,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Drawer as _Drawer } from '@base-ui/react/drawer';
|
|
2
|
+
import { forwardRef } from '@wordpress/element';
|
|
3
|
+
import { Button } from '../button';
|
|
4
|
+
import type { ActionProps } from './types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Renders a button that closes the drawer when clicked.
|
|
8
|
+
* Accepts all Button component props for styling.
|
|
9
|
+
*/
|
|
10
|
+
const Action = forwardRef< HTMLButtonElement, ActionProps >(
|
|
11
|
+
function DrawerAction( { render, disabled, loading, ...props }, ref ) {
|
|
12
|
+
// Resolve `disabled` the same way Button does so that
|
|
13
|
+
// _Drawer.Close's internal useButton (which controls
|
|
14
|
+
// aria-disabled) stays in sync with the rendered Button.
|
|
15
|
+
const resolvedDisabled = disabled ?? loading;
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<_Drawer.Close
|
|
19
|
+
ref={ ref }
|
|
20
|
+
render={ <Button render={ render } loading={ loading } /> }
|
|
21
|
+
disabled={ resolvedDisabled }
|
|
22
|
+
{ ...props }
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
export { Action };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Drawer as _Drawer } from '@base-ui/react/drawer';
|
|
2
|
+
import { forwardRef } from '@wordpress/element';
|
|
3
|
+
import { __ } from '@wordpress/i18n';
|
|
4
|
+
import { close } from '@wordpress/icons';
|
|
5
|
+
import { IconButton } from '../icon-button';
|
|
6
|
+
import type { CloseIconProps } from './types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Renders an icon button that closes the drawer when clicked.
|
|
10
|
+
* Provides a default close icon and accessible label.
|
|
11
|
+
*/
|
|
12
|
+
const CloseIcon = forwardRef< HTMLButtonElement, CloseIconProps >(
|
|
13
|
+
function DrawerCloseIcon( { icon, label, ...props }, ref ) {
|
|
14
|
+
return (
|
|
15
|
+
<_Drawer.Close
|
|
16
|
+
ref={ ref }
|
|
17
|
+
render={
|
|
18
|
+
<IconButton
|
|
19
|
+
variant="minimal"
|
|
20
|
+
size="compact"
|
|
21
|
+
tone="neutral"
|
|
22
|
+
{ ...props }
|
|
23
|
+
icon={ icon ?? close }
|
|
24
|
+
label={ label ?? __( 'Close' ) }
|
|
25
|
+
data-wp-ui-drawer-close-icon=""
|
|
26
|
+
/>
|
|
27
|
+
}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
export { CloseIcon };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { mergeProps, useRender } from '@base-ui/react';
|
|
2
|
+
import { Drawer as _Drawer } from '@base-ui/react/drawer';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import { forwardRef } from '@wordpress/element';
|
|
5
|
+
import { useMergeRefs } from '@wordpress/compose';
|
|
6
|
+
import { useOverlayScrollStateAttributes } from '../utils/use-overlay-scroll-state-attributes';
|
|
7
|
+
import focusStyles from '../utils/css/focus.module.css';
|
|
8
|
+
import styles from './style.module.css';
|
|
9
|
+
import type { ContentProps } from './types';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Renders the scrollable body of the drawer, sitting between `Drawer.Header`
|
|
13
|
+
* and `Drawer.Footer` as a flex sibling.
|
|
14
|
+
*
|
|
15
|
+
* **Required for scrolling** — `Drawer.Content` is the element that owns
|
|
16
|
+
* the popup's overflow. Without it, body content that exceeds the popup's
|
|
17
|
+
* available space clips instead of scrolling, and swipe-to-dismiss on
|
|
18
|
+
* scrollable vertical drawers won't gate correctly at the scroll edge.
|
|
19
|
+
* Render it once per popup and wrap any freeform body content in it.
|
|
20
|
+
*
|
|
21
|
+
* Placing `Drawer.Header` or `Drawer.Footer` *inside* `Drawer.Content`
|
|
22
|
+
* makes them scroll with the body (the "non-sticky" opt-out) rather than
|
|
23
|
+
* staying pinned to the popup's edges.
|
|
24
|
+
*
|
|
25
|
+
* Mouse-drag swipe-to-dismiss is preserved in the popup-edge padding
|
|
26
|
+
* gutter and on the chrome regions; mouse drag over the body itself
|
|
27
|
+
* does not dismiss the drawer, so text selection inside the body keeps
|
|
28
|
+
* working normally. Touch swipe-to-dismiss engages from anywhere in
|
|
29
|
+
* the popup (gated by the scroll edge on vertical drawers).
|
|
30
|
+
*/
|
|
31
|
+
const Content = forwardRef< HTMLDivElement, ContentProps >(
|
|
32
|
+
function DrawerContent(
|
|
33
|
+
{ className, render, children, onScroll, ...props },
|
|
34
|
+
ref
|
|
35
|
+
) {
|
|
36
|
+
const { ref: scrollStateRef, onScroll: scrollStateOnScroll } =
|
|
37
|
+
useOverlayScrollStateAttributes< HTMLDivElement >( onScroll );
|
|
38
|
+
const mergedRef = useMergeRefs( [ ref, scrollStateRef ] );
|
|
39
|
+
|
|
40
|
+
const element = useRender( {
|
|
41
|
+
defaultTagName: 'div',
|
|
42
|
+
render,
|
|
43
|
+
ref: mergedRef,
|
|
44
|
+
props: mergeProps< 'div' >( props, {
|
|
45
|
+
className: clsx(
|
|
46
|
+
styles.content,
|
|
47
|
+
focusStyles[ 'outset-ring--focus-visible' ],
|
|
48
|
+
className
|
|
49
|
+
),
|
|
50
|
+
onScroll: scrollStateOnScroll,
|
|
51
|
+
// `_Drawer.Content` carries the `[data-drawer-content]`
|
|
52
|
+
// marker that Base UI's swipe-dismiss logic uses to skip
|
|
53
|
+
// mouse-drag swipes started inside the body, preserving
|
|
54
|
+
// text selection. It must sit *inside* the scroll
|
|
55
|
+
// container so the popup's edge padding gutter falls
|
|
56
|
+
// outside the marker and stays mouse-draggable.
|
|
57
|
+
children: <_Drawer.Content>{ children }</_Drawer.Content>,
|
|
58
|
+
} ),
|
|
59
|
+
} );
|
|
60
|
+
|
|
61
|
+
return element;
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
export { Content };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Drawer as _Drawer } from '@base-ui/react/drawer';
|
|
2
|
+
import { createOverlayModalContext } from '../utils/create-overlay-modal-context';
|
|
3
|
+
import { createOverlayTitleValidation } from '../utils/create-overlay-title-validation';
|
|
4
|
+
|
|
5
|
+
// -- Modal context ----------------------------------------------------------
|
|
6
|
+
|
|
7
|
+
const drawerModal =
|
|
8
|
+
createOverlayModalContext< _Drawer.Root.Props[ 'modal' ] >( true );
|
|
9
|
+
|
|
10
|
+
export const DrawerModalProvider = drawerModal.Provider;
|
|
11
|
+
export const useDrawerModal = drawerModal.useModal;
|
|
12
|
+
|
|
13
|
+
// -- Validation context (dev-only) ------------------------------------------
|
|
14
|
+
|
|
15
|
+
const drawerTitleValidation = createOverlayTitleValidation( 'Drawer' );
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Hook to access the drawer validation context.
|
|
19
|
+
* Returns null in production or if not within a Drawer.Popup.
|
|
20
|
+
*/
|
|
21
|
+
export const useDrawerValidationContext =
|
|
22
|
+
drawerTitleValidation.useValidationContext;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Provider component that validates Drawer.Title presence in development mode.
|
|
26
|
+
* In production, this component is a no-op and just renders children.
|
|
27
|
+
*/
|
|
28
|
+
export const DrawerValidationProvider =
|
|
29
|
+
drawerTitleValidation.ValidationProvider;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Drawer as _Drawer } from '@base-ui/react/drawer';
|
|
2
|
+
import { forwardRef } from '@wordpress/element';
|
|
3
|
+
import { Text } from '../text';
|
|
4
|
+
import type { DescriptionProps } from './types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Renders an optional paragraph that describes the drawer content.
|
|
8
|
+
*
|
|
9
|
+
* The rendered element is linked to the popup via `aria-describedby`.
|
|
10
|
+
*/
|
|
11
|
+
const Description = forwardRef< HTMLParagraphElement, DescriptionProps >(
|
|
12
|
+
function DrawerDescription( { children, ...props }, ref ) {
|
|
13
|
+
return (
|
|
14
|
+
<Text
|
|
15
|
+
ref={ ref }
|
|
16
|
+
variant="body-md"
|
|
17
|
+
render={ <_Drawer.Description { ...props } /> }
|
|
18
|
+
>
|
|
19
|
+
{ children }
|
|
20
|
+
</Text>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export { Description };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { mergeProps, useRender } from '@base-ui/react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { forwardRef } from '@wordpress/element';
|
|
4
|
+
import styles from './style.module.css';
|
|
5
|
+
import type { FooterProps } from './types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Renders the footer section of the drawer, typically containing
|
|
9
|
+
* action buttons.
|
|
10
|
+
*
|
|
11
|
+
* Defaults to a native `<footer>` element for richer semantics (contentinfo
|
|
12
|
+
* landmark navigation where screen readers expose landmarks nested in
|
|
13
|
+
* dialogs). Pass `render` to opt out of the default tag.
|
|
14
|
+
*
|
|
15
|
+
* The footer is pinned to the bottom of the popup by default. To let it
|
|
16
|
+
* scroll with the body instead, render it *inside* `Drawer.Content`.
|
|
17
|
+
*/
|
|
18
|
+
const Footer = forwardRef< HTMLElement, FooterProps >( function DrawerFooter(
|
|
19
|
+
{ className, render, ...props },
|
|
20
|
+
ref
|
|
21
|
+
) {
|
|
22
|
+
const element = useRender( {
|
|
23
|
+
defaultTagName: 'footer',
|
|
24
|
+
render,
|
|
25
|
+
ref,
|
|
26
|
+
props: mergeProps< 'footer' >( props, {
|
|
27
|
+
className: clsx( styles.footer, className ),
|
|
28
|
+
} ),
|
|
29
|
+
} );
|
|
30
|
+
|
|
31
|
+
return element;
|
|
32
|
+
} );
|
|
33
|
+
|
|
34
|
+
export { Footer };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { mergeProps, useRender } from '@base-ui/react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { forwardRef } from '@wordpress/element';
|
|
4
|
+
import styles from './style.module.css';
|
|
5
|
+
import type { HeaderProps } from './types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Renders the header section of the drawer, typically containing
|
|
9
|
+
* the heading and close button.
|
|
10
|
+
*
|
|
11
|
+
* Defaults to a native `<header>` element for richer semantics (heading-level
|
|
12
|
+
* scanning, and banner landmark navigation where screen readers expose
|
|
13
|
+
* landmarks nested in dialogs). Pass `render` to opt out of the default tag.
|
|
14
|
+
*
|
|
15
|
+
* The header is pinned to the top of the popup by default. To let it scroll
|
|
16
|
+
* with the body instead, render it *inside* `Drawer.Content`.
|
|
17
|
+
*/
|
|
18
|
+
const Header = forwardRef< HTMLElement, HeaderProps >( function DrawerHeader(
|
|
19
|
+
{ className, render, ...props },
|
|
20
|
+
ref
|
|
21
|
+
) {
|
|
22
|
+
const element = useRender( {
|
|
23
|
+
defaultTagName: 'header',
|
|
24
|
+
render,
|
|
25
|
+
ref,
|
|
26
|
+
props: mergeProps< 'header' >( props, {
|
|
27
|
+
className: clsx( styles.header, className ),
|
|
28
|
+
} ),
|
|
29
|
+
} );
|
|
30
|
+
|
|
31
|
+
return element;
|
|
32
|
+
} );
|
|
33
|
+
|
|
34
|
+
export { Header };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Action } from './action';
|
|
2
|
+
import { CloseIcon } from './close-icon';
|
|
3
|
+
import { Content } from './content';
|
|
4
|
+
import { Description } from './description';
|
|
5
|
+
import { Footer } from './footer';
|
|
6
|
+
import { Header } from './header';
|
|
7
|
+
import { Popup } from './popup';
|
|
8
|
+
import { Portal } from './portal';
|
|
9
|
+
import { Root } from './root';
|
|
10
|
+
import { Title } from './title';
|
|
11
|
+
import { Trigger } from './trigger';
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
Action,
|
|
15
|
+
CloseIcon,
|
|
16
|
+
Content,
|
|
17
|
+
Description,
|
|
18
|
+
Footer,
|
|
19
|
+
Header,
|
|
20
|
+
Popup,
|
|
21
|
+
Portal,
|
|
22
|
+
Root,
|
|
23
|
+
Title,
|
|
24
|
+
Trigger,
|
|
25
|
+
};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Drawer as _Drawer } from '@base-ui/react/drawer';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { forwardRef } from '@wordpress/element';
|
|
4
|
+
import { useMergeRefs } from '@wordpress/compose';
|
|
5
|
+
import {
|
|
6
|
+
type ThemeProvider as ThemeProviderType,
|
|
7
|
+
privateApis as themePrivateApis,
|
|
8
|
+
} from '@wordpress/theme';
|
|
9
|
+
import { unlock } from '../lock-unlock';
|
|
10
|
+
import { useDeprioritizedInitialFocus } from '../utils/use-deprioritized-initial-focus';
|
|
11
|
+
import { SCROLL_CONTAINER_ATTR } from '../utils/use-overlay-scroll-state-attributes';
|
|
12
|
+
import { renderSlotWithChildren } from '../utils/render-slot-with-children';
|
|
13
|
+
import { DrawerValidationProvider, useDrawerModal } from './context';
|
|
14
|
+
import { Portal } from './portal';
|
|
15
|
+
import styles from './style.module.css';
|
|
16
|
+
import type { PopupProps } from './types';
|
|
17
|
+
|
|
18
|
+
const ThemeProvider: typeof ThemeProviderType =
|
|
19
|
+
unlock( themePrivateApis ).ThemeProvider;
|
|
20
|
+
|
|
21
|
+
const CLOSE_ICON_ATTR = 'data-wp-ui-drawer-close-icon';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Renders the drawer popup element that contains the drawer content.
|
|
25
|
+
* Uses a portal to render outside the DOM hierarchy.
|
|
26
|
+
*
|
|
27
|
+
* When `portal` is omitted, defaults to `Drawer.Portal`.
|
|
28
|
+
*
|
|
29
|
+
* The popup is a flex column; scroll ownership lives on `Drawer.Content`,
|
|
30
|
+
* which children are expected to render. Without it, long body content will
|
|
31
|
+
* clip instead of scrolling and Base UI's swipe-dismiss-on-scroll-edge
|
|
32
|
+
* logic on up/down drawers cannot engage.
|
|
33
|
+
*/
|
|
34
|
+
const Popup = forwardRef< HTMLDivElement, PopupProps >( function DrawerPopup(
|
|
35
|
+
{ className, portal, children, size, initialFocus, finalFocus, ...props },
|
|
36
|
+
ref
|
|
37
|
+
) {
|
|
38
|
+
const { resolvedInitialFocus, popupRef } = useDeprioritizedInitialFocus( {
|
|
39
|
+
initialFocus,
|
|
40
|
+
deprioritizedAttributes: [ CLOSE_ICON_ATTR, SCROLL_CONTAINER_ATTR ],
|
|
41
|
+
} );
|
|
42
|
+
const mergedRef = useMergeRefs( [ ref, popupRef ] );
|
|
43
|
+
const modal = useDrawerModal();
|
|
44
|
+
|
|
45
|
+
const portalChildren = (
|
|
46
|
+
<>
|
|
47
|
+
{ /*
|
|
48
|
+
* Only render a backdrop for fully modal drawers. Non-modal drawers
|
|
49
|
+
* should not dim the page, and `trap-focus` keeps outside pointer
|
|
50
|
+
* interactions enabled, so a backdrop would misrepresent that mode.
|
|
51
|
+
*/ }
|
|
52
|
+
{ modal === true && (
|
|
53
|
+
<_Drawer.Backdrop
|
|
54
|
+
className={ styles.backdrop }
|
|
55
|
+
data-testid="drawer-backdrop"
|
|
56
|
+
/>
|
|
57
|
+
) }
|
|
58
|
+
<_Drawer.Viewport className={ styles.viewport }>
|
|
59
|
+
{ /*
|
|
60
|
+
* ThemeProvider wraps _Drawer.Popup directly (matching Dialog
|
|
61
|
+
* and Popover) so the `display: contents` focus-trap workaround
|
|
62
|
+
* selector in the CSS module actually targets this subtree.
|
|
63
|
+
*/ }
|
|
64
|
+
<ThemeProvider>
|
|
65
|
+
<_Drawer.Popup
|
|
66
|
+
ref={ mergedRef }
|
|
67
|
+
className={ ( state ) => {
|
|
68
|
+
const isVertical =
|
|
69
|
+
state.swipeDirection === 'up' ||
|
|
70
|
+
state.swipeDirection === 'down';
|
|
71
|
+
const resolvedSize =
|
|
72
|
+
size ?? ( isVertical ? 'auto' : 'medium' );
|
|
73
|
+
|
|
74
|
+
return clsx(
|
|
75
|
+
styles.popup,
|
|
76
|
+
className,
|
|
77
|
+
styles[ `is-${ resolvedSize }` ]
|
|
78
|
+
);
|
|
79
|
+
} }
|
|
80
|
+
initialFocus={ resolvedInitialFocus }
|
|
81
|
+
finalFocus={ finalFocus }
|
|
82
|
+
{ ...props }
|
|
83
|
+
data-wp-ui-overlay-modal={
|
|
84
|
+
modal === true ? '' : undefined
|
|
85
|
+
}
|
|
86
|
+
>
|
|
87
|
+
<DrawerValidationProvider>
|
|
88
|
+
{ children }
|
|
89
|
+
</DrawerValidationProvider>
|
|
90
|
+
</_Drawer.Popup>
|
|
91
|
+
</ThemeProvider>
|
|
92
|
+
</_Drawer.Viewport>
|
|
93
|
+
</>
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
return renderSlotWithChildren( portal, <Portal />, portalChildren );
|
|
97
|
+
} );
|
|
98
|
+
|
|
99
|
+
export { Popup };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Drawer as _Drawer } from '@base-ui/react/drawer';
|
|
2
|
+
import { forwardRef } from '@wordpress/element';
|
|
3
|
+
import type { PortalProps } from './types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Root element that portals `Drawer` overlay content (`Backdrop`, `Viewport`
|
|
7
|
+
* with the inner `Popup`, etc.) outside the DOM hierarchy. Pass to
|
|
8
|
+
* `Drawer.Popup`'s `portal` prop to customize `container`, `className`,
|
|
9
|
+
* `style`, and other Base UI portal options. When `portal` is omitted,
|
|
10
|
+
* `Drawer.Popup` uses this component with default props.
|
|
11
|
+
*/
|
|
12
|
+
const Portal = forwardRef< HTMLDivElement, PortalProps >(
|
|
13
|
+
function DrawerPortal( props, ref ) {
|
|
14
|
+
return <_Drawer.Portal ref={ ref } { ...props } />;
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
export { Portal };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Drawer as _Drawer } from '@base-ui/react/drawer';
|
|
2
|
+
import { DrawerModalProvider } from './context';
|
|
3
|
+
import type { RootProps } from './types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* An ARIA-compliant drawer that slides in from a viewport edge, with
|
|
7
|
+
* swipe-to-dismiss gestures.
|
|
8
|
+
*
|
|
9
|
+
* Every drawer must include a `Drawer.Title` component for accessibility — it
|
|
10
|
+
* serves as both the visible heading and the accessible label for the drawer.
|
|
11
|
+
*
|
|
12
|
+
* Always include a visible close affordance, either `Drawer.CloseIcon` or a
|
|
13
|
+
* clear dismissing action button. If your drawer has a "Cancel" button in the
|
|
14
|
+
* footer, the close icon may be redundant and create confusion about what
|
|
15
|
+
* clicking "X" means.
|
|
16
|
+
*
|
|
17
|
+
* Use `Drawer.CloseIcon` for informational drawers where dismissing is safe
|
|
18
|
+
* and expected. For drawers requiring explicit user choice (especially
|
|
19
|
+
* destructive actions), omit the close icon and rely on footer action buttons
|
|
20
|
+
* like "Cancel" and "Confirm" instead.
|
|
21
|
+
*/
|
|
22
|
+
function Root( {
|
|
23
|
+
modal = true,
|
|
24
|
+
swipeDirection = 'left',
|
|
25
|
+
children,
|
|
26
|
+
...props
|
|
27
|
+
}: RootProps ) {
|
|
28
|
+
return (
|
|
29
|
+
<_Drawer.Root
|
|
30
|
+
modal={ modal }
|
|
31
|
+
swipeDirection={ swipeDirection }
|
|
32
|
+
{ ...props }
|
|
33
|
+
>
|
|
34
|
+
<DrawerModalProvider modal={ modal }>
|
|
35
|
+
{ children }
|
|
36
|
+
</DrawerModalProvider>
|
|
37
|
+
</_Drawer.Root>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { Root };
|