@wordpress/components 25.12.0 → 25.14.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 +65 -0
- package/build/angle-picker-control/index.js +0 -1
- package/build/angle-picker-control/index.js.map +1 -1
- package/build/border-control/border-control-dropdown/component.js +4 -2
- package/build/border-control/border-control-dropdown/component.js.map +1 -1
- package/build/border-control/border-control-dropdown/hook.js +3 -2
- package/build/border-control/border-control-dropdown/hook.js.map +1 -1
- package/build/border-control/styles.js +17 -17
- package/build/border-control/styles.js.map +1 -1
- package/build/checkbox-control/index.js +1 -1
- package/build/checkbox-control/index.js.map +1 -1
- package/build/checkbox-control/types.js.map +1 -1
- package/build/custom-select-control-v2/index.js +87 -0
- package/build/custom-select-control-v2/index.js.map +1 -0
- package/build/custom-select-control-v2/styles.js +85 -0
- package/build/custom-select-control-v2/styles.js.map +1 -0
- package/build/custom-select-control-v2/types.js +6 -0
- package/build/custom-select-control-v2/types.js.map +1 -0
- package/build/date-time/time/timezone.js +11 -2
- package/build/date-time/time/timezone.js.map +1 -1
- package/build/dimension-control/index.js +2 -0
- package/build/dimension-control/index.js.map +1 -1
- package/build/dimension-control/types.js.map +1 -1
- package/build/dropdown-menu-v2-ariakit/index.js +49 -20
- package/build/dropdown-menu-v2-ariakit/index.js.map +1 -1
- package/build/dropdown-menu-v2-ariakit/styles.js +82 -59
- package/build/dropdown-menu-v2-ariakit/styles.js.map +1 -1
- package/build/dropdown-menu-v2-ariakit/types.js.map +1 -1
- package/build/focal-point-picker/controls.js +5 -1
- package/build/focal-point-picker/controls.js.map +1 -1
- package/build/focal-point-picker/index.js +2 -0
- package/build/focal-point-picker/index.js.map +1 -1
- package/build/focal-point-picker/styles/focal-point-picker-style.js +15 -15
- package/build/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
- package/build/focal-point-picker/types.js.map +1 -1
- package/build/font-size-picker/font-size-picker-select.js +2 -0
- package/build/font-size-picker/font-size-picker-select.js.map +1 -1
- package/build/font-size-picker/font-size-picker-toggle-group.js +2 -0
- package/build/font-size-picker/font-size-picker-toggle-group.js.map +1 -1
- package/build/font-size-picker/index.js +6 -1
- package/build/font-size-picker/index.js.map +1 -1
- package/build/font-size-picker/types.js.map +1 -1
- package/build/form-token-field/index.js +6 -2
- package/build/form-token-field/index.js.map +1 -1
- package/build/form-token-field/token-input.js.map +1 -1
- package/build/form-token-field/types.js.map +1 -1
- package/build/heading/hook.js +6 -3
- package/build/heading/hook.js.map +1 -1
- package/build/heading/types.js.map +1 -1
- package/build/index.native.js +0 -16
- package/build/index.native.js.map +1 -1
- package/build/mobile/global-styles-context/utils.native.js +13 -0
- package/build/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build/mobile/utils/alignments.native.js +1 -1
- package/build/mobile/utils/alignments.native.js.map +1 -1
- package/build/palette-edit/index.js +21 -1
- package/build/palette-edit/index.js.map +1 -1
- package/build/private-apis.js +3 -2
- package/build/private-apis.js.map +1 -1
- package/build/query-controls/author-select.js +3 -1
- package/build/query-controls/author-select.js.map +1 -1
- package/build/query-controls/category-select.js +3 -1
- package/build/query-controls/category-select.js.map +1 -1
- package/build/query-controls/index.js +6 -1
- package/build/query-controls/index.js.map +1 -1
- package/build/query-controls/types.js.map +1 -1
- package/build/slot-fill/types.js.map +1 -1
- package/build/tabs/index.js +24 -5
- package/build/tabs/index.js.map +1 -1
- package/build/tabs/tab.js +4 -4
- package/build/tabs/tab.js.map +1 -1
- package/build/tabs/tabpanel.js +4 -3
- package/build/tabs/tabpanel.js.map +1 -1
- package/build/tabs/types.js.map +1 -1
- package/build/text/types.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/utils.js +17 -17
- package/build/toggle-group-control/toggle-group-control/utils.js.map +1 -1
- package/build/tools-panel/tools-panel-item/hook.js +16 -12
- package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
- package/build-module/angle-picker-control/index.js +0 -1
- package/build-module/angle-picker-control/index.js.map +1 -1
- package/build-module/border-control/border-control-dropdown/component.js +4 -2
- package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
- package/build-module/border-control/border-control-dropdown/hook.js +3 -2
- package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
- package/build-module/border-control/styles.js +17 -17
- package/build-module/border-control/styles.js.map +1 -1
- package/build-module/checkbox-control/index.js +1 -1
- package/build-module/checkbox-control/index.js.map +1 -1
- package/build-module/checkbox-control/types.js.map +1 -1
- package/build-module/custom-select-control-v2/index.js +74 -0
- package/build-module/custom-select-control-v2/index.js.map +1 -0
- package/build-module/custom-select-control-v2/styles.js +71 -0
- package/build-module/custom-select-control-v2/styles.js.map +1 -0
- package/build-module/custom-select-control-v2/types.js +2 -0
- package/build-module/custom-select-control-v2/types.js.map +1 -0
- package/build-module/date-time/time/timezone.js +11 -2
- package/build-module/date-time/time/timezone.js.map +1 -1
- package/build-module/dimension-control/index.js +2 -0
- package/build-module/dimension-control/index.js.map +1 -1
- package/build-module/dimension-control/types.js.map +1 -1
- package/build-module/dropdown-menu-v2-ariakit/index.js +46 -18
- package/build-module/dropdown-menu-v2-ariakit/index.js.map +1 -1
- package/build-module/dropdown-menu-v2-ariakit/styles.js +69 -40
- package/build-module/dropdown-menu-v2-ariakit/styles.js.map +1 -1
- package/build-module/dropdown-menu-v2-ariakit/types.js.map +1 -1
- package/build-module/focal-point-picker/controls.js +5 -1
- package/build-module/focal-point-picker/controls.js.map +1 -1
- package/build-module/focal-point-picker/index.js +2 -0
- package/build-module/focal-point-picker/index.js.map +1 -1
- package/build-module/focal-point-picker/styles/focal-point-picker-style.js +15 -15
- package/build-module/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
- package/build-module/focal-point-picker/types.js.map +1 -1
- package/build-module/font-size-picker/font-size-picker-select.js +2 -0
- package/build-module/font-size-picker/font-size-picker-select.js.map +1 -1
- package/build-module/font-size-picker/font-size-picker-toggle-group.js +2 -0
- package/build-module/font-size-picker/font-size-picker-toggle-group.js.map +1 -1
- package/build-module/font-size-picker/index.js +6 -1
- package/build-module/font-size-picker/index.js.map +1 -1
- package/build-module/font-size-picker/types.js.map +1 -1
- package/build-module/form-token-field/index.js +6 -2
- package/build-module/form-token-field/index.js.map +1 -1
- package/build-module/form-token-field/token-input.js.map +1 -1
- package/build-module/form-token-field/types.js.map +1 -1
- package/build-module/heading/hook.js +6 -3
- package/build-module/heading/hook.js.map +1 -1
- package/build-module/heading/types.js.map +1 -1
- package/build-module/index.native.js +0 -2
- package/build-module/index.native.js.map +1 -1
- package/build-module/mobile/global-styles-context/utils.native.js +13 -0
- package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build-module/mobile/utils/alignments.native.js +1 -1
- package/build-module/mobile/utils/alignments.native.js.map +1 -1
- package/build-module/palette-edit/index.js +20 -3
- package/build-module/palette-edit/index.js.map +1 -1
- package/build-module/private-apis.js +4 -3
- package/build-module/private-apis.js.map +1 -1
- package/build-module/query-controls/author-select.js +3 -1
- package/build-module/query-controls/author-select.js.map +1 -1
- package/build-module/query-controls/category-select.js +3 -1
- package/build-module/query-controls/category-select.js.map +1 -1
- package/build-module/query-controls/index.js +6 -1
- package/build-module/query-controls/index.js.map +1 -1
- package/build-module/query-controls/types.js.map +1 -1
- package/build-module/slot-fill/types.js.map +1 -1
- package/build-module/tabs/index.js +25 -6
- package/build-module/tabs/index.js.map +1 -1
- package/build-module/tabs/tab.js +6 -6
- package/build-module/tabs/tab.js.map +1 -1
- package/build-module/tabs/tabpanel.js +6 -5
- package/build-module/tabs/tabpanel.js.map +1 -1
- package/build-module/tabs/types.js.map +1 -1
- package/build-module/text/types.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/utils.js +17 -17
- package/build-module/toggle-group-control/toggle-group-control/utils.js.map +1 -1
- package/build-module/tools-panel/tools-panel-item/hook.js +17 -13
- package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
- package/build-style/style-rtl.css +32 -6
- package/build-style/style.css +32 -6
- package/build-types/angle-picker-control/index.d.ts.map +1 -1
- package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -0
- package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
- package/build-types/border-control/styles.d.ts +1 -1
- package/build-types/border-control/styles.d.ts.map +1 -1
- package/build-types/box-control/stories/index.story.d.ts +1944 -0
- package/build-types/box-control/stories/index.story.d.ts.map +1 -0
- package/build-types/checkbox-control/index.d.ts.map +1 -1
- package/build-types/checkbox-control/types.d.ts +3 -2
- package/build-types/checkbox-control/types.d.ts.map +1 -1
- package/build-types/color-palette/styles.d.ts +4 -1
- package/build-types/color-palette/styles.d.ts.map +1 -1
- package/build-types/custom-select-control-v2/index.d.ts +6 -0
- package/build-types/custom-select-control-v2/index.d.ts.map +1 -0
- package/build-types/custom-select-control-v2/stories/index.story.d.ts +19 -0
- package/build-types/custom-select-control-v2/stories/index.story.d.ts.map +1 -0
- package/build-types/custom-select-control-v2/styles.d.ts +47 -0
- package/build-types/custom-select-control-v2/styles.d.ts.map +1 -0
- package/build-types/custom-select-control-v2/types.d.ts +57 -0
- package/build-types/custom-select-control-v2/types.d.ts.map +1 -0
- package/build-types/date-time/date/styles.d.ts +4 -1
- package/build-types/date-time/date/styles.d.ts.map +1 -1
- package/build-types/date-time/time/timezone.d.ts.map +1 -1
- package/build-types/dimension-control/index.d.ts.map +1 -1
- package/build-types/dimension-control/types.d.ts +6 -0
- package/build-types/dimension-control/types.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2-ariakit/index.d.ts +11 -2
- package/build-types/dropdown-menu-v2-ariakit/index.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2-ariakit/styles.d.ts +26 -18
- package/build-types/dropdown-menu-v2-ariakit/styles.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2-ariakit/types.d.ts +0 -6
- package/build-types/dropdown-menu-v2-ariakit/types.d.ts.map +1 -1
- package/build-types/focal-point-picker/controls.d.ts +1 -1
- package/build-types/focal-point-picker/controls.d.ts.map +1 -1
- package/build-types/focal-point-picker/index.d.ts +1 -1
- package/build-types/focal-point-picker/index.d.ts.map +1 -1
- package/build-types/focal-point-picker/stories/index.story.d.ts +8 -4
- package/build-types/focal-point-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/focal-point-picker/types.d.ts +7 -0
- package/build-types/focal-point-picker/types.d.ts.map +1 -1
- package/build-types/font-size-picker/font-size-picker-select.d.ts.map +1 -1
- package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts.map +1 -1
- package/build-types/font-size-picker/index.d.ts.map +1 -1
- package/build-types/font-size-picker/types.d.ts +8 -1
- package/build-types/font-size-picker/types.d.ts.map +1 -1
- package/build-types/form-token-field/index.d.ts.map +1 -1
- package/build-types/form-token-field/token-input.d.ts.map +1 -1
- package/build-types/form-token-field/types.d.ts +1 -1
- package/build-types/form-token-field/types.d.ts.map +1 -1
- package/build-types/heading/component.d.ts +4 -1
- package/build-types/heading/component.d.ts.map +1 -1
- package/build-types/heading/hook.d.ts.map +1 -1
- package/build-types/heading/types.d.ts +20 -1
- package/build-types/heading/types.d.ts.map +1 -1
- package/build-types/navigation/styles/navigation-styles.d.ts +4 -1
- package/build-types/navigation/styles/navigation-styles.d.ts.map +1 -1
- package/build-types/palette-edit/index.d.ts +6 -1
- package/build-types/palette-edit/index.d.ts.map +1 -1
- package/build-types/palette-edit/styles.d.ts +4 -1
- package/build-types/palette-edit/styles.d.ts.map +1 -1
- package/build-types/private-apis.d.ts.map +1 -1
- package/build-types/query-controls/author-select.d.ts +1 -1
- package/build-types/query-controls/author-select.d.ts.map +1 -1
- package/build-types/query-controls/category-select.d.ts +1 -1
- package/build-types/query-controls/category-select.d.ts.map +1 -1
- package/build-types/query-controls/index.d.ts +1 -1
- package/build-types/query-controls/index.d.ts.map +1 -1
- package/build-types/query-controls/types.d.ts +9 -0
- package/build-types/query-controls/types.d.ts.map +1 -1
- package/build-types/slot-fill/bubbles-virtually/slot.d.ts +1 -1
- package/build-types/slot-fill/types.d.ts +16 -6
- package/build-types/slot-fill/types.d.ts.map +1 -1
- package/build-types/tabs/index.d.ts +3 -2
- package/build-types/tabs/index.d.ts.map +1 -1
- package/build-types/tabs/stories/index.story.d.ts.map +1 -1
- package/build-types/tabs/tab.d.ts +2 -1
- package/build-types/tabs/tab.d.ts.map +1 -1
- package/build-types/tabs/tabpanel.d.ts +2 -1
- package/build-types/tabs/tabpanel.d.ts.map +1 -1
- package/build-types/tabs/types.d.ts +8 -3
- package/build-types/tabs/types.d.ts.map +1 -1
- package/build-types/text/types.d.ts +15 -2
- package/build-types/text/types.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/utils.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
- package/package.json +19 -19
- package/src/angle-picker-control/index.tsx +0 -1
- package/src/border-control/border-control-dropdown/component.tsx +3 -1
- package/src/border-control/border-control-dropdown/hook.ts +3 -2
- package/src/border-control/styles.ts +2 -9
- package/src/box-control/stories/index.story.tsx +82 -0
- package/src/button/style.scss +10 -2
- package/src/checkbox-control/README.md +2 -1
- package/src/checkbox-control/index.tsx +8 -6
- package/src/checkbox-control/test/__snapshots__/index.tsx.snap +3 -8
- package/src/checkbox-control/test/index.tsx +7 -0
- package/src/checkbox-control/types.ts +3 -2
- package/src/combobox-control/README.md +1 -3
- package/src/custom-select-control/test/index.js +367 -35
- package/src/custom-select-control-v2/README.md +73 -0
- package/src/custom-select-control-v2/index.tsx +99 -0
- package/src/custom-select-control-v2/stories/index.story.tsx +149 -0
- package/src/custom-select-control-v2/styles.ts +76 -0
- package/src/custom-select-control-v2/types.ts +63 -0
- package/src/date-time/time/timezone.tsx +15 -3
- package/src/dimension-control/index.tsx +2 -0
- package/src/dimension-control/test/__snapshots__/index.test.js.snap +2 -2
- package/src/dimension-control/types.ts +6 -0
- package/src/dropdown-menu-v2-ariakit/README.md +19 -5
- package/src/dropdown-menu-v2-ariakit/index.tsx +85 -36
- package/src/dropdown-menu-v2-ariakit/stories/index.story.tsx +204 -90
- package/src/dropdown-menu-v2-ariakit/styles.ts +165 -117
- package/src/dropdown-menu-v2-ariakit/test/index.tsx +5 -10
- package/src/dropdown-menu-v2-ariakit/types.ts +0 -7
- package/src/focal-point-picker/controls.tsx +4 -0
- package/src/focal-point-picker/index.tsx +2 -0
- package/src/focal-point-picker/styles/focal-point-picker-style.ts +1 -1
- package/src/focal-point-picker/types.ts +7 -0
- package/src/font-size-picker/font-size-picker-select.tsx +2 -0
- package/src/font-size-picker/font-size-picker-toggle-group.tsx +9 -1
- package/src/font-size-picker/index.tsx +11 -3
- package/src/font-size-picker/types.ts +8 -1
- package/src/form-toggle/style.scss +40 -8
- package/src/form-token-field/index.tsx +11 -3
- package/src/form-token-field/token-input.tsx +1 -3
- package/src/form-token-field/types.ts +1 -0
- package/src/heading/README.md +6 -1
- package/src/heading/hook.ts +6 -3
- package/src/heading/types.ts +23 -1
- package/src/index.native.js +0 -2
- package/src/mobile/global-styles-context/test/utils.native.js +22 -0
- package/src/mobile/global-styles-context/utils.native.js +14 -0
- package/src/mobile/link-settings/style.native.scss +0 -17
- package/src/mobile/utils/alignments.native.js +1 -0
- package/src/navigable-container/README.md +1 -1
- package/src/palette-edit/index.tsx +22 -8
- package/src/palette-edit/style.scss +2 -2
- package/src/palette-edit/test/index.tsx +75 -1
- package/src/private-apis.ts +4 -2
- package/src/query-controls/author-select.tsx +2 -0
- package/src/query-controls/category-select.tsx +2 -0
- package/src/query-controls/index.tsx +6 -1
- package/src/query-controls/types.ts +9 -0
- package/src/search-control/README.md +2 -0
- package/src/slot-fill/README.md +1 -1
- package/src/slot-fill/types.ts +18 -6
- package/src/spinner/README.md +2 -0
- package/src/tabs/README.md +4 -4
- package/src/tabs/index.tsx +34 -3
- package/src/tabs/stories/index.story.tsx +56 -48
- package/src/tabs/tab.tsx +7 -7
- package/src/tabs/tabpanel.tsx +10 -6
- package/src/tabs/test/index.tsx +180 -87
- package/src/tabs/types.ts +8 -3
- package/src/text/README.md +5 -1
- package/src/text/types.ts +15 -2
- package/src/toggle-control/README.md +2 -2
- package/src/toggle-group-control/test/index.tsx +54 -1
- package/src/toggle-group-control/toggle-group-control/utils.ts +15 -20
- package/src/tools-panel/tools-panel-item/hook.ts +21 -23
- package/tsconfig.tsbuildinfo +1 -1
- package/build/mobile/inserter-button/index.native.js +0 -98
- package/build/mobile/inserter-button/index.native.js.map +0 -1
- package/build/mobile/inserter-button/sparkles.js +0 -23
- package/build/mobile/inserter-button/sparkles.js.map +0 -1
- package/build/mobile/link-settings/image-link-destinations-screen.native.js +0 -119
- package/build/mobile/link-settings/image-link-destinations-screen.native.js.map +0 -1
- package/build-module/mobile/inserter-button/index.native.js +0 -89
- package/build-module/mobile/inserter-button/index.native.js.map +0 -1
- package/build-module/mobile/inserter-button/sparkles.js +0 -15
- package/build-module/mobile/inserter-button/sparkles.js.map +0 -1
- package/build-module/mobile/link-settings/image-link-destinations-screen.native.js +0 -110
- package/build-module/mobile/link-settings/image-link-destinations-screen.native.js.map +0 -1
- package/build-types/mobile/inserter-button/sparkles.d.ts +0 -3
- package/build-types/mobile/inserter-button/sparkles.d.ts.map +0 -1
- package/src/box-control/stories/index.story.js +0 -75
- package/src/mobile/inserter-button/README.md +0 -62
- package/src/mobile/inserter-button/index.native.js +0 -116
- package/src/mobile/inserter-button/sparkles.js +0 -15
- package/src/mobile/inserter-button/style.native.scss +0 -72
- package/src/mobile/link-settings/image-link-destinations-screen.native.js +0 -152
package/src/spinner/README.md
CHANGED
|
@@ -17,3 +17,5 @@ function Example() {
|
|
|
17
17
|
The spinner component should:
|
|
18
18
|
|
|
19
19
|
- Signal to users that the processing of their request is underway and will soon complete.
|
|
20
|
+
|
|
21
|
+
Check out the [Storybook page](https://wordpress.github.io/gutenberg/?path=/docs/components-spinner--docs) for a visual exploration of this component.
|
package/src/tabs/README.md
CHANGED
|
@@ -163,9 +163,9 @@ The children elements, which should be a series of `Tabs.TabPanel` components.
|
|
|
163
163
|
|
|
164
164
|
##### Props
|
|
165
165
|
|
|
166
|
-
###### `
|
|
166
|
+
###### `tabId`: `string`
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
A unique identifier for the tab, which is used to generate a unique id for the underlying element. The value of this prop should match with the value of the `tabId` prop on the corresponding `Tabs.TabPanel` component.
|
|
169
169
|
|
|
170
170
|
- Required: Yes
|
|
171
171
|
|
|
@@ -198,9 +198,9 @@ The children elements, generally the content to display on the tabpanel.
|
|
|
198
198
|
|
|
199
199
|
- Required: No
|
|
200
200
|
|
|
201
|
-
###### `
|
|
201
|
+
###### `tabId`: `string`
|
|
202
202
|
|
|
203
|
-
|
|
203
|
+
A unique identifier for the tabpanel, which is used to generate an instanced id for the underlying element. The value of this prop should match with the value of the `tabId` prop on the corresponding `Tabs.Tab` component.
|
|
204
204
|
|
|
205
205
|
- Required: Yes
|
|
206
206
|
|
package/src/tabs/index.tsx
CHANGED
|
@@ -8,7 +8,7 @@ import * as Ariakit from '@ariakit/react';
|
|
|
8
8
|
* WordPress dependencies
|
|
9
9
|
*/
|
|
10
10
|
import { useInstanceId } from '@wordpress/compose';
|
|
11
|
-
import { useLayoutEffect, useRef } from '@wordpress/element';
|
|
11
|
+
import { useLayoutEffect, useMemo, useRef } from '@wordpress/element';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Internal dependencies
|
|
@@ -45,7 +45,7 @@ function Tabs( {
|
|
|
45
45
|
const isControlled = selectedTabId !== undefined;
|
|
46
46
|
|
|
47
47
|
const { items, selectedId } = store.useState();
|
|
48
|
-
const { setSelectedId } = store;
|
|
48
|
+
const { setSelectedId, move } = store;
|
|
49
49
|
|
|
50
50
|
// Keep track of whether tabs have been populated. This is used to prevent
|
|
51
51
|
// certain effects from firing too early while tab data and relevant
|
|
@@ -154,8 +154,37 @@ function Tabs( {
|
|
|
154
154
|
setSelectedId,
|
|
155
155
|
] );
|
|
156
156
|
|
|
157
|
+
// In controlled mode, make sure browser focus follows the selected tab if
|
|
158
|
+
// the selection is changed while a tab is already being focused.
|
|
159
|
+
useLayoutEffect( () => {
|
|
160
|
+
if ( ! isControlled || ! selectOnMove ) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const currentItem = items.find( ( item ) => item.id === selectedId );
|
|
164
|
+
const activeElement = currentItem?.element?.ownerDocument.activeElement;
|
|
165
|
+
const tabsHasFocus = items.some( ( item ) => {
|
|
166
|
+
return activeElement && activeElement === item.element;
|
|
167
|
+
} );
|
|
168
|
+
|
|
169
|
+
if (
|
|
170
|
+
activeElement &&
|
|
171
|
+
tabsHasFocus &&
|
|
172
|
+
selectedId !== activeElement.id
|
|
173
|
+
) {
|
|
174
|
+
move( selectedId );
|
|
175
|
+
}
|
|
176
|
+
}, [ isControlled, items, move, selectOnMove, selectedId ] );
|
|
177
|
+
|
|
178
|
+
const contextValue = useMemo(
|
|
179
|
+
() => ( {
|
|
180
|
+
store,
|
|
181
|
+
instanceId,
|
|
182
|
+
} ),
|
|
183
|
+
[ store, instanceId ]
|
|
184
|
+
);
|
|
185
|
+
|
|
157
186
|
return (
|
|
158
|
-
<TabsContext.Provider value={
|
|
187
|
+
<TabsContext.Provider value={ contextValue }>
|
|
159
188
|
{ children }
|
|
160
189
|
</TabsContext.Provider>
|
|
161
190
|
);
|
|
@@ -164,4 +193,6 @@ function Tabs( {
|
|
|
164
193
|
Tabs.TabList = TabList;
|
|
165
194
|
Tabs.Tab = Tab;
|
|
166
195
|
Tabs.TabPanel = TabPanel;
|
|
196
|
+
Tabs.Context = TabsContext;
|
|
197
|
+
|
|
167
198
|
export default Tabs;
|
|
@@ -20,6 +20,14 @@ import Button from '../../button';
|
|
|
20
20
|
const meta: Meta< typeof Tabs > = {
|
|
21
21
|
title: 'Components (Experimental)/Tabs',
|
|
22
22
|
component: Tabs,
|
|
23
|
+
subcomponents: {
|
|
24
|
+
// @ts-expect-error - See https://github.com/storybookjs/storybook/issues/23170
|
|
25
|
+
'Tabs.TabList': Tabs.TabList,
|
|
26
|
+
// @ts-expect-error - See https://github.com/storybookjs/storybook/issues/23170
|
|
27
|
+
'Tabs.Tab': Tabs.Tab,
|
|
28
|
+
// @ts-expect-error - See https://github.com/storybookjs/storybook/issues/23170
|
|
29
|
+
'Tabs.TabPanel': Tabs.TabPanel,
|
|
30
|
+
},
|
|
23
31
|
parameters: {
|
|
24
32
|
actions: { argTypesRegex: '^on.*' },
|
|
25
33
|
controls: { expanded: true },
|
|
@@ -32,17 +40,17 @@ const Template: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
32
40
|
return (
|
|
33
41
|
<Tabs { ...props }>
|
|
34
42
|
<Tabs.TabList>
|
|
35
|
-
<Tabs.Tab
|
|
36
|
-
<Tabs.Tab
|
|
37
|
-
<Tabs.Tab
|
|
43
|
+
<Tabs.Tab tabId="tab1">Tab 1</Tabs.Tab>
|
|
44
|
+
<Tabs.Tab tabId="tab2">Tab 2</Tabs.Tab>
|
|
45
|
+
<Tabs.Tab tabId="tab3">Tab 3</Tabs.Tab>
|
|
38
46
|
</Tabs.TabList>
|
|
39
|
-
<Tabs.TabPanel
|
|
47
|
+
<Tabs.TabPanel tabId="tab1">
|
|
40
48
|
<p>Selected tab: Tab 1</p>
|
|
41
49
|
</Tabs.TabPanel>
|
|
42
|
-
<Tabs.TabPanel
|
|
50
|
+
<Tabs.TabPanel tabId="tab2">
|
|
43
51
|
<p>Selected tab: Tab 2</p>
|
|
44
52
|
</Tabs.TabPanel>
|
|
45
|
-
<Tabs.TabPanel
|
|
53
|
+
<Tabs.TabPanel tabId="tab3" focusable={ false }>
|
|
46
54
|
<p>Selected tab: Tab 3</p>
|
|
47
55
|
<p>
|
|
48
56
|
This tabpanel has its <code>focusable</code> prop set to
|
|
@@ -63,19 +71,19 @@ const DisabledTabTemplate: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
63
71
|
return (
|
|
64
72
|
<Tabs { ...props }>
|
|
65
73
|
<Tabs.TabList>
|
|
66
|
-
<Tabs.Tab
|
|
74
|
+
<Tabs.Tab tabId="tab1" disabled={ true }>
|
|
67
75
|
Tab 1
|
|
68
76
|
</Tabs.Tab>
|
|
69
|
-
<Tabs.Tab
|
|
70
|
-
<Tabs.Tab
|
|
77
|
+
<Tabs.Tab tabId="tab2">Tab 2</Tabs.Tab>
|
|
78
|
+
<Tabs.Tab tabId="tab3">Tab 3</Tabs.Tab>
|
|
71
79
|
</Tabs.TabList>
|
|
72
|
-
<Tabs.TabPanel
|
|
80
|
+
<Tabs.TabPanel tabId="tab1">
|
|
73
81
|
<p>Selected tab: Tab 1</p>
|
|
74
82
|
</Tabs.TabPanel>
|
|
75
|
-
<Tabs.TabPanel
|
|
83
|
+
<Tabs.TabPanel tabId="tab2">
|
|
76
84
|
<p>Selected tab: Tab 2</p>
|
|
77
85
|
</Tabs.TabPanel>
|
|
78
|
-
<Tabs.TabPanel
|
|
86
|
+
<Tabs.TabPanel tabId="tab3">
|
|
79
87
|
<p>Selected tab: Tab 3</p>
|
|
80
88
|
</Tabs.TabPanel>
|
|
81
89
|
</Tabs>
|
|
@@ -88,31 +96,31 @@ const WithTabIconsAndTooltipsTemplate: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
88
96
|
<Tabs { ...props }>
|
|
89
97
|
<Tabs.TabList>
|
|
90
98
|
<Tabs.Tab
|
|
91
|
-
|
|
99
|
+
tabId="tab1"
|
|
92
100
|
render={
|
|
93
101
|
<Button icon={ wordpress } label="Tab 1" showTooltip />
|
|
94
102
|
}
|
|
95
103
|
/>
|
|
96
104
|
<Tabs.Tab
|
|
97
|
-
|
|
105
|
+
tabId="tab2"
|
|
98
106
|
render={
|
|
99
107
|
<Button icon={ link } label="Tab 2" showTooltip />
|
|
100
108
|
}
|
|
101
109
|
/>
|
|
102
110
|
<Tabs.Tab
|
|
103
|
-
|
|
111
|
+
tabId="tab3"
|
|
104
112
|
render={
|
|
105
113
|
<Button icon={ more } label="Tab 3" showTooltip />
|
|
106
114
|
}
|
|
107
115
|
/>
|
|
108
116
|
</Tabs.TabList>
|
|
109
|
-
<Tabs.TabPanel
|
|
117
|
+
<Tabs.TabPanel tabId="tab1">
|
|
110
118
|
<p>Selected tab: Tab 1</p>
|
|
111
119
|
</Tabs.TabPanel>
|
|
112
|
-
<Tabs.TabPanel
|
|
120
|
+
<Tabs.TabPanel tabId="tab2">
|
|
113
121
|
<p>Selected tab: Tab 2</p>
|
|
114
122
|
</Tabs.TabPanel>
|
|
115
|
-
<Tabs.TabPanel
|
|
123
|
+
<Tabs.TabPanel tabId="tab3">
|
|
116
124
|
<p>Selected tab: Tab 3</p>
|
|
117
125
|
</Tabs.TabPanel>
|
|
118
126
|
</Tabs>
|
|
@@ -132,18 +140,18 @@ const UsingSlotFillTemplate: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
132
140
|
<SlotFillProvider>
|
|
133
141
|
<Tabs { ...props }>
|
|
134
142
|
<Tabs.TabList>
|
|
135
|
-
<Tabs.Tab
|
|
136
|
-
<Tabs.Tab
|
|
137
|
-
<Tabs.Tab
|
|
143
|
+
<Tabs.Tab tabId="tab1">Tab 1</Tabs.Tab>
|
|
144
|
+
<Tabs.Tab tabId="tab2">Tab 2</Tabs.Tab>
|
|
145
|
+
<Tabs.Tab tabId="tab3">Tab 3</Tabs.Tab>
|
|
138
146
|
</Tabs.TabList>
|
|
139
147
|
<Fill name="tabs-are-fun">
|
|
140
|
-
<Tabs.TabPanel
|
|
148
|
+
<Tabs.TabPanel tabId="tab1">
|
|
141
149
|
<p>Selected tab: Tab 1</p>
|
|
142
150
|
</Tabs.TabPanel>
|
|
143
|
-
<Tabs.TabPanel
|
|
151
|
+
<Tabs.TabPanel tabId="tab2">
|
|
144
152
|
<p>Selected tab: Tab 2</p>
|
|
145
153
|
</Tabs.TabPanel>
|
|
146
|
-
<Tabs.TabPanel
|
|
154
|
+
<Tabs.TabPanel tabId="tab3">
|
|
147
155
|
<p>Selected tab: Tab 3</p>
|
|
148
156
|
</Tabs.TabPanel>
|
|
149
157
|
</Fill>
|
|
@@ -188,9 +196,9 @@ const CloseButtonTemplate: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
188
196
|
} }
|
|
189
197
|
>
|
|
190
198
|
<Tabs.TabList>
|
|
191
|
-
<Tabs.Tab
|
|
192
|
-
<Tabs.Tab
|
|
193
|
-
<Tabs.Tab
|
|
199
|
+
<Tabs.Tab tabId="tab1">Tab 1</Tabs.Tab>
|
|
200
|
+
<Tabs.Tab tabId="tab2">Tab 2</Tabs.Tab>
|
|
201
|
+
<Tabs.Tab tabId="tab3">Tab 3</Tabs.Tab>
|
|
194
202
|
</Tabs.TabList>
|
|
195
203
|
<Button
|
|
196
204
|
variant={ 'tertiary' }
|
|
@@ -203,13 +211,13 @@ const CloseButtonTemplate: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
203
211
|
Close Tabs
|
|
204
212
|
</Button>
|
|
205
213
|
</div>
|
|
206
|
-
<Tabs.TabPanel
|
|
214
|
+
<Tabs.TabPanel tabId="tab1">
|
|
207
215
|
<p>Selected tab: Tab 1</p>
|
|
208
216
|
</Tabs.TabPanel>
|
|
209
|
-
<Tabs.TabPanel
|
|
217
|
+
<Tabs.TabPanel tabId="tab2">
|
|
210
218
|
<p>Selected tab: Tab 2</p>
|
|
211
219
|
</Tabs.TabPanel>
|
|
212
|
-
<Tabs.TabPanel
|
|
220
|
+
<Tabs.TabPanel tabId="tab3">
|
|
213
221
|
<p>Selected tab: Tab 3</p>
|
|
214
222
|
</Tabs.TabPanel>
|
|
215
223
|
</Tabs>
|
|
@@ -243,19 +251,19 @@ const ControlledModeTemplate: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
243
251
|
} }
|
|
244
252
|
>
|
|
245
253
|
<Tabs.TabList>
|
|
246
|
-
<Tabs.Tab
|
|
254
|
+
<Tabs.Tab tabId="tab1">Tab 1</Tabs.Tab>
|
|
247
255
|
|
|
248
|
-
<Tabs.Tab
|
|
256
|
+
<Tabs.Tab tabId="tab2">Tab 2</Tabs.Tab>
|
|
249
257
|
|
|
250
|
-
<Tabs.Tab
|
|
258
|
+
<Tabs.Tab tabId="tab3">Tab 3</Tabs.Tab>
|
|
251
259
|
</Tabs.TabList>
|
|
252
|
-
<Tabs.TabPanel
|
|
260
|
+
<Tabs.TabPanel tabId="tab1">
|
|
253
261
|
<p>Selected tab: Tab 1</p>
|
|
254
262
|
</Tabs.TabPanel>
|
|
255
|
-
<Tabs.TabPanel
|
|
263
|
+
<Tabs.TabPanel tabId="tab2">
|
|
256
264
|
<p>Selected tab: Tab 2</p>
|
|
257
265
|
</Tabs.TabPanel>
|
|
258
|
-
<Tabs.TabPanel
|
|
266
|
+
<Tabs.TabPanel tabId="tab3">
|
|
259
267
|
<p>Selected tab: Tab 3</p>
|
|
260
268
|
</Tabs.TabPanel>
|
|
261
269
|
</Tabs>
|
|
@@ -306,19 +314,19 @@ const TabBecomesDisabledTemplate: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
306
314
|
</Button>
|
|
307
315
|
<Tabs { ...props }>
|
|
308
316
|
<Tabs.TabList>
|
|
309
|
-
<Tabs.Tab
|
|
310
|
-
<Tabs.Tab
|
|
317
|
+
<Tabs.Tab tabId="tab1">Tab 1</Tabs.Tab>
|
|
318
|
+
<Tabs.Tab tabId="tab2" disabled={ disableTab2 }>
|
|
311
319
|
Tab 2
|
|
312
320
|
</Tabs.Tab>
|
|
313
|
-
<Tabs.Tab
|
|
321
|
+
<Tabs.Tab tabId="tab3">Tab 3</Tabs.Tab>
|
|
314
322
|
</Tabs.TabList>
|
|
315
|
-
<Tabs.TabPanel
|
|
323
|
+
<Tabs.TabPanel tabId="tab1">
|
|
316
324
|
<p>Selected tab: Tab 1</p>
|
|
317
325
|
</Tabs.TabPanel>
|
|
318
|
-
<Tabs.TabPanel
|
|
326
|
+
<Tabs.TabPanel tabId="tab2">
|
|
319
327
|
<p>Selected tab: Tab 2</p>
|
|
320
328
|
</Tabs.TabPanel>
|
|
321
|
-
<Tabs.TabPanel
|
|
329
|
+
<Tabs.TabPanel tabId="tab3">
|
|
322
330
|
<p>Selected tab: Tab 3</p>
|
|
323
331
|
</Tabs.TabPanel>
|
|
324
332
|
</Tabs>
|
|
@@ -340,17 +348,17 @@ const TabGetsRemovedTemplate: StoryFn< typeof Tabs > = ( props ) => {
|
|
|
340
348
|
</Button>
|
|
341
349
|
<Tabs { ...props }>
|
|
342
350
|
<Tabs.TabList>
|
|
343
|
-
{ ! removeTab1 && <Tabs.Tab
|
|
344
|
-
<Tabs.Tab
|
|
345
|
-
<Tabs.Tab
|
|
351
|
+
{ ! removeTab1 && <Tabs.Tab tabId="tab1">Tab 1</Tabs.Tab> }
|
|
352
|
+
<Tabs.Tab tabId="tab2">Tab 2</Tabs.Tab>
|
|
353
|
+
<Tabs.Tab tabId="tab3">Tab 3</Tabs.Tab>
|
|
346
354
|
</Tabs.TabList>
|
|
347
|
-
<Tabs.TabPanel
|
|
355
|
+
<Tabs.TabPanel tabId="tab1">
|
|
348
356
|
<p>Selected tab: Tab 1</p>
|
|
349
357
|
</Tabs.TabPanel>
|
|
350
|
-
<Tabs.TabPanel
|
|
358
|
+
<Tabs.TabPanel tabId="tab2">
|
|
351
359
|
<p>Selected tab: Tab 2</p>
|
|
352
360
|
</Tabs.TabPanel>
|
|
353
|
-
<Tabs.TabPanel
|
|
361
|
+
<Tabs.TabPanel tabId="tab3">
|
|
354
362
|
<p>Selected tab: Tab 3</p>
|
|
355
363
|
</Tabs.TabPanel>
|
|
356
364
|
</Tabs>
|
package/src/tabs/tab.tsx
CHANGED
|
@@ -2,28 +2,28 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { forwardRef } from '@wordpress/element';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Internal dependencies
|
|
9
9
|
*/
|
|
10
10
|
import type { TabProps } from './types';
|
|
11
11
|
import warning from '@wordpress/warning';
|
|
12
|
-
import {
|
|
12
|
+
import { useTabsContext } from './context';
|
|
13
13
|
import { Tab as StyledTab } from './styles';
|
|
14
14
|
import type { WordPressComponentProps } from '../context';
|
|
15
15
|
|
|
16
16
|
export const Tab = forwardRef<
|
|
17
17
|
HTMLButtonElement,
|
|
18
|
-
WordPressComponentProps< TabProps, 'button', false >
|
|
19
|
-
>( function Tab( { children,
|
|
20
|
-
const context =
|
|
18
|
+
Omit< WordPressComponentProps< TabProps, 'button', false >, 'id' >
|
|
19
|
+
>( function Tab( { children, tabId, disabled, render, ...otherProps }, ref ) {
|
|
20
|
+
const context = useTabsContext();
|
|
21
21
|
if ( ! context ) {
|
|
22
|
-
warning( '`Tabs.
|
|
22
|
+
warning( '`Tabs.Tab` must be wrapped in a `Tabs` component.' );
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
25
|
const { store, instanceId } = context;
|
|
26
|
-
const instancedTabId = `${ instanceId }-${
|
|
26
|
+
const instancedTabId = `${ instanceId }-${ tabId }`;
|
|
27
27
|
return (
|
|
28
28
|
<StyledTab
|
|
29
29
|
ref={ ref }
|
package/src/tabs/tabpanel.tsx
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* WordPress dependencies
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { forwardRef
|
|
9
|
+
import { forwardRef } from '@wordpress/element';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Internal dependencies
|
|
@@ -15,25 +15,29 @@ import type { TabPanelProps } from './types';
|
|
|
15
15
|
import { TabPanel as StyledTabPanel } from './styles';
|
|
16
16
|
|
|
17
17
|
import warning from '@wordpress/warning';
|
|
18
|
-
import {
|
|
18
|
+
import { useTabsContext } from './context';
|
|
19
19
|
import type { WordPressComponentProps } from '../context';
|
|
20
20
|
|
|
21
21
|
export const TabPanel = forwardRef<
|
|
22
22
|
HTMLDivElement,
|
|
23
|
-
WordPressComponentProps< TabPanelProps, 'div', false >
|
|
24
|
-
>( function TabPanel(
|
|
25
|
-
|
|
23
|
+
Omit< WordPressComponentProps< TabPanelProps, 'div', false >, 'id' >
|
|
24
|
+
>( function TabPanel(
|
|
25
|
+
{ children, tabId, focusable = true, ...otherProps },
|
|
26
|
+
ref
|
|
27
|
+
) {
|
|
28
|
+
const context = useTabsContext();
|
|
26
29
|
if ( ! context ) {
|
|
27
30
|
warning( '`Tabs.TabPanel` must be wrapped in a `Tabs` component.' );
|
|
28
31
|
return null;
|
|
29
32
|
}
|
|
30
33
|
const { store, instanceId } = context;
|
|
34
|
+
const instancedTabId = `${ instanceId }-${ tabId }`;
|
|
31
35
|
|
|
32
36
|
return (
|
|
33
37
|
<StyledTabPanel
|
|
34
38
|
ref={ ref }
|
|
35
39
|
store={ store }
|
|
36
|
-
id={
|
|
40
|
+
id={ instancedTabId }
|
|
37
41
|
focusable={ focusable }
|
|
38
42
|
{ ...otherProps }
|
|
39
43
|
>
|