@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,3 +1,4 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { render, screen, fireEvent } from '@testing-library/react';
|
|
2
3
|
import ContentEditableControl from '..';
|
|
3
4
|
|
|
@@ -142,15 +143,15 @@ describe( 'ContentEditableControl', () => {
|
|
|
142
143
|
it( 'forwards its ref to the contenteditable element', () => {
|
|
143
144
|
// The rich-text wiring (the `useRichText` ref, event-listener refs,
|
|
144
145
|
// an anchor ref, …) is injected through this forwarded ref.
|
|
145
|
-
const ref =
|
|
146
|
+
const ref = vi.fn();
|
|
146
147
|
render( <ContentEditableControl label="Note" ref={ ref } /> );
|
|
147
148
|
|
|
148
149
|
expect( ref ).toHaveBeenCalledWith( screen.getByRole( 'textbox' ) );
|
|
149
150
|
} );
|
|
150
151
|
|
|
151
152
|
it( 'calls consumer-supplied focus and blur handlers', () => {
|
|
152
|
-
const onFocus =
|
|
153
|
-
const onBlur =
|
|
153
|
+
const onFocus = vi.fn();
|
|
154
|
+
const onBlur = vi.fn();
|
|
154
155
|
render(
|
|
155
156
|
<ContentEditableControl
|
|
156
157
|
label="Field"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import deepmerge from 'deepmerge';
|
|
2
2
|
import fastDeepEqual from 'fast-deep-equal/es6/index.js';
|
|
3
3
|
import { isPlainObject } from 'is-plain-object';
|
|
4
|
+
import type { ReactNode } from 'react';
|
|
4
5
|
import {
|
|
5
6
|
createContext,
|
|
6
7
|
useContext,
|
|
@@ -11,9 +12,12 @@ import {
|
|
|
11
12
|
import warn from '@wordpress/warning';
|
|
12
13
|
import { useUpdateEffect } from '../utils';
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
type ContextSystemValue = Record<
|
|
16
|
+
string,
|
|
17
|
+
Record< string, unknown > | undefined
|
|
18
|
+
>;
|
|
19
|
+
|
|
20
|
+
export const ComponentsContext = createContext< ContextSystemValue >( {} );
|
|
17
21
|
ComponentsContext.displayName = 'ComponentsContext';
|
|
18
22
|
|
|
19
23
|
export const useComponentsContext = () => useContext( ComponentsContext );
|
|
@@ -27,7 +31,11 @@ export const useComponentsContext = () => useContext( ComponentsContext );
|
|
|
27
31
|
* @param {Record<string, any>} props.value
|
|
28
32
|
* @return {Record<string, any>} The consolidated value.
|
|
29
33
|
*/
|
|
30
|
-
function useContextSystemBridge( {
|
|
34
|
+
function useContextSystemBridge( {
|
|
35
|
+
value,
|
|
36
|
+
}: {
|
|
37
|
+
value?: ContextSystemValue;
|
|
38
|
+
} ): ContextSystemValue {
|
|
31
39
|
const parentContext = useComponentsContext();
|
|
32
40
|
|
|
33
41
|
const valueRef = useRef( value );
|
|
@@ -82,7 +90,13 @@ function useContextSystemBridge( { value } ) {
|
|
|
82
90
|
* @param {T} options.value Props to render into connected components.
|
|
83
91
|
* @return {React.JSX.Element} A Provider wrapped component.
|
|
84
92
|
*/
|
|
85
|
-
const BaseContextSystemProvider = ( {
|
|
93
|
+
const BaseContextSystemProvider = ( {
|
|
94
|
+
children,
|
|
95
|
+
value,
|
|
96
|
+
}: {
|
|
97
|
+
children: ReactNode;
|
|
98
|
+
value?: ContextSystemValue;
|
|
99
|
+
} ) => {
|
|
86
100
|
const contextValue = useContextSystemBridge( { value } );
|
|
87
101
|
|
|
88
102
|
return (
|
package/src/context/stories/{ComponentsProvider.stories.jsx → ComponentsProvider.stories.tsx}
RENAMED
|
@@ -4,7 +4,7 @@ import { View } from '../../view';
|
|
|
4
4
|
import { Text } from '../../text';
|
|
5
5
|
import { ContextSystemProvider } from '../index';
|
|
6
6
|
|
|
7
|
-
const SomeContext = createContext();
|
|
7
|
+
const SomeContext = createContext< number | undefined >( undefined );
|
|
8
8
|
const useSomeContext = () => useContext( SomeContext );
|
|
9
9
|
|
|
10
10
|
export default {
|
|
@@ -39,7 +39,7 @@ const innerContext = {
|
|
|
39
39
|
|
|
40
40
|
const InnerContent = memo( () => {
|
|
41
41
|
const state = useSomeContext();
|
|
42
|
-
const isEven = state % 2 === 0;
|
|
42
|
+
const isEven = state !== undefined && state % 2 === 0;
|
|
43
43
|
return (
|
|
44
44
|
<View style={ { background: isEven ? 'red' : 'initial' } }>
|
|
45
45
|
<Text>Card (inside innerContext)</Text>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { describe, it } from 'vitest';
|
|
1
2
|
import type { ForwardedRef } from 'react';
|
|
2
3
|
import { contextConnect, contextConnectWithoutRef } from '../context-connect';
|
|
3
4
|
import type { WordPressComponentProps } from '../wordpress-component';
|
|
4
5
|
|
|
5
6
|
// Static TypeScript tests
|
|
6
|
-
/* eslint-disable jest/expect-expect */
|
|
7
7
|
describe( 'ref forwarding', () => {
|
|
8
8
|
const ComponentWithRef = (
|
|
9
9
|
props: WordPressComponentProps< {}, 'div' >,
|
|
@@ -47,4 +47,3 @@ describe( 'ref forwarding', () => {
|
|
|
47
47
|
<NoRef foo={ null } />;
|
|
48
48
|
} );
|
|
49
49
|
} );
|
|
50
|
-
/* eslint-enable jest/expect-expect */
|
package/src/context/test/{context-system-provider.js → context-system-provider.jsdom.test.tsx}
RENAMED
|
@@ -1,41 +1,86 @@
|
|
|
1
|
+
import { describe, expect, test, vi } from 'vitest';
|
|
1
2
|
import { render, screen } from '@testing-library/react';
|
|
2
3
|
import styled from '@emotion/styled';
|
|
4
|
+
import type {
|
|
5
|
+
ComponentPropsWithoutRef,
|
|
6
|
+
ForwardedRef,
|
|
7
|
+
ReactElement,
|
|
8
|
+
ReactNode,
|
|
9
|
+
} from 'react';
|
|
3
10
|
import { cloneElement } from '@wordpress/element';
|
|
11
|
+
import warn from '@wordpress/warning';
|
|
4
12
|
import { contextConnect } from '../context-connect';
|
|
5
13
|
import { ContextSystemProvider } from '../context-system-provider';
|
|
6
14
|
import { useContextSystem } from '../use-context-system';
|
|
7
15
|
|
|
16
|
+
vi.mock( import( '@wordpress/warning' ), () => ( { default: vi.fn() } ) );
|
|
17
|
+
|
|
8
18
|
const View = styled.div``;
|
|
9
19
|
|
|
20
|
+
type TestComponentProps = ComponentPropsWithoutRef< 'div' > & {
|
|
21
|
+
quote?: ReactNode;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
function TestComponent(
|
|
25
|
+
props: TestComponentProps,
|
|
26
|
+
ref: ForwardedRef< HTMLDivElement >
|
|
27
|
+
) {
|
|
28
|
+
return <View { ...useContextSystem( props, 'Component' ) } ref={ ref } />;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function TestComponentWithQuote(
|
|
32
|
+
props: TestComponentProps,
|
|
33
|
+
ref: ForwardedRef< HTMLDivElement >
|
|
34
|
+
) {
|
|
35
|
+
const { quote, ...otherProps } = useContextSystem( props, 'Component' );
|
|
36
|
+
return (
|
|
37
|
+
<View { ...otherProps } ref={ ref }>
|
|
38
|
+
{ quote }
|
|
39
|
+
</View>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
10
43
|
describe( 'props', () => {
|
|
11
|
-
test( 'should
|
|
12
|
-
|
|
13
|
-
|
|
44
|
+
test( 'should not warn when rerendered without a value', () => {
|
|
45
|
+
vi.mocked( warn ).mockClear();
|
|
46
|
+
|
|
47
|
+
const { rerender } = render(
|
|
48
|
+
<ContextSystemProvider>
|
|
49
|
+
<div />
|
|
50
|
+
</ContextSystemProvider>
|
|
14
51
|
);
|
|
15
|
-
|
|
16
|
-
|
|
52
|
+
|
|
53
|
+
rerender(
|
|
17
54
|
<ContextSystemProvider>
|
|
18
|
-
<
|
|
55
|
+
<div />
|
|
19
56
|
</ContextSystemProvider>
|
|
20
57
|
);
|
|
21
58
|
|
|
22
|
-
expect(
|
|
59
|
+
expect( warn ).not.toHaveBeenCalled();
|
|
23
60
|
} );
|
|
24
61
|
|
|
25
|
-
test( 'should render
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<View { ...otherProps } ref={ ref }>
|
|
33
|
-
{ quote }
|
|
34
|
-
</View>
|
|
35
|
-
);
|
|
36
|
-
};
|
|
62
|
+
test( 'should render correctly', () => {
|
|
63
|
+
const ConnectedComponent = contextConnect( TestComponent, 'Component' );
|
|
64
|
+
render(
|
|
65
|
+
<ContextSystemProvider>
|
|
66
|
+
<ConnectedComponent data-testid="component" />
|
|
67
|
+
</ContextSystemProvider>
|
|
68
|
+
);
|
|
37
69
|
|
|
38
|
-
|
|
70
|
+
expect( screen.getByTestId( 'component' ) ).toHaveClass(
|
|
71
|
+
'components-component'
|
|
72
|
+
);
|
|
73
|
+
expect( screen.getByTestId( 'component' ) ).toHaveAttribute(
|
|
74
|
+
'data-wp-component',
|
|
75
|
+
'Component'
|
|
76
|
+
);
|
|
77
|
+
} );
|
|
78
|
+
|
|
79
|
+
test( 'should render context props', () => {
|
|
80
|
+
const ConnectedComponent = contextConnect(
|
|
81
|
+
TestComponentWithQuote,
|
|
82
|
+
'Component'
|
|
83
|
+
);
|
|
39
84
|
|
|
40
85
|
const contextValue = {
|
|
41
86
|
Component: {
|
|
@@ -43,30 +88,20 @@ describe( 'props', () => {
|
|
|
43
88
|
},
|
|
44
89
|
};
|
|
45
90
|
|
|
46
|
-
|
|
91
|
+
render(
|
|
47
92
|
<ContextSystemProvider value={ contextValue }>
|
|
48
93
|
<ConnectedComponent />
|
|
49
94
|
</ContextSystemProvider>
|
|
50
95
|
);
|
|
51
96
|
|
|
52
|
-
expect( container ).toMatchSnapshot();
|
|
53
97
|
expect( screen.getByText( 'Code is Poetry' ) ).toBeVisible();
|
|
54
98
|
} );
|
|
55
99
|
|
|
56
100
|
test( 'should render _override props', () => {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
);
|
|
62
|
-
return (
|
|
63
|
-
<View { ...otherProps } ref={ ref }>
|
|
64
|
-
{ quote }
|
|
65
|
-
</View>
|
|
66
|
-
);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const ConnectedComponent = contextConnect( Component, 'Component' );
|
|
101
|
+
const ConnectedComponent = contextConnect(
|
|
102
|
+
TestComponentWithQuote,
|
|
103
|
+
'Component'
|
|
104
|
+
);
|
|
70
105
|
|
|
71
106
|
const contextValue = {
|
|
72
107
|
Component: {
|
|
@@ -76,7 +111,7 @@ describe( 'props', () => {
|
|
|
76
111
|
},
|
|
77
112
|
};
|
|
78
113
|
|
|
79
|
-
|
|
114
|
+
render(
|
|
80
115
|
<>
|
|
81
116
|
<ContextSystemProvider value={ contextValue }>
|
|
82
117
|
<ConnectedComponent
|
|
@@ -87,8 +122,6 @@ describe( 'props', () => {
|
|
|
87
122
|
</>
|
|
88
123
|
);
|
|
89
124
|
|
|
90
|
-
expect( container ).toMatchSnapshot();
|
|
91
|
-
|
|
92
125
|
const element = screen.getByText( 'Code is Poetry' );
|
|
93
126
|
expect( element ).toBeVisible();
|
|
94
127
|
expect( element ).toHaveClass( 'test-component' );
|
|
@@ -99,10 +132,7 @@ describe( 'props', () => {
|
|
|
99
132
|
|
|
100
133
|
describe( 'children', () => {
|
|
101
134
|
test( 'should pass through children', () => {
|
|
102
|
-
const
|
|
103
|
-
<View { ...useContextSystem( props, 'Component' ) } ref={ ref } />
|
|
104
|
-
);
|
|
105
|
-
const ConnectedComponent = contextConnect( Component, 'Component' );
|
|
135
|
+
const ConnectedComponent = contextConnect( TestComponent, 'Component' );
|
|
106
136
|
|
|
107
137
|
render(
|
|
108
138
|
<ContextSystemProvider>
|
|
@@ -114,13 +144,11 @@ describe( 'children', () => {
|
|
|
114
144
|
} );
|
|
115
145
|
|
|
116
146
|
test( 'should not accept children via `context`', () => {
|
|
117
|
-
const
|
|
118
|
-
<View { ...useContextSystem( props, 'Component' ) } ref={ ref } />
|
|
119
|
-
);
|
|
120
|
-
const ConnectedComponent = contextConnect( Component, 'Component' );
|
|
147
|
+
const ConnectedComponent = contextConnect( TestComponent, 'Component' );
|
|
121
148
|
|
|
122
149
|
render(
|
|
123
150
|
<ContextSystemProvider
|
|
151
|
+
// @ts-expect-error Verify that the unsupported `context` prop is ignored.
|
|
124
152
|
context={ { Component: { children: 'Override' } } }
|
|
125
153
|
>
|
|
126
154
|
<ConnectedComponent />
|
|
@@ -132,13 +160,18 @@ describe( 'children', () => {
|
|
|
132
160
|
|
|
133
161
|
// This matches the behavior for normal, non-context-connected components.
|
|
134
162
|
test( 'should not override inherent children', () => {
|
|
135
|
-
const Component = (
|
|
163
|
+
const Component = (
|
|
164
|
+
props: TestComponentProps,
|
|
165
|
+
ref: ForwardedRef< HTMLDivElement >
|
|
166
|
+
) => (
|
|
136
167
|
<View { ...useContextSystem( props, 'Component' ) } ref={ ref }>
|
|
137
168
|
Inherent
|
|
138
169
|
</View>
|
|
139
170
|
);
|
|
140
171
|
const ConnectedComponent = contextConnect( Component, 'Component' );
|
|
141
|
-
const NormalComponent = (
|
|
172
|
+
const NormalComponent = (
|
|
173
|
+
props: ComponentPropsWithoutRef< 'div' >
|
|
174
|
+
) => <div { ...props }>Inherent</div>;
|
|
142
175
|
|
|
143
176
|
render(
|
|
144
177
|
<ContextSystemProvider>
|
|
@@ -153,12 +186,21 @@ describe( 'children', () => {
|
|
|
153
186
|
} );
|
|
154
187
|
|
|
155
188
|
describe( 'when connected component does a `cloneElement()`', () => {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
189
|
+
type CloneComponentProps = {
|
|
190
|
+
content: ReactElement;
|
|
191
|
+
children?: ReactNode;
|
|
192
|
+
className?: string;
|
|
193
|
+
};
|
|
194
|
+
const ComponentThatClones = (
|
|
195
|
+
{ content, ...props }: CloneComponentProps,
|
|
196
|
+
ref: ForwardedRef< HTMLElement >
|
|
197
|
+
) => {
|
|
198
|
+
void ref;
|
|
199
|
+
return cloneElement(
|
|
159
200
|
content,
|
|
160
201
|
useContextSystem( props, 'ComponentThatClones' )
|
|
161
202
|
);
|
|
203
|
+
};
|
|
162
204
|
const ConnectedComponentThatClones = contextConnect(
|
|
163
205
|
ComponentThatClones,
|
|
164
206
|
'ComponentThatClones'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { describe, it } from 'vitest';
|
|
1
2
|
import type { ForwardedRef } from 'react';
|
|
2
3
|
import { forwardRef } from '@wordpress/element';
|
|
3
4
|
import type { WordPressComponentProps } from '../wordpress-component';
|
|
4
5
|
|
|
5
6
|
// Static TypeScript checks
|
|
6
|
-
/* eslint-disable jest/expect-expect */
|
|
7
7
|
describe( 'WordPressComponentProps', () => {
|
|
8
8
|
it( 'should not accept a ref', () => {
|
|
9
9
|
const Foo = ( props: WordPressComponentProps< {}, 'div' > ) => (
|
|
@@ -24,4 +24,3 @@ describe( 'WordPressComponentProps', () => {
|
|
|
24
24
|
<ForwardedFoo ref={ null } />;
|
|
25
25
|
} );
|
|
26
26
|
} );
|
|
27
|
-
/* eslint-enable jest/expect-expect */
|
|
@@ -33,11 +33,20 @@ export function useContextSystem( props, namespace ) {
|
|
|
33
33
|
...getNamespace( namespace ),
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
const { _overrides
|
|
36
|
+
const { _overrides, ...otherContextProps } = contextProps;
|
|
37
|
+
/** @type {Record<string, unknown>} */
|
|
38
|
+
const overrideProps = /** @type {Record<string, unknown>} */ ( _overrides );
|
|
37
39
|
|
|
38
40
|
const initialMergedProps = Object.entries( otherContextProps ).length
|
|
39
41
|
? Object.assign( {}, otherContextProps, props )
|
|
40
42
|
: props;
|
|
43
|
+
/**
|
|
44
|
+
* @type {P & {
|
|
45
|
+
* children?: React.ReactNode,
|
|
46
|
+
* renderChildren?: (props: P) => React.ReactNode
|
|
47
|
+
* }}
|
|
48
|
+
*/
|
|
49
|
+
const propsWithChildren = initialMergedProps;
|
|
41
50
|
|
|
42
51
|
const cx = useCx();
|
|
43
52
|
|
|
@@ -48,9 +57,9 @@ export function useContextSystem( props, namespace ) {
|
|
|
48
57
|
|
|
49
58
|
// Provides the ability to customize the render of the component.
|
|
50
59
|
const rendered =
|
|
51
|
-
typeof
|
|
52
|
-
?
|
|
53
|
-
:
|
|
60
|
+
typeof propsWithChildren.renderChildren === 'function'
|
|
61
|
+
? propsWithChildren.renderChildren( initialMergedProps )
|
|
62
|
+
: propsWithChildren.children;
|
|
54
63
|
|
|
55
64
|
for ( const key in initialMergedProps ) {
|
|
56
65
|
// @ts-expect-error A string key cannot index the merged props type.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { getHorizontalRelativeGradientPosition } from '../utils';
|
|
2
3
|
|
|
3
4
|
describe( 'getHorizontalRelativeGradientPosition', () => {
|
|
4
5
|
it( 'should return relative percentage position', () => {
|
|
5
|
-
|
|
6
|
+
vi.spyOn(
|
|
6
7
|
window.HTMLElement.prototype,
|
|
7
8
|
'getBoundingClientRect'
|
|
8
9
|
).mockImplementationOnce(
|
|
@@ -20,7 +21,7 @@ describe( 'getHorizontalRelativeGradientPosition', () => {
|
|
|
20
21
|
} );
|
|
21
22
|
|
|
22
23
|
it( 'should subtract the x position of the container from the mouse position', () => {
|
|
23
|
-
|
|
24
|
+
vi.spyOn(
|
|
24
25
|
window.HTMLElement.prototype,
|
|
25
26
|
'getBoundingClientRect'
|
|
26
27
|
).mockImplementationOnce(
|
|
@@ -38,7 +39,7 @@ describe( 'getHorizontalRelativeGradientPosition', () => {
|
|
|
38
39
|
} );
|
|
39
40
|
|
|
40
41
|
it( 'should clamp to a whole percentage number', () => {
|
|
41
|
-
|
|
42
|
+
vi.spyOn(
|
|
42
43
|
window.HTMLElement.prototype,
|
|
43
44
|
'getBoundingClientRect'
|
|
44
45
|
).mockImplementationOnce(
|
|
@@ -57,7 +58,7 @@ describe( 'getHorizontalRelativeGradientPosition', () => {
|
|
|
57
58
|
} );
|
|
58
59
|
|
|
59
60
|
it( 'should clamp to zero when mouse position is less the x position', () => {
|
|
60
|
-
|
|
61
|
+
vi.spyOn(
|
|
61
62
|
window.HTMLElement.prototype,
|
|
62
63
|
'getBoundingClientRect'
|
|
63
64
|
).mockImplementationOnce(
|
|
@@ -75,7 +76,7 @@ describe( 'getHorizontalRelativeGradientPosition', () => {
|
|
|
75
76
|
} );
|
|
76
77
|
|
|
77
78
|
it( 'should clamp to 100 when mouse position is greater than width', () => {
|
|
78
|
-
|
|
79
|
+
vi.spyOn(
|
|
79
80
|
window.HTMLElement.prototype,
|
|
80
81
|
'getBoundingClientRect'
|
|
81
82
|
).mockImplementationOnce(
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { screen } from '@testing-library/react';
|
|
2
3
|
import { click, press, type } from '@ariakit/test';
|
|
3
4
|
import { render } from '@ariakit/test/react';
|
|
@@ -5,6 +6,8 @@ import { useState } from '@wordpress/element';
|
|
|
5
6
|
import UncontrolledCustomSelectControlV2 from '..';
|
|
6
7
|
import type { CustomSelectProps } from '../types';
|
|
7
8
|
|
|
9
|
+
globalThis.wpVitest.mockMatchMedia();
|
|
10
|
+
|
|
8
11
|
const items = [
|
|
9
12
|
{
|
|
10
13
|
key: 'flower1',
|
|
@@ -222,7 +225,7 @@ describe.each( [
|
|
|
222
225
|
|
|
223
226
|
describe( 'Multiple selection', () => {
|
|
224
227
|
it( 'Should be able to select multiple items when provided an array', async () => {
|
|
225
|
-
const onChangeMock =
|
|
228
|
+
const onChangeMock = vi.fn();
|
|
226
229
|
|
|
227
230
|
// initial selection as defaultValue
|
|
228
231
|
const defaultValues = [
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { format } from 'date-fns';
|
|
2
3
|
import { render, screen } from '@testing-library/react';
|
|
3
4
|
import userEvent from '@testing-library/user-event';
|
|
4
5
|
import DatePicker from '..';
|
|
5
6
|
|
|
7
|
+
globalThis.wpVitest.mockMatchMedia();
|
|
8
|
+
|
|
6
9
|
describe( 'DatePicker', () => {
|
|
7
10
|
it( 'should highlight the current date', () => {
|
|
8
11
|
render( <DatePicker currentDate="2022-05-02T11:00:00" /> );
|
|
@@ -26,7 +29,7 @@ describe( 'DatePicker', () => {
|
|
|
26
29
|
it( 'should call onChange when a day is selected', async () => {
|
|
27
30
|
const user = userEvent.setup();
|
|
28
31
|
|
|
29
|
-
const onChange =
|
|
32
|
+
const onChange = vi.fn();
|
|
30
33
|
|
|
31
34
|
render(
|
|
32
35
|
<DatePicker
|
|
@@ -45,8 +48,8 @@ describe( 'DatePicker', () => {
|
|
|
45
48
|
it( 'should call onMonthPreviewed and onChange when a day in a different month is selected', async () => {
|
|
46
49
|
const user = userEvent.setup();
|
|
47
50
|
|
|
48
|
-
const onMonthPreviewed =
|
|
49
|
-
const onChange =
|
|
51
|
+
const onMonthPreviewed = vi.fn();
|
|
52
|
+
const onChange = vi.fn();
|
|
50
53
|
|
|
51
54
|
render(
|
|
52
55
|
<DatePicker
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
afterAll,
|
|
3
|
+
afterEach,
|
|
4
|
+
beforeAll,
|
|
5
|
+
describe,
|
|
6
|
+
expect,
|
|
7
|
+
it,
|
|
8
|
+
vi,
|
|
9
|
+
} from 'vitest';
|
|
1
10
|
import { render, screen } from '@testing-library/react';
|
|
2
11
|
import userEvent from '@testing-library/user-event';
|
|
3
12
|
import timezoneMock from 'timezone-mock';
|
|
4
13
|
import { getSettings, setSettings, type DateSettings } from '@wordpress/date';
|
|
5
14
|
import DateTimePicker from '..';
|
|
6
15
|
|
|
16
|
+
globalThis.wpVitest.mockMatchMedia();
|
|
17
|
+
|
|
7
18
|
describe( 'DateTimePicker', () => {
|
|
8
19
|
let originalSettings: DateSettings;
|
|
9
20
|
beforeAll( () => {
|
|
@@ -20,7 +31,7 @@ describe( 'DateTimePicker', () => {
|
|
|
20
31
|
} );
|
|
21
32
|
|
|
22
33
|
afterEach( () => {
|
|
23
|
-
|
|
34
|
+
vi.restoreAllMocks();
|
|
24
35
|
timezoneMock.unregister();
|
|
25
36
|
} );
|
|
26
37
|
|
|
@@ -30,7 +41,7 @@ describe( 'DateTimePicker', () => {
|
|
|
30
41
|
|
|
31
42
|
it( 'should display and select dates correctly when timezones match', async () => {
|
|
32
43
|
const user = userEvent.setup();
|
|
33
|
-
const onChange =
|
|
44
|
+
const onChange = vi.fn();
|
|
34
45
|
|
|
35
46
|
timezoneMock.register( 'US/Eastern' );
|
|
36
47
|
|
|
@@ -120,7 +131,7 @@ describe( 'DateTimePicker', () => {
|
|
|
120
131
|
} ) => {
|
|
121
132
|
it( 'should display and select dates correctly', async () => {
|
|
122
133
|
const user = userEvent.setup();
|
|
123
|
-
const onChange =
|
|
134
|
+
const onChange = vi.fn();
|
|
124
135
|
|
|
125
136
|
timezoneMock.register( timezone );
|
|
126
137
|
|
|
@@ -196,7 +207,7 @@ describe( 'DateTimePicker', () => {
|
|
|
196
207
|
|
|
197
208
|
describe( 'input types with timezone variations', () => {
|
|
198
209
|
afterEach( () => {
|
|
199
|
-
|
|
210
|
+
vi.useRealTimers();
|
|
200
211
|
timezoneMock.unregister();
|
|
201
212
|
} );
|
|
202
213
|
|
|
@@ -268,16 +279,14 @@ describe( 'DateTimePicker', () => {
|
|
|
268
279
|
// set initial dates.
|
|
269
280
|
let user: ReturnType< typeof userEvent.setup >;
|
|
270
281
|
if ( initialDate === undefined ) {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
user = userEvent.setup(
|
|
274
|
-
advanceTimers: jest.advanceTimersByTime,
|
|
275
|
-
} );
|
|
282
|
+
vi.useFakeTimers( { toFake: [ 'Date' ] } );
|
|
283
|
+
vi.setSystemTime( Date.UTC( 2025, 10, 16, 1, 0, 0 ) );
|
|
284
|
+
user = userEvent.setup();
|
|
276
285
|
} else {
|
|
277
286
|
user = userEvent.setup();
|
|
278
287
|
}
|
|
279
288
|
|
|
280
|
-
const onChange =
|
|
289
|
+
const onChange = vi.fn();
|
|
281
290
|
const { rerender } = render(
|
|
282
291
|
<DateTimePicker
|
|
283
292
|
currentDate={ initialDate }
|
|
@@ -392,7 +401,7 @@ describe( 'DateTimePicker', () => {
|
|
|
392
401
|
|
|
393
402
|
it( 'should preserve time when changing date', async () => {
|
|
394
403
|
const user = userEvent.setup();
|
|
395
|
-
const onChange =
|
|
404
|
+
const onChange = vi.fn();
|
|
396
405
|
|
|
397
406
|
timezoneMock.register( 'UTC' );
|
|
398
407
|
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
afterAll,
|
|
3
|
+
afterEach,
|
|
4
|
+
beforeAll,
|
|
5
|
+
beforeEach,
|
|
6
|
+
describe,
|
|
7
|
+
expect,
|
|
8
|
+
it,
|
|
9
|
+
} from 'vitest';
|
|
1
10
|
import timezoneMock from 'timezone-mock';
|
|
2
11
|
import { getSettings, setSettings, type DateSettings } from '@wordpress/date';
|
|
3
12
|
import { inputToDate, getDaysInMonth } from '../utils';
|