@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,9 +1,11 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { fireEvent, render, screen } from '@testing-library/react';
|
|
2
3
|
import { LEFT, RIGHT, UP, DOWN, HOME, END } from '@wordpress/keycodes';
|
|
3
4
|
import { forwardRef } from '@wordpress/element';
|
|
4
5
|
import TreeGrid from '..';
|
|
5
6
|
import TreeGridRow from '../row';
|
|
6
7
|
import TreeGridCell from '../cell';
|
|
8
|
+
globalThis.wpVitest.mockVisibleElements();
|
|
7
9
|
|
|
8
10
|
const TestButton = forwardRef(
|
|
9
11
|
(
|
|
@@ -29,7 +31,7 @@ describe( 'TreeGrid', () => {
|
|
|
29
31
|
|
|
30
32
|
describe( 'onExpandRow', () => {
|
|
31
33
|
it( 'should call onExpandRow when pressing Right Arrow on a collapsed row', () => {
|
|
32
|
-
const onExpandRow =
|
|
34
|
+
const onExpandRow = vi.fn();
|
|
33
35
|
|
|
34
36
|
render(
|
|
35
37
|
<TreeGrid onExpandRow={ onExpandRow }>
|
|
@@ -81,7 +83,7 @@ describe( 'TreeGrid', () => {
|
|
|
81
83
|
|
|
82
84
|
describe( 'onCollapseRow', () => {
|
|
83
85
|
it( 'should call onCollapseRow when pressing Left Arrow on an expanded row', () => {
|
|
84
|
-
const onCollapseRow =
|
|
86
|
+
const onCollapseRow = vi.fn();
|
|
85
87
|
|
|
86
88
|
render(
|
|
87
89
|
<TreeGrid onCollapseRow={ onCollapseRow }>
|
|
@@ -157,7 +159,7 @@ describe( 'TreeGrid', () => {
|
|
|
157
159
|
);
|
|
158
160
|
|
|
159
161
|
it( 'should call onFocusRow with event, start and end nodes when pressing Down Arrow', () => {
|
|
160
|
-
const onFocusRow =
|
|
162
|
+
const onFocusRow = vi.fn();
|
|
161
163
|
render( <TestTree onFocusRow={ onFocusRow } /> );
|
|
162
164
|
|
|
163
165
|
screen.getByText( 'Row 2' ).focus();
|
|
@@ -179,7 +181,7 @@ describe( 'TreeGrid', () => {
|
|
|
179
181
|
} );
|
|
180
182
|
|
|
181
183
|
it( 'should call onFocusRow with event, start and end nodes when pressing End', () => {
|
|
182
|
-
const onFocusRow =
|
|
184
|
+
const onFocusRow = vi.fn();
|
|
183
185
|
render( <TestTree onFocusRow={ onFocusRow } /> );
|
|
184
186
|
|
|
185
187
|
screen.getByText( 'Row 1' ).focus();
|
|
@@ -201,7 +203,7 @@ describe( 'TreeGrid', () => {
|
|
|
201
203
|
} );
|
|
202
204
|
|
|
203
205
|
it( 'should call onFocusRow with event, start and end nodes when pressing Up Arrow', () => {
|
|
204
|
-
const onFocusRow =
|
|
206
|
+
const onFocusRow = vi.fn();
|
|
205
207
|
render( <TestTree onFocusRow={ onFocusRow } /> );
|
|
206
208
|
|
|
207
209
|
screen.getByText( 'Row 2' ).focus();
|
|
@@ -223,7 +225,7 @@ describe( 'TreeGrid', () => {
|
|
|
223
225
|
} );
|
|
224
226
|
|
|
225
227
|
it( 'should call onFocusRow with event, start and end nodes when pressing Home', () => {
|
|
226
|
-
const onFocusRow =
|
|
228
|
+
const onFocusRow = vi.fn();
|
|
227
229
|
render( <TestTree onFocusRow={ onFocusRow } /> );
|
|
228
230
|
|
|
229
231
|
screen.getByText( 'Row 3' ).focus();
|
|
@@ -245,7 +247,7 @@ describe( 'TreeGrid', () => {
|
|
|
245
247
|
} );
|
|
246
248
|
|
|
247
249
|
it( 'should call onFocusRow when shift key is held', () => {
|
|
248
|
-
const onFocusRow =
|
|
250
|
+
const onFocusRow = vi.fn();
|
|
249
251
|
render( <TestTree onFocusRow={ onFocusRow } /> );
|
|
250
252
|
|
|
251
253
|
screen.getByText( 'Row 2' ).focus();
|
package/src/tree-grid/test/{roving-tab-index-item.tsx → roving-tab-index-item.jsdom.test.tsx}
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
1
2
|
import { render } from '@testing-library/react';
|
|
2
3
|
import { forwardRef } from '@wordpress/element';
|
|
3
4
|
import RovingTabIndex from '../roving-tab-index';
|
|
@@ -14,7 +15,9 @@ describe( 'RovingTabIndexItem', () => {
|
|
|
14
15
|
it( 'requires RovingTabIndex to be declared as a parent component somewhere in the component hierarchy', () => {
|
|
15
16
|
expect( () =>
|
|
16
17
|
render( <RovingTabIndexItem as={ TestButton } /> )
|
|
17
|
-
).toThrow(
|
|
18
|
+
).toThrow(
|
|
19
|
+
'TreeGridItem can only be rendered inside a TreeGrid component.'
|
|
20
|
+
);
|
|
18
21
|
expect( console ).toHaveErrored();
|
|
19
22
|
} );
|
|
20
23
|
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
/* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */
|
|
3
|
+
import { render, screen } from '@testing-library/react';
|
|
4
|
+
import { createPortal, useId } from '@wordpress/element';
|
|
5
|
+
import TreeGridRow from '../row';
|
|
6
|
+
import TreeGrid from '..';
|
|
7
|
+
|
|
8
|
+
describe( 'TreeGridRow', () => {
|
|
9
|
+
it( 'throws outside a treegrid', () => {
|
|
10
|
+
expect( () =>
|
|
11
|
+
render(
|
|
12
|
+
<table>
|
|
13
|
+
<tbody>
|
|
14
|
+
<TreeGridRow
|
|
15
|
+
level={ 1 }
|
|
16
|
+
positionInSet={ 1 }
|
|
17
|
+
setSize={ 1 }
|
|
18
|
+
>
|
|
19
|
+
<td>Test</td>
|
|
20
|
+
</TreeGridRow>
|
|
21
|
+
</tbody>
|
|
22
|
+
</table>
|
|
23
|
+
)
|
|
24
|
+
).toThrow(
|
|
25
|
+
'TreeGridRow must be rendered inside an element with role="treegrid".'
|
|
26
|
+
);
|
|
27
|
+
expect( console ).toHaveErrored();
|
|
28
|
+
} );
|
|
29
|
+
|
|
30
|
+
it( 'accepts a row explicitly owned by the treegrid', () => {
|
|
31
|
+
const portalTable = document.createElement( 'table' );
|
|
32
|
+
const portalBody = document.createElement( 'tbody' );
|
|
33
|
+
portalTable.append( portalBody );
|
|
34
|
+
document.body.append( portalTable );
|
|
35
|
+
|
|
36
|
+
function AriaOwnedRow() {
|
|
37
|
+
const rowId = useId();
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<TreeGrid aria-owns={ rowId }>
|
|
41
|
+
{ createPortal(
|
|
42
|
+
<TreeGridRow
|
|
43
|
+
id={ rowId }
|
|
44
|
+
level={ 1 }
|
|
45
|
+
positionInSet={ 1 }
|
|
46
|
+
setSize={ 1 }
|
|
47
|
+
>
|
|
48
|
+
<td>Test</td>
|
|
49
|
+
</TreeGridRow>,
|
|
50
|
+
portalBody
|
|
51
|
+
) }
|
|
52
|
+
</TreeGrid>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
render( <AriaOwnedRow /> );
|
|
58
|
+
|
|
59
|
+
expect( screen.getByRole( 'row' ) ).toHaveTextContent( 'Test' );
|
|
60
|
+
} finally {
|
|
61
|
+
portalTable.remove();
|
|
62
|
+
}
|
|
63
|
+
} );
|
|
64
|
+
|
|
65
|
+
it( 'accepts a row inside a rowgroup explicitly owned by the treegrid', () => {
|
|
66
|
+
const portalTable = document.createElement( 'table' );
|
|
67
|
+
document.body.append( portalTable );
|
|
68
|
+
|
|
69
|
+
function AriaOwnedRowGroup() {
|
|
70
|
+
const rowGroupId = useId();
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<TreeGrid aria-owns={ rowGroupId }>
|
|
74
|
+
{ createPortal(
|
|
75
|
+
<tbody id={ rowGroupId }>
|
|
76
|
+
<TreeGridRow
|
|
77
|
+
level={ 1 }
|
|
78
|
+
positionInSet={ 1 }
|
|
79
|
+
setSize={ 1 }
|
|
80
|
+
>
|
|
81
|
+
<td>Test</td>
|
|
82
|
+
</TreeGridRow>
|
|
83
|
+
</tbody>,
|
|
84
|
+
portalTable
|
|
85
|
+
) }
|
|
86
|
+
</TreeGrid>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
render( <AriaOwnedRowGroup /> );
|
|
92
|
+
|
|
93
|
+
expect( screen.getByRole( 'row' ) ).toHaveTextContent( 'Test' );
|
|
94
|
+
} finally {
|
|
95
|
+
portalTable.remove();
|
|
96
|
+
}
|
|
97
|
+
} );
|
|
98
|
+
|
|
99
|
+
it( 'renders a tr with support for level, positionInSet and setSize props', () => {
|
|
100
|
+
const { container } = render(
|
|
101
|
+
<table role="treegrid">
|
|
102
|
+
<tbody>
|
|
103
|
+
<TreeGridRow level={ 1 } positionInSet={ 1 } setSize={ 1 }>
|
|
104
|
+
<td>Test</td>
|
|
105
|
+
</TreeGridRow>
|
|
106
|
+
</tbody>
|
|
107
|
+
</table>
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
expect( container ).toMatchSnapshot();
|
|
111
|
+
} );
|
|
112
|
+
|
|
113
|
+
it( 'forwards other props to the rendered tr element', () => {
|
|
114
|
+
const { container } = render(
|
|
115
|
+
<table role="treegrid">
|
|
116
|
+
<tbody>
|
|
117
|
+
<TreeGridRow
|
|
118
|
+
className="my-row"
|
|
119
|
+
level={ 1 }
|
|
120
|
+
positionInSet={ 1 }
|
|
121
|
+
setSize={ 1 }
|
|
122
|
+
>
|
|
123
|
+
<td>Test</td>
|
|
124
|
+
</TreeGridRow>
|
|
125
|
+
</tbody>
|
|
126
|
+
</table>
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
expect( container ).toMatchSnapshot();
|
|
130
|
+
} );
|
|
131
|
+
} );
|
|
132
|
+
/* eslint-enable jsx-a11y/no-noninteractive-element-to-interactive-role */
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { useEffect } from '@wordpress/element';
|
|
2
|
+
|
|
3
|
+
const ROW_SELECTOR = 'tr:not([role]), [role="row"]';
|
|
4
|
+
const TREE_GRID_SELECTOR = '[role="treegrid"]';
|
|
5
|
+
|
|
6
|
+
function getAriaOwners( element: HTMLElement ) {
|
|
7
|
+
if ( ! element.id ) {
|
|
8
|
+
return [];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const escapedId = element.id
|
|
12
|
+
.replaceAll( '\\', '\\\\' )
|
|
13
|
+
.replaceAll( '"', '\\"' );
|
|
14
|
+
|
|
15
|
+
return Array.from(
|
|
16
|
+
element.ownerDocument.querySelectorAll< HTMLElement >(
|
|
17
|
+
`[aria-owns~="${ escapedId }"]`
|
|
18
|
+
)
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isContainedInOrOwnedBy(
|
|
23
|
+
element: HTMLElement,
|
|
24
|
+
selector: string,
|
|
25
|
+
visited = new Set< HTMLElement >()
|
|
26
|
+
): boolean {
|
|
27
|
+
if ( visited.has( element ) ) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
visited.add( element );
|
|
31
|
+
|
|
32
|
+
if ( element.parentElement?.closest( selector ) ) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const hasValidOwner = getAriaOwners( element ).some(
|
|
37
|
+
( owner ) =>
|
|
38
|
+
owner.matches( selector ) ||
|
|
39
|
+
isContainedInOrOwnedBy( owner, selector, visited )
|
|
40
|
+
);
|
|
41
|
+
if ( hasValidOwner ) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return element.parentElement
|
|
46
|
+
? isContainedInOrOwnedBy( element.parentElement, selector, visited )
|
|
47
|
+
: false;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function isOwnedByRowInTreeGrid(
|
|
51
|
+
element: HTMLElement,
|
|
52
|
+
visited = new Set< HTMLElement >()
|
|
53
|
+
): boolean {
|
|
54
|
+
if ( visited.has( element ) ) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
visited.add( element );
|
|
58
|
+
|
|
59
|
+
const hasValidOwner = getAriaOwners( element ).some( ( owner ) => {
|
|
60
|
+
const row = owner.matches( ROW_SELECTOR )
|
|
61
|
+
? owner
|
|
62
|
+
: owner.closest< HTMLElement >( ROW_SELECTOR );
|
|
63
|
+
|
|
64
|
+
return row
|
|
65
|
+
? isContainedInOrOwnedBy( row, TREE_GRID_SELECTOR )
|
|
66
|
+
: isOwnedByRowInTreeGrid( owner, visited );
|
|
67
|
+
} );
|
|
68
|
+
if ( hasValidOwner ) {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return element.parentElement
|
|
73
|
+
? isOwnedByRowInTreeGrid( element.parentElement, visited )
|
|
74
|
+
: false;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function useValidateTreeGridStructure(
|
|
78
|
+
componentName: 'TreeGridRow' | 'TreeGridCell',
|
|
79
|
+
elementRef: React.RefObject< HTMLElement >
|
|
80
|
+
) {
|
|
81
|
+
useEffect( () => {
|
|
82
|
+
const element = elementRef.current;
|
|
83
|
+
if ( ! element ) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const row =
|
|
88
|
+
element.parentElement?.closest< HTMLElement >( ROW_SELECTOR );
|
|
89
|
+
const hasValidStructure =
|
|
90
|
+
componentName === 'TreeGridRow'
|
|
91
|
+
? isContainedInOrOwnedBy( element, TREE_GRID_SELECTOR )
|
|
92
|
+
: ( row &&
|
|
93
|
+
isContainedInOrOwnedBy( row, TREE_GRID_SELECTOR ) ) ||
|
|
94
|
+
isOwnedByRowInTreeGrid( element );
|
|
95
|
+
|
|
96
|
+
if ( ! hasValidStructure ) {
|
|
97
|
+
throw new Error(
|
|
98
|
+
componentName === 'TreeGridRow'
|
|
99
|
+
? 'TreeGridRow must be rendered inside an element with role="treegrid".'
|
|
100
|
+
: 'TreeGridCell must be rendered as a cell in a row that belongs to an element with role="treegrid".'
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
}, [ componentName, elementRef ] );
|
|
104
|
+
}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
.is-line-clamp {
|
|
9
|
-
/* stylelint-disable-next-line plugin/use-logical-properties-and-values -- -webkit-line-clamp requires this legacy physical value. */
|
|
10
9
|
-webkit-box-orient: vertical;
|
|
11
10
|
-webkit-line-clamp: var(--wp-components-truncate-lines);
|
|
12
11
|
display: -webkit-box;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { render, screen } from '@testing-library/react';
|
|
2
3
|
import userEvent from '@testing-library/user-event';
|
|
3
4
|
import { useState } from '@wordpress/element';
|
|
4
5
|
import UnitControl from '..';
|
|
5
6
|
import { CSS_UNITS, parseQuantityAndUnitFromRawValue } from '../utils';
|
|
6
7
|
|
|
8
|
+
globalThis.wpVitest.mockMatchMedia();
|
|
9
|
+
|
|
7
10
|
const getInput = ( {
|
|
8
11
|
isInputTypeText = false,
|
|
9
12
|
}: {
|
|
@@ -125,7 +128,7 @@ describe( 'UnitControl', () => {
|
|
|
125
128
|
describe( 'Value', () => {
|
|
126
129
|
it( 'should update value on change', async () => {
|
|
127
130
|
const user = userEvent.setup();
|
|
128
|
-
const onChangeSpy =
|
|
131
|
+
const onChangeSpy = vi.fn();
|
|
129
132
|
|
|
130
133
|
render( <UnitControl value="50px" onChange={ onChangeSpy } /> );
|
|
131
134
|
|
|
@@ -146,7 +149,7 @@ describe( 'UnitControl', () => {
|
|
|
146
149
|
|
|
147
150
|
it( 'should increment value on UP press', async () => {
|
|
148
151
|
const user = userEvent.setup();
|
|
149
|
-
const onChangeSpy =
|
|
152
|
+
const onChangeSpy = vi.fn();
|
|
150
153
|
|
|
151
154
|
render( <UnitControl value="50px" onChange={ onChangeSpy } /> );
|
|
152
155
|
|
|
@@ -162,7 +165,7 @@ describe( 'UnitControl', () => {
|
|
|
162
165
|
|
|
163
166
|
it( 'should increment value on UP + SHIFT press, with step', async () => {
|
|
164
167
|
const user = userEvent.setup();
|
|
165
|
-
const onChangeSpy =
|
|
168
|
+
const onChangeSpy = vi.fn();
|
|
166
169
|
|
|
167
170
|
render( <UnitControl value="50px" onChange={ onChangeSpy } /> );
|
|
168
171
|
|
|
@@ -178,7 +181,7 @@ describe( 'UnitControl', () => {
|
|
|
178
181
|
|
|
179
182
|
it( 'should decrement value on DOWN press', async () => {
|
|
180
183
|
const user = userEvent.setup();
|
|
181
|
-
const onChangeSpy =
|
|
184
|
+
const onChangeSpy = vi.fn();
|
|
182
185
|
|
|
183
186
|
render( <UnitControl value={ 50 } onChange={ onChangeSpy } /> );
|
|
184
187
|
|
|
@@ -194,7 +197,7 @@ describe( 'UnitControl', () => {
|
|
|
194
197
|
|
|
195
198
|
it( 'should decrement value on DOWN + SHIFT press, with step', async () => {
|
|
196
199
|
const user = userEvent.setup();
|
|
197
|
-
const onChangeSpy =
|
|
200
|
+
const onChangeSpy = vi.fn();
|
|
198
201
|
|
|
199
202
|
render( <UnitControl value={ 50 } onChange={ onChangeSpy } /> );
|
|
200
203
|
|
|
@@ -210,7 +213,7 @@ describe( 'UnitControl', () => {
|
|
|
210
213
|
|
|
211
214
|
it( 'should cancel change when ESCAPE key is pressed', async () => {
|
|
212
215
|
const user = userEvent.setup();
|
|
213
|
-
const onChangeSpy =
|
|
216
|
+
const onChangeSpy = vi.fn();
|
|
214
217
|
|
|
215
218
|
render(
|
|
216
219
|
<UnitControl
|
|
@@ -237,8 +240,8 @@ describe( 'UnitControl', () => {
|
|
|
237
240
|
it( 'should run onBlur callback when quantity input is blurred', async () => {
|
|
238
241
|
const user = userEvent.setup();
|
|
239
242
|
|
|
240
|
-
const onChangeSpy =
|
|
241
|
-
const onBlurSpy =
|
|
243
|
+
const onChangeSpy = vi.fn();
|
|
244
|
+
const onBlurSpy = vi.fn();
|
|
242
245
|
|
|
243
246
|
render(
|
|
244
247
|
<UnitControl
|
|
@@ -267,7 +270,7 @@ describe( 'UnitControl', () => {
|
|
|
267
270
|
it( 'should invoke onChange when isPressEnterToChange is true and the input is blurred with an uncommitted value', async () => {
|
|
268
271
|
const user = userEvent.setup();
|
|
269
272
|
|
|
270
|
-
const onChangeSpy =
|
|
273
|
+
const onChangeSpy = vi.fn();
|
|
271
274
|
|
|
272
275
|
render(
|
|
273
276
|
<UnitControl
|
|
@@ -299,7 +302,7 @@ describe( 'UnitControl', () => {
|
|
|
299
302
|
it( 'should update value correctly when typed and blurred when a single unit is passed', async () => {
|
|
300
303
|
const user = userEvent.setup();
|
|
301
304
|
|
|
302
|
-
const onChangeSpy =
|
|
305
|
+
const onChangeSpy = vi.fn();
|
|
303
306
|
render(
|
|
304
307
|
<>
|
|
305
308
|
<button>Click me</button>
|
|
@@ -332,8 +335,8 @@ describe( 'UnitControl', () => {
|
|
|
332
335
|
describe( 'Unit', () => {
|
|
333
336
|
it( 'should update unit value on change', async () => {
|
|
334
337
|
const user = userEvent.setup();
|
|
335
|
-
const onChangeSpy =
|
|
336
|
-
const onUnitChangeSpy =
|
|
338
|
+
const onChangeSpy = vi.fn();
|
|
339
|
+
const onUnitChangeSpy = vi.fn();
|
|
337
340
|
|
|
338
341
|
render(
|
|
339
342
|
<UnitControl
|
|
@@ -381,7 +384,7 @@ describe( 'UnitControl', () => {
|
|
|
381
384
|
|
|
382
385
|
it( 'should reset value on unit change, if unit has default value', async () => {
|
|
383
386
|
const user = userEvent.setup();
|
|
384
|
-
const onChangeSpy =
|
|
387
|
+
const onChangeSpy = vi.fn();
|
|
385
388
|
|
|
386
389
|
const units = [
|
|
387
390
|
{ value: 'pt', label: 'pt', default: 25 },
|
|
@@ -417,7 +420,7 @@ describe( 'UnitControl', () => {
|
|
|
417
420
|
|
|
418
421
|
it( 'should not reset value on unit change, if disabled', async () => {
|
|
419
422
|
const user = userEvent.setup();
|
|
420
|
-
const onChangeSpy =
|
|
423
|
+
const onChangeSpy = vi.fn();
|
|
421
424
|
|
|
422
425
|
const units = [
|
|
423
426
|
{ value: 'pt', label: 'pt', default: 25 },
|
|
@@ -453,7 +456,7 @@ describe( 'UnitControl', () => {
|
|
|
453
456
|
|
|
454
457
|
it( 'should set correct unit if single units', async () => {
|
|
455
458
|
const user = userEvent.setup();
|
|
456
|
-
const onChangeSpy =
|
|
459
|
+
const onChangeSpy = vi.fn();
|
|
457
460
|
|
|
458
461
|
render(
|
|
459
462
|
<UnitControl
|
|
@@ -530,8 +533,8 @@ describe( 'UnitControl', () => {
|
|
|
530
533
|
it( 'should run onBlur callback when the unit select is blurred', async () => {
|
|
531
534
|
const user = userEvent.setup();
|
|
532
535
|
|
|
533
|
-
const onUnitChangeSpy =
|
|
534
|
-
const onBlurSpy =
|
|
536
|
+
const onUnitChangeSpy = vi.fn();
|
|
537
|
+
const onBlurSpy = vi.fn();
|
|
535
538
|
|
|
536
539
|
render(
|
|
537
540
|
<UnitControl
|
|
@@ -600,8 +603,8 @@ describe( 'UnitControl', () => {
|
|
|
600
603
|
'should move focus from the input to the unit select when typing the first character of %p',
|
|
601
604
|
async ( testUnit ) => {
|
|
602
605
|
const user = userEvent.setup();
|
|
603
|
-
const onChangeSpy =
|
|
604
|
-
const onUnitChangeSpy =
|
|
606
|
+
const onChangeSpy = vi.fn();
|
|
607
|
+
const onUnitChangeSpy = vi.fn();
|
|
605
608
|
|
|
606
609
|
render(
|
|
607
610
|
<UnitControl
|
|
@@ -72,22 +72,23 @@ const THEME = {
|
|
|
72
72
|
},
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
-
/* eslint-enable @wordpress/no-ds-tokens */
|
|
76
|
-
|
|
77
75
|
const UI = {
|
|
78
76
|
background: THEME.background,
|
|
79
77
|
backgroundDisabled: THEME.gray[ 100 ],
|
|
80
78
|
border: THEME.gray[ 600 ],
|
|
81
79
|
borderHover: THEME.gray[ 700 ],
|
|
82
80
|
borderFocus: THEME.accent,
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
// The gray ramp above has no disabled step to map these through.
|
|
82
|
+
borderDisabled: `var(--wpds-color-stroke-interactive-neutral-disabled, #dbdbdb)`,
|
|
83
|
+
textDisabled: `var(--wpds-color-foreground-interactive-neutral-disabled, #8d8d8d)`,
|
|
85
84
|
|
|
86
85
|
// Matches @wordpress/base-styles
|
|
87
86
|
darkGrayPlaceholder: `color-mix(in srgb, ${ THEME.foreground }, transparent 38%)`,
|
|
88
87
|
lightGrayPlaceholder: `color-mix(in srgb, ${ THEME.background }, transparent 35%)`,
|
|
89
88
|
};
|
|
90
89
|
|
|
90
|
+
/* eslint-enable @wordpress/no-ds-tokens */
|
|
91
|
+
|
|
91
92
|
export const COLORS = Object.freeze( {
|
|
92
93
|
/**
|
|
93
94
|
* The main gray color object.
|
package/src/utils/hooks/test/{use-controlled-state.js → use-controlled-state.jsdom.test.tsx}
RENAMED
|
@@ -1,18 +1,33 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { render, fireEvent, screen } from '@testing-library/react';
|
|
3
|
+
import type { ChangeEvent } from 'react';
|
|
2
4
|
import useControlledState from '../use-controlled-state';
|
|
3
5
|
|
|
4
6
|
const noop = () => {};
|
|
5
7
|
|
|
6
8
|
describe( 'hooks', () => {
|
|
7
|
-
const getInput = () => screen.getByTestId( 'input' );
|
|
9
|
+
const getInput = () => screen.getByTestId< HTMLInputElement >( 'input' );
|
|
8
10
|
|
|
9
11
|
describe( 'useControlledState', () => {
|
|
10
|
-
|
|
12
|
+
type ExampleProps = {
|
|
13
|
+
initial?: string;
|
|
14
|
+
value?: string;
|
|
15
|
+
onChange?: ( value: string ) => void;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const Example = ( {
|
|
19
|
+
initial,
|
|
20
|
+
value: valueProp,
|
|
21
|
+
onChange = noop,
|
|
22
|
+
}: ExampleProps ) => {
|
|
11
23
|
const [ state, setState ] = useControlledState( valueProp, {
|
|
12
24
|
initial,
|
|
25
|
+
fallback: '',
|
|
13
26
|
} );
|
|
14
27
|
|
|
15
|
-
const handleOnChange = (
|
|
28
|
+
const handleOnChange = (
|
|
29
|
+
event: ChangeEvent< HTMLInputElement >
|
|
30
|
+
) => {
|
|
16
31
|
const nextValue = event.target.value;
|
|
17
32
|
setState( nextValue );
|
|
18
33
|
onChange( nextValue );
|
|
@@ -29,7 +44,7 @@ describe( 'hooks', () => {
|
|
|
29
44
|
};
|
|
30
45
|
|
|
31
46
|
it( 'should use incoming prop as state on initial render', () => {
|
|
32
|
-
const spy =
|
|
47
|
+
const spy = vi.fn();
|
|
33
48
|
render( <Example value="Hello" onChange={ spy } /> );
|
|
34
49
|
|
|
35
50
|
const input = getInput();
|
|
@@ -39,7 +54,7 @@ describe( 'hooks', () => {
|
|
|
39
54
|
} );
|
|
40
55
|
|
|
41
56
|
it( 'should update rendered value onChange', () => {
|
|
42
|
-
const spy =
|
|
57
|
+
const spy = vi.fn();
|
|
43
58
|
render( <Example onChange={ spy } /> );
|
|
44
59
|
|
|
45
60
|
const input = getInput();
|
|
@@ -67,7 +82,7 @@ describe( 'hooks', () => {
|
|
|
67
82
|
* be updated if a new incoming prop value is changed.
|
|
68
83
|
*/
|
|
69
84
|
it( 'should update changed value with new incoming prop value', () => {
|
|
70
|
-
const spy =
|
|
85
|
+
const spy = vi.fn();
|
|
71
86
|
|
|
72
87
|
/**
|
|
73
88
|
* The <input /> value starts with "Hello", since it is passed down
|
|
@@ -97,7 +112,7 @@ describe( 'hooks', () => {
|
|
|
97
112
|
} );
|
|
98
113
|
|
|
99
114
|
it( 'should render with initial value and be controllable', () => {
|
|
100
|
-
const spy =
|
|
115
|
+
const spy = vi.fn();
|
|
101
116
|
// Input starts off as being uncontrolled / self-managed.
|
|
102
117
|
const { rerender } = render(
|
|
103
118
|
<Example onChange={ spy } initial="Hello" />
|
package/src/utils/hooks/test/{use-controlled-value.js → use-controlled-value.jsdom.test.tsx}
RENAMED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { fireEvent, render, screen } from '@testing-library/react';
|
|
2
3
|
import { useControlledValue } from '../use-controlled-value';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
type InputProps = Parameters< typeof useControlledValue< string > >[ 0 ];
|
|
6
|
+
|
|
7
|
+
function Input( props: InputProps ) {
|
|
5
8
|
const [ value, setValue ] = useControlledValue( props );
|
|
6
9
|
return (
|
|
7
10
|
<input
|
|
@@ -32,7 +35,7 @@ describe( 'useControlledValue', () => {
|
|
|
32
35
|
} );
|
|
33
36
|
|
|
34
37
|
it( 'should call onChange only when there is no value being passed in', () => {
|
|
35
|
-
const onChange =
|
|
38
|
+
const onChange = vi.fn();
|
|
36
39
|
render( <Input defaultValue="WordPress.org" onChange={ onChange } /> );
|
|
37
40
|
|
|
38
41
|
expect( getInput() ).toHaveValue( 'WordPress.org' );
|
|
@@ -44,7 +47,7 @@ describe( 'useControlledValue', () => {
|
|
|
44
47
|
} );
|
|
45
48
|
|
|
46
49
|
it( 'should call onChange when there is a value passed in', () => {
|
|
47
|
-
const onChange =
|
|
50
|
+
const onChange = vi.fn();
|
|
48
51
|
const { rerender } = render(
|
|
49
52
|
<Input
|
|
50
53
|
defaultValue="WordPress.org"
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
// eslint-disable-next-line no-restricted-imports
|
|
2
3
|
import { cx as innerCx } from '@emotion/css';
|
|
3
4
|
import { insertStyles } from '@emotion/utils';
|
|
@@ -6,15 +7,17 @@ import { css, CacheProvider } from '@emotion/react';
|
|
|
6
7
|
import createCache from '@emotion/cache';
|
|
7
8
|
import { useCx } from '..';
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
cx:
|
|
10
|
+
vi.mock( import( '@emotion/css' ), () => ( {
|
|
11
|
+
cx: vi.fn(),
|
|
11
12
|
} ) );
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
insertStyles:
|
|
14
|
+
vi.mock( import( '@emotion/utils' ), () => ( {
|
|
15
|
+
insertStyles: vi.fn(),
|
|
15
16
|
} ) );
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
type CxArg = Parameters< ReturnType< typeof useCx > >[ number ];
|
|
19
|
+
|
|
20
|
+
function Example( { args }: { args: CxArg[] } ) {
|
|
18
21
|
const cx = useCx();
|
|
19
22
|
|
|
20
23
|
return <div className={ cx( ...args ) } />;
|
package/src/utils/test/colors.js
CHANGED
package/src/utils/test/math.js
CHANGED
package/src/utils/test/rtl.js
CHANGED