@wordpress/components 22.1.0 → 23.0.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 +57 -0
- package/build/alignment-matrix-control/cell.js.map +1 -1
- package/build/alignment-matrix-control/icon.js +4 -2
- package/build/alignment-matrix-control/icon.js.map +1 -1
- package/build/alignment-matrix-control/index.js +25 -1
- package/build/alignment-matrix-control/index.js.map +1 -1
- package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
- package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
- package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
- package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
- package/build/alignment-matrix-control/types.js +6 -0
- package/build/alignment-matrix-control/types.js.map +1 -0
- package/build/alignment-matrix-control/utils.js +9 -8
- package/build/alignment-matrix-control/utils.js.map +1 -1
- package/build/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
- package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
- package/build/autocomplete/index.js +38 -9
- package/build/autocomplete/index.js.map +1 -1
- package/build/base-control/hooks.js +52 -0
- package/build/base-control/hooks.js.map +1 -0
- package/build/base-control/index.js +24 -7
- package/build/base-control/index.js.map +1 -1
- package/build/base-field/hook.js +0 -14
- package/build/base-field/hook.js.map +1 -1
- package/build/base-field/index.js.map +1 -1
- package/build/base-field/styles.js +5 -5
- package/build/base-field/styles.js.map +1 -1
- package/build/base-field/types.js +6 -0
- package/build/base-field/types.js.map +1 -0
- package/build/border-control/border-control/component.js +1 -0
- package/build/border-control/border-control/component.js.map +1 -1
- package/build/border-control/styles.js +16 -16
- package/build/border-control/styles.js.map +1 -1
- package/build/box-control/linked-button.js +3 -4
- package/build/box-control/linked-button.js.map +1 -1
- package/build/color-palette/index.js +2 -7
- package/build/color-palette/index.js.map +1 -1
- package/build/color-picker/input-with-slider.js +1 -0
- package/build/color-picker/input-with-slider.js.map +1 -1
- package/build/color-picker/styles.js +8 -8
- package/build/color-picker/styles.js.map +1 -1
- package/build/custom-select-control/index.js +14 -2
- package/build/custom-select-control/index.js.map +1 -1
- package/build/dashicon/index.js +1 -4
- package/build/dashicon/index.js.map +1 -1
- package/build/date-time/date-time/index.js +4 -4
- package/build/date-time/date-time/index.js.map +1 -1
- package/build/duotone-picker/duotone-picker.js +2 -2
- package/build/duotone-picker/duotone-picker.js.map +1 -1
- package/build/gradient-picker/index.js +3 -9
- package/build/gradient-picker/index.js.map +1 -1
- package/build/higher-order/with-fallback-styles/index.js +2 -2
- package/build/higher-order/with-fallback-styles/index.js.map +1 -1
- package/build/index.js +13 -1
- package/build/index.js.map +1 -1
- package/build/input-control/index.js +17 -5
- package/build/input-control/index.js.map +1 -1
- package/build/input-control/input-base.js +2 -0
- package/build/input-control/input-base.js.map +1 -1
- package/build/mobile/bottom-sheet/cell.native.js +1 -1
- package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
- package/build/mobile/bottom-sheet/switch-cell.native.js +1 -3
- package/build/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
- package/build/mobile/global-styles-context/index.native.js +8 -8
- package/build/mobile/global-styles-context/index.native.js.map +1 -1
- package/build/mobile/keyboard-aware-flat-list/index.ios.js +4 -2
- package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
- package/build/modal/index.js +8 -0
- package/build/modal/index.js.map +1 -1
- package/build/navigator/navigator-provider/component.js +12 -8
- package/build/navigator/navigator-provider/component.js.map +1 -1
- package/build/number-control/styles/number-control-styles.js +8 -8
- package/build/number-control/styles/number-control-styles.js.map +1 -1
- package/build/palette-edit/index.js +72 -33
- package/build/palette-edit/index.js.map +1 -1
- package/build/popover/index.js +10 -2
- package/build/popover/index.js.map +1 -1
- package/build/query-controls/index.js +1 -0
- package/build/query-controls/index.js.map +1 -1
- package/build/snackbar/index.js +35 -24
- package/build/snackbar/index.js.map +1 -1
- package/build/snackbar/list.js +14 -19
- package/build/snackbar/list.js.map +1 -1
- package/build/snackbar/types.js +6 -0
- package/build/snackbar/types.js.map +1 -0
- package/build/tab-panel/index.js +10 -5
- package/build/tab-panel/index.js.map +1 -1
- package/build/theme/color-algorithms.js +118 -0
- package/build/theme/color-algorithms.js.map +1 -0
- package/build/theme/index.js +21 -18
- package/build/theme/index.js.map +1 -1
- package/build/theme/styles.js +10 -7
- package/build/theme/styles.js.map +1 -1
- package/build/toggle-control/index.js +5 -2
- package/build/toggle-control/index.js.map +1 -1
- package/build/ui/context/context-system-provider.js +3 -1
- package/build/ui/context/context-system-provider.js.map +1 -1
- package/build/unit-control/index.js +5 -2
- package/build/unit-control/index.js.map +1 -1
- package/build/utils/colors-values.js +1 -1
- package/build/utils/colors-values.js.map +1 -1
- package/build/utils/config-values.js +0 -2
- package/build/utils/config-values.js.map +1 -1
- package/build/utils/hooks/use-controlled-value.js.map +1 -1
- package/build-module/alignment-matrix-control/cell.js.map +1 -1
- package/build-module/alignment-matrix-control/icon.js +4 -2
- package/build-module/alignment-matrix-control/icon.js.map +1 -1
- package/build-module/alignment-matrix-control/index.js +23 -1
- package/build-module/alignment-matrix-control/index.js.map +1 -1
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
- package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
- package/build-module/alignment-matrix-control/types.js +2 -0
- package/build-module/alignment-matrix-control/types.js.map +1 -0
- package/build-module/alignment-matrix-control/utils.js +13 -8
- package/build-module/alignment-matrix-control/utils.js.map +1 -1
- package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
- package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
- package/build-module/autocomplete/index.js +38 -9
- package/build-module/autocomplete/index.js.map +1 -1
- package/build-module/base-control/hooks.js +41 -0
- package/build-module/base-control/hooks.js.map +1 -0
- package/build-module/base-control/index.js +18 -8
- package/build-module/base-control/index.js.map +1 -1
- package/build-module/base-field/hook.js +0 -14
- package/build-module/base-field/hook.js.map +1 -1
- package/build-module/base-field/index.js.map +1 -1
- package/build-module/base-field/styles.js +5 -5
- package/build-module/base-field/styles.js.map +1 -1
- package/build-module/base-field/types.js +2 -0
- package/build-module/base-field/types.js.map +1 -0
- package/build-module/border-control/border-control/component.js +1 -0
- package/build-module/border-control/border-control/component.js.map +1 -1
- package/build-module/border-control/styles.js +17 -17
- package/build-module/border-control/styles.js.map +1 -1
- package/build-module/box-control/linked-button.js +3 -4
- package/build-module/box-control/linked-button.js.map +1 -1
- package/build-module/color-palette/index.js +2 -7
- package/build-module/color-palette/index.js.map +1 -1
- package/build-module/color-picker/input-with-slider.js +1 -0
- package/build-module/color-picker/input-with-slider.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/custom-select-control/index.js +14 -2
- package/build-module/custom-select-control/index.js.map +1 -1
- package/build-module/dashicon/index.js +1 -4
- package/build-module/dashicon/index.js.map +1 -1
- package/build-module/date-time/date-time/index.js +4 -4
- package/build-module/date-time/date-time/index.js.map +1 -1
- package/build-module/duotone-picker/duotone-picker.js +2 -2
- package/build-module/duotone-picker/duotone-picker.js.map +1 -1
- package/build-module/gradient-picker/index.js +3 -8
- package/build-module/gradient-picker/index.js.map +1 -1
- package/build-module/higher-order/with-fallback-styles/index.js +2 -2
- package/build-module/higher-order/with-fallback-styles/index.js.map +1 -1
- package/build-module/index.js +2 -2
- package/build-module/index.js.map +1 -1
- package/build-module/input-control/index.js +16 -5
- package/build-module/input-control/index.js.map +1 -1
- package/build-module/input-control/input-base.js +2 -0
- package/build-module/input-control/input-base.js.map +1 -1
- package/build-module/mobile/bottom-sheet/cell.native.js +1 -1
- package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
- package/build-module/mobile/bottom-sheet/switch-cell.native.js +1 -2
- package/build-module/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
- package/build-module/mobile/global-styles-context/index.native.js +8 -7
- package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
- package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
- package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
- package/build-module/modal/index.js +8 -0
- package/build-module/modal/index.js.map +1 -1
- package/build-module/navigator/navigator-provider/component.js +12 -8
- package/build-module/navigator/navigator-provider/component.js.map +1 -1
- package/build-module/number-control/styles/number-control-styles.js +8 -10
- package/build-module/number-control/styles/number-control-styles.js.map +1 -1
- package/build-module/palette-edit/index.js +73 -34
- package/build-module/palette-edit/index.js.map +1 -1
- package/build-module/popover/index.js +10 -2
- package/build-module/popover/index.js.map +1 -1
- package/build-module/query-controls/index.js +1 -0
- package/build-module/query-controls/index.js.map +1 -1
- package/build-module/snackbar/index.js +33 -23
- package/build-module/snackbar/index.js.map +1 -1
- package/build-module/snackbar/list.js +14 -22
- package/build-module/snackbar/list.js.map +1 -1
- package/build-module/snackbar/types.js +2 -0
- package/build-module/snackbar/types.js.map +1 -0
- package/build-module/tab-panel/index.js +10 -5
- package/build-module/tab-panel/index.js.map +1 -1
- package/build-module/theme/color-algorithms.js +105 -0
- package/build-module/theme/color-algorithms.js.map +1 -0
- package/build-module/theme/index.js +21 -17
- package/build-module/theme/index.js.map +1 -1
- package/build-module/theme/styles.js +8 -6
- package/build-module/theme/styles.js.map +1 -1
- package/build-module/toggle-control/index.js +4 -2
- package/build-module/toggle-control/index.js.map +1 -1
- package/build-module/ui/context/context-system-provider.js +3 -2
- package/build-module/ui/context/context-system-provider.js.map +1 -1
- package/build-module/unit-control/index.js +5 -2
- package/build-module/unit-control/index.js.map +1 -1
- package/build-module/utils/colors-values.js +1 -1
- package/build-module/utils/colors-values.js.map +1 -1
- package/build-module/utils/config-values.js +0 -2
- package/build-module/utils/config-values.js.map +1 -1
- package/build-module/utils/hooks/use-controlled-value.js.map +1 -1
- package/build-style/style-rtl.css +92 -75
- package/build-style/style.css +92 -75
- package/build-types/alignment-matrix-control/cell.d.ts +5 -0
- package/build-types/alignment-matrix-control/cell.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/icon.d.ts +6 -0
- package/build-types/alignment-matrix-control/icon.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/index.d.ts +30 -0
- package/build-types/alignment-matrix-control/index.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/stories/index.d.ts +14 -0
- package/build-types/alignment-matrix-control/stories/index.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/test/index.d.ts +2 -0
- package/build-types/alignment-matrix-control/test/index.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/types.d.ts +39 -0
- package/build-types/alignment-matrix-control/types.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/utils.d.ts +33 -0
- package/build-types/alignment-matrix-control/utils.d.ts.map +1 -0
- package/build-types/base-control/hooks.d.ts +23 -0
- package/build-types/base-control/hooks.d.ts.map +1 -0
- package/build-types/base-control/index.d.ts +17 -7
- package/build-types/base-control/index.d.ts.map +1 -1
- package/build-types/base-control/stories/index.d.ts.map +1 -1
- package/build-types/base-control/test/index.d.ts +2 -0
- package/build-types/base-control/test/index.d.ts.map +1 -0
- package/build-types/base-control/types.d.ts +8 -2
- package/build-types/base-control/types.d.ts.map +1 -1
- package/build-types/base-field/hook.d.ts +7 -31
- package/build-types/base-field/hook.d.ts.map +1 -1
- package/build-types/base-field/index.d.ts +1 -1
- package/build-types/base-field/index.d.ts.map +1 -1
- package/build-types/base-field/styles.d.ts +5 -5
- package/build-types/base-field/styles.d.ts.map +1 -1
- package/build-types/base-field/test/index.d.ts +2 -0
- package/build-types/base-field/test/index.d.ts.map +1 -0
- package/build-types/base-field/types.d.ts +29 -0
- package/build-types/base-field/types.d.ts.map +1 -0
- package/build-types/border-box-control/border-box-control/hook.d.ts +2 -2
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +2 -2
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -2
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
- package/build-types/border-control/border-control/component.d.ts.map +1 -1
- package/build-types/border-control/border-control/hook.d.ts +2 -2
- package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -2
- package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
- package/build-types/border-control/styles.d.ts.map +1 -1
- package/build-types/card/card/hook.d.ts +2 -2
- package/build-types/card/card-body/hook.d.ts +2 -2
- package/build-types/card/card-divider/hook.d.ts +2 -2
- package/build-types/card/card-footer/hook.d.ts +2 -2
- package/build-types/card/card-header/hook.d.ts +2 -2
- package/build-types/card/card-media/hook.d.ts +2 -2
- package/build-types/color-palette/index.d.ts +2 -2
- package/build-types/color-palette/index.d.ts.map +1 -1
- package/build-types/color-palette/stories/index.d.ts +6 -7
- package/build-types/color-palette/stories/index.d.ts.map +1 -1
- package/build-types/color-palette/styles.d.ts +1 -1
- package/build-types/color-palette/types.d.ts +1 -1
- package/build-types/color-palette/types.d.ts.map +1 -1
- package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +5 -5
- package/build-types/color-picker/styles.d.ts.map +1 -1
- package/build-types/custom-select-control/index.d.ts.map +1 -1
- package/build-types/dashicon/index.d.ts +6 -20
- package/build-types/dashicon/index.d.ts.map +1 -1
- package/build-types/dashicon/types.d.ts +14 -0
- package/build-types/dashicon/types.d.ts.map +1 -1
- package/build-types/date-time/date/styles.d.ts +3 -3
- package/build-types/date-time/date-time/styles.d.ts +3 -3
- package/build-types/date-time/time/styles.d.ts +8 -8
- package/build-types/elevation/hook.d.ts +2 -2
- package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
- package/build-types/flex/flex/hook.d.ts +2 -2
- package/build-types/flex/flex-block/hook.d.ts +2 -2
- package/build-types/flex/flex-item/hook.d.ts +2 -2
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -5
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
- package/build-types/grid/hook.d.ts +2 -2
- package/build-types/h-stack/component.d.ts +1 -1
- package/build-types/h-stack/hook.d.ts +2 -2
- package/build-types/heading/hook.d.ts +2 -2
- 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-base.d.ts.map +1 -1
- package/build-types/input-control/stories/index.d.ts +1 -0
- package/build-types/input-control/stories/index.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 +2 -2
- package/build-types/item-group/item-group/hook.d.ts +2 -2
- package/build-types/modal/index.d.ts.map +1 -1
- package/build-types/modal/stories/index.d.ts.map +1 -1
- package/build-types/navigator/navigator-back-button/hook.d.ts +3 -3
- package/build-types/navigator/navigator-button/hook.d.ts +3 -3
- package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
- package/build-types/number-control/index.d.ts +2 -2
- package/build-types/number-control/index.d.ts.map +1 -1
- package/build-types/number-control/stories/index.d.ts +25 -0
- package/build-types/number-control/stories/index.d.ts.map +1 -0
- package/build-types/number-control/styles/number-control-styles.d.ts +6 -6
- package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
- package/build-types/number-control/test/index.d.ts +2 -0
- package/build-types/number-control/test/index.d.ts.map +1 -0
- 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.d.ts +1 -1
- package/build-types/range-control/index.d.ts +1 -1
- package/build-types/range-control/styles/range-control-styles.d.ts +2 -2
- package/build-types/resizable-box/resize-tooltip/index.d.ts +15 -19
- package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
- package/build-types/resizable-box/resize-tooltip/label.d.ts +4 -3
- package/build-types/resizable-box/resize-tooltip/label.d.ts.map +1 -1
- package/build-types/scrollable/hook.d.ts +2 -2
- package/build-types/search-control/index.d.ts +1 -1
- package/build-types/search-control/stories/index.d.ts +2 -2
- package/build-types/snackbar/index.d.ts +19 -0
- package/build-types/snackbar/index.d.ts.map +1 -0
- package/build-types/snackbar/list.d.ts +18 -0
- package/build-types/snackbar/list.d.ts.map +1 -0
- package/build-types/snackbar/stories/index.d.ts +16 -0
- package/build-types/snackbar/stories/index.d.ts.map +1 -0
- package/build-types/snackbar/stories/list.d.ts +12 -0
- package/build-types/snackbar/stories/list.d.ts.map +1 -0
- package/build-types/snackbar/types.d.ts +111 -0
- package/build-types/snackbar/types.d.ts.map +1 -0
- package/build-types/spacer/hook.d.ts +2 -2
- package/build-types/spinner/index.d.ts +1 -1
- package/build-types/surface/hook.d.ts +2 -2
- package/build-types/tab-panel/index.d.ts +1 -1
- package/build-types/tab-panel/index.d.ts.map +1 -1
- package/build-types/tab-panel/types.d.ts +19 -1
- package/build-types/tab-panel/types.d.ts.map +1 -1
- package/build-types/text/hook.d.ts +2 -2
- package/build-types/text-control/index.d.ts +2 -2
- package/build-types/text-control/stories/index.d.ts.map +1 -1
- package/build-types/text-control/types.d.ts +1 -5
- package/build-types/text-control/types.d.ts.map +1 -1
- package/build-types/theme/color-algorithms.d.ts +20 -0
- package/build-types/theme/color-algorithms.d.ts.map +1 -0
- package/build-types/theme/index.d.ts +1 -1
- package/build-types/theme/index.d.ts.map +1 -1
- package/build-types/theme/stories/index.d.ts +4 -0
- package/build-types/theme/stories/index.d.ts.map +1 -1
- package/build-types/theme/styles.d.ts +3 -2
- package/build-types/theme/styles.d.ts.map +1 -1
- package/build-types/theme/test/color-algorithms.d.ts +2 -0
- package/build-types/theme/test/color-algorithms.d.ts.map +1 -0
- package/build-types/theme/types.d.ts +41 -3
- package/build-types/theme/types.d.ts.map +1 -1
- package/build-types/toggle-control/index.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -2
- package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -2
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
- package/build-types/tools-panel/tools-panel-header/hook.d.ts +2 -2
- package/build-types/tools-panel/tools-panel-item/hook.d.ts +2 -2
- package/build-types/truncate/hook.d.ts +2 -2
- package/build-types/ui/context/context-system-provider.d.ts.map +1 -1
- package/build-types/ui/control-group/hook.d.ts +2 -2
- package/build-types/ui/control-label/hook.d.ts +2 -2
- package/build-types/ui/form-group/form-group.d.ts +2 -2
- package/build-types/ui/form-group/use-form-group.d.ts +5 -5
- package/build-types/unit-control/index.d.ts +2 -1
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -2
- package/build-types/unit-control/types.d.ts +4 -0
- package/build-types/unit-control/types.d.ts.map +1 -1
- package/build-types/utils/config-values.d.ts +0 -2
- package/build-types/utils/hooks/use-controlled-value.d.ts +2 -1
- package/build-types/utils/hooks/use-controlled-value.d.ts.map +1 -1
- package/build-types/v-stack/component.d.ts +2 -2
- package/build-types/v-stack/hook.d.ts +2 -2
- package/build-types/v-stack/stories/index.d.ts +2 -2
- package/package.json +21 -20
- package/src/alignment-matrix-control/README.md +7 -7
- package/src/alignment-matrix-control/{cell.js → cell.tsx} +7 -1
- package/src/alignment-matrix-control/{icon.js → icon.tsx} +6 -3
- package/src/alignment-matrix-control/{index.js → index.tsx} +31 -4
- package/src/alignment-matrix-control/stories/{index.js → index.tsx} +17 -9
- package/src/alignment-matrix-control/styles/{alignment-matrix-control-icon-styles.js → alignment-matrix-control-icon-styles.ts} +11 -3
- package/src/alignment-matrix-control/styles/{alignment-matrix-control-styles.js → alignment-matrix-control-styles.ts} +13 -3
- package/src/alignment-matrix-control/test/{index.js → index.tsx} +5 -5
- package/src/alignment-matrix-control/types.ts +54 -0
- package/src/alignment-matrix-control/{utils.js → utils.tsx} +24 -14
- package/src/angle-picker-control/styles/angle-picker-control-styles.js +4 -0
- package/src/autocomplete/index.js +43 -12
- package/src/base-control/README.md +21 -12
- package/src/base-control/hooks.ts +45 -0
- package/src/base-control/index.tsx +18 -7
- package/src/base-control/stories/index.tsx +8 -10
- package/src/base-control/test/index.tsx +52 -0
- package/src/base-control/types.ts +8 -2
- package/src/base-field/README.md +21 -22
- package/src/base-field/{hook.js → hook.ts} +5 -15
- package/src/base-field/{index.js → index.ts} +0 -0
- package/src/base-field/{styles.js → styles.ts} +2 -2
- package/src/base-field/test/__snapshots__/{index.js.snap → index.tsx.snap} +4 -4
- package/src/base-field/test/{index.js → index.tsx} +10 -5
- package/src/base-field/types.ts +29 -0
- package/src/border-box-control/border-box-control/README.md +1 -0
- package/src/border-box-control/test/index.js +3 -1
- package/src/border-control/border-control/component.tsx +1 -0
- package/src/border-control/styles.ts +1 -10
- package/src/box-control/linked-button.js +8 -11
- package/src/box-control/test/index.js +206 -135
- package/src/button/stories/index.js +30 -0
- package/src/button/style.scss +17 -14
- package/src/button/test/index.js +32 -15
- package/src/card/test/index.tsx +32 -20
- package/src/circular-option-picker/style.scss +1 -0
- package/src/color-palette/index.tsx +4 -6
- package/src/color-palette/stories/index.tsx +1 -5
- package/src/color-palette/test/__snapshots__/index.tsx.snap +4 -4
- package/src/color-palette/test/index.tsx +84 -36
- package/src/color-palette/types.ts +1 -1
- package/src/color-picker/README.md +1 -0
- package/src/color-picker/input-with-slider.tsx +1 -0
- package/src/color-picker/styles.ts +0 -4
- package/src/confirm-dialog/README.md +3 -2
- package/src/custom-select-control/README.md +14 -0
- package/src/custom-select-control/index.js +14 -2
- package/src/dashicon/{index.js → index.tsx} +10 -4
- package/src/dashicon/types.ts +17 -0
- package/src/date-time/date-time/index.tsx +2 -2
- package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -8
- package/src/disabled/test/index.tsx +21 -11
- package/src/dropdown/test/index.js +39 -49
- package/src/dropdown-menu/test/index.js +18 -12
- package/src/duotone-picker/duotone-picker.js +2 -2
- package/src/focal-point-picker/test/media.js +26 -21
- package/src/form-token-field/style.scss +1 -1
- package/src/gradient-picker/index.js +5 -8
- package/src/grid/test/grid.tsx +31 -31
- package/src/higher-order/navigate-regions/style.scss +2 -22
- package/src/higher-order/with-fallback-styles/index.js +4 -2
- package/src/higher-order/with-filters/test/index.js +94 -101
- package/src/higher-order/with-focus-return/test/index.js +1 -4
- package/src/index.js +2 -2
- package/src/input-control/index.tsx +42 -28
- package/src/input-control/input-base.tsx +8 -1
- package/src/input-control/stories/index.tsx +6 -0
- package/src/input-control/test/index.js +18 -0
- package/src/input-control/types.ts +2 -0
- package/src/mobile/bottom-sheet/cell.native.js +1 -1
- package/src/mobile/bottom-sheet/switch-cell.native.js +2 -2
- package/src/mobile/global-styles-context/index.native.js +9 -11
- package/src/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
- package/src/mobile/link-settings/test/edit.native.js +68 -124
- package/src/modal/index.tsx +11 -0
- package/src/modal/stories/index.tsx +3 -0
- package/src/modal/test/index.tsx +15 -0
- package/src/navigation/stories/index.js +6 -6
- package/src/navigation/stories/{controlled-state.js → utils/controlled-state.js} +3 -3
- package/src/navigation/stories/{default.js → utils/default.js} +3 -3
- package/src/navigation/stories/{group.js → utils/group.js} +4 -4
- package/src/navigation/stories/{hide-if-empty.js → utils/hide-if-empty.js} +3 -3
- package/src/navigation/stories/{more-examples.js → utils/more-examples.js} +4 -4
- package/src/navigation/stories/{search.js → utils/search.js} +5 -5
- package/src/navigator/navigator-provider/component.tsx +13 -10
- package/src/notice/test/list.js +8 -5
- package/src/number-control/stories/{index.js → index.tsx} +24 -7
- package/src/number-control/styles/{number-control-styles.js → number-control-styles.ts} +5 -3
- package/src/number-control/test/index.tsx +600 -0
- package/src/palette-edit/index.js +88 -39
- package/src/palette-edit/test/index.js +25 -1
- package/src/popover/index.tsx +10 -2
- package/src/popover/style.scss +12 -11
- package/src/popover/test/index.tsx +25 -15
- package/src/query-controls/index.js +1 -0
- package/src/range-control/test/index.tsx +57 -60
- package/src/resizable-box/style.scss +1 -0
- package/src/sandbox/test/index.js +13 -11
- package/src/search-control/style.scss +4 -0
- package/src/snackbar/README.md +63 -8
- package/src/snackbar/{index.js → index.tsx} +46 -28
- package/src/snackbar/{list.js → list.tsx} +20 -21
- package/src/snackbar/stories/index.tsx +96 -0
- package/src/snackbar/stories/list.tsx +98 -0
- package/src/snackbar/types.ts +116 -0
- package/src/tab-panel/README.md +9 -0
- package/src/tab-panel/index.tsx +14 -3
- package/src/tab-panel/style.scss +46 -34
- package/src/tab-panel/test/index.tsx +111 -0
- package/src/tab-panel/types.ts +20 -1
- package/src/text/test/__snapshots__/index.tsx.snap +1 -0
- package/src/text/test/index.tsx +98 -46
- package/src/text-control/stories/index.tsx +0 -1
- package/src/text-control/types.ts +1 -6
- package/src/theme/README.md +32 -2
- package/src/theme/color-algorithms.ts +138 -0
- package/src/theme/index.tsx +23 -16
- package/src/theme/stories/index.tsx +67 -0
- package/src/theme/styles.ts +22 -17
- package/src/theme/test/color-algorithms.ts +100 -0
- package/src/theme/test/index.tsx +68 -35
- package/src/theme/types.ts +43 -3
- package/src/toggle-control/index.tsx +4 -2
- package/src/toggle-group-control/test/index.tsx +13 -2
- package/src/toolbar-group/test/index.js +8 -6
- package/src/tools-panel/stories/index.js +1 -1
- package/src/tools-panel/stories/{tools-panel-with-item-group-slot.js → utils/tools-panel-with-item-group-slot.js} +14 -11
- package/src/tools-panel/test/index.js +20 -14
- package/src/tooltip/README.md +7 -0
- package/src/tooltip/style.scss +2 -2
- package/src/tooltip/test/index.js +109 -18
- package/src/ui/context/context-system-provider.js +3 -2
- package/src/ui/context/test/context-system-provider.js +5 -4
- package/src/ui/control-label/test/index.js +3 -5
- package/src/unit-control/README.md +9 -1
- package/src/unit-control/index.tsx +3 -0
- package/src/unit-control/test/index.tsx +1 -0
- package/src/unit-control/types.ts +4 -0
- package/src/utils/colors-values.js +1 -1
- package/src/utils/config-values.js +0 -2
- package/src/utils/hooks/use-controlled-value.ts +2 -2
- package/src/utils/theme-variables.scss +20 -0
- package/tsconfig.json +2 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/src/number-control/test/index.js +0 -478
- package/src/snackbar/stories/index.js +0 -89
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { MutableRefObject, ReactNode, SyntheticEvent } from 'react';
|
|
5
|
+
|
|
6
|
+
export type NoticeActionWithURL = {
|
|
7
|
+
label: string;
|
|
8
|
+
url: string;
|
|
9
|
+
onClick?: ( event: SyntheticEvent ) => void;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
type NoticeActionWithOnClick = {
|
|
13
|
+
label: string;
|
|
14
|
+
url?: string;
|
|
15
|
+
onClick: ( event: SyntheticEvent ) => void;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// TODO: move this type to the Notice component once it gets typed.
|
|
19
|
+
export type NoticeAction = NoticeActionWithURL | NoticeActionWithOnClick;
|
|
20
|
+
|
|
21
|
+
export type Notice = {
|
|
22
|
+
id: string;
|
|
23
|
+
spokenMessage: string;
|
|
24
|
+
actions: NoticeAction[];
|
|
25
|
+
icon?: ReactNode;
|
|
26
|
+
onDismiss?: () => void;
|
|
27
|
+
content: string;
|
|
28
|
+
isDismissible: boolean;
|
|
29
|
+
explicitDismiss: boolean;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type SnackbarProps = {
|
|
33
|
+
/**
|
|
34
|
+
* The displayed message of a notice.
|
|
35
|
+
*
|
|
36
|
+
* Also used as the spoken message for assistive technology,
|
|
37
|
+
* unless `spokenMessage` is provided as an alternative message.
|
|
38
|
+
*/
|
|
39
|
+
children: string;
|
|
40
|
+
/**
|
|
41
|
+
* Used to provide a custom spoken message.
|
|
42
|
+
*
|
|
43
|
+
* @default children
|
|
44
|
+
*/
|
|
45
|
+
spokenMessage?: Notice[ 'spokenMessage' ];
|
|
46
|
+
/**
|
|
47
|
+
* A politeness level for the notice's spoken message. Should be provided as
|
|
48
|
+
* one of the valid options for an `aria-live` attribute value. Note that this
|
|
49
|
+
* value should be considered a suggestion; assistive technologies may
|
|
50
|
+
* override it based on internal heuristics.
|
|
51
|
+
*
|
|
52
|
+
* A value of `'assertive'` is to be used for important, and usually
|
|
53
|
+
* time-sensitive, information. It will interrupt anything else the screen
|
|
54
|
+
* reader is announcing in that moment.
|
|
55
|
+
* A value of `'polite'` is to be used for advisory information. It should
|
|
56
|
+
* not interrupt what the screen reader is announcing in that moment
|
|
57
|
+
* (the "speech queue") or interrupt the current task.
|
|
58
|
+
*
|
|
59
|
+
* @see https://www.w3.org/TR/wai-aria-1.1/#aria-live
|
|
60
|
+
*
|
|
61
|
+
* @default 'polite'
|
|
62
|
+
*/
|
|
63
|
+
politeness?: 'polite' | 'assertive';
|
|
64
|
+
/**
|
|
65
|
+
* An array of action objects.
|
|
66
|
+
*
|
|
67
|
+
* Each member object should contain
|
|
68
|
+
* a `label` and either a `url` link string or `onClick` callback function.
|
|
69
|
+
*
|
|
70
|
+
* @default []
|
|
71
|
+
*/
|
|
72
|
+
actions?: Notice[ 'actions' ];
|
|
73
|
+
/**
|
|
74
|
+
* Called to remove the snackbar from the UI.
|
|
75
|
+
*/
|
|
76
|
+
onRemove?: () => void;
|
|
77
|
+
/**
|
|
78
|
+
* The icon to render in the snackbar.
|
|
79
|
+
*
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
82
|
+
icon?: Notice[ 'icon' ];
|
|
83
|
+
/**
|
|
84
|
+
* Whether to require user action to dismiss the snackbar.
|
|
85
|
+
* By default, this is dismissed on a timeout, without user interaction.
|
|
86
|
+
*
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
explicitDismiss?: Notice[ 'explicitDismiss' ];
|
|
90
|
+
/**
|
|
91
|
+
* A callback executed when the snackbar is dismissed.
|
|
92
|
+
*
|
|
93
|
+
* It is distinct from onRemove, which _looks_ like a callback but is
|
|
94
|
+
* actually the function to call to remove the snackbar from the UI.
|
|
95
|
+
*/
|
|
96
|
+
onDismiss?: Notice[ 'onDismiss' ];
|
|
97
|
+
/**
|
|
98
|
+
* A ref to the list that contains the snackbar.
|
|
99
|
+
*/
|
|
100
|
+
listRef?: MutableRefObject< HTMLDivElement | null >;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export type SnackbarListProps = {
|
|
104
|
+
/**
|
|
105
|
+
* Array of notices to render.
|
|
106
|
+
*/
|
|
107
|
+
notices: Notice[];
|
|
108
|
+
/**
|
|
109
|
+
* Children to be rendered inside the notice list.
|
|
110
|
+
*/
|
|
111
|
+
children?: ReactNode;
|
|
112
|
+
/**
|
|
113
|
+
* Function called when a notice should be removed / dismissed.
|
|
114
|
+
*/
|
|
115
|
+
onRemove?: ( id: Notice[ 'id' ] ) => void;
|
|
116
|
+
};
|
package/src/tab-panel/README.md
CHANGED
|
@@ -120,6 +120,7 @@ An array of objects containing the following properties:
|
|
|
120
120
|
- `name`: `(string)` Defines the key for the tab.
|
|
121
121
|
- `title`:`(string)` Defines the translated text for the tab.
|
|
122
122
|
- `className`:`(string)` Optional. Defines the class to put on the tab.
|
|
123
|
+
- `icon`:`(ReactNode)` Optional. When set, displays the icon in place of the tab title. The title is then rendered as an aria-label and tooltip.
|
|
123
124
|
|
|
124
125
|
> > **Note:** Other fields may be added to the object and accessed from the child function if desired.
|
|
125
126
|
|
|
@@ -142,6 +143,14 @@ The name of the tab to be selected upon mounting of component. If this prop is n
|
|
|
142
143
|
- Required: No
|
|
143
144
|
- Default: none
|
|
144
145
|
|
|
146
|
+
#### selectOnMove
|
|
147
|
+
|
|
148
|
+
When `true`, the tab will be selected when receiving focus (automatic tab activation). When `false`, the tab will be selected only when clicked (manual tab activation). See the [official W3C docs](https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/) for more info.
|
|
149
|
+
|
|
150
|
+
- Type: `boolean`
|
|
151
|
+
- Required: No
|
|
152
|
+
- Default: `true`
|
|
153
|
+
|
|
145
154
|
#### children
|
|
146
155
|
|
|
147
156
|
A function which renders the tabviews given the selected tab. The function is passed the active tab object as an argument as defined the tabs prop.
|
package/src/tab-panel/index.tsx
CHANGED
|
@@ -77,6 +77,7 @@ export function TabPanel( {
|
|
|
77
77
|
className,
|
|
78
78
|
children,
|
|
79
79
|
tabs,
|
|
80
|
+
selectOnMove = true,
|
|
80
81
|
initialTabName,
|
|
81
82
|
orientation = 'horizontal',
|
|
82
83
|
activeClass = 'is-active',
|
|
@@ -93,7 +94,12 @@ export function TabPanel( {
|
|
|
93
94
|
[ onSelect ]
|
|
94
95
|
);
|
|
95
96
|
|
|
96
|
-
|
|
97
|
+
// Simulate a click on the newly focused tab, which causes the component
|
|
98
|
+
// to show the `tab-panel` associated with the clicked tab.
|
|
99
|
+
const activateTabAutomatically = (
|
|
100
|
+
_childIndex: number,
|
|
101
|
+
child: HTMLButtonElement
|
|
102
|
+
) => {
|
|
97
103
|
child.click();
|
|
98
104
|
};
|
|
99
105
|
const selectedTab = find( tabs, { name: selected } );
|
|
@@ -110,7 +116,9 @@ export function TabPanel( {
|
|
|
110
116
|
<NavigableMenu
|
|
111
117
|
role="tablist"
|
|
112
118
|
orientation={ orientation }
|
|
113
|
-
onNavigate={
|
|
119
|
+
onNavigate={
|
|
120
|
+
selectOnMove ? activateTabAutomatically : undefined
|
|
121
|
+
}
|
|
114
122
|
className="components-tab-panel__tabs"
|
|
115
123
|
>
|
|
116
124
|
{ tabs.map( ( tab ) => (
|
|
@@ -127,8 +135,11 @@ export function TabPanel( {
|
|
|
127
135
|
selected={ tab.name === selected }
|
|
128
136
|
key={ tab.name }
|
|
129
137
|
onClick={ () => handleTabSelection( tab.name ) }
|
|
138
|
+
label={ tab.icon && tab.title }
|
|
139
|
+
icon={ tab.icon }
|
|
140
|
+
showTooltip={ !! tab.icon }
|
|
130
141
|
>
|
|
131
|
-
{ tab.title }
|
|
142
|
+
{ ! tab.icon && tab.title }
|
|
132
143
|
</TabButton>
|
|
133
144
|
) ) }
|
|
134
145
|
</NavigableMenu>
|
package/src/tab-panel/style.scss
CHANGED
|
@@ -7,57 +7,69 @@
|
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
// This tab style CSS is duplicated verbatim in
|
|
11
|
+
// /packages/edit-post/src/components/sidebar/settings-header/style.scss
|
|
10
12
|
.components-tab-panel__tabs-item {
|
|
13
|
+
position: relative;
|
|
14
|
+
border-radius: 0;
|
|
15
|
+
height: $grid-unit-60;
|
|
11
16
|
background: transparent;
|
|
12
17
|
border: none;
|
|
13
18
|
box-shadow: none;
|
|
14
|
-
border-radius: 0;
|
|
15
19
|
cursor: pointer;
|
|
16
|
-
height: $grid-unit-60;
|
|
17
20
|
padding: 3px $grid-unit-20; // Use padding to offset the is-active border, this benefits Windows High Contrast mode
|
|
18
21
|
margin-left: 0;
|
|
19
22
|
font-weight: 500;
|
|
20
|
-
transition: box-shadow 0.1s linear;
|
|
21
|
-
box-sizing: border-box;
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
&:focus:not(:disabled) {
|
|
25
|
+
position: relative;
|
|
26
|
+
box-shadow: none;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Tab indicator
|
|
26
30
|
&::after {
|
|
27
|
-
content:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
content: "";
|
|
32
|
+
position: absolute;
|
|
33
|
+
right: 0;
|
|
34
|
+
bottom: 0;
|
|
35
|
+
left: 0;
|
|
36
|
+
pointer-events: none;
|
|
37
|
+
|
|
38
|
+
// Draw the indicator.
|
|
39
|
+
background: $components-color-accent;
|
|
40
|
+
height: calc(0 * var(--wp-admin-border-width-focus));
|
|
41
|
+
border-radius: 0;
|
|
42
|
+
|
|
43
|
+
// Animation
|
|
44
|
+
transition: all 0.1s linear;
|
|
45
|
+
@include reduce-motion("transition");
|
|
33
46
|
}
|
|
34
47
|
|
|
35
|
-
|
|
36
|
-
|
|
48
|
+
// Active.
|
|
49
|
+
&.is-active::after {
|
|
50
|
+
height: calc(1 * var(--wp-admin-border-width-focus));
|
|
37
51
|
}
|
|
38
52
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
position:
|
|
53
|
+
// Focus.
|
|
54
|
+
&::before {
|
|
55
|
+
content: "";
|
|
56
|
+
position: absolute;
|
|
57
|
+
top: $grid-unit-15;
|
|
58
|
+
right: $grid-unit-15;
|
|
59
|
+
bottom: $grid-unit-15;
|
|
60
|
+
left: $grid-unit-15;
|
|
61
|
+
pointer-events: none;
|
|
43
62
|
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
position: absolute;
|
|
48
|
-
top: 0;
|
|
49
|
-
bottom: 1px;
|
|
50
|
-
right: 0;
|
|
51
|
-
left: 0;
|
|
52
|
-
border-bottom: $border-width-tab solid transparent;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
63
|
+
// Draw the indicator.
|
|
64
|
+
box-shadow: 0 0 0 0 transparent;
|
|
65
|
+
border-radius: $radius-block-ui;
|
|
55
66
|
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
// Animation
|
|
68
|
+
transition: all 0.1s linear;
|
|
69
|
+
@include reduce-motion("transition");
|
|
58
70
|
}
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
box-shadow:
|
|
72
|
+
&:focus-visible::before {
|
|
73
|
+
box-shadow: 0 0 0 var(--wp-admin-border-width-focus) $components-color-accent;
|
|
62
74
|
}
|
|
63
75
|
}
|
|
@@ -34,7 +34,24 @@ const TABS = [
|
|
|
34
34
|
|
|
35
35
|
const getSelectedTab = () => screen.getByRole( 'tab', { selected: true } );
|
|
36
36
|
|
|
37
|
+
let originalGetClientRects: () => DOMRectList;
|
|
38
|
+
|
|
37
39
|
describe( 'TabPanel', () => {
|
|
40
|
+
beforeAll( () => {
|
|
41
|
+
originalGetClientRects = window.HTMLElement.prototype.getClientRects;
|
|
42
|
+
// Mocking `getClientRects()` is necessary to pass a check performed by
|
|
43
|
+
// the `focus.tabbable.find()` and by the `focus.focusable.find()` functions
|
|
44
|
+
// from the `@wordpress/dom` package.
|
|
45
|
+
// @ts-expect-error We're not trying to comply to the DOM spec, only mocking
|
|
46
|
+
window.HTMLElement.prototype.getClientRects = function () {
|
|
47
|
+
return [ 'trick-jsdom-into-having-size-for-element-rect' ];
|
|
48
|
+
};
|
|
49
|
+
} );
|
|
50
|
+
|
|
51
|
+
afterAll( () => {
|
|
52
|
+
window.HTMLElement.prototype.getClientRects = originalGetClientRects;
|
|
53
|
+
} );
|
|
54
|
+
|
|
38
55
|
it( 'should render a tabpanel, and clicking should change tabs', async () => {
|
|
39
56
|
const user = setupUser();
|
|
40
57
|
const panelRenderFunction = jest.fn();
|
|
@@ -194,4 +211,98 @@ describe( 'TabPanel', () => {
|
|
|
194
211
|
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'beta' );
|
|
195
212
|
} );
|
|
196
213
|
} );
|
|
214
|
+
|
|
215
|
+
describe( 'tab activation', () => {
|
|
216
|
+
it( 'defaults to automatic tab activation', async () => {
|
|
217
|
+
const user = setupUser();
|
|
218
|
+
const mockOnSelect = jest.fn();
|
|
219
|
+
|
|
220
|
+
render(
|
|
221
|
+
<TabPanel
|
|
222
|
+
tabs={ TABS }
|
|
223
|
+
children={ () => undefined }
|
|
224
|
+
onSelect={ mockOnSelect }
|
|
225
|
+
/>
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
// onSelect gets called on the initial render.
|
|
229
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
|
|
230
|
+
|
|
231
|
+
// Click on Alpha, make sure Alpha is selected
|
|
232
|
+
await user.click( screen.getByRole( 'tab', { name: 'Alpha' } ) );
|
|
233
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
|
|
234
|
+
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'alpha' );
|
|
235
|
+
|
|
236
|
+
// Navigate forward with arrow keys,
|
|
237
|
+
// make sure Beta is selected automatically.
|
|
238
|
+
await user.keyboard( '[ArrowRight]' );
|
|
239
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
|
|
240
|
+
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'beta' );
|
|
241
|
+
|
|
242
|
+
// Navigate forward with arrow keys,
|
|
243
|
+
// make sure Gamma (last tab) is selected automatically.
|
|
244
|
+
await user.keyboard( '[ArrowRight]' );
|
|
245
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 4 );
|
|
246
|
+
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'gamma' );
|
|
247
|
+
|
|
248
|
+
// Navigate forward with arrow keys,
|
|
249
|
+
// make sure Alpha (first tab) is selected automatically.
|
|
250
|
+
await user.keyboard( '[ArrowRight]' );
|
|
251
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 5 );
|
|
252
|
+
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'alpha' );
|
|
253
|
+
|
|
254
|
+
// Navigate backwards with arrow keys,
|
|
255
|
+
// make sure Gamma (last tab) is selected automatically
|
|
256
|
+
await user.keyboard( '[ArrowLeft]' );
|
|
257
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 6 );
|
|
258
|
+
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'gamma' );
|
|
259
|
+
} );
|
|
260
|
+
|
|
261
|
+
it( 'switches to manual tab activation when the `selectOnMove` prop is set to `false`', async () => {
|
|
262
|
+
const user = setupUser();
|
|
263
|
+
const mockOnSelect = jest.fn();
|
|
264
|
+
|
|
265
|
+
render(
|
|
266
|
+
<TabPanel
|
|
267
|
+
tabs={ TABS }
|
|
268
|
+
children={ () => undefined }
|
|
269
|
+
onSelect={ mockOnSelect }
|
|
270
|
+
selectOnMove={ false }
|
|
271
|
+
/>
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
// onSelect gets called on the initial render.
|
|
275
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
|
|
276
|
+
|
|
277
|
+
// Click on Alpha, make sure Alpha is selected
|
|
278
|
+
await user.click( screen.getByRole( 'tab', { name: 'Alpha' } ) );
|
|
279
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
|
|
280
|
+
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'alpha' );
|
|
281
|
+
|
|
282
|
+
// Navigate forward with arrow keys.
|
|
283
|
+
// Make sure Beta is focused, but that the tab selection happens only when
|
|
284
|
+
// pressing the spacebar or the enter key.
|
|
285
|
+
await user.keyboard( '[ArrowRight]' );
|
|
286
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
|
|
287
|
+
expect( screen.getByRole( 'tab', { name: 'Beta' } ) ).toHaveFocus();
|
|
288
|
+
await user.keyboard( '[Enter]' );
|
|
289
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
|
|
290
|
+
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'beta' );
|
|
291
|
+
|
|
292
|
+
// Navigate forward with arrow keys.
|
|
293
|
+
// Make sure Gamma (last tab) is focused, but that the tab selection
|
|
294
|
+
// happens only when pressing the spacebar or the enter key.
|
|
295
|
+
await user.keyboard( '[ArrowRight]' );
|
|
296
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
|
|
297
|
+
expect(
|
|
298
|
+
screen.getByRole( 'tab', { name: 'Gamma' } )
|
|
299
|
+
).toHaveFocus();
|
|
300
|
+
await user.keyboard( '[Space]' );
|
|
301
|
+
expect( mockOnSelect ).toHaveBeenCalledTimes( 4 );
|
|
302
|
+
expect( mockOnSelect ).toHaveBeenLastCalledWith( 'gamma' );
|
|
303
|
+
|
|
304
|
+
// No need to test the "wrap-around" behavior, as it's being tested in the
|
|
305
|
+
// "automatic tab activation" test above.
|
|
306
|
+
} );
|
|
307
|
+
} );
|
|
197
308
|
} );
|
package/src/tab-panel/types.ts
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { ReactNode } from 'react';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import type { IconType } from '../icon';
|
|
10
|
+
|
|
6
11
|
type Tab = {
|
|
7
12
|
/**
|
|
8
13
|
* The key of the tab.
|
|
@@ -18,11 +23,14 @@ type Tab = {
|
|
|
18
23
|
className?: string;
|
|
19
24
|
} & Record< any, any >;
|
|
20
25
|
|
|
21
|
-
export type TabButtonProps = {
|
|
26
|
+
export type TabButtonProps< IconProps = unknown > = {
|
|
22
27
|
children: ReactNode;
|
|
23
28
|
className?: string;
|
|
29
|
+
icon?: IconType< IconProps >;
|
|
30
|
+
label?: string;
|
|
24
31
|
onClick: ( event: MouseEvent ) => void;
|
|
25
32
|
selected: boolean;
|
|
33
|
+
showTooltip?: boolean;
|
|
26
34
|
tabId: string;
|
|
27
35
|
};
|
|
28
36
|
|
|
@@ -62,4 +70,15 @@ export type TabPanelProps = {
|
|
|
62
70
|
* Array of tab objects. Each tab object should contain at least a `name` and a `title`.
|
|
63
71
|
*/
|
|
64
72
|
tabs: Tab[];
|
|
73
|
+
/**
|
|
74
|
+
* When `true`, the tab will be selected when receiving focus (automatic tab
|
|
75
|
+
* activation). When `false`, the tab will be selected only when clicked
|
|
76
|
+
* (manual tab activation). See the official W3C docs for more info.
|
|
77
|
+
* .
|
|
78
|
+
*
|
|
79
|
+
* @default true
|
|
80
|
+
*
|
|
81
|
+
* @see https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/
|
|
82
|
+
*/
|
|
83
|
+
selectOnMove?: boolean;
|
|
65
84
|
};
|