@wordpress/components 40.0.0 → 40.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 +40 -0
- package/CONTRIBUTING.md +2 -0
- package/build/border-box-control/border-box-control/component.cjs +37 -5
- package/build/border-box-control/border-box-control/component.cjs.map +3 -3
- package/build/border-box-control/border-box-control/hook.cjs +24 -3
- package/build/border-box-control/border-box-control/hook.cjs.map +3 -3
- package/build/border-box-control/border-box-control-linked-button/hook.cjs +2 -2
- package/build/border-box-control/border-box-control-linked-button/hook.cjs.map +2 -2
- package/build/border-box-control/border-box-control-split-controls/hook.cjs +2 -2
- package/build/border-box-control/border-box-control-split-controls/hook.cjs.map +2 -2
- package/build/border-box-control/border-box-control-visualizer/hook.cjs +2 -2
- package/build/border-box-control/border-box-control-visualizer/hook.cjs.map +2 -2
- package/build/color-palette/index.cjs +1 -1
- package/build/color-palette/index.cjs.map +2 -2
- package/build/composite/context.cjs +9 -2
- package/build/composite/context.cjs.map +2 -2
- package/build/composite/group-label.cjs +4 -0
- package/build/composite/group-label.cjs.map +2 -2
- package/build/composite/group.cjs +10 -2
- package/build/composite/group.cjs.map +2 -2
- package/build/composite/item.cjs +4 -0
- package/build/composite/item.cjs.map +3 -3
- package/build/context/context-system-provider.cjs +2 -5
- package/build/context/context-system-provider.cjs.map +3 -3
- package/build/context/use-context-system.cjs +7 -2
- package/build/context/use-context-system.cjs.map +2 -2
- package/build/disabled/index.cjs +1 -1
- package/build/disabled/index.cjs.map +2 -2
- package/build/draggable/index.cjs.map +1 -1
- package/build/form-token-field/index.cjs +1 -1
- package/build/form-token-field/index.cjs.map +2 -2
- package/build/icon/index.cjs +30 -12
- package/build/icon/index.cjs.map +2 -2
- package/build/input-control/styles/input-control-styles.cjs +42 -27
- package/build/input-control/styles/input-control-styles.cjs.map +2 -2
- package/build/item-group/context.cjs +1 -0
- package/build/item-group/context.cjs.map +2 -2
- package/build/item-group/item/component.cjs +12 -0
- package/build/item-group/item/component.cjs.map +3 -3
- package/build/item-group/item/hook.cjs +7 -6
- package/build/item-group/item/hook.cjs.map +2 -2
- package/build/item-group/item-group/component.cjs +1 -0
- package/build/item-group/item-group/component.cjs.map +2 -2
- package/build/item-group/item-group/hook.cjs +1 -1
- package/build/item-group/item-group/hook.cjs.map +2 -2
- package/build/progress-bar/index.cjs +1 -1
- package/build/progress-bar/index.cjs.map +2 -2
- package/build/resizable-box/index.cjs.map +1 -1
- package/build/snackbar/index.cjs +8 -5
- package/build/snackbar/index.cjs.map +2 -2
- package/build/textarea-control/index.cjs +1 -1
- package/build/textarea-control/index.cjs.map +2 -2
- package/build/toggle-group-control/context.cjs +8 -2
- package/build/toggle-group-control/context.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control/as-button-group.cjs +5 -2
- package/build/toggle-group-control/toggle-group-control/as-button-group.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control/as-radio-group.cjs +5 -2
- package/build/toggle-group-control/toggle-group-control/as-radio-group.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control/component.cjs +3 -1
- package/build/toggle-group-control/toggle-group-control/component.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control-option/component.cjs +2 -0
- package/build/toggle-group-control/toggle-group-control-option/component.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control-option-base/component.cjs +2 -1
- package/build/toggle-group-control/toggle-group-control-option-base/component.cjs.map +2 -2
- package/build/toggle-group-control/toggle-group-control-option-icon/component.cjs +2 -0
- package/build/toggle-group-control/toggle-group-control-option-icon/component.cjs.map +2 -2
- package/build/tools-panel/tools-panel/hook.cjs +102 -106
- package/build/tools-panel/tools-panel/hook.cjs.map +2 -2
- package/build/tools-panel/tools-panel-item/hook.cjs +33 -33
- package/build/tools-panel/tools-panel-item/hook.cjs.map +2 -2
- package/build/tree-grid/cell.cjs +4 -0
- package/build/tree-grid/cell.cjs.map +2 -2
- package/build/tree-grid/roving-tab-index-item.cjs +5 -1
- package/build/tree-grid/roving-tab-index-item.cjs.map +2 -2
- package/build/tree-grid/row.cjs +6 -1
- package/build/tree-grid/row.cjs.map +2 -2
- package/build/tree-grid/use-validate-tree-grid-structure.cjs +81 -0
- package/build/tree-grid/use-validate-tree-grid-structure.cjs.map +7 -0
- package/build/utils/colors-values.cjs +3 -2
- package/build/utils/colors-values.cjs.map +2 -2
- package/build-module/border-box-control/border-box-control/component.mjs +38 -6
- package/build-module/border-box-control/border-box-control/component.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control/hook.mjs +14 -3
- package/build-module/border-box-control/border-box-control/hook.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control-linked-button/hook.mjs +2 -2
- package/build-module/border-box-control/border-box-control-linked-button/hook.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control-split-controls/hook.mjs +2 -2
- package/build-module/border-box-control/border-box-control-split-controls/hook.mjs.map +2 -2
- package/build-module/border-box-control/border-box-control-visualizer/hook.mjs +2 -2
- package/build-module/border-box-control/border-box-control-visualizer/hook.mjs.map +2 -2
- package/build-module/color-palette/index.mjs +1 -1
- package/build-module/color-palette/index.mjs.map +2 -2
- package/build-module/composite/context.mjs +6 -1
- package/build-module/composite/context.mjs.map +2 -2
- package/build-module/composite/group-label.mjs +5 -1
- package/build-module/composite/group-label.mjs.map +2 -2
- package/build-module/composite/group.mjs +11 -3
- package/build-module/composite/group.mjs.map +2 -2
- package/build-module/composite/item.mjs +4 -0
- package/build-module/composite/item.mjs.map +2 -2
- package/build-module/context/context-system-provider.mjs +2 -5
- package/build-module/context/context-system-provider.mjs.map +3 -3
- package/build-module/context/use-context-system.mjs +7 -2
- package/build-module/context/use-context-system.mjs.map +2 -2
- package/build-module/disabled/index.mjs +1 -1
- package/build-module/disabled/index.mjs.map +2 -2
- package/build-module/draggable/index.mjs.map +1 -1
- package/build-module/form-token-field/index.mjs +1 -1
- package/build-module/form-token-field/index.mjs.map +2 -2
- package/build-module/icon/index.mjs +30 -12
- package/build-module/icon/index.mjs.map +2 -2
- package/build-module/input-control/styles/input-control-styles.mjs +42 -27
- package/build-module/input-control/styles/input-control-styles.mjs.map +2 -2
- package/build-module/item-group/context.mjs +1 -0
- package/build-module/item-group/context.mjs.map +2 -2
- package/build-module/item-group/item/component.mjs +12 -0
- package/build-module/item-group/item/component.mjs.map +2 -2
- package/build-module/item-group/item/hook.mjs +7 -6
- package/build-module/item-group/item/hook.mjs.map +2 -2
- package/build-module/item-group/item-group/component.mjs +1 -0
- package/build-module/item-group/item-group/component.mjs.map +2 -2
- package/build-module/item-group/item-group/hook.mjs +1 -1
- package/build-module/item-group/item-group/hook.mjs.map +2 -2
- package/build-module/progress-bar/index.mjs +1 -1
- package/build-module/progress-bar/index.mjs.map +2 -2
- package/build-module/resizable-box/index.mjs.map +1 -1
- package/build-module/snackbar/index.mjs +8 -5
- package/build-module/snackbar/index.mjs.map +2 -2
- package/build-module/textarea-control/index.mjs +1 -1
- package/build-module/textarea-control/index.mjs.map +2 -2
- package/build-module/toggle-group-control/context.mjs +8 -2
- package/build-module/toggle-group-control/context.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control/as-button-group.mjs +5 -2
- package/build-module/toggle-group-control/toggle-group-control/as-button-group.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control/as-radio-group.mjs +5 -2
- package/build-module/toggle-group-control/toggle-group-control/as-radio-group.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control/component.mjs +3 -1
- package/build-module/toggle-group-control/toggle-group-control/component.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control-option/component.mjs +2 -0
- package/build-module/toggle-group-control/toggle-group-control-option/component.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.mjs +2 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/component.mjs.map +2 -2
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.mjs +2 -0
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.mjs.map +2 -2
- package/build-module/tools-panel/tools-panel/hook.mjs +103 -107
- package/build-module/tools-panel/tools-panel/hook.mjs.map +2 -2
- package/build-module/tools-panel/tools-panel-item/hook.mjs +35 -35
- package/build-module/tools-panel/tools-panel-item/hook.mjs.map +2 -2
- package/build-module/tree-grid/cell.mjs +5 -1
- package/build-module/tree-grid/cell.mjs.map +2 -2
- package/build-module/tree-grid/roving-tab-index-item.mjs +5 -1
- package/build-module/tree-grid/roving-tab-index-item.mjs.map +2 -2
- package/build-module/tree-grid/row.mjs +7 -2
- package/build-module/tree-grid/row.mjs.map +2 -2
- package/build-module/tree-grid/use-validate-tree-grid-structure.mjs +56 -0
- package/build-module/tree-grid/use-validate-tree-grid-structure.mjs.map +7 -0
- package/build-module/utils/colors-values.mjs +3 -2
- package/build-module/utils/colors-values.mjs.map +2 -2
- package/build-style/style-rtl.css +27 -85
- package/build-style/style.css +27 -85
- package/build-types/border-box-control/border-box-control/component.d.ts +4 -0
- 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 +4 -2
- package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
- package/build-types/border-box-control/types.d.ts +6 -2
- package/build-types/border-box-control/types.d.ts.map +1 -1
- package/build-types/composite/context.d.ts +2 -0
- package/build-types/composite/context.d.ts.map +1 -1
- package/build-types/composite/group-label.d.ts.map +1 -1
- package/build-types/composite/group.d.ts.map +1 -1
- package/build-types/composite/item.d.ts.map +1 -1
- package/build-types/composite/types.d.ts +1 -1
- package/build-types/context/context-system-provider.d.ts +8 -6
- package/build-types/context/context-system-provider.d.ts.map +1 -1
- package/build-types/context/use-context-system.d.ts.map +1 -1
- package/build-types/icon/index.d.ts.map +1 -1
- package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
- package/build-types/item-group/context.d.ts.map +1 -1
- package/build-types/item-group/item/component.d.ts.map +1 -1
- package/build-types/item-group/item/hook.d.ts +1 -1
- package/build-types/item-group/item/hook.d.ts.map +1 -1
- package/build-types/item-group/item-group/component.d.ts.map +1 -1
- package/build-types/item-group/types.d.ts +4 -0
- package/build-types/item-group/types.d.ts.map +1 -1
- package/build-types/popover/types.d.ts +6 -2
- package/build-types/popover/types.d.ts.map +1 -1
- package/build-types/snackbar/index.d.ts.map +1 -1
- package/build-types/toggle-group-control/context.d.ts +2 -2
- package/build-types/toggle-group-control/context.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +2 -2
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +2 -2
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/types.d.ts +12 -3
- package/build-types/toggle-group-control/types.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +4 -4
- package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
- package/build-types/tools-panel/types.d.ts +52 -9
- package/build-types/tools-panel/types.d.ts.map +1 -1
- package/build-types/tree-grid/cell.d.ts.map +1 -1
- package/build-types/tree-grid/roving-tab-index-item.d.ts.map +1 -1
- package/build-types/tree-grid/row.d.ts.map +1 -1
- package/build-types/tree-grid/use-validate-tree-grid-structure.d.ts +2 -0
- package/build-types/tree-grid/use-validate-tree-grid-structure.d.ts.map +1 -0
- package/build-types/utils/colors-values.d.ts.map +1 -1
- package/emotion-to-scss-modules.md +149 -0
- package/package.json +28 -27
- package/src/alignment-matrix-control/test/{index.tsx → index.jsdom.test.tsx} +5 -4
- package/src/angle-picker-control/style.module.scss +1 -1
- package/src/autocomplete/test/get-autocomplete-match.ts +2 -1
- package/src/autocomplete/test/{index.tsx → index.jsdom.test.tsx} +2 -1
- package/src/badge/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/base-control/stories/index.story.tsx +2 -2
- package/src/base-control/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/border-box-control/border-box-control/README.md +5 -3
- package/src/border-box-control/border-box-control/component.tsx +83 -15
- package/src/border-box-control/border-box-control/hook.ts +19 -1
- package/src/border-box-control/stories/index.story.tsx +10 -0
- package/src/border-box-control/style.module.scss +34 -3
- package/src/border-box-control/test/{index.tsx → index.jsdom.test.tsx} +138 -2
- package/src/border-box-control/test/utils.ts +11 -0
- package/src/border-box-control/types.ts +6 -2
- package/src/border-control/test/{index.js → index.jsdom.test.tsx} +44 -24
- package/src/box-control/test/{index.tsx → index.jsdom.test.tsx} +6 -3
- package/src/button/style.scss +0 -6
- package/src/button/test/{index.tsx → index.jsdom.test.tsx} +6 -2
- package/src/checkbox-control/stories/index.story.tsx +1 -1
- package/src/checkbox-control/style.scss +2 -2
- package/src/checkbox-control/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +10 -7
- package/src/checkbox-control/test/{index.tsx → index.jsdom.test.tsx} +4 -1
- package/src/circular-option-picker/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/color-indicator/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +2 -2
- package/src/color-indicator/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/color-palette/index.tsx +1 -1
- package/src/color-palette/test/{index.tsx → index.jsdom.test.tsx} +25 -22
- package/src/color-palette/test/{utils.ts → utils.jsdom.test.ts} +1 -0
- package/src/combobox-control/test/{index.tsx → index.jsdom.test.tsx} +12 -7
- package/src/composite/README.md +1 -1
- package/src/composite/context.tsx +6 -0
- package/src/composite/group-label.tsx +8 -1
- package/src/composite/group.tsx +9 -2
- package/src/composite/item.tsx +6 -0
- package/src/composite/legacy/test/{index.tsx → index.jsdom.test.tsx} +6 -13
- package/src/composite/test/{index.tsx → index.jsdom.test.tsx} +60 -17
- package/src/composite/types.ts +1 -1
- package/src/confirm-dialog/test/{index.tsx → index.jsdom.test.tsx} +16 -14
- package/src/content-editable-control/test/{index.tsx → index.jsdom.test.tsx} +4 -3
- package/src/context/{context-system-provider.js → context-system-provider.tsx} +19 -5
- package/src/context/stories/{ComponentsProvider.stories.jsx → ComponentsProvider.stories.tsx} +2 -2
- package/src/context/test/context-connect.tsx +1 -2
- package/src/context/test/{context-system-provider.js → context-system-provider.jsdom.test.tsx} +93 -51
- package/src/context/test/wordpress-component.tsx +1 -2
- package/src/context/use-context-system.js +13 -4
- package/src/custom-gradient-picker/gradient-bar/test/{utils.ts → utils.jsdom.test.ts} +6 -5
- package/src/custom-gradient-picker/test/serializer.ts +1 -0
- package/src/custom-select-control-v2/test/{index.tsx → index.jsdom.test.tsx} +4 -1
- package/src/date-time/date-picker/test/{index.tsx → index.jsdom.test.tsx} +6 -3
- package/src/date-time/date-picker/test/{use-lilius.ts → use-lilius.jsdom.test.ts} +1 -0
- package/src/date-time/date-time/test/{index.tsx → index.jsdom.test.tsx} +20 -11
- package/src/date-time/test/utils.test.ts +9 -0
- package/src/date-time/time-picker/test/{index.tsx → index.jsdom.test.tsx} +37 -27
- package/src/date-time/time-picker/time-input/test/{index.tsx → index.jsdom.test.tsx} +8 -3
- package/src/disabled/index.tsx +7 -7
- package/src/disabled/test/{index.tsx → index.jsdom.test.tsx} +26 -0
- package/src/draggable/index.tsx +1 -1
- package/src/draggable/style.module.scss +1 -1
- package/src/dropdown/style.module.scss +2 -2
- package/src/dropdown/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/dropdown-menu/test/{index.tsx → index.jsdom.test.tsx} +5 -4
- package/src/duotone-picker/test/{custom-duotone-bar.tsx → custom-duotone-bar.jsdom.test.tsx} +11 -8
- package/src/duotone-picker/test/{index.tsx → index.jsdom.test.tsx} +11 -10
- package/src/external-link/test/{index.tsx → index.jsdom.test.tsx} +5 -4
- package/src/focal-point-picker/test/{index.tsx → index.jsdom.test.tsx} +12 -9
- package/src/focal-point-picker/test/{media.tsx → media.jsdom.test.tsx} +1 -0
- package/src/font-size-picker/test/{font-size-picker-select.tsx → font-size-picker-select.jsdom.test.tsx} +19 -16
- package/src/font-size-picker/test/{font-size-picker-toggle-group.tsx → font-size-picker-toggle-group.jsdom.test.tsx} +13 -11
- package/src/font-size-picker/test/{index.tsx → index.jsdom.test.tsx} +19 -14
- package/src/font-size-picker/test/utils.ts +1 -0
- package/src/form-toggle/style.scss +1 -1
- package/src/form-toggle/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +4 -4
- package/src/form-toggle/test/{index.tsx → index.jsdom.test.tsx} +2 -1
- package/src/form-token-field/index.tsx +1 -1
- package/src/form-token-field/test/{index.tsx → index.jsdom.test.tsx} +86 -44
- package/src/gradient-picker/test/{index.tsx → index.jsdom.test.tsx} +12 -9
- package/src/guide/test/{index.tsx → index.jsdom.test.tsx} +4 -2
- package/src/h-stack/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +4 -4
- package/src/h-stack/test/{index.tsx → index.jsdom.test.tsx} +3 -0
- package/src/higher-order/with-fallback-styles/test/{index.tsx → index.jsdom.test.tsx} +3 -2
- package/src/higher-order/with-filters/test/__snapshots__/index.jsdom.test.tsx.snap +87 -0
- package/src/higher-order/with-filters/test/{index.tsx → index.jsdom.test.tsx} +6 -5
- package/src/higher-order/with-focus-outside/test/{index.tsx → index.jsdom.test.tsx} +2 -1
- package/src/higher-order/with-focus-return/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/higher-order/with-notices/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/higher-order/with-spoken-messages/test/{index.tsx → index.jsdom.test.tsx} +3 -2
- package/src/icon/index.tsx +28 -12
- package/src/icon/test/{index.tsx → index.jsdom.test.tsx} +66 -0
- package/src/input-control/styles/input-control-styles.tsx +38 -7
- package/src/input-control/test/{index.js → index.jsdom.test.tsx} +16 -10
- package/src/isolated-event-container/test/{index.tsx → index.jsdom.test.tsx} +4 -3
- package/src/item-group/context.ts +1 -0
- package/src/item-group/item/component.tsx +19 -1
- package/src/item-group/item/hook.ts +2 -3
- package/src/item-group/item-group/component.tsx +1 -0
- package/src/item-group/style.module.scss +1 -2
- package/src/item-group/test/__snapshots__/{index.js.snap → index.jsdom.test.tsx.snap} +9 -9
- package/src/item-group/test/{index.js → index.jsdom.test.tsx} +99 -2
- package/src/item-group/types.ts +4 -0
- package/src/keyboard-shortcuts/test/{index.tsx → index.jsdom.test.tsx} +5 -4
- package/src/menu/test/{index.tsx → index.jsdom.test.tsx} +67 -23
- package/src/menu-group/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/menu-item/test/__snapshots__/{index.js.snap → index.jsdom.test.tsx.snap} +5 -5
- package/src/menu-item/test/{index.js → index.jsdom.test.tsx} +1 -0
- package/src/modal/test/{aria-helper.ts → aria-helper.jsdom.test.ts} +1 -0
- package/src/modal/test/{index.tsx → index.jsdom.test.tsx} +9 -5
- package/src/navigable-container/test/{navigable-menu.tsx → navigable-menu.jsdom.test.tsx} +7 -5
- package/src/navigable-container/test/{tababble-container.tsx → tababble-container.jsdom.test.tsx} +5 -3
- package/src/navigator/test/{index.tsx → index.jsdom.test.tsx} +5 -2
- package/src/navigator/test/router.ts +1 -0
- package/src/notice/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +7 -4
- package/src/notice/test/{index.tsx → index.jsdom.test.tsx} +8 -4
- package/src/notice/test/{list.tsx → list.jsdom.test.tsx} +1 -0
- package/src/number-control/test/{index.tsx → index.jsdom.test.tsx} +9 -6
- package/src/palette-edit/test/{index.tsx → index.jsdom.test.tsx} +16 -13
- package/src/panel/test/__snapshots__/body.jsdom.test.tsx.snap +9 -0
- package/src/panel/test/__snapshots__/header.jsdom.test.tsx.snap +9 -0
- package/src/panel/test/__snapshots__/index.jsdom.test.tsx.snap +17 -0
- package/src/panel/test/__snapshots__/row.jsdom.test.tsx.snap +17 -0
- package/src/panel/test/{body.tsx → body.jsdom.test.tsx} +2 -1
- package/src/panel/test/{header.tsx → header.jsdom.test.tsx} +1 -0
- package/src/panel/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/panel/test/{row.tsx → row.jsdom.test.tsx} +1 -0
- package/src/placeholder/style.scss +0 -5
- package/src/placeholder/test/{index.tsx → index.jsdom.test.tsx} +19 -14
- package/src/popover/README.md +2 -2
- package/src/popover/test/{index.tsx → index.jsdom.test.tsx} +23 -0
- package/src/popover/types.ts +9 -3
- package/src/progress-bar/style.module.scss +9 -1
- package/src/query-controls/test/terms.ts +1 -0
- package/src/radio-control/test/{index.tsx → index.jsdom.test.tsx} +14 -11
- package/src/range-control/test/{index.tsx → index.jsdom.test.tsx} +10 -7
- package/src/resizable-box/index.tsx +1 -1
- package/src/sandbox/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/scroll-lock/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/shortcut/test/__snapshots__/index.jsdom.test.tsx.snap +15 -0
- package/src/shortcut/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/slot-fill/test/{index.js → index.jsdom.test.tsx} +4 -3
- package/src/slot-fill/test/{slot.js → slot.jsdom.test.tsx} +17 -9
- package/src/snackbar/index.tsx +10 -6
- package/src/snackbar/test/{index.tsx → index.jsdom.test.tsx} +41 -11
- package/src/snackbar/test/list.jsdom.test.tsx +100 -0
- package/src/style-provider/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/surface/style.module.scss +2 -2
- package/src/surface/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/tab-panel/style.scss +4 -23
- package/src/tab-panel/test/{index.tsx → index.jsdom.test.tsx} +22 -21
- package/src/tabs/test/{index.tsx → index.jsdom.test.tsx} +21 -19
- package/src/text-control/test/{text-control.tsx → text-control.jsdom.test.tsx} +1 -0
- package/src/text-highlight/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/textarea-control/style.module.scss +9 -4
- package/src/tip/style.scss +1 -1
- package/src/toggle-control/test/{index.tsx → index.jsdom.test.tsx} +4 -1
- package/src/toggle-group-control/context.ts +14 -5
- package/src/toggle-group-control/stories/index.story.tsx +15 -2
- package/src/toggle-group-control/test/{index.tsx → index.jsdom.test.tsx} +283 -9
- package/src/toggle-group-control/toggle-group-control/README.md +8 -5
- package/src/toggle-group-control/toggle-group-control/as-button-group.tsx +4 -0
- package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +4 -0
- package/src/toggle-group-control/toggle-group-control/component.tsx +2 -0
- package/src/toggle-group-control/toggle-group-control/style.module.scss +8 -2
- package/src/toggle-group-control/toggle-group-control-option/README.md +8 -5
- package/src/toggle-group-control/toggle-group-control-option/component.tsx +2 -0
- package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +4 -1
- package/src/toggle-group-control/toggle-group-control-option-icon/README.md +7 -0
- package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +2 -0
- package/src/toggle-group-control/types.ts +12 -3
- package/src/toolbar/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/toolbar/test/{toolbar-group.tsx → toolbar-group.jsdom.test.tsx} +2 -1
- package/src/tools-panel/test/{index.tsx → index.jsdom.test.tsx} +595 -47
- package/src/tools-panel/tools-panel/hook.ts +195 -180
- package/src/tools-panel/tools-panel-item/README.md +42 -1
- package/src/tools-panel/tools-panel-item/hook.ts +97 -69
- package/src/tools-panel/types.ts +54 -9
- package/src/tooltip/test/{index.tsx → index.jsdom.test.tsx} +5 -3
- package/src/tree-grid/cell.tsx +6 -2
- package/src/tree-grid/roving-tab-index-item.tsx +7 -3
- package/src/tree-grid/row.tsx +8 -2
- package/src/tree-grid/test/__snapshots__/{cell.tsx.snap → cell.jsdom.test.tsx.snap} +2 -2
- package/src/tree-grid/test/__snapshots__/index.jsdom.test.tsx.snap +3 -0
- package/src/tree-grid/test/__snapshots__/roving-tab-index-item.jsdom.test.tsx.snap +27 -0
- package/src/tree-grid/test/__snapshots__/roving-tab-index.jsdom.test.tsx.snap +9 -0
- package/src/tree-grid/test/__snapshots__/{row.tsx.snap → row.jsdom.test.tsx.snap} +9 -5
- package/src/tree-grid/test/cell.jsdom.test.tsx +149 -0
- package/src/tree-grid/test/{index.tsx → index.jsdom.test.tsx} +9 -7
- package/src/tree-grid/test/{roving-tab-index-item.tsx → roving-tab-index-item.jsdom.test.tsx} +4 -1
- package/src/tree-grid/test/{roving-tab-index.tsx → roving-tab-index.jsdom.test.tsx} +1 -0
- package/src/tree-grid/test/row.jsdom.test.tsx +132 -0
- package/src/tree-grid/use-validate-tree-grid-structure.ts +104 -0
- package/src/truncate/style.module.scss +0 -1
- package/src/truncate/test/{index.tsx → index.jsdom.test.tsx} +1 -0
- package/src/unit-control/test/{index.tsx → index.jsdom.test.tsx} +22 -19
- package/src/unit-control/test/utils.ts +1 -0
- package/src/utils/colors-values.js +5 -4
- package/src/utils/hooks/test/{use-controlled-state.js → use-controlled-state.jsdom.test.tsx} +22 -7
- package/src/utils/hooks/test/{use-controlled-value.js → use-controlled-value.jsdom.test.tsx} +6 -3
- package/src/utils/hooks/test/{use-cx.js → use-cx.jsdom.test.tsx} +8 -5
- package/src/utils/test/colors.js +1 -0
- package/src/utils/test/{get-node-text.js → get-node-text.tsx} +1 -0
- package/src/utils/test/math.js +1 -0
- package/src/utils/test/rtl.js +1 -0
- package/src/utils/test/space.js +1 -0
- package/src/utils/test/strings.js +1 -0
- package/src/utils/test/unit-values.js +1 -0
- package/src/v-stack/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +4 -4
- package/src/v-stack/test/{index.tsx → index.jsdom.test.tsx} +3 -0
- package/src/validated-form-controls/style.scss +11 -15
- package/src/validated-form-controls/test/{content-editable-control.tsx → content-editable-control.jsdom.test.tsx} +1 -1
- package/src/validated-form-controls/test/{custom-select-control.tsx → custom-select-control.jsdom.test.tsx} +3 -0
- package/src/validated-form-controls/test/{input-control.tsx → input-control.jsdom.test.tsx} +3 -0
- package/src/validated-form-controls/test/{range-control.tsx → range-control.jsdom.test.tsx} +3 -0
- package/src/validated-form-controls/test/{textarea-control.tsx → textarea-control.jsdom.test.tsx} +1 -0
- package/src/view/test/__snapshots__/{index.js.snap → index.jsdom.test.tsx.snap} +7 -7
- package/src/view/test/{index.js → index.jsdom.test.tsx} +7 -2
- package/src/context/test/__snapshots__/context-system-provider.js.snap +0 -35
- package/src/higher-order/with-filters/test/__snapshots__/index.tsx.snap +0 -87
- package/src/panel/test/__snapshots__/body.tsx.snap +0 -9
- package/src/panel/test/__snapshots__/header.tsx.snap +0 -9
- package/src/panel/test/__snapshots__/index.tsx.snap +0 -17
- package/src/panel/test/__snapshots__/row.tsx.snap +0 -17
- package/src/shortcut/test/__snapshots__/index.tsx.snap +0 -15
- package/src/snackbar/test/list.tsx +0 -39
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +0 -359
- package/src/tree-grid/test/__snapshots__/index.tsx.snap +0 -3
- package/src/tree-grid/test/__snapshots__/roving-tab-index-item.tsx.snap +0 -27
- package/src/tree-grid/test/__snapshots__/roving-tab-index.tsx.snap +0 -9
- package/src/tree-grid/test/cell.tsx +0 -46
- package/src/tree-grid/test/row.tsx +0 -37
- /package/src/card/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
- /package/src/card/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/color-picker/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/custom-gradient-picker/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/custom-select-control/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
- /package/src/custom-select-control/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/divider/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/elevation/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
- /package/src/elevation/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/flex/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
- /package/src/flex/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/form-file-upload/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/grid/test/{grid.tsx → grid.jsdom.test.tsx} +0 -0
- /package/src/heading/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
- /package/src/heading/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/input-control/test/__snapshots__/{index.js.snap → index.jsdom.test.tsx.snap} +0 -0
- /package/src/progress-bar/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/resizable-box/resize-tooltip/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/resizable-box/resize-tooltip/test/{label.tsx → label.jsdom.test.tsx} +0 -0
- /package/src/scrollable/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/search-control/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/select-control/test/__snapshots__/{select-control.tsx.snap → select-control.jsdom.test.tsx.snap} +0 -0
- /package/src/select-control/test/{select-control.tsx → select-control.jsdom.test.tsx} +0 -0
- /package/src/slot-fill/test/__snapshots__/{slot.js.snap → slot.jsdom.test.tsx.snap} +0 -0
- /package/src/spacer/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
- /package/src/spacer/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/text/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
- /package/src/text/test/{index.tsx → index.jsdom.test.tsx} +0 -0
- /package/src/utils/test/{polymorphic-element.tsx → polymorphic-element.jsdom.test.tsx} +0 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { render, screen, within } from '@testing-library/react';
|
|
2
2
|
import userEvent from '@testing-library/user-event';
|
|
3
|
+
import type { ReactNode } from 'react';
|
|
3
4
|
import { Component, createPortal, useState } from '@wordpress/element';
|
|
4
5
|
import { registerStyle } from '@wordpress/style-runtime';
|
|
5
6
|
import { Slot, Fill, Provider, useSlotFills } from '../';
|
|
6
7
|
|
|
7
|
-
function IframePortal( { children } ) {
|
|
8
|
-
const [ iframe, setIframe ] = useState( null );
|
|
8
|
+
function IframePortal( { children }: { children: ReactNode } ) {
|
|
9
|
+
const [ iframe, setIframe ] = useState< HTMLIFrameElement | null >( null );
|
|
9
10
|
const body = iframe?.contentDocument?.body;
|
|
10
11
|
|
|
11
12
|
return (
|
|
@@ -15,9 +16,14 @@ function IframePortal( { children } ) {
|
|
|
15
16
|
);
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
type FillerProps = {
|
|
20
|
+
name: string;
|
|
21
|
+
text?: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
class Filler extends Component< FillerProps, { num: number } > {
|
|
25
|
+
constructor( props: FillerProps ) {
|
|
26
|
+
super( props );
|
|
21
27
|
|
|
22
28
|
this.state = {
|
|
23
29
|
num: 1,
|
|
@@ -121,7 +127,7 @@ describe( 'Slot', () => {
|
|
|
121
127
|
<div>
|
|
122
128
|
<Slot name="chicken">
|
|
123
129
|
{ ( fills ) =>
|
|
124
|
-
|
|
130
|
+
( fills as ReactNode[] ).length ? (
|
|
125
131
|
<blockquote>{ fills }</blockquote>
|
|
126
132
|
) : null
|
|
127
133
|
}
|
|
@@ -290,7 +296,8 @@ describe( 'Slot', () => {
|
|
|
290
296
|
|
|
291
297
|
describe( 'cross-document styles', () => {
|
|
292
298
|
afterEach( () => {
|
|
293
|
-
delete globalThis
|
|
299
|
+
delete ( globalThis as { __wpStyleRuntime?: unknown } )
|
|
300
|
+
.__wpStyleRuntime;
|
|
294
301
|
document.head.innerHTML = '';
|
|
295
302
|
} );
|
|
296
303
|
|
|
@@ -315,13 +322,14 @@ describe( 'Slot', () => {
|
|
|
315
322
|
</Provider>
|
|
316
323
|
);
|
|
317
324
|
const iframeDocument =
|
|
318
|
-
screen.getByTitle( 'Slot document' )
|
|
325
|
+
screen.getByTitle< HTMLIFrameElement >( 'Slot document' )
|
|
326
|
+
.contentDocument!;
|
|
319
327
|
|
|
320
328
|
const styledElement = within( iframeDocument.body ).getByText(
|
|
321
329
|
'Styled content'
|
|
322
330
|
);
|
|
323
331
|
expect(
|
|
324
|
-
iframeDocument.defaultView
|
|
332
|
+
iframeDocument.defaultView!.getComputedStyle( styledElement )
|
|
325
333
|
.padding
|
|
326
334
|
).toBe( '32px' );
|
|
327
335
|
} );
|
package/src/snackbar/index.tsx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ForwardedRef, KeyboardEvent, MouseEvent } from 'react';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
|
+
import { useIsPresent } from 'framer-motion';
|
|
3
4
|
import { speak } from '@wordpress/a11y';
|
|
4
5
|
import {
|
|
5
6
|
useEffect,
|
|
@@ -57,6 +58,8 @@ function UnforwardedSnackbar(
|
|
|
57
58
|
}: WordPressComponentProps< SnackbarProps, 'div' >,
|
|
58
59
|
ref: ForwardedRef< any >
|
|
59
60
|
) {
|
|
61
|
+
const isPresent = useIsPresent();
|
|
62
|
+
|
|
60
63
|
function dismissMe( event: KeyboardEvent | MouseEvent ) {
|
|
61
64
|
if ( event && event.preventDefault ) {
|
|
62
65
|
event.preventDefault();
|
|
@@ -92,16 +95,17 @@ function UnforwardedSnackbar(
|
|
|
92
95
|
} );
|
|
93
96
|
|
|
94
97
|
useEffect( () => {
|
|
95
|
-
|
|
98
|
+
if ( explicitDismiss || ! isPresent ) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
96
102
|
const timeoutHandle = setTimeout( () => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
callbacksRef.current.onRemove?.();
|
|
100
|
-
}
|
|
103
|
+
callbacksRef.current.onDismiss?.();
|
|
104
|
+
callbacksRef.current.onRemove?.();
|
|
101
105
|
}, NOTICE_TIMEOUT );
|
|
102
106
|
|
|
103
107
|
return () => clearTimeout( timeoutHandle );
|
|
104
|
-
}, [ explicitDismiss ] );
|
|
108
|
+
}, [ explicitDismiss, isPresent ] );
|
|
105
109
|
|
|
106
110
|
const classes = clsx( className, 'components-snackbar', {
|
|
107
111
|
'components-snackbar-explicit-dismiss': !! explicitDismiss,
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { act, fireEvent, render, screen, within } from '@testing-library/react';
|
|
2
3
|
import { click } from '@ariakit/test';
|
|
3
4
|
import { speak } from '@wordpress/a11y';
|
|
4
5
|
import { SVG, Path } from '@wordpress/primitives';
|
|
5
6
|
import Snackbar from '../index';
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
vi.mock( import( '@wordpress/a11y' ), async ( importOriginal ) => ( {
|
|
9
|
+
...( await importOriginal() ),
|
|
10
|
+
speak: vi.fn(),
|
|
11
|
+
} ) );
|
|
12
|
+
const mockedSpeak = vi.mocked( speak );
|
|
9
13
|
|
|
10
14
|
describe( 'Snackbar', () => {
|
|
11
15
|
const testId = 'snackbar';
|
|
@@ -14,6 +18,10 @@ describe( 'Snackbar', () => {
|
|
|
14
18
|
mockedSpeak.mockReset();
|
|
15
19
|
} );
|
|
16
20
|
|
|
21
|
+
afterEach( () => {
|
|
22
|
+
vi.useRealTimers();
|
|
23
|
+
} );
|
|
24
|
+
|
|
17
25
|
it( 'should render correctly', () => {
|
|
18
26
|
render( <Snackbar>Message</Snackbar> );
|
|
19
27
|
|
|
@@ -44,9 +52,25 @@ describe( 'Snackbar', () => {
|
|
|
44
52
|
expect( icon ).toBeVisible();
|
|
45
53
|
} );
|
|
46
54
|
|
|
55
|
+
it( 'should not restart auto-dismissal after an unrelated rerender', async () => {
|
|
56
|
+
vi.useFakeTimers();
|
|
57
|
+
const removeNotice = vi.fn();
|
|
58
|
+
const { rerender } = render(
|
|
59
|
+
<Snackbar onRemove={ () => removeNotice() }>Message</Snackbar>
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
await act( async () => vi.advanceTimersByTime( 5000 ) );
|
|
63
|
+
rerender(
|
|
64
|
+
<Snackbar onRemove={ () => removeNotice() }>Message</Snackbar>
|
|
65
|
+
);
|
|
66
|
+
await act( async () => vi.advanceTimersByTime( 1000 ) );
|
|
67
|
+
|
|
68
|
+
expect( removeNotice ).toHaveBeenCalledTimes( 1 );
|
|
69
|
+
} );
|
|
70
|
+
|
|
47
71
|
it( 'should be dismissible by clicking the snackbar', async () => {
|
|
48
|
-
const onRemove =
|
|
49
|
-
const onDismiss =
|
|
72
|
+
const onRemove = vi.fn();
|
|
73
|
+
const onDismiss = vi.fn();
|
|
50
74
|
|
|
51
75
|
render(
|
|
52
76
|
<Snackbar onRemove={ onRemove } onDismiss={ onDismiss }>
|
|
@@ -69,8 +93,9 @@ describe( 'Snackbar', () => {
|
|
|
69
93
|
} );
|
|
70
94
|
|
|
71
95
|
it( 'should not be dismissible by clicking the snackbar when the `explicitDismiss` prop is set to `true`', async () => {
|
|
72
|
-
|
|
73
|
-
const
|
|
96
|
+
vi.useFakeTimers();
|
|
97
|
+
const onRemove = vi.fn();
|
|
98
|
+
const onDismiss = vi.fn();
|
|
74
99
|
|
|
75
100
|
render(
|
|
76
101
|
<Snackbar
|
|
@@ -93,15 +118,20 @@ describe( 'Snackbar', () => {
|
|
|
93
118
|
'components-snackbar-explicit-dismiss'
|
|
94
119
|
);
|
|
95
120
|
|
|
96
|
-
|
|
121
|
+
fireEvent.click( snackbar );
|
|
122
|
+
|
|
123
|
+
expect( onRemove ).not.toHaveBeenCalled();
|
|
124
|
+
expect( onDismiss ).not.toHaveBeenCalled();
|
|
125
|
+
|
|
126
|
+
await act( async () => vi.advanceTimersByTime( 6000 ) );
|
|
97
127
|
|
|
98
128
|
expect( onRemove ).not.toHaveBeenCalled();
|
|
99
129
|
expect( onDismiss ).not.toHaveBeenCalled();
|
|
100
130
|
} );
|
|
101
131
|
|
|
102
132
|
it( 'should be dismissible by clicking the close button when the `explicitDismiss` prop is set to `true`', async () => {
|
|
103
|
-
const onRemove =
|
|
104
|
-
const onDismiss =
|
|
133
|
+
const onRemove = vi.fn();
|
|
134
|
+
const onDismiss = vi.fn();
|
|
105
135
|
|
|
106
136
|
render(
|
|
107
137
|
<Snackbar
|
|
@@ -169,7 +199,7 @@ describe( 'Snackbar', () => {
|
|
|
169
199
|
} );
|
|
170
200
|
|
|
171
201
|
it( 'should be rendered as a button and call `onClick` when the `onClick` prop is set', async () => {
|
|
172
|
-
const onClick =
|
|
202
|
+
const onClick = vi.fn();
|
|
173
203
|
|
|
174
204
|
render(
|
|
175
205
|
<Snackbar actions={ [ { label: 'View post', onClick } ] }>
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { act, render, screen } from '@testing-library/react';
|
|
3
|
+
import { click } from '@ariakit/test';
|
|
4
|
+
import { useEffect, useState } from '@wordpress/element';
|
|
5
|
+
import SnackbarList from '../list';
|
|
6
|
+
|
|
7
|
+
vi.mock( import( '@wordpress/compose' ), async ( importOriginal ) => ( {
|
|
8
|
+
...( await importOriginal() ),
|
|
9
|
+
useReducedMotion: () => false,
|
|
10
|
+
} ) );
|
|
11
|
+
|
|
12
|
+
window.scrollTo = vi.fn();
|
|
13
|
+
|
|
14
|
+
describe( 'SnackbarList', () => {
|
|
15
|
+
afterEach( () => {
|
|
16
|
+
vi.resetAllMocks();
|
|
17
|
+
vi.useRealTimers();
|
|
18
|
+
} );
|
|
19
|
+
|
|
20
|
+
it( 'should get focus after a snackbar is dismissed', async () => {
|
|
21
|
+
render(
|
|
22
|
+
<SnackbarList
|
|
23
|
+
notices={ [
|
|
24
|
+
{
|
|
25
|
+
id: 'ID_1',
|
|
26
|
+
content: 'Post published.',
|
|
27
|
+
explicitDismiss: true,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: 'ID_2',
|
|
31
|
+
content: 'Post updated.',
|
|
32
|
+
explicitDismiss: true,
|
|
33
|
+
},
|
|
34
|
+
] }
|
|
35
|
+
onRemove={ () => {} }
|
|
36
|
+
/>
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
await click(
|
|
40
|
+
screen.getAllByRole( 'button', {
|
|
41
|
+
name: 'Dismiss this notice',
|
|
42
|
+
} )[ 0 ]
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
expect( screen.getByTestId( 'snackbar-list' ) ).toHaveFocus();
|
|
46
|
+
} );
|
|
47
|
+
|
|
48
|
+
it( 'should restart auto-dismissal when a notice is replaced with the same ID', async () => {
|
|
49
|
+
vi.useFakeTimers();
|
|
50
|
+
const onRemove = vi.fn();
|
|
51
|
+
const notice = {
|
|
52
|
+
id: 'ID_1',
|
|
53
|
+
content: 'A collaborator joined.',
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
function RecreatedNotice() {
|
|
57
|
+
const [ notices, setNotices ] = useState( [ notice ] );
|
|
58
|
+
const [ shouldRecreate, setShouldRecreate ] = useState( false );
|
|
59
|
+
|
|
60
|
+
useEffect( () => {
|
|
61
|
+
if ( ! shouldRecreate ) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const timeoutHandle = setTimeout( () => {
|
|
66
|
+
setNotices( [ { ...notice } ] );
|
|
67
|
+
setShouldRecreate( false );
|
|
68
|
+
}, 50 );
|
|
69
|
+
|
|
70
|
+
return () => clearTimeout( timeoutHandle );
|
|
71
|
+
}, [ shouldRecreate ] );
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<SnackbarList
|
|
75
|
+
notices={ notices }
|
|
76
|
+
onRemove={ ( id ) => {
|
|
77
|
+
onRemove( id );
|
|
78
|
+
setNotices( [] );
|
|
79
|
+
setShouldRecreate( true );
|
|
80
|
+
} }
|
|
81
|
+
/>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
render( <RecreatedNotice /> );
|
|
86
|
+
|
|
87
|
+
await act( async () => vi.advanceTimersByTime( 6000 ) );
|
|
88
|
+
expect( onRemove ).toHaveBeenCalledTimes( 1 );
|
|
89
|
+
|
|
90
|
+
// Recreate the notice before its 100ms exit animation completes.
|
|
91
|
+
await act( async () => vi.advanceTimersByTime( 50 ) );
|
|
92
|
+
|
|
93
|
+
expect( screen.getByTestId( 'snackbar' ) ).toHaveTextContent(
|
|
94
|
+
notice.content
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
await act( async () => vi.advanceTimersByTime( 6000 ) );
|
|
98
|
+
expect( onRemove ).toHaveBeenCalledTimes( 2 );
|
|
99
|
+
} );
|
|
100
|
+
} );
|
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
.border-left {
|
|
12
|
-
/* stylelint-disable-next-line
|
|
12
|
+
/* stylelint-disable-next-line logical-css/require-logical-properties -- Surface exposes physical border props. */
|
|
13
13
|
border-left: var(--wpds-border-width-xs) solid var(--wpds-color-stroke-surface-neutral);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
.border-right {
|
|
17
|
-
/* stylelint-disable-next-line
|
|
17
|
+
/* stylelint-disable-next-line logical-css/require-logical-properties -- Surface exposes physical border props. */
|
|
18
18
|
border-right: var(--wpds-border-width-xs) solid var(--wpds-color-stroke-surface-neutral);
|
|
19
19
|
}
|
|
20
20
|
|
package/src/tab-panel/style.scss
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
@use "@wordpress/base-styles/variables" as *;
|
|
2
|
+
@use "@wordpress/base-styles/mixins" as *;
|
|
2
3
|
|
|
3
4
|
.components-tab-panel__tabs {
|
|
4
5
|
display: flex;
|
|
@@ -16,7 +17,6 @@
|
|
|
16
17
|
height: $grid-unit-60 !important; // https://github.com/WordPress/gutenberg/pull/65075#discussion_r1746282734
|
|
17
18
|
background: transparent;
|
|
18
19
|
border: none;
|
|
19
|
-
box-shadow: none;
|
|
20
20
|
cursor: var(--wpds-cursor-control);
|
|
21
21
|
padding: 3px var(--wpds-dimension-padding-lg); // Use padding to offset the is-active border, this benefits Windows High Contrast mode
|
|
22
22
|
margin-left: 0;
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
|
|
35
35
|
&:focus:not(:disabled) {
|
|
36
36
|
position: relative;
|
|
37
|
-
box-shadow: none;
|
|
38
37
|
outline: none;
|
|
39
38
|
}
|
|
40
39
|
|
|
@@ -73,24 +72,12 @@
|
|
|
73
72
|
position: absolute;
|
|
74
73
|
inset: var(--wpds-dimension-padding-md);
|
|
75
74
|
pointer-events: none;
|
|
76
|
-
|
|
77
|
-
// Draw the indicator.
|
|
78
|
-
box-shadow: 0 0 0 0 transparent;
|
|
79
75
|
border-radius: var(--wpds-border-radius-sm);
|
|
80
|
-
|
|
81
|
-
// Animation
|
|
82
|
-
@media not (prefers-reduced-motion) {
|
|
83
|
-
transition: box-shadow 0.1s linear;
|
|
84
|
-
}
|
|
85
76
|
}
|
|
86
77
|
|
|
87
78
|
&:focus-visible::before {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
var(--wpds-color-stroke-focus);
|
|
91
|
-
|
|
92
|
-
// Windows high contrast mode.
|
|
93
|
-
outline: 2px solid transparent;
|
|
79
|
+
@include outset-ring__focus();
|
|
80
|
+
outline-offset: 0;
|
|
94
81
|
}
|
|
95
82
|
|
|
96
83
|
.components-tab-panel__tabs[aria-orientation="vertical"] & {
|
|
@@ -108,17 +95,11 @@
|
|
|
108
95
|
|
|
109
96
|
.components-tab-panel__tab-content {
|
|
110
97
|
&:focus {
|
|
111
|
-
box-shadow: none;
|
|
112
98
|
outline: none;
|
|
113
99
|
}
|
|
114
100
|
|
|
115
101
|
&:focus-visible {
|
|
116
|
-
|
|
117
|
-
0 0 0 var(--wpds-border-width-focus)
|
|
118
|
-
var(--wpds-color-stroke-focus);
|
|
119
|
-
|
|
120
|
-
// Windows high contrast mode.
|
|
121
|
-
outline: 2px solid transparent;
|
|
102
|
+
@include outset-ring__focus();
|
|
122
103
|
outline-offset: 0;
|
|
123
104
|
}
|
|
124
105
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { render, screen, waitFor } from '@testing-library/react';
|
|
2
3
|
import { press, hover, click } from '@ariakit/test';
|
|
3
4
|
import { wordpress, category, media } from '@wordpress/icons';
|
|
@@ -34,7 +35,7 @@ describe.each( [
|
|
|
34
35
|
|
|
35
36
|
describe( 'Accessibility and semantics', () => {
|
|
36
37
|
it( 'should use the correct aria attributes', async () => {
|
|
37
|
-
const panelRenderFunction =
|
|
38
|
+
const panelRenderFunction = vi.fn();
|
|
38
39
|
|
|
39
40
|
render(
|
|
40
41
|
<Component tabs={ TABS } children={ panelRenderFunction } />
|
|
@@ -66,7 +67,7 @@ describe.each( [
|
|
|
66
67
|
} );
|
|
67
68
|
|
|
68
69
|
it( 'should display a tooltip when hovering tabs provided with an icon', async () => {
|
|
69
|
-
const panelRenderFunction =
|
|
70
|
+
const panelRenderFunction = vi.fn();
|
|
70
71
|
|
|
71
72
|
const TABS_WITH_ICON = [
|
|
72
73
|
{ ...TABS[ 0 ], icon: wordpress },
|
|
@@ -102,8 +103,8 @@ describe.each( [
|
|
|
102
103
|
} );
|
|
103
104
|
|
|
104
105
|
it( 'should display a tooltip when moving the selection via the keyboard on tabs provided with an icon', async () => {
|
|
105
|
-
const mockOnSelect =
|
|
106
|
-
const panelRenderFunction =
|
|
106
|
+
const mockOnSelect = vi.fn();
|
|
107
|
+
const panelRenderFunction = vi.fn();
|
|
107
108
|
|
|
108
109
|
const TABS_WITH_ICON = [
|
|
109
110
|
{ ...TABS[ 0 ], icon: wordpress },
|
|
@@ -163,7 +164,7 @@ describe.each( [
|
|
|
163
164
|
|
|
164
165
|
describe( 'Without `initialTabName`', () => {
|
|
165
166
|
it( 'should render first tab', async () => {
|
|
166
|
-
const panelRenderFunction =
|
|
167
|
+
const panelRenderFunction = vi.fn();
|
|
167
168
|
|
|
168
169
|
render(
|
|
169
170
|
<Component tabs={ TABS } children={ panelRenderFunction } />
|
|
@@ -176,7 +177,7 @@ describe.each( [
|
|
|
176
177
|
} );
|
|
177
178
|
|
|
178
179
|
it( 'should fall back to first enabled tab if the active tab is removed', async () => {
|
|
179
|
-
const mockOnSelect =
|
|
180
|
+
const mockOnSelect = vi.fn();
|
|
180
181
|
const { rerender } = render(
|
|
181
182
|
<Component
|
|
182
183
|
tabs={ TABS }
|
|
@@ -247,7 +248,7 @@ describe.each( [
|
|
|
247
248
|
} );
|
|
248
249
|
|
|
249
250
|
it( 'should fall back to the tab associated to `initialTabName` if the currently active tab is removed', async () => {
|
|
250
|
-
const mockOnSelect =
|
|
251
|
+
const mockOnSelect = vi.fn();
|
|
251
252
|
|
|
252
253
|
const { rerender } = render(
|
|
253
254
|
<Component
|
|
@@ -279,7 +280,7 @@ describe.each( [
|
|
|
279
280
|
} );
|
|
280
281
|
|
|
281
282
|
it( 'should have no active tabs when the tab associated to `initialTabName` is removed while being the active tab', async () => {
|
|
282
|
-
const mockOnSelect =
|
|
283
|
+
const mockOnSelect = vi.fn();
|
|
283
284
|
|
|
284
285
|
const { rerender } = render(
|
|
285
286
|
<Component
|
|
@@ -311,7 +312,7 @@ describe.each( [
|
|
|
311
312
|
} );
|
|
312
313
|
|
|
313
314
|
it( 'waits for the tab with the `initialTabName` to be present in the `tabs` array before selecting it', async () => {
|
|
314
|
-
const mockOnSelect =
|
|
315
|
+
const mockOnSelect = vi.fn();
|
|
315
316
|
const { rerender } = render(
|
|
316
317
|
<Component
|
|
317
318
|
initialTabName="delta"
|
|
@@ -349,7 +350,7 @@ describe.each( [
|
|
|
349
350
|
|
|
350
351
|
describe( 'Disabled Tab', () => {
|
|
351
352
|
it( 'should disable the tab when `disabled` is `true`', async () => {
|
|
352
|
-
const mockOnSelect =
|
|
353
|
+
const mockOnSelect = vi.fn();
|
|
353
354
|
|
|
354
355
|
render(
|
|
355
356
|
<Component
|
|
@@ -381,7 +382,7 @@ describe.each( [
|
|
|
381
382
|
} );
|
|
382
383
|
|
|
383
384
|
it( 'should select first enabled tab when the initial tab is disabled', async () => {
|
|
384
|
-
const mockOnSelect =
|
|
385
|
+
const mockOnSelect = vi.fn();
|
|
385
386
|
|
|
386
387
|
const { rerender } = render(
|
|
387
388
|
<Component
|
|
@@ -416,7 +417,7 @@ describe.each( [
|
|
|
416
417
|
} );
|
|
417
418
|
|
|
418
419
|
it( 'should select first enabled tab when the tab associated to `initialTabName` is disabled', async () => {
|
|
419
|
-
const mockOnSelect =
|
|
420
|
+
const mockOnSelect = vi.fn();
|
|
420
421
|
|
|
421
422
|
const { rerender } = render(
|
|
422
423
|
<Component
|
|
@@ -452,7 +453,7 @@ describe.each( [
|
|
|
452
453
|
} );
|
|
453
454
|
|
|
454
455
|
it( 'should select the first enabled tab when the selected tab becomes disabled', async () => {
|
|
455
|
-
const mockOnSelect =
|
|
456
|
+
const mockOnSelect = vi.fn();
|
|
456
457
|
const { rerender } = render(
|
|
457
458
|
<Component
|
|
458
459
|
tabs={ TABS }
|
|
@@ -496,7 +497,7 @@ describe.each( [
|
|
|
496
497
|
} );
|
|
497
498
|
|
|
498
499
|
it( 'should select the first enabled tab when the tab associated to `initialTabName` becomes disabled while being the active tab', async () => {
|
|
499
|
-
const mockOnSelect =
|
|
500
|
+
const mockOnSelect = vi.fn();
|
|
500
501
|
|
|
501
502
|
const { rerender } = render(
|
|
502
503
|
<Component
|
|
@@ -544,8 +545,8 @@ describe.each( [
|
|
|
544
545
|
|
|
545
546
|
describe( 'Tab Activation', () => {
|
|
546
547
|
it( 'defaults to automatic tab activation (pointer clicks)', async () => {
|
|
547
|
-
const panelRenderFunction =
|
|
548
|
-
const mockOnSelect =
|
|
548
|
+
const panelRenderFunction = vi.fn();
|
|
549
|
+
const mockOnSelect = vi.fn();
|
|
549
550
|
|
|
550
551
|
render(
|
|
551
552
|
<Component
|
|
@@ -582,7 +583,7 @@ describe.each( [
|
|
|
582
583
|
} );
|
|
583
584
|
|
|
584
585
|
it( 'defaults to automatic tab activation (arrow keys)', async () => {
|
|
585
|
-
const mockOnSelect =
|
|
586
|
+
const mockOnSelect = vi.fn();
|
|
586
587
|
|
|
587
588
|
render(
|
|
588
589
|
<Component
|
|
@@ -619,7 +620,7 @@ describe.each( [
|
|
|
619
620
|
} );
|
|
620
621
|
|
|
621
622
|
it( 'wraps around the last/first tab when using arrow keys', async () => {
|
|
622
|
-
const mockOnSelect =
|
|
623
|
+
const mockOnSelect = vi.fn();
|
|
623
624
|
|
|
624
625
|
render(
|
|
625
626
|
<Component
|
|
@@ -656,7 +657,7 @@ describe.each( [
|
|
|
656
657
|
} );
|
|
657
658
|
|
|
658
659
|
it( 'should not move tab selection when pressing the up/down arrow keys, unless the orientation is changed to `vertical`', async () => {
|
|
659
|
-
const mockOnSelect =
|
|
660
|
+
const mockOnSelect = vi.fn();
|
|
660
661
|
|
|
661
662
|
const { rerender } = render(
|
|
662
663
|
<Component
|
|
@@ -743,7 +744,7 @@ describe.each( [
|
|
|
743
744
|
} );
|
|
744
745
|
|
|
745
746
|
it( 'should move focus on a tab even if disabled with arrow key, but not with pointer clicks', async () => {
|
|
746
|
-
const mockOnSelect =
|
|
747
|
+
const mockOnSelect = vi.fn();
|
|
747
748
|
|
|
748
749
|
render(
|
|
749
750
|
<Component
|
|
@@ -822,7 +823,7 @@ describe.each( [
|
|
|
822
823
|
} );
|
|
823
824
|
|
|
824
825
|
it( 'switches to manual tab activation when the `selectOnMove` prop is set to `false`', async () => {
|
|
825
|
-
const mockOnSelect =
|
|
826
|
+
const mockOnSelect = vi.fn();
|
|
826
827
|
|
|
827
828
|
render(
|
|
828
829
|
<Component
|