@wordpress/block-library 9.44.0 → 9.44.1-next.v.202604201441.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/build/button/constants.cjs +1 -1
- package/build/button/constants.cjs.map +1 -1
- package/build/group/block.json +2 -1
- package/build/image/constants.cjs +1 -1
- package/build/image/constants.cjs.map +2 -2
- package/build/image/edit.cjs +1 -3
- package/build/image/edit.cjs.map +2 -2
- package/build/image/image.cjs +20 -9
- package/build/image/image.cjs.map +2 -2
- package/build/latest-posts/edit.cjs +1 -1
- package/build/latest-posts/edit.cjs.map +1 -1
- package/build/paragraph/use-enter.cjs +12 -23
- package/build/paragraph/use-enter.cjs.map +2 -2
- package/build/post-featured-image/edit.cjs +2 -5
- package/build/post-featured-image/edit.cjs.map +2 -2
- package/build/post-template/edit.cjs +8 -2
- package/build/post-template/edit.cjs.map +2 -2
- package/build/pullquote/block.json +1 -4
- package/build/site-logo/edit.cjs +2 -2
- package/build/site-logo/edit.cjs.map +1 -1
- package/build/tab/block.json +2 -2
- package/build/tab/edit.cjs +3 -21
- package/build/tab/edit.cjs.map +3 -3
- package/build/tab-panel/block.json +1 -1
- package/build/tab-panel/edit.cjs +1 -4
- package/build/tab-panel/edit.cjs.map +2 -2
- package/build/tabs/block.json +0 -1
- package/build/tabs/edit.cjs +10 -86
- package/build/tabs/edit.cjs.map +3 -3
- package/build/tabs/use-tab-menu-sync.cjs +192 -0
- package/build/tabs/use-tab-menu-sync.cjs.map +7 -0
- package/build/tabs-menu/block.json +1 -1
- package/build/tabs-menu/edit.cjs +5 -10
- package/build/tabs-menu/edit.cjs.map +3 -3
- package/build/tabs-menu-item/block.json +1 -4
- package/build/tabs-menu-item/edit.cjs +3 -12
- package/build/tabs-menu-item/edit.cjs.map +2 -2
- package/build-module/button/constants.mjs +1 -1
- package/build-module/button/constants.mjs.map +1 -1
- package/build-module/group/block.json +2 -1
- package/build-module/image/constants.mjs +1 -1
- package/build-module/image/constants.mjs.map +2 -2
- package/build-module/image/edit.mjs +1 -3
- package/build-module/image/edit.mjs.map +2 -2
- package/build-module/image/image.mjs +20 -9
- package/build-module/image/image.mjs.map +2 -2
- package/build-module/latest-posts/edit.mjs +1 -1
- package/build-module/latest-posts/edit.mjs.map +1 -1
- package/build-module/paragraph/use-enter.mjs +13 -23
- package/build-module/paragraph/use-enter.mjs.map +2 -2
- package/build-module/post-featured-image/edit.mjs +2 -5
- package/build-module/post-featured-image/edit.mjs.map +2 -2
- package/build-module/post-template/edit.mjs +8 -2
- package/build-module/post-template/edit.mjs.map +2 -2
- package/build-module/pullquote/block.json +1 -4
- package/build-module/site-logo/edit.mjs +2 -2
- package/build-module/site-logo/edit.mjs.map +1 -1
- package/build-module/tab/block.json +2 -2
- package/build-module/tab/edit.mjs +3 -21
- package/build-module/tab/edit.mjs.map +2 -2
- package/build-module/tab-panel/block.json +1 -1
- package/build-module/tab-panel/edit.mjs +1 -4
- package/build-module/tab-panel/edit.mjs.map +2 -2
- package/build-module/tabs/block.json +0 -1
- package/build-module/tabs/edit.mjs +12 -88
- package/build-module/tabs/edit.mjs.map +2 -2
- package/build-module/tabs/use-tab-menu-sync.mjs +171 -0
- package/build-module/tabs/use-tab-menu-sync.mjs.map +7 -0
- package/build-module/tabs-menu/block.json +1 -1
- package/build-module/tabs-menu/edit.mjs +5 -10
- package/build-module/tabs-menu/edit.mjs.map +2 -2
- package/build-module/tabs-menu-item/block.json +1 -4
- package/build-module/tabs-menu-item/edit.mjs +3 -12
- package/build-module/tabs-menu-item/edit.mjs.map +2 -2
- package/build-style/latest-comments/style-rtl.css +4 -4
- package/build-style/latest-comments/style.css +4 -4
- package/build-style/post-template/style-rtl.css +1 -1
- package/build-style/post-template/style.css +1 -1
- package/build-style/style-rtl.css +5 -8
- package/build-style/style.css +5 -8
- package/build-style/tabs/style-rtl.css +0 -3
- package/build-style/tabs/style.css +0 -3
- package/package.json +38 -38
- package/src/block/test/edit.native.js +1 -1
- package/src/button/constants.js +1 -1
- package/src/button/test/get-updated-link-attributes.js +6 -10
- package/src/group/block.json +2 -1
- package/src/image/constants.js +1 -1
- package/src/image/edit.js +0 -2
- package/src/image/image.js +33 -22
- package/src/image/test/edit.native.js +2 -2
- package/src/latest-comments/style.scss +7 -7
- package/src/latest-posts/edit.js +1 -1
- package/src/latest-posts/index.php +1 -1
- package/src/navigation/edit/test/overlay-template-part-selector.js +1 -0
- package/src/paragraph/use-enter.js +18 -24
- package/src/post-featured-image/edit.js +2 -9
- package/src/post-template/edit.js +7 -1
- package/src/post-template/index.php +3 -0
- package/src/post-template/style.scss +2 -2
- package/src/pullquote/block.json +1 -4
- package/src/site-logo/edit.js +2 -2
- package/src/tab/block.json +2 -2
- package/src/tab/edit.js +2 -27
- package/src/tab-panel/block.json +1 -1
- package/src/tab-panel/edit.js +2 -4
- package/src/tabs/block.json +0 -1
- package/src/tabs/edit.js +11 -134
- package/src/tabs/style.scss +0 -3
- package/src/tabs/use-tab-menu-sync.js +239 -0
- package/src/tabs-menu/block.json +1 -1
- package/src/tabs-menu/edit.js +6 -15
- package/src/tabs-menu-item/block.json +1 -4
- package/src/tabs-menu-item/edit.js +3 -12
- package/build/tab/slug-from-label.cjs +0 -37
- package/build/tab/slug-from-label.cjs.map +0 -7
- package/build-module/tab/slug-from-label.mjs +0 -16
- package/build-module/tab/slug-from-label.mjs.map +0 -7
- package/src/tab/slug-from-label.js +0 -26
|
@@ -5,20 +5,17 @@ import {
|
|
|
5
5
|
BlockContextProvider,
|
|
6
6
|
store as blockEditorStore
|
|
7
7
|
} from "@wordpress/block-editor";
|
|
8
|
-
import { useSelect
|
|
9
|
-
import { useMemo, useEffect
|
|
8
|
+
import { useSelect } from "@wordpress/data";
|
|
9
|
+
import { useMemo, useEffect } from "@wordpress/element";
|
|
10
10
|
import { __ } from "@wordpress/i18n";
|
|
11
11
|
import Controls from "./controls.mjs";
|
|
12
|
+
import useTabMenuSync from "./use-tab-menu-sync.mjs";
|
|
12
13
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
14
|
var EMPTY_ARRAY = [];
|
|
14
15
|
var TABS_TEMPLATE = [
|
|
15
16
|
[
|
|
16
17
|
"core/tabs-menu",
|
|
17
|
-
{
|
|
18
|
-
lock: {
|
|
19
|
-
remove: true
|
|
20
|
-
}
|
|
21
|
-
},
|
|
18
|
+
{},
|
|
22
19
|
[
|
|
23
20
|
["core/tabs-menu-item", {}],
|
|
24
21
|
["core/tabs-menu-item", {}]
|
|
@@ -26,11 +23,7 @@ var TABS_TEMPLATE = [
|
|
|
26
23
|
],
|
|
27
24
|
[
|
|
28
25
|
"core/tab-panel",
|
|
29
|
-
{
|
|
30
|
-
lock: {
|
|
31
|
-
remove: true
|
|
32
|
-
}
|
|
33
|
-
},
|
|
26
|
+
{},
|
|
34
27
|
[
|
|
35
28
|
[
|
|
36
29
|
"core/tab",
|
|
@@ -49,20 +42,14 @@ var TABS_TEMPLATE = [
|
|
|
49
42
|
]
|
|
50
43
|
]
|
|
51
44
|
];
|
|
52
|
-
function Edit({
|
|
53
|
-
clientId,
|
|
54
|
-
attributes,
|
|
55
|
-
setAttributes,
|
|
56
|
-
__unstableLayoutClassNames: layoutClassNames
|
|
57
|
-
}) {
|
|
45
|
+
function Edit({ clientId, attributes, setAttributes }) {
|
|
58
46
|
const { anchor, activeTabIndex, editorActiveTabIndex } = attributes;
|
|
59
47
|
useEffect(() => {
|
|
60
48
|
if (editorActiveTabIndex === void 0) {
|
|
61
49
|
setAttributes({ editorActiveTabIndex: activeTabIndex });
|
|
62
50
|
}
|
|
63
51
|
}, []);
|
|
64
|
-
const {
|
|
65
|
-
const { tabs, tabPanelClientId, menuItems } = useSelect(
|
|
52
|
+
const { tabs, tabPanelClientId, menuItems, tabsMenuClientId } = useSelect(
|
|
66
53
|
(select) => {
|
|
67
54
|
const { getBlocks } = select(blockEditorStore);
|
|
68
55
|
const innerBlocks = getBlocks(clientId);
|
|
@@ -75,74 +62,13 @@ function Edit({
|
|
|
75
62
|
return {
|
|
76
63
|
tabs: tabPanel?.innerBlocks ?? EMPTY_ARRAY,
|
|
77
64
|
tabPanelClientId: tabPanel?.clientId ?? null,
|
|
78
|
-
menuItems: tabsMenu?.innerBlocks ?? EMPTY_ARRAY
|
|
65
|
+
menuItems: tabsMenu?.innerBlocks ?? EMPTY_ARRAY,
|
|
66
|
+
tabsMenuClientId: tabsMenu?.clientId ?? null
|
|
79
67
|
};
|
|
80
68
|
},
|
|
81
69
|
[clientId]
|
|
82
70
|
);
|
|
83
|
-
|
|
84
|
-
useEffect(() => {
|
|
85
|
-
const currentTabs = tabs.map((tab) => ({
|
|
86
|
-
clientId: tab.clientId
|
|
87
|
-
}));
|
|
88
|
-
if (prevSyncStateRef.current === null) {
|
|
89
|
-
prevSyncStateRef.current = {
|
|
90
|
-
tabs: currentTabs,
|
|
91
|
-
menuItems: [...menuItems]
|
|
92
|
-
};
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const { tabs: prevTabs, menuItems: prevMenuItems } = prevSyncStateRef.current;
|
|
96
|
-
const tabsRemoved = currentTabs.length < prevTabs.length;
|
|
97
|
-
const menuItemsRemoved = menuItems.length < prevMenuItems.length;
|
|
98
|
-
const menuItemsReordered = !tabsRemoved && !menuItemsRemoved && menuItems.length === prevMenuItems.length && menuItems.some(
|
|
99
|
-
(m, i) => m.clientId !== prevMenuItems[i]?.clientId
|
|
100
|
-
);
|
|
101
|
-
prevSyncStateRef.current = {
|
|
102
|
-
tabs: currentTabs,
|
|
103
|
-
menuItems: [...menuItems]
|
|
104
|
-
};
|
|
105
|
-
if (menuItemsReordered && tabPanelClientId) {
|
|
106
|
-
const reorderedTabs = menuItems.map((menuItem) => {
|
|
107
|
-
const oldIndex = prevMenuItems.findIndex(
|
|
108
|
-
(pm) => pm.clientId === menuItem.clientId
|
|
109
|
-
);
|
|
110
|
-
return oldIndex !== -1 ? tabs[oldIndex] : null;
|
|
111
|
-
}).filter(Boolean);
|
|
112
|
-
if (reorderedTabs.length === tabs.length) {
|
|
113
|
-
replaceInnerBlocks(tabPanelClientId, reorderedTabs, false);
|
|
114
|
-
}
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
if (!tabsRemoved && !menuItemsRemoved || tabsRemoved && menuItemsRemoved) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const currentTabIds = new Set(currentTabs.map((t) => t.clientId));
|
|
121
|
-
const currentMenuItemIds = new Set(
|
|
122
|
-
menuItems.map((m) => m.clientId)
|
|
123
|
-
);
|
|
124
|
-
if (tabsRemoved) {
|
|
125
|
-
const removedIndex = prevTabs.findIndex(
|
|
126
|
-
(t) => !currentTabIds.has(t.clientId)
|
|
127
|
-
);
|
|
128
|
-
if (removedIndex >= 0 && menuItems[removedIndex]) {
|
|
129
|
-
removeBlock(menuItems[removedIndex].clientId, false);
|
|
130
|
-
prevSyncStateRef.current.menuItems = prevSyncStateRef.current.menuItems.filter(
|
|
131
|
-
(_, i) => i !== removedIndex
|
|
132
|
-
);
|
|
133
|
-
}
|
|
134
|
-
} else {
|
|
135
|
-
const removedIndex = prevMenuItems.findIndex(
|
|
136
|
-
(m) => !currentMenuItemIds.has(m.clientId)
|
|
137
|
-
);
|
|
138
|
-
if (removedIndex >= 0 && tabs[removedIndex]) {
|
|
139
|
-
removeBlock(tabs[removedIndex].clientId, false);
|
|
140
|
-
prevSyncStateRef.current.tabs = prevSyncStateRef.current.tabs.filter(
|
|
141
|
-
(_, i) => i !== removedIndex
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}, [tabs, tabPanelClientId, menuItems, removeBlock, replaceInnerBlocks]);
|
|
71
|
+
useTabMenuSync({ tabs, menuItems, tabPanelClientId, tabsMenuClientId });
|
|
146
72
|
const contextValue = useMemo(() => {
|
|
147
73
|
const tabList = tabs.map((tab, index) => ({
|
|
148
74
|
id: tab.attributes.anchor || `tab-${index}`,
|
|
@@ -157,13 +83,11 @@ function Edit({
|
|
|
157
83
|
"core/tabs-editorActiveTabIndex": editorActiveTabIndex
|
|
158
84
|
};
|
|
159
85
|
}, [tabs, anchor, activeTabIndex, editorActiveTabIndex]);
|
|
160
|
-
const blockProps = useBlockProps(
|
|
161
|
-
className: layoutClassNames
|
|
162
|
-
});
|
|
86
|
+
const blockProps = useBlockProps();
|
|
163
87
|
const innerBlockProps = useInnerBlocksProps(blockProps, {
|
|
164
88
|
__experimentalCaptureToolbars: true,
|
|
165
89
|
template: TABS_TEMPLATE,
|
|
166
|
-
templateLock:
|
|
90
|
+
templateLock: "all",
|
|
167
91
|
renderAppender: false
|
|
168
92
|
});
|
|
169
93
|
return /* @__PURE__ */ jsx(BlockContextProvider, { value: contextValue, children: /* @__PURE__ */ jsxs("div", { ...innerBlockProps, children: [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/tabs/edit.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tBlockContextProvider,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect
|
|
5
|
-
"mappings": ";AAGA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tBlockContextProvider,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo, useEffect } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport Controls from './controls';\nimport useTabMenuSync from './use-tab-menu-sync';\n\nconst EMPTY_ARRAY = [];\n\nconst TABS_TEMPLATE = [\n\t[\n\t\t'core/tabs-menu',\n\t\t{},\n\t\t[\n\t\t\t[ 'core/tabs-menu-item', {} ],\n\t\t\t[ 'core/tabs-menu-item', {} ],\n\t\t],\n\t],\n\t[\n\t\t'core/tab-panel',\n\t\t{},\n\t\t[\n\t\t\t[\n\t\t\t\t'core/tab',\n\t\t\t\t{\n\t\t\t\t\tlabel: __( 'Tab' ),\n\t\t\t\t},\n\t\t\t\t[ [ 'core/paragraph' ] ],\n\t\t\t],\n\t\t\t[\n\t\t\t\t'core/tab',\n\t\t\t\t{\n\t\t\t\t\tlabel: __( 'Tab' ),\n\t\t\t\t},\n\t\t\t\t[ [ 'core/paragraph' ] ],\n\t\t\t],\n\t\t],\n\t],\n];\n\nfunction Edit( { clientId, attributes, setAttributes } ) {\n\tconst { anchor, activeTabIndex, editorActiveTabIndex } = attributes;\n\n\t/**\n\t * Initialize editorActiveTabIndex to activeTabIndex on mount.\n\t * This ensures the ephemeral editor state starts at the persisted default.\n\t */\n\tuseEffect( () => {\n\t\tif ( editorActiveTabIndex === undefined ) {\n\t\t\tsetAttributes( { editorActiveTabIndex: activeTabIndex } );\n\t\t}\n\t}, [] ); // eslint-disable-line react-hooks/exhaustive-deps\n\n\tconst { tabs, tabPanelClientId, menuItems, tabsMenuClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks } = select( blockEditorStore );\n\t\t\tconst innerBlocks = getBlocks( clientId );\n\n\t\t\tconst tabPanel = innerBlocks.find(\n\t\t\t\t( block ) => block.name === 'core/tab-panel'\n\t\t\t);\n\t\t\tconst tabsMenu = innerBlocks.find(\n\t\t\t\t( block ) => block.name === 'core/tabs-menu'\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ttabs: tabPanel?.innerBlocks ?? EMPTY_ARRAY,\n\t\t\t\ttabPanelClientId: tabPanel?.clientId ?? null,\n\t\t\t\tmenuItems: tabsMenu?.innerBlocks ?? EMPTY_ARRAY,\n\t\t\t\ttabsMenuClientId: tabsMenu?.clientId ?? null,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tuseTabMenuSync( { tabs, menuItems, tabPanelClientId, tabsMenuClientId } );\n\n\t/**\n\t * Memoize context value to prevent unnecessary re-renders.\n\t */\n\tconst contextValue = useMemo( () => {\n\t\t/**\n\t\t * Compute tabs list from innerblocks to provide via context.\n\t\t * This traverses the tab-panel block to find all tab blocks\n\t\t * and extracts their label and anchor for the tabs-menu to consume.\n\t\t */\n\t\tconst tabList = tabs.map( ( tab, index ) => ( {\n\t\t\tid: tab.attributes.anchor || `tab-${ index }`,\n\t\t\tlabel: tab.attributes.label || '',\n\t\t\tclientId: tab.clientId,\n\t\t\tindex,\n\t\t} ) );\n\n\t\treturn {\n\t\t\t'core/tabs-list': tabList,\n\t\t\t'core/tabs-id': anchor,\n\t\t\t'core/tabs-activeTabIndex': activeTabIndex,\n\t\t\t'core/tabs-editorActiveTabIndex': editorActiveTabIndex,\n\t\t};\n\t}, [ tabs, anchor, activeTabIndex, editorActiveTabIndex ] );\n\n\tconst blockProps = useBlockProps();\n\n\tconst innerBlockProps = useInnerBlocksProps( blockProps, {\n\t\t__experimentalCaptureToolbars: true,\n\t\ttemplate: TABS_TEMPLATE,\n\t\ttemplateLock: 'all',\n\t\trenderAppender: false,\n\t} );\n\n\treturn (\n\t\t<BlockContextProvider value={ contextValue }>\n\t\t\t<div { ...innerBlockProps }>\n\t\t\t\t<Controls\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t/>\n\t\t\t\t{ innerBlockProps.children }\n\t\t\t</div>\n\t\t</BlockContextProvider>\n\t);\n}\n\nexport default Edit;\n"],
|
|
5
|
+
"mappings": ";AAGA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,iBAAiB;AAC1B,SAAS,SAAS,iBAAiB;AACnC,SAAS,UAAU;AAKnB,OAAO,cAAc;AACrB,OAAO,oBAAoB;AA2GxB,SACC,KADD;AAzGH,IAAM,cAAc,CAAC;AAErB,IAAM,gBAAgB;AAAA,EACrB;AAAA,IACC;AAAA,IACA,CAAC;AAAA,IACD;AAAA,MACC,CAAE,uBAAuB,CAAC,CAAE;AAAA,MAC5B,CAAE,uBAAuB,CAAC,CAAE;AAAA,IAC7B;AAAA,EACD;AAAA,EACA;AAAA,IACC;AAAA,IACA,CAAC;AAAA,IACD;AAAA,MACC;AAAA,QACC;AAAA,QACA;AAAA,UACC,OAAO,GAAI,KAAM;AAAA,QAClB;AAAA,QACA,CAAE,CAAE,gBAAiB,CAAE;AAAA,MACxB;AAAA,MACA;AAAA,QACC;AAAA,QACA;AAAA,UACC,OAAO,GAAI,KAAM;AAAA,QAClB;AAAA,QACA,CAAE,CAAE,gBAAiB,CAAE;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,KAAM,EAAE,UAAU,YAAY,cAAc,GAAI;AACxD,QAAM,EAAE,QAAQ,gBAAgB,qBAAqB,IAAI;AAMzD,YAAW,MAAM;AAChB,QAAK,yBAAyB,QAAY;AACzC,oBAAe,EAAE,sBAAsB,eAAe,CAAE;AAAA,IACzD;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,EAAE,MAAM,kBAAkB,WAAW,iBAAiB,IAAI;AAAA,IAC/D,CAAE,WAAY;AACb,YAAM,EAAE,UAAU,IAAI,OAAQ,gBAAiB;AAC/C,YAAM,cAAc,UAAW,QAAS;AAExC,YAAM,WAAW,YAAY;AAAA,QAC5B,CAAE,UAAW,MAAM,SAAS;AAAA,MAC7B;AACA,YAAM,WAAW,YAAY;AAAA,QAC5B,CAAE,UAAW,MAAM,SAAS;AAAA,MAC7B;AAEA,aAAO;AAAA,QACN,MAAM,UAAU,eAAe;AAAA,QAC/B,kBAAkB,UAAU,YAAY;AAAA,QACxC,WAAW,UAAU,eAAe;AAAA,QACpC,kBAAkB,UAAU,YAAY;AAAA,MACzC;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,iBAAgB,EAAE,MAAM,WAAW,kBAAkB,iBAAiB,CAAE;AAKxE,QAAM,eAAe,QAAS,MAAM;AAMnC,UAAM,UAAU,KAAK,IAAK,CAAE,KAAK,WAAa;AAAA,MAC7C,IAAI,IAAI,WAAW,UAAU,OAAQ,KAAM;AAAA,MAC3C,OAAO,IAAI,WAAW,SAAS;AAAA,MAC/B,UAAU,IAAI;AAAA,MACd;AAAA,IACD,EAAI;AAEJ,WAAO;AAAA,MACN,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,4BAA4B;AAAA,MAC5B,kCAAkC;AAAA,IACnC;AAAA,EACD,GAAG,CAAE,MAAM,QAAQ,gBAAgB,oBAAqB,CAAE;AAE1D,QAAM,aAAa,cAAc;AAEjC,QAAM,kBAAkB,oBAAqB,YAAY;AAAA,IACxD,+BAA+B;AAAA,IAC/B,UAAU;AAAA,IACV,cAAc;AAAA,IACd,gBAAgB;AAAA,EACjB,CAAE;AAEF,SACC,oBAAC,wBAAqB,OAAQ,cAC7B,+BAAC,SAAM,GAAG,iBACT;AAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACD;AAAA,IACE,gBAAgB;AAAA,KACnB,GACD;AAEF;AAEA,IAAO,eAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// packages/block-library/src/tabs/use-tab-menu-sync.js
|
|
2
|
+
import { createBlock } from "@wordpress/blocks";
|
|
3
|
+
import { store as blockEditorStore } from "@wordpress/block-editor";
|
|
4
|
+
import { useDispatch } from "@wordpress/data";
|
|
5
|
+
import { useEffect, useRef } from "@wordpress/element";
|
|
6
|
+
function useTabMenuSync({
|
|
7
|
+
tabs,
|
|
8
|
+
menuItems,
|
|
9
|
+
tabPanelClientId,
|
|
10
|
+
tabsMenuClientId
|
|
11
|
+
}) {
|
|
12
|
+
const {
|
|
13
|
+
removeBlock,
|
|
14
|
+
insertBlocks,
|
|
15
|
+
replaceInnerBlocks,
|
|
16
|
+
__unstableMarkNextChangeAsNotPersistent
|
|
17
|
+
} = useDispatch(blockEditorStore);
|
|
18
|
+
const prevSyncStateRef = useRef(null);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (prevSyncStateRef.current === null) {
|
|
21
|
+
prevSyncStateRef.current = {
|
|
22
|
+
tabs: [...tabs],
|
|
23
|
+
menuItems: [...menuItems]
|
|
24
|
+
};
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const { tabs: prevTabs, menuItems: prevMenuItems } = prevSyncStateRef.current;
|
|
28
|
+
const tabCountChange = tabs.length - prevTabs.length;
|
|
29
|
+
const menuItemCountChange = menuItems.length - prevMenuItems.length;
|
|
30
|
+
const tabsInserted = tabCountChange > 0;
|
|
31
|
+
const menuItemsInserted = menuItemCountChange > 0;
|
|
32
|
+
if (tabCountChange === menuItemCountChange) {
|
|
33
|
+
if (tabCountChange === 0 && tabPanelClientId && menuItems.some(
|
|
34
|
+
(m, i) => m.clientId !== prevMenuItems[i]?.clientId
|
|
35
|
+
)) {
|
|
36
|
+
const reorderedTabs = menuItems.map((menuItem) => {
|
|
37
|
+
const oldIndex = prevMenuItems.findIndex(
|
|
38
|
+
(pm) => pm.clientId === menuItem.clientId
|
|
39
|
+
);
|
|
40
|
+
return oldIndex !== -1 ? tabs[oldIndex] : null;
|
|
41
|
+
}).filter(Boolean);
|
|
42
|
+
if (reorderedTabs.length === tabs.length) {
|
|
43
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
44
|
+
replaceInnerBlocks(
|
|
45
|
+
tabPanelClientId,
|
|
46
|
+
reorderedTabs,
|
|
47
|
+
false
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
prevSyncStateRef.current = {
|
|
52
|
+
tabs: [...tabs],
|
|
53
|
+
menuItems: [...menuItems]
|
|
54
|
+
};
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (tabCountChange > 0 && menuItemCountChange > 0 || tabCountChange < 0 && menuItemCountChange < 0) {
|
|
58
|
+
prevSyncStateRef.current = {
|
|
59
|
+
tabs: [...tabs],
|
|
60
|
+
menuItems: [...menuItems]
|
|
61
|
+
};
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (tabsInserted && !tabsMenuClientId) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (menuItemsInserted && !tabPanelClientId) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
prevSyncStateRef.current = {
|
|
71
|
+
tabs: [...tabs],
|
|
72
|
+
menuItems: [...menuItems]
|
|
73
|
+
};
|
|
74
|
+
const currentTabIds = new Set(tabs.map((t) => t.clientId));
|
|
75
|
+
const currentMenuItemIds = new Set(
|
|
76
|
+
menuItems.map((m) => m.clientId)
|
|
77
|
+
);
|
|
78
|
+
if (tabCountChange < 0) {
|
|
79
|
+
const removedIndices = prevTabs.map(
|
|
80
|
+
(t, i) => !currentTabIds.has(t.clientId) ? i : -1
|
|
81
|
+
).filter((i) => i !== -1);
|
|
82
|
+
const removedSet = new Set(removedIndices);
|
|
83
|
+
removedIndices.forEach((removedIndex) => {
|
|
84
|
+
if (menuItems[removedIndex]) {
|
|
85
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
86
|
+
removeBlock(menuItems[removedIndex].clientId, false);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
prevSyncStateRef.current.menuItems = prevSyncStateRef.current.menuItems.filter(
|
|
90
|
+
(_, i) => !removedSet.has(i)
|
|
91
|
+
);
|
|
92
|
+
} else if (menuItemCountChange < 0) {
|
|
93
|
+
const removedIndices = prevMenuItems.map(
|
|
94
|
+
(m, i) => !currentMenuItemIds.has(m.clientId) ? i : -1
|
|
95
|
+
).filter((i) => i !== -1);
|
|
96
|
+
const removedSet = new Set(removedIndices);
|
|
97
|
+
removedIndices.forEach((removedIndex) => {
|
|
98
|
+
if (tabs[removedIndex]) {
|
|
99
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
100
|
+
removeBlock(tabs[removedIndex].clientId, false);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
prevSyncStateRef.current.tabs = prevSyncStateRef.current.tabs.filter(
|
|
104
|
+
(_, i) => !removedSet.has(i)
|
|
105
|
+
);
|
|
106
|
+
} else if (tabsInserted) {
|
|
107
|
+
const prevTabIds = new Set(prevTabs.map((t) => t.clientId));
|
|
108
|
+
const newMenuItems = tabs.map(
|
|
109
|
+
(tab, tabIndex) => !prevTabIds.has(tab.clientId) ? {
|
|
110
|
+
tabIndex,
|
|
111
|
+
block: createBlock("core/tabs-menu-item", {})
|
|
112
|
+
} : null
|
|
113
|
+
).filter(Boolean);
|
|
114
|
+
if (newMenuItems.length > 0) {
|
|
115
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
116
|
+
insertBlocks(
|
|
117
|
+
newMenuItems.map(({ block }) => block),
|
|
118
|
+
newMenuItems[0].tabIndex,
|
|
119
|
+
tabsMenuClientId,
|
|
120
|
+
false
|
|
121
|
+
);
|
|
122
|
+
newMenuItems.forEach(({ tabIndex, block }) => {
|
|
123
|
+
prevSyncStateRef.current.menuItems.splice(tabIndex, 0, {
|
|
124
|
+
clientId: block.clientId
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
} else if (menuItemsInserted) {
|
|
129
|
+
const prevMenuItemIds = new Set(
|
|
130
|
+
prevMenuItems.map((m) => m.clientId)
|
|
131
|
+
);
|
|
132
|
+
const newTabs = menuItems.map((menuItem, menuItemIndex) => {
|
|
133
|
+
if (prevMenuItemIds.has(menuItem.clientId)) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
const label = tabs[menuItemIndex - 1]?.attributes?.label ?? tabs[menuItemIndex]?.attributes?.label ?? "";
|
|
137
|
+
return {
|
|
138
|
+
menuItemIndex,
|
|
139
|
+
block: createBlock("core/tab", { label })
|
|
140
|
+
};
|
|
141
|
+
}).filter(Boolean);
|
|
142
|
+
if (newTabs.length > 0) {
|
|
143
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
144
|
+
insertBlocks(
|
|
145
|
+
newTabs.map(({ block }) => block),
|
|
146
|
+
newTabs[0].menuItemIndex,
|
|
147
|
+
tabPanelClientId,
|
|
148
|
+
false
|
|
149
|
+
);
|
|
150
|
+
newTabs.forEach(({ menuItemIndex, block }) => {
|
|
151
|
+
prevSyncStateRef.current.tabs.splice(menuItemIndex, 0, {
|
|
152
|
+
clientId: block.clientId
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}, [
|
|
158
|
+
tabs,
|
|
159
|
+
menuItems,
|
|
160
|
+
removeBlock,
|
|
161
|
+
insertBlocks,
|
|
162
|
+
replaceInnerBlocks,
|
|
163
|
+
__unstableMarkNextChangeAsNotPersistent,
|
|
164
|
+
tabsMenuClientId,
|
|
165
|
+
tabPanelClientId
|
|
166
|
+
]);
|
|
167
|
+
}
|
|
168
|
+
export {
|
|
169
|
+
useTabMenuSync as default
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=use-tab-menu-sync.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/tabs/use-tab-menu-sync.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useDispatch } from '@wordpress/data';\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * Keep tabs and menu items in sync when the lists change due to direct\n * user actions (deletion, paste, duplicate, drag-and-drop).\n *\n * Deletion: when one side shrinks, remove the counterpart at the same index.\n * Insertion: when one side grows without the other, insert the missing\n * counterpart at the matching index.\n *\n * When both lists change simultaneously (e.g. the \"Add Tab\" toolbar button,\n * which inserts both at once), no action is needed and the effect exits early.\n *\n * @param {Object} props\n * @param {Array} props.tabs Raw core/tab block objects.\n * @param {Array} props.menuItems Raw core/tabs-menu-item block objects.\n * @param {string|null} props.tabPanelClientId Client ID of the core/tab-panel block.\n * @param {string|null} props.tabsMenuClientId Client ID of the core/tabs-menu block.\n */\nexport default function useTabMenuSync( {\n\ttabs,\n\tmenuItems,\n\ttabPanelClientId,\n\ttabsMenuClientId,\n} ) {\n\tconst {\n\t\tremoveBlock,\n\t\tinsertBlocks,\n\t\treplaceInnerBlocks,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst prevSyncStateRef = useRef( null );\n\tuseEffect( () => {\n\t\tif ( prevSyncStateRef.current === null ) {\n\t\t\tprevSyncStateRef.current = {\n\t\t\t\ttabs: [ ...tabs ],\n\t\t\t\tmenuItems: [ ...menuItems ],\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabs: prevTabs, menuItems: prevMenuItems } =\n\t\t\tprevSyncStateRef.current;\n\n\t\tconst tabCountChange = tabs.length - prevTabs.length;\n\t\tconst menuItemCountChange = menuItems.length - prevMenuItems.length;\n\n\t\tconst tabsInserted = tabCountChange > 0;\n\t\tconst menuItemsInserted = menuItemCountChange > 0;\n\n\t\t// Both sides changed by the same amount.\n\t\t// Covers: no-op re-renders, \"Add Tab\" toolbar, and toolbar-remove.\n\t\t// Also handles drag-and-drop reordering of menu items.\n\t\tif ( tabCountChange === menuItemCountChange ) {\n\t\t\t// When lengths are equal but order changed, the user reordered menu\n\t\t\t// items via drag-and-drop. Reorder the tab content blocks to match.\n\t\t\tif (\n\t\t\t\ttabCountChange === 0 &&\n\t\t\t\ttabPanelClientId &&\n\t\t\t\tmenuItems.some(\n\t\t\t\t\t( m, i ) => m.clientId !== prevMenuItems[ i ]?.clientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tconst reorderedTabs = menuItems\n\t\t\t\t\t.map( ( menuItem ) => {\n\t\t\t\t\t\tconst oldIndex = prevMenuItems.findIndex(\n\t\t\t\t\t\t\t( pm ) => pm.clientId === menuItem.clientId\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn oldIndex !== -1 ? tabs[ oldIndex ] : null;\n\t\t\t\t\t} )\n\t\t\t\t\t.filter( Boolean );\n\t\t\t\tif ( reorderedTabs.length === tabs.length ) {\n\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\treplaceInnerBlocks(\n\t\t\t\t\t\ttabPanelClientId,\n\t\t\t\t\t\treorderedTabs,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevSyncStateRef.current = {\n\t\t\t\ttabs: [ ...tabs ],\n\t\t\t\tmenuItems: [ ...menuItems ],\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\t// Both sides changed in the same direction but by different amounts.\n\t\t// Bail without making a partial fix.\n\t\tif (\n\t\t\t( tabCountChange > 0 && menuItemCountChange > 0 ) ||\n\t\t\t( tabCountChange < 0 && menuItemCountChange < 0 )\n\t\t) {\n\t\t\tprevSyncStateRef.current = {\n\t\t\t\ttabs: [ ...tabs ],\n\t\t\t\tmenuItems: [ ...menuItems ],\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\t// If the required container block isn't available yet, bail without\n\t\t// updating the snapshot so the next render re-evaluates the same count change.\n\t\tif ( tabsInserted && ! tabsMenuClientId ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( menuItemsInserted && ! tabPanelClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Update snapshot to the current state.\n\t\tprevSyncStateRef.current = {\n\t\t\ttabs: [ ...tabs ],\n\t\t\tmenuItems: [ ...menuItems ],\n\t\t};\n\n\t\tconst currentTabIds = new Set( tabs.map( ( t ) => t.clientId ) );\n\t\tconst currentMenuItemIds = new Set(\n\t\t\tmenuItems.map( ( m ) => m.clientId )\n\t\t);\n\n\t\tif ( tabCountChange < 0 ) {\n\t\t\t// Remove the menu item at the same position as each deleted tab.\n\t\t\tconst removedIndices = prevTabs\n\t\t\t\t.map( ( t, i ) =>\n\t\t\t\t\t! currentTabIds.has( t.clientId ) ? i : -1\n\t\t\t\t)\n\t\t\t\t.filter( ( i ) => i !== -1 );\n\t\t\tconst removedSet = new Set( removedIndices );\n\t\t\tremovedIndices.forEach( ( removedIndex ) => {\n\t\t\t\tif ( menuItems[ removedIndex ] ) {\n\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\tremoveBlock( menuItems[ removedIndex ].clientId, false );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tprevSyncStateRef.current.menuItems =\n\t\t\t\tprevSyncStateRef.current.menuItems.filter(\n\t\t\t\t\t( _, i ) => ! removedSet.has( i )\n\t\t\t\t);\n\t\t} else if ( menuItemCountChange < 0 ) {\n\t\t\t// Remove the tab at the same position as each deleted menu item.\n\t\t\tconst removedIndices = prevMenuItems\n\t\t\t\t.map( ( m, i ) =>\n\t\t\t\t\t! currentMenuItemIds.has( m.clientId ) ? i : -1\n\t\t\t\t)\n\t\t\t\t.filter( ( i ) => i !== -1 );\n\t\t\tconst removedSet = new Set( removedIndices );\n\t\t\tremovedIndices.forEach( ( removedIndex ) => {\n\t\t\t\tif ( tabs[ removedIndex ] ) {\n\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\tremoveBlock( tabs[ removedIndex ].clientId, false );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tprevSyncStateRef.current.tabs =\n\t\t\t\tprevSyncStateRef.current.tabs.filter(\n\t\t\t\t\t( _, i ) => ! removedSet.has( i )\n\t\t\t\t);\n\t\t} else if ( tabsInserted ) {\n\t\t\t// A tab was pasted or duplicated \u2014 insert matching menu items.\n\t\t\tconst prevTabIds = new Set( prevTabs.map( ( t ) => t.clientId ) );\n\t\t\tconst newMenuItems = tabs\n\t\t\t\t.map( ( tab, tabIndex ) =>\n\t\t\t\t\t! prevTabIds.has( tab.clientId )\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tblock: createBlock( 'core/tabs-menu-item', {} ),\n\t\t\t\t\t\t }\n\t\t\t\t\t\t: null\n\t\t\t\t)\n\t\t\t\t.filter( Boolean );\n\n\t\t\tif ( newMenuItems.length > 0 ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tinsertBlocks(\n\t\t\t\t\tnewMenuItems.map( ( { block } ) => block ),\n\t\t\t\t\tnewMenuItems[ 0 ].tabIndex,\n\t\t\t\t\ttabsMenuClientId,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tnewMenuItems.forEach( ( { tabIndex, block } ) => {\n\t\t\t\t\tprevSyncStateRef.current.menuItems.splice( tabIndex, 0, {\n\t\t\t\t\t\tclientId: block.clientId,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t}\n\t\t} else if ( menuItemsInserted ) {\n\t\t\t// A menu item was pasted or duplicated \u2014 insert matching tabs,\n\t\t\t// copying the label from the adjacent tab.\n\t\t\tconst prevMenuItemIds = new Set(\n\t\t\t\tprevMenuItems.map( ( m ) => m.clientId )\n\t\t\t);\n\t\t\tconst newTabs = menuItems\n\t\t\t\t.map( ( menuItem, menuItemIndex ) => {\n\t\t\t\t\tif ( prevMenuItemIds.has( menuItem.clientId ) ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tconst label =\n\t\t\t\t\t\ttabs[ menuItemIndex - 1 ]?.attributes?.label ??\n\t\t\t\t\t\ttabs[ menuItemIndex ]?.attributes?.label ??\n\t\t\t\t\t\t'';\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmenuItemIndex,\n\t\t\t\t\t\tblock: createBlock( 'core/tab', { label } ),\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.filter( Boolean );\n\n\t\t\tif ( newTabs.length > 0 ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tinsertBlocks(\n\t\t\t\t\tnewTabs.map( ( { block } ) => block ),\n\t\t\t\t\tnewTabs[ 0 ].menuItemIndex,\n\t\t\t\t\ttabPanelClientId,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tnewTabs.forEach( ( { menuItemIndex, block } ) => {\n\t\t\t\t\tprevSyncStateRef.current.tabs.splice( menuItemIndex, 0, {\n\t\t\t\t\t\tclientId: block.clientId,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}, [\n\t\ttabs,\n\t\tmenuItems,\n\t\tremoveBlock,\n\t\tinsertBlocks,\n\t\treplaceInnerBlocks,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\ttabsMenuClientId,\n\t\ttabPanelClientId,\n\t] );\n}\n"],
|
|
5
|
+
"mappings": ";AAGA,SAAS,mBAAmB;AAC5B,SAAS,SAAS,wBAAwB;AAC1C,SAAS,mBAAmB;AAC5B,SAAS,WAAW,cAAc;AAmBnB,SAAR,eAAiC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,YAAa,gBAAiB;AAElC,QAAM,mBAAmB,OAAQ,IAAK;AACtC,YAAW,MAAM;AAChB,QAAK,iBAAiB,YAAY,MAAO;AACxC,uBAAiB,UAAU;AAAA,QAC1B,MAAM,CAAE,GAAG,IAAK;AAAA,QAChB,WAAW,CAAE,GAAG,SAAU;AAAA,MAC3B;AACA;AAAA,IACD;AAEA,UAAM,EAAE,MAAM,UAAU,WAAW,cAAc,IAChD,iBAAiB;AAElB,UAAM,iBAAiB,KAAK,SAAS,SAAS;AAC9C,UAAM,sBAAsB,UAAU,SAAS,cAAc;AAE7D,UAAM,eAAe,iBAAiB;AACtC,UAAM,oBAAoB,sBAAsB;AAKhD,QAAK,mBAAmB,qBAAsB;AAG7C,UACC,mBAAmB,KACnB,oBACA,UAAU;AAAA,QACT,CAAE,GAAG,MAAO,EAAE,aAAa,cAAe,CAAE,GAAG;AAAA,MAChD,GACC;AACD,cAAM,gBAAgB,UACpB,IAAK,CAAE,aAAc;AACrB,gBAAM,WAAW,cAAc;AAAA,YAC9B,CAAE,OAAQ,GAAG,aAAa,SAAS;AAAA,UACpC;AACA,iBAAO,aAAa,KAAK,KAAM,QAAS,IAAI;AAAA,QAC7C,CAAE,EACD,OAAQ,OAAQ;AAClB,YAAK,cAAc,WAAW,KAAK,QAAS;AAC3C,kDAAwC;AACxC;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,uBAAiB,UAAU;AAAA,QAC1B,MAAM,CAAE,GAAG,IAAK;AAAA,QAChB,WAAW,CAAE,GAAG,SAAU;AAAA,MAC3B;AACA;AAAA,IACD;AAIA,QACG,iBAAiB,KAAK,sBAAsB,KAC5C,iBAAiB,KAAK,sBAAsB,GAC7C;AACD,uBAAiB,UAAU;AAAA,QAC1B,MAAM,CAAE,GAAG,IAAK;AAAA,QAChB,WAAW,CAAE,GAAG,SAAU;AAAA,MAC3B;AACA;AAAA,IACD;AAIA,QAAK,gBAAgB,CAAE,kBAAmB;AACzC;AAAA,IACD;AACA,QAAK,qBAAqB,CAAE,kBAAmB;AAC9C;AAAA,IACD;AAGA,qBAAiB,UAAU;AAAA,MAC1B,MAAM,CAAE,GAAG,IAAK;AAAA,MAChB,WAAW,CAAE,GAAG,SAAU;AAAA,IAC3B;AAEA,UAAM,gBAAgB,IAAI,IAAK,KAAK,IAAK,CAAE,MAAO,EAAE,QAAS,CAAE;AAC/D,UAAM,qBAAqB,IAAI;AAAA,MAC9B,UAAU,IAAK,CAAE,MAAO,EAAE,QAAS;AAAA,IACpC;AAEA,QAAK,iBAAiB,GAAI;AAEzB,YAAM,iBAAiB,SACrB;AAAA,QAAK,CAAE,GAAG,MACV,CAAE,cAAc,IAAK,EAAE,QAAS,IAAI,IAAI;AAAA,MACzC,EACC,OAAQ,CAAE,MAAO,MAAM,EAAG;AAC5B,YAAM,aAAa,IAAI,IAAK,cAAe;AAC3C,qBAAe,QAAS,CAAE,iBAAkB;AAC3C,YAAK,UAAW,YAAa,GAAI;AAChC,kDAAwC;AACxC,sBAAa,UAAW,YAAa,EAAE,UAAU,KAAM;AAAA,QACxD;AAAA,MACD,CAAE;AACF,uBAAiB,QAAQ,YACxB,iBAAiB,QAAQ,UAAU;AAAA,QAClC,CAAE,GAAG,MAAO,CAAE,WAAW,IAAK,CAAE;AAAA,MACjC;AAAA,IACF,WAAY,sBAAsB,GAAI;AAErC,YAAM,iBAAiB,cACrB;AAAA,QAAK,CAAE,GAAG,MACV,CAAE,mBAAmB,IAAK,EAAE,QAAS,IAAI,IAAI;AAAA,MAC9C,EACC,OAAQ,CAAE,MAAO,MAAM,EAAG;AAC5B,YAAM,aAAa,IAAI,IAAK,cAAe;AAC3C,qBAAe,QAAS,CAAE,iBAAkB;AAC3C,YAAK,KAAM,YAAa,GAAI;AAC3B,kDAAwC;AACxC,sBAAa,KAAM,YAAa,EAAE,UAAU,KAAM;AAAA,QACnD;AAAA,MACD,CAAE;AACF,uBAAiB,QAAQ,OACxB,iBAAiB,QAAQ,KAAK;AAAA,QAC7B,CAAE,GAAG,MAAO,CAAE,WAAW,IAAK,CAAE;AAAA,MACjC;AAAA,IACF,WAAY,cAAe;AAE1B,YAAM,aAAa,IAAI,IAAK,SAAS,IAAK,CAAE,MAAO,EAAE,QAAS,CAAE;AAChE,YAAM,eAAe,KACnB;AAAA,QAAK,CAAE,KAAK,aACZ,CAAE,WAAW,IAAK,IAAI,QAAS,IAC5B;AAAA,UACA;AAAA,UACA,OAAO,YAAa,uBAAuB,CAAC,CAAE;AAAA,QAC9C,IACA;AAAA,MACJ,EACC,OAAQ,OAAQ;AAElB,UAAK,aAAa,SAAS,GAAI;AAC9B,gDAAwC;AACxC;AAAA,UACC,aAAa,IAAK,CAAE,EAAE,MAAM,MAAO,KAAM;AAAA,UACzC,aAAc,CAAE,EAAE;AAAA,UAClB;AAAA,UACA;AAAA,QACD;AACA,qBAAa,QAAS,CAAE,EAAE,UAAU,MAAM,MAAO;AAChD,2BAAiB,QAAQ,UAAU,OAAQ,UAAU,GAAG;AAAA,YACvD,UAAU,MAAM;AAAA,UACjB,CAAE;AAAA,QACH,CAAE;AAAA,MACH;AAAA,IACD,WAAY,mBAAoB;AAG/B,YAAM,kBAAkB,IAAI;AAAA,QAC3B,cAAc,IAAK,CAAE,MAAO,EAAE,QAAS;AAAA,MACxC;AACA,YAAM,UAAU,UACd,IAAK,CAAE,UAAU,kBAAmB;AACpC,YAAK,gBAAgB,IAAK,SAAS,QAAS,GAAI;AAC/C,iBAAO;AAAA,QACR;AACA,cAAM,QACL,KAAM,gBAAgB,CAAE,GAAG,YAAY,SACvC,KAAM,aAAc,GAAG,YAAY,SACnC;AACD,eAAO;AAAA,UACN;AAAA,UACA,OAAO,YAAa,YAAY,EAAE,MAAM,CAAE;AAAA,QAC3C;AAAA,MACD,CAAE,EACD,OAAQ,OAAQ;AAElB,UAAK,QAAQ,SAAS,GAAI;AACzB,gDAAwC;AACxC;AAAA,UACC,QAAQ,IAAK,CAAE,EAAE,MAAM,MAAO,KAAM;AAAA,UACpC,QAAS,CAAE,EAAE;AAAA,UACb;AAAA,UACA;AAAA,QACD;AACA,gBAAQ,QAAS,CAAE,EAAE,eAAe,MAAM,MAAO;AAChD,2BAAiB,QAAQ,KAAK,OAAQ,eAAe,GAAG;AAAA,YACvD,UAAU,MAAM;AAAA,UACjB,CAAE;AAAA,QACH,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
"name": "core/tabs-menu",
|
|
6
6
|
"title": "Tabs Menu",
|
|
7
7
|
"description": "Display the tab buttons for a tabbed interface.",
|
|
8
|
-
"version": "1.0.0",
|
|
9
8
|
"category": "design",
|
|
10
9
|
"textdomain": "default",
|
|
11
10
|
"parent": [ "core/tabs" ],
|
|
@@ -15,6 +14,7 @@
|
|
|
15
14
|
"supports": {
|
|
16
15
|
"html": false,
|
|
17
16
|
"reusable": false,
|
|
17
|
+
"visibility": false,
|
|
18
18
|
"lock": false,
|
|
19
19
|
"dimensions": {
|
|
20
20
|
"aspectRatio": false,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// packages/block-library/src/tabs-menu/edit.js
|
|
2
|
-
import clsx from "clsx";
|
|
3
2
|
import {
|
|
4
3
|
useBlockProps,
|
|
5
4
|
useInnerBlocksProps,
|
|
@@ -9,20 +8,16 @@ import { useSelect } from "@wordpress/data";
|
|
|
9
8
|
import AddTabToolbarControl from "../tab/add-tab-toolbar-control.mjs";
|
|
10
9
|
import RemoveTabToolbarControl from "../tab/remove-tab-toolbar-control.mjs";
|
|
11
10
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
-
function Edit({ clientId
|
|
13
|
-
const
|
|
14
|
-
(select) => (
|
|
15
|
-
tabsClientId: select(blockEditorStore).getBlockRootClientId(clientId)
|
|
16
|
-
}),
|
|
11
|
+
function Edit({ clientId }) {
|
|
12
|
+
const tabsClientId = useSelect(
|
|
13
|
+
(select) => select(blockEditorStore).getBlockRootClientId(clientId),
|
|
17
14
|
[clientId]
|
|
18
15
|
);
|
|
19
|
-
const blockProps = useBlockProps(
|
|
20
|
-
className: clsx(layoutClassNames),
|
|
21
|
-
role: "tablist"
|
|
22
|
-
});
|
|
16
|
+
const blockProps = useBlockProps();
|
|
23
17
|
const innerBlocksProps = useInnerBlocksProps(blockProps, {
|
|
24
18
|
allowedBlocks: ["core/tabs-menu-item"],
|
|
25
19
|
orientation: "horizontal",
|
|
20
|
+
templateLock: false,
|
|
26
21
|
renderAppender: false
|
|
27
22
|
});
|
|
28
23
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/tabs-menu/edit.js"],
|
|
4
|
-
"sourcesContent": ["/**\n *
|
|
5
|
-
"mappings": ";AAGA
|
|
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/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab/remove-tab-toolbar-control';\n\nfunction Edit( { clientId } ) {\n\tconst tabsClientId = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getBlockRootClientId( clientId ),\n\t\t[ clientId ]\n\t);\n\n\tconst blockProps = useBlockProps();\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tallowedBlocks: [ 'core/tabs-menu-item' ],\n\t\torientation: 'horizontal',\n\t\ttemplateLock: false,\n\t\trenderAppender: false,\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\nexport default Edit;\n"],
|
|
5
|
+
"mappings": ";AAGA;AAAA,EACC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,iBAAiB;AAK1B,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AAmBlC,mBACC,KADD;AAjBF,SAAS,KAAM,EAAE,SAAS,GAAI;AAC7B,QAAM,eAAe;AAAA,IACpB,CAAE,WACD,OAAQ,gBAAiB,EAAE,qBAAsB,QAAS;AAAA,IAC3D,CAAE,QAAS;AAAA,EACZ;AAEA,QAAM,aAAa,cAAc;AAEjC,QAAM,mBAAmB,oBAAqB,YAAY;AAAA,IACzD,eAAe,CAAE,qBAAsB;AAAA,IACvC,aAAa;AAAA,IACb,cAAc;AAAA,IACd,gBAAgB;AAAA,EACjB,CAAE;AAEF,SACC,iCACC;AAAA,wBAAC,wBAAqB,cAA8B;AAAA,IACpD,oBAAC,2BAAwB,cAA8B;AAAA,IACvD,oBAAC,SAAM,GAAG,kBAAmB;AAAA,KAC9B;AAEF;AAEA,IAAO,eAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
"name": "core/tabs-menu-item",
|
|
6
6
|
"title": "Tab Menu Item",
|
|
7
7
|
"description": "A single tab button in the tabs menu.",
|
|
8
|
-
"version": "1.0.0",
|
|
9
8
|
"category": "design",
|
|
10
9
|
"textdomain": "default",
|
|
11
10
|
"parent": [ "core/tabs-menu" ],
|
|
@@ -20,6 +19,7 @@
|
|
|
20
19
|
"supports": {
|
|
21
20
|
"html": false,
|
|
22
21
|
"reusable": false,
|
|
22
|
+
"visibility": false,
|
|
23
23
|
"lock": false,
|
|
24
24
|
"color": {
|
|
25
25
|
"background": true,
|
|
@@ -48,9 +48,6 @@
|
|
|
48
48
|
"color": true,
|
|
49
49
|
"width": true,
|
|
50
50
|
"style": true
|
|
51
|
-
},
|
|
52
|
-
"layout": {
|
|
53
|
-
"allowEditing": false
|
|
54
51
|
}
|
|
55
52
|
},
|
|
56
53
|
"editorScript": "file:./index.js",
|
|
@@ -11,13 +11,9 @@ import { useMemo, useCallback } from "@wordpress/element";
|
|
|
11
11
|
import Controls from "./controls.mjs";
|
|
12
12
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
var EMPTY_ARRAY = [];
|
|
14
|
-
function Edit({
|
|
15
|
-
context,
|
|
16
|
-
clientId,
|
|
17
|
-
__unstableLayoutClassNames: layoutClassNames
|
|
18
|
-
}) {
|
|
14
|
+
function Edit({ context, clientId }) {
|
|
19
15
|
const tabsList = context["core/tabs-list"] || EMPTY_ARRAY;
|
|
20
|
-
const activeTabIndex = context["core/tabs-activeTabIndex"]
|
|
16
|
+
const activeTabIndex = context["core/tabs-activeTabIndex"];
|
|
21
17
|
const editorActiveTabIndex = context["core/tabs-editorActiveTabIndex"];
|
|
22
18
|
const effectiveActiveIndex = useMemo(() => {
|
|
23
19
|
return editorActiveTabIndex ?? activeTabIndex;
|
|
@@ -52,7 +48,6 @@ function Edit({
|
|
|
52
48
|
);
|
|
53
49
|
const tab = tabsList[menuItemIndex] || {};
|
|
54
50
|
const tabListIndex = tab.index ?? menuItemIndex;
|
|
55
|
-
const tabId = tab.id || `tab-${menuItemIndex}`;
|
|
56
51
|
const tabClientId = tab.clientId || "";
|
|
57
52
|
const label = tab.label || "";
|
|
58
53
|
const isActive = tabListIndex === effectiveActiveIndex;
|
|
@@ -85,14 +80,10 @@ function Edit({
|
|
|
85
80
|
[tabClientId, updateBlockAttributes]
|
|
86
81
|
);
|
|
87
82
|
const blockProps = useBlockProps({
|
|
88
|
-
className: clsx(
|
|
83
|
+
className: clsx({
|
|
89
84
|
"is-active": isActive,
|
|
90
85
|
"is-selected": isSelected
|
|
91
86
|
}),
|
|
92
|
-
"aria-controls": tabId,
|
|
93
|
-
"aria-selected": isActive,
|
|
94
|
-
id: `${tabId}--tab`,
|
|
95
|
-
role: "tab",
|
|
96
87
|
tabIndex: -1,
|
|
97
88
|
onClick: handleTabClick
|
|
98
89
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/tabs-menu-item/edit.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tRichText,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useMemo, useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport Controls from './controls';\n\nconst EMPTY_ARRAY = [];\n\nfunction Edit( {
|
|
5
|
-
"mappings": ";AAGA,OAAO,UAAU;AAKjB,SAAS,UAAU;AACnB;AAAA,EACC;AAAA,EACA,SAAS;AAAA,EACT;AAAA,OACM;AACP,SAAS,WAAW,mBAAmB;AACvC,SAAS,SAAS,mBAAmB;AAKrC,OAAO,cAAc;
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tRichText,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useMemo, useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport Controls from './controls';\n\nconst EMPTY_ARRAY = [];\n\nfunction Edit( { context, clientId } ) {\n\tconst tabsList = context[ 'core/tabs-list' ] || EMPTY_ARRAY;\n\tconst activeTabIndex = context[ 'core/tabs-activeTabIndex' ];\n\tconst editorActiveTabIndex = context[ 'core/tabs-editorActiveTabIndex' ];\n\n\tconst effectiveActiveIndex = useMemo( () => {\n\t\treturn editorActiveTabIndex ?? activeTabIndex;\n\t}, [ editorActiveTabIndex, activeTabIndex ] );\n\n\tconst { menuItemIndex, tabsClientId, selectedTabClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst _tabsMenuClientId = getBlockRootClientId( clientId );\n\t\t\tconst _tabsClientId = _tabsMenuClientId\n\t\t\t\t? getBlockRootClientId( _tabsMenuClientId )\n\t\t\t\t: null;\n\n\t\t\tconst siblings = getBlockOrder( _tabsMenuClientId );\n\t\t\tconst _menuItemIndex = siblings.indexOf( clientId );\n\n\t\t\t// Find which tab panel block is currently selected.\n\t\t\tconst selectedIds = getSelectedBlockClientIds();\n\t\t\tlet _selectedTabClientId = null;\n\t\t\tfor ( const tab of tabsList ) {\n\t\t\t\tif (\n\t\t\t\t\tselectedIds.includes( tab.clientId ) ||\n\t\t\t\t\thasSelectedInnerBlock( tab.clientId, true )\n\t\t\t\t) {\n\t\t\t\t\t_selectedTabClientId = tab.clientId;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tmenuItemIndex: _menuItemIndex,\n\t\t\t\ttabsClientId: _tabsClientId,\n\t\t\t\tselectedTabClientId: _selectedTabClientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId, tabsList ]\n\t);\n\n\tconst tab = tabsList[ menuItemIndex ] || {};\n\n\t// tabListIndex is the tab's position in tabsList, used for active-state\n\t// checks and click handling.\n\tconst tabListIndex = tab.index ?? menuItemIndex;\n\n\tconst tabClientId = tab.clientId || '';\n\tconst label = tab.label || '';\n\n\tconst isActive = tabListIndex === effectiveActiveIndex;\n\tconst isSelected = tabClientId === selectedTabClientId;\n\n\tconst { __unstableMarkNextChangeAsNotPersistent, updateBlockAttributes } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst handleTabClick = useCallback(\n\t\t( event ) => {\n\t\t\tevent.preventDefault();\n\t\t\tif ( tabsClientId && tabListIndex !== effectiveActiveIndex ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\t\teditorActiveTabIndex: tabListIndex,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\ttabsClientId,\n\t\t\ttabListIndex,\n\t\t\teffectiveActiveIndex,\n\t\t\tupdateBlockAttributes,\n\t\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\t]\n\t);\n\n\tconst handleLabelChange = useCallback(\n\t\t( newLabel ) => {\n\t\t\tif ( tabClientId ) {\n\t\t\t\tupdateBlockAttributes( tabClientId, { label: newLabel } );\n\t\t\t}\n\t\t},\n\t\t[ tabClientId, updateBlockAttributes ]\n\t);\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( {\n\t\t\t'is-active': isActive,\n\t\t\t'is-selected': isSelected,\n\t\t} ),\n\t\ttabIndex: -1,\n\t\tonClick: handleTabClick,\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<Controls tabsClientId={ tabsClientId } />\n\t\t\t<button { ...blockProps } type=\"button\">\n\t\t\t\t<RichText\n\t\t\t\t\ttagName=\"span\"\n\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\tplaceholder={ __( 'Tab title' ) }\n\t\t\t\t\tvalue={ label }\n\t\t\t\t\tonChange={ handleLabelChange }\n\t\t\t\t/>\n\t\t\t</button>\n\t\t</>\n\t);\n}\n\nexport default Edit;\n"],
|
|
5
|
+
"mappings": ";AAGA,OAAO,UAAU;AAKjB,SAAS,UAAU;AACnB;AAAA,EACC;AAAA,EACA,SAAS;AAAA,EACT;AAAA,OACM;AACP,SAAS,WAAW,mBAAmB;AACvC,SAAS,SAAS,mBAAmB;AAKrC,OAAO,cAAc;AAyGnB,mBACC,KADD;AAvGF,IAAM,cAAc,CAAC;AAErB,SAAS,KAAM,EAAE,SAAS,SAAS,GAAI;AACtC,QAAM,WAAW,QAAS,gBAAiB,KAAK;AAChD,QAAM,iBAAiB,QAAS,0BAA2B;AAC3D,QAAM,uBAAuB,QAAS,gCAAiC;AAEvE,QAAM,uBAAuB,QAAS,MAAM;AAC3C,WAAO,wBAAwB;AAAA,EAChC,GAAG,CAAE,sBAAsB,cAAe,CAAE;AAE5C,QAAM,EAAE,eAAe,cAAc,oBAAoB,IAAI;AAAA,IAC5D,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,gBAAiB;AAE7B,YAAM,oBAAoB,qBAAsB,QAAS;AACzD,YAAM,gBAAgB,oBACnB,qBAAsB,iBAAkB,IACxC;AAEH,YAAM,WAAW,cAAe,iBAAkB;AAClD,YAAM,iBAAiB,SAAS,QAAS,QAAS;AAGlD,YAAM,cAAc,0BAA0B;AAC9C,UAAI,uBAAuB;AAC3B,iBAAYA,QAAO,UAAW;AAC7B,YACC,YAAY,SAAUA,KAAI,QAAS,KACnC,sBAAuBA,KAAI,UAAU,IAAK,GACzC;AACD,iCAAuBA,KAAI;AAC3B;AAAA,QACD;AAAA,MACD;AAEA,aAAO;AAAA,QACN,eAAe;AAAA,QACf,cAAc;AAAA,QACd,qBAAqB;AAAA,MACtB;AAAA,IACD;AAAA,IACA,CAAE,UAAU,QAAS;AAAA,EACtB;AAEA,QAAM,MAAM,SAAU,aAAc,KAAK,CAAC;AAI1C,QAAM,eAAe,IAAI,SAAS;AAElC,QAAM,cAAc,IAAI,YAAY;AACpC,QAAM,QAAQ,IAAI,SAAS;AAE3B,QAAM,WAAW,iBAAiB;AAClC,QAAM,aAAa,gBAAgB;AAEnC,QAAM,EAAE,yCAAyC,sBAAsB,IACtE,YAAa,gBAAiB;AAE/B,QAAM,iBAAiB;AAAA,IACtB,CAAE,UAAW;AACZ,YAAM,eAAe;AACrB,UAAK,gBAAgB,iBAAiB,sBAAuB;AAC5D,gDAAwC;AACxC,8BAAuB,cAAc;AAAA,UACpC,sBAAsB;AAAA,QACvB,CAAE;AAAA,MACH;AAAA,IACD;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,QAAM,oBAAoB;AAAA,IACzB,CAAE,aAAc;AACf,UAAK,aAAc;AAClB,8BAAuB,aAAa,EAAE,OAAO,SAAS,CAAE;AAAA,MACzD;AAAA,IACD;AAAA,IACA,CAAE,aAAa,qBAAsB;AAAA,EACtC;AAEA,QAAM,aAAa,cAAe;AAAA,IACjC,WAAW,KAAM;AAAA,MAChB,aAAa;AAAA,MACb,eAAe;AAAA,IAChB,CAAE;AAAA,IACF,UAAU;AAAA,IACV,SAAS;AAAA,EACV,CAAE;AAEF,SACC,iCACC;AAAA,wBAAC,YAAS,cAA8B;AAAA,IACxC,oBAAC,YAAS,GAAG,YAAa,MAAK,UAC9B;AAAA,MAAC;AAAA;AAAA,QACA,SAAQ;AAAA,QACR,8BAA4B;AAAA,QAC5B,aAAc,GAAI,WAAY;AAAA,QAC9B,OAAQ;AAAA,QACR,UAAW;AAAA;AAAA,IACZ,GACD;AAAA,KACD;AAEF;AAEA,IAAO,eAAQ;",
|
|
6
6
|
"names": ["tab"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
:where(.wp-block-latest-comments) {
|
|
2
|
+
padding-right: 0;
|
|
3
|
+
}
|
|
4
|
+
|
|
1
5
|
ol.wp-block-latest-comments {
|
|
2
6
|
margin-right: 0;
|
|
3
7
|
box-sizing: border-box;
|
|
@@ -16,10 +20,6 @@ ol.wp-block-latest-comments {
|
|
|
16
20
|
line-height: 1.5;
|
|
17
21
|
}
|
|
18
22
|
|
|
19
|
-
.wp-block-latest-comments .wp-block-latest-comments {
|
|
20
|
-
padding-right: 0;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
23
|
.wp-block-latest-comments__comment {
|
|
24
24
|
list-style: none;
|
|
25
25
|
margin-bottom: 1em;
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
:where(.wp-block-latest-comments) {
|
|
2
|
+
padding-left: 0;
|
|
3
|
+
}
|
|
4
|
+
|
|
1
5
|
ol.wp-block-latest-comments {
|
|
2
6
|
margin-left: 0;
|
|
3
7
|
box-sizing: border-box;
|
|
@@ -16,10 +20,6 @@ ol.wp-block-latest-comments {
|
|
|
16
20
|
line-height: 1.5;
|
|
17
21
|
}
|
|
18
22
|
|
|
19
|
-
.wp-block-latest-comments .wp-block-latest-comments {
|
|
20
|
-
padding-left: 0;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
23
|
.wp-block-latest-comments__comment {
|
|
24
24
|
list-style: none;
|
|
25
25
|
margin-bottom: 1em;
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
@media (max-width: 600px) {
|
|
127
|
-
.wp-block-post-template-is-layout-grid
|
|
127
|
+
.wp-block-post-template-is-layout-grid[class*=columns-]:not(.has-native-responsive-grid) {
|
|
128
128
|
grid-template-columns: 1fr;
|
|
129
129
|
}
|
|
130
130
|
}
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
@media (max-width: 600px) {
|
|
127
|
-
.wp-block-post-template-is-layout-grid
|
|
127
|
+
.wp-block-post-template-is-layout-grid[class*=columns-]:not(.has-native-responsive-grid) {
|
|
128
128
|
grid-template-columns: 1fr;
|
|
129
129
|
}
|
|
130
130
|
}
|