@wordpress/components 35.0.1 → 36.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/CONTRIBUTING.md +33 -26
- package/build/alignment-matrix-control/cell.cjs +1 -1
- package/build/alignment-matrix-control/cell.cjs.map +2 -2
- package/build/alignment-matrix-control/index.cjs +1 -1
- package/build/alignment-matrix-control/index.cjs.map +2 -2
- package/build/angle-picker-control/angle-circle.cjs +1 -1
- package/build/angle-picker-control/angle-circle.cjs.map +2 -2
- package/build/angle-picker-control/index.cjs +2 -2
- package/build/autocomplete/get-autocomplete-match.cjs.map +1 -1
- package/build/autocomplete/index.cjs.map +1 -1
- package/build/base-control/styles/base-control-styles.cjs +6 -6
- package/build/base-control/styles/base-control-styles.cjs.map +2 -2
- package/build/border-control/styles.cjs +17 -14
- package/build/border-control/styles.cjs.map +2 -2
- package/build/box-control/{input-control.cjs → box-input-control.cjs} +9 -9
- package/build/box-control/box-input-control.cjs.map +7 -0
- package/build/box-control/index.cjs +9 -25
- package/build/box-control/index.cjs.map +3 -3
- package/build/button/index.cjs +3 -7
- package/build/button/index.cjs.map +2 -2
- package/build/card/card-divider/hook.cjs.map +2 -2
- package/build/color-palette/index.cjs.map +1 -1
- package/build/color-picker/component.cjs.map +1 -1
- package/build/date-time/utils.cjs.map +1 -1
- package/build/disabled/index.cjs.map +2 -2
- package/build/divider/component.cjs +108 -3
- package/build/divider/component.cjs.map +4 -4
- package/build/draggable/index.cjs.map +1 -1
- package/build/external-link/index.cjs +1 -1
- package/build/external-link/index.cjs.map +1 -1
- package/build/higher-order/with-fallback-styles/index.cjs +18 -44
- package/build/higher-order/with-fallback-styles/index.cjs.map +2 -2
- package/build/menu/popover.cjs.map +1 -1
- package/build/menu/styles.cjs +17 -17
- package/build/menu/styles.cjs.map +2 -2
- package/build/modal/index.cjs.map +1 -1
- package/build/modal/use-modal-exit-animation.cjs +37 -52
- package/build/modal/use-modal-exit-animation.cjs.map +2 -2
- package/build/palette-edit/index.cjs +1 -1
- package/build/progress-bar/index.cjs +1 -1
- package/build/progress-bar/index.cjs.map +2 -2
- package/build/query-controls/index.cjs +2 -2
- package/build/query-controls/index.cjs.map +2 -2
- package/build/range-control/index.cjs.map +1 -1
- package/build/sandbox/index.cjs +7 -1
- package/build/sandbox/index.cjs.map +2 -2
- package/build/snackbar/index.cjs +1 -1
- package/build/spinner/styles.cjs +4 -4
- package/build/spinner/styles.cjs.map +2 -2
- package/build/tabs/index.cjs +0 -18
- package/build/tabs/index.cjs.map +2 -2
- package/build/tabs/tablist.cjs +5 -15
- package/build/tabs/tablist.cjs.map +2 -2
- package/build/text-control/index.cjs +3 -12
- package/build/text-control/index.cjs.map +3 -3
- package/build/tools-panel/styles.cjs +13 -13
- package/build/tools-panel/styles.cjs.map +2 -2
- package/build/tools-panel/tools-panel/hook.cjs.map +1 -1
- package/build/tree-select/index.cjs +1 -1
- package/build/tree-select/index.cjs.map +1 -1
- package/build/truncate/utils.cjs +1 -1
- package/build/truncate/utils.cjs.map +1 -1
- package/build/utils/colors-values.cjs +12 -12
- package/build/utils/colors-values.cjs.map +2 -2
- package/build/utils/config-values.cjs +2 -2
- package/build/utils/config-values.cjs.map +2 -2
- package/build/utils/dropdown-motion.cjs.map +2 -2
- package/build/utils/strings.cjs.map +1 -1
- package/build/validated-form-controls/components/text-control.cjs +0 -1
- package/build/validated-form-controls/components/text-control.cjs.map +2 -2
- package/build-module/alignment-matrix-control/cell.mjs +1 -1
- package/build-module/alignment-matrix-control/cell.mjs.map +2 -2
- package/build-module/alignment-matrix-control/index.mjs +1 -1
- package/build-module/alignment-matrix-control/index.mjs.map +2 -2
- package/build-module/angle-picker-control/angle-circle.mjs +1 -1
- package/build-module/angle-picker-control/angle-circle.mjs.map +2 -2
- package/build-module/angle-picker-control/index.mjs +2 -2
- package/build-module/autocomplete/get-autocomplete-match.mjs.map +1 -1
- package/build-module/autocomplete/index.mjs.map +1 -1
- package/build-module/base-control/styles/base-control-styles.mjs +6 -6
- package/build-module/base-control/styles/base-control-styles.mjs.map +2 -2
- package/build-module/border-control/styles.mjs +17 -14
- package/build-module/border-control/styles.mjs.map +2 -2
- package/build-module/box-control/{input-control.mjs → box-input-control.mjs} +6 -6
- package/build-module/box-control/box-input-control.mjs.map +7 -0
- package/build-module/box-control/index.mjs +9 -25
- package/build-module/box-control/index.mjs.map +2 -2
- package/build-module/button/index.mjs +2 -5
- package/build-module/button/index.mjs.map +2 -2
- package/build-module/card/card-divider/hook.mjs.map +2 -2
- package/build-module/color-palette/index.mjs.map +1 -1
- package/build-module/color-picker/component.mjs.map +1 -1
- package/build-module/date-time/utils.mjs.map +1 -1
- package/build-module/disabled/index.mjs.map +2 -2
- package/build-module/divider/component.mjs +108 -3
- package/build-module/divider/component.mjs.map +3 -3
- package/build-module/draggable/index.mjs.map +1 -1
- package/build-module/external-link/index.mjs +1 -1
- package/build-module/external-link/index.mjs.map +1 -1
- package/build-module/higher-order/with-fallback-styles/index.mjs +20 -46
- package/build-module/higher-order/with-fallback-styles/index.mjs.map +2 -2
- package/build-module/menu/popover.mjs.map +1 -1
- package/build-module/menu/styles.mjs +17 -17
- package/build-module/menu/styles.mjs.map +2 -2
- package/build-module/modal/index.mjs.map +1 -1
- package/build-module/modal/use-modal-exit-animation.mjs +37 -52
- package/build-module/modal/use-modal-exit-animation.mjs.map +2 -2
- package/build-module/palette-edit/index.mjs +1 -1
- package/build-module/progress-bar/index.mjs +1 -1
- package/build-module/progress-bar/index.mjs.map +2 -2
- package/build-module/query-controls/index.mjs +2 -2
- package/build-module/query-controls/index.mjs.map +2 -2
- package/build-module/range-control/index.mjs.map +1 -1
- package/build-module/sandbox/index.mjs +3 -1
- package/build-module/sandbox/index.mjs.map +2 -2
- package/build-module/snackbar/index.mjs +1 -1
- package/build-module/spinner/styles.mjs +4 -4
- package/build-module/spinner/styles.mjs.map +2 -2
- package/build-module/tabs/index.mjs +1 -19
- package/build-module/tabs/index.mjs.map +2 -2
- package/build-module/tabs/tablist.mjs +5 -15
- package/build-module/tabs/tablist.mjs.map +2 -2
- package/build-module/text-control/index.mjs +3 -12
- package/build-module/text-control/index.mjs.map +2 -2
- package/build-module/tools-panel/styles.mjs +13 -13
- package/build-module/tools-panel/styles.mjs.map +2 -2
- package/build-module/tools-panel/tools-panel/hook.mjs.map +1 -1
- package/build-module/tree-select/index.mjs +1 -1
- package/build-module/tree-select/index.mjs.map +1 -1
- package/build-module/truncate/utils.mjs +1 -1
- package/build-module/truncate/utils.mjs.map +1 -1
- package/build-module/utils/colors-values.mjs +12 -12
- package/build-module/utils/colors-values.mjs.map +2 -2
- package/build-module/utils/config-values.mjs +2 -2
- package/build-module/utils/config-values.mjs.map +2 -2
- package/build-module/utils/dropdown-motion.mjs.map +2 -2
- package/build-module/utils/strings.mjs.map +1 -1
- package/build-module/validated-form-controls/components/text-control.mjs +0 -1
- package/build-module/validated-form-controls/components/text-control.mjs.map +2 -2
- package/build-style/style-rtl.css +85 -101
- package/build-style/style.css +85 -101
- package/build-types/base-control/styles/base-control-styles.d.ts.map +1 -1
- package/build-types/border-control/styles.d.ts.map +1 -1
- package/build-types/box-control/box-input-control.d.ts +3 -0
- package/build-types/box-control/box-input-control.d.ts.map +1 -0
- package/build-types/box-control/index.d.ts +2 -6
- package/build-types/box-control/index.d.ts.map +1 -1
- package/build-types/box-control/stories/index.story.d.ts.map +1 -1
- package/build-types/box-control/types.d.ts +7 -6
- package/build-types/box-control/types.d.ts.map +1 -1
- package/build-types/button/index.d.ts +0 -2
- package/build-types/button/index.d.ts.map +1 -1
- package/build-types/card/card-divider/hook.d.ts +1 -274
- package/build-types/card/card-divider/hook.d.ts.map +1 -1
- package/build-types/composite/stories/index.story.d.ts.map +1 -1
- package/build-types/confirm-dialog/stories/index.story.d.ts.map +1 -1
- package/build-types/disabled/index.d.ts +0 -1
- package/build-types/disabled/index.d.ts.map +1 -1
- package/build-types/disabled/stories/index.story.d.ts.map +1 -1
- package/build-types/divider/component.d.ts.map +1 -1
- package/build-types/dropdown/stories/index.story.d.ts.map +1 -1
- package/build-types/higher-order/with-fallback-styles/index.d.ts +1 -35
- package/build-types/higher-order/with-fallback-styles/index.d.ts.map +1 -1
- package/build-types/higher-order/with-fallback-styles/test/index.d.ts.map +1 -0
- package/build-types/icon/stories/index.story.d.ts +0 -1
- package/build-types/icon/stories/index.story.d.ts.map +1 -1
- package/build-types/menu/styles.d.ts.map +1 -1
- package/build-types/menu/types.d.ts +2 -2
- package/build-types/placeholder/stories/index.story.d.ts.map +1 -1
- package/build-types/resizable-box/index.d.ts +0 -2
- package/build-types/resizable-box/index.d.ts.map +1 -1
- package/build-types/resizable-box/stories/index.story.d.ts +0 -2
- package/build-types/resizable-box/stories/index.story.d.ts.map +1 -1
- package/build-types/sandbox/index.d.ts +15 -0
- package/build-types/sandbox/index.d.ts.map +1 -1
- package/build-types/spinner/styles.d.ts.map +1 -1
- package/build-types/tabs/index.d.ts.map +1 -1
- package/build-types/tabs/tablist.d.ts.map +1 -1
- package/build-types/text-control/index.d.ts +0 -1
- package/build-types/text-control/index.d.ts.map +1 -1
- package/build-types/text-control/stories/index.story.d.ts.map +1 -1
- package/build-types/text-control/types.d.ts +2 -1
- package/build-types/text-control/types.d.ts.map +1 -1
- package/build-types/tools-panel/styles.d.ts.map +1 -1
- package/build-types/utils/colors-values.d.ts.map +1 -1
- package/build-types/utils/dropdown-motion.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/combobox-control.d.ts +2 -2
- package/build-types/validated-form-controls/components/text-control.d.ts +2 -2
- package/build-types/validated-form-controls/components/text-control.d.ts.map +1 -1
- package/package.json +34 -28
- package/src/angle-picker-control/angle-circle.tsx +3 -3
- package/src/base-control/README.md +2 -2
- package/src/base-control/styles/base-control-styles.ts +1 -0
- package/src/border-control/styles.ts +1 -0
- package/src/box-control/README.md +1 -13
- package/src/box-control/{input-control.tsx → box-input-control.tsx} +4 -4
- package/src/box-control/index.tsx +5 -23
- package/src/box-control/stories/index.story.tsx +1 -3
- package/src/box-control/test/index.tsx +15 -2
- package/src/box-control/types.ts +7 -6
- package/src/button/index.tsx +2 -4
- package/src/button/style.scss +3 -3
- package/src/card/card-divider/hook.ts +5 -1
- package/src/card/test/__snapshots__/index.tsx.snap +7 -9
- package/src/checkbox-control/test/__snapshots__/index.tsx.snap +4 -3
- package/src/composite/stories/index.story.tsx +5 -0
- package/src/confirm-dialog/stories/index.story.tsx +1 -0
- package/src/custom-select-control/test/index.tsx +1 -1
- package/src/disabled/README.md +0 -1
- package/src/disabled/index.tsx +0 -1
- package/src/disabled/stories/index.story.tsx +0 -1
- package/src/divider/component.tsx +27 -3
- package/src/divider/style.module.scss +21 -0
- package/src/divider/test/index.tsx +21 -11
- package/src/dropdown/stories/index.story.tsx +5 -0
- package/src/dropdown-menu/style.scss +1 -1
- package/src/external-link/style.scss +4 -4
- package/src/form-toggle/style.scss +1 -1
- package/src/heading/test/__snapshots__/index.tsx.snap +4 -4
- package/src/higher-order/with-constrained-tabbing/README.md +0 -2
- package/src/higher-order/with-fallback-styles/index.tsx +31 -61
- package/src/higher-order/with-fallback-styles/test/index.tsx +47 -0
- package/src/higher-order/with-focus-return/README.md +0 -2
- package/src/icon/stories/index.story.tsx +0 -15
- package/src/menu/README.md +2 -2
- package/src/menu/styles.ts +2 -0
- package/src/menu/test/index.tsx +104 -87
- package/src/menu/types.ts +2 -2
- package/src/menu-item/test/__snapshots__/index.js.snap +2 -0
- package/src/modal/style.scss +1 -1
- package/src/modal/test/index.tsx +0 -24
- package/src/modal/use-modal-exit-animation.ts +2 -2
- package/src/navigable-container/test/navigable-menu.tsx +0 -16
- package/src/navigable-container/test/tababble-container.tsx +0 -16
- package/src/navigator/test/index.tsx +0 -24
- package/src/notice/style.scss +11 -13
- package/src/notice/test/__snapshots__/index.tsx.snap +1 -0
- package/src/panel/README.md +2 -0
- package/src/panel/stories/index.story.tsx +2 -2
- package/src/panel/style.scss +1 -1
- package/src/placeholder/stories/index.story.tsx +0 -1
- package/src/radio-control/style.scss +1 -1
- package/src/resizable-box/index.tsx +1 -2
- package/src/sandbox/index.tsx +18 -1
- package/src/sandbox/test/index.tsx +44 -1
- package/src/spinner/styles.ts +1 -0
- package/src/tab-panel/style.scss +6 -6
- package/src/tab-panel/test/index.tsx +0 -17
- package/src/tabs/index.tsx +1 -26
- package/src/tabs/tablist.tsx +5 -21
- package/src/tabs/test/index.tsx +16 -44
- package/src/text/test/__snapshots__/index.tsx.snap +3 -3
- package/src/text-control/README.md +0 -9
- package/src/text-control/index.tsx +3 -14
- package/src/text-control/stories/index.story.tsx +0 -2
- package/src/text-control/style.scss +7 -11
- package/src/text-control/test/text-control.tsx +1 -5
- package/src/text-control/types.ts +2 -1
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +38 -26
- package/src/toolbar/toolbar-group/style.scss +2 -2
- package/src/tools-panel/styles.ts +1 -1
- package/src/tools-panel/tools-panel/README.md +0 -2
- package/src/tooltip/stories/index.story.tsx +2 -2
- package/src/tree-grid/test/index.tsx +0 -23
- package/src/utils/colors-values.js +36 -16
- package/src/utils/config-values.js +2 -2
- package/src/utils/dropdown-motion.ts +6 -4
- package/src/utils/theme-variables.scss +18 -13
- package/src/validated-form-controls/components/text-control.tsx +2 -10
- package/build/box-control/input-control.cjs.map +0 -7
- package/build/divider/styles.cjs +0 -98
- package/build/divider/styles.cjs.map +0 -7
- package/build-module/box-control/input-control.mjs.map +0 -7
- package/build-module/divider/styles.mjs +0 -63
- package/build-module/divider/styles.mjs.map +0 -7
- package/build-types/box-control/input-control.d.ts +0 -3
- package/build-types/box-control/input-control.d.ts.map +0 -1
- package/build-types/card/context.d.ts +0 -3
- package/build-types/card/context.d.ts.map +0 -1
- package/build-types/date-time/date/index.d.ts +0 -23
- package/build-types/date-time/date/index.d.ts.map +0 -1
- package/build-types/date-time/date/styles.d.ts +0 -45
- package/build-types/date-time/date/styles.d.ts.map +0 -1
- package/build-types/date-time/date/test/index.d.ts.map +0 -1
- package/build-types/date-time/date/test/use-lilius.d.ts +0 -2
- package/build-types/date-time/date/test/use-lilius.d.ts.map +0 -1
- package/build-types/date-time/date/use-lilius/index.d.ts +0 -169
- package/build-types/date-time/date/use-lilius/index.d.ts.map +0 -1
- package/build-types/date-time/time/index.d.ts +0 -27
- package/build-types/date-time/time/index.d.ts.map +0 -1
- package/build-types/date-time/time/styles.d.ts +0 -93
- package/build-types/date-time/time/styles.d.ts.map +0 -1
- package/build-types/date-time/time/test/index.d.ts +0 -2
- package/build-types/date-time/time/test/index.d.ts.map +0 -1
- package/build-types/date-time/time/time-input/index.d.ts +0 -4
- package/build-types/date-time/time/time-input/index.d.ts.map +0 -1
- package/build-types/date-time/time/time-input/test/index.d.ts +0 -2
- package/build-types/date-time/time/time-input/test/index.d.ts.map +0 -1
- package/build-types/date-time/time/timezone.d.ts +0 -7
- package/build-types/date-time/time/timezone.d.ts.map +0 -1
- package/build-types/divider/styles.d.ts +0 -10
- package/build-types/divider/styles.d.ts.map +0 -1
- package/build-types/mobile/image/constants.d.ts +0 -5
- package/build-types/mobile/image/constants.d.ts.map +0 -1
- package/build-types/navigation/back-button/index.d.ts +0 -7
- package/build-types/navigation/back-button/index.d.ts.map +0 -1
- package/build-types/navigation/constants.d.ts +0 -3
- package/build-types/navigation/constants.d.ts.map +0 -1
- package/build-types/navigation/context.d.ts +0 -4
- package/build-types/navigation/context.d.ts.map +0 -1
- package/build-types/navigation/group/context.d.ts +0 -7
- package/build-types/navigation/group/context.d.ts.map +0 -1
- package/build-types/navigation/group/index.d.ts +0 -7
- package/build-types/navigation/group/index.d.ts.map +0 -1
- package/build-types/navigation/index.d.ts +0 -46
- package/build-types/navigation/index.d.ts.map +0 -1
- package/build-types/navigation/item/base-content.d.ts +0 -3
- package/build-types/navigation/item/base-content.d.ts.map +0 -1
- package/build-types/navigation/item/base.d.ts +0 -3
- package/build-types/navigation/item/base.d.ts.map +0 -1
- package/build-types/navigation/item/index.d.ts +0 -7
- package/build-types/navigation/item/index.d.ts.map +0 -1
- package/build-types/navigation/item/use-navigation-tree-item.d.ts +0 -3
- package/build-types/navigation/item/use-navigation-tree-item.d.ts.map +0 -1
- package/build-types/navigation/menu/context.d.ts +0 -7
- package/build-types/navigation/menu/context.d.ts.map +0 -1
- package/build-types/navigation/menu/index.d.ts +0 -7
- package/build-types/navigation/menu/index.d.ts.map +0 -1
- package/build-types/navigation/menu/menu-title-search.d.ts +0 -3
- package/build-types/navigation/menu/menu-title-search.d.ts.map +0 -1
- package/build-types/navigation/menu/menu-title.d.ts +0 -3
- package/build-types/navigation/menu/menu-title.d.ts.map +0 -1
- package/build-types/navigation/menu/search-no-results-found.d.ts +0 -3
- package/build-types/navigation/menu/search-no-results-found.d.ts.map +0 -1
- package/build-types/navigation/menu/use-navigation-tree-menu.d.ts +0 -3
- package/build-types/navigation/menu/use-navigation-tree-menu.d.ts.map +0 -1
- package/build-types/navigation/stories/index.story.d.ts +0 -23
- package/build-types/navigation/stories/index.story.d.ts.map +0 -1
- package/build-types/navigation/stories/utils/controlled-state.d.ts +0 -7
- package/build-types/navigation/stories/utils/controlled-state.d.ts.map +0 -1
- package/build-types/navigation/stories/utils/default.d.ts +0 -10
- package/build-types/navigation/stories/utils/default.d.ts.map +0 -1
- package/build-types/navigation/stories/utils/group.d.ts +0 -10
- package/build-types/navigation/stories/utils/group.d.ts.map +0 -1
- package/build-types/navigation/stories/utils/hide-if-empty.d.ts +0 -10
- package/build-types/navigation/stories/utils/hide-if-empty.d.ts.map +0 -1
- package/build-types/navigation/stories/utils/more-examples.d.ts +0 -10
- package/build-types/navigation/stories/utils/more-examples.d.ts.map +0 -1
- package/build-types/navigation/stories/utils/search.d.ts +0 -10
- package/build-types/navigation/stories/utils/search.d.ts.map +0 -1
- package/build-types/navigation/styles/navigation-styles.d.ts +0 -55
- package/build-types/navigation/styles/navigation-styles.d.ts.map +0 -1
- package/build-types/navigation/test/index.d.ts +0 -2
- package/build-types/navigation/test/index.d.ts.map +0 -1
- package/build-types/navigation/types.d.ts +0 -266
- package/build-types/navigation/types.d.ts.map +0 -1
- package/build-types/navigation/use-create-navigation-tree.d.ts +0 -15
- package/build-types/navigation/use-create-navigation-tree.d.ts.map +0 -1
- package/build-types/navigation/use-navigation-tree-nodes.d.ts +0 -10
- package/build-types/navigation/use-navigation-tree-nodes.d.ts.map +0 -1
- package/build-types/navigation/utils.d.ts +0 -3
- package/build-types/navigation/utils.d.ts.map +0 -1
- package/build-types/visually-hidden/test/index.d.ts +0 -2
- package/build-types/visually-hidden/test/index.d.ts.map +0 -1
- package/src/divider/styles.ts +0 -81
- package/src/divider/test/__snapshots__/index.tsx.snap +0 -71
- /package/build-types/{date-time/date → higher-order/with-fallback-styles}/test/index.d.ts +0 -0
|
@@ -35,23 +35,7 @@ const getTabbableContainerTabbables = () => [
|
|
|
35
35
|
screen.getByRole( 'link', { name: 'Item 4' } ),
|
|
36
36
|
];
|
|
37
37
|
|
|
38
|
-
const originalGetClientRects = window.HTMLElement.prototype.getClientRects;
|
|
39
|
-
|
|
40
38
|
describe( 'TabbableContainer', () => {
|
|
41
|
-
beforeAll( () => {
|
|
42
|
-
// Mocking `getClientRects()` is necessary to pass a check performed by
|
|
43
|
-
// the `focus.tabbable.find()` and by the `focus.focusable.find()` functions
|
|
44
|
-
// from the `@wordpress/dom` package.
|
|
45
|
-
// @ts-expect-error We're not trying to comply to the DOM spec, only mocking
|
|
46
|
-
window.HTMLElement.prototype.getClientRects = function () {
|
|
47
|
-
return [ 'trick-jsdom-into-having-size-for-element-rect' ];
|
|
48
|
-
};
|
|
49
|
-
} );
|
|
50
|
-
|
|
51
|
-
afterAll( () => {
|
|
52
|
-
window.HTMLElement.prototype.getClientRects = originalGetClientRects;
|
|
53
|
-
} );
|
|
54
|
-
|
|
55
39
|
it( 'moves focus on its tabbable children by using the tab key', async () => {
|
|
56
40
|
const user = userEvent.setup();
|
|
57
41
|
|
|
@@ -469,30 +469,6 @@ const getNavigationButton = ( buttonKey: keyof typeof BUTTON_TEXT ) =>
|
|
|
469
469
|
screen.getByRole( 'button', { name: BUTTON_TEXT[ buttonKey ] } );
|
|
470
470
|
|
|
471
471
|
describe( 'Navigator', () => {
|
|
472
|
-
const originalGetClientRects = window.Element.prototype.getClientRects;
|
|
473
|
-
|
|
474
|
-
// `getClientRects` needs to be mocked so that `isVisible` from the `@wordpress/dom`
|
|
475
|
-
// `focusable` module can pass, in a JSDOM env where the DOM elements have no width/height.
|
|
476
|
-
const mockedGetClientRects = jest.fn( () => [
|
|
477
|
-
{
|
|
478
|
-
x: 0,
|
|
479
|
-
y: 0,
|
|
480
|
-
width: 100,
|
|
481
|
-
height: 100,
|
|
482
|
-
},
|
|
483
|
-
] );
|
|
484
|
-
|
|
485
|
-
beforeAll( () => {
|
|
486
|
-
// @ts-expect-error There's no need for an exact mock, this is just needed
|
|
487
|
-
// for the tests to pass (see `mockedGetClientRects` inline comments).
|
|
488
|
-
window.Element.prototype.getClientRects =
|
|
489
|
-
jest.fn( mockedGetClientRects );
|
|
490
|
-
} );
|
|
491
|
-
|
|
492
|
-
afterAll( () => {
|
|
493
|
-
window.Element.prototype.getClientRects = originalGetClientRects;
|
|
494
|
-
} );
|
|
495
|
-
|
|
496
472
|
it( 'should render', () => {
|
|
497
473
|
render( <MyNavigation /> );
|
|
498
474
|
|
package/src/notice/style.scss
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
@use "@wordpress/base-styles/variables" as *;
|
|
2
2
|
|
|
3
3
|
.components-notice {
|
|
4
|
-
--wp-components-notice-background-color: var(--wpds-color-
|
|
4
|
+
--wp-components-notice-background-color: var(--wpds-color-background-surface-info-weak);
|
|
5
5
|
--wp-components-notice-border-color: var(--wpds-color-stroke-surface-info);
|
|
6
|
-
--wp-components-notice-text-color: var(--wpds-color-
|
|
6
|
+
--wp-components-notice-text-color: var(--wpds-color-foreground-content-info);
|
|
7
7
|
|
|
8
8
|
box-sizing: border-box;
|
|
9
9
|
display: grid;
|
|
@@ -19,21 +19,21 @@
|
|
|
19
19
|
line-height: var(--wpds-typography-line-height-sm);
|
|
20
20
|
|
|
21
21
|
&.is-success {
|
|
22
|
-
--wp-components-notice-background-color: var(--wpds-color-
|
|
22
|
+
--wp-components-notice-background-color: var(--wpds-color-background-surface-success-weak);
|
|
23
23
|
--wp-components-notice-border-color: var(--wpds-color-stroke-surface-success);
|
|
24
|
-
--wp-components-notice-text-color: var(--wpds-color-
|
|
24
|
+
--wp-components-notice-text-color: var(--wpds-color-foreground-content-success);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
&.is-warning {
|
|
28
|
-
--wp-components-notice-background-color: var(--wpds-color-
|
|
28
|
+
--wp-components-notice-background-color: var(--wpds-color-background-surface-warning-weak);
|
|
29
29
|
--wp-components-notice-border-color: var(--wpds-color-stroke-surface-warning);
|
|
30
|
-
--wp-components-notice-text-color: var(--wpds-color-
|
|
30
|
+
--wp-components-notice-text-color: var(--wpds-color-foreground-content-warning);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
&.is-error {
|
|
34
|
-
--wp-components-notice-background-color: var(--wpds-color-
|
|
34
|
+
--wp-components-notice-background-color: var(--wpds-color-background-surface-error-weak);
|
|
35
35
|
--wp-components-notice-border-color: var(--wpds-color-stroke-surface-error);
|
|
36
|
-
--wp-components-notice-text-color: var(--wpds-color-
|
|
36
|
+
--wp-components-notice-text-color: var(--wpds-color-foreground-content-error);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -46,9 +46,7 @@
|
|
|
46
46
|
// consistent across variants, matching `@wordpress/ui` Notice (`.title` /
|
|
47
47
|
// `.description` always use `--text-vertical-padding` whether or not `CloseIcon`
|
|
48
48
|
// is rendered).
|
|
49
|
-
|
|
50
|
-
// land in `@wordpress/theme`.
|
|
51
|
-
padding-block: calc((#{$button-size-small} - 1lh) / 2);
|
|
49
|
+
padding-block: calc((var(--wpds-dimension-size-sm) - 1lh) / 2);
|
|
52
50
|
}
|
|
53
51
|
|
|
54
52
|
.components-notice__actions {
|
|
@@ -65,13 +63,13 @@
|
|
|
65
63
|
.components-notice__dismiss {
|
|
66
64
|
grid-column: 2;
|
|
67
65
|
grid-row: 1;
|
|
68
|
-
color: var(--wpds-color-
|
|
66
|
+
color: var(--wpds-color-foreground-interactive-neutral);
|
|
69
67
|
margin-inline-start: var(--wpds-dimension-gap-xs);
|
|
70
68
|
|
|
71
69
|
&:not(:disabled):not([aria-disabled="true"]):not(.is-secondary):hover,
|
|
72
70
|
&:not(:disabled):not([aria-disabled="true"]):not(.is-secondary):active,
|
|
73
71
|
&:not(:disabled):not([aria-disabled="true"]):focus {
|
|
74
|
-
color: var(--wpds-color-
|
|
72
|
+
color: var(--wpds-color-foreground-interactive-neutral-active);
|
|
75
73
|
background-color: transparent;
|
|
76
74
|
}
|
|
77
75
|
|
package/src/panel/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Panels expand and collapse multiple sections of content.
|
|
4
4
|
|
|
5
|
+
The `Panel` family is intended for the block inspector sidebar. For collapsible sections elsewhere, use the [`CollapsibleCard`](https://wordpress.github.io/gutenberg/?path=/docs/design-system-components-collapsiblecard--docs) component instead.
|
|
6
|
+
|
|
5
7
|

|
|
6
8
|
|
|
7
9
|
## Design guidelines
|
|
@@ -17,7 +17,6 @@ import PanelBody from '../body';
|
|
|
17
17
|
import InputControl from '../../input-control';
|
|
18
18
|
|
|
19
19
|
const meta: Meta< typeof Panel > = {
|
|
20
|
-
tags: [ 'manifest' ],
|
|
21
20
|
title: 'Components/Containers/Panel',
|
|
22
21
|
id: 'components-panel',
|
|
23
22
|
component: Panel,
|
|
@@ -30,7 +29,8 @@ const meta: Meta< typeof Panel > = {
|
|
|
30
29
|
docs: { canvas: { sourceState: 'shown' } },
|
|
31
30
|
componentStatus: {
|
|
32
31
|
status: 'recommended',
|
|
33
|
-
whereUsed: '
|
|
32
|
+
whereUsed: 'editor',
|
|
33
|
+
notes: 'Intended for the block inspector sidebar. For collapsible sections elsewhere, use `CollapsibleCard` from `@wordpress/ui` instead.',
|
|
34
34
|
},
|
|
35
35
|
},
|
|
36
36
|
};
|
package/src/panel/style.scss
CHANGED
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
justify-content: space-between;
|
|
41
41
|
align-items: center;
|
|
42
42
|
padding: 0 $grid-unit-20;
|
|
43
|
-
border-bottom: $border-width solid
|
|
43
|
+
border-bottom: $border-width solid var(--wpds-color-stroke-surface-neutral);
|
|
44
44
|
|
|
45
45
|
// This helps ensure the correct panel height, including the border, avoiding subpixel rounding issues.
|
|
46
46
|
box-sizing: content-box;
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
|
|
57
57
|
&:disabled {
|
|
58
58
|
background: $components-color-gray-100;
|
|
59
|
-
border: 1px solid
|
|
59
|
+
border: 1px solid var(--wpds-color-stroke-interactive-neutral-disabled);
|
|
60
60
|
opacity: 1; // Override style from wp-admin forms.css.
|
|
61
61
|
|
|
62
62
|
&:checked::before {
|
|
@@ -9,7 +9,7 @@ import { forwardRef } from '@wordpress/element';
|
|
|
9
9
|
import clsx from 'clsx';
|
|
10
10
|
import { Resizable } from 're-resizable';
|
|
11
11
|
import type { ResizableProps } from 're-resizable';
|
|
12
|
-
import type {
|
|
12
|
+
import type { ForwardedRef } from 'react';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Internal dependencies
|
|
@@ -88,7 +88,6 @@ const HANDLE_STYLES = {
|
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
type ResizableBoxProps = ResizableProps & {
|
|
91
|
-
children: ReactNode;
|
|
92
91
|
showHandle?: boolean;
|
|
93
92
|
__experimentalShowTooltip?: boolean;
|
|
94
93
|
__experimentalTooltipProps?: Parameters< typeof ResizeTooltip >[ 0 ];
|
package/src/sandbox/index.tsx
CHANGED
|
@@ -17,6 +17,23 @@ import type { SandBoxProps } from './types';
|
|
|
17
17
|
|
|
18
18
|
type SandBoxContentProps = Omit< SandBoxProps, 'allowSameOrigin' >;
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Matches CSS viewport-relative length values such as `100vh`, `50.5vw`,
|
|
22
|
+
* and `.5dvh`. Used to strip viewport units from user-supplied HTML inside
|
|
23
|
+
* the sandbox iframe, because those units are relative to the iframe's
|
|
24
|
+
* own size and would create a measurement feedback loop with the
|
|
25
|
+
* resize observer.
|
|
26
|
+
*
|
|
27
|
+
* Exported for tests. NOTE: an identical regex literal is duplicated
|
|
28
|
+
* inside `observeAndResizeJS` below because that function is serialized
|
|
29
|
+
* via `.toString()` and embedded into the iframe's `srcdoc` — it has no
|
|
30
|
+
* access to this module's scope at runtime. If you change one, change
|
|
31
|
+
* the other; the "is embedded in the sandbox iframe srcdoc" test
|
|
32
|
+
* guards against drift.
|
|
33
|
+
*/
|
|
34
|
+
export const VIEWPORT_UNIT_VALUE_REGEX =
|
|
35
|
+
/^\d*\.?\d+(?:vw|vh|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)$/;
|
|
36
|
+
|
|
20
37
|
const observeAndResizeJS = function () {
|
|
21
38
|
const { MutationObserver } = window;
|
|
22
39
|
|
|
@@ -58,7 +75,7 @@ const observeAndResizeJS = function () {
|
|
|
58
75
|
[ 'width', 'height', 'minHeight', 'maxHeight' ] as const
|
|
59
76
|
).forEach( function ( style ) {
|
|
60
77
|
if (
|
|
61
|
-
|
|
78
|
+
/^\d*\.?\d+(?:vw|vh|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)$/.test(
|
|
62
79
|
ruleOrNode.style[ style ]
|
|
63
80
|
)
|
|
64
81
|
) {
|
|
@@ -11,7 +11,7 @@ import { useState } from '@wordpress/element';
|
|
|
11
11
|
/**
|
|
12
12
|
* Internal dependencies
|
|
13
13
|
*/
|
|
14
|
-
import SandBox from '..';
|
|
14
|
+
import SandBox, { VIEWPORT_UNIT_VALUE_REGEX } from '..';
|
|
15
15
|
|
|
16
16
|
describe( 'SandBox', () => {
|
|
17
17
|
const TestWrapper = () => {
|
|
@@ -109,4 +109,47 @@ describe( 'SandBox', () => {
|
|
|
109
109
|
expect.stringContaining( 'https://another.super.embed' )
|
|
110
110
|
);
|
|
111
111
|
} );
|
|
112
|
+
|
|
113
|
+
describe( 'VIEWPORT_UNIT_VALUE_REGEX', () => {
|
|
114
|
+
it.each( [
|
|
115
|
+
'100vh',
|
|
116
|
+
'50vw',
|
|
117
|
+
'0vh',
|
|
118
|
+
'50.5vh',
|
|
119
|
+
'.5vh',
|
|
120
|
+
'100dvh',
|
|
121
|
+
'50svw',
|
|
122
|
+
'1lvi',
|
|
123
|
+
'100vmin',
|
|
124
|
+
'100vmax',
|
|
125
|
+
] )( 'matches viewport unit value %s', ( value ) => {
|
|
126
|
+
expect( VIEWPORT_UNIT_VALUE_REGEX.test( value ) ).toBe( true );
|
|
127
|
+
} );
|
|
128
|
+
|
|
129
|
+
it.each( [
|
|
130
|
+
'100px',
|
|
131
|
+
'50%',
|
|
132
|
+
'100',
|
|
133
|
+
'vh',
|
|
134
|
+
'.vh',
|
|
135
|
+
'calc(100vh - 10px)',
|
|
136
|
+
'100 vh',
|
|
137
|
+
'',
|
|
138
|
+
] )( 'does not match %s', ( value ) => {
|
|
139
|
+
expect( VIEWPORT_UNIT_VALUE_REGEX.test( value ) ).toBe( false );
|
|
140
|
+
} );
|
|
141
|
+
|
|
142
|
+
it( 'is embedded in the sandbox iframe srcdoc', () => {
|
|
143
|
+
// Guards against drift between the exported constant and
|
|
144
|
+
// the copy inlined into `observeAndResizeJS`, which is
|
|
145
|
+
// serialized via `.toString()` into the iframe srcdoc and
|
|
146
|
+
// cannot reference module-scope values at runtime.
|
|
147
|
+
render( <SandBox html="<p>x</p>" title="Regex Sync Test" /> );
|
|
148
|
+
const iframe =
|
|
149
|
+
screen.getByTitle< HTMLIFrameElement >( 'Regex Sync Test' );
|
|
150
|
+
const srcDoc = iframe.getAttribute( 'srcdoc' ) ?? '';
|
|
151
|
+
|
|
152
|
+
expect( srcDoc ).toContain( VIEWPORT_UNIT_VALUE_REGEX.source );
|
|
153
|
+
} );
|
|
154
|
+
} );
|
|
112
155
|
} );
|
package/src/spinner/styles.ts
CHANGED
|
@@ -35,6 +35,7 @@ const commonPathProps = css`
|
|
|
35
35
|
stroke-width: 1.5px;
|
|
36
36
|
`;
|
|
37
37
|
|
|
38
|
+
// TODO: should use the `stroke-surface-neutral` WPDS token when refactored to SCSS modules
|
|
38
39
|
export const SpinnerTrack = styled.circle`
|
|
39
40
|
${ commonPathProps };
|
|
40
41
|
stroke: ${ COLORS.gray[ 300 ] };
|
package/src/tab-panel/style.scss
CHANGED
|
@@ -21,15 +21,15 @@
|
|
|
21
21
|
padding: 3px var(--wpds-dimension-padding-lg); // Use padding to offset the is-active border, this benefits Windows High Contrast mode
|
|
22
22
|
margin-left: 0;
|
|
23
23
|
font-weight: var(--wpds-typography-font-weight-regular);
|
|
24
|
-
color: var(--wpds-color-
|
|
24
|
+
color: var(--wpds-color-foreground-interactive-neutral);
|
|
25
25
|
|
|
26
26
|
&:disabled,
|
|
27
27
|
&[aria-disabled="true"] {
|
|
28
|
-
color: var(--wpds-color-
|
|
28
|
+
color: var(--wpds-color-foreground-interactive-neutral-disabled);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
&:not(:disabled, [aria-disabled="true"]):is(:hover, :focus-visible) {
|
|
32
|
-
color: var(--wpds-color-
|
|
32
|
+
color: var(--wpds-color-foreground-interactive-neutral-active);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
&:focus:not(:disabled) {
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
&:focus-visible::before {
|
|
88
88
|
box-shadow:
|
|
89
89
|
0 0 0 var(--wpds-border-width-focus)
|
|
90
|
-
var(--wpds-color-stroke-focus
|
|
90
|
+
var(--wpds-color-stroke-focus);
|
|
91
91
|
|
|
92
92
|
// Windows high contrast mode.
|
|
93
93
|
outline: 2px solid transparent;
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
&.is-active {
|
|
104
|
-
background: var(--wpds-color-
|
|
104
|
+
background: var(--wpds-color-background-interactive-neutral-weak-active);
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
&:focus-visible {
|
|
116
116
|
box-shadow:
|
|
117
117
|
0 0 0 var(--wpds-border-width-focus)
|
|
118
|
-
var(--wpds-color-stroke-focus
|
|
118
|
+
var(--wpds-color-stroke-focus);
|
|
119
119
|
|
|
120
120
|
// Windows high contrast mode.
|
|
121
121
|
outline: 2px solid transparent;
|
|
@@ -35,8 +35,6 @@ const TABS = [
|
|
|
35
35
|
const getSelectedTab = async () =>
|
|
36
36
|
await screen.findByRole( 'tab', { selected: true } );
|
|
37
37
|
|
|
38
|
-
let originalGetClientRects: () => DOMRectList;
|
|
39
|
-
|
|
40
38
|
describe.each( [
|
|
41
39
|
[ 'uncontrolled', TabPanel ],
|
|
42
40
|
// The controlled component tests will be added once we certify the
|
|
@@ -45,21 +43,6 @@ describe.each( [
|
|
|
45
43
|
] )( 'TabPanel %s', ( ...modeAndComponent ) => {
|
|
46
44
|
const [ , Component ] = modeAndComponent;
|
|
47
45
|
|
|
48
|
-
beforeAll( () => {
|
|
49
|
-
originalGetClientRects = window.HTMLElement.prototype.getClientRects;
|
|
50
|
-
// Mocking `getClientRects()` is necessary to pass a check performed by
|
|
51
|
-
// the `focus.tabbable.find()` and by the `focus.focusable.find()` functions
|
|
52
|
-
// from the `@wordpress/dom` package.
|
|
53
|
-
// @ts-expect-error We're not trying to comply to the DOM spec, only mocking
|
|
54
|
-
window.HTMLElement.prototype.getClientRects = function () {
|
|
55
|
-
return [ 'trick-jsdom-into-having-size-for-element-rect' ];
|
|
56
|
-
};
|
|
57
|
-
} );
|
|
58
|
-
|
|
59
|
-
afterAll( () => {
|
|
60
|
-
window.HTMLElement.prototype.getClientRects = originalGetClientRects;
|
|
61
|
-
} );
|
|
62
|
-
|
|
63
46
|
describe( 'Accessibility and semantics', () => {
|
|
64
47
|
it( 'should use the correct aria attributes', async () => {
|
|
65
48
|
const panelRenderFunction = jest.fn();
|
package/src/tabs/index.tsx
CHANGED
|
@@ -7,7 +7,7 @@ import * as Ariakit from '@ariakit/react';
|
|
|
7
7
|
* WordPress dependencies
|
|
8
8
|
*/
|
|
9
9
|
import { useInstanceId } from '@wordpress/compose';
|
|
10
|
-
import {
|
|
10
|
+
import { useMemo } from '@wordpress/element';
|
|
11
11
|
import { isRTL } from '@wordpress/i18n';
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -84,31 +84,6 @@ export const Tabs = Object.assign(
|
|
|
84
84
|
rtl: isRTL(),
|
|
85
85
|
} );
|
|
86
86
|
|
|
87
|
-
const { items, activeId } = Ariakit.useStoreState( store );
|
|
88
|
-
const { setActiveId } = store;
|
|
89
|
-
|
|
90
|
-
useEffect( () => {
|
|
91
|
-
requestAnimationFrame( () => {
|
|
92
|
-
const focusedElement =
|
|
93
|
-
items?.[ 0 ]?.element?.ownerDocument.activeElement;
|
|
94
|
-
|
|
95
|
-
if (
|
|
96
|
-
! focusedElement ||
|
|
97
|
-
! items.some( ( item ) => focusedElement === item.element )
|
|
98
|
-
) {
|
|
99
|
-
return; // Return early if no tabs are focused.
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// If, after ariakit re-computes the active tab, that tab doesn't match
|
|
103
|
-
// the currently focused tab, then we force an update to ariakit to avoid
|
|
104
|
-
// any mismatches, especially when navigating to previous/next tab with
|
|
105
|
-
// arrow keys.
|
|
106
|
-
if ( activeId !== focusedElement.id ) {
|
|
107
|
-
setActiveId( focusedElement.id );
|
|
108
|
-
}
|
|
109
|
-
} );
|
|
110
|
-
}, [ activeId, items, setActiveId ] );
|
|
111
|
-
|
|
112
87
|
const contextValue = useMemo(
|
|
113
88
|
() => ( {
|
|
114
89
|
store,
|
package/src/tabs/tablist.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import { useStoreState } from '@ariakit/react';
|
|
5
5
|
import clsx from 'clsx';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -73,15 +73,14 @@ export const TabList = forwardRef<
|
|
|
73
73
|
>( function TabList( { children, ...otherProps }, ref ) {
|
|
74
74
|
const { store } = useTabsContext() ?? {};
|
|
75
75
|
|
|
76
|
-
const selectedId =
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const items = Ariakit.useStoreState( store, 'items' );
|
|
76
|
+
const selectedId = useStoreState( store, 'selectedId' );
|
|
77
|
+
const selectOnMove = useStoreState( store, 'selectOnMove' );
|
|
78
|
+
const items = useStoreState( store, 'items' );
|
|
80
79
|
const [ parent, setParent ] = useState< HTMLElement >();
|
|
81
80
|
const refs = useMergeRefs( [ ref, setParent ] );
|
|
82
81
|
|
|
83
82
|
const selectedItem = store?.item( selectedId );
|
|
84
|
-
const renderedItems =
|
|
83
|
+
const renderedItems = useStoreState( store, 'renderedItems' );
|
|
85
84
|
|
|
86
85
|
const selectedItemIndex =
|
|
87
86
|
renderedItems && selectedItem
|
|
@@ -110,20 +109,6 @@ export const TabList = forwardRef<
|
|
|
110
109
|
// Make sure selected tab is scrolled into view.
|
|
111
110
|
useScrollRectIntoView( parent, selectedRect );
|
|
112
111
|
|
|
113
|
-
const onBlur = () => {
|
|
114
|
-
if ( ! selectOnMove ) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// When automatic tab selection is on, make sure that the active tab is up
|
|
119
|
-
// to date with the selected tab when leaving the tablist. This makes sure
|
|
120
|
-
// that the selected tab will receive keyboard focus when tabbing back into
|
|
121
|
-
// the tablist.
|
|
122
|
-
if ( selectedId !== activeId ) {
|
|
123
|
-
store?.setActiveId( selectedId );
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
|
|
127
112
|
if ( ! store ) {
|
|
128
113
|
warning( '`Tabs.TabList` must be wrapped in a `Tabs` component.' );
|
|
129
114
|
return null;
|
|
@@ -141,7 +126,6 @@ export const TabList = forwardRef<
|
|
|
141
126
|
tabIndex={ props.tabIndex ?? -1 }
|
|
142
127
|
/>
|
|
143
128
|
) }
|
|
144
|
-
onBlur={ onBlur }
|
|
145
129
|
data-select-on-move={ selectOnMove ? 'true' : 'false' }
|
|
146
130
|
{ ...otherProps }
|
|
147
131
|
className={ clsx(
|
package/src/tabs/test/index.tsx
CHANGED
|
@@ -176,8 +176,6 @@ const ControlledTabs = ( {
|
|
|
176
176
|
);
|
|
177
177
|
};
|
|
178
178
|
|
|
179
|
-
let originalGetClientRects: () => DOMRectList;
|
|
180
|
-
|
|
181
179
|
async function waitForComponentToBeInitializedWithSelectedTab(
|
|
182
180
|
selectedTabName: string | undefined
|
|
183
181
|
) {
|
|
@@ -218,21 +216,6 @@ async function waitForComponentToBeInitializedWithSelectedTab(
|
|
|
218
216
|
}
|
|
219
217
|
|
|
220
218
|
describe( 'Tabs', () => {
|
|
221
|
-
beforeAll( () => {
|
|
222
|
-
originalGetClientRects = window.HTMLElement.prototype.getClientRects;
|
|
223
|
-
// Mocking `getClientRects()` is necessary to pass a check performed by
|
|
224
|
-
// the `focus.tabbable.find()` and by the `focus.focusable.find()` functions
|
|
225
|
-
// from the `@wordpress/dom` package.
|
|
226
|
-
// @ts-expect-error We're not trying to comply to the DOM spec, only mocking
|
|
227
|
-
window.HTMLElement.prototype.getClientRects = function () {
|
|
228
|
-
return [ 'trick-jsdom-into-having-size-for-element-rect' ];
|
|
229
|
-
};
|
|
230
|
-
} );
|
|
231
|
-
|
|
232
|
-
afterAll( () => {
|
|
233
|
-
window.HTMLElement.prototype.getClientRects = originalGetClientRects;
|
|
234
|
-
} );
|
|
235
|
-
|
|
236
219
|
describe( 'Adherence to spec and basic behavior', () => {
|
|
237
220
|
it( 'should apply the correct roles, semantics and attributes', async () => {
|
|
238
221
|
await render( <UncontrolledTabs tabs={ TABS } /> );
|
|
@@ -1465,28 +1448,24 @@ describe( 'Tabs', () => {
|
|
|
1465
1448
|
/>
|
|
1466
1449
|
);
|
|
1467
1450
|
|
|
1468
|
-
// When the selected tab is changed
|
|
1451
|
+
// When the selected tab is changed by the controlling
|
|
1452
|
+
// component while the tablist holds focus, focus moves to
|
|
1453
|
+
// the newly selected tab (Gamma).
|
|
1469
1454
|
expect(
|
|
1470
1455
|
screen.getByRole( 'tab', {
|
|
1471
1456
|
selected: true,
|
|
1472
1457
|
name: 'Gamma',
|
|
1473
1458
|
} )
|
|
1474
|
-
).toBeVisible();
|
|
1475
|
-
expect(
|
|
1476
|
-
screen.getByRole( 'tab', {
|
|
1477
|
-
selected: false,
|
|
1478
|
-
name: 'Beta',
|
|
1479
|
-
} )
|
|
1480
1459
|
).toHaveFocus();
|
|
1481
1460
|
|
|
1482
|
-
// Arrow left should move focus to the previous tab (
|
|
1483
|
-
//
|
|
1461
|
+
// Arrow left should move focus to the previous tab (Beta).
|
|
1462
|
+
// Beta should always be focused, and should be selected
|
|
1484
1463
|
// when the `selectOnMove` prop is set to `true`.
|
|
1485
1464
|
await press.ArrowLeft();
|
|
1486
1465
|
expect(
|
|
1487
1466
|
screen.getByRole( 'tab', {
|
|
1488
1467
|
selected: selectOnMove,
|
|
1489
|
-
name: '
|
|
1468
|
+
name: 'Beta',
|
|
1490
1469
|
} )
|
|
1491
1470
|
).toHaveFocus();
|
|
1492
1471
|
} );
|
|
@@ -1530,18 +1509,15 @@ describe( 'Tabs', () => {
|
|
|
1530
1509
|
</>
|
|
1531
1510
|
);
|
|
1532
1511
|
|
|
1533
|
-
// When the selected tab is changed
|
|
1512
|
+
// When the selected tab is changed by the controlling
|
|
1513
|
+
// component while the tablist holds focus, focus moves to
|
|
1514
|
+
// the newly selected tab (Gamma), which also becomes the
|
|
1515
|
+
// active tab.
|
|
1534
1516
|
expect(
|
|
1535
1517
|
screen.getByRole( 'tab', {
|
|
1536
1518
|
selected: true,
|
|
1537
1519
|
name: 'Gamma',
|
|
1538
1520
|
} )
|
|
1539
|
-
).toBeVisible();
|
|
1540
|
-
expect(
|
|
1541
|
-
screen.getByRole( 'tab', {
|
|
1542
|
-
selected: false,
|
|
1543
|
-
name: 'Beta',
|
|
1544
|
-
} )
|
|
1545
1521
|
).toHaveFocus();
|
|
1546
1522
|
|
|
1547
1523
|
// Press shift+tab, move focus to the button before Tabs
|
|
@@ -1550,18 +1526,14 @@ describe( 'Tabs', () => {
|
|
|
1550
1526
|
screen.getByRole( 'button', { name: 'Focus me' } )
|
|
1551
1527
|
).toHaveFocus();
|
|
1552
1528
|
|
|
1553
|
-
// Press tab, move focus back to the tablist
|
|
1529
|
+
// Press tab, move focus back to the tablist. Because the
|
|
1530
|
+
// newly selected tab became the active tab, focus returns
|
|
1531
|
+
// to Gamma regardless of `selectOnMove`.
|
|
1554
1532
|
await press.Tab();
|
|
1555
|
-
|
|
1556
|
-
const betaTab = screen.getByRole( 'tab', {
|
|
1557
|
-
name: 'Beta',
|
|
1558
|
-
} );
|
|
1559
|
-
const gammaTab = screen.getByRole( 'tab', {
|
|
1560
|
-
name: 'Gamma',
|
|
1561
|
-
} );
|
|
1562
|
-
|
|
1563
1533
|
expect(
|
|
1564
|
-
|
|
1534
|
+
screen.getByRole( 'tab', {
|
|
1535
|
+
name: 'Gamma',
|
|
1536
|
+
} )
|
|
1565
1537
|
).toHaveFocus();
|
|
1566
1538
|
} );
|
|
1567
1539
|
}
|
|
@@ -6,7 +6,7 @@ Snapshot Diff:
|
|
|
6
6
|
+ Base styles
|
|
7
7
|
|
|
8
8
|
@@ -3,8 +3,9 @@
|
|
9
|
-
"color": "var(--wp-components-color-foreground, #1e1e1e)",
|
|
9
|
+
"color": "var(--wp-components-color-foreground, var(--wpds-color-foreground-content-neutral, #1e1e1e))",
|
|
10
10
|
"font-size": "calc((13 / 13) * 13px)",
|
|
11
11
|
"font-weight": "normal",
|
|
12
12
|
"line-height": "1.4",
|
|
@@ -19,7 +19,7 @@ Snapshot Diff:
|
|
|
19
19
|
|
|
20
20
|
exports[`Text should render highlighted words with highlightCaseSensitive 1`] = `
|
|
21
21
|
.emotion-0 {
|
|
22
|
-
color: var(--wp-components-color-foreground, #1e1e1e);
|
|
22
|
+
color: var(--wp-components-color-foreground, var(--wpds-color-foreground-content-neutral, #1e1e1e));
|
|
23
23
|
line-height: 1.4;
|
|
24
24
|
margin: 0;
|
|
25
25
|
text-wrap: pretty;
|
|
@@ -51,7 +51,7 @@ exports[`Text should render highlighted words with highlightCaseSensitive 1`] =
|
|
|
51
51
|
|
|
52
52
|
exports[`Text snapshot tests should render correctly 1`] = `
|
|
53
53
|
.emotion-0 {
|
|
54
|
-
color: var(--wp-components-color-foreground, #1e1e1e);
|
|
54
|
+
color: var(--wp-components-color-foreground, var(--wpds-color-foreground-content-neutral, #1e1e1e));
|
|
55
55
|
line-height: 1.4;
|
|
56
56
|
margin: 0;
|
|
57
57
|
text-wrap: pretty;
|
|
@@ -62,7 +62,6 @@ const MyTextControl = () => {
|
|
|
62
62
|
|
|
63
63
|
return (
|
|
64
64
|
<TextControl
|
|
65
|
-
__next40pxDefaultSize
|
|
66
65
|
label="Additional CSS Class"
|
|
67
66
|
value={ className }
|
|
68
67
|
onChange={ ( value ) => setClassName( value ) }
|
|
@@ -127,14 +126,6 @@ A function that receives the value of the input.
|
|
|
127
126
|
- Type: `function`
|
|
128
127
|
- Required: Yes
|
|
129
128
|
|
|
130
|
-
#### __next40pxDefaultSize
|
|
131
|
-
|
|
132
|
-
Start opting into the larger default height that will become the default size in a future version.
|
|
133
|
-
|
|
134
|
-
- Type: `Boolean`
|
|
135
|
-
- Required: No
|
|
136
|
-
- Default: `false`
|
|
137
|
-
|
|
138
129
|
## Related components
|
|
139
130
|
|
|
140
131
|
- To offer users more constrained options for input, use SelectControl, RadioControl, CheckboxControl, or RangeControl.
|