@wordpress/block-library 9.44.1-next.v.202604201441.0 → 9.45.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 +2 -0
- package/build/accordion/edit.cjs +0 -2
- package/build/accordion/edit.cjs.map +2 -2
- package/build/accordion-item/block.json +1 -0
- package/build/categories/edit.cjs +5 -1
- package/build/categories/edit.cjs.map +2 -2
- package/build/embed/edit.cjs +38 -34
- package/build/embed/edit.cjs.map +3 -3
- package/build/embed/transforms.cjs +3 -1
- package/build/embed/transforms.cjs.map +2 -2
- package/build/embed/util.cjs +13 -2
- package/build/embed/util.cjs.map +2 -2
- package/build/form/block.json +1 -1
- package/build/form-input/block.json +1 -1
- package/build/form-submission-notification/block.json +1 -1
- package/build/form-submit-button/block.json +1 -1
- package/build/image/edit.cjs +1 -1
- package/build/image/edit.cjs.map +2 -2
- package/build/image/image.cjs +29 -10
- package/build/image/image.cjs.map +3 -3
- package/build/index.cjs +4 -4
- package/build/index.cjs.map +2 -2
- package/build/math/edit.cjs +2 -2
- package/build/math/edit.cjs.map +2 -2
- package/build/navigation/edit/accessible-description.cjs +2 -2
- package/build/navigation/edit/accessible-description.cjs.map +2 -2
- package/build/navigation/edit/overlay-template-part-selector.cjs.map +2 -2
- package/build/navigation-link/edit.cjs +2 -1
- package/build/navigation-link/edit.cjs.map +2 -2
- package/build/navigation-link/link-ui/dialog-wrapper.cjs +2 -1
- package/build/navigation-link/link-ui/dialog-wrapper.cjs.map +2 -2
- package/build/navigation-link/link-ui/index.cjs +2 -1
- package/build/navigation-link/link-ui/index.cjs.map +2 -2
- package/build/post-author/edit.cjs.map +3 -3
- package/build/post-comments-form/edit.cjs +2 -2
- package/build/post-comments-form/edit.cjs.map +2 -2
- package/build/query/edit/inspector-controls/author-control.cjs +1 -1
- package/build/query/edit/inspector-controls/author-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/format-controls.cjs +1 -1
- package/build/query/edit/inspector-controls/format-controls.cjs.map +2 -2
- package/build/query/edit/inspector-controls/parent-control.cjs +1 -1
- package/build/query/edit/inspector-controls/parent-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/taxonomy-controls.cjs +1 -1
- package/build/query/edit/inspector-controls/taxonomy-controls.cjs.map +2 -2
- package/build/site-logo/edit.cjs +32 -18
- package/build/site-logo/edit.cjs.map +2 -2
- package/build/tab/block.json +23 -23
- package/build/tab/controls.cjs +5 -48
- package/build/tab/controls.cjs.map +3 -3
- package/build/tab/edit.cjs +77 -75
- package/build/tab/edit.cjs.map +3 -3
- package/build/tab/save.cjs +3 -3
- package/build/tab/save.cjs.map +2 -2
- package/{src/tabs-menu → build/tab-list}/block.json +3 -3
- package/build/{tabs-menu → tab-list}/edit.cjs +4 -4
- package/build/tab-list/edit.cjs.map +7 -0
- package/build/{tabs-menu → tab-list}/index.cjs +5 -5
- package/build/tab-list/index.cjs.map +7 -0
- package/build/{tabs-menu → tab-list}/save.cjs +1 -1
- package/build/{tabs-menu → tab-list}/save.cjs.map +1 -1
- package/build/{tab → tab-panel}/add-tab-toolbar-control.cjs +16 -16
- package/build/tab-panel/add-tab-toolbar-control.cjs.map +7 -0
- package/build/tab-panel/block.json +27 -37
- package/build/tab-panel/controls.cjs +89 -0
- package/build/tab-panel/controls.cjs.map +7 -0
- package/build/tab-panel/edit.cjs +90 -17
- package/build/tab-panel/edit.cjs.map +3 -3
- package/build/tab-panel/index.cjs +1 -1
- package/build/tab-panel/index.cjs.map +1 -1
- package/build/{tab → tab-panel}/init.cjs +1 -1
- package/build/{tab → tab-panel}/init.cjs.map +1 -1
- package/build/{tab → tab-panel}/remove-tab-toolbar-control.cjs +16 -16
- package/build/tab-panel/remove-tab-toolbar-control.cjs.map +7 -0
- package/build/tab-panel/save.cjs +4 -2
- package/build/tab-panel/save.cjs.map +2 -2
- package/build/tab-panels/block.json +66 -0
- package/build/{tabs-menu-item/controls.cjs → tab-panels/edit.cjs} +25 -11
- package/build/tab-panels/edit.cjs.map +7 -0
- package/build/{tabs-menu-item → tab-panels}/index.cjs +5 -5
- package/build/{tabs-menu → tab-panels}/index.cjs.map +2 -2
- package/build/{tabs-menu-item → tab-panels}/save.cjs +4 -6
- package/build/tab-panels/save.cjs.map +7 -0
- package/build/tabs/block.json +1 -1
- package/build/tabs/controls.cjs +2 -2
- package/build/tabs/controls.cjs.map +1 -1
- package/build/tabs/edit.cjs +24 -19
- package/build/tabs/edit.cjs.map +3 -3
- package/build/tabs/index.cjs +5 -5
- package/build/tabs/index.cjs.map +1 -1
- package/build/tabs/{use-tab-menu-sync.cjs → use-tab-list-sync.cjs} +78 -80
- package/build/tabs/use-tab-list-sync.cjs.map +7 -0
- package/build/terms-query/edit/inspector-controls/include-control.cjs +1 -1
- package/build/terms-query/edit/inspector-controls/include-control.cjs.map +2 -2
- package/build/video/tracks-editor.cjs +2 -2
- package/build/video/tracks-editor.cjs.map +2 -2
- package/build-module/accordion/edit.mjs +0 -2
- package/build-module/accordion/edit.mjs.map +2 -2
- package/build-module/accordion-item/block.json +1 -0
- package/build-module/categories/edit.mjs +5 -2
- package/build-module/categories/edit.mjs.map +2 -2
- package/build-module/embed/edit.mjs +45 -36
- package/build-module/embed/edit.mjs.map +2 -2
- package/build-module/embed/transforms.mjs +8 -2
- package/build-module/embed/transforms.mjs.map +2 -2
- package/build-module/embed/util.mjs +11 -1
- package/build-module/embed/util.mjs.map +2 -2
- package/build-module/form/block.json +1 -1
- package/build-module/form-input/block.json +1 -1
- package/build-module/form-submission-notification/block.json +1 -1
- package/build-module/form-submit-button/block.json +1 -1
- package/build-module/image/edit.mjs +1 -1
- package/build-module/image/edit.mjs.map +2 -2
- package/build-module/image/image.mjs +29 -10
- package/build-module/image/image.mjs.map +3 -3
- package/build-module/index.mjs +4 -4
- package/build-module/index.mjs.map +2 -2
- package/build-module/math/edit.mjs +2 -2
- package/build-module/math/edit.mjs.map +2 -2
- package/build-module/navigation/edit/accessible-description.mjs +1 -1
- package/build-module/navigation/edit/accessible-description.mjs.map +1 -1
- package/build-module/navigation/edit/overlay-template-part-selector.mjs +2 -2
- package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +1 -1
- package/build-module/navigation-link/edit.mjs +2 -5
- package/build-module/navigation-link/edit.mjs.map +2 -2
- package/build-module/navigation-link/link-ui/dialog-wrapper.mjs +2 -1
- package/build-module/navigation-link/link-ui/dialog-wrapper.mjs.map +2 -2
- package/build-module/navigation-link/link-ui/index.mjs +1 -1
- package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
- package/build-module/post-author/edit.mjs +2 -2
- package/build-module/post-author/edit.mjs.map +2 -2
- package/build-module/post-comments-form/edit.mjs +1 -1
- package/build-module/post-comments-form/edit.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/author-control.mjs +1 -1
- package/build-module/query/edit/inspector-controls/author-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/format-controls.mjs +1 -1
- package/build-module/query/edit/inspector-controls/format-controls.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/parent-control.mjs +1 -1
- package/build-module/query/edit/inspector-controls/parent-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs +1 -1
- package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs.map +2 -2
- package/build-module/site-logo/edit.mjs +32 -18
- package/build-module/site-logo/edit.mjs.map +2 -2
- package/build-module/tab/block.json +23 -23
- package/build-module/tab/controls.mjs +7 -57
- package/build-module/tab/controls.mjs.map +2 -2
- package/build-module/tab/edit.mjs +81 -79
- package/build-module/tab/edit.mjs.map +3 -3
- package/build-module/tab/save.mjs +4 -4
- package/build-module/tab/save.mjs.map +2 -2
- package/build-module/{tabs-menu → tab-list}/block.json +3 -3
- package/build-module/{tabs-menu → tab-list}/edit.mjs +4 -4
- package/build-module/tab-list/edit.mjs.map +7 -0
- package/build-module/{tabs-menu → tab-list}/index.mjs +2 -2
- package/build-module/tab-list/index.mjs.map +7 -0
- package/build-module/{tabs-menu → tab-list}/save.mjs +1 -1
- package/build-module/{tabs-menu → tab-list}/save.mjs.map +1 -1
- package/build-module/{tab → tab-panel}/add-tab-toolbar-control.mjs +16 -16
- package/build-module/tab-panel/add-tab-toolbar-control.mjs.map +7 -0
- package/build-module/tab-panel/block.json +27 -37
- package/build-module/tab-panel/controls.mjs +65 -0
- package/build-module/tab-panel/controls.mjs.map +7 -0
- package/build-module/tab-panel/edit.mjs +92 -19
- package/build-module/tab-panel/edit.mjs.map +2 -2
- package/build-module/tab-panel/index.mjs +1 -1
- package/build-module/tab-panel/index.mjs.map +1 -1
- package/build-module/{tab → tab-panel}/init.mjs +1 -1
- package/build-module/{tab → tab-panel}/init.mjs.map +1 -1
- package/build-module/{tab → tab-panel}/remove-tab-toolbar-control.mjs +16 -16
- package/build-module/tab-panel/remove-tab-toolbar-control.mjs.map +7 -0
- package/build-module/tab-panel/save.mjs +4 -2
- package/build-module/tab-panel/save.mjs.map +2 -2
- package/build-module/tab-panels/block.json +66 -0
- package/build-module/tab-panels/edit.mjs +33 -0
- package/build-module/tab-panels/edit.mjs.map +7 -0
- package/build-module/{tabs-menu-item → tab-panels}/index.mjs +2 -2
- package/build-module/{tabs-menu → tab-panels}/index.mjs.map +2 -2
- package/build-module/tab-panels/save.mjs +12 -0
- package/build-module/tab-panels/save.mjs.map +7 -0
- package/build-module/tabs/block.json +1 -1
- package/build-module/tabs/controls.mjs +2 -2
- package/build-module/tabs/controls.mjs.map +1 -1
- package/build-module/tabs/edit.mjs +24 -19
- package/build-module/tabs/edit.mjs.map +2 -2
- package/build-module/tabs/index.mjs +5 -5
- package/build-module/tabs/index.mjs.map +1 -1
- package/build-module/tabs/use-tab-list-sync.mjs +169 -0
- package/build-module/tabs/use-tab-list-sync.mjs.map +7 -0
- package/build-module/terms-query/edit/inspector-controls/include-control.mjs +1 -1
- package/build-module/terms-query/edit/inspector-controls/include-control.mjs.map +2 -2
- package/build-module/video/tracks-editor.mjs +2 -2
- package/build-module/video/tracks-editor.mjs.map +2 -2
- package/build-style/classic-rtl.css +14 -0
- package/build-style/classic.css +14 -0
- package/build-style/editor-rtl.css +9 -5
- package/build-style/editor.css +9 -5
- package/build-style/style-rtl.css +40 -40
- package/build-style/style.css +40 -40
- package/build-style/tab/editor-rtl.css +11 -0
- package/build-style/tab/editor.css +11 -0
- package/build-style/tab/style-rtl.css +29 -16
- package/build-style/tab/style.css +29 -16
- package/build-style/tab-list/editor-rtl.css +6 -0
- package/build-style/tab-list/editor.css +6 -0
- package/build-style/tab-panel/style-rtl.css +17 -1
- package/build-style/tab-panel/style.css +17 -1
- package/build-style/tab-panels/style-rtl.css +4 -0
- package/build-style/tab-panels/style.css +4 -0
- package/build-style/video/editor-rtl.css +4 -0
- package/build-style/video/editor.css +4 -0
- package/package.json +39 -38
- package/src/accordion/edit.js +0 -2
- package/src/accordion-item/block.json +1 -0
- package/src/categories/edit.js +3 -2
- package/src/classic.scss +25 -0
- package/src/editor.scss +2 -2
- package/src/embed/edit.js +61 -52
- package/src/embed/edit.native.js +71 -57
- package/src/embed/transforms.js +8 -2
- package/src/embed/util.js +17 -0
- package/src/form/block.json +1 -1
- package/src/form-input/block.json +1 -1
- package/src/form-submission-notification/block.json +1 -1
- package/src/form-submit-button/block.json +1 -1
- package/src/image/edit.js +5 -1
- package/src/image/edit.native.js +3 -3
- package/src/image/image.js +30 -5
- package/src/index.js +4 -4
- package/src/math/edit.js +3 -3
- package/src/navigation/edit/accessible-description.js +1 -1
- package/src/navigation/edit/overlay-template-part-selector.js +3 -3
- package/src/navigation-link/edit.js +2 -5
- package/src/navigation-link/link-ui/dialog-wrapper.js +2 -1
- package/src/navigation-link/link-ui/index.js +1 -1
- package/src/post-author/edit.js +3 -5
- package/src/post-comments-form/edit.js +1 -1
- package/src/query/edit/inspector-controls/author-control.js +1 -1
- package/src/query/edit/inspector-controls/format-controls.js +1 -1
- package/src/query/edit/inspector-controls/parent-control.js +1 -1
- package/src/query/edit/inspector-controls/taxonomy-controls.js +1 -1
- package/src/site-logo/edit.js +38 -18
- package/src/style.scss +1 -1
- package/src/tab/block.json +23 -23
- package/src/tab/controls.js +6 -52
- package/src/tab/edit.js +99 -103
- package/src/{tabs-menu-item → tab}/editor.scss +3 -3
- package/src/tab/index.php +32 -51
- package/src/tab/save.js +4 -4
- package/src/tab/style.scss +34 -17
- package/{build/tabs-menu → src/tab-list}/block.json +3 -3
- package/src/{tabs-menu → tab-list}/edit.js +3 -3
- package/src/{tabs-menu → tab-list}/editor.scss +2 -2
- package/src/{tabs-menu → tab-list}/index.js +1 -1
- package/src/tab-list/index.php +80 -0
- package/src/{tab → tab-panel}/add-tab-toolbar-control.js +19 -19
- package/src/tab-panel/block.json +27 -37
- package/src/tab-panel/controls.js +65 -0
- package/src/tab-panel/edit.js +123 -20
- package/src/tab-panel/index.js +1 -1
- package/src/tab-panel/index.php +88 -0
- package/src/{tab → tab-panel}/remove-tab-toolbar-control.js +20 -19
- package/src/tab-panel/save.js +4 -2
- package/src/tab-panel/style.scss +20 -1
- package/src/tab-panels/block.json +66 -0
- package/src/tab-panels/edit.js +42 -0
- package/src/{tabs-menu-item → tab-panels}/index.js +1 -1
- package/src/tab-panels/save.js +11 -0
- package/src/tab-panels/style.scss +4 -0
- package/src/tabs/block.json +1 -1
- package/src/tabs/controls.js +2 -2
- package/src/tabs/edit.js +25 -20
- package/src/tabs/index.js +5 -5
- package/src/tabs/index.php +5 -5
- package/src/tabs/use-tab-list-sync.js +237 -0
- package/src/terms-query/edit/inspector-controls/include-control.js +1 -1
- package/src/video/editor.scss +5 -0
- package/src/video/tracks-editor.js +2 -2
- package/build/tab/add-tab-toolbar-control.cjs.map +0 -7
- package/build/tab/remove-tab-toolbar-control.cjs.map +0 -7
- package/build/tabs/use-tab-menu-sync.cjs.map +0 -7
- package/build/tabs-menu/edit.cjs.map +0 -7
- package/build/tabs-menu-item/block.json +0 -56
- package/build/tabs-menu-item/controls.cjs.map +0 -7
- package/build/tabs-menu-item/edit.cjs +0 -135
- package/build/tabs-menu-item/edit.cjs.map +0 -7
- package/build/tabs-menu-item/index.cjs.map +0 -7
- package/build/tabs-menu-item/save.cjs.map +0 -7
- package/build-module/tab/add-tab-toolbar-control.mjs.map +0 -7
- package/build-module/tab/remove-tab-toolbar-control.mjs.map +0 -7
- package/build-module/tabs/use-tab-menu-sync.mjs +0 -171
- package/build-module/tabs/use-tab-menu-sync.mjs.map +0 -7
- package/build-module/tabs-menu/edit.mjs.map +0 -7
- package/build-module/tabs-menu-item/block.json +0 -56
- package/build-module/tabs-menu-item/controls.mjs +0 -15
- package/build-module/tabs-menu-item/controls.mjs.map +0 -7
- package/build-module/tabs-menu-item/edit.mjs +0 -108
- package/build-module/tabs-menu-item/edit.mjs.map +0 -7
- package/build-module/tabs-menu-item/index.mjs.map +0 -7
- package/build-module/tabs-menu-item/save.mjs +0 -14
- package/build-module/tabs-menu-item/save.mjs.map +0 -7
- package/build-style/tabs-menu/editor-rtl.css +0 -6
- package/build-style/tabs-menu/editor.css +0 -6
- package/build-style/tabs-menu-item/editor-rtl.css +0 -11
- package/build-style/tabs-menu-item/editor.css +0 -11
- package/build-style/tabs-menu-item/style-rtl.css +0 -33
- package/build-style/tabs-menu-item/style.css +0 -33
- package/src/tabs/use-tab-menu-sync.js +0 -239
- package/src/tabs-menu/index.php +0 -80
- package/src/tabs-menu-item/block.json +0 -56
- package/src/tabs-menu-item/controls.js +0 -19
- package/src/tabs-menu-item/edit.js +0 -141
- package/src/tabs-menu-item/index.php +0 -70
- package/src/tabs-menu-item/save.js +0 -13
- package/src/tabs-menu-item/style.scss +0 -40
- /package/src/{tabs-menu → tab-list}/save.js +0 -0
- /package/src/{tab → tab-panel}/init.js +0 -0
|
@@ -1,30 +1,103 @@
|
|
|
1
1
|
// packages/block-library/src/tab-panel/edit.js
|
|
2
|
+
import { __ } from "@wordpress/i18n";
|
|
2
3
|
import {
|
|
3
4
|
useBlockProps,
|
|
4
5
|
useInnerBlocksProps,
|
|
5
6
|
store as blockEditorStore
|
|
6
7
|
} from "@wordpress/block-editor";
|
|
7
|
-
import { useSelect } from "@wordpress/data";
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
import { useSelect, useDispatch } from "@wordpress/data";
|
|
9
|
+
import { useMemo, useRef, useEffect } from "@wordpress/element";
|
|
10
|
+
import Controls from "./controls.mjs";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
var TEMPLATE = [
|
|
13
|
+
[
|
|
14
|
+
"core/paragraph",
|
|
15
|
+
{
|
|
16
|
+
placeholder: __("Type / to choose a block")
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
];
|
|
20
|
+
var { cancelAnimationFrame } = window;
|
|
21
|
+
function Edit({ clientId, context, isSelected }) {
|
|
22
|
+
const focusRef = useRef();
|
|
23
|
+
const activeTabIndex = context["core/tabs-activeTabIndex"];
|
|
24
|
+
const editorActiveTabIndex = context["core/tabs-editorActiveTabIndex"];
|
|
25
|
+
const effectiveActiveIndex = editorActiveTabIndex ?? activeTabIndex;
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
return () => {
|
|
28
|
+
if (focusRef.current) {
|
|
29
|
+
cancelAnimationFrame(focusRef.current);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}, []);
|
|
33
|
+
const { blockIndex, hasInnerBlocksSelected, tabsClientId } = useSelect(
|
|
34
|
+
(select) => {
|
|
35
|
+
const {
|
|
36
|
+
getBlockRootClientId,
|
|
37
|
+
getBlockIndex,
|
|
38
|
+
hasSelectedInnerBlock
|
|
39
|
+
} = select(blockEditorStore);
|
|
40
|
+
const tabPanelsClientId = getBlockRootClientId(clientId);
|
|
41
|
+
const _tabsClientId = getBlockRootClientId(tabPanelsClientId);
|
|
42
|
+
const _blockIndex = getBlockIndex(clientId);
|
|
43
|
+
const _hasInnerBlocksSelected = hasSelectedInnerBlock(
|
|
44
|
+
clientId,
|
|
45
|
+
true
|
|
46
|
+
);
|
|
47
|
+
return {
|
|
48
|
+
blockIndex: _blockIndex,
|
|
49
|
+
hasInnerBlocksSelected: _hasInnerBlocksSelected,
|
|
50
|
+
tabsClientId: _tabsClientId
|
|
51
|
+
};
|
|
52
|
+
},
|
|
22
53
|
[clientId]
|
|
23
54
|
);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
55
|
+
const { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } = useDispatch(blockEditorStore);
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
const isTabSelected = isSelected || hasInnerBlocksSelected;
|
|
58
|
+
if (isTabSelected && tabsClientId && effectiveActiveIndex !== blockIndex) {
|
|
59
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
60
|
+
updateBlockAttributes(tabsClientId, {
|
|
61
|
+
editorActiveTabIndex: blockIndex
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}, [
|
|
65
|
+
isSelected,
|
|
66
|
+
hasInnerBlocksSelected,
|
|
67
|
+
tabsClientId,
|
|
68
|
+
effectiveActiveIndex,
|
|
69
|
+
blockIndex,
|
|
70
|
+
updateBlockAttributes,
|
|
71
|
+
__unstableMarkNextChangeAsNotPersistent
|
|
72
|
+
]);
|
|
73
|
+
const isActiveTab = effectiveActiveIndex === blockIndex;
|
|
74
|
+
const isDefaultTab = activeTabIndex === blockIndex;
|
|
75
|
+
const isSelectedTab = useMemo(() => {
|
|
76
|
+
if (isSelected || hasInnerBlocksSelected) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
if (isActiveTab) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}, [isSelected, hasInnerBlocksSelected, isActiveTab]);
|
|
84
|
+
const blockProps = useBlockProps({
|
|
85
|
+
hidden: !isSelectedTab,
|
|
86
|
+
tabIndex: isSelectedTab ? 0 : -1
|
|
87
|
+
});
|
|
88
|
+
const innerBlocksProps = useInnerBlocksProps(blockProps, {
|
|
89
|
+
template: TEMPLATE
|
|
90
|
+
});
|
|
91
|
+
return /* @__PURE__ */ jsxs("section", { ...innerBlocksProps, children: [
|
|
92
|
+
/* @__PURE__ */ jsx(
|
|
93
|
+
Controls,
|
|
94
|
+
{
|
|
95
|
+
tabsClientId,
|
|
96
|
+
blockIndex,
|
|
97
|
+
isDefaultTab
|
|
98
|
+
}
|
|
99
|
+
),
|
|
100
|
+
isSelectedTab && innerBlocksProps.children
|
|
28
101
|
] });
|
|
29
102
|
}
|
|
30
103
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/tab-panel/edit.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport
|
|
5
|
-
"mappings": ";AAGA;AAAA,EACC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useMemo, useRef, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport Controls from './controls';\n\nconst TEMPLATE = [\n\t[\n\t\t'core/paragraph',\n\t\t{\n\t\t\tplaceholder: __( 'Type / to choose a block' ),\n\t\t},\n\t],\n];\n\nconst { cancelAnimationFrame } = window;\n\nexport default function Edit( { clientId, context, isSelected } ) {\n\tconst focusRef = useRef();\n\n\t// Consume tab indices from context\n\tconst activeTabIndex = context[ 'core/tabs-activeTabIndex' ];\n\tconst editorActiveTabIndex = context[ 'core/tabs-editorActiveTabIndex' ];\n\tconst effectiveActiveIndex = editorActiveTabIndex ?? activeTabIndex;\n\n\t// Clean up animation frames on unmount.\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tif ( focusRef.current ) {\n\t\t\t\tcancelAnimationFrame( focusRef.current );\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\tconst { blockIndex, hasInnerBlocksSelected, tabsClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockIndex,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\t// Get the tab-panel parent first\n\t\t\tconst tabPanelsClientId = getBlockRootClientId( clientId );\n\t\t\t// Then get the tabs parent\n\t\t\tconst _tabsClientId = getBlockRootClientId( tabPanelsClientId );\n\n\t\t\t// Get data about this instance of core/tab.\n\t\t\tconst _blockIndex = getBlockIndex( clientId );\n\t\t\tconst _hasInnerBlocksSelected = hasSelectedInnerBlock(\n\t\t\t\tclientId,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tblockIndex: _blockIndex,\n\t\t\t\thasInnerBlocksSelected: _hasInnerBlocksSelected,\n\t\t\t\ttabsClientId: _tabsClientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Sync editorActiveTabIndex when this tab is selected directly\n\tuseEffect( () => {\n\t\t// Only update if this tab is selected and not already the active index\n\t\tconst isTabSelected = isSelected || hasInnerBlocksSelected;\n\t\tif (\n\t\t\tisTabSelected &&\n\t\t\ttabsClientId &&\n\t\t\teffectiveActiveIndex !== blockIndex\n\t\t) {\n\t\t\t// Mark as non-persistent so it doesn't add to undo history\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\teditorActiveTabIndex: blockIndex,\n\t\t\t} );\n\t\t}\n\t}, [\n\t\tisSelected,\n\t\thasInnerBlocksSelected,\n\t\ttabsClientId,\n\t\teffectiveActiveIndex,\n\t\tblockIndex,\n\t\tupdateBlockAttributes,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t] );\n\n\t// Determine if this is the currently active tab (for editor visibility)\n\tconst isActiveTab = effectiveActiveIndex === blockIndex;\n\n\t// Determine if this is the default tab (for the \"Default Tab\" toggle in controls)\n\tconst isDefaultTab = activeTabIndex === blockIndex;\n\n\t/**\n\t * This hook determines if the current tab panel should be visible.\n\t * This is true if it is the editor active tab, or if it is selected directly.\n\t */\n\tconst isSelectedTab = useMemo( () => {\n\t\t// Show if this tab is directly selected or has selected inner blocks\n\t\tif ( isSelected || hasInnerBlocksSelected ) {\n\t\t\treturn true;\n\t\t}\n\t\t// Always show the active tab (at effectiveActiveIndex) regardless of other selection state.\n\t\t// This ensures the tab panel remains visible when editing labels in tab-list.\n\t\tif ( isActiveTab ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}, [ isSelected, hasInnerBlocksSelected, isActiveTab ] );\n\n\tconst blockProps = useBlockProps( {\n\t\thidden: ! isSelectedTab,\n\t\ttabIndex: isSelectedTab ? 0 : -1,\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\ttemplate: TEMPLATE,\n\t} );\n\n\treturn (\n\t\t<section { ...innerBlocksProps }>\n\t\t\t<Controls\n\t\t\t\ttabsClientId={ tabsClientId }\n\t\t\t\tblockIndex={ blockIndex }\n\t\t\t\tisDefaultTab={ isDefaultTab }\n\t\t\t/>\n\t\t\t{ isSelectedTab && innerBlocksProps.children }\n\t\t</section>\n\t);\n}\n"],
|
|
5
|
+
"mappings": ";AAGA,SAAS,UAAU;AACnB;AAAA,EACC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,WAAW,mBAAmB;AACvC,SAAS,SAAS,QAAQ,iBAAiB;AAK3C,OAAO,cAAc;AAwHnB,SACC,KADD;AAtHF,IAAM,WAAW;AAAA,EAChB;AAAA,IACC;AAAA,IACA;AAAA,MACC,aAAa,GAAI,0BAA2B;AAAA,IAC7C;AAAA,EACD;AACD;AAEA,IAAM,EAAE,qBAAqB,IAAI;AAElB,SAAR,KAAuB,EAAE,UAAU,SAAS,WAAW,GAAI;AACjE,QAAM,WAAW,OAAO;AAGxB,QAAM,iBAAiB,QAAS,0BAA2B;AAC3D,QAAM,uBAAuB,QAAS,gCAAiC;AACvE,QAAM,uBAAuB,wBAAwB;AAGrD,YAAW,MAAM;AAChB,WAAO,MAAM;AACZ,UAAK,SAAS,SAAU;AACvB,6BAAsB,SAAS,OAAQ;AAAA,MACxC;AAAA,IACD;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,EAAE,YAAY,wBAAwB,aAAa,IAAI;AAAA,IAC5D,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,gBAAiB;AAG7B,YAAM,oBAAoB,qBAAsB,QAAS;AAEzD,YAAM,gBAAgB,qBAAsB,iBAAkB;AAG9D,YAAM,cAAc,cAAe,QAAS;AAC5C,YAAM,0BAA0B;AAAA,QAC/B;AAAA,QACA;AAAA,MACD;AAEA,aAAO;AAAA,QACN,YAAY;AAAA,QACZ,wBAAwB;AAAA,QACxB,cAAc;AAAA,MACf;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,QAAM,EAAE,uBAAuB,wCAAwC,IACtE,YAAa,gBAAiB;AAG/B,YAAW,MAAM;AAEhB,UAAM,gBAAgB,cAAc;AACpC,QACC,iBACA,gBACA,yBAAyB,YACxB;AAED,8CAAwC;AACxC,4BAAuB,cAAc;AAAA,QACpC,sBAAsB;AAAA,MACvB,CAAE;AAAA,IACH;AAAA,EACD,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AAGF,QAAM,cAAc,yBAAyB;AAG7C,QAAM,eAAe,mBAAmB;AAMxC,QAAM,gBAAgB,QAAS,MAAM;AAEpC,QAAK,cAAc,wBAAyB;AAC3C,aAAO;AAAA,IACR;AAGA,QAAK,aAAc;AAClB,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR,GAAG,CAAE,YAAY,wBAAwB,WAAY,CAAE;AAEvD,QAAM,aAAa,cAAe;AAAA,IACjC,QAAQ,CAAE;AAAA,IACV,UAAU,gBAAgB,IAAI;AAAA,EAC/B,CAAE;AAEF,QAAM,mBAAmB,oBAAqB,YAAY;AAAA,IACzD,UAAU;AAAA,EACX,CAAE;AAEF,SACC,qBAAC,aAAU,GAAG,kBACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACD;AAAA,IACE,iBAAiB,iBAAiB;AAAA,KACrC;AAEF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// packages/block-library/src/tab-panel/index.js
|
|
2
|
-
import {
|
|
2
|
+
import { tabPanel as icon } from "@wordpress/icons";
|
|
3
3
|
import initBlock from "../utils/init-block.mjs";
|
|
4
4
|
import edit from "./edit.mjs";
|
|
5
5
|
import save from "./save.mjs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/tab-panel/index.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { tabPanel as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport edit from './edit';\nimport save from './save';\nimport metadata from './block.json';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\tedit,\n\tsave,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],
|
|
5
5
|
"mappings": ";AAGA,SAAS,YAAY,YAAY;AAKjC,OAAO,eAAe;AACtB,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,OAAO,cAAc;AAErB,IAAM,EAAE,KAAK,IAAI;AAIV,IAAM,WAAW;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACD;AAEO,IAAM,OAAO,MAAM,UAAW,EAAE,MAAM,UAAU,SAAS,CAAE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/tab/init.js"],
|
|
3
|
+
"sources": ["../../src/tab-panel/init.js"],
|
|
4
4
|
"sourcesContent": ["/**\n * Internal dependencies\n */\nimport { init } from './';\n\nexport default init();\n"],
|
|
5
5
|
"mappings": ";AAGA,SAAS,YAAY;AAErB,IAAO,eAAQ,KAAK;",
|
|
6
6
|
"names": []
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// packages/block-library/src/tab/remove-tab-toolbar-control.js
|
|
1
|
+
// packages/block-library/src/tab-panel/remove-tab-toolbar-control.js
|
|
2
2
|
import {
|
|
3
3
|
BlockControls,
|
|
4
4
|
store as blockEditorStore
|
|
@@ -15,16 +15,16 @@ function RemoveTabToolbarControl({ tabsClientId }) {
|
|
|
15
15
|
__unstableMarkNextChangeAsNotPersistent
|
|
16
16
|
} = useDispatch(blockEditorStore);
|
|
17
17
|
const {
|
|
18
|
+
activeTabPanelClientId,
|
|
18
19
|
activeTabClientId,
|
|
19
|
-
activeMenuItemClientId,
|
|
20
20
|
tabCount,
|
|
21
21
|
editorActiveTabIndex
|
|
22
22
|
} = useSelect(
|
|
23
23
|
(select) => {
|
|
24
24
|
if (!tabsClientId) {
|
|
25
25
|
return {
|
|
26
|
+
activeTabPanelClientId: null,
|
|
26
27
|
activeTabClientId: null,
|
|
27
|
-
activeMenuItemClientId: null,
|
|
28
28
|
tabCount: 0,
|
|
29
29
|
editorActiveTabIndex: 0
|
|
30
30
|
};
|
|
@@ -33,19 +33,19 @@ function RemoveTabToolbarControl({ tabsClientId }) {
|
|
|
33
33
|
const tabsAttributes = getBlockAttributes(tabsClientId);
|
|
34
34
|
const activeIndex = tabsAttributes?.editorActiveTabIndex ?? tabsAttributes?.activeTabIndex ?? 0;
|
|
35
35
|
const innerBlocks = getBlocks(tabsClientId);
|
|
36
|
-
const
|
|
37
|
-
(block) => block.name === "core/tab-
|
|
36
|
+
const tabPanels = innerBlocks.find(
|
|
37
|
+
(block) => block.name === "core/tab-panels"
|
|
38
38
|
);
|
|
39
|
-
const
|
|
40
|
-
(block) => block.name === "core/
|
|
39
|
+
const tabList = innerBlocks.find(
|
|
40
|
+
(block) => block.name === "core/tab-list"
|
|
41
41
|
);
|
|
42
|
-
const
|
|
43
|
-
const
|
|
42
|
+
const tabPanelBlocks = tabPanels?.innerBlocks || [];
|
|
43
|
+
const tabs = tabList?.innerBlocks || [];
|
|
44
|
+
const activeTabPanel = tabPanelBlocks[activeIndex];
|
|
44
45
|
const activeTab = tabs[activeIndex];
|
|
45
|
-
const activeMenuItem = menuItems[activeIndex];
|
|
46
46
|
return {
|
|
47
|
+
activeTabPanelClientId: activeTabPanel?.clientId || null,
|
|
47
48
|
activeTabClientId: activeTab?.clientId || null,
|
|
48
|
-
activeMenuItemClientId: activeMenuItem?.clientId || null,
|
|
49
49
|
tabCount: tabs.length,
|
|
50
50
|
editorActiveTabIndex: activeIndex
|
|
51
51
|
};
|
|
@@ -53,7 +53,7 @@ function RemoveTabToolbarControl({ tabsClientId }) {
|
|
|
53
53
|
[tabsClientId]
|
|
54
54
|
);
|
|
55
55
|
const removeTab = () => {
|
|
56
|
-
if (!
|
|
56
|
+
if (!activeTabPanelClientId || tabCount <= 1) {
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
59
|
const newActiveIndex = editorActiveTabIndex >= tabCount - 1 ? tabCount - 2 : editorActiveTabIndex;
|
|
@@ -61,15 +61,15 @@ function RemoveTabToolbarControl({ tabsClientId }) {
|
|
|
61
61
|
updateBlockAttributes(tabsClientId, {
|
|
62
62
|
editorActiveTabIndex: newActiveIndex
|
|
63
63
|
});
|
|
64
|
-
removeBlock(
|
|
65
|
-
if (
|
|
66
|
-
removeBlock(
|
|
64
|
+
removeBlock(activeTabPanelClientId, false);
|
|
65
|
+
if (activeTabClientId) {
|
|
66
|
+
removeBlock(activeTabClientId, false);
|
|
67
67
|
}
|
|
68
68
|
if (tabsClientId) {
|
|
69
69
|
selectBlock(tabsClientId);
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
|
-
const isDisabled = tabCount <= 1 || !
|
|
72
|
+
const isDisabled = tabCount <= 1 || !activeTabPanelClientId;
|
|
73
73
|
return /* @__PURE__ */ jsx(BlockControls, { group: "other", children: /* @__PURE__ */ jsx(ToolbarGroup, { children: /* @__PURE__ */ jsx(
|
|
74
74
|
ToolbarButton,
|
|
75
75
|
{
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/tab-panel/remove-tab-toolbar-control.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tBlockControls,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { ToolbarGroup, ToolbarButton } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * \"Remove Tab\" button in the block toolbar for the tabs block.\n * Removes the currently active core/tab-panel and its corresponding\n * core/tab, keeping both in sync.\n *\n * @param {Object} props\n * @param {string} props.tabsClientId The client ID of the parent tabs block.\n * @return {React.JSX.Element} The toolbar control element.\n */\nexport default function RemoveTabToolbarControl( { tabsClientId } ) {\n\tconst {\n\t\tremoveBlock,\n\t\tupdateBlockAttributes,\n\t\tselectBlock,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst {\n\t\tactiveTabPanelClientId,\n\t\tactiveTabClientId,\n\t\ttabCount,\n\t\teditorActiveTabIndex,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! tabsClientId ) {\n\t\t\t\treturn {\n\t\t\t\t\tactiveTabPanelClientId: null,\n\t\t\t\t\tactiveTabClientId: null,\n\t\t\t\t\ttabCount: 0,\n\t\t\t\t\teditorActiveTabIndex: 0,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst { getBlocks, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst tabsAttributes = getBlockAttributes( tabsClientId );\n\t\t\tconst activeIndex =\n\t\t\t\ttabsAttributes?.editorActiveTabIndex ??\n\t\t\t\ttabsAttributes?.activeTabIndex ??\n\t\t\t\t0;\n\t\t\tconst innerBlocks = getBlocks( tabsClientId );\n\t\t\tconst tabPanels = innerBlocks.find(\n\t\t\t\t( block ) => block.name === 'core/tab-panels'\n\t\t\t);\n\t\t\tconst tabList = innerBlocks.find(\n\t\t\t\t( block ) => block.name === 'core/tab-list'\n\t\t\t);\n\t\t\tconst tabPanelBlocks = tabPanels?.innerBlocks || [];\n\t\t\tconst tabs = tabList?.innerBlocks || [];\n\t\t\tconst activeTabPanel = tabPanelBlocks[ activeIndex ];\n\t\t\tconst activeTab = tabs[ activeIndex ];\n\n\t\t\treturn {\n\t\t\t\tactiveTabPanelClientId: activeTabPanel?.clientId || null,\n\t\t\t\tactiveTabClientId: activeTab?.clientId || null,\n\t\t\t\ttabCount: tabs.length,\n\t\t\t\teditorActiveTabIndex: activeIndex,\n\t\t\t};\n\t\t},\n\t\t[ tabsClientId ]\n\t);\n\n\tconst removeTab = () => {\n\t\tif ( ! activeTabPanelClientId || tabCount <= 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Calculate new active index after removal.\n\t\tconst newActiveIndex =\n\t\t\teditorActiveTabIndex >= tabCount - 1\n\t\t\t\t? tabCount - 2\n\t\t\t\t: editorActiveTabIndex;\n\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\teditorActiveTabIndex: newActiveIndex,\n\t\t} );\n\n\t\t// Remove the tab panel and corresponding tab\n\t\tremoveBlock( activeTabPanelClientId, false );\n\t\tif ( activeTabClientId ) {\n\t\t\tremoveBlock( activeTabClientId, false );\n\t\t}\n\n\t\tif ( tabsClientId ) {\n\t\t\tselectBlock( tabsClientId );\n\t\t}\n\t};\n\n\tconst isDisabled = tabCount <= 1 || ! activeTabPanelClientId;\n\n\treturn (\n\t\t<BlockControls group=\"other\">\n\t\t\t<ToolbarGroup>\n\t\t\t\t<ToolbarButton\n\t\t\t\t\tclassName=\"components-toolbar__control\"\n\t\t\t\t\tonClick={ removeTab }\n\t\t\t\t\ttext={ __( 'Remove tab' ) }\n\t\t\t\t\tdisabled={ isDisabled }\n\t\t\t\t/>\n\t\t\t</ToolbarGroup>\n\t\t</BlockControls>\n\t);\n}\n"],
|
|
5
|
+
"mappings": ";AAGA;AAAA,EACC;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,cAAc,qBAAqB;AAC5C,SAAS,UAAU;AACnB,SAAS,aAAa,iBAAiB;AA+FnC;AApFW,SAAR,wBAA0C,EAAE,aAAa,GAAI;AACnE,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,YAAa,gBAAiB;AAElC,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI;AAAA,IACH,CAAE,WAAY;AACb,UAAK,CAAE,cAAe;AACrB,eAAO;AAAA,UACN,wBAAwB;AAAA,UACxB,mBAAmB;AAAA,UACnB,UAAU;AAAA,UACV,sBAAsB;AAAA,QACvB;AAAA,MACD;AACA,YAAM,EAAE,WAAW,mBAAmB,IACrC,OAAQ,gBAAiB;AAC1B,YAAM,iBAAiB,mBAAoB,YAAa;AACxD,YAAM,cACL,gBAAgB,wBAChB,gBAAgB,kBAChB;AACD,YAAM,cAAc,UAAW,YAAa;AAC5C,YAAM,YAAY,YAAY;AAAA,QAC7B,CAAE,UAAW,MAAM,SAAS;AAAA,MAC7B;AACA,YAAM,UAAU,YAAY;AAAA,QAC3B,CAAE,UAAW,MAAM,SAAS;AAAA,MAC7B;AACA,YAAM,iBAAiB,WAAW,eAAe,CAAC;AAClD,YAAM,OAAO,SAAS,eAAe,CAAC;AACtC,YAAM,iBAAiB,eAAgB,WAAY;AACnD,YAAM,YAAY,KAAM,WAAY;AAEpC,aAAO;AAAA,QACN,wBAAwB,gBAAgB,YAAY;AAAA,QACpD,mBAAmB,WAAW,YAAY;AAAA,QAC1C,UAAU,KAAK;AAAA,QACf,sBAAsB;AAAA,MACvB;AAAA,IACD;AAAA,IACA,CAAE,YAAa;AAAA,EAChB;AAEA,QAAM,YAAY,MAAM;AACvB,QAAK,CAAE,0BAA0B,YAAY,GAAI;AAChD;AAAA,IACD;AAGA,UAAM,iBACL,wBAAwB,WAAW,IAChC,WAAW,IACX;AAEJ,4CAAwC;AACxC,0BAAuB,cAAc;AAAA,MACpC,sBAAsB;AAAA,IACvB,CAAE;AAGF,gBAAa,wBAAwB,KAAM;AAC3C,QAAK,mBAAoB;AACxB,kBAAa,mBAAmB,KAAM;AAAA,IACvC;AAEA,QAAK,cAAe;AACnB,kBAAa,YAAa;AAAA,IAC3B;AAAA,EACD;AAEA,QAAM,aAAa,YAAY,KAAK,CAAE;AAEtC,SACC,oBAAC,iBAAc,OAAM,SACpB,8BAAC,gBACA;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,SAAU;AAAA,MACV,MAAO,GAAI,YAAa;AAAA,MACxB,UAAW;AAAA;AAAA,EACZ,GACD,GACD;AAEF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
import { useBlockProps, useInnerBlocksProps } from "@wordpress/block-editor";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
function save() {
|
|
5
|
-
const blockProps = useBlockProps.save(
|
|
5
|
+
const blockProps = useBlockProps.save({
|
|
6
|
+
role: "tabpanel"
|
|
7
|
+
});
|
|
6
8
|
const innerBlocksProps = useInnerBlocksProps.save(blockProps);
|
|
7
|
-
return /* @__PURE__ */ jsx("
|
|
9
|
+
return /* @__PURE__ */ jsx("section", { ...innerBlocksProps });
|
|
8
10
|
}
|
|
9
11
|
export {
|
|
10
12
|
save as default
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/tab-panel/save.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';\n\nexport default function save() {\n\tconst blockProps = useBlockProps.save();\n\tconst innerBlocksProps = useInnerBlocksProps.save( blockProps );\n\n\treturn <
|
|
5
|
-
"mappings": ";AAGA,SAAS,eAAe,2BAA2B;
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';\n\nexport default function save() {\n\tconst blockProps = useBlockProps.save( {\n\t\trole: 'tabpanel',\n\t} );\n\tconst innerBlocksProps = useInnerBlocksProps.save( blockProps );\n\n\treturn <section { ...innerBlocksProps } />;\n}\n"],
|
|
5
|
+
"mappings": ";AAGA,SAAS,eAAe,2BAA2B;AAQ3C;AANO,SAAR,OAAwB;AAC9B,QAAM,aAAa,cAAc,KAAM;AAAA,IACtC,MAAM;AAAA,EACP,CAAE;AACF,QAAM,mBAAmB,oBAAoB,KAAM,UAAW;AAE9D,SAAO,oBAAC,aAAU,GAAG,kBAAmB;AACzC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
|
+
"__experimental": true,
|
|
4
|
+
"apiVersion": 3,
|
|
5
|
+
"name": "core/tab-panels",
|
|
6
|
+
"title": "Tab Panels",
|
|
7
|
+
"description": "Container for tab panel content in a tabbed interface.",
|
|
8
|
+
"category": "design",
|
|
9
|
+
"textdomain": "default",
|
|
10
|
+
"parent": [ "core/tabs" ],
|
|
11
|
+
"allowedBlocks": [ "core/tab-panel" ],
|
|
12
|
+
"attributes": {},
|
|
13
|
+
"supports": {
|
|
14
|
+
"anchor": false,
|
|
15
|
+
"html": false,
|
|
16
|
+
"reusable": false,
|
|
17
|
+
"visibility": false,
|
|
18
|
+
"lock": false,
|
|
19
|
+
"dimensions": {
|
|
20
|
+
"aspectRatio": false,
|
|
21
|
+
"height": false,
|
|
22
|
+
"minHeight": false,
|
|
23
|
+
"width": false
|
|
24
|
+
},
|
|
25
|
+
"color": {
|
|
26
|
+
"background": true,
|
|
27
|
+
"text": true,
|
|
28
|
+
"heading": true,
|
|
29
|
+
"link": true,
|
|
30
|
+
"__experimentalDefaultControls": {
|
|
31
|
+
"background": true,
|
|
32
|
+
"text": true
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"spacing": {
|
|
36
|
+
"blockGap": false,
|
|
37
|
+
"padding": true,
|
|
38
|
+
"margin": true
|
|
39
|
+
},
|
|
40
|
+
"typography": {
|
|
41
|
+
"fontSize": true,
|
|
42
|
+
"__experimentalFontFamily": true
|
|
43
|
+
},
|
|
44
|
+
"layout": {
|
|
45
|
+
"default": {
|
|
46
|
+
"type": "flex",
|
|
47
|
+
"flexWrap": "nowrap",
|
|
48
|
+
"justifyContent": "stretch",
|
|
49
|
+
"orientation": "vertical"
|
|
50
|
+
},
|
|
51
|
+
"allowSwitching": false,
|
|
52
|
+
"allowVerticalAlignment": false,
|
|
53
|
+
"allowOrientation": false,
|
|
54
|
+
"allowJustification": true,
|
|
55
|
+
"allowSizingOnChildren": false
|
|
56
|
+
},
|
|
57
|
+
"__experimentalBorder": {
|
|
58
|
+
"radius": true,
|
|
59
|
+
"color": true,
|
|
60
|
+
"width": true,
|
|
61
|
+
"style": true
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"editorScript": "file:./index.js",
|
|
65
|
+
"style": "file:./style-index.css"
|
|
66
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// packages/block-library/src/tab-panels/edit.js
|
|
2
|
+
import {
|
|
3
|
+
useBlockProps,
|
|
4
|
+
useInnerBlocksProps,
|
|
5
|
+
store as blockEditorStore
|
|
6
|
+
} from "@wordpress/block-editor";
|
|
7
|
+
import { useSelect } from "@wordpress/data";
|
|
8
|
+
import AddTabToolbarControl from "../tab-panel/add-tab-toolbar-control.mjs";
|
|
9
|
+
import RemoveTabToolbarControl from "../tab-panel/remove-tab-toolbar-control.mjs";
|
|
10
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
var TAB_PANELS_TEMPLATE = [["core/tab-panel", {}]];
|
|
12
|
+
function Edit({ clientId }) {
|
|
13
|
+
const blockProps = useBlockProps();
|
|
14
|
+
const innerBlocksProps = useInnerBlocksProps(blockProps, {
|
|
15
|
+
template: TAB_PANELS_TEMPLATE,
|
|
16
|
+
templateLock: false,
|
|
17
|
+
renderAppender: false
|
|
18
|
+
// Appender handled by individual tab blocks
|
|
19
|
+
});
|
|
20
|
+
const tabsClientId = useSelect(
|
|
21
|
+
(select) => select(blockEditorStore).getBlockRootClientId(clientId),
|
|
22
|
+
[clientId]
|
|
23
|
+
);
|
|
24
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
25
|
+
/* @__PURE__ */ jsx(AddTabToolbarControl, { tabsClientId }),
|
|
26
|
+
/* @__PURE__ */ jsx(RemoveTabToolbarControl, { tabsClientId }),
|
|
27
|
+
/* @__PURE__ */ jsx("div", { ...innerBlocksProps })
|
|
28
|
+
] });
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
Edit as default
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=edit.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/tab-panels/edit.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport AddTabToolbarControl from '../tab-panel/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab-panel/remove-tab-toolbar-control';\n\nconst TAB_PANELS_TEMPLATE = [ [ 'core/tab-panel', {} ] ];\n\nexport default function Edit( { clientId } ) {\n\tconst blockProps = useBlockProps();\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\ttemplate: TAB_PANELS_TEMPLATE,\n\t\ttemplateLock: false,\n\t\trenderAppender: false, // Appender handled by individual tab blocks\n\t} );\n\n\t// Get the parent tabs block clientId\n\tconst tabsClientId = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getBlockRootClientId( clientId ),\n\t\t[ clientId ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<div { ...innerBlocksProps } />\n\t\t</>\n\t);\n}\n"],
|
|
5
|
+
"mappings": ";AAGA;AAAA,EACC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,iBAAiB;AAK1B,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AAqBlC,mBACC,KADD;AAnBF,IAAM,sBAAsB,CAAE,CAAE,kBAAkB,CAAC,CAAE,CAAE;AAExC,SAAR,KAAuB,EAAE,SAAS,GAAI;AAC5C,QAAM,aAAa,cAAc;AAEjC,QAAM,mBAAmB,oBAAqB,YAAY;AAAA,IACzD,UAAU;AAAA,IACV,cAAc;AAAA,IACd,gBAAgB;AAAA;AAAA,EACjB,CAAE;AAGF,QAAM,eAAe;AAAA,IACpB,CAAE,WACD,OAAQ,gBAAiB,EAAE,qBAAsB,QAAS;AAAA,IAC3D,CAAE,QAAS;AAAA,EACZ;AAEA,SACC,iCACC;AAAA,wBAAC,wBAAqB,cAA8B;AAAA,IACpD,oBAAC,2BAAwB,cAA8B;AAAA,IACvD,oBAAC,SAAM,GAAG,kBAAmB;AAAA,KAC9B;AAEF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// packages/block-library/src/
|
|
2
|
-
import {
|
|
1
|
+
// packages/block-library/src/tab-panels/index.js
|
|
2
|
+
import { contents as icon } from "@wordpress/icons";
|
|
3
3
|
import initBlock from "../utils/init-block.mjs";
|
|
4
4
|
import edit from "./edit.mjs";
|
|
5
5
|
import save from "./save.mjs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {
|
|
3
|
+
"sources": ["../../src/tab-panels/index.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { contents as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport edit from './edit';\nimport save from './save';\nimport metadata from './block.json';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\tedit,\n\tsave,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],
|
|
5
5
|
"mappings": ";AAGA,SAAS,YAAY,YAAY;AAKjC,OAAO,eAAe;AACtB,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,OAAO,cAAc;AAErB,IAAM,EAAE,KAAK,IAAI;AAIV,IAAM,WAAW;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACD;AAEO,IAAM,OAAO,MAAM,UAAW,EAAE,MAAM,UAAU,SAAS,CAAE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// packages/block-library/src/tab-panels/save.js
|
|
2
|
+
import { useBlockProps, useInnerBlocksProps } from "@wordpress/block-editor";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
function save() {
|
|
5
|
+
const blockProps = useBlockProps.save();
|
|
6
|
+
const innerBlocksProps = useInnerBlocksProps.save(blockProps);
|
|
7
|
+
return /* @__PURE__ */ jsx("div", { ...innerBlocksProps });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
save as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=save.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/tab-panels/save.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';\n\nexport default function save() {\n\tconst blockProps = useBlockProps.save();\n\tconst innerBlocksProps = useInnerBlocksProps.save( blockProps );\n\n\treturn <div { ...innerBlocksProps } />;\n}\n"],
|
|
5
|
+
"mappings": ";AAGA,SAAS,eAAe,2BAA2B;AAM3C;AAJO,SAAR,OAAwB;AAC9B,QAAM,aAAa,cAAc,KAAK;AACtC,QAAM,mBAAmB,oBAAoB,KAAM,UAAW;AAE9D,SAAO,oBAAC,SAAM,GAAG,kBAAmB;AACrC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"description": "Display content in a tabbed interface to help users navigate detailed content with ease.",
|
|
8
8
|
"category": "design",
|
|
9
9
|
"textdomain": "default",
|
|
10
|
-
"allowedBlocks": [ "core/
|
|
10
|
+
"allowedBlocks": [ "core/tab-list", "core/tab-panels" ],
|
|
11
11
|
"attributes": {
|
|
12
12
|
"activeTabIndex": {
|
|
13
13
|
"type": "number",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// packages/block-library/src/tabs/controls.js
|
|
2
|
-
import AddTabToolbarControl from "../tab/add-tab-toolbar-control.mjs";
|
|
3
|
-
import RemoveTabToolbarControl from "../tab/remove-tab-toolbar-control.mjs";
|
|
2
|
+
import AddTabToolbarControl from "../tab-panel/add-tab-toolbar-control.mjs";
|
|
3
|
+
import RemoveTabToolbarControl from "../tab-panel/remove-tab-toolbar-control.mjs";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
function Controls({ clientId }) {
|
|
6
6
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/tabs/controls.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * Internal dependencies\n */\nimport AddTabToolbarControl from '../tab/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab/remove-tab-toolbar-control';\n\nexport default function Controls( { clientId } ) {\n\treturn (\n\t\t<>\n\t\t\t<AddTabToolbarControl tabsClientId={ clientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ clientId } />\n\t\t</>\n\t);\n}\n"],
|
|
4
|
+
"sourcesContent": ["/**\n * Internal dependencies\n */\nimport AddTabToolbarControl from '../tab-panel/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab-panel/remove-tab-toolbar-control';\n\nexport default function Controls( { clientId } ) {\n\treturn (\n\t\t<>\n\t\t\t<AddTabToolbarControl tabsClientId={ clientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ clientId } />\n\t\t</>\n\t);\n}\n"],
|
|
5
5
|
"mappings": ";AAGA,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AAIlC,mBACC,KADD;AAFa,SAAR,SAA2B,EAAE,SAAS,GAAI;AAChD,SACC,iCACC;AAAA,wBAAC,wBAAqB,cAAe,UAAW;AAAA,IAChD,oBAAC,2BAAwB,cAAe,UAAW;AAAA,KACpD;AAEF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -9,31 +9,31 @@ import { useSelect } from "@wordpress/data";
|
|
|
9
9
|
import { useMemo, useEffect } from "@wordpress/element";
|
|
10
10
|
import { __ } from "@wordpress/i18n";
|
|
11
11
|
import Controls from "./controls.mjs";
|
|
12
|
-
import
|
|
12
|
+
import useTabListSync from "./use-tab-list-sync.mjs";
|
|
13
13
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
14
|
var EMPTY_ARRAY = [];
|
|
15
15
|
var TABS_TEMPLATE = [
|
|
16
16
|
[
|
|
17
|
-
"core/
|
|
17
|
+
"core/tab-list",
|
|
18
18
|
{},
|
|
19
19
|
[
|
|
20
|
-
["core/
|
|
21
|
-
["core/
|
|
20
|
+
["core/tab", {}],
|
|
21
|
+
["core/tab", {}]
|
|
22
22
|
]
|
|
23
23
|
],
|
|
24
24
|
[
|
|
25
|
-
"core/tab-
|
|
25
|
+
"core/tab-panels",
|
|
26
26
|
{},
|
|
27
27
|
[
|
|
28
28
|
[
|
|
29
|
-
"core/tab",
|
|
29
|
+
"core/tab-panel",
|
|
30
30
|
{
|
|
31
31
|
label: __("Tab")
|
|
32
32
|
},
|
|
33
33
|
[["core/paragraph"]]
|
|
34
34
|
],
|
|
35
35
|
[
|
|
36
|
-
"core/tab",
|
|
36
|
+
"core/tab-panel",
|
|
37
37
|
{
|
|
38
38
|
label: __("Tab")
|
|
39
39
|
},
|
|
@@ -49,28 +49,33 @@ function Edit({ clientId, attributes, setAttributes }) {
|
|
|
49
49
|
setAttributes({ editorActiveTabIndex: activeTabIndex });
|
|
50
50
|
}
|
|
51
51
|
}, []);
|
|
52
|
-
const {
|
|
52
|
+
const { tabPanels, tabPanelsClientId, tabs, tabListClientId } = useSelect(
|
|
53
53
|
(select) => {
|
|
54
54
|
const { getBlocks } = select(blockEditorStore);
|
|
55
55
|
const innerBlocks = getBlocks(clientId);
|
|
56
|
-
const
|
|
57
|
-
(block) => block.name === "core/tab-
|
|
56
|
+
const tabPanelBlocks = innerBlocks.find(
|
|
57
|
+
(block) => block.name === "core/tab-panels"
|
|
58
58
|
);
|
|
59
|
-
const
|
|
60
|
-
(block) => block.name === "core/
|
|
59
|
+
const tabList = innerBlocks.find(
|
|
60
|
+
(block) => block.name === "core/tab-list"
|
|
61
61
|
);
|
|
62
62
|
return {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
tabPanels: tabPanelBlocks?.innerBlocks ?? EMPTY_ARRAY,
|
|
64
|
+
tabPanelsClientId: tabPanelBlocks?.clientId ?? null,
|
|
65
|
+
tabs: tabList?.innerBlocks ?? EMPTY_ARRAY,
|
|
66
|
+
tabListClientId: tabList?.clientId ?? null
|
|
67
67
|
};
|
|
68
68
|
},
|
|
69
69
|
[clientId]
|
|
70
70
|
);
|
|
71
|
-
|
|
71
|
+
useTabListSync({
|
|
72
|
+
tabPanels,
|
|
73
|
+
tabs,
|
|
74
|
+
tabPanelsClientId,
|
|
75
|
+
tabListClientId
|
|
76
|
+
});
|
|
72
77
|
const contextValue = useMemo(() => {
|
|
73
|
-
const tabList =
|
|
78
|
+
const tabList = tabPanels.map((tab, index) => ({
|
|
74
79
|
id: tab.attributes.anchor || `tab-${index}`,
|
|
75
80
|
label: tab.attributes.label || "",
|
|
76
81
|
clientId: tab.clientId,
|
|
@@ -82,7 +87,7 @@ function Edit({ clientId, attributes, setAttributes }) {
|
|
|
82
87
|
"core/tabs-activeTabIndex": activeTabIndex,
|
|
83
88
|
"core/tabs-editorActiveTabIndex": editorActiveTabIndex
|
|
84
89
|
};
|
|
85
|
-
}, [
|
|
90
|
+
}, [tabPanels, anchor, activeTabIndex, editorActiveTabIndex]);
|
|
86
91
|
const blockProps = useBlockProps();
|
|
87
92
|
const innerBlockProps = useInnerBlocksProps(blockProps, {
|
|
88
93
|
__experimentalCaptureToolbars: true,
|