@wordpress/components 19.1.2 → 19.2.1-next.33ec3857e2.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 +53 -4
- package/README.md +0 -1
- package/build/angle-picker-control/index.js +2 -0
- package/build/angle-picker-control/index.js.map +1 -1
- package/build/button/index.native.js +13 -3
- package/build/button/index.native.js.map +1 -1
- package/build/checkbox-control/index.js +1 -1
- package/build/checkbox-control/index.js.map +1 -1
- package/build/clipboard-button/index.js +1 -2
- package/build/clipboard-button/index.js.map +1 -1
- package/build/color-palette/index.js +36 -9
- package/build/color-palette/index.js.map +1 -1
- package/build/color-picker/color-display.js +4 -2
- package/build/color-picker/color-display.js.map +1 -1
- package/build/color-picker/hex-input.js +3 -1
- package/build/color-picker/hex-input.js.map +1 -1
- package/build/color-picker/input-with-slider.js +3 -1
- package/build/color-picker/input-with-slider.js.map +1 -1
- package/build/confirm-dialog/component.js +103 -0
- package/build/confirm-dialog/component.js.map +1 -0
- package/build/confirm-dialog/index.js +16 -0
- package/build/confirm-dialog/index.js.map +1 -0
- package/build/confirm-dialog/types.js +6 -0
- package/build/confirm-dialog/types.js.map +1 -0
- package/build/custom-gradient-bar/constants.js +1 -6
- package/build/custom-gradient-bar/constants.js.map +1 -1
- package/build/custom-gradient-bar/control-points.js +52 -21
- package/build/custom-gradient-bar/control-points.js.map +1 -1
- package/build/custom-gradient-bar/index.js +5 -1
- package/build/custom-gradient-bar/index.js.map +1 -1
- package/build/custom-gradient-picker/index.js +4 -1
- package/build/custom-gradient-picker/index.js.map +1 -1
- package/build/date-time/date.js +63 -86
- package/build/date-time/date.js.map +1 -1
- package/build/date-time/utils.js +32 -0
- package/build/date-time/utils.js.map +1 -0
- package/build/divider/component.js +8 -7
- package/build/divider/component.js.map +1 -1
- package/build/divider/styles.js +38 -13
- package/build/divider/styles.js.map +1 -1
- package/build/drop-zone/index.js +14 -6
- package/build/drop-zone/index.js.map +1 -1
- package/build/drop-zone/provider.js +1 -0
- package/build/drop-zone/provider.js.map +1 -1
- package/build/flyout/styles.js +2 -2
- package/build/flyout/styles.js.map +1 -1
- package/build/focusable-iframe/index.js +1 -0
- package/build/focusable-iframe/index.js.map +1 -1
- package/build/font-size-picker/index.js +10 -9
- package/build/font-size-picker/index.js.map +1 -1
- package/build/font-size-picker/utils.js +28 -17
- package/build/font-size-picker/utils.js.map +1 -1
- package/build/gradient-picker/index.js +3 -1
- package/build/gradient-picker/index.js.map +1 -1
- package/build/higher-order/with-focus-outside/index.js +2 -0
- package/build/higher-order/with-focus-outside/index.js.map +1 -1
- package/build/index.js +8 -0
- package/build/index.js.map +1 -1
- package/build/input-control/styles/input-control-styles.js +44 -32
- package/build/input-control/styles/input-control-styles.js.map +1 -1
- package/build/mobile/bottom-sheet/link-suggestion-item-cell.native.js +10 -3
- package/build/mobile/bottom-sheet/link-suggestion-item-cell.native.js.map +1 -1
- package/build/mobile/color-settings/index.native.js +4 -2
- package/build/mobile/color-settings/index.native.js.map +1 -1
- package/build/mobile/color-settings/palette.screen.native.js +7 -6
- package/build/mobile/color-settings/palette.screen.native.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/mobile/gridicons/index.native.js +3 -1
- package/build/mobile/gridicons/index.native.js.map +1 -1
- package/build/mobile/link-picker/index.native.js +45 -4
- package/build/mobile/link-picker/index.native.js.map +1 -1
- package/build/mobile/link-settings/index.native.js +10 -0
- package/build/mobile/link-settings/index.native.js.map +1 -1
- package/build/modal/aria-helper.js +2 -0
- package/build/modal/aria-helper.js.map +1 -1
- package/build/modal/index.js +17 -8
- package/build/modal/index.js.map +1 -1
- package/build/palette-edit/index.js +13 -11
- package/build/palette-edit/index.js.map +1 -1
- package/build/select-control/styles/select-control-styles.js +33 -9
- package/build/select-control/styles/select-control-styles.js.map +1 -1
- package/build/style-provider/index.js +2 -0
- package/build/style-provider/index.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/component.js +7 -2
- package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +25 -14
- package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option/styles.js +8 -8
- package/build/toggle-group-control/toggle-group-control-option/styles.js.map +1 -1
- package/build/tools-panel/styles.js +12 -10
- package/build/tools-panel/styles.js.map +1 -1
- package/build/tools-panel/tools-panel/component.js +6 -8
- package/build/tools-panel/tools-panel/component.js.map +1 -1
- package/build/tools-panel/tools-panel/hook.js +48 -17
- package/build/tools-panel/tools-panel/hook.js.map +1 -1
- package/build/tools-panel/tools-panel-item/hook.js +5 -1
- package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
- package/build/unit-control/styles/unit-control-styles.js +23 -41
- package/build/unit-control/styles/unit-control-styles.js.map +1 -1
- package/build/z-stack/component.js.map +1 -1
- package/build/z-stack/styles.js +10 -8
- package/build/z-stack/styles.js.map +1 -1
- package/build-module/angle-picker-control/index.js +2 -0
- package/build-module/angle-picker-control/index.js.map +1 -1
- package/build-module/button/index.native.js +13 -3
- package/build-module/button/index.native.js.map +1 -1
- package/build-module/checkbox-control/index.js +1 -1
- package/build-module/checkbox-control/index.js.map +1 -1
- package/build-module/clipboard-button/index.js +1 -2
- package/build-module/clipboard-button/index.js.map +1 -1
- package/build-module/color-palette/index.js +34 -10
- package/build-module/color-palette/index.js.map +1 -1
- package/build-module/color-picker/color-display.js +3 -2
- package/build-module/color-picker/color-display.js.map +1 -1
- package/build-module/color-picker/hex-input.js +2 -1
- package/build-module/color-picker/hex-input.js.map +1 -1
- package/build-module/color-picker/input-with-slider.js +2 -1
- package/build-module/color-picker/input-with-slider.js.map +1 -1
- package/build-module/confirm-dialog/component.js +84 -0
- package/build-module/confirm-dialog/component.js.map +1 -0
- package/build-module/confirm-dialog/index.js +6 -0
- package/build-module/confirm-dialog/index.js.map +1 -0
- package/build-module/confirm-dialog/types.js +2 -0
- package/build-module/confirm-dialog/types.js.map +1 -0
- package/build-module/custom-gradient-bar/constants.js +0 -4
- package/build-module/custom-gradient-bar/constants.js.map +1 -1
- package/build-module/custom-gradient-bar/control-points.js +54 -23
- package/build-module/custom-gradient-bar/control-points.js.map +1 -1
- package/build-module/custom-gradient-bar/index.js +5 -1
- package/build-module/custom-gradient-bar/index.js.map +1 -1
- package/build-module/custom-gradient-picker/index.js +4 -1
- package/build-module/custom-gradient-picker/index.js.map +1 -1
- package/build-module/date-time/date.js +63 -87
- package/build-module/date-time/date.js.map +1 -1
- package/build-module/date-time/utils.js +20 -0
- package/build-module/date-time/utils.js.map +1 -0
- package/build-module/divider/component.js +8 -7
- package/build-module/divider/component.js.map +1 -1
- package/build-module/divider/styles.js +37 -13
- package/build-module/divider/styles.js.map +1 -1
- package/build-module/drop-zone/index.js +14 -6
- package/build-module/drop-zone/index.js.map +1 -1
- package/build-module/drop-zone/provider.js +1 -0
- package/build-module/drop-zone/provider.js.map +1 -1
- package/build-module/flyout/styles.js +2 -2
- package/build-module/flyout/styles.js.map +1 -1
- package/build-module/focusable-iframe/index.js +1 -0
- package/build-module/focusable-iframe/index.js.map +1 -1
- package/build-module/font-size-picker/index.js +10 -9
- package/build-module/font-size-picker/index.js.map +1 -1
- package/build-module/font-size-picker/utils.js +28 -17
- package/build-module/font-size-picker/utils.js.map +1 -1
- package/build-module/gradient-picker/index.js +3 -1
- package/build-module/gradient-picker/index.js.map +1 -1
- package/build-module/higher-order/with-focus-outside/index.js +1 -0
- package/build-module/higher-order/with-focus-outside/index.js.map +1 -1
- package/build-module/index.js +1 -0
- package/build-module/index.js.map +1 -1
- package/build-module/input-control/styles/input-control-styles.js +44 -32
- package/build-module/input-control/styles/input-control-styles.js.map +1 -1
- package/build-module/mobile/bottom-sheet/link-suggestion-item-cell.native.js +10 -4
- package/build-module/mobile/bottom-sheet/link-suggestion-item-cell.native.js.map +1 -1
- package/build-module/mobile/color-settings/index.native.js +4 -2
- package/build-module/mobile/color-settings/index.native.js.map +1 -1
- package/build-module/mobile/color-settings/palette.screen.native.js +7 -6
- package/build-module/mobile/color-settings/palette.screen.native.js.map +1 -1
- package/build-module/mobile/global-styles-context/utils.native.js +1 -1
- package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build-module/mobile/gridicons/index.native.js +1 -0
- package/build-module/mobile/gridicons/index.native.js.map +1 -1
- package/build-module/mobile/link-picker/index.native.js +50 -8
- package/build-module/mobile/link-picker/index.native.js.map +1 -1
- package/build-module/mobile/link-settings/index.native.js +10 -0
- package/build-module/mobile/link-settings/index.native.js.map +1 -1
- package/build-module/modal/aria-helper.js +2 -0
- package/build-module/modal/aria-helper.js.map +1 -1
- package/build-module/modal/index.js +15 -8
- package/build-module/modal/index.js.map +1 -1
- package/build-module/palette-edit/index.js +13 -11
- package/build-module/palette-edit/index.js.map +1 -1
- package/build-module/select-control/styles/select-control-styles.js +33 -9
- package/build-module/select-control/styles/select-control-styles.js.map +1 -1
- package/build-module/style-provider/index.js +1 -0
- package/build-module/style-provider/index.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/component.js +8 -3
- package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +25 -14
- package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option/styles.js +8 -8
- package/build-module/toggle-group-control/toggle-group-control-option/styles.js.map +1 -1
- package/build-module/tools-panel/styles.js +12 -11
- package/build-module/tools-panel/styles.js.map +1 -1
- package/build-module/tools-panel/tools-panel/component.js +5 -8
- package/build-module/tools-panel/tools-panel/component.js.map +1 -1
- package/build-module/tools-panel/tools-panel/hook.js +48 -17
- package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
- package/build-module/tools-panel/tools-panel-item/hook.js +5 -1
- package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
- package/build-module/unit-control/styles/unit-control-styles.js +23 -41
- package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
- package/build-module/z-stack/component.js.map +1 -1
- package/build-module/z-stack/styles.js +13 -8
- package/build-module/z-stack/styles.js.map +1 -1
- package/build-style/style-rtl.css +34 -12
- package/build-style/style.css +34 -12
- package/build-types/base-field/hook.d.ts +16 -16
- package/build-types/card/card/hook.d.ts +16 -16
- package/build-types/card/card-body/hook.d.ts +16 -16
- package/build-types/card/card-divider/hook.d.ts +18 -18
- package/build-types/card/card-footer/hook.d.ts +17 -17
- package/build-types/card/card-header/hook.d.ts +16 -16
- package/build-types/card/card-media/hook.d.ts +16 -16
- package/build-types/divider/component.d.ts +8 -7
- package/build-types/divider/component.d.ts.map +1 -1
- package/build-types/divider/styles.d.ts +2 -2
- package/build-types/divider/styles.d.ts.map +1 -1
- package/build-types/divider/types.d.ts +5 -5
- package/build-types/divider/types.d.ts.map +1 -1
- package/build-types/elevation/hook.d.ts +15 -15
- package/build-types/flex/flex/hook.d.ts +16 -16
- package/build-types/flex/flex-block/hook.d.ts +16 -16
- package/build-types/flex/flex-item/hook.d.ts +16 -16
- package/build-types/flyout/flyout/hook.d.ts +17 -17
- package/build-types/flyout/styles.d.ts +7 -9
- package/build-types/flyout/styles.d.ts.map +1 -1
- package/build-types/grid/hook.d.ts +16 -16
- package/build-types/h-stack/hook.d.ts +16 -16
- package/build-types/heading/hook.d.ts +16 -16
- package/build-types/input-control/index.d.ts +1 -1
- package/build-types/input-control/index.d.ts.map +1 -1
- package/build-types/input-control/input-field.d.ts +1 -1
- package/build-types/input-control/input-field.d.ts.map +1 -1
- package/build-types/input-control/styles/input-control-styles.d.ts +1 -2
- package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
- package/build-types/input-control/types.d.ts +2 -1
- package/build-types/input-control/types.d.ts.map +1 -1
- package/build-types/item-group/item/hook.d.ts +16 -16
- package/build-types/item-group/item-group/hook.d.ts +16 -16
- package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
- package/build-types/scrollable/hook.d.ts +16 -16
- package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
- package/build-types/select-control/types.d.ts +1 -1
- package/build-types/select-control/types.d.ts.map +1 -1
- package/build-types/spacer/hook.d.ts +16 -16
- package/build-types/surface/hook.d.ts +16 -16
- package/build-types/text/hook.d.ts +16 -16
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts.map +1 -1
- package/build-types/tools-panel/styles.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/component.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +16 -16
- package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-header/hook.d.ts +16 -16
- package/build-types/tools-panel/tools-panel-item/hook.d.ts +16 -16
- package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
- package/build-types/tools-panel/types.d.ts +2 -1
- package/build-types/tools-panel/types.d.ts.map +1 -1
- package/build-types/truncate/hook.d.ts +16 -16
- package/build-types/ui/control-group/hook.d.ts +18 -18
- package/build-types/ui/control-label/hook.d.ts +16 -16
- package/build-types/ui/form-group/form-group.d.ts +4 -4
- package/build-types/ui/form-group/use-form-group.d.ts +55 -55
- package/build-types/unit-control/index.d.ts +1 -1
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -0
- package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
- package/build-types/unit-control/types.d.ts +2 -2
- package/build-types/unit-control/types.d.ts.map +1 -1
- package/build-types/v-stack/hook.d.ts +16 -16
- package/build-types/z-stack/component.d.ts +1 -1
- package/build-types/z-stack/styles.d.ts.map +1 -1
- package/package.json +21 -23
- package/src/alignment-matrix-control/stories/index.js +1 -1
- package/src/angle-picker-control/index.js +2 -0
- package/src/base-control/stories/index.js +1 -1
- package/src/button/index.native.js +15 -1
- package/src/button/stories/index.js +1 -1
- package/src/button/style.scss +14 -0
- package/src/card/card/README.md +3 -3
- package/src/card/stories/index.js +1 -1
- package/src/card/test/__snapshots__/index.js.snap +6 -6
- package/src/checkbox-control/index.js +1 -1
- package/src/checkbox-control/stories/index.js +1 -1
- package/src/clipboard-button/index.js +1 -2
- package/src/color-indicator/stories/index.js +1 -1
- package/src/color-indicator/style.scss +5 -8
- package/src/color-palette/index.js +37 -9
- package/src/color-palette/stories/index.js +1 -1
- package/src/color-palette/style.scss +10 -1
- package/src/color-palette/test/__snapshots__/index.js.snap +30 -21
- package/src/color-picker/color-display.tsx +3 -2
- package/src/color-picker/hex-input.tsx +2 -1
- package/src/color-picker/input-with-slider.tsx +2 -1
- package/src/color-picker/stories/index.js +1 -1
- package/src/combobox-control/README.md +2 -2
- package/src/confirm-dialog/README.md +128 -0
- package/src/confirm-dialog/component.tsx +114 -0
- package/src/confirm-dialog/index.tsx +6 -0
- package/src/confirm-dialog/stories/index.js +120 -0
- package/src/confirm-dialog/test/index.js +302 -0
- package/src/confirm-dialog/types.ts +26 -0
- package/src/custom-gradient-bar/constants.js +0 -5
- package/src/custom-gradient-bar/control-points.js +40 -9
- package/src/custom-gradient-bar/index.js +8 -0
- package/src/custom-gradient-picker/index.js +9 -1
- package/src/custom-gradient-picker/style.scss +0 -4
- package/src/date-time/README.md +7 -0
- package/src/date-time/date.js +67 -84
- package/src/date-time/stories/index.js +1 -1
- package/src/date-time/stories/time.js +1 -1
- package/src/date-time/test/date.js +3 -29
- package/src/date-time/test/utils.js +32 -0
- package/src/date-time/utils.js +18 -0
- package/src/dimension-control/README.md +1 -1
- package/src/divider/README.md +33 -5
- package/src/divider/component.tsx +8 -7
- package/src/divider/stories/index.js +43 -17
- package/src/divider/styles.ts +53 -16
- package/src/divider/test/__snapshots__/index.js.snap +11 -11
- package/src/divider/test/index.js +4 -4
- package/src/divider/types.ts +5 -5
- package/src/drop-zone/index.js +14 -6
- package/src/drop-zone/provider.js +1 -0
- package/src/dropdown-menu/stories/index.js +1 -1
- package/src/duotone-picker/README.md +1 -1
- package/src/elevation/stories/index.js +1 -1
- package/src/external-link/stories/index.js +1 -1
- package/src/flyout/styles.ts +4 -2
- package/src/focusable-iframe/index.js +1 -0
- package/src/font-size-picker/index.js +27 -13
- package/src/font-size-picker/stories/index.js +63 -1
- package/src/font-size-picker/test/index.js +87 -0
- package/src/font-size-picker/test/util.js +74 -0
- package/src/font-size-picker/utils.js +31 -17
- package/src/form-token-field/stories/index.js +1 -1
- package/src/gradient-picker/index.js +4 -0
- package/src/gradient-picker/stories/index.js +1 -1
- package/src/grid/stories/index.js +1 -1
- package/src/guide/stories/index.js +1 -1
- package/src/higher-order/with-focus-outside/index.js +2 -0
- package/src/icon/stories/index.js +1 -1
- package/src/index.js +1 -0
- package/src/input-control/stories/index.js +2 -1
- package/src/input-control/styles/input-control-styles.tsx +16 -6
- package/src/input-control/types.ts +3 -1
- package/src/item-group/stories/index.js +84 -2
- package/src/menu-item/README.md +2 -2
- package/src/mobile/bottom-sheet/link-suggestion-item-cell.native.js +6 -2
- package/src/mobile/color-settings/index.native.js +2 -0
- package/src/mobile/color-settings/palette.screen.native.js +8 -5
- package/src/mobile/color-settings/style.native.scss +1 -1
- package/src/mobile/global-styles-context/utils.native.js +1 -1
- package/src/mobile/gridicons/index.native.js +3 -3
- package/src/mobile/inserter-button/style.native.scss +1 -0
- package/src/mobile/link-picker/index.native.js +41 -7
- package/src/mobile/link-settings/index.native.js +11 -0
- package/src/mobile/link-settings/test/edit.native.js +432 -0
- package/src/modal/README.md +10 -0
- package/src/modal/aria-helper.js +2 -0
- package/src/modal/index.js +72 -55
- package/src/modal/stories/index.js +6 -1
- package/src/modal/style.scss +9 -0
- package/src/modal/test/index.js +11 -0
- package/src/navigation/README.md +0 -9
- package/src/notice/stories/index.js +1 -1
- package/src/number-control/stories/index.js +1 -1
- package/src/palette-edit/index.js +15 -16
- package/src/palette-edit/style.scss +5 -0
- package/src/panel/stories/index.js +1 -1
- package/src/placeholder/stories/index.js +1 -1
- package/src/popover/stories/index.js +1 -1
- package/src/query-controls/README.md +138 -6
- package/src/radio-group/README.md +4 -1
- package/src/range-control/stories/index.js +1 -1
- package/src/resizable-box/stories/index.js +1 -1
- package/src/scrollable/stories/index.js +1 -1
- package/src/search-control/stories/index.js +1 -1
- package/src/select-control/stories/index.js +2 -1
- package/src/select-control/styles/select-control-styles.ts +25 -2
- package/src/select-control/types.ts +1 -1
- package/src/slot-fill/stories/index.js +1 -1
- package/src/snackbar/stories/index.js +1 -1
- package/src/spacer/stories/index.js +1 -1
- package/src/style-provider/index.js +2 -0
- package/src/surface/stories/index.js +1 -1
- package/src/tab-panel/stories/index.js +1 -1
- package/src/text-control/stories/index.js +1 -1
- package/src/text-highlight/stories/index.js +1 -1
- package/src/textarea-control/stories/index.js +1 -1
- package/src/tip/stories/index.js +1 -1
- package/src/toggle-control/stories/index.js +1 -1
- package/src/toggle-group-control/stories/index.js +1 -1
- package/src/toggle-group-control/toggle-group-control/component.tsx +7 -2
- package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +24 -9
- package/src/toggle-group-control/toggle-group-control-option/styles.ts +3 -0
- package/src/toolbar-button/stories/index.js +1 -1
- package/src/tools-panel/stories/index.js +237 -0
- package/src/tools-panel/styles.ts +41 -1
- package/src/tools-panel/test/index.js +234 -1
- package/src/tools-panel/tools-panel/README.md +9 -0
- package/src/tools-panel/tools-panel/component.tsx +2 -5
- package/src/tools-panel/tools-panel/hook.ts +50 -18
- package/src/tools-panel/tools-panel-item/hook.ts +5 -1
- package/src/tools-panel/types.ts +5 -1
- package/src/tooltip/stories/index.js +1 -1
- package/src/tree-select/stories/index.js +1 -1
- package/src/truncate/stories/index.js +1 -1
- package/src/unit-control/stories/index.js +19 -1
- package/src/unit-control/styles/unit-control-styles.ts +33 -46
- package/src/unit-control/types.ts +5 -2
- package/src/z-stack/README.md +1 -1
- package/src/z-stack/component.tsx +1 -1
- package/src/z-stack/stories/index.js +1 -1
- package/src/z-stack/styles.ts +7 -2
- package/tsconfig.json +6 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
// eslint-disable-next-line no-restricted-imports
|
|
5
|
+
import React, { useEffect, useState } from 'react';
|
|
6
|
+
// eslint-disable-next-line no-restricted-imports
|
|
7
|
+
import type { Ref, KeyboardEvent } from 'react';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* WordPress dependencies
|
|
11
|
+
*/
|
|
12
|
+
import { __ } from '@wordpress/i18n';
|
|
13
|
+
import { useCallback } from '@wordpress/element';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Internal dependencies
|
|
17
|
+
*/
|
|
18
|
+
import Modal from '../modal';
|
|
19
|
+
import type { OwnProps, DialogInputEvent } from './types';
|
|
20
|
+
import {
|
|
21
|
+
useContextSystem,
|
|
22
|
+
contextConnect,
|
|
23
|
+
WordPressComponentProps,
|
|
24
|
+
} from '../ui/context';
|
|
25
|
+
import { Flex } from '../flex';
|
|
26
|
+
import Button from '../button';
|
|
27
|
+
import { Text } from '../text';
|
|
28
|
+
import { VStack } from '../v-stack';
|
|
29
|
+
|
|
30
|
+
function ConfirmDialog(
|
|
31
|
+
props: WordPressComponentProps< OwnProps, 'div', false >,
|
|
32
|
+
forwardedRef: Ref< any >
|
|
33
|
+
) {
|
|
34
|
+
const {
|
|
35
|
+
isOpen: isOpenProp,
|
|
36
|
+
onConfirm,
|
|
37
|
+
onCancel,
|
|
38
|
+
children,
|
|
39
|
+
...otherProps
|
|
40
|
+
} = useContextSystem( props, 'ConfirmDialog' );
|
|
41
|
+
|
|
42
|
+
const [ isOpen, setIsOpen ] = useState< boolean >();
|
|
43
|
+
const [ shouldSelfClose, setShouldSelfClose ] = useState< boolean >();
|
|
44
|
+
|
|
45
|
+
useEffect( () => {
|
|
46
|
+
// We only allow the dialog to close itself if `isOpenProp` is *not* set.
|
|
47
|
+
// If `isOpenProp` is set, then it (probably) means it's controlled by a
|
|
48
|
+
// parent component. In that case, `shouldSelfClose` might do more harm than
|
|
49
|
+
// good, so we disable it.
|
|
50
|
+
const isIsOpenSet = typeof isOpenProp !== 'undefined';
|
|
51
|
+
setIsOpen( isIsOpenSet ? isOpenProp : true );
|
|
52
|
+
setShouldSelfClose( ! isIsOpenSet );
|
|
53
|
+
}, [ isOpenProp ] );
|
|
54
|
+
|
|
55
|
+
const handleEvent = useCallback(
|
|
56
|
+
( callback?: ( event: DialogInputEvent ) => void ) => (
|
|
57
|
+
event: DialogInputEvent
|
|
58
|
+
) => {
|
|
59
|
+
callback?.( event );
|
|
60
|
+
if ( shouldSelfClose ) {
|
|
61
|
+
setIsOpen( false );
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
[ shouldSelfClose, setIsOpen ]
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const handleEnter = useCallback(
|
|
68
|
+
( event: KeyboardEvent< HTMLDivElement > ) => {
|
|
69
|
+
if ( event.key === 'Enter' ) {
|
|
70
|
+
handleEvent( onConfirm )( event );
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
[ handleEvent, onConfirm ]
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
const cancelLabel = __( 'Cancel' );
|
|
77
|
+
const confirmLabel = __( 'OK' );
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<>
|
|
81
|
+
{ isOpen && (
|
|
82
|
+
<Modal
|
|
83
|
+
onRequestClose={ handleEvent( onCancel ) }
|
|
84
|
+
onKeyDown={ handleEnter }
|
|
85
|
+
closeButtonLabel={ cancelLabel }
|
|
86
|
+
isDismissible={ true }
|
|
87
|
+
ref={ forwardedRef }
|
|
88
|
+
__experimentalHideHeader
|
|
89
|
+
{ ...otherProps }
|
|
90
|
+
>
|
|
91
|
+
<VStack spacing={ 8 }>
|
|
92
|
+
<Text>{ children }</Text>
|
|
93
|
+
<Flex direction="row" justify="flex-end">
|
|
94
|
+
<Button
|
|
95
|
+
variant="tertiary"
|
|
96
|
+
onClick={ handleEvent( onCancel ) }
|
|
97
|
+
>
|
|
98
|
+
{ cancelLabel }
|
|
99
|
+
</Button>
|
|
100
|
+
<Button
|
|
101
|
+
variant="primary"
|
|
102
|
+
onClick={ handleEvent( onConfirm ) }
|
|
103
|
+
>
|
|
104
|
+
{ confirmLabel }
|
|
105
|
+
</Button>
|
|
106
|
+
</Flex>
|
|
107
|
+
</VStack>
|
|
108
|
+
</Modal>
|
|
109
|
+
) }
|
|
110
|
+
</>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export default contextConnect( ConfirmDialog, 'ConfirmDialog' );
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
// eslint-disable-next-line no-restricted-imports
|
|
5
|
+
import React, { useState } from 'react';
|
|
6
|
+
import { text } from '@storybook/addon-knobs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
import Button from '../../button';
|
|
12
|
+
import { Heading } from '../../heading';
|
|
13
|
+
import { ConfirmDialog } from '..';
|
|
14
|
+
|
|
15
|
+
export default {
|
|
16
|
+
component: ConfirmDialog,
|
|
17
|
+
title: 'Components (Experimental)/ConfirmDialog',
|
|
18
|
+
parameters: {
|
|
19
|
+
knobs: { disable: false },
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const daText = () =>
|
|
24
|
+
text( 'message', 'Would you like to privately publish the post now?' );
|
|
25
|
+
|
|
26
|
+
// Simplest usage: just declare the component with the required `onConfirm` prop.
|
|
27
|
+
export const _default = () => {
|
|
28
|
+
const [ confirmVal, setConfirmVal ] = useState( "Hasn't confirmed yet" );
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<>
|
|
32
|
+
<ConfirmDialog onConfirm={ () => setConfirmVal( 'Confirmed!' ) }>
|
|
33
|
+
{ daText() }
|
|
34
|
+
</ConfirmDialog>
|
|
35
|
+
<Heading level={ 1 }>{ confirmVal }</Heading>
|
|
36
|
+
</>
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const WithJSXMessage = () => {
|
|
41
|
+
const [ confirmVal, setConfirmVal ] = useState( "Hasn't confirmed yet" );
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<>
|
|
45
|
+
<ConfirmDialog onConfirm={ () => setConfirmVal( 'Confirmed!' ) }>
|
|
46
|
+
<Heading level={ 2 }>{ daText() }</Heading>
|
|
47
|
+
</ConfirmDialog>
|
|
48
|
+
<Heading level={ 1 }>{ confirmVal }</Heading>
|
|
49
|
+
</>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const VeeeryLongMessage = () => {
|
|
54
|
+
const [ confirmVal, setConfirmVal ] = useState( "Hasn't confirmed yet" );
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<>
|
|
58
|
+
<ConfirmDialog onConfirm={ () => setConfirmVal( 'Confirmed!' ) }>
|
|
59
|
+
{ daText().repeat( 20 ) }
|
|
60
|
+
</ConfirmDialog>
|
|
61
|
+
<Heading level={ 1 }>{ confirmVal }</Heading>
|
|
62
|
+
</>
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const UncontrolledAndWithExplicitOnCancel = () => {
|
|
67
|
+
const [ confirmVal, setConfirmVal ] = useState(
|
|
68
|
+
"Hasn't confirmed or cancelled yet"
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<>
|
|
73
|
+
<ConfirmDialog
|
|
74
|
+
onConfirm={ () => setConfirmVal( 'Confirmed!' ) }
|
|
75
|
+
onCancel={ () => setConfirmVal( 'Cancelled' ) }
|
|
76
|
+
>
|
|
77
|
+
{ daText() }
|
|
78
|
+
</ConfirmDialog>
|
|
79
|
+
<Heading level={ 1 }>{ confirmVal }</Heading>
|
|
80
|
+
</>
|
|
81
|
+
);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// Controlled `ConfirmDialog`s require both `onConfirm` *and* `onCancel to be passed
|
|
85
|
+
// It's expected that the user will then use it to hide the dialog, too (see the
|
|
86
|
+
// `setIsOpen` calls below).
|
|
87
|
+
export const Controlled = () => {
|
|
88
|
+
const [ isOpen, setIsOpen ] = useState( false );
|
|
89
|
+
const [ confirmVal, setConfirmVal ] = useState(
|
|
90
|
+
"Hasn't confirmed or cancelled yet"
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
const handleConfirm = () => {
|
|
94
|
+
setConfirmVal( 'Confirmed!' );
|
|
95
|
+
setIsOpen( false );
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const handleCancel = () => {
|
|
99
|
+
setConfirmVal( 'Cancelled' );
|
|
100
|
+
setIsOpen( false );
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
return (
|
|
104
|
+
<>
|
|
105
|
+
<ConfirmDialog
|
|
106
|
+
isOpen={ isOpen }
|
|
107
|
+
onConfirm={ handleConfirm }
|
|
108
|
+
onCancel={ handleCancel }
|
|
109
|
+
>
|
|
110
|
+
{ daText() }
|
|
111
|
+
</ConfirmDialog>
|
|
112
|
+
|
|
113
|
+
<Heading level={ 1 }>{ confirmVal }</Heading>
|
|
114
|
+
|
|
115
|
+
<Button variant="primary" onClick={ () => setIsOpen( true ) }>
|
|
116
|
+
Open ConfirmDialog
|
|
117
|
+
</Button>
|
|
118
|
+
</>
|
|
119
|
+
);
|
|
120
|
+
};
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
render,
|
|
6
|
+
fireEvent,
|
|
7
|
+
waitForElementToBeRemoved,
|
|
8
|
+
} from '@testing-library/react';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Internal dependencies
|
|
12
|
+
*/
|
|
13
|
+
import { ConfirmDialog } from '..';
|
|
14
|
+
|
|
15
|
+
const noop = () => {};
|
|
16
|
+
|
|
17
|
+
describe( 'Confirm', () => {
|
|
18
|
+
describe( 'Confirm component', () => {
|
|
19
|
+
describe( 'Structure', () => {
|
|
20
|
+
it( 'should render correctly', () => {
|
|
21
|
+
const wrapper = render(
|
|
22
|
+
<ConfirmDialog onConfirm={ noop } onCancel={ noop }>
|
|
23
|
+
Are you sure?
|
|
24
|
+
</ConfirmDialog>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const dialog = wrapper.getByRole( 'dialog' );
|
|
28
|
+
const elementsTexts = [ 'Are you sure?', 'OK', 'Cancel' ];
|
|
29
|
+
|
|
30
|
+
expect( dialog ).toBeInTheDocument();
|
|
31
|
+
|
|
32
|
+
elementsTexts.forEach( ( txt ) => {
|
|
33
|
+
const el = wrapper.getByText( txt );
|
|
34
|
+
expect( el ).toBeInTheDocument();
|
|
35
|
+
} );
|
|
36
|
+
} );
|
|
37
|
+
} );
|
|
38
|
+
|
|
39
|
+
describe( 'When uncontrolled', () => {
|
|
40
|
+
it( 'should render', () => {
|
|
41
|
+
const wrapper = render(
|
|
42
|
+
<ConfirmDialog onConfirm={ noop } onCancel={ noop }>
|
|
43
|
+
Are you sure?
|
|
44
|
+
</ConfirmDialog>
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const confirmDialog = wrapper.getByRole( 'dialog' );
|
|
48
|
+
|
|
49
|
+
expect( confirmDialog ).toBeInTheDocument();
|
|
50
|
+
} );
|
|
51
|
+
|
|
52
|
+
it( 'should not render if closed by clicking `OK`, and the `onConfirm` callback should be called', async () => {
|
|
53
|
+
const onConfirm = jest.fn().mockName( 'onConfirm()' );
|
|
54
|
+
|
|
55
|
+
const wrapper = render(
|
|
56
|
+
<ConfirmDialog onConfirm={ onConfirm }>
|
|
57
|
+
Are you sure?
|
|
58
|
+
</ConfirmDialog>
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const confirmDialog = wrapper.getByRole( 'dialog' );
|
|
62
|
+
const button = wrapper.getByText( 'OK' );
|
|
63
|
+
|
|
64
|
+
fireEvent.click( button );
|
|
65
|
+
|
|
66
|
+
expect( confirmDialog ).not.toBeInTheDocument();
|
|
67
|
+
expect( onConfirm ).toHaveBeenCalled();
|
|
68
|
+
} );
|
|
69
|
+
|
|
70
|
+
it( 'should not render if closed by clicking `Cancel`, and the `onCancel` callback should be called', async () => {
|
|
71
|
+
const onCancel = jest.fn().mockName( 'onCancel()' );
|
|
72
|
+
|
|
73
|
+
const wrapper = render(
|
|
74
|
+
<ConfirmDialog onConfirm={ noop } onCancel={ onCancel }>
|
|
75
|
+
Are you sure?
|
|
76
|
+
</ConfirmDialog>
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const confirmDialog = wrapper.getByRole( 'dialog' );
|
|
80
|
+
const button = wrapper.getByText( 'Cancel' );
|
|
81
|
+
|
|
82
|
+
fireEvent.click( button );
|
|
83
|
+
|
|
84
|
+
expect( confirmDialog ).not.toBeInTheDocument();
|
|
85
|
+
expect( onCancel ).toHaveBeenCalled();
|
|
86
|
+
} );
|
|
87
|
+
|
|
88
|
+
it( 'should be dismissable even if an `onCancel` callback is not provided', async () => {
|
|
89
|
+
const wrapper = render(
|
|
90
|
+
<ConfirmDialog onConfirm={ noop }>
|
|
91
|
+
Are you sure?
|
|
92
|
+
</ConfirmDialog>
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
const confirmDialog = wrapper.getByRole( 'dialog' );
|
|
96
|
+
const button = wrapper.getByText( 'Cancel' );
|
|
97
|
+
|
|
98
|
+
fireEvent.click( button );
|
|
99
|
+
|
|
100
|
+
expect( confirmDialog ).not.toBeInTheDocument();
|
|
101
|
+
} );
|
|
102
|
+
|
|
103
|
+
it( 'should not render if dialog is closed by clicking the overlay, and the `onCancel` callback should be called', async () => {
|
|
104
|
+
const onCancel = jest.fn().mockName( 'onCancel()' );
|
|
105
|
+
|
|
106
|
+
const wrapper = render(
|
|
107
|
+
<ConfirmDialog onConfirm={ noop } onCancel={ onCancel }>
|
|
108
|
+
Are you sure?
|
|
109
|
+
</ConfirmDialog>
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const confirmDialog = wrapper.getByRole( 'dialog' );
|
|
113
|
+
|
|
114
|
+
//The overlay click is handled by detecting an onBlur from the modal frame.
|
|
115
|
+
fireEvent.blur( confirmDialog );
|
|
116
|
+
|
|
117
|
+
await waitForElementToBeRemoved( confirmDialog );
|
|
118
|
+
|
|
119
|
+
expect( confirmDialog ).not.toBeInTheDocument();
|
|
120
|
+
expect( onCancel ).toHaveBeenCalled();
|
|
121
|
+
} );
|
|
122
|
+
|
|
123
|
+
it( 'should not render if dialog is closed by pressing `Escape`, and the `onCancel` callback should be called', async () => {
|
|
124
|
+
const onCancel = jest.fn().mockName( 'onCancel()' );
|
|
125
|
+
|
|
126
|
+
const wrapper = render(
|
|
127
|
+
<ConfirmDialog onConfirm={ noop } onCancel={ onCancel }>
|
|
128
|
+
Are you sure?
|
|
129
|
+
</ConfirmDialog>
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
const confirmDialog = wrapper.getByRole( 'dialog' );
|
|
133
|
+
|
|
134
|
+
fireEvent.keyDown( confirmDialog, { keyCode: 27 } );
|
|
135
|
+
|
|
136
|
+
expect( confirmDialog ).not.toBeInTheDocument();
|
|
137
|
+
expect( onCancel ).toHaveBeenCalled();
|
|
138
|
+
} );
|
|
139
|
+
|
|
140
|
+
it( 'should not render if dialog is closed by pressing `Enter`, and the `onConfirm` callback should be called', async () => {
|
|
141
|
+
const onConfirm = jest.fn().mockName( 'onConfirm()' );
|
|
142
|
+
|
|
143
|
+
const wrapper = render(
|
|
144
|
+
<ConfirmDialog onConfirm={ onConfirm }>
|
|
145
|
+
Are you sure?
|
|
146
|
+
</ConfirmDialog>
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
const confirmDialog = wrapper.getByRole( 'dialog' );
|
|
150
|
+
|
|
151
|
+
fireEvent.keyDown( confirmDialog, { keyCode: 13 } );
|
|
152
|
+
|
|
153
|
+
expect( confirmDialog ).not.toBeInTheDocument();
|
|
154
|
+
expect( onConfirm ).toHaveBeenCalled();
|
|
155
|
+
} );
|
|
156
|
+
} );
|
|
157
|
+
} );
|
|
158
|
+
|
|
159
|
+
describe( 'When controlled (isOpen is not `undefined`)', () => {
|
|
160
|
+
it( 'should render when `isOpen` is set to `true`', async () => {
|
|
161
|
+
const wrapper = render(
|
|
162
|
+
<ConfirmDialog
|
|
163
|
+
isOpen={ true }
|
|
164
|
+
onConfirm={ noop }
|
|
165
|
+
onCancel={ noop }
|
|
166
|
+
>
|
|
167
|
+
Are you sure?
|
|
168
|
+
</ConfirmDialog>
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
const confirmDialog = wrapper.getByRole( 'dialog' );
|
|
172
|
+
|
|
173
|
+
expect( confirmDialog ).toBeInTheDocument();
|
|
174
|
+
} );
|
|
175
|
+
|
|
176
|
+
it( 'should not render if `isOpen` is set to false', async () => {
|
|
177
|
+
const wrapper = render(
|
|
178
|
+
<ConfirmDialog
|
|
179
|
+
isOpen={ false }
|
|
180
|
+
onConfirm={ noop }
|
|
181
|
+
onCancel={ noop }
|
|
182
|
+
>
|
|
183
|
+
Are you sure?
|
|
184
|
+
</ConfirmDialog>
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
// `queryByRole` needs to be used here because in this scenario the
|
|
188
|
+
// dialog is never rendered.
|
|
189
|
+
const confirmDialog = wrapper.queryByRole( 'dialog' );
|
|
190
|
+
|
|
191
|
+
expect( confirmDialog ).not.toBeInTheDocument();
|
|
192
|
+
} );
|
|
193
|
+
|
|
194
|
+
it( 'should call the `onConfirm` callback if `OK`', async () => {
|
|
195
|
+
const onConfirm = jest.fn().mockName( 'onConfirm()' );
|
|
196
|
+
|
|
197
|
+
const wrapper = render(
|
|
198
|
+
<ConfirmDialog isOpen={ true } onConfirm={ onConfirm }>
|
|
199
|
+
Are you sure?
|
|
200
|
+
</ConfirmDialog>
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
const button = wrapper.getByText( 'OK' );
|
|
204
|
+
|
|
205
|
+
fireEvent.click( button );
|
|
206
|
+
|
|
207
|
+
expect( onConfirm ).toHaveBeenCalled();
|
|
208
|
+
} );
|
|
209
|
+
|
|
210
|
+
it( 'should call the `onCancel` callback if `Cancel` is clicked', async () => {
|
|
211
|
+
const onCancel = jest.fn().mockName( 'onCancel()' );
|
|
212
|
+
|
|
213
|
+
const wrapper = render(
|
|
214
|
+
<ConfirmDialog
|
|
215
|
+
isOpen={ true }
|
|
216
|
+
onConfirm={ noop }
|
|
217
|
+
onCancel={ onCancel }
|
|
218
|
+
>
|
|
219
|
+
Are you sure?
|
|
220
|
+
</ConfirmDialog>
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
const button = wrapper.getByText( 'Cancel' );
|
|
224
|
+
|
|
225
|
+
fireEvent.click( button );
|
|
226
|
+
|
|
227
|
+
expect( onCancel ).toHaveBeenCalled();
|
|
228
|
+
} );
|
|
229
|
+
|
|
230
|
+
it( 'should call the `onCancel` callback if the overlay is clicked', async () => {
|
|
231
|
+
jest.useFakeTimers();
|
|
232
|
+
|
|
233
|
+
const onCancel = jest.fn().mockName( 'onCancel()' );
|
|
234
|
+
|
|
235
|
+
const wrapper = render(
|
|
236
|
+
<ConfirmDialog
|
|
237
|
+
isOpen={ true }
|
|
238
|
+
onConfirm={ noop }
|
|
239
|
+
onCancel={ onCancel }
|
|
240
|
+
>
|
|
241
|
+
Are you sure?
|
|
242
|
+
</ConfirmDialog>
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
const frame = wrapper.baseElement.querySelector(
|
|
246
|
+
'.components-modal__frame'
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
//The overlay click is handled by detecting an onBlur from the modal frame.
|
|
250
|
+
fireEvent.blur( frame );
|
|
251
|
+
|
|
252
|
+
// We don't wait for a DOM side effect here, so we need to fake the timers
|
|
253
|
+
// and "advance" it so that the `queueBlurCheck` in the `useFocusOutside` hook
|
|
254
|
+
// properly executes its timeout task.
|
|
255
|
+
jest.advanceTimersByTime( 0 );
|
|
256
|
+
|
|
257
|
+
expect( onCancel ).toHaveBeenCalled();
|
|
258
|
+
|
|
259
|
+
jest.useRealTimers();
|
|
260
|
+
} );
|
|
261
|
+
|
|
262
|
+
it( 'should call the `onCancel` callback if the `Escape` key is pressed', async () => {
|
|
263
|
+
const onCancel = jest.fn().mockName( 'onCancel()' );
|
|
264
|
+
|
|
265
|
+
const wrapper = render(
|
|
266
|
+
<ConfirmDialog onConfirm={ noop } onCancel={ onCancel }>
|
|
267
|
+
Are you sure?
|
|
268
|
+
</ConfirmDialog>
|
|
269
|
+
);
|
|
270
|
+
|
|
271
|
+
const frame = wrapper.baseElement.querySelector(
|
|
272
|
+
'.components-modal__frame'
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
fireEvent.keyDown( frame, { keyCode: 27 } );
|
|
276
|
+
|
|
277
|
+
expect( onCancel ).toHaveBeenCalled();
|
|
278
|
+
} );
|
|
279
|
+
|
|
280
|
+
it( 'should call the `onConfirm` callback if the `Enter` key is pressed', async () => {
|
|
281
|
+
const onConfirm = jest.fn().mockName( 'onConfirm()' );
|
|
282
|
+
|
|
283
|
+
const wrapper = render(
|
|
284
|
+
<ConfirmDialog
|
|
285
|
+
isOpen={ true }
|
|
286
|
+
onConfirm={ onConfirm }
|
|
287
|
+
onCancel={ noop }
|
|
288
|
+
>
|
|
289
|
+
Are you sure?
|
|
290
|
+
</ConfirmDialog>
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
const frame = wrapper.baseElement.querySelector(
|
|
294
|
+
'.components-modal__frame'
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
fireEvent.keyDown( frame, { keyCode: 13 } );
|
|
298
|
+
|
|
299
|
+
expect( onConfirm ).toHaveBeenCalled();
|
|
300
|
+
} );
|
|
301
|
+
} );
|
|
302
|
+
} );
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
// eslint-disable-next-line no-restricted-imports
|
|
5
|
+
import type { MouseEvent, KeyboardEvent, ReactNode } from 'react';
|
|
6
|
+
|
|
7
|
+
export type DialogInputEvent =
|
|
8
|
+
| KeyboardEvent< HTMLDivElement >
|
|
9
|
+
| MouseEvent< HTMLButtonElement >;
|
|
10
|
+
|
|
11
|
+
type BaseProps = {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
onConfirm: ( event: DialogInputEvent ) => void;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type ControlledProps = BaseProps & {
|
|
17
|
+
onCancel: ( event: DialogInputEvent ) => void;
|
|
18
|
+
isOpen: boolean;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type UncontrolledProps = BaseProps & {
|
|
22
|
+
onCancel?: ( event: DialogInputEvent ) => void;
|
|
23
|
+
isOpen?: never;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type OwnProps = ControlledProps | UncontrolledProps;
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
export const COLOR_POPOVER_PROPS = {
|
|
2
|
-
className: 'components-custom-gradient-picker__color-picker-popover',
|
|
3
|
-
position: 'top',
|
|
4
|
-
};
|
|
5
|
-
|
|
6
1
|
export const GRADIENT_MARKERS_WIDTH = 16;
|
|
7
2
|
export const INSERT_POINT_WIDTH = 16;
|
|
8
3
|
export const MINIMUM_ABSOLUTE_LEFT_POSITION = 5;
|
|
@@ -8,8 +8,8 @@ import { colord } from 'colord';
|
|
|
8
8
|
* WordPress dependencies
|
|
9
9
|
*/
|
|
10
10
|
import { useInstanceId } from '@wordpress/compose';
|
|
11
|
-
import { useEffect, useRef, useState } from '@wordpress/element';
|
|
12
|
-
import { __, sprintf } from '@wordpress/i18n';
|
|
11
|
+
import { useEffect, useRef, useState, useMemo } from '@wordpress/element';
|
|
12
|
+
import { __, sprintf, isRTL } from '@wordpress/i18n';
|
|
13
13
|
import { plus } from '@wordpress/icons';
|
|
14
14
|
import { LEFT, RIGHT } from '@wordpress/keycodes';
|
|
15
15
|
|
|
@@ -18,8 +18,8 @@ import { LEFT, RIGHT } from '@wordpress/keycodes';
|
|
|
18
18
|
*/
|
|
19
19
|
import Button from '../button';
|
|
20
20
|
import { ColorPicker } from '../color-picker';
|
|
21
|
-
import Dropdown from '../dropdown';
|
|
22
21
|
import { VisuallyHidden } from '../visually-hidden';
|
|
22
|
+
import { CustomColorPickerDropdown } from '../color-palette';
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
25
|
addControlPoint,
|
|
@@ -31,7 +31,6 @@ import {
|
|
|
31
31
|
getHorizontalRelativeGradientPosition,
|
|
32
32
|
} from './utils';
|
|
33
33
|
import {
|
|
34
|
-
COLOR_POPOVER_PROPS,
|
|
35
34
|
GRADIENT_MARKERS_WIDTH,
|
|
36
35
|
MINIMUM_SIGNIFICANT_MOVE,
|
|
37
36
|
KEYBOARD_CONTROL_POINT_VARIATION,
|
|
@@ -74,6 +73,33 @@ function ControlPointButton( { isOpen, position, color, ...additionalProps } ) {
|
|
|
74
73
|
);
|
|
75
74
|
}
|
|
76
75
|
|
|
76
|
+
function GradientColorPickerDropdown( {
|
|
77
|
+
isRenderedInSidebar,
|
|
78
|
+
gradientPickerDomRef,
|
|
79
|
+
...props
|
|
80
|
+
} ) {
|
|
81
|
+
const popoverProps = useMemo( () => {
|
|
82
|
+
const result = {
|
|
83
|
+
className:
|
|
84
|
+
'components-custom-gradient-picker__color-picker-popover',
|
|
85
|
+
position: 'top',
|
|
86
|
+
};
|
|
87
|
+
if ( isRenderedInSidebar ) {
|
|
88
|
+
result.anchorRef = gradientPickerDomRef.current;
|
|
89
|
+
result.position = isRTL() ? 'bottom right' : 'bottom left';
|
|
90
|
+
result.__unstableForcePosition = true;
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}, [ gradientPickerDomRef.current, isRenderedInSidebar ] );
|
|
94
|
+
return (
|
|
95
|
+
<CustomColorPickerDropdown
|
|
96
|
+
isRenderedInSidebar={ isRenderedInSidebar }
|
|
97
|
+
popoverProps={ popoverProps }
|
|
98
|
+
{ ...props }
|
|
99
|
+
/>
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
77
103
|
function ControlPoints( {
|
|
78
104
|
disableRemove,
|
|
79
105
|
disableAlpha,
|
|
@@ -83,6 +109,7 @@ function ControlPoints( {
|
|
|
83
109
|
onChange,
|
|
84
110
|
onStartControlPointChange,
|
|
85
111
|
onStopControlPointChange,
|
|
112
|
+
__experimentalIsRenderedInSidebar,
|
|
86
113
|
} ) {
|
|
87
114
|
const controlPointMoveState = useRef();
|
|
88
115
|
|
|
@@ -134,7 +161,9 @@ function ControlPoints( {
|
|
|
134
161
|
const initialPosition = point?.position;
|
|
135
162
|
return (
|
|
136
163
|
ignoreMarkerPosition !== initialPosition && (
|
|
137
|
-
<
|
|
164
|
+
<GradientColorPickerDropdown
|
|
165
|
+
gradientPickerDomRef={ gradientPickerDomRef }
|
|
166
|
+
isRenderedInSidebar={ __experimentalIsRenderedInSidebar }
|
|
138
167
|
key={ index }
|
|
139
168
|
onClose={ onStopControlPointChange }
|
|
140
169
|
renderToggle={ ( { isOpen, onToggle } ) => (
|
|
@@ -225,7 +254,7 @@ function ControlPoints( {
|
|
|
225
254
|
);
|
|
226
255
|
} }
|
|
227
256
|
/>
|
|
228
|
-
{ ! disableRemove && (
|
|
257
|
+
{ ! disableRemove && controlPoints.length > 2 && (
|
|
229
258
|
<Button
|
|
230
259
|
className="components-custom-gradient-picker__remove-control-point"
|
|
231
260
|
onClick={ () => {
|
|
@@ -244,7 +273,6 @@ function ControlPoints( {
|
|
|
244
273
|
) }
|
|
245
274
|
</>
|
|
246
275
|
) }
|
|
247
|
-
popoverProps={ COLOR_POPOVER_PROPS }
|
|
248
276
|
/>
|
|
249
277
|
)
|
|
250
278
|
);
|
|
@@ -258,10 +286,14 @@ function InsertPoint( {
|
|
|
258
286
|
onCloseInserter,
|
|
259
287
|
insertPosition,
|
|
260
288
|
disableAlpha,
|
|
289
|
+
__experimentalIsRenderedInSidebar,
|
|
290
|
+
gradientPickerDomRef,
|
|
261
291
|
} ) {
|
|
262
292
|
const [ alreadyInsertedPoint, setAlreadyInsertedPoint ] = useState( false );
|
|
263
293
|
return (
|
|
264
|
-
<
|
|
294
|
+
<GradientColorPickerDropdown
|
|
295
|
+
gradientPickerDomRef={ gradientPickerDomRef }
|
|
296
|
+
isRenderedInSidebar={ __experimentalIsRenderedInSidebar }
|
|
265
297
|
className="components-custom-gradient-picker__inserter"
|
|
266
298
|
onClose={ () => {
|
|
267
299
|
onCloseInserter();
|
|
@@ -314,7 +346,6 @@ function InsertPoint( {
|
|
|
314
346
|
} }
|
|
315
347
|
/>
|
|
316
348
|
) }
|
|
317
|
-
popoverProps={ COLOR_POPOVER_PROPS }
|
|
318
349
|
/>
|
|
319
350
|
);
|
|
320
351
|
}
|