@wordpress/components 22.1.0 → 23.1.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 +67 -0
- package/CONTRIBUTING.md +0 -21
- 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 +39 -12
- 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-box-control/border-box-control/component.js +0 -3
- package/build/border-box-control/border-box-control/component.js.map +1 -1
- package/build/border-box-control/border-box-control/hook.js +0 -2
- package/build/border-box-control/border-box-control/hook.js.map +1 -1
- package/build/border-box-control/border-box-control-split-controls/component.js +0 -2
- package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
- package/build/border-box-control/border-box-control-split-controls/hook.js +0 -2
- package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
- package/build/border-control/border-control/component.js +1 -2
- package/build/border-control/border-control/component.js.map +1 -1
- package/build/border-control/border-control/hook.js +0 -2
- package/build/border-control/border-control/hook.js.map +1 -1
- package/build/border-control/border-control-dropdown/component.js +6 -11
- package/build/border-control/border-control-dropdown/component.js.map +1 -1
- package/build/border-control/border-control-dropdown/hook.js +0 -2
- package/build/border-control/border-control-dropdown/hook.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 +7 -15
- 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/dimension-control/index.js.map +1 -1
- package/build/dropdown/index.js +45 -10
- package/build/dropdown/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 +4 -11
- package/build/gradient-picker/index.js.map +1 -1
- package/build/higher-order/navigate-regions/index.js +4 -3
- package/build/higher-order/navigate-regions/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 -9
- 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/picker-cell.native.js +1 -9
- package/build/mobile/bottom-sheet/picker-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/global-styles-context/utils.native.js +30 -12
- package/build/mobile/global-styles-context/utils.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 +15 -9
- 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 +39 -11
- 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-box-control/border-box-control/component.js +0 -3
- package/build-module/border-box-control/border-box-control/component.js.map +1 -1
- package/build-module/border-box-control/border-box-control/hook.js +0 -2
- package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
- package/build-module/border-box-control/border-box-control-split-controls/component.js +0 -2
- package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
- package/build-module/border-box-control/border-box-control-split-controls/hook.js +0 -2
- package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
- package/build-module/border-control/border-control/component.js +1 -2
- package/build-module/border-control/border-control/component.js.map +1 -1
- package/build-module/border-control/border-control/hook.js +0 -2
- package/build-module/border-control/border-control/hook.js.map +1 -1
- package/build-module/border-control/border-control-dropdown/component.js +6 -11
- package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
- package/build-module/border-control/border-control-dropdown/hook.js +0 -2
- package/build-module/border-control/border-control-dropdown/hook.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 +7 -15
- 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/dimension-control/index.js +1 -2
- package/build-module/dimension-control/index.js.map +1 -1
- package/build-module/dropdown/index.js +44 -10
- package/build-module/dropdown/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 +4 -10
- package/build-module/gradient-picker/index.js.map +1 -1
- package/build-module/higher-order/navigate-regions/index.js +4 -3
- package/build-module/higher-order/navigate-regions/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 -3
- 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/picker-cell.native.js +1 -8
- package/build-module/mobile/bottom-sheet/picker-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/global-styles-context/utils.native.js +31 -13
- package/build-module/mobile/global-styles-context/utils.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 +15 -8
- 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 +108 -104
- package/build-style/style.css +108 -104
- 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/component.d.ts +1 -1
- package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control/hook.d.ts +2 -3
- package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
- 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/component.d.ts +1 -1
- package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -3
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
- package/build-types/border-box-control/stories/index.d.ts +1 -1
- package/build-types/border-control/border-control/component.d.ts +1 -1
- package/build-types/border-control/border-control/component.d.ts.map +1 -1
- package/build-types/border-control/border-control/hook.d.ts +2 -3
- package/build-types/border-control/border-control/hook.d.ts.map +1 -1
- package/build-types/border-control/border-control-dropdown/component.d.ts +1 -1
- package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -3
- package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
- package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
- package/build-types/border-control/stories/index.d.ts +6 -6
- package/build-types/border-control/stories/index.d.ts.map +1 -1
- package/build-types/border-control/styles.d.ts.map +1 -1
- package/build-types/border-control/types.d.ts +1 -1
- package/build-types/border-control/types.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 +3 -4
- package/build-types/color-palette/index.d.ts.map +1 -1
- package/build-types/color-palette/stories/index.d.ts +6 -14
- 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 +4 -17
- 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/disabled/stories/index.d.ts.map +1 -1
- package/build-types/dropdown/index.d.ts +29 -1
- package/build-types/dropdown/index.d.ts.map +1 -1
- package/build-types/dropdown/stories/index.d.ts +23 -0
- package/build-types/dropdown/stories/index.d.ts.map +1 -0
- package/build-types/dropdown/test/index.d.ts +2 -0
- package/build-types/dropdown/test/index.d.ts.map +1 -0
- package/build-types/dropdown/types.d.ts +101 -0
- package/build-types/dropdown/types.d.ts.map +1 -1
- 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/icon/stories/index.d.ts +22 -0
- package/build-types/icon/stories/index.d.ts.map +1 -0
- 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 +44 -15
- package/src/autocomplete/test/index.js +2 -0
- 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 +53 -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/border-box-control/component.tsx +0 -7
- package/src/border-box-control/border-box-control/hook.ts +0 -2
- package/src/border-box-control/border-box-control-split-controls/component.tsx +0 -2
- package/src/border-box-control/border-box-control-split-controls/hook.ts +0 -2
- package/src/border-box-control/test/index.js +5 -1
- package/src/border-control/border-control/component.tsx +1 -4
- package/src/border-control/border-control/hook.ts +0 -2
- package/src/border-control/border-control-dropdown/component.tsx +11 -17
- package/src/border-control/border-control-dropdown/hook.ts +0 -2
- package/src/border-control/stories/index.tsx +0 -1
- package/src/border-control/styles.ts +1 -10
- package/src/border-control/test/index.js +70 -67
- package/src/border-control/types.ts +1 -4
- package/src/box-control/linked-button.js +8 -11
- package/src/box-control/test/index.js +207 -134
- 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/checkbox-control/test/index.tsx +2 -0
- package/src/circular-option-picker/style.scss +1 -0
- package/src/color-palette/index.tsx +16 -18
- package/src/color-palette/stories/index.tsx +1 -18
- package/src/color-palette/test/__snapshots__/index.tsx.snap +4 -4
- package/src/color-palette/test/index.tsx +86 -36
- package/src/color-palette/types.ts +4 -18
- 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/color-picker/test/index.js +2 -0
- package/src/combobox-control/test/index.js +2 -0
- package/src/confirm-dialog/README.md +3 -2
- package/src/confirm-dialog/test/index.js +2 -0
- 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/test/index.tsx +2 -0
- package/src/date-time/date-time/index.tsx +2 -2
- package/src/date-time/time/test/index.tsx +2 -0
- package/src/dimension-control/index.js +2 -3
- package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -8
- package/src/dimension-control/test/index.test.js +2 -0
- package/src/disabled/stories/index.tsx +6 -2
- package/src/disabled/test/index.tsx +23 -11
- package/src/dropdown/README.md +41 -46
- package/src/dropdown/{index.js → index.tsx} +57 -13
- package/src/dropdown/stories/{index.js → index.tsx} +21 -8
- package/src/dropdown/test/index.tsx +88 -0
- package/src/dropdown/types.ts +107 -0
- package/src/dropdown-menu/README.md +2 -3
- package/src/dropdown-menu/test/index.js +20 -12
- package/src/duotone-picker/duotone-picker.js +2 -2
- package/src/external-link/test/index.tsx +2 -0
- package/src/focal-point-picker/test/index.js +2 -0
- package/src/focal-point-picker/test/media.js +26 -21
- package/src/font-size-picker/test/index.tsx +2 -0
- package/src/form-file-upload/test/index.tsx +2 -0
- package/src/form-toggle/test/index.tsx +2 -0
- package/src/form-token-field/style.scss +1 -1
- package/src/form-token-field/test/index.tsx +3 -0
- package/src/gradient-picker/index.js +6 -10
- package/src/gradient-picker/stories/index.js +0 -1
- package/src/grid/test/grid.tsx +31 -31
- package/src/guide/test/index.js +2 -0
- package/src/higher-order/navigate-regions/index.js +5 -2
- package/src/higher-order/navigate-regions/style.scss +13 -59
- package/src/higher-order/with-fallback-styles/index.js +4 -2
- package/src/higher-order/with-filters/test/index.js +32 -43
- package/src/higher-order/with-focus-outside/test/index.js +2 -0
- package/src/higher-order/with-focus-return/test/index.js +3 -4
- package/src/higher-order/with-notices/test/index.js +1 -0
- package/src/icon/stories/index.tsx +103 -0
- package/src/index.js +2 -3
- 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 +21 -0
- package/src/input-control/types.ts +2 -0
- package/src/isolated-event-container/test/index.js +2 -0
- package/src/mobile/bottom-sheet/cell.native.js +1 -1
- package/src/mobile/bottom-sheet/picker-cell.native.js +1 -6
- 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/global-styles-context/utils.native.js +17 -16
- 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 +13 -0
- package/src/navigable-container/test/navigable-menu.js +2 -0
- package/src/navigable-container/test/tababble-container.js +2 -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/navigation/test/index.js +2 -0
- package/src/navigator/navigator-provider/component.tsx +13 -10
- package/src/navigator/test/index.tsx +2 -0
- package/src/notice/test/index.js +8 -3
- 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 +602 -0
- package/src/palette-edit/index.js +88 -39
- package/src/palette-edit/test/index.js +25 -1
- package/src/panel/test/__snapshots__/body.js.snap +9 -0
- package/src/panel/test/body.js +71 -62
- package/src/placeholder/test/index.tsx +3 -0
- 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/select-control/test/select-control.tsx +2 -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 +15 -5
- package/src/tab-panel/style.scss +46 -34
- package/src/tab-panel/test/index.tsx +113 -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/text-highlight/test/index.tsx +1 -0
- 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 +15 -2
- package/src/toolbar/style.scss +1 -1
- package/src/toolbar-group/test/index.js +10 -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/stories/index.js +68 -78
- package/src/tooltip/style.scss +2 -2
- package/src/tooltip/test/index.js +111 -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 +4 -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/test/use-latest-ref.js +2 -0
- 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/dropdown/test/index.js +0 -98
- package/src/icon/stories/index.js +0 -128
- package/src/number-control/test/index.js +0 -478
- package/src/snackbar/stories/index.js +0 -89
|
@@ -9,6 +9,8 @@ import { render, screen } from '@testing-library/react';
|
|
|
9
9
|
import Disabled from '../';
|
|
10
10
|
import userEvent from '@testing-library/user-event';
|
|
11
11
|
|
|
12
|
+
jest.useFakeTimers();
|
|
13
|
+
|
|
12
14
|
describe( 'Disabled', () => {
|
|
13
15
|
const Form = () => (
|
|
14
16
|
<form title="form">
|
|
@@ -18,48 +20,58 @@ describe( 'Disabled', () => {
|
|
|
18
20
|
);
|
|
19
21
|
|
|
20
22
|
it( 'will disable all fields', () => {
|
|
21
|
-
|
|
22
|
-
<Disabled>
|
|
23
|
+
render(
|
|
24
|
+
<Disabled data-testid="disabled-wrapper">
|
|
23
25
|
<Form />
|
|
24
26
|
</Disabled>
|
|
25
27
|
);
|
|
26
28
|
|
|
27
|
-
expect(
|
|
29
|
+
expect( screen.getByTestId( 'disabled-wrapper' ) ).toHaveAttribute(
|
|
30
|
+
'inert'
|
|
31
|
+
);
|
|
28
32
|
} );
|
|
29
33
|
|
|
30
34
|
it( 'should cleanly un-disable via reconciliation', () => {
|
|
31
35
|
const MaybeDisable = ( { isDisabled = true } ) =>
|
|
32
36
|
isDisabled ? (
|
|
33
|
-
<Disabled>
|
|
37
|
+
<Disabled data-testid="disabled-wrapper">
|
|
34
38
|
<Form />
|
|
35
39
|
</Disabled>
|
|
36
40
|
) : (
|
|
37
41
|
<Form />
|
|
38
42
|
);
|
|
39
43
|
|
|
40
|
-
const {
|
|
44
|
+
const { rerender } = render( <MaybeDisable /> );
|
|
41
45
|
|
|
42
|
-
expect(
|
|
46
|
+
expect( screen.getByTestId( 'disabled-wrapper' ) ).toHaveAttribute(
|
|
47
|
+
'inert'
|
|
48
|
+
);
|
|
43
49
|
|
|
44
50
|
rerender( <MaybeDisable isDisabled={ false } /> );
|
|
45
51
|
|
|
46
|
-
expect(
|
|
52
|
+
expect(
|
|
53
|
+
screen.queryByTestId( 'disabled-wrapper' )
|
|
54
|
+
).not.toBeInTheDocument();
|
|
47
55
|
} );
|
|
48
56
|
|
|
49
57
|
it( 'will disable or enable descendant fields based on the isDisabled prop value', () => {
|
|
50
58
|
const MaybeDisable = ( { isDisabled = true } ) => (
|
|
51
|
-
<Disabled isDisabled={ isDisabled }>
|
|
59
|
+
<Disabled isDisabled={ isDisabled } data-testid="disabled-wrapper">
|
|
52
60
|
<Form />
|
|
53
61
|
</Disabled>
|
|
54
62
|
);
|
|
55
63
|
|
|
56
|
-
const { rerender
|
|
64
|
+
const { rerender } = render( <MaybeDisable /> );
|
|
57
65
|
|
|
58
|
-
expect(
|
|
66
|
+
expect( screen.getByTestId( 'disabled-wrapper' ) ).toHaveAttribute(
|
|
67
|
+
'inert'
|
|
68
|
+
);
|
|
59
69
|
|
|
60
70
|
rerender( <MaybeDisable isDisabled={ false } /> );
|
|
61
71
|
|
|
62
|
-
expect(
|
|
72
|
+
expect( screen.getByTestId( 'disabled-wrapper' ) ).not.toHaveAttribute(
|
|
73
|
+
'inert'
|
|
74
|
+
);
|
|
63
75
|
} );
|
|
64
76
|
|
|
65
77
|
it( 'should preserve input values when toggling the isDisabled prop', async () => {
|
package/src/dropdown/README.md
CHANGED
|
@@ -32,96 +32,91 @@ const MyDropdown = () => (
|
|
|
32
32
|
|
|
33
33
|
The component accepts the following props. Props not included in this set will be applied to the element wrapping Popover content.
|
|
34
34
|
|
|
35
|
-
### className
|
|
35
|
+
### `className`: `string`
|
|
36
36
|
|
|
37
37
|
className of the global container
|
|
38
38
|
|
|
39
|
-
- Type: `String`
|
|
40
39
|
- Required: No
|
|
41
40
|
|
|
42
|
-
### contentClassName
|
|
41
|
+
### `contentClassName`: `string`
|
|
43
42
|
|
|
44
43
|
If you want to target the dropdown menu for styling purposes, you need to provide a contentClassName because it's not being rendered as a child of the container node.
|
|
45
44
|
|
|
46
|
-
- Type: `String`
|
|
47
45
|
- Required: No
|
|
48
46
|
|
|
49
|
-
###
|
|
47
|
+
### `expandOnMobile`: `boolean`
|
|
50
48
|
|
|
51
|
-
|
|
49
|
+
Opt-in prop to show popovers fullscreen on mobile.
|
|
52
50
|
|
|
53
|
-
- Type: `String`
|
|
54
51
|
- Required: No
|
|
55
|
-
- Default: `
|
|
56
|
-
|
|
57
|
-
### renderToggle
|
|
58
|
-
|
|
59
|
-
A callback invoked to render the Dropdown Toggle Button.
|
|
60
|
-
|
|
61
|
-
- Type: `Function`
|
|
62
|
-
- Required: Yes
|
|
52
|
+
- Default: `false`
|
|
63
53
|
|
|
64
|
-
|
|
54
|
+
### `focusOnMount`: `'firstElement' | boolean`
|
|
65
55
|
|
|
66
|
-
|
|
67
|
-
- `onToggle`: A function switching the dropdown menu's state from open to closed and vice versa
|
|
68
|
-
- `onClose`: A function that closes the menu if invoked
|
|
56
|
+
By default, the _first tabbable element_ in the popover will receive focus when it mounts. This is the same as setting this prop to `"firstElement"`.
|
|
69
57
|
|
|
70
|
-
|
|
58
|
+
Specifying a `true` value will focus the container instead.
|
|
71
59
|
|
|
72
|
-
|
|
60
|
+
Specifying a `false` value disables the focus handling entirely (this should only be done when an appropriately accessible substitute behavior exists).
|
|
73
61
|
|
|
74
|
-
-
|
|
75
|
-
-
|
|
62
|
+
- Required: No
|
|
63
|
+
- Default: `"firstElement"`
|
|
76
64
|
|
|
77
|
-
###
|
|
65
|
+
### `headerTitle`: `string`
|
|
78
66
|
|
|
79
|
-
|
|
67
|
+
Set this to customize the text that is shown in the dropdown's header when it is fullscreen on mobile.
|
|
80
68
|
|
|
81
|
-
- Type: `Boolean`
|
|
82
69
|
- Required: No
|
|
83
|
-
- Default: `false`
|
|
84
70
|
|
|
85
|
-
###
|
|
71
|
+
### `onClose`: `() => void`
|
|
86
72
|
|
|
87
|
-
|
|
73
|
+
A callback invoked when the popover should be closed.
|
|
88
74
|
|
|
89
|
-
- Type: `String`
|
|
90
75
|
- Required: No
|
|
91
76
|
|
|
92
|
-
###
|
|
93
|
-
|
|
94
|
-
By default, the _first tabbable element_ in the popover will receive focus when it mounts. This is the same as setting this prop to `"firstElement"`.
|
|
77
|
+
### `onToggle`: `( willOpen: boolean ) => void`
|
|
95
78
|
|
|
96
|
-
|
|
79
|
+
A callback invoked when the state of the popover changes from open to closed and vice versa.
|
|
97
80
|
|
|
98
|
-
|
|
81
|
+
The callback receives a boolean as a parameter. If `true`, the popover will open. If `false`, the popover will close.
|
|
99
82
|
|
|
100
|
-
- Type: `'firstElement' | boolean`
|
|
101
83
|
- Required: No
|
|
102
|
-
- Default: `"firstElement"`
|
|
103
84
|
|
|
104
|
-
### popoverProps
|
|
85
|
+
### `popoverProps`: `WordPressComponentProps< Omit< PopoverProps, 'children' > 'div', false >`
|
|
105
86
|
|
|
106
87
|
Properties of popoverProps object will be passed as props to the `Popover` component.
|
|
107
88
|
|
|
108
89
|
Use this object to access properties/features of the `Popover` component that are not already exposed in the `Dropdown` component, e.g.: the ability to have the popover without an arrow.
|
|
109
90
|
|
|
110
|
-
- Type: `Object`
|
|
111
91
|
- Required: No
|
|
112
92
|
|
|
113
|
-
###
|
|
93
|
+
### `position`: `PopoverProps[ 'position' ]`
|
|
114
94
|
|
|
115
|
-
|
|
95
|
+
The direction in which the popover should open relative to its parent node. Specify a y- and an x-axis as a space-separated string. Supports `"top"`, `"bottom"` y-axis, and `"left"`, `"center"`, `"right"` x-axis.
|
|
116
96
|
|
|
117
|
-
- Type: `Function`
|
|
118
97
|
- Required: No
|
|
98
|
+
- Default: `"top center"`
|
|
119
99
|
|
|
120
|
-
###
|
|
100
|
+
### `renderContent`: `( props: CallbackProps ) => ReactNode`
|
|
121
101
|
|
|
122
|
-
A callback invoked
|
|
102
|
+
A callback invoked to render the content of the dropdown menu.
|
|
123
103
|
|
|
124
|
-
|
|
104
|
+
- `isOpen`: whether the dropdown menu is opened or not
|
|
105
|
+
- `onToggle`: A function switching the dropdown menu's state from open to closed and vice versa
|
|
106
|
+
- `onClose`: A function that closes the menu if invoked
|
|
107
|
+
|
|
108
|
+
- Required: Yes
|
|
109
|
+
|
|
110
|
+
### `renderToggle`: `( props: CallbackProps ) => ReactNode`
|
|
111
|
+
|
|
112
|
+
A callback invoked to render the Dropdown Toggle Button.
|
|
113
|
+
|
|
114
|
+
Its props are the same as the `renderContent` props.
|
|
115
|
+
|
|
116
|
+
- Required: Yes
|
|
117
|
+
|
|
118
|
+
### `style`: `React.CSSProperties`
|
|
119
|
+
|
|
120
|
+
The style of the global container
|
|
125
121
|
|
|
126
|
-
- Type: `Function`
|
|
127
122
|
- Required: No
|
|
@@ -1,35 +1,39 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
/**
|
|
3
2
|
* External dependencies
|
|
4
3
|
*/
|
|
5
4
|
import classnames from 'classnames';
|
|
5
|
+
import type { ForwardedRef } from 'react';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* WordPress dependencies
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import { forwardRef, useEffect, useRef, useState } from '@wordpress/element';
|
|
11
11
|
import { useMergeRefs } from '@wordpress/compose';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Internal dependencies
|
|
15
15
|
*/
|
|
16
16
|
import Popover from '../popover';
|
|
17
|
+
import type { DropdownProps } from './types';
|
|
17
18
|
|
|
18
|
-
function useObservableState(
|
|
19
|
+
function useObservableState(
|
|
20
|
+
initialState: boolean,
|
|
21
|
+
onStateChange?: ( newState: boolean ) => void
|
|
22
|
+
) {
|
|
19
23
|
const [ state, setState ] = useState( initialState );
|
|
20
24
|
return [
|
|
21
25
|
state,
|
|
22
|
-
( value ) => {
|
|
26
|
+
( value: boolean ) => {
|
|
23
27
|
setState( value );
|
|
24
28
|
if ( onStateChange ) {
|
|
25
29
|
onStateChange( value );
|
|
26
30
|
}
|
|
27
31
|
},
|
|
28
|
-
];
|
|
32
|
+
] as const;
|
|
29
33
|
}
|
|
30
34
|
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
function UnforwardedDropdown(
|
|
36
|
+
{
|
|
33
37
|
renderContent,
|
|
34
38
|
renderToggle,
|
|
35
39
|
className,
|
|
@@ -42,12 +46,14 @@ export default function Dropdown( props ) {
|
|
|
42
46
|
onClose,
|
|
43
47
|
onToggle,
|
|
44
48
|
style,
|
|
45
|
-
}
|
|
49
|
+
}: DropdownProps,
|
|
50
|
+
forwardedRef: ForwardedRef< any >
|
|
51
|
+
) {
|
|
46
52
|
// Use internal state instead of a ref to make sure that the component
|
|
47
53
|
// re-renders when the popover's anchor updates.
|
|
48
54
|
const [ fallbackPopoverAnchor, setFallbackPopoverAnchor ] =
|
|
49
|
-
useState( null );
|
|
50
|
-
const containerRef = useRef();
|
|
55
|
+
useState< HTMLDivElement | null >( null );
|
|
56
|
+
const containerRef = useRef< HTMLDivElement >();
|
|
51
57
|
const [ isOpen, setIsOpen ] = useObservableState( false, onToggle );
|
|
52
58
|
|
|
53
59
|
useEffect(
|
|
@@ -70,8 +76,13 @@ export default function Dropdown( props ) {
|
|
|
70
76
|
* case a dialog has opened, allowing focus to return when it's dismissed.
|
|
71
77
|
*/
|
|
72
78
|
function closeIfFocusOutside() {
|
|
79
|
+
if ( ! containerRef.current ) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
73
83
|
const { ownerDocument } = containerRef.current;
|
|
74
|
-
const dialog =
|
|
84
|
+
const dialog =
|
|
85
|
+
ownerDocument?.activeElement?.closest( '[role="dialog"]' );
|
|
75
86
|
if (
|
|
76
87
|
! containerRef.current.contains( ownerDocument.activeElement ) &&
|
|
77
88
|
( ! dialog || dialog.contains( containerRef.current ) )
|
|
@@ -99,11 +110,15 @@ export default function Dropdown( props ) {
|
|
|
99
110
|
return (
|
|
100
111
|
<div
|
|
101
112
|
className={ classnames( 'components-dropdown', className ) }
|
|
102
|
-
ref={ useMergeRefs( [
|
|
113
|
+
ref={ useMergeRefs( [
|
|
114
|
+
containerRef,
|
|
115
|
+
forwardedRef,
|
|
116
|
+
setFallbackPopoverAnchor,
|
|
117
|
+
] ) }
|
|
103
118
|
// Some UAs focus the closest focusable parent when the toggle is
|
|
104
119
|
// clicked. Making this div focusable ensures such UAs will focus
|
|
105
120
|
// it and `closeIfFocusOutside` can tell if the toggle was clicked.
|
|
106
|
-
tabIndex=
|
|
121
|
+
tabIndex={ -1 }
|
|
107
122
|
style={ style }
|
|
108
123
|
>
|
|
109
124
|
{ renderToggle( args ) }
|
|
@@ -136,3 +151,32 @@ export default function Dropdown( props ) {
|
|
|
136
151
|
</div>
|
|
137
152
|
);
|
|
138
153
|
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Renders a button that opens a floating content modal when clicked.
|
|
157
|
+
*
|
|
158
|
+
* ```jsx
|
|
159
|
+
* import { Button, Dropdown } from '@wordpress/components';
|
|
160
|
+
*
|
|
161
|
+
* const MyDropdown = () => (
|
|
162
|
+
* <Dropdown
|
|
163
|
+
* className="my-container-class-name"
|
|
164
|
+
* contentClassName="my-popover-content-classname"
|
|
165
|
+
* position="bottom right"
|
|
166
|
+
* renderToggle={ ( { isOpen, onToggle } ) => (
|
|
167
|
+
* <Button
|
|
168
|
+
* variant="primary"
|
|
169
|
+
* onClick={ onToggle }
|
|
170
|
+
* aria-expanded={ isOpen }
|
|
171
|
+
* >
|
|
172
|
+
* Toggle Popover!
|
|
173
|
+
* </Button>
|
|
174
|
+
* ) }
|
|
175
|
+
* renderContent={ () => <div>This is the content of the popover.</div> }
|
|
176
|
+
* />
|
|
177
|
+
* );
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
export const Dropdown = forwardRef( UnforwardedDropdown );
|
|
181
|
+
|
|
182
|
+
export default Dropdown;
|
|
@@ -1,29 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { ComponentMeta, ComponentStory } from '@storybook/react';
|
|
5
|
+
|
|
1
6
|
/**
|
|
2
7
|
* Internal dependencies
|
|
3
8
|
*/
|
|
4
|
-
import Dropdown from '
|
|
9
|
+
import Dropdown from '..';
|
|
5
10
|
import Button from '../../button';
|
|
6
11
|
import { DropdownContentWrapper } from '../dropdown-content-wrapper';
|
|
7
12
|
|
|
8
|
-
|
|
13
|
+
const meta: ComponentMeta< typeof Dropdown > = {
|
|
9
14
|
title: 'Components/Dropdown',
|
|
10
15
|
component: Dropdown,
|
|
11
16
|
subcomponents: { DropdownContentWrapper },
|
|
12
17
|
argTypes: {
|
|
13
|
-
expandOnMobile: { control: { type: 'boolean' } },
|
|
14
18
|
focusOnMount: {
|
|
15
19
|
control: {
|
|
16
20
|
type: 'radio',
|
|
17
21
|
options: [ 'firstElement', true, false ],
|
|
18
22
|
},
|
|
19
23
|
},
|
|
20
|
-
headerTitle: { control: { type: 'text' } },
|
|
21
24
|
renderContent: { control: { type: null } },
|
|
22
25
|
renderToggle: { control: { type: null } },
|
|
23
26
|
},
|
|
27
|
+
parameters: {
|
|
28
|
+
controls: {
|
|
29
|
+
expanded: true,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
24
32
|
};
|
|
33
|
+
export default meta;
|
|
25
34
|
|
|
26
|
-
const Template = ( args ) => {
|
|
35
|
+
const Template: ComponentStory< typeof Dropdown > = ( args ) => {
|
|
27
36
|
return (
|
|
28
37
|
<div style={ { height: 150 } }>
|
|
29
38
|
<Dropdown { ...args } />
|
|
@@ -31,7 +40,7 @@ const Template = ( args ) => {
|
|
|
31
40
|
);
|
|
32
41
|
};
|
|
33
42
|
|
|
34
|
-
export const Default = Template.bind( {} );
|
|
43
|
+
export const Default: ComponentStory< typeof Dropdown > = Template.bind( {} );
|
|
35
44
|
Default.args = {
|
|
36
45
|
position: 'bottom right',
|
|
37
46
|
renderToggle: ( { isOpen, onToggle } ) => (
|
|
@@ -46,7 +55,9 @@ Default.args = {
|
|
|
46
55
|
* To apply more padding to the dropdown content, use the provided `<DropdownContentWrapper>`
|
|
47
56
|
* convenience wrapper. A `paddingSize` of `"medium"` is suitable for relatively larger dropdowns (default is `"small"`).
|
|
48
57
|
*/
|
|
49
|
-
export const WithMorePadding = Template.bind(
|
|
58
|
+
export const WithMorePadding: ComponentStory< typeof Dropdown > = Template.bind(
|
|
59
|
+
{}
|
|
60
|
+
);
|
|
50
61
|
WithMorePadding.args = {
|
|
51
62
|
...Default.args,
|
|
52
63
|
renderContent: () => (
|
|
@@ -61,7 +72,9 @@ WithMorePadding.args = {
|
|
|
61
72
|
* with a `paddingSize` of `"none"`. This can also serve as a clean foundation to add arbitrary
|
|
62
73
|
* paddings, for example when child components already have padding on their own.
|
|
63
74
|
*/
|
|
64
|
-
export const WithNoPadding = Template.bind(
|
|
75
|
+
export const WithNoPadding: ComponentStory< typeof Dropdown > = Template.bind(
|
|
76
|
+
{}
|
|
77
|
+
);
|
|
65
78
|
WithNoPadding.args = {
|
|
66
79
|
...Default.args,
|
|
67
80
|
renderContent: () => (
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { render, screen, waitFor } from '@testing-library/react';
|
|
5
|
+
import userEvent from '@testing-library/user-event';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import Dropdown from '..';
|
|
11
|
+
|
|
12
|
+
jest.useFakeTimers();
|
|
13
|
+
|
|
14
|
+
describe( 'Dropdown', () => {
|
|
15
|
+
it( 'should toggle the dropdown properly', async () => {
|
|
16
|
+
const user = userEvent.setup( {
|
|
17
|
+
advanceTimers: jest.advanceTimersByTime,
|
|
18
|
+
} );
|
|
19
|
+
const { unmount } = render(
|
|
20
|
+
<Dropdown
|
|
21
|
+
className="container"
|
|
22
|
+
contentClassName="content"
|
|
23
|
+
renderToggle={ ( { isOpen, onToggle } ) => (
|
|
24
|
+
<button aria-expanded={ isOpen } onClick={ onToggle }>
|
|
25
|
+
Toggle
|
|
26
|
+
</button>
|
|
27
|
+
) }
|
|
28
|
+
renderContent={ () => <span>test</span> }
|
|
29
|
+
/>
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const button = screen.getByRole( 'button', { expanded: false } );
|
|
33
|
+
|
|
34
|
+
expect( button ).toBeVisible();
|
|
35
|
+
expect( screen.queryByText( 'test' ) ).not.toBeInTheDocument();
|
|
36
|
+
|
|
37
|
+
await user.click( button );
|
|
38
|
+
|
|
39
|
+
expect(
|
|
40
|
+
screen.getByRole( 'button', { expanded: true } )
|
|
41
|
+
).toBeVisible();
|
|
42
|
+
|
|
43
|
+
await waitFor( () =>
|
|
44
|
+
expect( screen.queryByText( 'test' ) ).toBeVisible()
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
// Cleanup remaining effects, like the delayed popover positioning
|
|
48
|
+
unmount();
|
|
49
|
+
} );
|
|
50
|
+
|
|
51
|
+
it( 'should close the dropdown when calling onClose', async () => {
|
|
52
|
+
const user = userEvent.setup( {
|
|
53
|
+
advanceTimers: jest.advanceTimersByTime,
|
|
54
|
+
} );
|
|
55
|
+
render(
|
|
56
|
+
<Dropdown
|
|
57
|
+
className="container"
|
|
58
|
+
contentClassName="content"
|
|
59
|
+
renderToggle={ ( { isOpen, onToggle, onClose } ) => [
|
|
60
|
+
<button
|
|
61
|
+
key="open"
|
|
62
|
+
className="open"
|
|
63
|
+
aria-expanded={ isOpen }
|
|
64
|
+
onClick={ onToggle }
|
|
65
|
+
>
|
|
66
|
+
Toggle
|
|
67
|
+
</button>,
|
|
68
|
+
<button key="close" className="close" onClick={ onClose }>
|
|
69
|
+
close
|
|
70
|
+
</button>,
|
|
71
|
+
] }
|
|
72
|
+
renderContent={ () => <span>test</span> }
|
|
73
|
+
/>
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
expect( screen.queryByText( 'test' ) ).not.toBeInTheDocument();
|
|
77
|
+
|
|
78
|
+
await user.click( screen.getByRole( 'button', { name: 'Toggle' } ) );
|
|
79
|
+
|
|
80
|
+
await waitFor( () =>
|
|
81
|
+
expect( screen.getByText( 'test' ) ).toBeVisible()
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
await user.click( screen.getByRole( 'button', { name: 'close' } ) );
|
|
85
|
+
|
|
86
|
+
expect( screen.queryByText( 'test' ) ).not.toBeInTheDocument();
|
|
87
|
+
} );
|
|
88
|
+
} );
|
package/src/dropdown/types.ts
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { ComponentPropsWithoutRef, CSSProperties, ReactNode } from 'react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import type Popover from '../popover';
|
|
10
|
+
import type { PopoverProps } from '../popover/types';
|
|
11
|
+
|
|
12
|
+
type CallbackProps = {
|
|
13
|
+
isOpen: boolean;
|
|
14
|
+
onToggle: () => void;
|
|
15
|
+
onClose: () => void;
|
|
16
|
+
};
|
|
17
|
+
|
|
1
18
|
export type DropdownContentWrapperProps = {
|
|
2
19
|
/**
|
|
3
20
|
* Amount of padding to apply on the dropdown content.
|
|
@@ -6,3 +23,93 @@ export type DropdownContentWrapperProps = {
|
|
|
6
23
|
*/
|
|
7
24
|
paddingSize?: 'none' | 'small' | 'medium';
|
|
8
25
|
};
|
|
26
|
+
|
|
27
|
+
export type DropdownProps = {
|
|
28
|
+
/**
|
|
29
|
+
* The className of the global container.
|
|
30
|
+
*/
|
|
31
|
+
className?: string;
|
|
32
|
+
/**
|
|
33
|
+
* If you want to target the dropdown menu for styling purposes,
|
|
34
|
+
* you need to provide a contentClassName because it's not being rendered
|
|
35
|
+
* as a child of the container node.
|
|
36
|
+
*/
|
|
37
|
+
contentClassName?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Opt-in prop to show popovers fullscreen on mobile.
|
|
40
|
+
*
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
43
|
+
expandOnMobile?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* By default, the first tabbable element in the popover will receive focus
|
|
46
|
+
* when it mounts. This is the same as setting this prop to "firstElement".
|
|
47
|
+
* Specifying a true value will focus the container instead.
|
|
48
|
+
* Specifying a false value disables the focus handling entirely
|
|
49
|
+
* (this should only be done when an appropriately accessible
|
|
50
|
+
* substitute behavior exists).
|
|
51
|
+
*
|
|
52
|
+
* @default 'firstElement'
|
|
53
|
+
*/
|
|
54
|
+
focusOnMount?: 'firstElement' | boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Set this to customize the text that is shown in the dropdown's header
|
|
57
|
+
* when it is fullscreen on mobile.
|
|
58
|
+
*/
|
|
59
|
+
headerTitle?: string;
|
|
60
|
+
/**
|
|
61
|
+
* A callback invoked when the popover should be closed.
|
|
62
|
+
*/
|
|
63
|
+
onClose?: () => void;
|
|
64
|
+
/**
|
|
65
|
+
* A callback invoked when the state of the popover changes
|
|
66
|
+
* from open to closed and vice versa.
|
|
67
|
+
* The callback receives a boolean as a parameter.
|
|
68
|
+
* If true, the popover will open.
|
|
69
|
+
* If false, the popover will close.
|
|
70
|
+
*/
|
|
71
|
+
onToggle?: ( willOpen: boolean ) => void;
|
|
72
|
+
/**
|
|
73
|
+
* Properties of popoverProps object will be passed as props
|
|
74
|
+
* to the Popover component.
|
|
75
|
+
* Use this object to access properties/features
|
|
76
|
+
* of the Popover component that are not already exposed
|
|
77
|
+
* in the Dropdown component,
|
|
78
|
+
* e.g.: the ability to have the popover without an arrow.
|
|
79
|
+
*/
|
|
80
|
+
popoverProps?: Omit<
|
|
81
|
+
ComponentPropsWithoutRef< typeof Popover >,
|
|
82
|
+
'children'
|
|
83
|
+
>;
|
|
84
|
+
/**
|
|
85
|
+
* The direction in which the popover should open
|
|
86
|
+
* relative to its parent node.
|
|
87
|
+
* Specify a y- and an x-axis as a space-separated string.
|
|
88
|
+
* Supports "top", "bottom" y-axis,
|
|
89
|
+
* and "left", "center", "right" x-axis.
|
|
90
|
+
*
|
|
91
|
+
* @default 'top center'
|
|
92
|
+
*/
|
|
93
|
+
position?: PopoverProps[ 'position' ];
|
|
94
|
+
/**
|
|
95
|
+
* A callback invoked to render the content of the dropdown menu.
|
|
96
|
+
* Its first argument is the same as the renderToggle prop.
|
|
97
|
+
*/
|
|
98
|
+
renderContent: ( props: CallbackProps ) => ReactNode;
|
|
99
|
+
/**
|
|
100
|
+
* A callback invoked to render the Dropdown Toggle Button.
|
|
101
|
+
*
|
|
102
|
+
* The first argument of the callback is an object
|
|
103
|
+
* containing the following properties:
|
|
104
|
+
*
|
|
105
|
+
* - isOpen: whether the dropdown menu is opened or not
|
|
106
|
+
* - onToggle: A function switching the dropdown menu's state
|
|
107
|
+
* from open to closed and vice versa
|
|
108
|
+
* - onClose: A function that closes the menu if invoked
|
|
109
|
+
*/
|
|
110
|
+
renderToggle: ( props: CallbackProps ) => ReactNode;
|
|
111
|
+
/**
|
|
112
|
+
* The style of the global container.
|
|
113
|
+
*/
|
|
114
|
+
style?: CSSProperties;
|
|
115
|
+
};
|
|
@@ -101,14 +101,13 @@ const MyDropdownMenu = () => (
|
|
|
101
101
|
Alternatively, specify a `children` function which returns elements valid for use in a DropdownMenu: `MenuItem`, `MenuItemsChoice`, or `MenuGroup`.
|
|
102
102
|
|
|
103
103
|
```jsx
|
|
104
|
-
import { Fragment } from '@wordpress/element';
|
|
105
104
|
import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
|
|
106
105
|
import { more, arrowUp, arrowDown, trash } from '@wordpress/icons';
|
|
107
106
|
|
|
108
107
|
const MyDropdownMenu = () => (
|
|
109
108
|
<DropdownMenu icon={ more } label="Select a direction">
|
|
110
109
|
{ ( { onClose } ) => (
|
|
111
|
-
|
|
110
|
+
<>
|
|
112
111
|
<MenuGroup>
|
|
113
112
|
<MenuItem icon={ arrowUp } onClick={ onClose }>
|
|
114
113
|
Move Up
|
|
@@ -122,7 +121,7 @@ const MyDropdownMenu = () => (
|
|
|
122
121
|
Remove
|
|
123
122
|
</MenuItem>
|
|
124
123
|
</MenuGroup>
|
|
125
|
-
|
|
124
|
+
</>
|
|
126
125
|
) }
|
|
127
126
|
</DropdownMenu>
|
|
128
127
|
);
|