@wordpress/block-library 10.1.1-next.v.202607070741.0 → 10.2.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 +9 -0
- package/build/accordion/block.json +1 -0
- package/build/button/edit.cjs +18 -8
- package/build/button/edit.cjs.map +2 -2
- package/build/cover/block.json +11 -0
- package/build/cover/edit/block-controls.cjs +11 -4
- package/build/cover/edit/block-controls.cjs.map +2 -2
- package/build/cover/edit/embed-video-url-input.cjs +5 -3
- package/build/cover/edit/embed-video-url-input.cjs.map +3 -3
- package/build/cover/edit/index.cjs +1 -1
- package/build/cover/edit/index.cjs.map +2 -2
- package/build/cover/embed-video-utils.cjs +17 -7
- package/build/cover/embed-video-utils.cjs.map +2 -2
- package/build/details/transforms.cjs +1 -3
- package/build/details/transforms.cjs.map +2 -2
- package/build/embed/embed-placeholder.cjs +0 -1
- package/build/embed/embed-placeholder.cjs.map +2 -2
- package/build/file/edit.cjs +4 -3
- package/build/file/edit.cjs.map +2 -2
- package/build/file/transforms.cjs +25 -60
- package/build/file/transforms.cjs.map +2 -2
- package/build/gallery/block.json +4 -2
- package/build/gallery/edit.cjs +1 -1
- package/build/gallery/edit.cjs.map +3 -3
- package/build/gallery/gap-styles.cjs +49 -13
- package/build/gallery/gap-styles.cjs.map +3 -3
- package/build/group/transforms.cjs +1 -1
- package/build/group/transforms.cjs.map +2 -2
- package/build/icon/components/custom-inserter/icon-grid.cjs +25 -12
- package/build/icon/components/custom-inserter/icon-grid.cjs.map +2 -2
- package/build/icon/components/custom-inserter/index.cjs +100 -31
- package/build/icon/components/custom-inserter/index.cjs.map +3 -3
- package/build/icon/edit.cjs +11 -12
- package/build/icon/edit.cjs.map +2 -2
- package/build/image/block.json +1 -1
- package/build/image/edit.cjs +0 -34
- package/build/image/edit.cjs.map +2 -2
- package/build/image/image.cjs +4 -23
- package/build/image/image.cjs.map +3 -3
- package/build/image/transforms.cjs +78 -0
- package/build/image/transforms.cjs.map +3 -3
- package/build/index.cjs +18 -8
- package/build/index.cjs.map +2 -2
- package/build/latest-posts/edit.cjs +5 -8
- package/build/latest-posts/edit.cjs.map +2 -2
- package/build/list-item/edit.cjs +1 -1
- package/build/list-item/edit.cjs.map +2 -2
- package/build/list-item/hooks/use-enter.cjs +14 -17
- package/build/list-item/hooks/use-enter.cjs.map +3 -3
- package/build/list-item/hooks/use-space.cjs +3 -2
- package/build/list-item/hooks/use-space.cjs.map +3 -3
- package/build/paragraph/block.json +1 -0
- package/build/paragraph/use-enter.cjs +3 -7
- package/build/paragraph/use-enter.cjs.map +3 -3
- package/build/playlist/block.json +29 -10
- package/build/playlist/edit.cjs +216 -14
- package/build/playlist/edit.cjs.map +3 -3
- package/build/playlist/index.cjs +1 -1
- package/build/playlist/index.cjs.map +2 -2
- package/build/playlist/utils.cjs +19 -5
- package/build/playlist/utils.cjs.map +2 -2
- package/build/playlist/view.cjs +83 -13
- package/build/playlist/view.cjs.map +2 -2
- package/build/playlist-track/block.json +4 -2
- package/build/playlist-track/edit.cjs +94 -64
- package/build/playlist-track/edit.cjs.map +2 -2
- package/build/post-content/block.json +1 -0
- package/build/post-template/block.json +2 -1
- package/build/post-template/edit.cjs +10 -1
- package/build/post-template/edit.cjs.map +2 -2
- package/build/pullquote/block.json +3 -1
- package/build/query/block.json +3 -2
- package/build/query/edit/inspector-controls/index.cjs +38 -4
- package/build/query/edit/inspector-controls/index.cjs.map +2 -2
- package/build/query/edit/inspector-controls/offset-controls.cjs +0 -1
- package/build/query/edit/inspector-controls/offset-controls.cjs.map +2 -2
- package/build/query/edit/inspector-controls/pages-control.cjs +0 -1
- package/build/query/edit/inspector-controls/pages-control.cjs.map +2 -2
- package/build/query/edit/query-content.cjs +10 -3
- package/build/query/edit/query-content.cjs.map +2 -2
- package/build/query/index.cjs +2 -1
- package/build/query/index.cjs.map +2 -2
- package/build/quote/block.json +3 -1
- package/build/quote/transforms.cjs +1 -3
- package/build/quote/transforms.cjs.map +2 -2
- package/build/rss/edit.cjs +0 -1
- package/build/rss/edit.cjs.map +2 -2
- package/build/tab-list/block.json +2 -2
- package/build/tab-list/edit.cjs +65 -11
- package/build/tab-list/edit.cjs.map +3 -3
- package/build/tab-panel/block.json +1 -6
- package/build/tab-panel/edit.cjs +15 -15
- package/build/tab-panel/edit.cjs.map +2 -2
- package/build/tab-panels/block.json +0 -1
- package/build/tabs/block.json +0 -5
- package/build/tabs/edit.cjs +4 -39
- package/build/tabs/edit.cjs.map +3 -3
- package/build/tabs/use-tab-list-items-sync.cjs +19 -1
- package/build/tabs/use-tab-list-items-sync.cjs.map +2 -2
- package/build/term-name/block.json +1 -3
- package/build/term-name/deprecated.cjs +105 -0
- package/build/term-name/deprecated.cjs.map +7 -0
- package/build/term-name/edit.cjs +11 -37
- package/build/term-name/edit.cjs.map +3 -3
- package/build/term-name/index.cjs +3 -1
- package/build/term-name/index.cjs.map +3 -3
- package/build/utils/waveform-player.cjs +138 -22
- package/build/utils/waveform-player.cjs.map +2 -2
- package/build/utils/waveform-utils.cjs +315 -17
- package/build/utils/waveform-utils.cjs.map +2 -2
- package/build/video/edit.cjs +2 -11
- package/build/video/edit.cjs.map +3 -3
- package/build-module/accordion/block.json +1 -0
- package/build-module/button/edit.mjs +19 -14
- package/build-module/button/edit.mjs.map +2 -2
- package/build-module/cover/block.json +11 -0
- package/build-module/cover/edit/block-controls.mjs +11 -4
- package/build-module/cover/edit/block-controls.mjs.map +2 -2
- package/build-module/cover/edit/embed-video-url-input.mjs +5 -4
- package/build-module/cover/edit/embed-video-url-input.mjs.map +2 -2
- package/build-module/cover/edit/index.mjs +1 -1
- package/build-module/cover/edit/index.mjs.map +2 -2
- package/build-module/cover/embed-video-utils.mjs +16 -7
- package/build-module/cover/embed-video-utils.mjs.map +2 -2
- package/build-module/details/transforms.mjs +2 -7
- package/build-module/details/transforms.mjs.map +2 -2
- package/build-module/embed/embed-placeholder.mjs +0 -1
- package/build-module/embed/embed-placeholder.mjs.map +2 -2
- package/build-module/file/edit.mjs +4 -3
- package/build-module/file/edit.mjs.map +2 -2
- package/build-module/file/transforms.mjs +25 -60
- package/build-module/file/transforms.mjs.map +2 -2
- package/build-module/gallery/block.json +4 -2
- package/build-module/gallery/edit.mjs +3 -3
- package/build-module/gallery/edit.mjs.map +2 -2
- package/build-module/gallery/gap-styles.mjs +53 -14
- package/build-module/gallery/gap-styles.mjs.map +2 -2
- package/build-module/group/transforms.mjs +2 -5
- package/build-module/group/transforms.mjs.map +2 -2
- package/build-module/icon/components/custom-inserter/icon-grid.mjs +25 -12
- package/build-module/icon/components/custom-inserter/icon-grid.mjs.map +2 -2
- package/build-module/icon/components/custom-inserter/index.mjs +102 -33
- package/build-module/icon/components/custom-inserter/index.mjs.map +2 -2
- package/build-module/icon/edit.mjs +11 -12
- package/build-module/icon/edit.mjs.map +2 -2
- package/build-module/image/block.json +1 -1
- package/build-module/image/edit.mjs +0 -34
- package/build-module/image/edit.mjs.map +2 -2
- package/build-module/image/image.mjs +4 -13
- package/build-module/image/image.mjs.map +2 -2
- package/build-module/image/transforms.mjs +78 -0
- package/build-module/image/transforms.mjs.map +2 -2
- package/build-module/index.mjs +18 -8
- package/build-module/index.mjs.map +2 -2
- package/build-module/latest-posts/edit.mjs +5 -8
- package/build-module/latest-posts/edit.mjs.map +2 -2
- package/build-module/list-item/edit.mjs +1 -1
- package/build-module/list-item/edit.mjs.map +2 -2
- package/build-module/list-item/hooks/use-enter.mjs +15 -21
- package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
- package/build-module/list-item/hooks/use-space.mjs +4 -6
- package/build-module/list-item/hooks/use-space.mjs.map +2 -2
- package/build-module/paragraph/block.json +1 -0
- package/build-module/paragraph/use-enter.mjs +4 -11
- package/build-module/paragraph/use-enter.mjs.map +2 -2
- package/build-module/playlist/block.json +29 -10
- package/build-module/playlist/edit.mjs +220 -16
- package/build-module/playlist/edit.mjs.map +2 -2
- package/build-module/playlist/index.mjs +1 -1
- package/build-module/playlist/index.mjs.map +2 -2
- package/build-module/playlist/utils.mjs +17 -4
- package/build-module/playlist/utils.mjs.map +2 -2
- package/build-module/playlist/view.mjs +89 -14
- package/build-module/playlist/view.mjs.map +2 -2
- package/build-module/playlist-track/block.json +4 -2
- package/build-module/playlist-track/edit.mjs +96 -65
- package/build-module/playlist-track/edit.mjs.map +2 -2
- package/build-module/post-content/block.json +1 -0
- package/build-module/post-template/block.json +2 -1
- package/build-module/post-template/edit.mjs +10 -1
- package/build-module/post-template/edit.mjs.map +2 -2
- package/build-module/pullquote/block.json +3 -1
- package/build-module/query/block.json +3 -2
- package/build-module/query/edit/inspector-controls/index.mjs +40 -5
- package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/offset-controls.mjs +0 -1
- package/build-module/query/edit/inspector-controls/offset-controls.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/pages-control.mjs +0 -1
- package/build-module/query/edit/inspector-controls/pages-control.mjs.map +2 -2
- package/build-module/query/edit/query-content.mjs +10 -3
- package/build-module/query/edit/query-content.mjs.map +2 -2
- package/build-module/query/index.mjs +2 -1
- package/build-module/query/index.mjs.map +2 -2
- package/build-module/quote/block.json +3 -1
- package/build-module/quote/transforms.mjs +2 -4
- package/build-module/quote/transforms.mjs.map +2 -2
- package/build-module/rss/edit.mjs +0 -1
- package/build-module/rss/edit.mjs.map +2 -2
- package/build-module/tab-list/block.json +2 -2
- package/build-module/tab-list/edit.mjs +72 -13
- package/build-module/tab-list/edit.mjs.map +2 -2
- package/build-module/tab-panel/block.json +1 -6
- package/build-module/tab-panel/edit.mjs +16 -16
- package/build-module/tab-panel/edit.mjs.map +2 -2
- package/build-module/tab-panels/block.json +0 -1
- package/build-module/tabs/block.json +0 -5
- package/build-module/tabs/edit.mjs +5 -45
- package/build-module/tabs/edit.mjs.map +2 -2
- package/build-module/tabs/use-tab-list-items-sync.mjs +19 -1
- package/build-module/tabs/use-tab-list-items-sync.mjs.map +2 -2
- package/build-module/term-name/block.json +1 -3
- package/build-module/term-name/deprecated.mjs +74 -0
- package/build-module/term-name/deprecated.mjs.map +7 -0
- package/build-module/term-name/edit.mjs +11 -28
- package/build-module/term-name/edit.mjs.map +2 -2
- package/build-module/term-name/index.mjs +3 -1
- package/build-module/term-name/index.mjs.map +2 -2
- package/build-module/utils/waveform-player.mjs +144 -23
- package/build-module/utils/waveform-player.mjs.map +2 -2
- package/build-module/utils/waveform-utils.mjs +310 -16
- package/build-module/utils/waveform-utils.mjs.map +2 -2
- package/build-module/video/edit.mjs +2 -11
- package/build-module/video/edit.mjs.map +2 -2
- package/build-style/editor-rtl.css +46 -21
- package/build-style/editor.css +46 -21
- package/build-style/icon/editor-rtl.css +80 -7
- package/build-style/icon/editor.css +80 -7
- package/build-style/more/editor-rtl.css +2 -2
- package/build-style/more/editor.css +2 -2
- package/build-style/navigation/editor-rtl.css +3 -4
- package/build-style/navigation/editor.css +3 -4
- package/build-style/navigation-link/editor-rtl.css +1 -1
- package/build-style/navigation-link/editor.css +1 -1
- package/build-style/nextpage/editor-rtl.css +2 -2
- package/build-style/nextpage/editor.css +2 -2
- package/build-style/playlist/editor-rtl.css +6 -0
- package/build-style/playlist/editor.css +6 -0
- package/build-style/playlist/style-rtl.css +37 -1
- package/build-style/playlist/style.css +37 -1
- package/build-style/playlist-track/style-rtl.css +10 -0
- package/build-style/playlist-track/style.css +10 -0
- package/build-style/style-rtl.css +47 -1
- package/build-style/style.css +47 -1
- package/build-style/video/editor-rtl.css +1 -1
- package/build-style/video/editor.css +1 -1
- package/build-types/table-of-contents/list.d.ts +1 -1
- package/build-types/table-of-contents/list.d.ts.map +1 -1
- package/package.json +46 -44
- package/src/accordion/README.md +1 -0
- package/src/accordion/block.json +1 -0
- package/src/button/edit.js +21 -15
- package/src/cover/README.md +60 -0
- package/src/cover/block.json +11 -0
- package/src/cover/edit/block-controls.js +21 -11
- package/src/cover/edit/embed-video-url-input.js +5 -4
- package/src/cover/edit/index.js +9 -11
- package/src/cover/embed-video-utils.js +38 -13
- package/src/details/transforms.js +2 -7
- package/src/embed/embed-placeholder.js +0 -1
- package/src/file/edit.js +8 -8
- package/src/file/transforms.js +28 -60
- package/src/gallery/README.md +1 -1
- package/src/gallery/block.json +4 -2
- package/src/gallery/edit.js +3 -3
- package/src/gallery/gap-styles.js +79 -20
- package/src/gallery/index.php +103 -43
- package/src/group/transforms.js +2 -5
- package/src/icon/components/custom-inserter/icon-grid.js +40 -11
- package/src/icon/components/custom-inserter/index.js +98 -25
- package/src/icon/edit.js +11 -17
- package/src/icon/editor.scss +33 -8
- package/src/image/README.md +1 -1
- package/src/image/block.json +1 -1
- package/src/image/edit.js +0 -52
- package/src/image/editor.scss +2 -0
- package/src/image/image.js +19 -24
- package/src/image/transforms.js +128 -0
- package/src/index.js +19 -7
- package/src/latest-posts/edit.js +5 -8
- package/src/latest-posts/index.php +46 -16
- package/src/list-item/edit.js +1 -1
- package/src/list-item/hooks/use-enter.js +15 -22
- package/src/list-item/hooks/use-space.js +4 -6
- package/src/media-text/editor.scss +1 -0
- package/src/more/editor.scss +1 -1
- package/src/navigation/editor.scss +1 -2
- package/src/navigation-link/editor.scss +1 -1
- package/src/navigation-link/index.php +6 -3
- package/src/navigation-submenu/index.php +6 -3
- package/src/nextpage/editor.scss +1 -1
- package/src/paragraph/README.md +1 -0
- package/src/paragraph/block.json +1 -0
- package/src/paragraph/use-enter.js +4 -11
- package/src/playlist/README.md +17 -18
- package/src/playlist/block.json +29 -10
- package/src/playlist/edit.js +247 -15
- package/src/playlist/editor.scss +6 -0
- package/src/playlist/index.js +1 -1
- package/src/playlist/index.php +58 -14
- package/src/playlist/style.scss +51 -1
- package/src/playlist/test/edit.js +13 -2
- package/src/playlist/utils.js +25 -7
- package/src/playlist/view.js +97 -16
- package/src/playlist-track/README.md +3 -3
- package/src/playlist-track/block.json +4 -2
- package/src/playlist-track/edit.js +94 -70
- package/src/playlist-track/index.php +20 -6
- package/src/playlist-track/style.scss +10 -0
- package/src/playlist-track/test/edit.js +169 -0
- package/src/post-content/README.md +1 -0
- package/src/post-content/block.json +1 -0
- package/src/post-template/README.md +1 -0
- package/src/post-template/block.json +2 -1
- package/src/post-template/edit.js +9 -0
- package/src/pullquote/README.md +1 -0
- package/src/pullquote/block.json +3 -1
- package/src/query/README.md +2 -1
- package/src/query/block.json +3 -2
- package/src/query/edit/inspector-controls/index.js +43 -3
- package/src/query/edit/inspector-controls/offset-controls.js +0 -1
- package/src/query/edit/inspector-controls/pages-control.js +0 -1
- package/src/query/edit/query-content.js +19 -3
- package/src/query/index.js +1 -0
- package/src/quote/README.md +1 -0
- package/src/quote/block.json +3 -1
- package/src/quote/transforms.js +2 -4
- package/src/rss/edit.js +0 -1
- package/src/rss/index.php +1 -1
- package/src/tab-list/README.md +4 -5
- package/src/tab-list/block.json +2 -2
- package/src/tab-list/edit.js +90 -28
- package/src/tab-list/index.php +9 -4
- package/src/tab-panel/README.md +4 -6
- package/src/tab-panel/block.json +1 -6
- package/src/tab-panel/edit.js +19 -24
- package/src/tab-panels/README.md +5 -3
- package/src/tab-panels/block.json +0 -1
- package/src/tabs/README.md +18 -9
- package/src/tabs/block.json +0 -5
- package/src/tabs/edit.js +7 -64
- package/src/tabs/use-tab-list-items-sync.js +24 -4
- package/src/template-part/index.php +1 -16
- package/src/term-name/README.md +1 -1
- package/src/term-name/block.json +1 -3
- package/src/term-name/deprecated.js +74 -0
- package/src/term-name/edit.js +2 -18
- package/src/term-name/index.js +2 -0
- package/src/utils/media-control.scss +1 -5
- package/src/utils/test/waveform-player.js +297 -34
- package/src/utils/test/waveform-utils.js +410 -5
- package/src/utils/waveform-player.js +189 -59
- package/src/utils/waveform-utils.js +443 -40
- package/src/video/edit.js +0 -8
- package/src/video/editor.scss +1 -1
- package/build/image/animated-gif-convert-control.cjs +0 -105
- package/build/image/animated-gif-convert-control.cjs.map +0 -7
- package/build/utils/gif-conversion-attributes.cjs +0 -40
- package/build/utils/gif-conversion-attributes.cjs.map +0 -7
- package/build/video/gif-restore-control.cjs +0 -73
- package/build/video/gif-restore-control.cjs.map +0 -7
- package/build-module/image/animated-gif-convert-control.mjs +0 -87
- package/build-module/image/animated-gif-convert-control.mjs.map +0 -7
- package/build-module/utils/gif-conversion-attributes.mjs +0 -15
- package/build-module/utils/gif-conversion-attributes.mjs.map +0 -7
- package/build-module/video/gif-restore-control.mjs +0 -55
- package/build-module/video/gif-restore-control.mjs.map +0 -7
- package/src/image/animated-gif-convert-control.js +0 -135
- package/src/image/test/animated-gif-convert-control.js +0 -276
- package/src/utils/gif-conversion-attributes.js +0 -30
- package/src/utils/test/gif-conversion-attributes.js +0 -60
- package/src/video/gif-restore-control.js +0 -92
|
@@ -8,12 +8,13 @@ import {
|
|
|
8
8
|
__experimentalVStack as VStack,
|
|
9
9
|
__experimentalToolsPanel as ToolsPanel,
|
|
10
10
|
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
11
|
+
ToggleControl,
|
|
11
12
|
__experimentalToggleGroupControl as ToggleGroupControl,
|
|
12
13
|
__experimentalToggleGroupControlOption as ToggleGroupControlOption,
|
|
13
14
|
} from '@wordpress/components';
|
|
14
15
|
import { useSelect } from '@wordpress/data';
|
|
15
16
|
import { store as coreStore } from '@wordpress/core-data';
|
|
16
|
-
import { __ } from '@wordpress/i18n';
|
|
17
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
17
18
|
import { debounce } from '@wordpress/compose';
|
|
18
19
|
import { useState, useMemo } from '@wordpress/element';
|
|
19
20
|
|
|
@@ -40,7 +41,8 @@ import {
|
|
|
40
41
|
import { useToolsPanelDropdownMenuProps } from '../../../utils/hooks';
|
|
41
42
|
|
|
42
43
|
export default function QueryInspectorControls( props ) {
|
|
43
|
-
const { attributes, setQuery, isSingular } =
|
|
44
|
+
const { attributes, setQuery, isSingular, shouldExcludeCurrentPost } =
|
|
45
|
+
props;
|
|
44
46
|
const { query } = attributes;
|
|
45
47
|
const {
|
|
46
48
|
order,
|
|
@@ -55,6 +57,7 @@ export default function QueryInspectorControls( props ) {
|
|
|
55
57
|
taxQuery,
|
|
56
58
|
parents,
|
|
57
59
|
format,
|
|
60
|
+
excludeCurrent,
|
|
58
61
|
} = query;
|
|
59
62
|
const allowedControls = useAllowedControls( attributes );
|
|
60
63
|
const showSticky = postType === 'post';
|
|
@@ -171,12 +174,22 @@ export default function QueryInspectorControls( props ) {
|
|
|
171
174
|
[ allowedControls, postTypeHasFormatSupport ]
|
|
172
175
|
);
|
|
173
176
|
|
|
177
|
+
const showExcludeCurrentControl =
|
|
178
|
+
shouldExcludeCurrentPost &&
|
|
179
|
+
isControlAllowed( allowedControls, 'excludeCurrent' );
|
|
180
|
+
const postTypeSingularName = useSelect(
|
|
181
|
+
( select ) =>
|
|
182
|
+
select( coreStore ).getPostType( postType )?.labels.singular_name,
|
|
183
|
+
[ postType ]
|
|
184
|
+
);
|
|
185
|
+
|
|
174
186
|
const showFiltersPanel =
|
|
175
187
|
showTaxControl ||
|
|
176
188
|
showAuthorControl ||
|
|
177
189
|
showSearchControl ||
|
|
178
190
|
showParentControl ||
|
|
179
|
-
showFormatControl
|
|
191
|
+
showFormatControl ||
|
|
192
|
+
showExcludeCurrentControl;
|
|
180
193
|
const dropdownMenuProps = useToolsPanelDropdownMenuProps();
|
|
181
194
|
|
|
182
195
|
const showPostCountControl = isControlAllowed(
|
|
@@ -383,6 +396,7 @@ export default function QueryInspectorControls( props ) {
|
|
|
383
396
|
search: '',
|
|
384
397
|
taxQuery: null,
|
|
385
398
|
format: [],
|
|
399
|
+
excludeCurrent: null,
|
|
386
400
|
} );
|
|
387
401
|
setQuerySearch( '' );
|
|
388
402
|
} }
|
|
@@ -463,6 +477,32 @@ export default function QueryInspectorControls( props ) {
|
|
|
463
477
|
/>
|
|
464
478
|
</ToolsPanelItem>
|
|
465
479
|
) }
|
|
480
|
+
{ showExcludeCurrentControl && (
|
|
481
|
+
<ToolsPanelItem
|
|
482
|
+
label={ __( 'Exclude' ) }
|
|
483
|
+
hasValue={ () => excludeCurrent !== null }
|
|
484
|
+
onDeselect={ () =>
|
|
485
|
+
setQuery( { excludeCurrent: null } )
|
|
486
|
+
}
|
|
487
|
+
>
|
|
488
|
+
<ToggleControl
|
|
489
|
+
label={ __( 'Exclude current' ) }
|
|
490
|
+
help={ sprintf(
|
|
491
|
+
/* translators: %s: the post type singular name */
|
|
492
|
+
__(
|
|
493
|
+
'Exclude the current %s from the query.'
|
|
494
|
+
),
|
|
495
|
+
postTypeSingularName
|
|
496
|
+
) }
|
|
497
|
+
checked={ !! excludeCurrent }
|
|
498
|
+
onChange={ ( value ) => {
|
|
499
|
+
setQuery( {
|
|
500
|
+
excludeCurrent: !! value,
|
|
501
|
+
} );
|
|
502
|
+
} }
|
|
503
|
+
/>
|
|
504
|
+
</ToolsPanelItem>
|
|
505
|
+
) }
|
|
466
506
|
</ToolsPanel>
|
|
467
507
|
) }
|
|
468
508
|
</>
|
|
@@ -44,8 +44,9 @@ export default function QueryContent( {
|
|
|
44
44
|
tagName: TagName = 'div',
|
|
45
45
|
query: { inherit } = {},
|
|
46
46
|
} = attributes;
|
|
47
|
-
const { templateSlug } = context;
|
|
48
|
-
const { isSingular } =
|
|
47
|
+
const { templateSlug, postType } = context;
|
|
48
|
+
const { isSingular, templateType } =
|
|
49
|
+
getQueryContextFromTemplate( templateSlug );
|
|
49
50
|
const { __unstableMarkNextChangeAsNotPersistent } =
|
|
50
51
|
useDispatch( blockEditorStore );
|
|
51
52
|
const instanceId = useInstanceId( QueryContent );
|
|
@@ -77,6 +78,14 @@ export default function QueryContent( {
|
|
|
77
78
|
DEFAULTS_POSTS_PER_PAGE,
|
|
78
79
|
};
|
|
79
80
|
}, [] );
|
|
81
|
+
|
|
82
|
+
// Whether the "exclude current" filter applies: we're in a singular template
|
|
83
|
+
// and the post type matches the query.
|
|
84
|
+
const shouldExcludeCurrentPost =
|
|
85
|
+
isSingular &&
|
|
86
|
+
! inherit &&
|
|
87
|
+
( query.postType === postType || query.postType === templateType );
|
|
88
|
+
|
|
80
89
|
// There are some effects running where some initialization logic is
|
|
81
90
|
// happening and setting some values to some attributes (ex. queryId).
|
|
82
91
|
// These updates can cause an `undo trap` where undoing will result in
|
|
@@ -102,15 +111,21 @@ export default function QueryContent( {
|
|
|
102
111
|
} else if ( ! query.perPage && postsPerPage ) {
|
|
103
112
|
newQuery.perPage = postsPerPage;
|
|
104
113
|
}
|
|
105
|
-
|
|
114
|
+
// Remove the exclusion when it no longer applies, so the filters stay
|
|
115
|
+
// clean. We never force it on: enabling the exclusion is left to the user.
|
|
116
|
+
if ( ! shouldExcludeCurrentPost && query.excludeCurrent !== null ) {
|
|
117
|
+
newQuery.excludeCurrent = null;
|
|
118
|
+
}
|
|
106
119
|
if ( !! Object.keys( newQuery ).length ) {
|
|
107
120
|
__unstableMarkNextChangeAsNotPersistent();
|
|
108
121
|
updateQuery( newQuery );
|
|
109
122
|
}
|
|
110
123
|
}, [
|
|
111
124
|
query.perPage,
|
|
125
|
+
query.excludeCurrent,
|
|
112
126
|
inherit,
|
|
113
127
|
postsPerPage,
|
|
128
|
+
shouldExcludeCurrentPost,
|
|
114
129
|
__unstableMarkNextChangeAsNotPersistent,
|
|
115
130
|
updateQuery,
|
|
116
131
|
] );
|
|
@@ -150,6 +165,7 @@ export default function QueryContent( {
|
|
|
150
165
|
setAttributes={ setAttributes }
|
|
151
166
|
clientId={ clientId }
|
|
152
167
|
isSingular={ isSingular }
|
|
168
|
+
shouldExcludeCurrentPost={ shouldExcludeCurrentPost }
|
|
153
169
|
/>
|
|
154
170
|
</InspectorControls>
|
|
155
171
|
<InspectorControls group="advanced">
|
package/src/query/index.js
CHANGED
package/src/quote/README.md
CHANGED
|
@@ -29,6 +29,7 @@ _Defined via the [`supports`](https://developer.wordpress.org/block-editor/refer
|
|
|
29
29
|
- [`background`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#background):
|
|
30
30
|
- `backgroundImage`: `true`
|
|
31
31
|
- `backgroundSize`: `true`
|
|
32
|
+
- `gradient`: `true`
|
|
32
33
|
- [`dimensions`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#dimensions):
|
|
33
34
|
- `minHeight`: `true`
|
|
34
35
|
- [`typography`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#typography):
|
package/src/quote/block.json
CHANGED
package/src/quote/transforms.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { RichText } from '@wordpress/block-editor';
|
|
5
5
|
import {
|
|
6
6
|
createBlock,
|
|
7
|
-
|
|
7
|
+
cloneSanitizedBlock,
|
|
8
8
|
switchToBlockType,
|
|
9
9
|
} from '@wordpress/blocks';
|
|
10
10
|
|
|
@@ -96,9 +96,7 @@ const transforms = {
|
|
|
96
96
|
createBlock(
|
|
97
97
|
'core/quote',
|
|
98
98
|
{},
|
|
99
|
-
blocks.map( ( block ) =>
|
|
100
|
-
__experimentalCloneSanitizedBlock( block )
|
|
101
|
-
)
|
|
99
|
+
blocks.map( ( block ) => cloneSanitizedBlock( block ) )
|
|
102
100
|
),
|
|
103
101
|
},
|
|
104
102
|
],
|
package/src/rss/edit.js
CHANGED
package/src/rss/index.php
CHANGED
|
@@ -97,7 +97,7 @@ function render_block_core_rss( $attributes ) {
|
|
|
97
97
|
$excerpt = esc_attr( wp_trim_words( $excerpt, $attributes['excerptLength'], ' […]' ) );
|
|
98
98
|
|
|
99
99
|
// Change existing [...] to […].
|
|
100
|
-
if (
|
|
100
|
+
if ( str_ends_with( $excerpt, '[...]' ) ) {
|
|
101
101
|
$excerpt = substr( $excerpt, 0, -5 ) . '[…]';
|
|
102
102
|
}
|
|
103
103
|
|
package/src/tab-list/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Tab List
|
|
2
2
|
|
|
3
3
|
<!-- START TOKEN(Autogenerated block API docs) -->
|
|
4
|
-
<div class="callout callout-warning">This block is <strong>experimental</strong> and may change or be removed without notice.</div>
|
|
5
|
-
|
|
6
4
|
Display the tab buttons for a tabbed interface.
|
|
7
5
|
|
|
8
6
|
- **Name:** `core/tab-list`
|
|
@@ -28,6 +26,7 @@ _Defined via the [`attributes`](https://developer.wordpress.org/block-editor/ref
|
|
|
28
26
|
_Defined via the [`supports`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/) property in block.json._
|
|
29
27
|
|
|
30
28
|
- [`html`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#html): `false`
|
|
29
|
+
- [`ariaLabel`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#arialabel): `true`
|
|
31
30
|
- [`visibility`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#visibility): `false`
|
|
32
31
|
- [`lock`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#lock): `false`
|
|
33
32
|
- [`color`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#color):
|
|
@@ -36,7 +35,7 @@ _Defined via the [`supports`](https://developer.wordpress.org/block-editor/refer
|
|
|
36
35
|
- [`typography`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#typography):
|
|
37
36
|
- [`fontSize`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#typography-fontsize): `true`
|
|
38
37
|
- [`layout`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#layout):
|
|
39
|
-
- [`default`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#layout-default): `{"type":"flex","flexWrap":"
|
|
38
|
+
- [`default`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#layout-default): `{"type":"flex","flexWrap":"wrap"}`
|
|
40
39
|
- [`allowVerticalAlignment`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#layout-allowverticalalignment): `false`
|
|
41
40
|
- [`allowOrientation`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#layout-alloworientation): `false`
|
|
42
41
|
- [`allowWrap`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#layout-allowwrap): `false`
|
|
@@ -68,8 +67,8 @@ _Defined via the [`selectors`](https://developer.wordpress.org/block-editor/refe
|
|
|
68
67
|
This is a [**hybrid block**](https://developer.wordpress.org/block-editor/getting-started/fundamentals/static-dynamic-rendering/). It saves static markup that the server may enhance during rendering.
|
|
69
68
|
|
|
70
69
|
```html
|
|
71
|
-
<!-- wp:tab-list
|
|
72
|
-
|
|
70
|
+
<!-- wp:tab-list -->
|
|
71
|
+
<div role="tablist" class="wp-block-tab-list"><button type="button" role="tab">Tab 1</button><button type="button" role="tab">Tab 2</button></div>
|
|
73
72
|
<!-- /wp:tab-list -->
|
|
74
73
|
```
|
|
75
74
|
|
package/src/tab-list/block.json
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
|
-
"__experimental": true,
|
|
4
3
|
"apiVersion": 3,
|
|
5
4
|
"name": "core/tab-list",
|
|
6
5
|
"title": "Tab List",
|
|
@@ -26,6 +25,7 @@
|
|
|
26
25
|
},
|
|
27
26
|
"supports": {
|
|
28
27
|
"html": false,
|
|
28
|
+
"ariaLabel": true,
|
|
29
29
|
"visibility": false,
|
|
30
30
|
"lock": false,
|
|
31
31
|
"color": {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"layout": {
|
|
52
52
|
"default": {
|
|
53
53
|
"type": "flex",
|
|
54
|
-
"flexWrap": "
|
|
54
|
+
"flexWrap": "wrap"
|
|
55
55
|
},
|
|
56
56
|
"allowVerticalAlignment": false,
|
|
57
57
|
"allowOrientation": false,
|
package/src/tab-list/edit.js
CHANGED
|
@@ -8,6 +8,7 @@ import clsx from 'clsx';
|
|
|
8
8
|
*/
|
|
9
9
|
import { __ } from '@wordpress/i18n';
|
|
10
10
|
import {
|
|
11
|
+
InspectorControls,
|
|
11
12
|
useBlockProps,
|
|
12
13
|
store as blockEditorStore,
|
|
13
14
|
RichText,
|
|
@@ -15,60 +16,88 @@ import {
|
|
|
15
16
|
__experimentalUseColorProps as useColorProps,
|
|
16
17
|
__experimentalGetSpacingClassesAndStyles as getSpacingClassesAndStyles,
|
|
17
18
|
} from '@wordpress/block-editor';
|
|
18
|
-
import {
|
|
19
|
-
|
|
19
|
+
import {
|
|
20
|
+
TextControl,
|
|
21
|
+
__experimentalToolsPanel as ToolsPanel,
|
|
22
|
+
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
23
|
+
} from '@wordpress/components';
|
|
24
|
+
import { useSelect, useDispatch, useRegistry } from '@wordpress/data';
|
|
25
|
+
import { useEffect, useMemo, useRef } from '@wordpress/element';
|
|
20
26
|
|
|
21
27
|
/**
|
|
22
28
|
* Internal dependencies
|
|
23
29
|
*/
|
|
24
30
|
import TabToolbarControls from '../tabs/tab-toolbar-controls';
|
|
25
31
|
import useTabActions from '../tabs/use-tab-actions';
|
|
32
|
+
import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
|
|
26
33
|
|
|
27
34
|
const EMPTY_ARRAY = [];
|
|
28
35
|
|
|
29
36
|
function Edit( {
|
|
30
37
|
attributes,
|
|
31
38
|
clientId,
|
|
32
|
-
|
|
39
|
+
setAttributes,
|
|
33
40
|
__unstableLayoutClassNames: layoutClassNames,
|
|
34
41
|
} ) {
|
|
35
|
-
const
|
|
42
|
+
const { ariaLabel } = attributes;
|
|
36
43
|
|
|
37
44
|
const colorProps = useColorProps( attributes );
|
|
38
45
|
const borderProps = useBorderProps( attributes );
|
|
39
46
|
const spacingProps = getSpacingClassesAndStyles( attributes );
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
47
|
+
const dropdownMenuProps = useToolsPanelDropdownMenuProps();
|
|
48
|
+
|
|
49
|
+
const { tabsClientId, tabPanels, editorActiveTabIndex, activeTabIndex } =
|
|
50
|
+
useSelect(
|
|
51
|
+
( select ) => {
|
|
52
|
+
const { getBlockRootClientId, getBlockAttributes, getBlocks } =
|
|
53
|
+
select( blockEditorStore );
|
|
54
|
+
|
|
55
|
+
const rootClientId = getBlockRootClientId( clientId );
|
|
56
|
+
const tabsAttributes = getBlockAttributes( rootClientId );
|
|
57
|
+
const tabPanelsBlock = getBlocks( rootClientId )?.find(
|
|
58
|
+
( block ) => block.name === 'core/tab-panels'
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
tabsClientId: rootClientId,
|
|
63
|
+
tabPanels: tabPanelsBlock?.innerBlocks ?? EMPTY_ARRAY,
|
|
64
|
+
editorActiveTabIndex: tabsAttributes?.editorActiveTabIndex,
|
|
65
|
+
activeTabIndex: tabsAttributes?.activeTabIndex ?? 0,
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
[ clientId ]
|
|
69
|
+
);
|
|
70
|
+
const registry = useRegistry();
|
|
59
71
|
const { isBlockSelected, hasSelectedInnerBlock } =
|
|
60
72
|
useSelect( blockEditorStore );
|
|
61
|
-
const {
|
|
62
|
-
|
|
73
|
+
const {
|
|
74
|
+
updateBlockAttributes,
|
|
75
|
+
selectBlock,
|
|
76
|
+
__unstableMarkNextChangeAsNotPersistent,
|
|
77
|
+
} = useDispatch( blockEditorStore );
|
|
63
78
|
const { insertTab, removeTab } = useTabActions( tabsClientId );
|
|
64
79
|
|
|
65
80
|
const effectiveActiveIndex = editorActiveTabIndex ?? activeTabIndex;
|
|
81
|
+
const tabsList = useMemo(
|
|
82
|
+
() =>
|
|
83
|
+
tabPanels.map( ( tab ) => ( {
|
|
84
|
+
label: tab.attributes.label || '',
|
|
85
|
+
clientId: tab.clientId,
|
|
86
|
+
} ) ),
|
|
87
|
+
[ tabPanels ]
|
|
88
|
+
);
|
|
66
89
|
|
|
67
90
|
function selectTabPanel( tabIndex ) {
|
|
68
91
|
if ( tabsClientId && tabIndex !== effectiveActiveIndex ) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
92
|
+
// Batch the selection and index update so the sync effect in
|
|
93
|
+
// the tab-panel block can't revert the switch from a stale
|
|
94
|
+
// inner-block selection in the previously active panel.
|
|
95
|
+
registry.batch( () => {
|
|
96
|
+
selectBlock( clientId );
|
|
97
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
98
|
+
updateBlockAttributes( tabsClientId, {
|
|
99
|
+
editorActiveTabIndex: tabIndex,
|
|
100
|
+
} );
|
|
72
101
|
} );
|
|
73
102
|
}
|
|
74
103
|
}
|
|
@@ -137,6 +166,39 @@ function Edit( {
|
|
|
137
166
|
|
|
138
167
|
return (
|
|
139
168
|
<>
|
|
169
|
+
<InspectorControls group="settings">
|
|
170
|
+
<ToolsPanel
|
|
171
|
+
label={ __( 'Settings' ) }
|
|
172
|
+
resetAll={ () =>
|
|
173
|
+
setAttributes( {
|
|
174
|
+
ariaLabel: undefined,
|
|
175
|
+
} )
|
|
176
|
+
}
|
|
177
|
+
dropdownMenuProps={ dropdownMenuProps }
|
|
178
|
+
>
|
|
179
|
+
<ToolsPanelItem
|
|
180
|
+
label={ __( 'Label' ) }
|
|
181
|
+
isShownByDefault
|
|
182
|
+
hasValue={ () => !! ariaLabel }
|
|
183
|
+
onDeselect={ () =>
|
|
184
|
+
setAttributes( { ariaLabel: undefined } )
|
|
185
|
+
}
|
|
186
|
+
>
|
|
187
|
+
<TextControl
|
|
188
|
+
label={ __( 'Label' ) }
|
|
189
|
+
help={ __(
|
|
190
|
+
'Briefly describe this tab section for screen reader users. Examples: Event information, Product details, and Account settings.'
|
|
191
|
+
) }
|
|
192
|
+
value={ ariaLabel || '' }
|
|
193
|
+
onChange={ ( value ) =>
|
|
194
|
+
setAttributes( {
|
|
195
|
+
ariaLabel: value || undefined,
|
|
196
|
+
} )
|
|
197
|
+
}
|
|
198
|
+
/>
|
|
199
|
+
</ToolsPanelItem>
|
|
200
|
+
</ToolsPanel>
|
|
201
|
+
</InspectorControls>
|
|
140
202
|
<TabToolbarControls tabsClientId={ tabsClientId } />
|
|
141
203
|
<div { ...blockProps }>
|
|
142
204
|
{ tabsList.map( ( tab, index ) => {
|
package/src/tab-list/index.php
CHANGED
|
@@ -22,14 +22,19 @@
|
|
|
22
22
|
* @return string Updated HTML.
|
|
23
23
|
*/
|
|
24
24
|
function block_core_tab_list_render_callback( array $attributes, string $content, \WP_Block $block ): string {
|
|
25
|
-
$tabs_list
|
|
25
|
+
$tabs_list = $block->context['core/tabs-list'] ?? array();
|
|
26
|
+
$aria_label = empty( $attributes['ariaLabel'] ) ? __( 'Tabbed content' ) : wp_strip_all_tags( $attributes['ariaLabel'] );
|
|
27
|
+
|
|
28
|
+
$tag_processor = new WP_HTML_Tag_Processor( $content );
|
|
29
|
+
if ( $tag_processor->next_tag( array( 'class_name' => 'wp-block-tab-list' ) ) ) {
|
|
30
|
+
$tag_processor->set_attribute( 'aria-label', $aria_label );
|
|
31
|
+
}
|
|
26
32
|
|
|
27
33
|
if ( empty( $tabs_list ) ) {
|
|
28
|
-
return $
|
|
34
|
+
return $tag_processor->get_updated_html();
|
|
29
35
|
}
|
|
30
36
|
|
|
31
|
-
$
|
|
32
|
-
$tab_index = 0;
|
|
37
|
+
$tab_index = 0;
|
|
33
38
|
|
|
34
39
|
while ( $tag_processor->next_tag( 'button' ) ) {
|
|
35
40
|
$tab_id = $tabs_list[ $tab_index ] ?? null;
|
package/src/tab-panel/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Tab Panel
|
|
2
2
|
|
|
3
3
|
<!-- START TOKEN(Autogenerated block API docs) -->
|
|
4
|
-
<div class="callout callout-warning">This block is <strong>experimental</strong> and may change or be removed without notice.</div>
|
|
5
|
-
|
|
6
4
|
Content for a tab in a tabbed interface.
|
|
7
5
|
|
|
8
6
|
- **Name:** `core/tab-panel`
|
|
@@ -46,8 +44,6 @@ _Defined via the [`usesContext` and `providesContext`](https://developer.wordpre
|
|
|
46
44
|
|
|
47
45
|
**Uses context:**
|
|
48
46
|
|
|
49
|
-
- `core/tabs-activeTabIndex`
|
|
50
|
-
- `core/tabs-editorActiveTabIndex`
|
|
51
47
|
- `core/tabs-id`
|
|
52
48
|
|
|
53
49
|
**Provides context:**
|
|
@@ -59,8 +55,10 @@ _Defined via the [`usesContext` and `providesContext`](https://developer.wordpre
|
|
|
59
55
|
This is a [**hybrid block**](https://developer.wordpress.org/block-editor/getting-started/fundamentals/static-dynamic-rendering/). It saves static markup that the server may enhance during rendering.
|
|
60
56
|
|
|
61
57
|
```html
|
|
62
|
-
<!-- wp:tab-panel {"label":""} -->
|
|
63
|
-
|
|
58
|
+
<!-- wp:tab-panel {"label":"Tab 1"} -->
|
|
59
|
+
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
|
|
60
|
+
<p>Panel 1</p>
|
|
61
|
+
<!-- /wp:paragraph --></section>
|
|
64
62
|
<!-- /wp:tab-panel -->
|
|
65
63
|
```
|
|
66
64
|
|
package/src/tab-panel/block.json
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
|
-
"__experimental": true,
|
|
4
3
|
"apiVersion": 3,
|
|
5
4
|
"name": "core/tab-panel",
|
|
6
5
|
"title": "Tab Panel",
|
|
@@ -14,11 +13,7 @@
|
|
|
14
13
|
}
|
|
15
14
|
},
|
|
16
15
|
"parent": [ "core/tab-panels" ],
|
|
17
|
-
"usesContext": [
|
|
18
|
-
"core/tabs-activeTabIndex",
|
|
19
|
-
"core/tabs-editorActiveTabIndex",
|
|
20
|
-
"core/tabs-id"
|
|
21
|
-
],
|
|
16
|
+
"usesContext": [ "core/tabs-id" ],
|
|
22
17
|
"supports": {
|
|
23
18
|
"anchor": true,
|
|
24
19
|
"html": false,
|
package/src/tab-panel/edit.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
store as blockEditorStore,
|
|
9
9
|
} from '@wordpress/block-editor';
|
|
10
10
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
11
|
-
import {
|
|
11
|
+
import { useEffect } from '@wordpress/element';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Internal dependencies
|
|
@@ -24,18 +24,20 @@ const TEMPLATE = [
|
|
|
24
24
|
],
|
|
25
25
|
];
|
|
26
26
|
|
|
27
|
-
export default function Edit( { clientId,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
export default function Edit( { clientId, isSelected } ) {
|
|
28
|
+
const {
|
|
29
|
+
activeTabIndex,
|
|
30
|
+
editorActiveTabIndex,
|
|
31
|
+
blockIndex,
|
|
32
|
+
hasInnerBlocksSelected,
|
|
33
|
+
tabsClientId,
|
|
34
|
+
} = useSelect(
|
|
34
35
|
( select ) => {
|
|
35
36
|
const {
|
|
36
37
|
getBlockRootClientId,
|
|
37
38
|
getBlockIndex,
|
|
38
39
|
hasSelectedInnerBlock,
|
|
40
|
+
getBlockAttributes,
|
|
39
41
|
} = select( blockEditorStore );
|
|
40
42
|
|
|
41
43
|
// Get the tab-panel parent first
|
|
@@ -43,6 +45,9 @@ export default function Edit( { clientId, context, isSelected } ) {
|
|
|
43
45
|
// Then get the tabs parent
|
|
44
46
|
const _tabsClientId = getBlockRootClientId( tabPanelsClientId );
|
|
45
47
|
|
|
48
|
+
// Read the active tab indices directly from the tabs block.
|
|
49
|
+
const tabsAttributes = getBlockAttributes( _tabsClientId ) ?? {};
|
|
50
|
+
|
|
46
51
|
// Get data about this instance of core/tab.
|
|
47
52
|
const _blockIndex = getBlockIndex( clientId );
|
|
48
53
|
const _hasInnerBlocksSelected = hasSelectedInnerBlock(
|
|
@@ -51,6 +56,8 @@ export default function Edit( { clientId, context, isSelected } ) {
|
|
|
51
56
|
);
|
|
52
57
|
|
|
53
58
|
return {
|
|
59
|
+
activeTabIndex: tabsAttributes.activeTabIndex,
|
|
60
|
+
editorActiveTabIndex: tabsAttributes.editorActiveTabIndex,
|
|
54
61
|
blockIndex: _blockIndex,
|
|
55
62
|
hasInnerBlocksSelected: _hasInnerBlocksSelected,
|
|
56
63
|
tabsClientId: _tabsClientId,
|
|
@@ -59,6 +66,8 @@ export default function Edit( { clientId, context, isSelected } ) {
|
|
|
59
66
|
[ clientId ]
|
|
60
67
|
);
|
|
61
68
|
|
|
69
|
+
const effectiveActiveIndex = editorActiveTabIndex ?? activeTabIndex;
|
|
70
|
+
|
|
62
71
|
const { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =
|
|
63
72
|
useDispatch( blockEditorStore );
|
|
64
73
|
|
|
@@ -93,22 +102,8 @@ export default function Edit( { clientId, context, isSelected } ) {
|
|
|
93
102
|
// Determine if this is the default tab (for the "Default Tab" toggle in controls)
|
|
94
103
|
const isDefaultTab = activeTabIndex === blockIndex;
|
|
95
104
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
* This is true if it is the editor active tab, or if it is selected directly.
|
|
99
|
-
*/
|
|
100
|
-
const isSelectedTab = useMemo( () => {
|
|
101
|
-
// Show if this tab is directly selected or has selected inner blocks
|
|
102
|
-
if ( isSelected || hasInnerBlocksSelected ) {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
// Always show the active tab (at effectiveActiveIndex) regardless of other selection state.
|
|
106
|
-
// This ensures the tab panel remains visible when editing labels in tab-list.
|
|
107
|
-
if ( isActiveTab ) {
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
return false;
|
|
111
|
-
}, [ isSelected, hasInnerBlocksSelected, isActiveTab ] );
|
|
105
|
+
// Visible when selected, containing the selection, or the active tab.
|
|
106
|
+
const isSelectedTab = isSelected || hasInnerBlocksSelected || isActiveTab;
|
|
112
107
|
|
|
113
108
|
const blockProps = useBlockProps( {
|
|
114
109
|
hidden: ! isSelectedTab,
|
package/src/tab-panels/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Tab Panels
|
|
2
2
|
|
|
3
3
|
<!-- START TOKEN(Autogenerated block API docs) -->
|
|
4
|
-
<div class="callout callout-warning">This block is <strong>experimental</strong> and may change or be removed without notice.</div>
|
|
5
|
-
|
|
6
4
|
Container for tab panel content in a tabbed interface.
|
|
7
5
|
|
|
8
6
|
- **Name:** `core/tab-panels`
|
|
@@ -47,7 +45,11 @@ This is a [**static block**](https://developer.wordpress.org/block-editor/gettin
|
|
|
47
45
|
|
|
48
46
|
```html
|
|
49
47
|
<!-- wp:tab-panels -->
|
|
50
|
-
|
|
48
|
+
<div class="wp-block-tab-panels"><!-- wp:tab-panel {"label":"Tab 1"} -->
|
|
49
|
+
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
|
|
50
|
+
<p>Panel 1</p>
|
|
51
|
+
<!-- /wp:paragraph --></section>
|
|
52
|
+
<!-- /wp:tab-panel --></div>
|
|
51
53
|
<!-- /wp:tab-panels -->
|
|
52
54
|
```
|
|
53
55
|
|