@wordpress/block-library 9.41.0 → 9.41.1-next.v.202603161435.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.
Files changed (199) hide show
  1. package/build/cover/edit/cover-placeholder.cjs +7 -0
  2. package/build/cover/edit/cover-placeholder.cjs.map +2 -2
  3. package/build/html/block.json +2 -1
  4. package/build/html/modal.cjs +142 -147
  5. package/build/html/modal.cjs.map +3 -3
  6. package/build/icon/block.json +3 -12
  7. package/build/image/edit.cjs +7 -0
  8. package/build/image/edit.cjs.map +2 -2
  9. package/build/image/image.cjs +5 -9
  10. package/build/image/image.cjs.map +2 -2
  11. package/build/media-text/media-container.cjs +6 -0
  12. package/build/media-text/media-container.cjs.map +2 -2
  13. package/build/navigation/edit/index.cjs +21 -14
  14. package/build/navigation/edit/index.cjs.map +3 -3
  15. package/build/navigation/view.cjs +9 -2
  16. package/build/navigation/view.cjs.map +2 -2
  17. package/build/navigation-link/block.json +5 -0
  18. package/build/navigation-link/shared/use-link-preview.cjs +29 -0
  19. package/build/navigation-link/shared/use-link-preview.cjs.map +2 -2
  20. package/build/nextpage/block.json +0 -1
  21. package/build/paragraph/edit.cjs +1 -1
  22. package/build/paragraph/edit.cjs.map +1 -1
  23. package/build/playlist/edit.cjs +3 -23
  24. package/build/playlist/edit.cjs.map +3 -3
  25. package/build/playlist/utils.cjs +48 -0
  26. package/build/playlist/utils.cjs.map +7 -0
  27. package/build/playlist-track/block.json +0 -0
  28. package/build/post-excerpt/block.json +1 -3
  29. package/build/post-excerpt/deprecated.cjs +112 -0
  30. package/build/post-excerpt/deprecated.cjs.map +7 -0
  31. package/build/post-excerpt/edit.cjs +11 -30
  32. package/build/post-excerpt/edit.cjs.map +3 -3
  33. package/build/post-excerpt/index.cjs +3 -1
  34. package/build/post-excerpt/index.cjs.map +3 -3
  35. package/build/private-apis.cjs +3 -1
  36. package/build/private-apis.cjs.map +2 -2
  37. package/build/shortcode/block.json +2 -1
  38. package/build/site-logo/edit.cjs +1 -3
  39. package/build/site-logo/edit.cjs.map +2 -2
  40. package/build/tab/add-tab-toolbar-control.cjs +22 -5
  41. package/build/tab/add-tab-toolbar-control.cjs.map +2 -2
  42. package/build/tab/remove-tab-toolbar-control.cjs +19 -1
  43. package/build/tab/remove-tab-toolbar-control.cjs.map +2 -2
  44. package/build/tabs/edit.cjs +85 -7
  45. package/build/tabs/edit.cjs.map +2 -2
  46. package/build/tabs/index.cjs +12 -2
  47. package/build/tabs/index.cjs.map +2 -2
  48. package/build/tabs-menu/block.json +1 -6
  49. package/build/tabs-menu/edit.cjs +11 -151
  50. package/build/tabs-menu/edit.cjs.map +3 -3
  51. package/build/tabs-menu/save.cjs.map +2 -2
  52. package/build/tabs-menu-item/block.json +14 -11
  53. package/build/tabs-menu-item/controls.cjs +2 -133
  54. package/build/tabs-menu-item/controls.cjs.map +3 -3
  55. package/build/tabs-menu-item/edit.cjs +44 -56
  56. package/build/tabs-menu-item/edit.cjs.map +3 -3
  57. package/build/tabs-menu-item/save.cjs +0 -1
  58. package/build/tabs-menu-item/save.cjs.map +2 -2
  59. package/build/template-part/edit/index.cjs +6 -4
  60. package/build/template-part/edit/index.cjs.map +2 -2
  61. package/build/utils/media-control.cjs +72 -29
  62. package/build/utils/media-control.cjs.map +3 -3
  63. package/build-module/cover/edit/cover-placeholder.mjs +7 -0
  64. package/build-module/cover/edit/cover-placeholder.mjs.map +2 -2
  65. package/build-module/html/block.json +2 -1
  66. package/build-module/html/modal.mjs +144 -149
  67. package/build-module/html/modal.mjs.map +2 -2
  68. package/build-module/icon/block.json +3 -12
  69. package/build-module/image/edit.mjs +7 -0
  70. package/build-module/image/edit.mjs.map +2 -2
  71. package/build-module/image/image.mjs +5 -9
  72. package/build-module/image/image.mjs.map +2 -2
  73. package/build-module/media-text/media-container.mjs +7 -1
  74. package/build-module/media-text/media-container.mjs.map +2 -2
  75. package/build-module/navigation/edit/index.mjs +22 -14
  76. package/build-module/navigation/edit/index.mjs.map +2 -2
  77. package/build-module/navigation/view.mjs +9 -2
  78. package/build-module/navigation/view.mjs.map +2 -2
  79. package/build-module/navigation-link/block.json +5 -0
  80. package/build-module/navigation-link/shared/use-link-preview.mjs +28 -0
  81. package/build-module/navigation-link/shared/use-link-preview.mjs.map +2 -2
  82. package/build-module/nextpage/block.json +0 -1
  83. package/build-module/paragraph/edit.mjs +2 -2
  84. package/build-module/paragraph/edit.mjs.map +1 -1
  85. package/build-module/playlist/edit.mjs +2 -18
  86. package/build-module/playlist/edit.mjs.map +2 -2
  87. package/build-module/playlist/utils.mjs +23 -0
  88. package/build-module/playlist/utils.mjs.map +7 -0
  89. package/build-module/playlist-track/block.json +0 -0
  90. package/build-module/post-excerpt/block.json +1 -3
  91. package/build-module/post-excerpt/deprecated.mjs +81 -0
  92. package/build-module/post-excerpt/deprecated.mjs.map +7 -0
  93. package/build-module/post-excerpt/edit.mjs +12 -34
  94. package/build-module/post-excerpt/edit.mjs.map +2 -2
  95. package/build-module/post-excerpt/index.mjs +3 -1
  96. package/build-module/post-excerpt/index.mjs.map +2 -2
  97. package/build-module/private-apis.mjs +3 -1
  98. package/build-module/private-apis.mjs.map +2 -2
  99. package/build-module/shortcode/block.json +2 -1
  100. package/build-module/site-logo/edit.mjs +1 -3
  101. package/build-module/site-logo/edit.mjs.map +2 -2
  102. package/build-module/tab/add-tab-toolbar-control.mjs +22 -5
  103. package/build-module/tab/add-tab-toolbar-control.mjs.map +2 -2
  104. package/build-module/tab/remove-tab-toolbar-control.mjs +19 -1
  105. package/build-module/tab/remove-tab-toolbar-control.mjs.map +2 -2
  106. package/build-module/tabs/edit.mjs +87 -9
  107. package/build-module/tabs/edit.mjs.map +2 -2
  108. package/build-module/tabs/index.mjs +12 -2
  109. package/build-module/tabs/index.mjs.map +2 -2
  110. package/build-module/tabs-menu/block.json +1 -6
  111. package/build-module/tabs-menu/edit.mjs +13 -162
  112. package/build-module/tabs-menu/edit.mjs.map +2 -2
  113. package/build-module/tabs-menu/save.mjs.map +2 -2
  114. package/build-module/tabs-menu-item/block.json +14 -11
  115. package/build-module/tabs-menu-item/controls.mjs +4 -143
  116. package/build-module/tabs-menu-item/controls.mjs.map +2 -2
  117. package/build-module/tabs-menu-item/edit.mjs +45 -57
  118. package/build-module/tabs-menu-item/edit.mjs.map +3 -3
  119. package/build-module/tabs-menu-item/save.mjs +0 -1
  120. package/build-module/tabs-menu-item/save.mjs.map +2 -2
  121. package/build-module/template-part/edit/index.mjs +6 -4
  122. package/build-module/template-part/edit/index.mjs.map +2 -2
  123. package/build-module/utils/media-control.mjs +73 -30
  124. package/build-module/utils/media-control.mjs.map +2 -2
  125. package/build-style/common-rtl.css +1 -0
  126. package/build-style/common.css +1 -0
  127. package/build-style/editor-rtl.css +55 -17
  128. package/build-style/editor.css +55 -17
  129. package/build-style/html/editor-rtl.css +10 -6
  130. package/build-style/html/editor.css +10 -6
  131. package/build-style/navigation/style-rtl.css +15 -1
  132. package/build-style/navigation/style.css +15 -1
  133. package/build-style/navigation-overlay-close/style-rtl.css +3 -3
  134. package/build-style/navigation-overlay-close/style.css +3 -3
  135. package/build-style/playlist/style-rtl.css +4 -0
  136. package/build-style/playlist/style.css +4 -0
  137. package/build-style/style-rtl.css +23 -4
  138. package/build-style/style.css +23 -4
  139. package/build-style/tabs-menu/editor-rtl.css +5 -3
  140. package/build-style/tabs-menu/editor.css +5 -3
  141. package/package.json +38 -38
  142. package/src/accordion-item/index.php +17 -5
  143. package/src/common.scss +1 -0
  144. package/src/cover/edit/cover-placeholder.js +8 -0
  145. package/src/cover/index.php +8 -0
  146. package/src/details/index.php +47 -0
  147. package/src/html/block.json +2 -1
  148. package/src/html/editor.scss +15 -5
  149. package/src/html/modal.js +26 -22
  150. package/src/icon/block.json +3 -12
  151. package/src/image/edit.js +8 -0
  152. package/src/image/image.js +8 -13
  153. package/src/media-text/media-container.js +8 -1
  154. package/src/navigation/edit/index.js +26 -14
  155. package/src/navigation/index.php +27 -13
  156. package/src/navigation/style.scss +17 -1
  157. package/src/navigation/view.js +14 -2
  158. package/src/navigation-link/block.json +5 -0
  159. package/src/navigation-link/index.php +10 -10
  160. package/src/navigation-link/shared/test/use-link-preview.test.js +149 -0
  161. package/src/navigation-link/shared/use-link-preview.js +43 -1
  162. package/src/navigation-overlay-close/style.scss +3 -3
  163. package/src/navigation-submenu/index.php +17 -11
  164. package/src/nextpage/block.json +0 -1
  165. package/src/paragraph/edit.js +2 -2
  166. package/src/playlist/edit.js +1 -34
  167. package/src/playlist/style.scss +5 -0
  168. package/src/playlist/test/edit.js +1 -1
  169. package/src/playlist/utils.js +42 -0
  170. package/src/playlist-track/block.json +0 -0
  171. package/src/playlist-track/edit.js +0 -0
  172. package/src/playlist-track/index.js +0 -0
  173. package/src/playlist-track/index.php +0 -0
  174. package/src/playlist-track/init.js +0 -0
  175. package/src/playlist-track/style.scss +0 -0
  176. package/src/post-excerpt/block.json +1 -3
  177. package/src/post-excerpt/deprecated.js +84 -0
  178. package/src/post-excerpt/edit.js +14 -39
  179. package/src/post-excerpt/index.js +2 -0
  180. package/src/private-apis.js +2 -0
  181. package/src/shortcode/block.json +2 -1
  182. package/src/site-logo/edit.js +1 -3
  183. package/src/tab/add-tab-toolbar-control.js +48 -23
  184. package/src/tab/remove-tab-toolbar-control.js +30 -10
  185. package/src/tabs/edit.js +133 -10
  186. package/src/tabs/index.js +12 -2
  187. package/src/tabs-menu/block.json +1 -6
  188. package/src/tabs-menu/edit.js +13 -214
  189. package/src/tabs-menu/editor.scss +7 -3
  190. package/src/tabs-menu/index.php +42 -27
  191. package/src/tabs-menu/save.js +0 -4
  192. package/src/tabs-menu-item/block.json +14 -11
  193. package/src/tabs-menu-item/controls.js +4 -167
  194. package/src/tabs-menu-item/edit.js +60 -69
  195. package/src/tabs-menu-item/index.php +11 -23
  196. package/src/tabs-menu-item/save.js +0 -1
  197. package/src/template-part/edit/index.js +5 -1
  198. package/src/utils/media-control.js +61 -21
  199. package/src/utils/media-control.scss +54 -18
@@ -1,183 +1,34 @@
1
1
  // packages/block-library/src/tabs-menu/edit.js
2
2
  import clsx from "clsx";
3
- import { __ } from "@wordpress/i18n";
4
3
  import {
5
4
  useBlockProps,
6
5
  useInnerBlocksProps,
7
- BlockContextProvider,
8
- __experimentalUseBlockPreview as useBlockPreview,
9
- store as blockEditorStore,
10
- useBlockEditContext
6
+ store as blockEditorStore
11
7
  } from "@wordpress/block-editor";
12
- import { useSelect, useDispatch } from "@wordpress/data";
13
- import {
14
- memo,
15
- useMemo,
16
- useState,
17
- useEffect,
18
- useCallback
19
- } from "@wordpress/element";
8
+ import { useSelect } from "@wordpress/data";
20
9
  import AddTabToolbarControl from "../tab/add-tab-toolbar-control.mjs";
21
10
  import RemoveTabToolbarControl from "../tab/remove-tab-toolbar-control.mjs";
22
11
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
23
- var TABS_MENU_ITEM_TEMPLATE = [["core/tabs-menu-item", {}]];
24
- var EMPTY_ARRAY = [];
25
- function TabsMenuItemPreview({
26
- blocks,
27
- blockContextId,
28
- isHidden,
29
- setActiveBlockContextId
30
- }) {
31
- const blockPreviewProps = useBlockPreview({ blocks });
32
- const handleOnClick = () => {
33
- setActiveBlockContextId(blockContextId);
34
- };
35
- const style = {
36
- display: isHidden ? "none" : "flex"
37
- };
38
- return /* @__PURE__ */ jsx(
39
- "div",
40
- {
41
- ...blockPreviewProps,
42
- tabIndex: 0,
43
- role: "button",
44
- onClick: handleOnClick,
45
- onKeyDown: handleOnClick,
46
- style
47
- }
48
- );
49
- }
50
- var MemoizedTabsMenuItemPreview = memo(TabsMenuItemPreview);
51
- function TabsMenuItemTemplateBlocks({ wrapperProps = {}, layout }) {
52
- const innerBlocksProps = useInnerBlocksProps(wrapperProps, {
53
- template: TABS_MENU_ITEM_TEMPLATE,
54
- templateLock: "all",
55
- renderAppender: false,
56
- layout
57
- });
58
- return innerBlocksProps.children;
59
- }
60
- function Edit({
61
- context,
62
- clientId,
63
- __unstableLayoutClassNames: layoutClassNames
64
- }) {
65
- const { layout } = useBlockEditContext();
66
- const tabsId = context["core/tabs-id"] || null;
67
- const tabsList = context["core/tabs-list"] || EMPTY_ARRAY;
68
- const activeTabIndex = context["core/tabs-activeTabIndex"] ?? 0;
69
- const editorActiveTabIndex = context["core/tabs-editorActiveTabIndex"];
70
- const effectiveActiveIndex = useMemo(() => {
71
- return editorActiveTabIndex ?? activeTabIndex;
72
- }, [editorActiveTabIndex, activeTabIndex]);
73
- const { __unstableMarkNextChangeAsNotPersistent } = useDispatch(blockEditorStore);
74
- const { updateBlockAttributes } = useDispatch(blockEditorStore);
75
- const [activeBlockContextId, setActiveBlockContextId] = useState(null);
76
- const { blocks, tabsClientId } = useSelect(
77
- (select) => {
78
- const { getBlocks, getBlockRootClientId } = select(blockEditorStore);
79
- return {
80
- blocks: getBlocks(clientId),
81
- tabsClientId: getBlockRootClientId(clientId)
82
- };
83
- },
12
+ function Edit({ clientId, __unstableLayoutClassNames: layoutClassNames }) {
13
+ const { tabsClientId } = useSelect(
14
+ (select) => ({
15
+ tabsClientId: select(blockEditorStore).getBlockRootClientId(clientId)
16
+ }),
84
17
  [clientId]
85
18
  );
86
- const blockContexts = useMemo(() => {
87
- return tabsList.map((tab, index) => ({
88
- "core/tabs-menu-item-index": index,
89
- "core/tabs-menu-item-id": tab.id || `tab-${index}`,
90
- "core/tabs-menu-item-label": tab.label || "",
91
- "core/tabs-menu-item-clientId": tab.clientId,
92
- // Pass through parent context
93
- "core/tabs-id": tabsId,
94
- "core/tabs-list": tabsList,
95
- "core/tabs-activeTabIndex": activeTabIndex,
96
- "core/tabs-editorActiveTabIndex": editorActiveTabIndex
97
- }));
98
- }, [tabsList, tabsId, activeTabIndex, editorActiveTabIndex]);
99
- const getContextId = useCallback((blockContext) => {
100
- return `tab-context-${blockContext["core/tabs-menu-item-index"]}`;
101
- }, []);
102
- useEffect(() => {
103
- if (blockContexts.length > 0 && activeBlockContextId === null) {
104
- setActiveBlockContextId(getContextId(blockContexts[0]));
105
- }
106
- }, [blockContexts, activeBlockContextId, getContextId]);
107
- useEffect(() => {
108
- if (blockContexts.length > 0 && effectiveActiveIndex < blockContexts.length) {
109
- const newContextId = getContextId(
110
- blockContexts[effectiveActiveIndex]
111
- );
112
- setActiveBlockContextId(
113
- (prevId) => prevId !== newContextId ? newContextId : prevId
114
- );
115
- }
116
- }, [effectiveActiveIndex, blockContexts, getContextId]);
117
- const handleTabContextClick = useCallback(
118
- (index) => {
119
- if (tabsClientId && index !== effectiveActiveIndex) {
120
- __unstableMarkNextChangeAsNotPersistent();
121
- updateBlockAttributes(tabsClientId, {
122
- editorActiveTabIndex: index
123
- });
124
- }
125
- },
126
- [
127
- tabsClientId,
128
- effectiveActiveIndex,
129
- updateBlockAttributes,
130
- __unstableMarkNextChangeAsNotPersistent
131
- ]
132
- );
133
19
  const blockProps = useBlockProps({
134
20
  className: clsx(layoutClassNames),
135
21
  role: "tablist"
136
22
  });
137
- if (tabsList.length === 0) {
138
- return /* @__PURE__ */ jsxs(Fragment, { children: [
139
- /* @__PURE__ */ jsx(AddTabToolbarControl, { tabsClientId }),
140
- /* @__PURE__ */ jsx(RemoveTabToolbarControl, { tabsClientId }),
141
- /* @__PURE__ */ jsx("div", { ...blockProps, children: /* @__PURE__ */ jsx("span", { className: "tabs__tab-label tabs__tab-label--placeholder", children: __("Add tabs to display menu") }) })
142
- ] });
143
- }
23
+ const innerBlocksProps = useInnerBlocksProps(blockProps, {
24
+ allowedBlocks: ["core/tabs-menu-item"],
25
+ orientation: "horizontal",
26
+ renderAppender: false
27
+ });
144
28
  return /* @__PURE__ */ jsxs(Fragment, { children: [
145
29
  /* @__PURE__ */ jsx(AddTabToolbarControl, { tabsClientId }),
146
30
  /* @__PURE__ */ jsx(RemoveTabToolbarControl, { tabsClientId }),
147
- /* @__PURE__ */ jsx("div", { ...blockProps, children: blockContexts.map((blockContext, index) => {
148
- const contextId = getContextId(blockContext);
149
- const isVisible = contextId === activeBlockContextId;
150
- return /* @__PURE__ */ jsxs(
151
- BlockContextProvider,
152
- {
153
- value: blockContext,
154
- children: [
155
- isVisible ? /* @__PURE__ */ jsx(
156
- TabsMenuItemTemplateBlocks,
157
- {
158
- wrapperProps: {
159
- onClick: () => handleTabContextClick(index)
160
- },
161
- layout
162
- }
163
- ) : null,
164
- /* @__PURE__ */ jsx(
165
- MemoizedTabsMenuItemPreview,
166
- {
167
- blocks,
168
- blockContextId: contextId,
169
- setActiveBlockContextId: (id) => {
170
- setActiveBlockContextId(id);
171
- handleTabContextClick(index);
172
- },
173
- isHidden: isVisible
174
- }
175
- )
176
- ]
177
- },
178
- contextId
179
- );
180
- }) })
31
+ /* @__PURE__ */ jsx("div", { ...innerBlocksProps })
181
32
  ] });
182
33
  }
183
34
  var edit_default = Edit;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs-menu/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\tuseInnerBlocksProps,\n\tBlockContextProvider,\n\t__experimentalUseBlockPreview as useBlockPreview,\n\tstore as blockEditorStore,\n\tuseBlockEditContext,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tmemo,\n\tuseMemo,\n\tuseState,\n\tuseEffect,\n\tuseCallback,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport AddTabToolbarControl from '../tab/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab/remove-tab-toolbar-control';\n\nconst TABS_MENU_ITEM_TEMPLATE = [ [ 'core/tabs-menu-item', {} ] ];\nconst EMPTY_ARRAY = [];\n\n/**\n * Preview component for non-active tab menu items.\n * Uses useBlockPreview to cache the rendering.\n *\n * @param {Object} props Component props.\n * @param {Array} props.blocks The blocks to preview.\n * @param {string} props.blockContextId The context ID for this block.\n * @param {boolean} props.isHidden Whether the preview is hidden.\n * @param {Function} props.setActiveBlockContextId Callback to set the active context ID.\n */\nfunction TabsMenuItemPreview( {\n\tblocks,\n\tblockContextId,\n\tisHidden,\n\tsetActiveBlockContextId,\n} ) {\n\tconst blockPreviewProps = useBlockPreview( { blocks } );\n\n\tconst handleOnClick = () => {\n\t\tsetActiveBlockContextId( blockContextId );\n\t};\n\n\tconst style = {\n\t\tdisplay: isHidden ? 'none' : 'flex',\n\t};\n\n\treturn (\n\t\t<div\n\t\t\t{ ...blockPreviewProps }\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"button\"\n\t\t\tonClick={ handleOnClick }\n\t\t\tonKeyDown={ handleOnClick }\n\t\t\tstyle={ style }\n\t\t/>\n\t);\n}\n\nconst MemoizedTabsMenuItemPreview = memo( TabsMenuItemPreview );\n\n/**\n * The actual editable inner blocks for the active tab item.\n *\n * @param {Object} props Component props.\n * @param {Object} props.wrapperProps Props to pass to the wrapper element.\n * @param {Object} props.layout The layout object to pass to inner blocks.\n */\nfunction TabsMenuItemTemplateBlocks( { wrapperProps = {}, layout } ) {\n\tconst innerBlocksProps = useInnerBlocksProps( wrapperProps, {\n\t\ttemplate: TABS_MENU_ITEM_TEMPLATE,\n\t\ttemplateLock: 'all',\n\t\trenderAppender: false,\n\t\tlayout,\n\t} );\n\treturn innerBlocksProps.children;\n}\n\nfunction Edit( {\n\tcontext,\n\tclientId,\n\t__unstableLayoutClassNames: layoutClassNames,\n} ) {\n\t// Get the layout from block edit context to pass to inner blocks.\n\t// This ensures the correct orientation is used from the start.\n\tconst { layout } = useBlockEditContext();\n\n\tconst tabsId = context[ 'core/tabs-id' ] || null;\n\tconst tabsList = context[ 'core/tabs-list' ] || EMPTY_ARRAY;\n\tconst activeTabIndex = context[ 'core/tabs-activeTabIndex' ] ?? 0;\n\tconst editorActiveTabIndex = context[ 'core/tabs-editorActiveTabIndex' ];\n\n\t// Memoize effectiveActiveIndex to ensure it updates when context changes\n\tconst effectiveActiveIndex = useMemo( () => {\n\t\treturn editorActiveTabIndex ?? activeTabIndex;\n\t}, [ editorActiveTabIndex, activeTabIndex ] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\t// Track which tab context is \"active\" for editing (shows real inner blocks)\n\tconst [ activeBlockContextId, setActiveBlockContextId ] = useState( null );\n\n\t// Get the inner blocks (the single tabs-menu-item template)\n\tconst { blocks, tabsClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tblocks: getBlocks( clientId ),\n\t\t\t\ttabsClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t// Build block contexts for each tab\n\tconst blockContexts = useMemo( () => {\n\t\treturn tabsList.map( ( tab, index ) => ( {\n\t\t\t'core/tabs-menu-item-index': index,\n\t\t\t'core/tabs-menu-item-id': tab.id || `tab-${ index }`,\n\t\t\t'core/tabs-menu-item-label': tab.label || '',\n\t\t\t'core/tabs-menu-item-clientId': tab.clientId,\n\t\t\t// Pass through parent context\n\t\t\t'core/tabs-id': tabsId,\n\t\t\t'core/tabs-list': tabsList,\n\t\t\t'core/tabs-activeTabIndex': activeTabIndex,\n\t\t\t'core/tabs-editorActiveTabIndex': editorActiveTabIndex,\n\t\t} ) );\n\t}, [ tabsList, tabsId, activeTabIndex, editorActiveTabIndex ] );\n\n\t// Generate a unique ID for each block context\n\tconst getContextId = useCallback( ( blockContext ) => {\n\t\treturn `tab-context-${ blockContext[ 'core/tabs-menu-item-index' ] }`;\n\t}, [] );\n\n\t// Set the first tab as active by default\n\tuseEffect( () => {\n\t\tif ( blockContexts.length > 0 && activeBlockContextId === null ) {\n\t\t\tsetActiveBlockContextId( getContextId( blockContexts[ 0 ] ) );\n\t\t}\n\t}, [ blockContexts, activeBlockContextId, getContextId ] );\n\n\t// Update active context when editorActiveTabIndex changes\n\tuseEffect( () => {\n\t\tif (\n\t\t\tblockContexts.length > 0 &&\n\t\t\teffectiveActiveIndex < blockContexts.length\n\t\t) {\n\t\t\tconst newContextId = getContextId(\n\t\t\t\tblockContexts[ effectiveActiveIndex ]\n\t\t\t);\n\t\t\tsetActiveBlockContextId( ( prevId ) =>\n\t\t\t\tprevId !== newContextId ? newContextId : prevId\n\t\t\t);\n\t\t}\n\t}, [ effectiveActiveIndex, blockContexts, getContextId ] );\n\n\t// Handle tab click to update parent tabs block's editorActiveTabIndex\n\tconst handleTabContextClick = useCallback(\n\t\t( index ) => {\n\t\t\tif ( tabsClientId && index !== effectiveActiveIndex ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\t\teditorActiveTabIndex: index,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\ttabsClientId,\n\t\t\teffectiveActiveIndex,\n\t\t\tupdateBlockAttributes,\n\t\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\t]\n\t);\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( layoutClassNames ),\n\t\trole: 'tablist',\n\t} );\n\n\t// If no tabs exist yet, show placeholder\n\tif ( tabsList.length === 0 ) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<span className=\"tabs__tab-label tabs__tab-label--placeholder\">\n\t\t\t\t\t\t{ __( 'Add tabs to display menu' ) }\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t);\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 { ...blockProps }>\n\t\t\t\t{ blockContexts.map( ( blockContext, index ) => {\n\t\t\t\t\tconst contextId = getContextId( blockContext );\n\t\t\t\t\tconst isVisible = contextId === activeBlockContextId;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<BlockContextProvider\n\t\t\t\t\t\t\tkey={ contextId }\n\t\t\t\t\t\t\tvalue={ blockContext }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ isVisible ? (\n\t\t\t\t\t\t\t\t<TabsMenuItemTemplateBlocks\n\t\t\t\t\t\t\t\t\twrapperProps={ {\n\t\t\t\t\t\t\t\t\t\tonClick: () =>\n\t\t\t\t\t\t\t\t\t\t\thandleTabContextClick( index ),\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null }\n\t\t\t\t\t\t\t<MemoizedTabsMenuItemPreview\n\t\t\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\t\t\tblockContextId={ contextId }\n\t\t\t\t\t\t\t\tsetActiveBlockContextId={ ( id ) => {\n\t\t\t\t\t\t\t\t\tsetActiveBlockContextId( id );\n\t\t\t\t\t\t\t\t\thandleTabContextClick( index );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tisHidden={ isVisible }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</BlockContextProvider>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default Edit;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\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, __unstableLayoutClassNames: layoutClassNames } ) {\n\tconst { tabsClientId } = useSelect(\n\t\t( select ) => ( {\n\t\t\ttabsClientId:\n\t\t\t\tselect( blockEditorStore ).getBlockRootClientId( clientId ),\n\t\t} ),\n\t\t[ clientId ]\n\t);\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( layoutClassNames ),\n\t\trole: 'tablist',\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tallowedBlocks: [ 'core/tabs-menu-item' ],\n\t\torientation: 'horizontal',\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,OAAO,UAAU;AAKjB;AAAA,EACC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,iBAAiB;AAK1B,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AAuBlC,mBACC,KADD;AArBF,SAAS,KAAM,EAAE,UAAU,4BAA4B,iBAAiB,GAAI;AAC3E,QAAM,EAAE,aAAa,IAAI;AAAA,IACxB,CAAE,YAAc;AAAA,MACf,cACC,OAAQ,gBAAiB,EAAE,qBAAsB,QAAS;AAAA,IAC5D;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,QAAM,aAAa,cAAe;AAAA,IACjC,WAAW,KAAM,gBAAiB;AAAA,IAClC,MAAM;AAAA,EACP,CAAE;AAEF,QAAM,mBAAmB,oBAAqB,YAAY;AAAA,IACzD,eAAe,CAAE,qBAAsB;AAAA,IACvC,aAAa;AAAA,IACb,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
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs-menu/save.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\n\n/**\n * WordPress dependencies\n */\nimport { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';\n\nexport default function save() {\n\tconst blockProps = useBlockProps.save( {\n\t\trole: 'tablist',\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps.save( blockProps );\n\n\treturn <div { ...innerBlocksProps } />;\n}\n"],
5
- "mappings": ";AAOA,SAAS,eAAe,2BAA2B;AAS3C;AAPO,SAAR,OAAwB;AAC9B,QAAM,aAAa,cAAc,KAAM;AAAA,IACtC,MAAM;AAAA,EACP,CAAE;AAEF,QAAM,mBAAmB,oBAAoB,KAAM,UAAW;AAE9D,SAAO,oBAAC,SAAM,GAAG,kBAAmB;AACrC;",
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: 'tablist',\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps.save( blockProps );\n\n\treturn <div { ...innerBlocksProps } />;\n}\n"],
5
+ "mappings": ";AAGA,SAAS,eAAe,2BAA2B;AAS3C;AAPO,SAAR,OAAwB;AAC9B,QAAM,aAAa,cAAc,KAAM;AAAA,IACtC,MAAM;AAAA,EACP,CAAE;AAEF,QAAM,mBAAmB,oBAAoB,KAAM,UAAW;AAE9D,SAAO,oBAAC,SAAM,GAAG,kBAAmB;AACrC;",
6
6
  "names": []
7
7
  }
@@ -4,21 +4,25 @@
4
4
  "apiVersion": 3,
5
5
  "name": "core/tabs-menu-item",
6
6
  "title": "Tab Menu Item",
7
- "description": "A single tab button in the tabs menu. Used as a template for styling all tab buttons.",
7
+ "description": "A single tab button in the tabs menu.",
8
8
  "version": "1.0.0",
9
9
  "category": "design",
10
10
  "textdomain": "default",
11
11
  "parent": [ "core/tabs-menu" ],
12
12
  "usesContext": [
13
- "core/tabs-menu-item-index",
14
- "core/tabs-menu-item-id",
15
- "core/tabs-menu-item-label",
16
- "core/tabs-menu-item-clientId",
17
13
  "core/tabs-list",
18
14
  "core/tabs-activeTabIndex",
19
- "core/tabs-editorActiveTabIndex"
15
+ "core/tabs-editorActiveTabIndex",
16
+ "core/tabs-menu-item-index",
17
+ "core/tabs-menu-item-id",
18
+ "core/tabs-menu-item-label"
20
19
  ],
21
- "attributes": {},
20
+ "attributes": {
21
+ "anchor": {
22
+ "type": "string",
23
+ "default": ""
24
+ }
25
+ },
22
26
  "supports": {
23
27
  "html": false,
24
28
  "reusable": false,
@@ -31,7 +35,6 @@
31
35
  "text": true
32
36
  }
33
37
  },
34
- "shadow": true,
35
38
  "typography": {
36
39
  "fontSize": true,
37
40
  "__experimentalFontFamily": true,
@@ -40,9 +43,6 @@
40
43
  "fontSize": true
41
44
  }
42
45
  },
43
- "layout": {
44
- "allowEditing": false
45
- },
46
46
  "spacing": {
47
47
  "padding": true,
48
48
  "__experimentalDefaultControls": {
@@ -54,6 +54,9 @@
54
54
  "color": true,
55
55
  "width": true,
56
56
  "style": true
57
+ },
58
+ "layout": {
59
+ "allowEditing": false
57
60
  }
58
61
  },
59
62
  "editorScript": "file:./index.js",
@@ -1,149 +1,10 @@
1
1
  // packages/block-library/src/tabs-menu-item/controls.js
2
- import clsx from "clsx";
3
- import { __, isRTL } from "@wordpress/i18n";
4
- import {
5
- BlockControls,
6
- store as blockEditorStore
7
- } from "@wordpress/block-editor";
8
- import { ToolbarGroup, ToolbarItem, Button } from "@wordpress/components";
9
- import {
10
- chevronLeft,
11
- chevronRight,
12
- chevronUp,
13
- chevronDown
14
- } from "@wordpress/icons";
15
- import { useDispatch, useSelect } from "@wordpress/data";
2
+ import { BlockControls } from "@wordpress/block-editor";
16
3
  import AddTabToolbarControl from "../tab/add-tab-toolbar-control.mjs";
17
4
  import RemoveTabToolbarControl from "../tab/remove-tab-toolbar-control.mjs";
18
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
19
- function TabBlockMover({
20
- tabClientId,
21
- tabIndex,
22
- tabsCount,
23
- tabsMenuClientId,
24
- tabsClientId
25
- }) {
26
- const {
27
- moveBlocksUp,
28
- moveBlocksDown,
29
- updateBlockAttributes,
30
- __unstableMarkNextChangeAsNotPersistent
31
- } = useDispatch(blockEditorStore);
32
- const { tabPanelClientId, orientation } = useSelect(
33
- (select) => {
34
- const { getBlockRootClientId, getBlockAttributes } = select(blockEditorStore);
35
- const tabsMenuAttributes = tabsMenuClientId ? getBlockAttributes(tabsMenuClientId) : null;
36
- return {
37
- tabPanelClientId: getBlockRootClientId(tabClientId),
38
- orientation: tabsMenuAttributes?.layout?.orientation || "horizontal"
39
- };
40
- },
41
- [tabClientId, tabsMenuClientId]
42
- );
43
- const isFirst = tabIndex === 0;
44
- const isLast = tabIndex === tabsCount - 1;
45
- const isHorizontal = orientation === "horizontal";
46
- let upIcon, downIcon, upLabel, downLabel;
47
- if (isHorizontal) {
48
- if (isRTL()) {
49
- upIcon = chevronRight;
50
- downIcon = chevronLeft;
51
- upLabel = __("Move tab right");
52
- downLabel = __("Move tab left");
53
- } else {
54
- upIcon = chevronLeft;
55
- downIcon = chevronRight;
56
- upLabel = __("Move tab left");
57
- downLabel = __("Move tab right");
58
- }
59
- } else {
60
- upIcon = chevronUp;
61
- downIcon = chevronDown;
62
- upLabel = __("Move tab up");
63
- downLabel = __("Move tab down");
64
- }
65
- const handleMoveUp = () => {
66
- moveBlocksUp([tabClientId], tabPanelClientId);
67
- if (tabsClientId) {
68
- __unstableMarkNextChangeAsNotPersistent();
69
- updateBlockAttributes(tabsClientId, {
70
- editorActiveTabIndex: tabIndex - 1
71
- });
72
- }
73
- };
74
- const handleMoveDown = () => {
75
- moveBlocksDown([tabClientId], tabPanelClientId);
76
- if (tabsClientId) {
77
- __unstableMarkNextChangeAsNotPersistent();
78
- updateBlockAttributes(tabsClientId, {
79
- editorActiveTabIndex: tabIndex + 1
80
- });
81
- }
82
- };
83
- if (tabsCount <= 1) {
84
- return null;
85
- }
86
- return /* @__PURE__ */ jsx(BlockControls, { group: "parent", children: /* @__PURE__ */ jsx(
87
- ToolbarGroup,
88
- {
89
- className: clsx("block-editor-block-mover", {
90
- "is-horizontal": isHorizontal
91
- }),
92
- children: /* @__PURE__ */ jsxs("div", { className: "block-editor-block-mover__move-button-container", children: [
93
- /* @__PURE__ */ jsx(ToolbarItem, { children: (itemProps) => /* @__PURE__ */ jsx(
94
- Button,
95
- {
96
- className: clsx(
97
- "block-editor-block-mover-button",
98
- "is-up-button"
99
- ),
100
- icon: upIcon,
101
- label: upLabel,
102
- disabled: isFirst,
103
- accessibleWhenDisabled: true,
104
- onClick: handleMoveUp,
105
- __next40pxDefaultSize: true,
106
- ...itemProps
107
- }
108
- ) }),
109
- /* @__PURE__ */ jsx(ToolbarItem, { children: (itemProps) => /* @__PURE__ */ jsx(
110
- Button,
111
- {
112
- className: clsx(
113
- "block-editor-block-mover-button",
114
- "is-down-button"
115
- ),
116
- icon: downIcon,
117
- label: downLabel,
118
- disabled: isLast,
119
- accessibleWhenDisabled: true,
120
- onClick: handleMoveDown,
121
- __next40pxDefaultSize: true,
122
- ...itemProps
123
- }
124
- ) })
125
- ] })
126
- }
127
- ) });
128
- }
129
- function Controls({
130
- tabsClientId,
131
- tabClientId,
132
- tabIndex,
133
- tabsCount,
134
- tabsMenuClientId
135
- }) {
136
- return /* @__PURE__ */ jsxs(Fragment, { children: [
137
- /* @__PURE__ */ jsx(
138
- TabBlockMover,
139
- {
140
- tabClientId,
141
- tabIndex,
142
- tabsCount,
143
- tabsMenuClientId,
144
- tabsClientId
145
- }
146
- ),
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function Controls({ tabsClientId }) {
7
+ return /* @__PURE__ */ jsxs(BlockControls, { children: [
147
8
  /* @__PURE__ */ jsx(AddTabToolbarControl, { tabsClientId }),
148
9
  /* @__PURE__ */ jsx(RemoveTabToolbarControl, { tabsClientId })
149
10
  ] });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs-menu-item/controls.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { ToolbarGroup, ToolbarItem, Button } from '@wordpress/components';\nimport {\n\tchevronLeft,\n\tchevronRight,\n\tchevronUp,\n\tchevronDown,\n} from '@wordpress/icons';\nimport { useDispatch, 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 TabBlockMover( {\n\ttabClientId,\n\ttabIndex,\n\ttabsCount,\n\ttabsMenuClientId,\n\ttabsClientId,\n} ) {\n\tconst {\n\t\tmoveBlocksUp,\n\t\tmoveBlocksDown,\n\t\tupdateBlockAttributes,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst { tabPanelClientId, orientation } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\t// Get orientation directly from the tabs-menu block's layout attribute.\n\t\t\t// This is more reliable than getBlockListSettings which is set asynchronously.\n\t\t\tconst tabsMenuAttributes = tabsMenuClientId\n\t\t\t\t? getBlockAttributes( tabsMenuClientId )\n\t\t\t\t: null;\n\t\t\treturn {\n\t\t\t\ttabPanelClientId: getBlockRootClientId( tabClientId ),\n\t\t\t\torientation:\n\t\t\t\t\ttabsMenuAttributes?.layout?.orientation || 'horizontal',\n\t\t\t};\n\t\t},\n\t\t[ tabClientId, tabsMenuClientId ]\n\t);\n\n\tconst isFirst = tabIndex === 0;\n\tconst isLast = tabIndex === tabsCount - 1;\n\tconst isHorizontal = orientation === 'horizontal';\n\n\t// Icons and labels based on orientation (respects RTL for horizontal)\n\tlet upIcon, downIcon, upLabel, downLabel;\n\tif ( isHorizontal ) {\n\t\tif ( isRTL() ) {\n\t\t\tupIcon = chevronRight;\n\t\t\tdownIcon = chevronLeft;\n\t\t\tupLabel = __( 'Move tab right' );\n\t\t\tdownLabel = __( 'Move tab left' );\n\t\t} else {\n\t\t\tupIcon = chevronLeft;\n\t\t\tdownIcon = chevronRight;\n\t\t\tupLabel = __( 'Move tab left' );\n\t\t\tdownLabel = __( 'Move tab right' );\n\t\t}\n\t} else {\n\t\tupIcon = chevronUp;\n\t\tdownIcon = chevronDown;\n\t\tupLabel = __( 'Move tab up' );\n\t\tdownLabel = __( 'Move tab down' );\n\t}\n\n\t// Handle moving tab and updating active index to follow the moved tab\n\tconst handleMoveUp = () => {\n\t\tmoveBlocksUp( [ tabClientId ], tabPanelClientId );\n\t\t// Update editorActiveTabIndex to follow the moved tab\n\t\tif ( tabsClientId ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\teditorActiveTabIndex: tabIndex - 1,\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst handleMoveDown = () => {\n\t\tmoveBlocksDown( [ tabClientId ], tabPanelClientId );\n\t\t// Update editorActiveTabIndex to follow the moved tab\n\t\tif ( tabsClientId ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\teditorActiveTabIndex: tabIndex + 1,\n\t\t\t} );\n\t\t}\n\t};\n\n\t// Don't render if only one tab\n\tif ( tabsCount <= 1 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"parent\">\n\t\t\t<ToolbarGroup\n\t\t\t\tclassName={ clsx( 'block-editor-block-mover', {\n\t\t\t\t\t'is-horizontal': isHorizontal,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t<div className=\"block-editor-block-mover__move-button-container\">\n\t\t\t\t\t<ToolbarItem>\n\t\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t'block-editor-block-mover-button',\n\t\t\t\t\t\t\t\t\t'is-up-button'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\ticon={ upIcon }\n\t\t\t\t\t\t\t\tlabel={ upLabel }\n\t\t\t\t\t\t\t\tdisabled={ isFirst }\n\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\tonClick={ handleMoveUp }\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</ToolbarItem>\n\t\t\t\t\t<ToolbarItem>\n\t\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t'block-editor-block-mover-button',\n\t\t\t\t\t\t\t\t\t'is-down-button'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\ticon={ downIcon }\n\t\t\t\t\t\t\t\tlabel={ downLabel }\n\t\t\t\t\t\t\t\tdisabled={ isLast }\n\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\tonClick={ handleMoveDown }\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</ToolbarItem>\n\t\t\t\t</div>\n\t\t\t</ToolbarGroup>\n\t\t</BlockControls>\n\t);\n}\n\nexport default function Controls( {\n\ttabsClientId,\n\ttabClientId,\n\ttabIndex,\n\ttabsCount,\n\ttabsMenuClientId,\n} ) {\n\treturn (\n\t\t<>\n\t\t\t<TabBlockMover\n\t\t\t\ttabClientId={ tabClientId }\n\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\ttabsCount={ tabsCount }\n\t\t\t\ttabsMenuClientId={ tabsMenuClientId }\n\t\t\t\ttabsClientId={ tabsClientId }\n\t\t\t/>\n\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t</>\n\t);\n}\n"],
5
- "mappings": ";AAGA,OAAO,UAAU;AAKjB,SAAS,IAAI,aAAa;AAC1B;AAAA,EACC;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,cAAc,aAAa,cAAc;AAClD;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,aAAa,iBAAiB;AAKvC,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AA8FhC,SAiDF,UA9CK,KAHH;AA5FJ,SAAS,cAAe;AAAA,EACvB;AAAA,EACA;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,EAAE,kBAAkB,YAAY,IAAI;AAAA,IACzC,CAAE,WAAY;AACb,YAAM,EAAE,sBAAsB,mBAAmB,IAChD,OAAQ,gBAAiB;AAG1B,YAAM,qBAAqB,mBACxB,mBAAoB,gBAAiB,IACrC;AACH,aAAO;AAAA,QACN,kBAAkB,qBAAsB,WAAY;AAAA,QACpD,aACC,oBAAoB,QAAQ,eAAe;AAAA,MAC7C;AAAA,IACD;AAAA,IACA,CAAE,aAAa,gBAAiB;AAAA,EACjC;AAEA,QAAM,UAAU,aAAa;AAC7B,QAAM,SAAS,aAAa,YAAY;AACxC,QAAM,eAAe,gBAAgB;AAGrC,MAAI,QAAQ,UAAU,SAAS;AAC/B,MAAK,cAAe;AACnB,QAAK,MAAM,GAAI;AACd,eAAS;AACT,iBAAW;AACX,gBAAU,GAAI,gBAAiB;AAC/B,kBAAY,GAAI,eAAgB;AAAA,IACjC,OAAO;AACN,eAAS;AACT,iBAAW;AACX,gBAAU,GAAI,eAAgB;AAC9B,kBAAY,GAAI,gBAAiB;AAAA,IAClC;AAAA,EACD,OAAO;AACN,aAAS;AACT,eAAW;AACX,cAAU,GAAI,aAAc;AAC5B,gBAAY,GAAI,eAAgB;AAAA,EACjC;AAGA,QAAM,eAAe,MAAM;AAC1B,iBAAc,CAAE,WAAY,GAAG,gBAAiB;AAEhD,QAAK,cAAe;AACnB,8CAAwC;AACxC,4BAAuB,cAAc;AAAA,QACpC,sBAAsB,WAAW;AAAA,MAClC,CAAE;AAAA,IACH;AAAA,EACD;AAEA,QAAM,iBAAiB,MAAM;AAC5B,mBAAgB,CAAE,WAAY,GAAG,gBAAiB;AAElD,QAAK,cAAe;AACnB,8CAAwC;AACxC,4BAAuB,cAAc;AAAA,QACpC,sBAAsB,WAAW;AAAA,MAClC,CAAE;AAAA,IACH;AAAA,EACD;AAGA,MAAK,aAAa,GAAI;AACrB,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,iBAAc,OAAM,UACpB;AAAA,IAAC;AAAA;AAAA,MACA,WAAY,KAAM,4BAA4B;AAAA,QAC7C,iBAAiB;AAAA,MAClB,CAAE;AAAA,MAEF,+BAAC,SAAI,WAAU,mDACd;AAAA,4BAAC,eACE,WAAE,cACH;AAAA,UAAC;AAAA;AAAA,YACA,WAAY;AAAA,cACX;AAAA,cACA;AAAA,YACD;AAAA,YACA,MAAO;AAAA,YACP,OAAQ;AAAA,YACR,UAAW;AAAA,YACX,wBAAsB;AAAA,YACtB,SAAU;AAAA,YACV,uBAAqB;AAAA,YACnB,GAAG;AAAA;AAAA,QACN,GAEF;AAAA,QACA,oBAAC,eACE,WAAE,cACH;AAAA,UAAC;AAAA;AAAA,YACA,WAAY;AAAA,cACX;AAAA,cACA;AAAA,YACD;AAAA,YACA,MAAO;AAAA,YACP,OAAQ;AAAA,YACR,UAAW;AAAA,YACX,wBAAsB;AAAA,YACtB,SAAU;AAAA,YACV,uBAAqB;AAAA,YACnB,GAAG;AAAA;AAAA,QACN,GAEF;AAAA,SACD;AAAA;AAAA,EACD,GACD;AAEF;AAEe,SAAR,SAA2B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,SACC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACD;AAAA,IACA,oBAAC,wBAAqB,cAA8B;AAAA,IACpD,oBAAC,2BAAwB,cAA8B;AAAA,KACxD;AAEF;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { BlockControls } from '@wordpress/block-editor';\n\n/**\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( { tabsClientId } ) {\n\treturn (\n\t\t<BlockControls>\n\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t</BlockControls>\n\t);\n}\n"],
5
+ "mappings": ";AAGA,SAAS,qBAAqB;AAK9B,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AAIlC,SACC,KADD;AAFa,SAAR,SAA2B,EAAE,aAAa,GAAI;AACpD,SACC,qBAAC,iBACA;AAAA,wBAAC,wBAAqB,cAA8B;AAAA,IACpD,oBAAC,2BAAwB,cAA8B;AAAA,KACxD;AAEF;",
6
6
  "names": []
7
7
  }
@@ -7,113 +7,100 @@ import {
7
7
  RichText
8
8
  } from "@wordpress/block-editor";
9
9
  import { useSelect, useDispatch } from "@wordpress/data";
10
- import { useCallback, useMemo } from "@wordpress/element";
11
- import slugFromLabel from "../tab/slug-from-label.mjs";
10
+ import { useMemo, useCallback } from "@wordpress/element";
12
11
  import Controls from "./controls.mjs";
13
12
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
+ var EMPTY_ARRAY = [];
14
14
  function Edit({
15
+ attributes,
15
16
  context,
16
17
  clientId,
17
18
  __unstableLayoutClassNames: layoutClassNames
18
19
  }) {
19
- const tabIndex = context["core/tabs-menu-item-index"] ?? 0;
20
- const tabId = context["core/tabs-menu-item-id"] ?? "";
21
- const tabLabel = context["core/tabs-menu-item-label"] ?? "";
22
- const tabClientId = context["core/tabs-menu-item-clientId"] ?? "";
23
- const contextTabsList = context["core/tabs-list"];
24
- const tabsList = useMemo(
25
- () => contextTabsList || [],
26
- [contextTabsList]
27
- );
20
+ const tabsList = context["core/tabs-list"] || EMPTY_ARRAY;
28
21
  const activeTabIndex = context["core/tabs-activeTabIndex"] ?? 0;
29
22
  const editorActiveTabIndex = context["core/tabs-editorActiveTabIndex"];
30
23
  const effectiveActiveIndex = useMemo(() => {
31
24
  return editorActiveTabIndex ?? activeTabIndex;
32
25
  }, [editorActiveTabIndex, activeTabIndex]);
33
- const isActiveTab = tabIndex === effectiveActiveIndex;
34
- const { __unstableMarkNextChangeAsNotPersistent } = useDispatch(blockEditorStore);
35
- const { tabsClientId, tabsMenuClientId, selectedTabClientId } = useSelect(
26
+ const { menuItemIndex, tabsClientId, selectedTabClientId } = useSelect(
36
27
  (select) => {
37
28
  const {
29
+ getBlockOrder,
38
30
  getBlockRootClientId,
39
31
  getSelectedBlockClientIds,
40
32
  hasSelectedInnerBlock
41
33
  } = select(blockEditorStore);
42
34
  const _tabsMenuClientId = getBlockRootClientId(clientId);
43
35
  const _tabsClientId = _tabsMenuClientId ? getBlockRootClientId(_tabsMenuClientId) : null;
36
+ const siblings = getBlockOrder(_tabsMenuClientId);
37
+ const _menuItemIndex = siblings.indexOf(clientId);
44
38
  const selectedIds = getSelectedBlockClientIds();
45
- let selectedTab = null;
46
- for (const tab of tabsList) {
47
- if (selectedIds.includes(tab.clientId) || hasSelectedInnerBlock(tab.clientId, true)) {
48
- selectedTab = tab.clientId;
39
+ let _selectedTabClientId = null;
40
+ for (const tab2 of tabsList) {
41
+ if (selectedIds.includes(tab2.clientId) || hasSelectedInnerBlock(tab2.clientId, true)) {
42
+ _selectedTabClientId = tab2.clientId;
49
43
  break;
50
44
  }
51
45
  }
52
46
  return {
47
+ menuItemIndex: _menuItemIndex,
53
48
  tabsClientId: _tabsClientId,
54
- tabsMenuClientId: _tabsMenuClientId,
55
- selectedTabClientId: selectedTab
49
+ selectedTabClientId: _selectedTabClientId
56
50
  };
57
51
  },
58
52
  [clientId, tabsList]
59
53
  );
60
- const isSelectedTab = tabClientId === selectedTabClientId;
61
- const { updateBlockAttributes } = useDispatch(blockEditorStore);
62
- const handleLabelChange = useCallback(
63
- (newLabel) => {
64
- if (tabClientId) {
65
- updateBlockAttributes(tabClientId, {
66
- label: newLabel,
67
- anchor: slugFromLabel(newLabel, tabIndex)
68
- });
69
- }
70
- },
71
- [updateBlockAttributes, tabClientId, tabIndex]
72
- );
54
+ const tabAnchor = attributes.anchor?.replace(/-button$/, "") ?? "";
55
+ const tab = tabAnchor && tabsList.find((t) => t.id === tabAnchor) || tabsList[menuItemIndex] || {};
56
+ const tabListIndex = tab.index ?? menuItemIndex;
57
+ const tabId = tab.id || `tab-${menuItemIndex}`;
58
+ const tabClientId = tab.clientId || "";
59
+ const label = tab.label || "";
60
+ const isActive = tabListIndex === effectiveActiveIndex;
61
+ const isSelected = tabClientId === selectedTabClientId;
62
+ const { __unstableMarkNextChangeAsNotPersistent, updateBlockAttributes } = useDispatch(blockEditorStore);
73
63
  const handleTabClick = useCallback(
74
64
  (event) => {
75
65
  event.preventDefault();
76
- if (tabsClientId && tabIndex !== effectiveActiveIndex) {
66
+ if (tabsClientId && tabListIndex !== effectiveActiveIndex) {
77
67
  __unstableMarkNextChangeAsNotPersistent();
78
68
  updateBlockAttributes(tabsClientId, {
79
- editorActiveTabIndex: tabIndex
69
+ editorActiveTabIndex: tabListIndex
80
70
  });
81
71
  }
82
72
  },
83
73
  [
84
74
  tabsClientId,
85
- tabIndex,
75
+ tabListIndex,
86
76
  effectiveActiveIndex,
87
77
  updateBlockAttributes,
88
78
  __unstableMarkNextChangeAsNotPersistent
89
79
  ]
90
80
  );
91
- const tabPanelId = tabId || `tab-${tabIndex}`;
92
- const tabLabelId = `${tabPanelId}--tab`;
81
+ const handleLabelChange = useCallback(
82
+ (newLabel) => {
83
+ if (tabClientId) {
84
+ updateBlockAttributes(tabClientId, { label: newLabel });
85
+ }
86
+ },
87
+ [tabClientId, updateBlockAttributes]
88
+ );
93
89
  const blockProps = useBlockProps({
94
90
  className: clsx(layoutClassNames, {
95
- "is-active": isActiveTab,
96
- "is-selected": isSelectedTab
91
+ "is-active": isActive,
92
+ "is-selected": isSelected
97
93
  }),
98
- "aria-controls": tabPanelId,
99
- "aria-selected": isActiveTab,
100
- id: tabLabelId,
94
+ "aria-controls": tabId,
95
+ "aria-selected": isActive,
96
+ id: `${tabId}--tab`,
101
97
  role: "tab",
102
98
  tabIndex: -1,
103
99
  onClick: handleTabClick
104
100
  });
105
101
  return /* @__PURE__ */ jsxs(Fragment, { children: [
106
- /* @__PURE__ */ jsx(
107
- Controls,
108
- {
109
- tabsClientId,
110
- tabClientId,
111
- tabIndex,
112
- tabsCount: tabsList.length,
113
- tabsMenuClientId
114
- }
115
- ),
116
- /* @__PURE__ */ jsx("div", { ...blockProps, children: /* @__PURE__ */ jsx(
102
+ /* @__PURE__ */ jsx(Controls, { tabsClientId }),
103
+ /* @__PURE__ */ jsx("button", { ...blockProps, type: "button", children: /* @__PURE__ */ jsx(
117
104
  RichText,
118
105
  {
119
106
  tagName: "span",
@@ -121,15 +108,16 @@ function Edit({
121
108
  placeholder: sprintf(
122
109
  /* translators: %d is the tab index + 1 */
123
110
  __("Tab title %d"),
124
- tabIndex + 1
111
+ menuItemIndex + 1
125
112
  ),
126
- value: tabLabel || "",
113
+ value: label,
127
114
  onChange: handleLabelChange
128
115
  }
129
116
  ) })
130
117
  ] });
131
118
  }
119
+ var edit_default = Edit;
132
120
  export {
133
- Edit as default
121
+ edit_default as default
134
122
  };
135
123
  //# sourceMappingURL=edit.mjs.map