@wordpress/block-library 9.44.1-next.v.202604201441.0 → 9.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/accordion/edit.cjs +0 -2
  3. package/build/accordion/edit.cjs.map +2 -2
  4. package/build/accordion-item/block.json +1 -0
  5. package/build/categories/edit.cjs +5 -1
  6. package/build/categories/edit.cjs.map +2 -2
  7. package/build/embed/edit.cjs +38 -34
  8. package/build/embed/edit.cjs.map +3 -3
  9. package/build/embed/transforms.cjs +3 -1
  10. package/build/embed/transforms.cjs.map +2 -2
  11. package/build/embed/util.cjs +13 -2
  12. package/build/embed/util.cjs.map +2 -2
  13. package/build/form/block.json +1 -1
  14. package/build/form-input/block.json +1 -1
  15. package/build/form-submission-notification/block.json +1 -1
  16. package/build/form-submit-button/block.json +1 -1
  17. package/build/image/edit.cjs +1 -1
  18. package/build/image/edit.cjs.map +2 -2
  19. package/build/image/image.cjs +29 -10
  20. package/build/image/image.cjs.map +3 -3
  21. package/build/index.cjs +4 -4
  22. package/build/index.cjs.map +2 -2
  23. package/build/math/edit.cjs +2 -2
  24. package/build/math/edit.cjs.map +2 -2
  25. package/build/navigation/edit/accessible-description.cjs +2 -2
  26. package/build/navigation/edit/accessible-description.cjs.map +2 -2
  27. package/build/navigation/edit/overlay-template-part-selector.cjs.map +2 -2
  28. package/build/navigation-link/edit.cjs +2 -1
  29. package/build/navigation-link/edit.cjs.map +2 -2
  30. package/build/navigation-link/link-ui/dialog-wrapper.cjs +2 -1
  31. package/build/navigation-link/link-ui/dialog-wrapper.cjs.map +2 -2
  32. package/build/navigation-link/link-ui/index.cjs +2 -1
  33. package/build/navigation-link/link-ui/index.cjs.map +2 -2
  34. package/build/post-author/edit.cjs.map +3 -3
  35. package/build/post-comments-form/edit.cjs +2 -2
  36. package/build/post-comments-form/edit.cjs.map +2 -2
  37. package/build/query/edit/inspector-controls/author-control.cjs +1 -1
  38. package/build/query/edit/inspector-controls/author-control.cjs.map +2 -2
  39. package/build/query/edit/inspector-controls/format-controls.cjs +1 -1
  40. package/build/query/edit/inspector-controls/format-controls.cjs.map +2 -2
  41. package/build/query/edit/inspector-controls/parent-control.cjs +1 -1
  42. package/build/query/edit/inspector-controls/parent-control.cjs.map +2 -2
  43. package/build/query/edit/inspector-controls/taxonomy-controls.cjs +1 -1
  44. package/build/query/edit/inspector-controls/taxonomy-controls.cjs.map +2 -2
  45. package/build/site-logo/edit.cjs +32 -18
  46. package/build/site-logo/edit.cjs.map +2 -2
  47. package/build/tab/block.json +23 -23
  48. package/build/tab/controls.cjs +5 -48
  49. package/build/tab/controls.cjs.map +3 -3
  50. package/build/tab/edit.cjs +77 -75
  51. package/build/tab/edit.cjs.map +3 -3
  52. package/build/tab/save.cjs +3 -3
  53. package/build/tab/save.cjs.map +2 -2
  54. package/{src/tabs-menu → build/tab-list}/block.json +3 -3
  55. package/build/{tabs-menu → tab-list}/edit.cjs +4 -4
  56. package/build/tab-list/edit.cjs.map +7 -0
  57. package/build/{tabs-menu → tab-list}/index.cjs +5 -5
  58. package/build/tab-list/index.cjs.map +7 -0
  59. package/build/{tabs-menu → tab-list}/save.cjs +1 -1
  60. package/build/{tabs-menu → tab-list}/save.cjs.map +1 -1
  61. package/build/{tab → tab-panel}/add-tab-toolbar-control.cjs +16 -16
  62. package/build/tab-panel/add-tab-toolbar-control.cjs.map +7 -0
  63. package/build/tab-panel/block.json +27 -37
  64. package/build/tab-panel/controls.cjs +89 -0
  65. package/build/tab-panel/controls.cjs.map +7 -0
  66. package/build/tab-panel/edit.cjs +90 -17
  67. package/build/tab-panel/edit.cjs.map +3 -3
  68. package/build/tab-panel/index.cjs +1 -1
  69. package/build/tab-panel/index.cjs.map +1 -1
  70. package/build/{tab → tab-panel}/init.cjs +1 -1
  71. package/build/{tab → tab-panel}/init.cjs.map +1 -1
  72. package/build/{tab → tab-panel}/remove-tab-toolbar-control.cjs +16 -16
  73. package/build/tab-panel/remove-tab-toolbar-control.cjs.map +7 -0
  74. package/build/tab-panel/save.cjs +4 -2
  75. package/build/tab-panel/save.cjs.map +2 -2
  76. package/build/tab-panels/block.json +66 -0
  77. package/build/{tabs-menu-item/controls.cjs → tab-panels/edit.cjs} +25 -11
  78. package/build/tab-panels/edit.cjs.map +7 -0
  79. package/build/{tabs-menu-item → tab-panels}/index.cjs +5 -5
  80. package/build/{tabs-menu → tab-panels}/index.cjs.map +2 -2
  81. package/build/{tabs-menu-item → tab-panels}/save.cjs +4 -6
  82. package/build/tab-panels/save.cjs.map +7 -0
  83. package/build/tabs/block.json +1 -1
  84. package/build/tabs/controls.cjs +2 -2
  85. package/build/tabs/controls.cjs.map +1 -1
  86. package/build/tabs/edit.cjs +24 -19
  87. package/build/tabs/edit.cjs.map +3 -3
  88. package/build/tabs/index.cjs +5 -5
  89. package/build/tabs/index.cjs.map +1 -1
  90. package/build/tabs/{use-tab-menu-sync.cjs → use-tab-list-sync.cjs} +78 -80
  91. package/build/tabs/use-tab-list-sync.cjs.map +7 -0
  92. package/build/terms-query/edit/inspector-controls/include-control.cjs +1 -1
  93. package/build/terms-query/edit/inspector-controls/include-control.cjs.map +2 -2
  94. package/build/video/tracks-editor.cjs +2 -2
  95. package/build/video/tracks-editor.cjs.map +2 -2
  96. package/build-module/accordion/edit.mjs +0 -2
  97. package/build-module/accordion/edit.mjs.map +2 -2
  98. package/build-module/accordion-item/block.json +1 -0
  99. package/build-module/categories/edit.mjs +5 -2
  100. package/build-module/categories/edit.mjs.map +2 -2
  101. package/build-module/embed/edit.mjs +45 -36
  102. package/build-module/embed/edit.mjs.map +2 -2
  103. package/build-module/embed/transforms.mjs +8 -2
  104. package/build-module/embed/transforms.mjs.map +2 -2
  105. package/build-module/embed/util.mjs +11 -1
  106. package/build-module/embed/util.mjs.map +2 -2
  107. package/build-module/form/block.json +1 -1
  108. package/build-module/form-input/block.json +1 -1
  109. package/build-module/form-submission-notification/block.json +1 -1
  110. package/build-module/form-submit-button/block.json +1 -1
  111. package/build-module/image/edit.mjs +1 -1
  112. package/build-module/image/edit.mjs.map +2 -2
  113. package/build-module/image/image.mjs +29 -10
  114. package/build-module/image/image.mjs.map +3 -3
  115. package/build-module/index.mjs +4 -4
  116. package/build-module/index.mjs.map +2 -2
  117. package/build-module/math/edit.mjs +2 -2
  118. package/build-module/math/edit.mjs.map +2 -2
  119. package/build-module/navigation/edit/accessible-description.mjs +1 -1
  120. package/build-module/navigation/edit/accessible-description.mjs.map +1 -1
  121. package/build-module/navigation/edit/overlay-template-part-selector.mjs +2 -2
  122. package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +1 -1
  123. package/build-module/navigation-link/edit.mjs +2 -5
  124. package/build-module/navigation-link/edit.mjs.map +2 -2
  125. package/build-module/navigation-link/link-ui/dialog-wrapper.mjs +2 -1
  126. package/build-module/navigation-link/link-ui/dialog-wrapper.mjs.map +2 -2
  127. package/build-module/navigation-link/link-ui/index.mjs +1 -1
  128. package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
  129. package/build-module/post-author/edit.mjs +2 -2
  130. package/build-module/post-author/edit.mjs.map +2 -2
  131. package/build-module/post-comments-form/edit.mjs +1 -1
  132. package/build-module/post-comments-form/edit.mjs.map +2 -2
  133. package/build-module/query/edit/inspector-controls/author-control.mjs +1 -1
  134. package/build-module/query/edit/inspector-controls/author-control.mjs.map +2 -2
  135. package/build-module/query/edit/inspector-controls/format-controls.mjs +1 -1
  136. package/build-module/query/edit/inspector-controls/format-controls.mjs.map +2 -2
  137. package/build-module/query/edit/inspector-controls/parent-control.mjs +1 -1
  138. package/build-module/query/edit/inspector-controls/parent-control.mjs.map +2 -2
  139. package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs +1 -1
  140. package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs.map +2 -2
  141. package/build-module/site-logo/edit.mjs +32 -18
  142. package/build-module/site-logo/edit.mjs.map +2 -2
  143. package/build-module/tab/block.json +23 -23
  144. package/build-module/tab/controls.mjs +7 -57
  145. package/build-module/tab/controls.mjs.map +2 -2
  146. package/build-module/tab/edit.mjs +81 -79
  147. package/build-module/tab/edit.mjs.map +3 -3
  148. package/build-module/tab/save.mjs +4 -4
  149. package/build-module/tab/save.mjs.map +2 -2
  150. package/build-module/{tabs-menu → tab-list}/block.json +3 -3
  151. package/build-module/{tabs-menu → tab-list}/edit.mjs +4 -4
  152. package/build-module/tab-list/edit.mjs.map +7 -0
  153. package/build-module/{tabs-menu → tab-list}/index.mjs +2 -2
  154. package/build-module/tab-list/index.mjs.map +7 -0
  155. package/build-module/{tabs-menu → tab-list}/save.mjs +1 -1
  156. package/build-module/{tabs-menu → tab-list}/save.mjs.map +1 -1
  157. package/build-module/{tab → tab-panel}/add-tab-toolbar-control.mjs +16 -16
  158. package/build-module/tab-panel/add-tab-toolbar-control.mjs.map +7 -0
  159. package/build-module/tab-panel/block.json +27 -37
  160. package/build-module/tab-panel/controls.mjs +65 -0
  161. package/build-module/tab-panel/controls.mjs.map +7 -0
  162. package/build-module/tab-panel/edit.mjs +92 -19
  163. package/build-module/tab-panel/edit.mjs.map +2 -2
  164. package/build-module/tab-panel/index.mjs +1 -1
  165. package/build-module/tab-panel/index.mjs.map +1 -1
  166. package/build-module/{tab → tab-panel}/init.mjs +1 -1
  167. package/build-module/{tab → tab-panel}/init.mjs.map +1 -1
  168. package/build-module/{tab → tab-panel}/remove-tab-toolbar-control.mjs +16 -16
  169. package/build-module/tab-panel/remove-tab-toolbar-control.mjs.map +7 -0
  170. package/build-module/tab-panel/save.mjs +4 -2
  171. package/build-module/tab-panel/save.mjs.map +2 -2
  172. package/build-module/tab-panels/block.json +66 -0
  173. package/build-module/tab-panels/edit.mjs +33 -0
  174. package/build-module/tab-panels/edit.mjs.map +7 -0
  175. package/build-module/{tabs-menu-item → tab-panels}/index.mjs +2 -2
  176. package/build-module/{tabs-menu → tab-panels}/index.mjs.map +2 -2
  177. package/build-module/tab-panels/save.mjs +12 -0
  178. package/build-module/tab-panels/save.mjs.map +7 -0
  179. package/build-module/tabs/block.json +1 -1
  180. package/build-module/tabs/controls.mjs +2 -2
  181. package/build-module/tabs/controls.mjs.map +1 -1
  182. package/build-module/tabs/edit.mjs +24 -19
  183. package/build-module/tabs/edit.mjs.map +2 -2
  184. package/build-module/tabs/index.mjs +5 -5
  185. package/build-module/tabs/index.mjs.map +1 -1
  186. package/build-module/tabs/use-tab-list-sync.mjs +169 -0
  187. package/build-module/tabs/use-tab-list-sync.mjs.map +7 -0
  188. package/build-module/terms-query/edit/inspector-controls/include-control.mjs +1 -1
  189. package/build-module/terms-query/edit/inspector-controls/include-control.mjs.map +2 -2
  190. package/build-module/video/tracks-editor.mjs +2 -2
  191. package/build-module/video/tracks-editor.mjs.map +2 -2
  192. package/build-style/classic-rtl.css +14 -0
  193. package/build-style/classic.css +14 -0
  194. package/build-style/editor-rtl.css +9 -5
  195. package/build-style/editor.css +9 -5
  196. package/build-style/style-rtl.css +40 -40
  197. package/build-style/style.css +40 -40
  198. package/build-style/tab/editor-rtl.css +11 -0
  199. package/build-style/tab/editor.css +11 -0
  200. package/build-style/tab/style-rtl.css +29 -16
  201. package/build-style/tab/style.css +29 -16
  202. package/build-style/tab-list/editor-rtl.css +6 -0
  203. package/build-style/tab-list/editor.css +6 -0
  204. package/build-style/tab-panel/style-rtl.css +17 -1
  205. package/build-style/tab-panel/style.css +17 -1
  206. package/build-style/tab-panels/style-rtl.css +4 -0
  207. package/build-style/tab-panels/style.css +4 -0
  208. package/build-style/video/editor-rtl.css +4 -0
  209. package/build-style/video/editor.css +4 -0
  210. package/package.json +39 -38
  211. package/src/accordion/edit.js +0 -2
  212. package/src/accordion-item/block.json +1 -0
  213. package/src/categories/edit.js +3 -2
  214. package/src/classic.scss +25 -0
  215. package/src/editor.scss +2 -2
  216. package/src/embed/edit.js +61 -52
  217. package/src/embed/edit.native.js +71 -57
  218. package/src/embed/transforms.js +8 -2
  219. package/src/embed/util.js +17 -0
  220. package/src/form/block.json +1 -1
  221. package/src/form-input/block.json +1 -1
  222. package/src/form-submission-notification/block.json +1 -1
  223. package/src/form-submit-button/block.json +1 -1
  224. package/src/image/edit.js +5 -1
  225. package/src/image/edit.native.js +3 -3
  226. package/src/image/image.js +30 -5
  227. package/src/index.js +4 -4
  228. package/src/math/edit.js +3 -3
  229. package/src/navigation/edit/accessible-description.js +1 -1
  230. package/src/navigation/edit/overlay-template-part-selector.js +3 -3
  231. package/src/navigation-link/edit.js +2 -5
  232. package/src/navigation-link/link-ui/dialog-wrapper.js +2 -1
  233. package/src/navigation-link/link-ui/index.js +1 -1
  234. package/src/post-author/edit.js +3 -5
  235. package/src/post-comments-form/edit.js +1 -1
  236. package/src/query/edit/inspector-controls/author-control.js +1 -1
  237. package/src/query/edit/inspector-controls/format-controls.js +1 -1
  238. package/src/query/edit/inspector-controls/parent-control.js +1 -1
  239. package/src/query/edit/inspector-controls/taxonomy-controls.js +1 -1
  240. package/src/site-logo/edit.js +38 -18
  241. package/src/style.scss +1 -1
  242. package/src/tab/block.json +23 -23
  243. package/src/tab/controls.js +6 -52
  244. package/src/tab/edit.js +99 -103
  245. package/src/{tabs-menu-item → tab}/editor.scss +3 -3
  246. package/src/tab/index.php +32 -51
  247. package/src/tab/save.js +4 -4
  248. package/src/tab/style.scss +34 -17
  249. package/{build/tabs-menu → src/tab-list}/block.json +3 -3
  250. package/src/{tabs-menu → tab-list}/edit.js +3 -3
  251. package/src/{tabs-menu → tab-list}/editor.scss +2 -2
  252. package/src/{tabs-menu → tab-list}/index.js +1 -1
  253. package/src/tab-list/index.php +80 -0
  254. package/src/{tab → tab-panel}/add-tab-toolbar-control.js +19 -19
  255. package/src/tab-panel/block.json +27 -37
  256. package/src/tab-panel/controls.js +65 -0
  257. package/src/tab-panel/edit.js +123 -20
  258. package/src/tab-panel/index.js +1 -1
  259. package/src/tab-panel/index.php +88 -0
  260. package/src/{tab → tab-panel}/remove-tab-toolbar-control.js +20 -19
  261. package/src/tab-panel/save.js +4 -2
  262. package/src/tab-panel/style.scss +20 -1
  263. package/src/tab-panels/block.json +66 -0
  264. package/src/tab-panels/edit.js +42 -0
  265. package/src/{tabs-menu-item → tab-panels}/index.js +1 -1
  266. package/src/tab-panels/save.js +11 -0
  267. package/src/tab-panels/style.scss +4 -0
  268. package/src/tabs/block.json +1 -1
  269. package/src/tabs/controls.js +2 -2
  270. package/src/tabs/edit.js +25 -20
  271. package/src/tabs/index.js +5 -5
  272. package/src/tabs/index.php +5 -5
  273. package/src/tabs/use-tab-list-sync.js +237 -0
  274. package/src/terms-query/edit/inspector-controls/include-control.js +1 -1
  275. package/src/video/editor.scss +5 -0
  276. package/src/video/tracks-editor.js +2 -2
  277. package/build/tab/add-tab-toolbar-control.cjs.map +0 -7
  278. package/build/tab/remove-tab-toolbar-control.cjs.map +0 -7
  279. package/build/tabs/use-tab-menu-sync.cjs.map +0 -7
  280. package/build/tabs-menu/edit.cjs.map +0 -7
  281. package/build/tabs-menu-item/block.json +0 -56
  282. package/build/tabs-menu-item/controls.cjs.map +0 -7
  283. package/build/tabs-menu-item/edit.cjs +0 -135
  284. package/build/tabs-menu-item/edit.cjs.map +0 -7
  285. package/build/tabs-menu-item/index.cjs.map +0 -7
  286. package/build/tabs-menu-item/save.cjs.map +0 -7
  287. package/build-module/tab/add-tab-toolbar-control.mjs.map +0 -7
  288. package/build-module/tab/remove-tab-toolbar-control.mjs.map +0 -7
  289. package/build-module/tabs/use-tab-menu-sync.mjs +0 -171
  290. package/build-module/tabs/use-tab-menu-sync.mjs.map +0 -7
  291. package/build-module/tabs-menu/edit.mjs.map +0 -7
  292. package/build-module/tabs-menu-item/block.json +0 -56
  293. package/build-module/tabs-menu-item/controls.mjs +0 -15
  294. package/build-module/tabs-menu-item/controls.mjs.map +0 -7
  295. package/build-module/tabs-menu-item/edit.mjs +0 -108
  296. package/build-module/tabs-menu-item/edit.mjs.map +0 -7
  297. package/build-module/tabs-menu-item/index.mjs.map +0 -7
  298. package/build-module/tabs-menu-item/save.mjs +0 -14
  299. package/build-module/tabs-menu-item/save.mjs.map +0 -7
  300. package/build-style/tabs-menu/editor-rtl.css +0 -6
  301. package/build-style/tabs-menu/editor.css +0 -6
  302. package/build-style/tabs-menu-item/editor-rtl.css +0 -11
  303. package/build-style/tabs-menu-item/editor.css +0 -11
  304. package/build-style/tabs-menu-item/style-rtl.css +0 -33
  305. package/build-style/tabs-menu-item/style.css +0 -33
  306. package/src/tabs/use-tab-menu-sync.js +0 -239
  307. package/src/tabs-menu/index.php +0 -80
  308. package/src/tabs-menu-item/block.json +0 -56
  309. package/src/tabs-menu-item/controls.js +0 -19
  310. package/src/tabs-menu-item/edit.js +0 -141
  311. package/src/tabs-menu-item/index.php +0 -70
  312. package/src/tabs-menu-item/save.js +0 -13
  313. package/src/tabs-menu-item/style.scss +0 -40
  314. /package/src/{tabs-menu → tab-list}/save.js +0 -0
  315. /package/src/{tab → tab-panel}/init.js +0 -0
@@ -5,7 +5,6 @@ import { __unstableStripHTML as stripHTML, focus } from '@wordpress/dom';
5
5
  import {
6
6
  Popover,
7
7
  Button,
8
- VisuallyHidden,
9
8
  __experimentalVStack as VStack,
10
9
  } from '@wordpress/components';
11
10
  import { __ } from '@wordpress/i18n';
@@ -20,6 +19,7 @@ import {
20
19
  import { useResourcePermissions } from '@wordpress/core-data';
21
20
  import { plus } from '@wordpress/icons';
22
21
  import { useInstanceId } from '@wordpress/compose';
22
+ import { VisuallyHidden } from '@wordpress/ui';
23
23
  import { isURL } from '@wordpress/url';
24
24
 
25
25
  /**
@@ -20,7 +20,7 @@ import {
20
20
  ComboboxControl,
21
21
  SelectControl,
22
22
  ToggleControl,
23
- __experimentalText as Text,
23
+ __experimentalText as WCText,
24
24
  __experimentalVStack as VStack,
25
25
  __experimentalToolsPanel as ToolsPanel,
26
26
  __experimentalToolsPanelItem as ToolsPanelItem,
@@ -341,11 +341,11 @@ function PostAuthorEdit( {
341
341
  alignment="left"
342
342
  spacing={ 4 }
343
343
  >
344
- <Text as="p">
344
+ <WCText as="p">
345
345
  { __(
346
346
  'This block is no longer supported. Recreate its design with the Avatar, Author Name and Author Biography blocks.'
347
347
  ) }
348
- </Text>
348
+ </WCText>
349
349
  <Button
350
350
  variant="primary"
351
351
  onClick={ transformBlock }
@@ -356,7 +356,6 @@ function PostAuthorEdit( {
356
356
  </VStack>
357
357
  </InspectorControlsLastItem>
358
358
  ) }
359
-
360
359
  <BlockControls group="block">
361
360
  <AlignmentControl
362
361
  value={ textAlign }
@@ -365,7 +364,6 @@ function PostAuthorEdit( {
365
364
  } }
366
365
  />
367
366
  </BlockControls>
368
-
369
367
  <div { ...blockProps }>
370
368
  { showAvatar && (
371
369
  <div className="wp-block-post-author__avatar">
@@ -2,9 +2,9 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useBlockProps } from '@wordpress/block-editor';
5
- import { VisuallyHidden } from '@wordpress/components';
6
5
  import { useInstanceId } from '@wordpress/compose';
7
6
  import { __, sprintf } from '@wordpress/i18n';
7
+ import { VisuallyHidden } from '@wordpress/ui';
8
8
 
9
9
  /**
10
10
  * Internal dependencies
@@ -75,7 +75,7 @@ function AuthorControl( { value, onChange } ) {
75
75
  value={ sanitizedValue }
76
76
  suggestions={ authorsInfo.names }
77
77
  onChange={ onAuthorChange }
78
- __experimentalShowHowTo={ false }
78
+ help=""
79
79
  __next40pxDefaultSize
80
80
  />
81
81
  );
@@ -81,7 +81,7 @@ export default function FormatControls( { onChange, query: { format } } ) {
81
81
  format: formatNamesToValues( newValues, formats ),
82
82
  } );
83
83
  } }
84
- __experimentalShowHowTo={ false }
84
+ help=""
85
85
  __experimentalExpandOnFocus
86
86
  __next40pxDefaultSize
87
87
  />
@@ -138,7 +138,7 @@ function ParentControl( { parents, postType, onChange } ) {
138
138
  onInputChange={ debouncedSearch }
139
139
  suggestions={ suggestions }
140
140
  onChange={ onParentChange }
141
- __experimentalShowHowTo={ false }
141
+ help=""
142
142
  />
143
143
  );
144
144
  }
@@ -242,7 +242,7 @@ function TaxonomyItem( {
242
242
  suggestions={ suggestions }
243
243
  displayTransform={ decodeEntities }
244
244
  onChange={ onTermsChange }
245
- __experimentalShowHowTo={ false }
245
+ help=""
246
246
  __next40pxDefaultSize
247
247
  />
248
248
  </div>
@@ -51,7 +51,9 @@ import { unlock } from '../lock-unlock';
51
51
  import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
52
52
 
53
53
  const ALLOWED_MEDIA_TYPES = [ 'image' ];
54
- const { mediaEditKey } = unlock( blockEditorPrivateApis );
54
+ const { mediaEditKey, openMediaEditorModalKey } = unlock(
55
+ blockEditorPrivateApis
56
+ );
55
57
 
56
58
  const SiteLogo = ( {
57
59
  alt,
@@ -78,22 +80,26 @@ const SiteLogo = ( {
78
80
  const blockEditingMode = useBlockEditingMode();
79
81
  const isContentOnlyMode = blockEditingMode === 'contentOnly';
80
82
 
81
- const { imageEditing, maxWidth, title, editMediaEntity } = useSelect(
82
- ( select ) => {
83
- const settings = select( blockEditorStore ).getSettings();
84
- const siteEntities = select( coreStore ).getEntityRecord(
85
- 'root',
86
- '__unstableBase'
87
- );
88
- return {
89
- title: siteEntities?.name,
90
- imageEditing: settings.imageEditing,
91
- maxWidth: settings.maxWidth,
92
- editMediaEntity: settings?.[ mediaEditKey ],
93
- };
94
- },
95
- []
96
- );
83
+ const {
84
+ imageEditing,
85
+ maxWidth,
86
+ title,
87
+ editMediaEntity,
88
+ openMediaEditorModal,
89
+ } = useSelect( ( select ) => {
90
+ const settings = select( blockEditorStore ).getSettings();
91
+ const siteEntities = select( coreStore ).getEntityRecord(
92
+ 'root',
93
+ '__unstableBase'
94
+ );
95
+ return {
96
+ title: siteEntities?.name,
97
+ imageEditing: settings.imageEditing,
98
+ maxWidth: settings.maxWidth,
99
+ editMediaEntity: settings?.[ mediaEditKey ],
100
+ openMediaEditorModal: settings?.[ openMediaEditorModalKey ],
101
+ };
102
+ }, [] );
97
103
 
98
104
  useEffect( () => {
99
105
  // Turn the `Use as site icon` toggle off if it is on but the logo and icon have
@@ -110,6 +116,12 @@ const SiteLogo = ( {
110
116
  }
111
117
  }, [ isSelected ] );
112
118
 
119
+ const handleMediaUpdate = ( { id: newId } ) => {
120
+ if ( typeof newId === 'number' && newId !== logoId ) {
121
+ setLogo( newId );
122
+ }
123
+ };
124
+
113
125
  function onResizeStart() {
114
126
  toggleSelection( false );
115
127
  }
@@ -388,7 +400,15 @@ const SiteLogo = ( {
388
400
  shouldShowCropAndDimensions && (
389
401
  <BlockControls group="block">
390
402
  <ToolbarButton
391
- onClick={ () => setIsEditingImage( true ) }
403
+ onClick={
404
+ openMediaEditorModal && logoId
405
+ ? () =>
406
+ openMediaEditorModal( {
407
+ id: logoId,
408
+ onUpdate: handleMediaUpdate,
409
+ } )
410
+ : () => setIsEditingImage( true )
411
+ }
392
412
  icon={ crop }
393
413
  label={ __( 'Crop' ) }
394
414
  />
package/src/style.scss CHANGED
@@ -76,10 +76,10 @@
76
76
  @use "./tag-cloud/style.scss" as *;
77
77
  @use "./tab/style.scss" as *;
78
78
  @use "./tab-panel/style.scss" as *;
79
+ @use "./tab-panels/style.scss" as *;
79
80
  @use "./table/style.scss" as *;
80
81
  @use "./table-of-contents/style.scss" as *;
81
82
  @use "./tabs/style.scss" as *;
82
- @use "./tabs-menu-item/style.scss" as *;
83
83
  @use "./term-count/style.scss" as *;
84
84
  @use "./term-description/style.scss" as *;
85
85
  @use "./term-name/style.scss" as *;
@@ -4,25 +4,23 @@
4
4
  "apiVersion": 3,
5
5
  "name": "core/tab",
6
6
  "title": "Tab",
7
- "description": "Content for a tab in a tabbed interface.",
7
+ "description": "A single tab button in the tab list.",
8
8
  "category": "design",
9
9
  "textdomain": "default",
10
- "attributes": {
11
- "label": {
12
- "type": "string",
13
- "default": ""
14
- }
15
- },
16
- "parent": [ "core/tab-panel" ],
10
+ "parent": [ "core/tab-list" ],
17
11
  "usesContext": [
12
+ "core/tabs-list",
18
13
  "core/tabs-activeTabIndex",
19
14
  "core/tabs-editorActiveTabIndex",
20
- "core/tabs-id"
15
+ "core/tab-index",
16
+ "core/tab-id",
17
+ "core/tab-label"
21
18
  ],
22
19
  "supports": {
23
- "anchor": true,
24
20
  "html": false,
25
21
  "reusable": false,
22
+ "visibility": false,
23
+ "lock": false,
26
24
  "color": {
27
25
  "background": true,
28
26
  "text": true,
@@ -31,26 +29,28 @@
31
29
  "text": true
32
30
  }
33
31
  },
34
- "layout": true,
35
- "spacing": {
36
- "blockGap": true,
37
- "padding": true,
38
- "margin": false
39
- },
40
32
  "typography": {
41
33
  "fontSize": true,
42
34
  "__experimentalFontFamily": true,
35
+ "textAlign": true,
43
36
  "__experimentalDefaultControls": {
44
- "fontSize": true,
45
- "__experimentalFontFamily": true
37
+ "fontSize": true
46
38
  }
47
39
  },
48
- "renaming": true,
49
- "visibility": false
50
- },
51
- "providesContext": {
52
- "core/tab-label": "label"
40
+ "spacing": {
41
+ "padding": true,
42
+ "__experimentalDefaultControls": {
43
+ "padding": true
44
+ }
45
+ },
46
+ "__experimentalBorder": {
47
+ "radius": true,
48
+ "color": true,
49
+ "width": true,
50
+ "style": true
51
+ }
53
52
  },
54
53
  "editorScript": "file:./index.js",
54
+ "editorStyle": "file:./editor.css",
55
55
  "style": "file:./style-index.css"
56
56
  }
@@ -1,65 +1,19 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import {
5
- InspectorControls,
6
- store as blockEditorStore,
7
- } from '@wordpress/block-editor';
8
- import {
9
- CheckboxControl,
10
- __experimentalToolsPanel as ToolsPanel,
11
- __experimentalToolsPanelItem as ToolsPanelItem,
12
- } from '@wordpress/components';
13
- import { __ } from '@wordpress/i18n';
14
- import { useDispatch } from '@wordpress/data';
4
+ import { BlockControls } from '@wordpress/block-editor';
15
5
 
16
6
  /**
17
7
  * Internal dependencies
18
8
  */
19
- import AddTabToolbarControl from './add-tab-toolbar-control';
20
- import RemoveTabToolbarControl from './remove-tab-toolbar-control';
21
- import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
22
-
23
- export default function Controls( { tabsClientId, blockIndex, isDefaultTab } ) {
24
- const { updateBlockAttributes } = useDispatch( blockEditorStore );
25
- const dropdownMenuProps = useToolsPanelDropdownMenuProps();
9
+ import AddTabToolbarControl from '../tab-panel/add-tab-toolbar-control';
10
+ import RemoveTabToolbarControl from '../tab-panel/remove-tab-toolbar-control';
26
11
 
12
+ export default function Controls( { tabsClientId } ) {
27
13
  return (
28
- <>
14
+ <BlockControls>
29
15
  <AddTabToolbarControl tabsClientId={ tabsClientId } />
30
16
  <RemoveTabToolbarControl tabsClientId={ tabsClientId } />
31
- <InspectorControls>
32
- <ToolsPanel
33
- label={ __( 'Settings' ) }
34
- resetAll={ () => {
35
- updateBlockAttributes( tabsClientId, {
36
- activeTabIndex: 0,
37
- } );
38
- } }
39
- dropdownMenuProps={ dropdownMenuProps }
40
- >
41
- <ToolsPanelItem
42
- label={ __( 'Default tab' ) }
43
- hasValue={ () => isDefaultTab && blockIndex !== 0 }
44
- onDeselect={ () => {
45
- updateBlockAttributes( tabsClientId, {
46
- activeTabIndex: 0,
47
- } );
48
- } }
49
- isShownByDefault
50
- >
51
- <CheckboxControl
52
- label={ __( 'Default tab' ) }
53
- checked={ isDefaultTab }
54
- onChange={ ( value ) => {
55
- updateBlockAttributes( tabsClientId, {
56
- activeTabIndex: value ? blockIndex : 0,
57
- } );
58
- } }
59
- />
60
- </ToolsPanelItem>
61
- </ToolsPanel>
62
- </InspectorControls>
63
- </>
17
+ </BlockControls>
64
18
  );
65
19
  }
package/src/tab/edit.js CHANGED
@@ -1,145 +1,141 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
4
9
  import { __ } from '@wordpress/i18n';
5
10
  import {
6
11
  useBlockProps,
7
- useInnerBlocksProps,
8
12
  store as blockEditorStore,
13
+ RichText,
9
14
  } from '@wordpress/block-editor';
10
15
  import { useSelect, useDispatch } from '@wordpress/data';
11
- import { useMemo, useRef, useEffect } from '@wordpress/element';
16
+ import { useMemo, useCallback } from '@wordpress/element';
12
17
 
13
18
  /**
14
19
  * Internal dependencies
15
20
  */
16
21
  import Controls from './controls';
17
22
 
18
- const TEMPLATE = [
19
- [
20
- 'core/paragraph',
21
- {
22
- placeholder: __( 'Type / to choose a block' ),
23
- },
24
- ],
25
- ];
26
-
27
- const { cancelAnimationFrame } = window;
28
-
29
- export default function Edit( { clientId, context, isSelected } ) {
30
- const focusRef = useRef();
23
+ const EMPTY_ARRAY = [];
31
24
 
32
- // Consume tab indices from context
25
+ function Edit( { context, clientId } ) {
26
+ const tabsList = context[ 'core/tabs-list' ] || EMPTY_ARRAY;
33
27
  const activeTabIndex = context[ 'core/tabs-activeTabIndex' ];
34
28
  const editorActiveTabIndex = context[ 'core/tabs-editorActiveTabIndex' ];
35
- const effectiveActiveIndex = editorActiveTabIndex ?? activeTabIndex;
36
29
 
37
- // Clean up animation frames on unmount.
38
- useEffect( () => {
39
- return () => {
40
- if ( focusRef.current ) {
41
- cancelAnimationFrame( focusRef.current );
42
- }
43
- };
44
- }, [] );
30
+ const effectiveActiveIndex = useMemo( () => {
31
+ return editorActiveTabIndex ?? activeTabIndex;
32
+ }, [ editorActiveTabIndex, activeTabIndex ] );
45
33
 
46
- const { blockIndex, hasInnerBlocksSelected, tabsClientId } = useSelect(
34
+ const { tabIndex, tabsClientId, selectedTabClientId } = useSelect(
47
35
  ( select ) => {
48
36
  const {
37
+ getBlockOrder,
49
38
  getBlockRootClientId,
50
- getBlockIndex,
39
+ getSelectedBlockClientIds,
51
40
  hasSelectedInnerBlock,
52
41
  } = select( blockEditorStore );
53
42
 
54
- // Get the tab-panel parent first
55
- const tabPanelClientId = getBlockRootClientId( clientId );
56
- // Then get the tabs parent
57
- const _tabsClientId = getBlockRootClientId( tabPanelClientId );
58
-
59
- // Get data about this instance of core/tab.
60
- const _blockIndex = getBlockIndex( clientId );
61
- const _hasInnerBlocksSelected = hasSelectedInnerBlock(
62
- clientId,
63
- true
64
- );
43
+ const _tabsListClientId = getBlockRootClientId( clientId );
44
+ const _tabsClientId = _tabsListClientId
45
+ ? getBlockRootClientId( _tabsListClientId )
46
+ : null;
47
+
48
+ const siblings = getBlockOrder( _tabsListClientId );
49
+ const _tabIndex = siblings.indexOf( clientId );
50
+
51
+ // Find which tab panel block is currently selected.
52
+ const selectedIds = getSelectedBlockClientIds();
53
+ let _selectedTabClientId = null;
54
+ for ( const tab of tabsList ) {
55
+ if (
56
+ selectedIds.includes( tab.clientId ) ||
57
+ hasSelectedInnerBlock( tab.clientId, true )
58
+ ) {
59
+ _selectedTabClientId = tab.clientId;
60
+ break;
61
+ }
62
+ }
65
63
 
66
64
  return {
67
- blockIndex: _blockIndex,
68
- hasInnerBlocksSelected: _hasInnerBlocksSelected,
65
+ tabIndex: _tabIndex,
69
66
  tabsClientId: _tabsClientId,
67
+ selectedTabClientId: _selectedTabClientId,
70
68
  };
71
69
  },
72
- [ clientId ]
70
+ [ clientId, tabsList ]
73
71
  );
74
72
 
75
- const { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =
73
+ const tab = tabsList[ tabIndex ] || {};
74
+
75
+ // tabListIndex is the tab's position in tabsList, used for active-state
76
+ // checks and click handling.
77
+ const tabListIndex = tab.index ?? tabIndex;
78
+
79
+ const tabClientId = tab.clientId || '';
80
+ const label = tab.label || '';
81
+
82
+ const isActive = tabListIndex === effectiveActiveIndex;
83
+ const isSelected = tabClientId === selectedTabClientId;
84
+
85
+ const { __unstableMarkNextChangeAsNotPersistent, updateBlockAttributes } =
76
86
  useDispatch( blockEditorStore );
77
87
 
78
- // Sync editorActiveTabIndex when this tab is selected directly
79
- useEffect( () => {
80
- // Only update if this tab is selected and not already the active index
81
- const isTabSelected = isSelected || hasInnerBlocksSelected;
82
- if (
83
- isTabSelected &&
84
- tabsClientId &&
85
- effectiveActiveIndex !== blockIndex
86
- ) {
87
- // Mark as non-persistent so it doesn't add to undo history
88
- __unstableMarkNextChangeAsNotPersistent();
89
- updateBlockAttributes( tabsClientId, {
90
- editorActiveTabIndex: blockIndex,
91
- } );
92
- }
93
- }, [
94
- isSelected,
95
- hasInnerBlocksSelected,
96
- tabsClientId,
97
- effectiveActiveIndex,
98
- blockIndex,
99
- updateBlockAttributes,
100
- __unstableMarkNextChangeAsNotPersistent,
101
- ] );
102
-
103
- // Determine if this is the currently active tab (for editor visibility)
104
- const isActiveTab = effectiveActiveIndex === blockIndex;
105
-
106
- // Determine if this is the default tab (for the "Default Tab" toggle in controls)
107
- const isDefaultTab = activeTabIndex === blockIndex;
108
-
109
- /**
110
- * This hook determines if the current tab panel should be visible.
111
- * This is true if it is the editor active tab, or if it is selected directly.
112
- */
113
- const isSelectedTab = useMemo( () => {
114
- // Show if this tab is directly selected or has selected inner blocks
115
- if ( isSelected || hasInnerBlocksSelected ) {
116
- return true;
117
- }
118
- // Always show the active tab (at effectiveActiveIndex) regardless of other selection state.
119
- // This ensures the tab panel remains visible when editing labels in tabs-menu.
120
- if ( isActiveTab ) {
121
- return true;
122
- }
123
- return false;
124
- }, [ isSelected, hasInnerBlocksSelected, isActiveTab ] );
88
+ const handleTabClick = useCallback(
89
+ ( event ) => {
90
+ event.preventDefault();
91
+ if ( tabsClientId && tabListIndex !== effectiveActiveIndex ) {
92
+ __unstableMarkNextChangeAsNotPersistent();
93
+ updateBlockAttributes( tabsClientId, {
94
+ editorActiveTabIndex: tabListIndex,
95
+ } );
96
+ }
97
+ },
98
+ [
99
+ tabsClientId,
100
+ tabListIndex,
101
+ effectiveActiveIndex,
102
+ updateBlockAttributes,
103
+ __unstableMarkNextChangeAsNotPersistent,
104
+ ]
105
+ );
125
106
 
126
- const blockProps = useBlockProps( {
127
- hidden: ! isSelectedTab,
128
- tabIndex: isSelectedTab ? 0 : -1,
129
- } );
107
+ const handleLabelChange = useCallback(
108
+ ( newLabel ) => {
109
+ if ( tabClientId ) {
110
+ updateBlockAttributes( tabClientId, { label: newLabel } );
111
+ }
112
+ },
113
+ [ tabClientId, updateBlockAttributes ]
114
+ );
130
115
 
131
- const innerBlocksProps = useInnerBlocksProps( blockProps, {
132
- template: TEMPLATE,
116
+ const blockProps = useBlockProps( {
117
+ className: clsx( {
118
+ 'is-active': isActive,
119
+ 'is-selected': isSelected,
120
+ } ),
121
+ tabIndex: -1,
122
+ onClick: handleTabClick,
133
123
  } );
134
124
 
135
125
  return (
136
- <section { ...innerBlocksProps }>
137
- <Controls
138
- tabsClientId={ tabsClientId }
139
- blockIndex={ blockIndex }
140
- isDefaultTab={ isDefaultTab }
141
- />
142
- { isSelectedTab && innerBlocksProps.children }
143
- </section>
126
+ <>
127
+ <Controls tabsClientId={ tabsClientId } />
128
+ <button { ...blockProps } type="button">
129
+ <RichText
130
+ tagName="span"
131
+ withoutInteractiveFormatting
132
+ placeholder={ __( 'Tab title' ) }
133
+ value={ label }
134
+ onChange={ handleLabelChange }
135
+ />
136
+ </button>
137
+ </>
144
138
  );
145
139
  }
140
+
141
+ export default Edit;
@@ -1,14 +1,14 @@
1
- .wp-block-tabs-menu-item {
1
+ .wp-block-tab {
2
2
  &.is-selected {
3
3
  outline-offset: 2px;
4
4
  }
5
5
  }
6
6
 
7
- .block-editor-block-preview__live-content:has(.wp-block-tabs-menu-item) {
7
+ .block-editor-block-preview__live-content:has(.wp-block-tab) {
8
8
  flex-basis: inherit !important;
9
9
  flex-grow: inherit !important;
10
10
 
11
- .wp-block-tabs-menu-item {
11
+ .wp-block-tab {
12
12
  flex-basis: 100% !important;
13
13
  }
14
14
  }