@wordpress/components 25.9.1 → 25.11.1-next.f8d8eceb.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 +48 -0
- package/build/alignment-matrix-control/cell.js +8 -5
- package/build/alignment-matrix-control/cell.js.map +1 -1
- package/build/alignment-matrix-control/index.js +27 -43
- package/build/alignment-matrix-control/index.js.map +1 -1
- package/build/alignment-matrix-control/utils.js +29 -9
- package/build/alignment-matrix-control/utils.js.map +1 -1
- package/build/autocomplete/index.js +104 -52
- package/build/autocomplete/index.js.map +1 -1
- package/build/circular-option-picker/circular-option-picker-option.js +20 -39
- package/build/circular-option-picker/circular-option-picker-option.js.map +1 -1
- package/build/circular-option-picker/circular-option-picker.js +11 -32
- package/build/circular-option-picker/circular-option-picker.js.map +1 -1
- package/build/circular-option-picker/types.js.map +1 -1
- package/build/color-palette/index.js +7 -2
- package/build/color-palette/index.js.map +1 -1
- package/build/color-picker/component.js +12 -2
- package/build/color-picker/component.js.map +1 -1
- package/build/color-picker/picker.js +77 -1
- package/build/color-picker/picker.js.map +1 -1
- package/build/color-picker/styles.js +8 -8
- package/build/color-picker/styles.js.map +1 -1
- package/build/color-picker/types.js.map +1 -1
- package/build/composite/v2.js +43 -0
- package/build/composite/v2.js.map +1 -0
- package/build/confirm-dialog/component.js +74 -8
- package/build/confirm-dialog/component.js.map +1 -1
- package/build/confirm-dialog/types.js.map +1 -1
- package/build/custom-gradient-picker/gradient-bar/control-points.js +13 -4
- package/build/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
- package/build/dropdown-menu-v2-ariakit/index.js +217 -0
- package/build/dropdown-menu-v2-ariakit/index.js.map +1 -0
- package/build/dropdown-menu-v2-ariakit/styles.js +157 -0
- package/build/dropdown-menu-v2-ariakit/styles.js.map +1 -0
- package/build/dropdown-menu-v2-ariakit/types.js +6 -0
- package/build/dropdown-menu-v2-ariakit/types.js.map +1 -0
- package/build/font-size-picker/utils.js +1 -1
- package/build/font-size-picker/utils.js.map +1 -1
- package/build/input-control/styles/input-control-styles.js +23 -23
- package/build/input-control/styles/input-control-styles.js.map +1 -1
- package/build/mobile/global-styles-context/utils.native.js +1 -1
- package/build/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build/modal/index.js +45 -16
- package/build/modal/index.js.map +1 -1
- package/build/palette-edit/index.js +4 -0
- package/build/palette-edit/index.js.map +1 -1
- package/build/popover/index.js +34 -6
- package/build/popover/index.js.map +1 -1
- package/build/private-apis.js +18 -2
- package/build/private-apis.js.map +1 -1
- package/build/progress-bar/styles.js +5 -5
- package/build/progress-bar/styles.js.map +1 -1
- package/build/sandbox/index.js +1 -1
- package/build/sandbox/index.js.map +1 -1
- package/build/sandbox/index.native.js +1 -1
- package/build/sandbox/index.native.js.map +1 -1
- package/build/select-control/styles/select-control-styles.js +8 -8
- package/build/select-control/styles/select-control-styles.js.map +1 -1
- package/build/tabs/context.js +16 -0
- package/build/tabs/context.js.map +1 -0
- package/build/tabs/index.js +147 -0
- package/build/tabs/index.js.map +1 -0
- package/build/tabs/styles.js +38 -0
- package/build/tabs/styles.js.map +1 -0
- package/build/tabs/tab.js +46 -0
- package/build/tabs/tab.js.map +1 -0
- package/build/tabs/tablist.js +47 -0
- package/build/tabs/tablist.js.map +1 -0
- package/build/tabs/tabpanel.js +48 -0
- package/build/tabs/tabpanel.js.map +1 -0
- package/build/tabs/types.js +6 -0
- package/build/tabs/types.js.map +1 -0
- package/build/text/component.js +7 -6
- package/build/text/component.js.map +1 -1
- package/build/text/hook.js +6 -15
- package/build/text/hook.js.map +1 -1
- package/build/text/index.js.map +1 -1
- package/build/text/styles.js +7 -7
- package/build/text/styles.js.map +1 -1
- package/build/text/types.js.map +1 -1
- package/build/text/utils.js +17 -33
- package/build/text/utils.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-base/component.js +1 -0
- package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
- package/build/toolbar/toolbar/index.js +17 -10
- package/build/toolbar/toolbar/index.js.map +1 -1
- package/build/toolbar/toolbar/types.js.map +1 -1
- package/build/tools-panel/tools-panel-item/hook.js +2 -2
- package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
- package/build/tools-panel/types.js.map +1 -1
- package/build/tooltip/index.js +2 -2
- package/build/tooltip/index.js.map +1 -1
- package/build/unit-control/utils.js +108 -0
- package/build/unit-control/utils.js.map +1 -1
- package/build/utils/unit-values.js +1 -1
- package/build/utils/unit-values.js.map +1 -1
- package/build-module/alignment-matrix-control/cell.js +7 -4
- package/build-module/alignment-matrix-control/cell.js.map +1 -1
- package/build-module/alignment-matrix-control/index.js +27 -43
- package/build-module/alignment-matrix-control/index.js.map +1 -1
- package/build-module/alignment-matrix-control/utils.js +29 -8
- package/build-module/alignment-matrix-control/utils.js.map +1 -1
- package/build-module/autocomplete/index.js +104 -52
- package/build-module/autocomplete/index.js.map +1 -1
- package/build-module/circular-option-picker/circular-option-picker-option.js +20 -39
- package/build-module/circular-option-picker/circular-option-picker-option.js.map +1 -1
- package/build-module/circular-option-picker/circular-option-picker.js +10 -31
- package/build-module/circular-option-picker/circular-option-picker.js.map +1 -1
- package/build-module/circular-option-picker/types.js.map +1 -1
- package/build-module/color-palette/index.js +7 -2
- package/build-module/color-palette/index.js.map +1 -1
- package/build-module/color-picker/component.js +13 -3
- package/build-module/color-picker/component.js.map +1 -1
- package/build-module/color-picker/picker.js +78 -2
- package/build-module/color-picker/picker.js.map +1 -1
- package/build-module/color-picker/styles.js +8 -8
- package/build-module/color-picker/styles.js.map +1 -1
- package/build-module/color-picker/types.js.map +1 -1
- package/build-module/composite/v2.js +15 -0
- package/build-module/composite/v2.js.map +1 -0
- package/build-module/confirm-dialog/component.js +72 -7
- package/build-module/confirm-dialog/component.js.map +1 -1
- package/build-module/confirm-dialog/types.js.map +1 -1
- package/build-module/custom-gradient-picker/gradient-bar/control-points.js +13 -4
- package/build-module/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
- package/build-module/dropdown-menu-v2-ariakit/index.js +199 -0
- package/build-module/dropdown-menu-v2-ariakit/index.js.map +1 -0
- package/build-module/dropdown-menu-v2-ariakit/styles.js +136 -0
- package/build-module/dropdown-menu-v2-ariakit/styles.js.map +1 -0
- package/build-module/dropdown-menu-v2-ariakit/types.js +2 -0
- package/build-module/dropdown-menu-v2-ariakit/types.js.map +1 -0
- package/build-module/font-size-picker/utils.js +1 -1
- package/build-module/font-size-picker/utils.js.map +1 -1
- package/build-module/input-control/styles/input-control-styles.js +23 -23
- package/build-module/input-control/styles/input-control-styles.js.map +1 -1
- package/build-module/mobile/global-styles-context/utils.native.js +2 -2
- package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build-module/modal/index.js +47 -18
- package/build-module/modal/index.js.map +1 -1
- package/build-module/palette-edit/index.js +4 -0
- package/build-module/palette-edit/index.js.map +1 -1
- package/build-module/popover/index.js +34 -6
- package/build-module/popover/index.js.map +1 -1
- package/build-module/private-apis.js +18 -2
- package/build-module/private-apis.js.map +1 -1
- package/build-module/progress-bar/styles.js +5 -5
- package/build-module/progress-bar/styles.js.map +1 -1
- package/build-module/sandbox/index.js +1 -1
- package/build-module/sandbox/index.js.map +1 -1
- package/build-module/sandbox/index.native.js +1 -1
- package/build-module/sandbox/index.native.js.map +1 -1
- package/build-module/select-control/styles/select-control-styles.js +8 -8
- package/build-module/select-control/styles/select-control-styles.js.map +1 -1
- package/build-module/tabs/context.js +12 -0
- package/build-module/tabs/context.js.map +1 -0
- package/build-module/tabs/index.js +142 -0
- package/build-module/tabs/index.js.map +1 -0
- package/build-module/tabs/styles.js +36 -0
- package/build-module/tabs/styles.js.map +1 -0
- package/build-module/tabs/tab.js +43 -0
- package/build-module/tabs/tab.js.map +1 -0
- package/build-module/tabs/tablist.js +41 -0
- package/build-module/tabs/tablist.js.map +1 -0
- package/build-module/tabs/tabpanel.js +43 -0
- package/build-module/tabs/tabpanel.js.map +1 -0
- package/build-module/tabs/types.js +2 -0
- package/build-module/tabs/types.js.map +1 -0
- package/build-module/text/component.js +6 -6
- package/build-module/text/component.js.map +1 -1
- package/build-module/text/hook.js +11 -19
- package/build-module/text/hook.js.map +1 -1
- package/build-module/text/index.js.map +1 -1
- package/build-module/text/styles.js +7 -7
- package/build-module/text/styles.js.map +1 -1
- package/build-module/text/types.js.map +1 -1
- package/build-module/text/utils.js +17 -10
- package/build-module/text/utils.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +1 -0
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
- package/build-module/toolbar/toolbar/index.js +18 -11
- package/build-module/toolbar/toolbar/index.js.map +1 -1
- package/build-module/toolbar/toolbar/types.js.map +1 -1
- package/build-module/tools-panel/tools-panel-item/hook.js +2 -2
- package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
- package/build-module/tools-panel/types.js.map +1 -1
- package/build-module/tooltip/index.js +2 -2
- package/build-module/tooltip/index.js.map +1 -1
- package/build-module/unit-control/utils.js +108 -0
- package/build-module/unit-control/utils.js.map +1 -1
- package/build-module/utils/unit-values.js +1 -1
- package/build-module/utils/unit-values.js.map +1 -1
- package/build-style/style-rtl.css +17 -5
- package/build-style/style.css +17 -5
- package/build-types/alignment-matrix-control/cell.d.ts +1 -1
- package/build-types/alignment-matrix-control/cell.d.ts.map +1 -1
- package/build-types/alignment-matrix-control/index.d.ts.map +1 -1
- package/build-types/alignment-matrix-control/stories/index.story.d.ts.map +1 -1
- package/build-types/alignment-matrix-control/utils.d.ts +9 -9
- package/build-types/alignment-matrix-control/utils.d.ts.map +1 -1
- package/build-types/autocomplete/index.d.ts.map +1 -1
- package/build-types/circular-option-picker/circular-option-picker-option.d.ts.map +1 -1
- package/build-types/circular-option-picker/circular-option-picker.d.ts.map +1 -1
- package/build-types/circular-option-picker/types.d.ts +4 -6
- package/build-types/circular-option-picker/types.d.ts.map +1 -1
- package/build-types/color-palette/index.d.ts.map +1 -1
- package/build-types/color-picker/component.d.ts.map +1 -1
- package/build-types/color-picker/picker.d.ts +1 -1
- package/build-types/color-picker/picker.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts.map +1 -1
- package/build-types/color-picker/types.d.ts +3 -0
- package/build-types/color-picker/types.d.ts.map +1 -1
- package/build-types/composite/v2.d.ts +12 -0
- package/build-types/composite/v2.d.ts.map +1 -0
- package/build-types/confirm-dialog/component.d.ts +70 -29
- package/build-types/confirm-dialog/component.d.ts.map +1 -1
- package/build-types/confirm-dialog/stories/index.story.d.ts +11 -0
- package/build-types/confirm-dialog/stories/index.story.d.ts.map +1 -0
- package/build-types/confirm-dialog/test/index.d.ts +2 -0
- package/build-types/confirm-dialog/test/index.d.ts.map +1 -0
- package/build-types/confirm-dialog/types.d.ts +32 -10
- package/build-types/confirm-dialog/types.d.ts.map +1 -1
- package/build-types/custom-gradient-picker/gradient-bar/control-points.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2-ariakit/index.d.ts +11 -0
- package/build-types/dropdown-menu-v2-ariakit/index.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts +16 -0
- package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2-ariakit/styles.d.ts +88 -0
- package/build-types/dropdown-menu-v2-ariakit/styles.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2-ariakit/test/index.d.ts +2 -0
- package/build-types/dropdown-menu-v2-ariakit/test/index.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2-ariakit/types.d.ts +174 -0
- package/build-types/dropdown-menu-v2-ariakit/types.d.ts.map +1 -0
- package/build-types/font-size-picker/utils.d.ts.map +1 -1
- package/build-types/heading/stories/index.story.d.ts.map +1 -1
- package/build-types/modal/index.d.ts.map +1 -1
- package/build-types/palette-edit/index.d.ts.map +1 -1
- package/build-types/popover/index.d.ts +1 -1
- package/build-types/popover/index.d.ts.map +1 -1
- package/build-types/popover/stories/e2e/index.story.d.ts +1 -1
- package/build-types/private-apis.d.ts.map +1 -1
- package/build-types/progress-bar/styles.d.ts.map +1 -1
- package/build-types/sandbox/index.d.ts.map +1 -1
- package/build-types/tabs/context.d.ts +8 -0
- package/build-types/tabs/context.d.ts.map +1 -0
- package/build-types/tabs/index.d.ts +13 -0
- package/build-types/tabs/index.d.ts.map +1 -0
- package/build-types/tabs/stories/index.story.d.ts +20 -0
- package/build-types/tabs/stories/index.story.d.ts.map +1 -0
- package/build-types/tabs/styles.d.ts +17 -0
- package/build-types/tabs/styles.d.ts.map +1 -0
- package/build-types/tabs/tab.d.ts +10 -0
- package/build-types/tabs/tab.d.ts.map +1 -0
- package/build-types/tabs/tablist.d.ts +7 -0
- package/build-types/tabs/tablist.d.ts.map +1 -0
- package/build-types/tabs/tabpanel.d.ts +7 -0
- package/build-types/tabs/tabpanel.d.ts.map +1 -0
- package/build-types/tabs/test/index.d.ts +2 -0
- package/build-types/tabs/test/index.d.ts.map +1 -0
- package/build-types/tabs/types.d.ts +134 -0
- package/build-types/tabs/types.d.ts.map +1 -0
- package/build-types/text/component.d.ts +4 -2
- package/build-types/text/component.d.ts.map +1 -1
- package/build-types/text/hook.d.ts +171 -165
- package/build-types/text/hook.d.ts.map +1 -1
- package/build-types/text/index.d.ts +2 -2
- package/build-types/text/index.d.ts.map +1 -1
- package/build-types/text/stories/index.story.d.ts +21 -0
- package/build-types/text/stories/index.story.d.ts.map +1 -0
- package/build-types/text/styles.d.ts +7 -7
- package/build-types/text/styles.d.ts.map +1 -1
- package/build-types/text/types.d.ts +1 -1
- package/build-types/text/types.d.ts.map +1 -1
- package/build-types/text/utils.d.ts +56 -61
- package/build-types/text/utils.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
- package/build-types/toolbar/stories/index.story.d.ts +5 -0
- package/build-types/toolbar/stories/index.story.d.ts.map +1 -1
- package/build-types/toolbar/toolbar/index.d.ts.map +1 -1
- package/build-types/toolbar/toolbar/types.d.ts +10 -0
- package/build-types/toolbar/toolbar/types.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
- package/build-types/tools-panel/types.d.ts +2 -0
- package/build-types/tools-panel/types.d.ts.map +1 -1
- package/build-types/tooltip/index.d.ts.map +1 -1
- package/build-types/unit-control/utils.d.ts.map +1 -1
- package/package.json +21 -20
- package/src/alignment-matrix-control/cell.tsx +6 -2
- package/src/alignment-matrix-control/index.tsx +31 -54
- package/src/alignment-matrix-control/stories/index.story.tsx +3 -7
- package/src/alignment-matrix-control/test/index.tsx +117 -18
- package/src/alignment-matrix-control/utils.tsx +33 -9
- package/src/autocomplete/index.tsx +136 -77
- package/src/button/style.scss +1 -2
- package/src/circular-option-picker/circular-option-picker-option.tsx +24 -38
- package/src/circular-option-picker/circular-option-picker.tsx +11 -28
- package/src/circular-option-picker/types.ts +6 -5
- package/src/color-palette/index.tsx +6 -1
- package/src/color-picker/component.tsx +25 -3
- package/src/color-picker/picker.tsx +96 -2
- package/src/color-picker/styles.ts +0 -1
- package/src/color-picker/types.ts +3 -0
- package/src/composite/v2.ts +22 -0
- package/src/confirm-dialog/README.md +1 -1
- package/src/confirm-dialog/component.tsx +79 -13
- package/src/confirm-dialog/stories/{index.story.js → index.story.tsx} +26 -24
- package/src/confirm-dialog/test/{index.js → index.tsx} +3 -3
- package/src/confirm-dialog/types.ts +32 -12
- package/src/custom-gradient-picker/gradient-bar/control-points.tsx +32 -25
- package/src/dimension-control/test/__snapshots__/index.test.js.snap +8 -8
- package/src/dropdown-menu-v2-ariakit/README.md +324 -0
- package/src/dropdown-menu-v2-ariakit/index.tsx +318 -0
- package/src/dropdown-menu-v2-ariakit/stories/index.story.tsx +506 -0
- package/src/dropdown-menu-v2-ariakit/styles.ts +297 -0
- package/src/dropdown-menu-v2-ariakit/test/index.tsx +1139 -0
- package/src/dropdown-menu-v2-ariakit/types.ts +186 -0
- package/src/font-size-picker/utils.ts +2 -1
- package/src/heading/stories/index.story.tsx +2 -4
- package/src/input-control/styles/input-control-styles.tsx +2 -2
- package/src/mobile/global-styles-context/utils.native.js +2 -2
- package/src/modal/index.tsx +58 -22
- package/src/modal/test/index.tsx +29 -0
- package/src/notice/style.scss +0 -1
- package/src/palette-edit/index.tsx +4 -0
- package/src/popover/index.tsx +99 -57
- package/src/popover/style.scss +9 -0
- package/src/private-apis.ts +31 -1
- package/src/progress-bar/styles.ts +19 -4
- package/src/sandbox/index.native.js +1 -1
- package/src/sandbox/index.tsx +3 -1
- package/src/select-control/styles/select-control-styles.ts +2 -2
- package/src/tabs/README.md +242 -0
- package/src/tabs/context.ts +13 -0
- package/src/tabs/index.tsx +167 -0
- package/src/tabs/stories/index.story.tsx +352 -0
- package/src/tabs/styles.ts +103 -0
- package/src/tabs/tab.tsx +39 -0
- package/src/tabs/tablist.tsx +40 -0
- package/src/tabs/tabpanel.tsx +42 -0
- package/src/tabs/test/index.tsx +1133 -0
- package/src/tabs/types.ts +142 -0
- package/src/text/README.md +2 -2
- package/src/text/{component.js → component.tsx} +10 -6
- package/src/text/{hook.js → hook.ts} +12 -15
- package/src/text/stories/index.story.tsx +80 -0
- package/src/text/types.ts +1 -6
- package/src/text/{utils.js → utils.ts} +40 -14
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +16 -0
- package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +1 -0
- package/src/toolbar/stories/index.story.tsx +15 -0
- package/src/toolbar/test/index.tsx +8 -0
- package/src/toolbar/toolbar/README.md +9 -0
- package/src/toolbar/toolbar/index.tsx +21 -12
- package/src/toolbar/toolbar/style.scss +9 -0
- package/src/toolbar/toolbar/types.ts +10 -0
- package/src/tools-panel/tools-panel/README.md +3 -0
- package/src/tools-panel/tools-panel-item/hook.ts +4 -6
- package/src/tools-panel/types.ts +2 -0
- package/src/tooltip/index.tsx +2 -3
- package/src/unit-control/utils.ts +124 -0
- package/src/utils/unit-values.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/src/text/stories/index.story.js +0 -53
- /package/src/text/{index.js → index.ts} +0 -0
- /package/src/text/{styles.js → styles.ts} +0 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
// eslint-disable-next-line no-restricted-imports
|
|
5
|
+
import type * as Ariakit from '@ariakit/react';
|
|
6
|
+
import type { Placement } from '@floating-ui/react-dom';
|
|
7
|
+
|
|
8
|
+
export interface DropdownMenuContext {
|
|
9
|
+
/**
|
|
10
|
+
* The ariakit store shared across all DropdownMenu subcomponents.
|
|
11
|
+
*/
|
|
12
|
+
store: Ariakit.MenuStore;
|
|
13
|
+
/**
|
|
14
|
+
* The variant used by the underlying menu popover.
|
|
15
|
+
*/
|
|
16
|
+
variant?: 'toolbar';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface DropdownMenuProps {
|
|
20
|
+
/**
|
|
21
|
+
* The trigger button.
|
|
22
|
+
*/
|
|
23
|
+
trigger: React.ReactElement;
|
|
24
|
+
/**
|
|
25
|
+
* The contents of the dropdown.
|
|
26
|
+
*/
|
|
27
|
+
children?: React.ReactNode;
|
|
28
|
+
/**
|
|
29
|
+
* The open state of the dropdown menu when it is initially rendered. Use when
|
|
30
|
+
* not wanting to control its open state.
|
|
31
|
+
*
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
34
|
+
defaultOpen?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* The controlled open state of the dropdown menu. Must be used in conjunction
|
|
37
|
+
* with `onOpenChange`.
|
|
38
|
+
*/
|
|
39
|
+
open?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Event handler called when the open state of the dropdown menu changes.
|
|
42
|
+
*/
|
|
43
|
+
onOpenChange?: ( open: boolean ) => void;
|
|
44
|
+
/**
|
|
45
|
+
* The modality of the dropdown menu. When set to true, interaction with
|
|
46
|
+
* outside elements will be disabled and only menu content will be visible to
|
|
47
|
+
* screen readers.
|
|
48
|
+
*
|
|
49
|
+
* @default true
|
|
50
|
+
*/
|
|
51
|
+
modal?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* The placement of the dropdown menu popover.
|
|
54
|
+
*
|
|
55
|
+
* @default 'bottom-start' for root-level menus, 'right-start' for nested menus
|
|
56
|
+
*/
|
|
57
|
+
placement?: Placement;
|
|
58
|
+
/**
|
|
59
|
+
* The distance between the popover and the anchor element.
|
|
60
|
+
*
|
|
61
|
+
* @default 8 for root-level menus, 16 for nested menus
|
|
62
|
+
*/
|
|
63
|
+
gutter?: number;
|
|
64
|
+
/**
|
|
65
|
+
* The skidding of the popover along the anchor element. Can be set to
|
|
66
|
+
* negative values to make the popover shift to the opposite side.
|
|
67
|
+
*
|
|
68
|
+
* @default 0 for root-level menus, -8 for nested menus
|
|
69
|
+
*/
|
|
70
|
+
shift?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Determines whether the menu popover will be hidden when the user presses
|
|
73
|
+
* the Escape key.
|
|
74
|
+
*
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
hideOnEscape?:
|
|
78
|
+
| boolean
|
|
79
|
+
| ( (
|
|
80
|
+
event: KeyboardEvent | React.KeyboardEvent< Element >
|
|
81
|
+
) => boolean );
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface DropdownMenuGroupProps {
|
|
85
|
+
/**
|
|
86
|
+
* The contents of the dropdown menu group.
|
|
87
|
+
*/
|
|
88
|
+
children: React.ReactNode;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface DropdownMenuGroupLabelProps {
|
|
92
|
+
/**
|
|
93
|
+
* The contents of the dropdown menu group label.
|
|
94
|
+
*/
|
|
95
|
+
children: React.ReactNode;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface DropdownMenuItemProps {
|
|
99
|
+
/**
|
|
100
|
+
* The contents of the menu item.
|
|
101
|
+
*/
|
|
102
|
+
children: React.ReactNode;
|
|
103
|
+
/**
|
|
104
|
+
* The contents of the menu item's prefix.
|
|
105
|
+
*/
|
|
106
|
+
prefix?: React.ReactNode;
|
|
107
|
+
/**
|
|
108
|
+
* The contents of the menu item's suffix.
|
|
109
|
+
*/
|
|
110
|
+
suffix?: React.ReactNode;
|
|
111
|
+
/**
|
|
112
|
+
* Whether to hide the parent menu when the item is clicked.
|
|
113
|
+
*
|
|
114
|
+
* @default true
|
|
115
|
+
*/
|
|
116
|
+
hideOnClick?: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Determines if the element is disabled.
|
|
119
|
+
*/
|
|
120
|
+
disabled?: boolean;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface DropdownMenuCheckboxItemProps
|
|
124
|
+
extends Omit< DropdownMenuItemProps, 'prefix' | 'hideOnClick' > {
|
|
125
|
+
/**
|
|
126
|
+
* Whether to hide the dropdown menu when the item is clicked.
|
|
127
|
+
*
|
|
128
|
+
* @default false
|
|
129
|
+
*/
|
|
130
|
+
hideOnClick?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* The checkbox menu item's name.
|
|
133
|
+
*/
|
|
134
|
+
name: string;
|
|
135
|
+
/**
|
|
136
|
+
* The checkbox item's value, useful when using multiple checkbox menu items
|
|
137
|
+
* associated to the same `name`.
|
|
138
|
+
*/
|
|
139
|
+
value?: string;
|
|
140
|
+
/**
|
|
141
|
+
* The controlled checked state of the checkbox menu item.
|
|
142
|
+
*/
|
|
143
|
+
checked?: boolean;
|
|
144
|
+
/**
|
|
145
|
+
* The checked state of the checkbox menu item when it is initially rendered.
|
|
146
|
+
* Use when not wanting to control its checked state.
|
|
147
|
+
*/
|
|
148
|
+
defaultChecked?: boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Event handler called when the checked state of the checkbox menu item changes.
|
|
151
|
+
*/
|
|
152
|
+
onChange?: ( event: React.ChangeEvent< HTMLInputElement > ) => void;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface DropdownMenuRadioItemProps
|
|
156
|
+
extends Omit< DropdownMenuItemProps, 'prefix' | 'hideOnClick' > {
|
|
157
|
+
/**
|
|
158
|
+
* Whether to hide the dropdown menu when the item is clicked.
|
|
159
|
+
*
|
|
160
|
+
* @default false
|
|
161
|
+
*/
|
|
162
|
+
hideOnClick?: boolean;
|
|
163
|
+
/**
|
|
164
|
+
* The radio item's name.
|
|
165
|
+
*/
|
|
166
|
+
name: string;
|
|
167
|
+
/**
|
|
168
|
+
* The radio item's value.
|
|
169
|
+
*/
|
|
170
|
+
value: string | number;
|
|
171
|
+
/**
|
|
172
|
+
* The controlled checked state of the radio menu item.
|
|
173
|
+
*/
|
|
174
|
+
checked?: boolean;
|
|
175
|
+
/**
|
|
176
|
+
* The checked state of the radio menu item when it is initially rendered.
|
|
177
|
+
* Use when not wanting to control its checked state.
|
|
178
|
+
*/
|
|
179
|
+
defaultChecked?: boolean;
|
|
180
|
+
/**
|
|
181
|
+
* Event handler called when the checked radio menu item changes.
|
|
182
|
+
*/
|
|
183
|
+
onChange?: ( event: React.ChangeEvent< HTMLInputElement > ) => void;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export interface DropdownMenuSeparatorProps {}
|
|
@@ -19,7 +19,8 @@ import { parseQuantityAndUnitFromRawValue } from '../unit-control';
|
|
|
19
19
|
export function isSimpleCssValue(
|
|
20
20
|
value: NonNullable< FontSizePickerProps[ 'value' ] >
|
|
21
21
|
) {
|
|
22
|
-
const sizeRegex =
|
|
22
|
+
const sizeRegex =
|
|
23
|
+
/^[\d\.]+(px|em|rem|vw|vh|%|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)?$/i;
|
|
23
24
|
return sizeRegex.test( String( value ) );
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -12,7 +12,6 @@ const meta: Meta< typeof Heading > = {
|
|
|
12
12
|
component: Heading,
|
|
13
13
|
title: 'Components (Experimental)/Heading',
|
|
14
14
|
argTypes: {
|
|
15
|
-
adjustLineHeightForInnerControls: { control: { type: 'text' } },
|
|
16
15
|
as: { control: { type: 'text' } },
|
|
17
16
|
color: { control: { type: 'color' } },
|
|
18
17
|
display: { control: { type: 'text' } },
|
|
@@ -20,9 +19,8 @@ const meta: Meta< typeof Heading > = {
|
|
|
20
19
|
lineHeight: { control: { type: 'text' } },
|
|
21
20
|
optimizeReadabilityFor: { control: { type: 'color' } },
|
|
22
21
|
variant: {
|
|
23
|
-
control: { type: '
|
|
24
|
-
options: [
|
|
25
|
-
mapping: { undefined, muted: 'muted' },
|
|
22
|
+
control: { type: 'select' },
|
|
23
|
+
options: [ undefined, 'muted' ],
|
|
26
24
|
},
|
|
27
25
|
weight: { control: { type: 'text' } },
|
|
28
26
|
},
|
|
@@ -149,9 +149,9 @@ export const getSizeConfig = ( {
|
|
|
149
149
|
|
|
150
150
|
if ( ! __next40pxDefaultSize ) {
|
|
151
151
|
sizes.default = {
|
|
152
|
-
height:
|
|
152
|
+
height: 32,
|
|
153
153
|
lineHeight: 1,
|
|
154
|
-
minHeight:
|
|
154
|
+
minHeight: 32,
|
|
155
155
|
paddingLeft: space( 2 ),
|
|
156
156
|
paddingRight: space( 2 ),
|
|
157
157
|
};
|
|
@@ -9,7 +9,7 @@ import { Dimensions } from 'react-native';
|
|
|
9
9
|
*/
|
|
10
10
|
import {
|
|
11
11
|
getPxFromCssUnit,
|
|
12
|
-
|
|
12
|
+
useSettings,
|
|
13
13
|
useMultipleOriginColorsAndGradients,
|
|
14
14
|
} from '@wordpress/block-editor';
|
|
15
15
|
|
|
@@ -357,7 +357,7 @@ export function useMobileGlobalStylesColors( type = 'colors' ) {
|
|
|
357
357
|
// Default editor colors/gradients if it's not a block-based theme.
|
|
358
358
|
const colorPalette =
|
|
359
359
|
type === 'colors' ? 'color.palette' : 'color.gradients';
|
|
360
|
-
const editorDefaultPalette =
|
|
360
|
+
const [ editorDefaultPalette ] = useSettings( colorPalette );
|
|
361
361
|
|
|
362
362
|
return availableThemeColors.length >= 1
|
|
363
363
|
? availableThemeColors
|
package/src/modal/index.tsx
CHANGED
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import classnames from 'classnames';
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
ForwardedRef,
|
|
7
|
+
KeyboardEvent,
|
|
8
|
+
MutableRefObject,
|
|
9
|
+
UIEvent,
|
|
10
|
+
} from 'react';
|
|
6
11
|
|
|
7
12
|
/**
|
|
8
13
|
* WordPress dependencies
|
|
@@ -15,12 +20,13 @@ import {
|
|
|
15
20
|
useState,
|
|
16
21
|
forwardRef,
|
|
17
22
|
useLayoutEffect,
|
|
23
|
+
createContext,
|
|
24
|
+
useContext,
|
|
18
25
|
} from '@wordpress/element';
|
|
19
26
|
import {
|
|
20
27
|
useInstanceId,
|
|
21
28
|
useFocusReturn,
|
|
22
29
|
useFocusOnMount,
|
|
23
|
-
__experimentalUseFocusOutside as useFocusOutside,
|
|
24
30
|
useConstrainedTabbing,
|
|
25
31
|
useMergeRefs,
|
|
26
32
|
} from '@wordpress/compose';
|
|
@@ -36,8 +42,13 @@ import Button from '../button';
|
|
|
36
42
|
import StyleProvider from '../style-provider';
|
|
37
43
|
import type { ModalProps } from './types';
|
|
38
44
|
|
|
39
|
-
// Used to
|
|
40
|
-
|
|
45
|
+
// Used to track and dismiss the prior modal when another opens unless nested.
|
|
46
|
+
const level0Dismissers: MutableRefObject<
|
|
47
|
+
ModalProps[ 'onRequestClose' ] | undefined
|
|
48
|
+
>[] = [];
|
|
49
|
+
const ModalContext = createContext( level0Dismissers );
|
|
50
|
+
|
|
51
|
+
let isBodyOpenClassActive = false;
|
|
41
52
|
|
|
42
53
|
function UnforwardedModal(
|
|
43
54
|
props: ModalProps,
|
|
@@ -91,7 +102,6 @@ function UnforwardedModal(
|
|
|
91
102
|
);
|
|
92
103
|
const constrainedTabbingRef = useConstrainedTabbing();
|
|
93
104
|
const focusReturnRef = useFocusReturn();
|
|
94
|
-
const focusOutsideProps = useFocusOutside( onRequestClose );
|
|
95
105
|
const contentRef = useRef< HTMLDivElement >( null );
|
|
96
106
|
const childrenContainerRef = useRef< HTMLDivElement >( null );
|
|
97
107
|
|
|
@@ -120,26 +130,52 @@ function UnforwardedModal(
|
|
|
120
130
|
}
|
|
121
131
|
}, [ contentRef ] );
|
|
122
132
|
|
|
133
|
+
// Accessibly isolates/unisolates the modal.
|
|
123
134
|
useEffect( () => {
|
|
124
135
|
ariaHelper.modalize( ref.current );
|
|
125
136
|
return () => ariaHelper.unmodalize();
|
|
126
137
|
}, [] );
|
|
127
138
|
|
|
139
|
+
// Keeps a fresh ref for the subsequent effect.
|
|
140
|
+
const refOnRequestClose = useRef< ModalProps[ 'onRequestClose' ] >();
|
|
128
141
|
useEffect( () => {
|
|
129
|
-
|
|
142
|
+
refOnRequestClose.current = onRequestClose;
|
|
143
|
+
}, [ onRequestClose ] );
|
|
130
144
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
145
|
+
// The list of `onRequestClose` callbacks of open (non-nested) Modals. Only
|
|
146
|
+
// one should remain open at a time and the list enables closing prior ones.
|
|
147
|
+
const dismissers = useContext( ModalContext );
|
|
148
|
+
// Used for the tracking and dismissing any nested modals.
|
|
149
|
+
const nestedDismissers = useRef< typeof level0Dismissers >( [] );
|
|
134
150
|
|
|
151
|
+
// Updates the stack tracking open modals at this level and calls
|
|
152
|
+
// onRequestClose for any prior and/or nested modals as applicable.
|
|
153
|
+
useEffect( () => {
|
|
154
|
+
dismissers.push( refOnRequestClose );
|
|
155
|
+
const [ first, second ] = dismissers;
|
|
156
|
+
if ( second ) first?.current?.();
|
|
157
|
+
|
|
158
|
+
const nested = nestedDismissers.current;
|
|
135
159
|
return () => {
|
|
136
|
-
|
|
160
|
+
nested[ 0 ]?.current?.();
|
|
161
|
+
dismissers.shift();
|
|
162
|
+
};
|
|
163
|
+
}, [ dismissers ] );
|
|
137
164
|
|
|
138
|
-
|
|
165
|
+
const isLevel0 = dismissers === level0Dismissers;
|
|
166
|
+
// Adds/removes the value of bodyOpenClassName to body element.
|
|
167
|
+
useEffect( () => {
|
|
168
|
+
if ( ! isBodyOpenClassActive ) {
|
|
169
|
+
isBodyOpenClassActive = true;
|
|
170
|
+
document.body.classList.add( bodyOpenClassName );
|
|
171
|
+
}
|
|
172
|
+
return () => {
|
|
173
|
+
if ( isLevel0 && dismissers.length === 0 ) {
|
|
139
174
|
document.body.classList.remove( bodyOpenClassName );
|
|
175
|
+
isBodyOpenClassActive = false;
|
|
140
176
|
}
|
|
141
177
|
};
|
|
142
|
-
}, [ bodyOpenClassName ] );
|
|
178
|
+
}, [ bodyOpenClassName, dismissers, isLevel0 ] );
|
|
143
179
|
|
|
144
180
|
// Calls the isContentScrollable callback when the Modal children container resizes.
|
|
145
181
|
useLayoutEffect( () => {
|
|
@@ -200,12 +236,9 @@ function UnforwardedModal(
|
|
|
200
236
|
onPointerUp: React.PointerEventHandler< HTMLDivElement >;
|
|
201
237
|
} = {
|
|
202
238
|
onPointerDown: ( event ) => {
|
|
203
|
-
if ( event.
|
|
239
|
+
if ( event.target === event.currentTarget ) {
|
|
204
240
|
pressTarget = event.target;
|
|
205
|
-
// Avoids
|
|
206
|
-
// practically useless with its only potential trigger being
|
|
207
|
-
// programmatic focus movement. TODO opt for either removing
|
|
208
|
-
// the hook or enhancing it such that this isn't needed.
|
|
241
|
+
// Avoids focus changing so that focus return works as expected.
|
|
209
242
|
event.preventDefault();
|
|
210
243
|
}
|
|
211
244
|
},
|
|
@@ -222,7 +255,7 @@ function UnforwardedModal(
|
|
|
222
255
|
},
|
|
223
256
|
};
|
|
224
257
|
|
|
225
|
-
|
|
258
|
+
const modal = (
|
|
226
259
|
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
227
260
|
<div
|
|
228
261
|
ref={ useMergeRefs( [ ref, forwardedRef ] ) }
|
|
@@ -253,9 +286,6 @@ function UnforwardedModal(
|
|
|
253
286
|
aria-labelledby={ contentLabel ? undefined : headingId }
|
|
254
287
|
aria-describedby={ aria.describedby }
|
|
255
288
|
tabIndex={ -1 }
|
|
256
|
-
{ ...( shouldCloseOnClickOutside
|
|
257
|
-
? focusOutsideProps
|
|
258
|
-
: {} ) }
|
|
259
289
|
onKeyDown={ onKeyDown }
|
|
260
290
|
>
|
|
261
291
|
<div
|
|
@@ -320,7 +350,13 @@ function UnforwardedModal(
|
|
|
320
350
|
</div>
|
|
321
351
|
</div>
|
|
322
352
|
</StyleProvider>
|
|
323
|
-
</div
|
|
353
|
+
</div>
|
|
354
|
+
);
|
|
355
|
+
|
|
356
|
+
return createPortal(
|
|
357
|
+
<ModalContext.Provider value={ nestedDismissers.current }>
|
|
358
|
+
{ modal }
|
|
359
|
+
</ModalContext.Provider>,
|
|
324
360
|
document.body
|
|
325
361
|
);
|
|
326
362
|
}
|
package/src/modal/test/index.tsx
CHANGED
|
@@ -167,6 +167,35 @@ describe( 'Modal', () => {
|
|
|
167
167
|
expect( onRequestClose ).not.toHaveBeenCalled();
|
|
168
168
|
} );
|
|
169
169
|
|
|
170
|
+
it( 'should request closing of nested modal when outer modal unmounts', async () => {
|
|
171
|
+
const user = userEvent.setup();
|
|
172
|
+
const onRequestClose = jest.fn();
|
|
173
|
+
|
|
174
|
+
const RequestCloseOfNested = () => {
|
|
175
|
+
const [ isShown, setIsShown ] = useState( true );
|
|
176
|
+
return (
|
|
177
|
+
<>
|
|
178
|
+
{ isShown && (
|
|
179
|
+
<Modal
|
|
180
|
+
onKeyDown={ ( { key } ) => {
|
|
181
|
+
if ( key === 'o' ) setIsShown( false );
|
|
182
|
+
} }
|
|
183
|
+
onRequestClose={ noop }
|
|
184
|
+
>
|
|
185
|
+
<Modal onRequestClose={ onRequestClose }>
|
|
186
|
+
<p>Nested modal content</p>
|
|
187
|
+
</Modal>
|
|
188
|
+
</Modal>
|
|
189
|
+
) }
|
|
190
|
+
</>
|
|
191
|
+
);
|
|
192
|
+
};
|
|
193
|
+
render( <RequestCloseOfNested /> );
|
|
194
|
+
|
|
195
|
+
await user.keyboard( 'o' );
|
|
196
|
+
expect( onRequestClose ).toHaveBeenCalled();
|
|
197
|
+
} );
|
|
198
|
+
|
|
170
199
|
it( 'should accessibly hide and show siblings including outer modals', async () => {
|
|
171
200
|
const user = userEvent.setup();
|
|
172
201
|
|
package/src/notice/style.scss
CHANGED
|
@@ -121,6 +121,10 @@ function ColorPickerPopover< T extends Color | Gradient >( {
|
|
|
121
121
|
() => ( {
|
|
122
122
|
shift: true,
|
|
123
123
|
offset: 20,
|
|
124
|
+
// Disabling resize as it would otherwise cause the popover to show
|
|
125
|
+
// scrollbars while dragging the color picker's handle close to the
|
|
126
|
+
// popover edge.
|
|
127
|
+
resize: false,
|
|
124
128
|
placement: 'left-start',
|
|
125
129
|
...receivedPopoverProps,
|
|
126
130
|
className: classnames(
|
package/src/popover/index.tsx
CHANGED
|
@@ -53,6 +53,11 @@ import {
|
|
|
53
53
|
placementToMotionAnimationProps,
|
|
54
54
|
getReferenceElement,
|
|
55
55
|
} from './utils';
|
|
56
|
+
import {
|
|
57
|
+
contextConnect,
|
|
58
|
+
useContextSystem,
|
|
59
|
+
ContextSystemProvider,
|
|
60
|
+
} from '../context';
|
|
56
61
|
import type { WordPressComponentProps } from '../context';
|
|
57
62
|
import type {
|
|
58
63
|
PopoverProps,
|
|
@@ -108,7 +113,7 @@ const getPopoverFallbackContainer = () => {
|
|
|
108
113
|
return container;
|
|
109
114
|
};
|
|
110
115
|
|
|
111
|
-
const
|
|
116
|
+
const UnconnectedPopover = (
|
|
112
117
|
props: Omit<
|
|
113
118
|
WordPressComponentProps< PopoverProps, 'div', false >,
|
|
114
119
|
// To avoid overlaps between the standard HTML attributes and the props
|
|
@@ -148,7 +153,7 @@ const UnforwardedPopover = (
|
|
|
148
153
|
|
|
149
154
|
// Rest
|
|
150
155
|
...contentProps
|
|
151
|
-
} = props;
|
|
156
|
+
} = useContextSystem( props, 'Popover' );
|
|
152
157
|
|
|
153
158
|
let computedFlipProp = flip;
|
|
154
159
|
let computedResizeProp = resize;
|
|
@@ -383,63 +388,100 @@ const UnforwardedPopover = (
|
|
|
383
388
|
const isPositioned =
|
|
384
389
|
( ! shouldAnimate || animationFinished ) && x !== null && y !== null;
|
|
385
390
|
|
|
391
|
+
// In case a `ColorPicker` component is rendered as a child of `Popover`,
|
|
392
|
+
// the `Popover` component can be notified of when the user is dragging
|
|
393
|
+
// parts of the `ColorPicker` UI (this is possible because the `ColorPicker`
|
|
394
|
+
// component exposes the `onPickerDragStart` and `onPickerDragEnd` props
|
|
395
|
+
// via internal context).
|
|
396
|
+
// While the user is performing a pointer drag, the `Popover` will render
|
|
397
|
+
// a transparent backdrop element that will serve as a "pointer events trap",
|
|
398
|
+
// making sure that no pointer events reach any potential `iframe` element
|
|
399
|
+
// underneath (like, for example, the editor canvas in the WordPress editor).
|
|
400
|
+
const [ showBackdrop, setShowBackdrop ] = useState( false );
|
|
401
|
+
const contextValue = useMemo(
|
|
402
|
+
() => ( {
|
|
403
|
+
ColorPicker: {
|
|
404
|
+
onPickerDragStart() {
|
|
405
|
+
setShowBackdrop( true );
|
|
406
|
+
},
|
|
407
|
+
onPickerDragEnd() {
|
|
408
|
+
setShowBackdrop( false );
|
|
409
|
+
},
|
|
410
|
+
},
|
|
411
|
+
} ),
|
|
412
|
+
[]
|
|
413
|
+
);
|
|
414
|
+
|
|
386
415
|
let content = (
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
'is-expanded': isExpanded,
|
|
390
|
-
'is-positioned': isPositioned,
|
|
391
|
-
// Use the 'alternate' classname for 'toolbar' variant for back compat.
|
|
392
|
-
[ `is-${
|
|
393
|
-
computedVariant === 'toolbar'
|
|
394
|
-
? 'alternate'
|
|
395
|
-
: computedVariant
|
|
396
|
-
}` ]: computedVariant,
|
|
397
|
-
} ) }
|
|
398
|
-
{ ...animationProps }
|
|
399
|
-
{ ...contentProps }
|
|
400
|
-
ref={ mergedFloatingRef }
|
|
401
|
-
{ ...dialogProps }
|
|
402
|
-
tabIndex={ -1 }
|
|
403
|
-
>
|
|
404
|
-
{ /* Prevents scroll on the document */ }
|
|
405
|
-
{ isExpanded && <ScrollLock /> }
|
|
406
|
-
{ isExpanded && (
|
|
407
|
-
<div className="components-popover__header">
|
|
408
|
-
<span className="components-popover__header-title">
|
|
409
|
-
{ headerTitle }
|
|
410
|
-
</span>
|
|
411
|
-
<Button
|
|
412
|
-
className="components-popover__close"
|
|
413
|
-
icon={ close }
|
|
414
|
-
onClick={ onClose }
|
|
415
|
-
/>
|
|
416
|
-
</div>
|
|
417
|
-
) }
|
|
418
|
-
<div className="components-popover__content">{ children }</div>
|
|
419
|
-
{ hasArrow && (
|
|
416
|
+
<>
|
|
417
|
+
{ showBackdrop && (
|
|
420
418
|
<div
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
].join( ' ' ) }
|
|
426
|
-
style={ {
|
|
427
|
-
left:
|
|
428
|
-
typeof arrowData?.x !== 'undefined' &&
|
|
429
|
-
Number.isFinite( arrowData.x )
|
|
430
|
-
? `${ arrowData.x }px`
|
|
431
|
-
: '',
|
|
432
|
-
top:
|
|
433
|
-
typeof arrowData?.y !== 'undefined' &&
|
|
434
|
-
Number.isFinite( arrowData.y )
|
|
435
|
-
? `${ arrowData.y }px`
|
|
436
|
-
: '',
|
|
437
|
-
} }
|
|
438
|
-
>
|
|
439
|
-
<ArrowTriangle />
|
|
440
|
-
</div>
|
|
419
|
+
className="components-popover-pointer-events-trap"
|
|
420
|
+
aria-hidden="true"
|
|
421
|
+
onClick={ () => setShowBackdrop( false ) }
|
|
422
|
+
/>
|
|
441
423
|
) }
|
|
442
|
-
|
|
424
|
+
<motion.div
|
|
425
|
+
className={ classnames( 'components-popover', className, {
|
|
426
|
+
'is-expanded': isExpanded,
|
|
427
|
+
'is-positioned': isPositioned,
|
|
428
|
+
// Use the 'alternate' classname for 'toolbar' variant for back compat.
|
|
429
|
+
[ `is-${
|
|
430
|
+
computedVariant === 'toolbar'
|
|
431
|
+
? 'alternate'
|
|
432
|
+
: computedVariant
|
|
433
|
+
}` ]: computedVariant,
|
|
434
|
+
} ) }
|
|
435
|
+
{ ...animationProps }
|
|
436
|
+
{ ...contentProps }
|
|
437
|
+
ref={ mergedFloatingRef }
|
|
438
|
+
{ ...dialogProps }
|
|
439
|
+
tabIndex={ -1 }
|
|
440
|
+
>
|
|
441
|
+
{ /* Prevents scroll on the document */ }
|
|
442
|
+
{ isExpanded && <ScrollLock /> }
|
|
443
|
+
{ isExpanded && (
|
|
444
|
+
<div className="components-popover__header">
|
|
445
|
+
<span className="components-popover__header-title">
|
|
446
|
+
{ headerTitle }
|
|
447
|
+
</span>
|
|
448
|
+
<Button
|
|
449
|
+
className="components-popover__close"
|
|
450
|
+
icon={ close }
|
|
451
|
+
onClick={ onClose }
|
|
452
|
+
/>
|
|
453
|
+
</div>
|
|
454
|
+
) }
|
|
455
|
+
<div className="components-popover__content">
|
|
456
|
+
<ContextSystemProvider value={ contextValue }>
|
|
457
|
+
{ children }
|
|
458
|
+
</ContextSystemProvider>
|
|
459
|
+
</div>
|
|
460
|
+
{ hasArrow && (
|
|
461
|
+
<div
|
|
462
|
+
ref={ arrowCallbackRef }
|
|
463
|
+
className={ [
|
|
464
|
+
'components-popover__arrow',
|
|
465
|
+
`is-${ computedPlacement.split( '-' )[ 0 ] }`,
|
|
466
|
+
].join( ' ' ) }
|
|
467
|
+
style={ {
|
|
468
|
+
left:
|
|
469
|
+
typeof arrowData?.x !== 'undefined' &&
|
|
470
|
+
Number.isFinite( arrowData.x )
|
|
471
|
+
? `${ arrowData.x }px`
|
|
472
|
+
: '',
|
|
473
|
+
top:
|
|
474
|
+
typeof arrowData?.y !== 'undefined' &&
|
|
475
|
+
Number.isFinite( arrowData.y )
|
|
476
|
+
? `${ arrowData.y }px`
|
|
477
|
+
: '',
|
|
478
|
+
} }
|
|
479
|
+
>
|
|
480
|
+
<ArrowTriangle />
|
|
481
|
+
</div>
|
|
482
|
+
) }
|
|
483
|
+
</motion.div>
|
|
484
|
+
</>
|
|
443
485
|
);
|
|
444
486
|
|
|
445
487
|
const shouldRenderWithinSlot = slot.ref && ! inline;
|
|
@@ -489,7 +531,7 @@ const UnforwardedPopover = (
|
|
|
489
531
|
* ```
|
|
490
532
|
*
|
|
491
533
|
*/
|
|
492
|
-
export const Popover =
|
|
534
|
+
export const Popover = contextConnect( UnconnectedPopover, 'Popover' );
|
|
493
535
|
|
|
494
536
|
function PopoverSlot(
|
|
495
537
|
{ name = SLOT_NAME }: { name?: string },
|
package/src/popover/style.scss
CHANGED
|
@@ -133,3 +133,12 @@ $shadow-popover-border-top-only-alternate: 0 #{-$border-width} 0 $gray-900;
|
|
|
133
133
|
stroke: $gray-900;
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
+
|
|
137
|
+
.components-popover-pointer-events-trap {
|
|
138
|
+
// Same z-index as popover, but rendered before the popover element
|
|
139
|
+
// in DOM order = it will display just under the popover
|
|
140
|
+
z-index: z-index(".components-popover");
|
|
141
|
+
position: fixed;
|
|
142
|
+
inset: 0;
|
|
143
|
+
background-color: transparent;
|
|
144
|
+
}
|