@wordpress/block-library 9.38.0 → 9.39.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 (470) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/block/block.json +2 -1
  3. package/build/breadcrumbs/edit.cjs +15 -5
  4. package/build/breadcrumbs/edit.cjs.map +2 -2
  5. package/build/breadcrumbs/index.cjs +1 -0
  6. package/build/breadcrumbs/index.cjs.map +2 -2
  7. package/build/button/index.cjs +3 -0
  8. package/build/button/index.cjs.map +2 -2
  9. package/build/comment-date/block.json +1 -0
  10. package/build/comment-edit-link/block.json +1 -3
  11. package/build/comment-edit-link/deprecated.cjs +91 -0
  12. package/build/comment-edit-link/deprecated.cjs.map +7 -0
  13. package/build/comment-edit-link/edit.cjs +6 -18
  14. package/build/comment-edit-link/edit.cjs.map +3 -3
  15. package/build/comment-edit-link/index.cjs +2 -0
  16. package/build/comment-edit-link/index.cjs.map +3 -3
  17. package/build/comment-reply-link/block.json +1 -5
  18. package/build/comment-reply-link/deprecated.cjs +84 -0
  19. package/build/comment-reply-link/deprecated.cjs.map +7 -0
  20. package/build/comment-reply-link/edit.cjs +10 -23
  21. package/build/comment-reply-link/edit.cjs.map +3 -3
  22. package/build/comment-reply-link/index.cjs +2 -0
  23. package/build/comment-reply-link/index.cjs.map +3 -3
  24. package/build/comments-title/block.json +1 -3
  25. package/build/comments-title/deprecated.cjs +148 -24
  26. package/build/comments-title/deprecated.cjs.map +3 -3
  27. package/build/comments-title/edit.cjs +17 -31
  28. package/build/comments-title/edit.cjs.map +3 -3
  29. package/build/cover/edit/block-controls.cjs +10 -2
  30. package/build/cover/edit/block-controls.cjs.map +2 -2
  31. package/build/cover/edit/embed-video-url-input.cjs +6 -2
  32. package/build/cover/edit/embed-video-url-input.cjs.map +2 -2
  33. package/build/cover/edit/inspector-controls.cjs +1 -1
  34. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  35. package/build/details/index.cjs +3 -0
  36. package/build/details/index.cjs.map +2 -2
  37. package/build/embed/util.cjs +9 -0
  38. package/build/embed/util.cjs.map +2 -2
  39. package/build/freeform/block.json +2 -1
  40. package/build/heading/index.cjs +3 -0
  41. package/build/heading/index.cjs.map +2 -2
  42. package/build/html/block.json +2 -1
  43. package/build/image/image.cjs +43 -9
  44. package/build/image/image.cjs.map +2 -2
  45. package/build/image/index.cjs +1 -1
  46. package/build/image/index.cjs.map +2 -2
  47. package/build/index.cjs +6 -0
  48. package/build/index.cjs.map +2 -2
  49. package/build/list-item/index.cjs +12 -1
  50. package/build/list-item/index.cjs.map +2 -2
  51. package/build/missing/block.json +2 -1
  52. package/build/more/block.json +2 -1
  53. package/build/more/index.cjs +1 -1
  54. package/build/more/index.cjs.map +2 -2
  55. package/build/navigation/block.json +5 -4
  56. package/build/navigation/deprecated.cjs +133 -5
  57. package/build/navigation/deprecated.cjs.map +2 -2
  58. package/build/navigation/edit/deleted-overlay-warning.cjs +70 -0
  59. package/build/navigation/edit/deleted-overlay-warning.cjs.map +7 -0
  60. package/build/navigation/edit/index.cjs +143 -65
  61. package/build/navigation/edit/index.cjs.map +3 -3
  62. package/build/navigation/edit/overlay-panel.cjs +10 -1
  63. package/build/navigation/edit/overlay-panel.cjs.map +3 -3
  64. package/build/navigation/edit/overlay-preview.cjs +120 -0
  65. package/build/navigation/edit/overlay-preview.cjs.map +7 -0
  66. package/build/navigation/edit/overlay-template-part-selector.cjs +59 -24
  67. package/build/navigation/edit/overlay-template-part-selector.cjs.map +3 -3
  68. package/build/navigation/edit/responsive-wrapper.cjs +12 -1
  69. package/build/navigation/edit/responsive-wrapper.cjs.map +3 -3
  70. package/build/navigation/edit/use-create-overlay.cjs +19 -2
  71. package/build/navigation/edit/use-create-overlay.cjs.map +3 -3
  72. package/build/navigation/utils/get-submenu-visibility.cjs +37 -0
  73. package/build/navigation/utils/get-submenu-visibility.cjs.map +7 -0
  74. package/build/navigation-link/edit.cjs +2 -40
  75. package/build/navigation-link/edit.cjs.map +2 -2
  76. package/build/navigation-link/shared/index.cjs +6 -0
  77. package/build/navigation-link/shared/index.cjs.map +2 -2
  78. package/build/navigation-link/shared/select-label-text.cjs +40 -0
  79. package/build/navigation-link/shared/select-label-text.cjs.map +7 -0
  80. package/build/navigation-link/shared/use-is-dragging-within.cjs +59 -0
  81. package/build/navigation-link/shared/use-is-dragging-within.cjs.map +7 -0
  82. package/build/navigation-submenu/block.json +1 -1
  83. package/build/navigation-submenu/edit.cjs +8 -47
  84. package/build/navigation-submenu/edit.cjs.map +2 -2
  85. package/build/navigation-submenu/index.cjs +2 -2
  86. package/build/navigation-submenu/index.cjs.map +2 -2
  87. package/build/nextpage/block.json +2 -1
  88. package/build/paragraph/block.json +1 -0
  89. package/build/paragraph/index.cjs +1 -1
  90. package/build/paragraph/index.cjs.map +2 -2
  91. package/build/post-excerpt/edit.cjs +1 -1
  92. package/build/post-excerpt/edit.cjs.map +2 -2
  93. package/build/shortcode/block.json +2 -1
  94. package/build/tab/add-tab-toolbar-control.cjs +31 -9
  95. package/build/tab/add-tab-toolbar-control.cjs.map +2 -2
  96. package/build/tab/block.json +18 -4
  97. package/build/tab/controls.cjs +4 -8
  98. package/build/tab/controls.cjs.map +3 -3
  99. package/build/tab/edit.cjs +46 -118
  100. package/build/tab/edit.cjs.map +3 -3
  101. package/build/tab/remove-tab-toolbar-control.cjs +91 -0
  102. package/build/tab/remove-tab-toolbar-control.cjs.map +7 -0
  103. package/build/tab/save.cjs +2 -2
  104. package/build/tab/save.cjs.map +2 -2
  105. package/build/tab-panels/block.json +70 -0
  106. package/build/tab-panels/edit.cjs +63 -0
  107. package/build/tab-panels/edit.cjs.map +7 -0
  108. package/build/tab-panels/icon.cjs +29 -0
  109. package/build/tab-panels/icon.cjs.map +7 -0
  110. package/build/tab-panels/index.cjs +58 -0
  111. package/build/tab-panels/index.cjs.map +7 -0
  112. package/build/tab-panels/save.cjs +33 -0
  113. package/build/tab-panels/save.cjs.map +7 -0
  114. package/build/tabs/block.json +61 -90
  115. package/build/tabs/controls.cjs +19 -221
  116. package/build/tabs/controls.cjs.map +3 -3
  117. package/build/tabs/deprecated.cjs +179 -0
  118. package/build/tabs/deprecated.cjs.map +7 -0
  119. package/build/tabs/edit.cjs +84 -62
  120. package/build/tabs/edit.cjs.map +3 -3
  121. package/build/tabs/index.cjs +3 -1
  122. package/build/tabs/index.cjs.map +3 -3
  123. package/build/tabs/save.cjs +6 -9
  124. package/build/tabs/save.cjs.map +2 -2
  125. package/build/tabs-menu/block.json +77 -0
  126. package/build/tabs-menu/edit.cjs +204 -0
  127. package/build/tabs-menu/edit.cjs.map +7 -0
  128. package/build/tabs-menu/icon.cjs +29 -0
  129. package/build/tabs-menu/icon.cjs.map +7 -0
  130. package/build/tabs-menu/index.cjs +58 -0
  131. package/build/tabs-menu/index.cjs.map +7 -0
  132. package/build/tabs-menu/save.cjs +35 -0
  133. package/build/tabs-menu/save.cjs.map +7 -0
  134. package/build/tabs-menu-item/block.json +98 -0
  135. package/build/tabs-menu-item/controls.cjs +247 -0
  136. package/build/tabs-menu-item/controls.cjs.map +7 -0
  137. package/build/tabs-menu-item/edit.cjs +272 -0
  138. package/build/tabs-menu-item/edit.cjs.map +7 -0
  139. package/build/tabs-menu-item/icon.cjs +29 -0
  140. package/build/tabs-menu-item/icon.cjs.map +7 -0
  141. package/build/tabs-menu-item/index.cjs +58 -0
  142. package/build/tabs-menu-item/index.cjs.map +7 -0
  143. package/build/tabs-menu-item/save.cjs +50 -0
  144. package/build/tabs-menu-item/save.cjs.map +7 -0
  145. package/build/template-part/edit/index.cjs +2 -2
  146. package/build/template-part/edit/index.cjs.map +2 -2
  147. package/build/utils/caption.cjs +4 -6
  148. package/build/utils/caption.cjs.map +3 -3
  149. package/build/verse/block.json +1 -3
  150. package/build/verse/deprecated.cjs +74 -5
  151. package/build/verse/deprecated.cjs.map +3 -3
  152. package/build/verse/edit.cjs +33 -48
  153. package/build/verse/edit.cjs.map +3 -3
  154. package/build/verse/save.cjs +2 -16
  155. package/build/verse/save.cjs.map +3 -3
  156. package/build/video/edit.cjs +4 -2
  157. package/build/video/edit.cjs.map +2 -2
  158. package/build-module/block/block.json +2 -1
  159. package/build-module/breadcrumbs/edit.mjs +15 -5
  160. package/build-module/breadcrumbs/edit.mjs.map +2 -2
  161. package/build-module/breadcrumbs/index.mjs +1 -0
  162. package/build-module/breadcrumbs/index.mjs.map +2 -2
  163. package/build-module/button/index.mjs +3 -0
  164. package/build-module/button/index.mjs.map +2 -2
  165. package/build-module/comment-date/block.json +1 -0
  166. package/build-module/comment-edit-link/block.json +1 -3
  167. package/build-module/comment-edit-link/deprecated.mjs +60 -0
  168. package/build-module/comment-edit-link/deprecated.mjs.map +7 -0
  169. package/build-module/comment-edit-link/edit.mjs +7 -24
  170. package/build-module/comment-edit-link/edit.mjs.map +2 -2
  171. package/build-module/comment-edit-link/index.mjs +2 -0
  172. package/build-module/comment-edit-link/index.mjs.map +2 -2
  173. package/build-module/comment-reply-link/block.json +1 -5
  174. package/build-module/comment-reply-link/deprecated.mjs +53 -0
  175. package/build-module/comment-reply-link/deprecated.mjs.map +7 -0
  176. package/build-module/comment-reply-link/edit.mjs +12 -29
  177. package/build-module/comment-reply-link/edit.mjs.map +2 -2
  178. package/build-module/comment-reply-link/index.mjs +2 -0
  179. package/build-module/comment-reply-link/index.mjs.map +2 -2
  180. package/build-module/comments-title/block.json +1 -3
  181. package/build-module/comments-title/deprecated.mjs +148 -24
  182. package/build-module/comments-title/deprecated.mjs.map +2 -2
  183. package/build-module/comments-title/edit.mjs +17 -32
  184. package/build-module/comments-title/edit.mjs.map +2 -2
  185. package/build-module/cover/edit/block-controls.mjs +11 -3
  186. package/build-module/cover/edit/block-controls.mjs.map +2 -2
  187. package/build-module/cover/edit/embed-video-url-input.mjs +6 -2
  188. package/build-module/cover/edit/embed-video-url-input.mjs.map +2 -2
  189. package/build-module/cover/edit/inspector-controls.mjs +1 -1
  190. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  191. package/build-module/details/index.mjs +3 -0
  192. package/build-module/details/index.mjs.map +2 -2
  193. package/build-module/embed/util.mjs +8 -0
  194. package/build-module/embed/util.mjs.map +2 -2
  195. package/build-module/freeform/block.json +2 -1
  196. package/build-module/heading/index.mjs +3 -0
  197. package/build-module/heading/index.mjs.map +2 -2
  198. package/build-module/html/block.json +2 -1
  199. package/build-module/image/image.mjs +43 -9
  200. package/build-module/image/image.mjs.map +2 -2
  201. package/build-module/image/index.mjs +1 -1
  202. package/build-module/image/index.mjs.map +2 -2
  203. package/build-module/index.mjs +6 -0
  204. package/build-module/index.mjs.map +2 -2
  205. package/build-module/list-item/index.mjs +12 -1
  206. package/build-module/list-item/index.mjs.map +2 -2
  207. package/build-module/missing/block.json +2 -1
  208. package/build-module/more/block.json +2 -1
  209. package/build-module/more/index.mjs +1 -1
  210. package/build-module/more/index.mjs.map +2 -2
  211. package/build-module/navigation/block.json +5 -4
  212. package/build-module/navigation/deprecated.mjs +133 -5
  213. package/build-module/navigation/deprecated.mjs.map +2 -2
  214. package/build-module/navigation/edit/deleted-overlay-warning.mjs +49 -0
  215. package/build-module/navigation/edit/deleted-overlay-warning.mjs.map +7 -0
  216. package/build-module/navigation/edit/index.mjs +145 -65
  217. package/build-module/navigation/edit/index.mjs.map +2 -2
  218. package/build-module/navigation/edit/overlay-panel.mjs +10 -1
  219. package/build-module/navigation/edit/overlay-panel.mjs.map +2 -2
  220. package/build-module/navigation/edit/overlay-preview.mjs +99 -0
  221. package/build-module/navigation/edit/overlay-preview.mjs.map +7 -0
  222. package/build-module/navigation/edit/overlay-template-part-selector.mjs +61 -26
  223. package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +2 -2
  224. package/build-module/navigation/edit/responsive-wrapper.mjs +12 -1
  225. package/build-module/navigation/edit/responsive-wrapper.mjs.map +2 -2
  226. package/build-module/navigation/edit/use-create-overlay.mjs +21 -4
  227. package/build-module/navigation/edit/use-create-overlay.mjs.map +2 -2
  228. package/build-module/navigation/utils/get-submenu-visibility.mjs +12 -0
  229. package/build-module/navigation/utils/get-submenu-visibility.mjs.map +7 -0
  230. package/build-module/navigation-link/edit.mjs +4 -40
  231. package/build-module/navigation-link/edit.mjs.map +2 -2
  232. package/build-module/navigation-link/shared/index.mjs +4 -0
  233. package/build-module/navigation-link/shared/index.mjs.map +2 -2
  234. package/build-module/navigation-link/shared/select-label-text.mjs +15 -0
  235. package/build-module/navigation-link/shared/select-label-text.mjs.map +7 -0
  236. package/build-module/navigation-link/shared/use-is-dragging-within.mjs +34 -0
  237. package/build-module/navigation-link/shared/use-is-dragging-within.mjs.map +7 -0
  238. package/build-module/navigation-submenu/block.json +1 -1
  239. package/build-module/navigation-submenu/edit.mjs +10 -47
  240. package/build-module/navigation-submenu/edit.mjs.map +2 -2
  241. package/build-module/navigation-submenu/index.mjs +2 -2
  242. package/build-module/navigation-submenu/index.mjs.map +2 -2
  243. package/build-module/nextpage/block.json +2 -1
  244. package/build-module/paragraph/block.json +1 -0
  245. package/build-module/paragraph/index.mjs +1 -1
  246. package/build-module/paragraph/index.mjs.map +2 -2
  247. package/build-module/post-excerpt/edit.mjs +1 -1
  248. package/build-module/post-excerpt/edit.mjs.map +2 -2
  249. package/build-module/shortcode/block.json +2 -1
  250. package/build-module/tab/add-tab-toolbar-control.mjs +32 -10
  251. package/build-module/tab/add-tab-toolbar-control.mjs.map +2 -2
  252. package/build-module/tab/block.json +18 -4
  253. package/build-module/tab/controls.mjs +4 -8
  254. package/build-module/tab/controls.mjs.map +2 -2
  255. package/build-module/tab/edit.mjs +48 -128
  256. package/build-module/tab/edit.mjs.map +2 -2
  257. package/build-module/tab/remove-tab-toolbar-control.mjs +73 -0
  258. package/build-module/tab/remove-tab-toolbar-control.mjs.map +7 -0
  259. package/build-module/tab/save.mjs +2 -2
  260. package/build-module/tab/save.mjs.map +2 -2
  261. package/build-module/tab-panels/block.json +70 -0
  262. package/build-module/tab-panels/edit.mjs +36 -0
  263. package/build-module/tab-panels/edit.mjs.map +7 -0
  264. package/build-module/tab-panels/icon.mjs +8 -0
  265. package/build-module/tab-panels/icon.mjs.map +7 -0
  266. package/build-module/tab-panels/index.mjs +20 -0
  267. package/build-module/tab-panels/index.mjs.map +7 -0
  268. package/build-module/tab-panels/save.mjs +12 -0
  269. package/build-module/tab-panels/save.mjs.map +7 -0
  270. package/build-module/tabs/block.json +61 -90
  271. package/build-module/tabs/controls.mjs +21 -228
  272. package/build-module/tabs/controls.mjs.map +2 -2
  273. package/build-module/tabs/deprecated.mjs +158 -0
  274. package/build-module/tabs/deprecated.mjs.map +7 -0
  275. package/build-module/tabs/edit.mjs +87 -64
  276. package/build-module/tabs/edit.mjs.map +2 -2
  277. package/build-module/tabs/index.mjs +3 -1
  278. package/build-module/tabs/index.mjs.map +2 -2
  279. package/build-module/tabs/save.mjs +7 -10
  280. package/build-module/tabs/save.mjs.map +2 -2
  281. package/build-module/tabs-menu/block.json +77 -0
  282. package/build-module/tabs-menu/edit.mjs +186 -0
  283. package/build-module/tabs-menu/edit.mjs.map +7 -0
  284. package/build-module/tabs-menu/icon.mjs +8 -0
  285. package/build-module/tabs-menu/icon.mjs.map +7 -0
  286. package/build-module/tabs-menu/index.mjs +20 -0
  287. package/build-module/tabs-menu/index.mjs.map +7 -0
  288. package/build-module/tabs-menu/save.mjs +14 -0
  289. package/build-module/tabs-menu/save.mjs.map +7 -0
  290. package/build-module/tabs-menu-item/block.json +98 -0
  291. package/build-module/tabs-menu-item/controls.mjs +227 -0
  292. package/build-module/tabs-menu-item/controls.mjs.map +7 -0
  293. package/build-module/tabs-menu-item/edit.mjs +253 -0
  294. package/build-module/tabs-menu-item/edit.mjs.map +7 -0
  295. package/build-module/tabs-menu-item/icon.mjs +8 -0
  296. package/build-module/tabs-menu-item/icon.mjs.map +7 -0
  297. package/build-module/tabs-menu-item/index.mjs +20 -0
  298. package/build-module/tabs-menu-item/index.mjs.map +7 -0
  299. package/build-module/tabs-menu-item/save.mjs +29 -0
  300. package/build-module/tabs-menu-item/save.mjs.map +7 -0
  301. package/build-module/template-part/edit/index.mjs +2 -2
  302. package/build-module/template-part/edit/index.mjs.map +2 -2
  303. package/build-module/utils/caption.mjs +1 -3
  304. package/build-module/utils/caption.mjs.map +2 -2
  305. package/build-module/verse/block.json +1 -3
  306. package/build-module/verse/deprecated.mjs +74 -5
  307. package/build-module/verse/deprecated.mjs.map +2 -2
  308. package/build-module/verse/edit.mjs +35 -55
  309. package/build-module/verse/edit.mjs.map +2 -2
  310. package/build-module/verse/save.mjs +2 -6
  311. package/build-module/verse/save.mjs.map +2 -2
  312. package/build-module/video/edit.mjs +4 -2
  313. package/build-module/video/edit.mjs.map +2 -2
  314. package/build-style/editor-rtl.css +64 -21
  315. package/build-style/editor.css +64 -21
  316. package/build-style/gallery/style-rtl.css +1 -1
  317. package/build-style/gallery/style.css +1 -1
  318. package/build-style/media-text/style-rtl.css +2 -0
  319. package/build-style/media-text/style.css +2 -0
  320. package/build-style/navigation/editor-rtl.css +48 -0
  321. package/build-style/navigation/editor.css +48 -0
  322. package/build-style/navigation/style-rtl.css +64 -18
  323. package/build-style/navigation/style.css +64 -18
  324. package/build-style/style-rtl.css +109 -171
  325. package/build-style/style.css +109 -171
  326. package/build-style/tab/style-rtl.css +7 -1
  327. package/build-style/tab/style.css +7 -1
  328. package/build-style/tab-panels/style-rtl.css +4 -0
  329. package/build-style/tab-panels/style.css +4 -0
  330. package/build-style/tabs/style-rtl.css +1 -167
  331. package/build-style/tabs/style.css +1 -167
  332. package/build-style/tabs-menu/editor-rtl.css +4 -0
  333. package/build-style/tabs-menu/editor.css +4 -0
  334. package/build-style/tabs-menu/style-rtl.css +8 -0
  335. package/build-style/tabs-menu/style.css +8 -0
  336. package/build-style/tabs-menu-item/editor-rtl.css +16 -0
  337. package/build-style/tabs-menu-item/editor.css +16 -0
  338. package/build-style/tabs-menu-item/style-rtl.css +34 -0
  339. package/build-style/tabs-menu-item/style.css +34 -0
  340. package/build-style/verse/style-rtl.css +1 -0
  341. package/build-style/verse/style.css +1 -0
  342. package/package.json +37 -37
  343. package/src/block/block.json +2 -1
  344. package/src/breadcrumbs/edit.js +10 -2
  345. package/src/breadcrumbs/index.js +1 -0
  346. package/src/button/index.js +4 -0
  347. package/src/categories/index.php +5 -1
  348. package/src/comment-date/block.json +1 -0
  349. package/src/comment-edit-link/block.json +1 -3
  350. package/src/comment-edit-link/deprecated.js +63 -0
  351. package/src/comment-edit-link/edit.js +7 -31
  352. package/src/comment-edit-link/index.js +2 -0
  353. package/src/comment-reply-link/block.json +1 -5
  354. package/src/comment-reply-link/deprecated.js +56 -0
  355. package/src/comment-reply-link/edit.js +6 -35
  356. package/src/comment-reply-link/index.js +2 -0
  357. package/src/comments-title/block.json +1 -3
  358. package/src/comments-title/deprecated.js +153 -23
  359. package/src/comments-title/edit.js +9 -25
  360. package/src/cover/edit/block-controls.js +14 -3
  361. package/src/cover/edit/embed-video-url-input.js +6 -2
  362. package/src/cover/edit/inspector-controls.js +1 -3
  363. package/src/details/index.js +4 -0
  364. package/src/editor.scss +2 -1
  365. package/src/embed/test/index.js +49 -0
  366. package/src/embed/util.js +21 -0
  367. package/src/freeform/block.json +2 -1
  368. package/src/gallery/style.scss +1 -1
  369. package/src/heading/index.js +4 -0
  370. package/src/html/block.json +2 -1
  371. package/src/image/image.js +63 -11
  372. package/src/image/index.js +4 -1
  373. package/src/index.js +6 -0
  374. package/src/list-item/index.js +16 -0
  375. package/src/media-text/style.scss +2 -0
  376. package/src/missing/block.json +2 -1
  377. package/src/more/block.json +2 -1
  378. package/src/more/index.js +4 -1
  379. package/src/navigation/block.json +5 -4
  380. package/src/navigation/deprecated.js +144 -5
  381. package/src/navigation/edit/deleted-overlay-warning.js +56 -0
  382. package/src/navigation/edit/index.js +181 -70
  383. package/src/navigation/edit/overlay-panel.js +10 -0
  384. package/src/navigation/edit/overlay-preview.js +133 -0
  385. package/src/navigation/edit/overlay-template-part-selector.js +76 -26
  386. package/src/navigation/edit/responsive-wrapper.js +14 -1
  387. package/src/navigation/edit/test/overlay-template-part-selector.js +24 -16
  388. package/src/navigation/edit/test/responsive-wrapper.js +179 -0
  389. package/src/navigation/edit/test/use-create-overlay.js +129 -2
  390. package/src/navigation/edit/use-create-overlay.js +26 -4
  391. package/src/navigation/editor.scss +51 -0
  392. package/src/navigation/index.php +59 -11
  393. package/src/navigation/style.scss +140 -76
  394. package/src/navigation/utils/get-submenu-visibility.js +27 -0
  395. package/src/navigation/utils/test/get-submenu-visibility.js +47 -0
  396. package/src/navigation-link/edit.js +3 -67
  397. package/src/navigation-link/shared/index.js +2 -0
  398. package/src/navigation-link/shared/select-label-text.js +16 -0
  399. package/src/navigation-link/shared/use-is-dragging-within.js +55 -0
  400. package/src/navigation-submenu/block.json +1 -1
  401. package/src/navigation-submenu/edit.js +10 -73
  402. package/src/navigation-submenu/index.js +6 -3
  403. package/src/navigation-submenu/index.php +36 -5
  404. package/src/nextpage/block.json +2 -1
  405. package/src/paragraph/block.json +1 -0
  406. package/src/paragraph/index.js +4 -1
  407. package/src/post-excerpt/edit.js +1 -1
  408. package/src/post-excerpt/index.php +39 -16
  409. package/src/shortcode/block.json +2 -1
  410. package/src/style.scss +3 -0
  411. package/src/tab/add-tab-toolbar-control.js +36 -11
  412. package/src/tab/block.json +18 -4
  413. package/src/tab/controls.js +4 -5
  414. package/src/tab/edit.js +75 -150
  415. package/src/tab/index.php +5 -63
  416. package/src/tab/remove-tab-toolbar-control.js +103 -0
  417. package/src/tab/save.js +1 -3
  418. package/src/tab/style.scss +8 -1
  419. package/src/tab-panels/block.json +70 -0
  420. package/src/tab-panels/edit.js +44 -0
  421. package/src/tab-panels/icon.js +10 -0
  422. package/src/tab-panels/index.js +21 -0
  423. package/src/tab-panels/save.js +11 -0
  424. package/src/tab-panels/style.scss +4 -0
  425. package/src/tabs/block.json +61 -90
  426. package/src/tabs/controls.js +7 -221
  427. package/src/tabs/deprecated.js +214 -0
  428. package/src/tabs/edit.js +108 -68
  429. package/src/tabs/index.js +2 -0
  430. package/src/tabs/index.php +86 -191
  431. package/src/tabs/save.js +6 -13
  432. package/src/tabs/style.scss +1 -187
  433. package/src/tabs-menu/block.json +77 -0
  434. package/src/tabs-menu/edit.js +251 -0
  435. package/src/tabs-menu/editor.scss +6 -0
  436. package/src/tabs-menu/icon.js +10 -0
  437. package/src/tabs-menu/index.js +21 -0
  438. package/src/tabs-menu/index.php +74 -0
  439. package/src/tabs-menu/save.js +18 -0
  440. package/src/tabs-menu/style.scss +8 -0
  441. package/src/tabs-menu-item/block.json +98 -0
  442. package/src/tabs-menu-item/controls.js +262 -0
  443. package/src/tabs-menu-item/edit.js +322 -0
  444. package/src/tabs-menu-item/editor.scss +20 -0
  445. package/src/tabs-menu-item/icon.js +10 -0
  446. package/src/tabs-menu-item/index.js +21 -0
  447. package/src/tabs-menu-item/index.php +82 -0
  448. package/src/tabs-menu-item/save.js +44 -0
  449. package/src/tabs-menu-item/style.scss +42 -0
  450. package/src/template-part/edit/index.js +2 -4
  451. package/src/utils/caption.js +1 -7
  452. package/src/verse/block.json +1 -3
  453. package/src/verse/deprecated.js +83 -4
  454. package/src/verse/edit.js +37 -56
  455. package/src/verse/save.js +2 -11
  456. package/src/verse/style.scss +1 -0
  457. package/src/video/edit.js +4 -2
  458. package/build/tab/tabs-list.cjs +0 -132
  459. package/build/tab/tabs-list.cjs.map +0 -7
  460. package/build/tabs/style-engine.cjs +0 -119
  461. package/build/tabs/style-engine.cjs.map +0 -7
  462. package/build-module/tab/tabs-list.mjs +0 -101
  463. package/build-module/tab/tabs-list.mjs.map +0 -7
  464. package/build-module/tabs/style-engine.mjs +0 -101
  465. package/build-module/tabs/style-engine.mjs.map +0 -7
  466. package/build-style/tabs/editor-rtl.css +0 -26
  467. package/build-style/tabs/editor.css +0 -26
  468. package/src/tab/tabs-list.js +0 -122
  469. package/src/tabs/editor.scss +0 -30
  470. package/src/tabs/style-engine.js +0 -164
@@ -6,160 +6,71 @@
6
6
  */
7
7
 
8
8
  /**
9
- * Build inline CSS custom properties for color settings.
9
+ * Extract tabs list from tab-panels innerblocks.
10
10
  *
11
- * @param array $attributes Block attributes.
11
+ * @param array $innerblocks Parsed inner blocks of tabs block.
12
12
  *
13
- * @return string Inline CSS string.
14
- */
15
- function block_core_tabs_generate_color_styles( array $attributes ): string {
16
- $tab_inactive = $attributes['customTabInactiveColor'] ?? '';
17
- $tab_hover = $attributes['customTabHoverColor'] ?? '';
18
- $tab_active = $attributes['customTabActiveColor'] ?? '';
19
- $tab_text = $attributes['customTabTextColor'] ?? '';
20
- $hover_text = $attributes['customTabHoverTextColor'] ?? '';
21
- $active_text = $attributes['customTabActiveTextColor'] ?? '';
22
-
23
- $styles = array(
24
- '--custom-tab-inactive-color' => $tab_inactive,
25
- '--custom-tab-hover-color' => $tab_hover,
26
- '--custom-tab-active-color' => $tab_active,
27
- '--custom-tab-text-color' => $tab_text,
28
- '--custom-tab-hover-text-color' => $hover_text,
29
- '--custom-tab-active-text-color' => $active_text,
30
- );
31
-
32
- $style_string = array_map(
33
- static function ( string $key, string $value ): string {
34
- return ! empty( $value ) ? $key . ': ' . $value . ';' : '';
35
- },
36
- array_keys( $styles ),
37
- $styles
38
- );
39
-
40
- return implode( ' ', array_filter( $style_string ) );
41
- }
42
-
43
- /**
44
- * Build inline CSS custom properties for gap settings.
45
- *
46
- * @param array $attributes Block attributes.
47
- * @param bool $is_vertical Whether the tabs are vertical.
48
- *
49
- * @return string Inline CSS string.
13
+ * @return array List of tabs with id, label, index.
50
14
  */
51
- function block_core_tabs_generate_gap_styles( array $attributes, bool $is_vertical ): string {
52
- if ( empty( $attributes['style'] ) || ! is_array( $attributes['style'] ) ) {
53
- return '--wp--style--tabs-gap-default: 0.5em;';
54
- }
55
- if ( empty( $attributes['style']['spacing'] ) || ! is_array( $attributes['style']['spacing'] ) ) {
56
- return '--wp--style--tabs-gap-default: 0.5em;';
57
- }
58
- if ( ! array_key_exists( 'blockGap', $attributes['style']['spacing'] ) ) {
59
- return '--wp--style--tabs-gap-default: 0.5em;';
60
- }
61
-
62
- $block_gap = $attributes['style']['spacing']['blockGap'];
63
-
64
- if ( is_array( $block_gap ) ) {
65
- if ( array_key_exists( 'left', $block_gap ) && array_key_exists( 'top', $block_gap ) ) {
66
- $block_gap_horizontal = $block_gap['left'];
67
- $block_gap_vertical = $block_gap['top'];
68
- } elseif ( array_key_exists( 'left', $block_gap ) ) {
69
- $block_gap_horizontal = $block_gap['left'];
70
- $block_gap_vertical = '0.5em';
71
- } elseif ( array_key_exists( 'top', $block_gap ) ) {
72
- $block_gap_horizontal = '0.5em';
73
- $block_gap_vertical = $block_gap['top'];
74
- } else {
75
- return '--wp--style--tabs-gap-default: 0.5em;';
15
+ function block_core_tabs_generate_tabs_list( array $innerblocks = array() ): array {
16
+ $tabs_list = array();
17
+
18
+ // Find tab-panels block
19
+ foreach ( $innerblocks as $inner_block ) {
20
+ if ( 'core/tab-panels' === ( $inner_block['blockName'] ?? '' ) ) {
21
+ $tab_index = 0;
22
+ foreach ( $inner_block['innerBlocks'] ?? array() as $tab_block ) {
23
+ if ( 'core/tab' === ( $tab_block['blockName'] ?? '' ) ) {
24
+ $attrs = $tab_block['attrs'] ?? array();
25
+ $tab_label = $attrs['label'] ?? '';
26
+
27
+ // Try to get the ID from the rendered content
28
+ $tab_id = $attrs['anchor'] ?? '';
29
+ if ( empty( $tab_id ) && ! empty( $tab_block['innerHTML'] ) ) {
30
+ $tag_processor = new WP_HTML_Tag_Processor( $tab_block['innerHTML'] );
31
+ if ( $tag_processor->next_tag( array( 'class_name' => 'wp-block-tab' ) ) ) {
32
+ $tab_id = $tag_processor->get_attribute( 'id' ) ?? '';
33
+ }
34
+ }
35
+ if ( empty( $tab_id ) ) {
36
+ $tab_id = 'tab-' . $tab_index;
37
+ }
38
+
39
+ $tabs_list[] = array(
40
+ 'id' => $tab_id,
41
+ 'label' => esc_html( (string) $tab_label ),
42
+ 'index' => $tab_index,
43
+ );
44
+ ++$tab_index;
45
+ }
46
+ }
47
+ break;
76
48
  }
77
- } elseif ( is_string( $block_gap ) ) {
78
- return '--wp--style--tabs-gap-default: 0.5em;';
79
49
  }
80
50
 
81
- $block_gap_horizontal = preg_match( '/^var:preset\|spacing\|\d+$/', (string) $block_gap_horizontal )
82
- ? 'var(--wp--preset--spacing--' . substr( (string) $block_gap_horizontal, strrpos( (string) $block_gap_horizontal, '|' ) + 1 ) . ')'
83
- : (string) $block_gap_horizontal;
84
-
85
- $block_gap_vertical = preg_match( '/^var:preset\|spacing\|\d+$/', (string) $block_gap_vertical )
86
- ? 'var(--wp--preset--spacing--' . substr( (string) $block_gap_vertical, strrpos( (string) $block_gap_vertical, '|' ) + 1 ) . ')'
87
- : (string) $block_gap_vertical;
88
-
89
- $list_gap = $block_gap_horizontal;
90
- $block_gap = $block_gap_vertical;
91
-
92
- if ( $is_vertical ) {
93
- $list_gap = $block_gap_vertical;
94
- $block_gap = $block_gap_horizontal;
95
- }
96
-
97
- return wp_sprintf(
98
- '--wp--style--unstable-tabs-list-gap: %s; --wp--style--unstable-tabs-gap: %s;',
99
- $list_gap,
100
- $block_gap
101
- );
51
+ return $tabs_list;
102
52
  }
103
53
 
104
54
  /**
105
- * Extract tabs list from inner blocks for hydration.
55
+ * Filter to provide tabs list context to core/tabs and core/tabs-menu blocks.
56
+ * It is more performant to do this here, once, rather than in the tabs render and tabs context filters.
57
+ * In this way core/tabs is both a provider and a consumer of the core/tabs-list context.
106
58
  *
107
- * @param array $innerblocks Parsed inner blocks.
59
+ * @param array $context Default block context.
60
+ * @param array $parsed_block The block being rendered.
108
61
  *
109
- * @return array List of tabs with id, label, index.
62
+ * @return array Modified context.
110
63
  */
111
- function block_core_tabs_generate_tabs_list_from_innerblocks( array $innerblocks = array() ): array {
112
- $tab_index = 0;
113
-
114
- return array_map(
115
- static function ( array $tab ) use ( &$tab_index ): array {
116
- $attrs = $tab['attrs'] ?? array();
117
-
118
- $tag_processor = new WP_HTML_Tag_Processor( $tab['innerHTML'] ?? '' );
119
- $tag_processor->next_tag( array( 'class_name' => 'wp-block-tab' ) );
120
-
121
- $tab_id = $tag_processor->get_attribute( 'id' );
122
- $tab_label = $attrs['label'] ?? '';
123
-
124
- $attrs['id'] = $tab_id;
125
- $attrs['label'] = esc_html( (string) $tab_label );
126
-
127
- $tab_index++;
128
-
129
- return $attrs;
130
- },
131
- $innerblocks
132
- );
133
- }
134
-
135
- /**
136
- * Build inline CSS custom properties for border settings.
137
- *
138
- * @param array $attributes Block attributes.
139
- *
140
- * @return string Inline CSS string.
141
- */
142
- function block_core_tabs_generate_border_styles( array $attributes ): string {
143
- $radius = $attributes['style']['border']['radius'] ?? null;
144
-
145
- if ( empty( $radius ) ) {
146
- return '';
64
+ function block_core_tabs_provide_context( array $context, array $parsed_block ): array {
65
+ if ( 'core/tabs' === $parsed_block['blockName'] ) {
66
+ $tabs_list = block_core_tabs_generate_tabs_list( $parsed_block['innerBlocks'] ?? array() );
67
+ $context['core/tabs-list'] = $tabs_list;
68
+ $context['core/tabs-id'] = $parsed_block['attrs']['anchor'] ?? wp_unique_id( 'tabs_' ); // Generate a unique ID for each tabs instance. Used for 3rd party extensibility to identify the tabs instance.
147
69
  }
148
70
 
149
- if ( is_array( $radius ) ) {
150
- $radius_value = wp_sprintf(
151
- '%s %s %s %s',
152
- $radius['topLeft'] ?? '0',
153
- $radius['topRight'] ?? '0',
154
- $radius['bottomRight'] ?? '0',
155
- $radius['bottomLeft'] ?? '0'
156
- );
157
- } else {
158
- $radius_value = $radius;
159
- }
160
-
161
- return wp_sprintf( '--tab-border-radius: %s;', (string) $radius_value );
71
+ return $context;
162
72
  }
73
+ add_filter( 'render_block_context', 'block_core_tabs_provide_context', 10, 2 );
163
74
 
164
75
  /**
165
76
  * Render callback for core/tabs.
@@ -172,29 +83,37 @@ function block_core_tabs_generate_border_styles( array $attributes ): string {
172
83
  */
173
84
  function block_core_tabs_render_block_callback( array $attributes, string $content, \WP_Block $block ): string {
174
85
  $active_tab_index = $attributes['activeTabIndex'] ?? 0;
86
+ $tabs_list = $block->context['core/tabs-list'] ?? array();
87
+ $tabs_id = $block->context['core/tabs-id'] ?? null;
175
88
 
176
- $tabs_list = block_core_tabs_generate_tabs_list_from_innerblocks( $block->parsed_block['innerBlocks'] ?? array() );
177
-
178
- $tabs_id = wp_unique_id( 'tabs_' );
89
+ if ( empty( $tabs_id ) ) {
90
+ // If malformed tabs, return early to avoid errors.
91
+ return '';
92
+ }
179
93
 
180
- /**
181
- * Builds a client side state for just this tabs instance.
182
- * This allows 3rd party extensibility of tabs while retaining
183
- * client side state management per core/tabs instance, like context.
184
- */
185
- wp_interactivity_state(
186
- 'core/tabs/private',
187
- array(
188
- $tabs_id => $tabs_list,
189
- )
190
- );
94
+ $title = $attributes['metadata']['name'] ?? '';
95
+ if ( empty( $title ) ) {
96
+ $title = 'Tab Contents';
97
+ }
98
+ $title = wp_sprintf( '<h3 class="wp-block-tabs__title">%s</h3>', esc_html( $title ) );
191
99
 
192
- $is_vertical = 'vertical' === ( $attributes['orientation'] ?? 'horizontal' );
100
+ $is_vertical = false;
193
101
 
194
102
  $tag_processor = new WP_HTML_Tag_Processor( $content );
103
+
195
104
  $tag_processor->next_tag( array( 'class_name' => 'wp-block-tabs' ) );
196
- $tag_processor->add_class( $is_vertical ? 'is-vertical' : 'is-horizontal' );
197
105
  $tag_processor->set_attribute( 'data-wp-interactive', 'core/tabs/private' );
106
+
107
+ // Inspect inside the tabs-menu to see if its vertical or not.
108
+ $tag_processor->set_bookmark( 'core/tabs_wrapper' );
109
+ while ( $tag_processor->next_tag( array( 'class_name' => 'wp-block-tabs-menu' ) ) ) {
110
+ if ( $tag_processor->has_class( 'is-vertical' ) ) {
111
+ $is_vertical = true;
112
+ break;
113
+ }
114
+ }
115
+ $tag_processor->seek( 'core/tabs_wrapper' );
116
+
198
117
  $tag_processor->set_attribute(
199
118
  'data-wp-context',
200
119
  wp_json_encode(
@@ -208,48 +127,24 @@ function block_core_tabs_render_block_callback( array $attributes, string $conte
208
127
  $tag_processor->set_attribute( 'data-wp-init', 'callbacks.onTabsInit' );
209
128
  $tag_processor->set_attribute( 'data-wp-on--keydown', 'actions.handleTabKeyDown' );
210
129
 
211
- /**
212
- * Process style attribute.
213
- */
214
- $style = (string) $tag_processor->get_attribute( 'style' );
215
- $style .= block_core_tabs_generate_color_styles( $attributes );
216
- $style .= block_core_tabs_generate_gap_styles( $attributes, $is_vertical );
217
- $style .= block_core_tabs_generate_border_styles( $attributes );
218
- $tag_processor->set_attribute( 'style', $style );
219
-
220
- $updated_content = $tag_processor->get_updated_html();
130
+ $output = $tag_processor->get_updated_html();
221
131
 
222
- /**
223
- * Build the tabs list markup.
224
- * We're doing this manually instead of using <template/> to make it possible
225
- * for other blocks to extend the tabs list via HTML api.
226
- */
227
- $tabs_list_markup = array_map(
228
- static function ( array $tab ): string {
229
- return wp_sprintf(
230
- '<a id="tab__%1$s" class="tabs__tab-label" href="#%1$s" role="tab" aria-controls="%1$s" data-wp-on--click="actions.handleTabClick" data-wp-on--keydown="actions.handleTabKeyDown" data-wp-bind--aria-selected="state.isActiveTab" data-wp-bind--tabindex="state.tabIndexAttribute">%2$s</a>',
231
- $tab['id'],
232
- html_entity_decode( $tab['label'] )
233
- );
234
- },
235
- $tabs_list
236
- );
237
- $tabs_list_markup = implode( '', $tabs_list_markup );
132
+ // Insert the title after the first opening tag.
133
+ $output = preg_replace( '/^(<[^>]+>)/', '$1' . $title, $output );
238
134
 
239
135
  /**
240
- * Splice the tabs list into the content.
136
+ * Builds a client side state for just this tabs instance.
137
+ * This allows 3rd party extensibility of tabs while retaining
138
+ * client side state management per core/tabs instance, like context.
241
139
  */
242
- $content = preg_replace(
243
- '/<ul\s+class="tabs__list">\s*<\/ul>/i',
244
- '<div class="tabs__list" role="tablist">' . $tabs_list_markup . '</div>',
245
- (string) $updated_content
140
+ wp_interactivity_state(
141
+ 'core/tabs/private',
142
+ array(
143
+ $tabs_id => $tabs_list,
144
+ )
246
145
  );
247
146
 
248
- /**
249
- * In the event preg_replace fails, return the tabs content without the list spliced in.
250
- * This ensures the block content is still rendered, albeit without the tabs list.
251
- */
252
- return is_string( $content ) ? $content : (string) $updated_content;
147
+ return $output;
253
148
  }
254
149
 
255
150
  /**
package/src/tabs/save.js CHANGED
@@ -3,20 +3,13 @@
3
3
  */
4
4
  import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
5
5
 
6
- export default function Save( { attributes } ) {
7
- // eslint-disable-next-line react-compiler/react-compiler
8
- const blockProps = useBlockProps.save();
6
+ export default function save( { attributes } ) {
7
+ const { anchor } = attributes;
9
8
 
10
- // eslint-disable-next-line react-compiler/react-compiler
11
- const innerBlocksProps = useInnerBlocksProps.save( {} );
9
+ const tabsId = anchor;
12
10
 
13
- const title = attributes?.metadata?.name || 'Tab Contents';
11
+ const blockProps = useBlockProps.save();
12
+ const innerBlocksProps = useInnerBlocksProps.save( blockProps );
14
13
 
15
- return (
16
- <div { ...blockProps }>
17
- <h3 className="tabs__title">{ title }</h3>
18
- <ul className="tabs__list"></ul>
19
- { innerBlocksProps.children }
20
- </div>
21
- );
14
+ return <div { ...innerBlocksProps } id={ tabsId } />;
22
15
  }
@@ -1,192 +1,6 @@
1
1
  .wp-block-tabs {
2
- display: flex;
3
- flex-direction: row;
4
- flex-wrap: wrap;
5
- gap: var(--wp--style--unstable-tabs-gap, var(--wp--style--tabs-gap-default));
6
2
  box-sizing: border-box;
7
-
8
- --tab-bg: var(--custom-tab-inactive-color, transparent);
9
- --tab-bg-hover: var(--custom-tab-hover-color, #eaeaea);
10
- --tab-bg-active: var(--custom-tab-active-color, #000);
11
- --tab-text: var(--custom-tab-text-color, #000);
12
- --tab-text-hover: var(--custom-tab-hover-text-color, #000);
13
- --tab-text-active: var(--custom-tab-active-text-color, #fff);
14
- --tab-opacity: 0.5;
15
- --tab-opacity-hover: 1;
16
- --tab-opacity-active: 1;
17
- --tab-outline-width: 0;
18
- --tab-underline-width: 0;
19
- --tab-side-border-width: 0;
20
- --tab-border-color: var(--custom-tab-inactive-color, transparent);
21
- --tab-border-color-hover: var(--custom-tab-hover-color, #000);
22
- --tab-border-color-active: var(--custom-tab-active-color, #000);
23
- --tab-padding-block: var(--wp--preset--spacing--20, 0.5em);
24
- --tab-padding-inline: var(--wp--preset--spacing--30, 1em);
25
- --tab-border-radius: 0;
26
- --tabs-divider-color: var(--custom-tab-active-color, #000);
27
-
28
- .tabs__title {
3
+ .wp-block-tabs__title {
29
4
  display: none;
30
5
  }
31
-
32
- .tabs__list {
33
- display: flex;
34
- list-style: none;
35
- margin: 0;
36
- padding: 0;
37
- align-items: flex-end;
38
- flex-grow: 1;
39
- flex-basis: 100%;
40
- gap: var(--wp--style--unstable-tabs-list-gap, var(--wp--style--tabs-gap-default));
41
- min-width: 100px;
42
-
43
- button.tabs__tab-label {
44
- font-size: inherit;
45
- font-family: inherit;
46
- font-weight: inherit;
47
- line-height: inherit;
48
- letter-spacing: inherit;
49
- text-transform: inherit;
50
- text-align: inherit;
51
- }
52
-
53
- .tabs__tab-label {
54
- box-sizing: border-box;
55
- display: block;
56
- width: max-content;
57
- margin: 0;
58
- opacity: var(--tab-opacity);
59
- padding-block: var(--tab-padding-block);
60
- padding-inline: var(--tab-padding-inline);
61
- text-decoration: none;
62
- cursor: pointer;
63
- background-color: var(--tab-bg);
64
- color: var(--tab-text);
65
- border: var(--tab-outline-width) solid var(--tab-border-color);
66
- border-block-end: var(--tab-underline-width) solid var(--tab-border-color);
67
- border-inline-end: var(--tab-side-border-width) solid var(--tab-border-color);
68
- border-radius: var(--tab-border-radius);
69
- &:focus {
70
- outline: none;
71
- }
72
- &:focus-visible {
73
- outline: 2px solid var(--tab-border-color-active);
74
- outline-offset: 2px;
75
- }
76
- &:hover {
77
- opacity: var(--tab-opacity-hover);
78
- background-color: var(--tab-bg-hover);
79
- color: var(--tab-text-hover);
80
- border-color: var(--tab-border-color-hover);
81
- }
82
- &[aria-selected="true"] {
83
- opacity: var(--tab-opacity-active);
84
- background-color: var(--tab-bg-active);
85
- color: var(--tab-text-active);
86
- border-color: var(--tab-border-color-active);
87
- }
88
- }
89
- }
90
-
91
- &:not(.is-vertical) {
92
- .tabs__list {
93
- overflow-x: auto;
94
- border-block-end: 1px solid var(--tabs-divider-color);
95
- }
96
- }
97
-
98
- &.is-vertical {
99
- flex-wrap: nowrap;
100
- .tabs__list {
101
- flex-grow: 0;
102
- flex-direction: column;
103
- max-width: 30%;
104
- border-inline-end: 1px solid var(--tabs-divider-color);
105
- border-block-end: none;
106
- overflow-x: hidden;
107
- }
108
- .tabs__tab-label {
109
- max-width: 100%;
110
- text-align: end;
111
- }
112
- }
113
- }
114
-
115
- // Links style.
116
- .wp-block-tabs.is-style-links {
117
- --tabs-divider-color: var(--custom-tab-hover-color, #000);
118
- --tab-bg: transparent;
119
- --tab-bg-hover: transparent;
120
- --tab-bg-active: transparent;
121
- --tab-text: var(--custom-tab-text-color, #000);
122
- --tab-text-hover: var(--custom-tab-hover-text-color, #000);
123
- --tab-text-active: var(--custom-tab-active-text-color, #000);
124
- --tab-border-color: var(--custom-tab-inactive-color, transparent);
125
- --tab-border-color-hover: var(--custom-tab-hover-color, #000);
126
- --tab-border-color-active: var(--custom-tab-active-color, #000);
127
- --tab-underline-width: 2px;
128
-
129
- .tabs__tab-label {
130
- /* preserve extra bottom space for underline */
131
- padding-block-end: 0.5em;
132
- border-bottom: 2px solid var(--tab-border-color);
133
- &[aria-selected="true"] {
134
- background-color: inherit;
135
- color: var(--tab-text-active);
136
- border-color: var(--tab-border-color-active);
137
- }
138
- &:hover:not([aria-selected="true"]) {
139
- background-color: inherit;
140
- color: var(--tab-text-hover);
141
- border-color: var(--tab-border-color-hover);
142
- }
143
- }
144
-
145
- &.is-vertical {
146
- .tabs__list {
147
- border-block-end: none;
148
- border-inline-end: 1px solid var(--tabs-divider-color);
149
- }
150
- .tabs__tab-label {
151
- /* switch underline to side for vertical */
152
- border-block-end: 0;
153
- --tab-underline-width: 0;
154
- --tab-side-border-width: 2px;
155
- padding-block-end: 0;
156
- padding-inline-end: 0.5em;
157
- }
158
- }
159
- }
160
-
161
- // Button style.
162
- .wp-block-tabs.is-style-button {
163
- --tab-border-radius: 9999px;
164
- --tab-bg: var(--custom-tab-inactive-color, transparent);
165
- --tab-bg-hover: var(--custom-tab-hover-color, #000);
166
- --tab-bg-active: var(--custom-tab-active-color, #000);
167
- --tab-text: var(--custom-tab-text-color, #000);
168
- --tab-text-hover: var(--custom-tab-hover-text-color, #000);
169
- --tab-text-active: var(--custom-tab-active-text-color, #000);
170
- --tab-padding-block: 0.5em;
171
- --tab-padding-inline: 1em;
172
-
173
- .tabs__list {
174
- border-block-end: none;
175
- align-items: center;
176
- }
177
-
178
- .tabs__tab-label {
179
- border-width: 0;
180
- &:hover:not([aria-selected="true"]) {
181
- background-color: var(--tab-bg-hover);
182
- }
183
- }
184
-
185
- &.is-vertical {
186
- .tabs__list {
187
- border-block-end: none;
188
- border-inline-end: none;
189
- align-items: flex-end;
190
- }
191
- }
192
6
  }
@@ -0,0 +1,77 @@
1
+ {
2
+ "$schema": "https://schemas.wp.org/trunk/block.json",
3
+ "__experimental": true,
4
+ "apiVersion": 3,
5
+ "name": "core/tabs-menu",
6
+ "title": "Tabs Menu",
7
+ "description": "Display the tab buttons for a tabbed interface.",
8
+ "version": "1.0.0",
9
+ "category": "design",
10
+ "textdomain": "default",
11
+ "parent": [
12
+ "core/tabs"
13
+ ],
14
+ "allowedBlocks": [
15
+ "core/tabs-menu-item"
16
+ ],
17
+ "usesContext": [
18
+ "core/tabs-list",
19
+ "core/tabs-id",
20
+ "core/tabs-activeTabIndex",
21
+ "core/tabs-editorActiveTabIndex"
22
+ ],
23
+ "attributes": {},
24
+ "supports": {
25
+ "html": false,
26
+ "reusable": false,
27
+ "lock": false,
28
+ "dimensions": {
29
+ "aspectRatio": false,
30
+ "height": false,
31
+ "minHeight": false,
32
+ "width": false
33
+ },
34
+ "color": {
35
+ "background": true,
36
+ "text": true,
37
+ "__experimentalDefaultControls": {
38
+ "background": true,
39
+ "text": true
40
+ }
41
+ },
42
+ "typography": {
43
+ "fontSize": true,
44
+ "__experimentalFontFamily": true
45
+ },
46
+ "__experimentalBorder": {
47
+ "color": true,
48
+ "radius": true,
49
+ "style": true,
50
+ "width": true
51
+ },
52
+ "layout": {
53
+ "default": {
54
+ "type": "flex",
55
+ "flexWrap": "nowrap",
56
+ "orientation": "horizontal"
57
+ },
58
+ "allowSwitching": false,
59
+ "allowVerticalAlignment": true,
60
+ "allowJustification": true,
61
+ "allowOrientation": true
62
+ },
63
+ "spacing": {
64
+ "padding": true,
65
+ "margin": true,
66
+ "blockGap": true,
67
+ "__experimentalDefaultControls": {
68
+ "padding": true,
69
+ "margin": true,
70
+ "blockGap": true
71
+ }
72
+ }
73
+ },
74
+ "editorScript": "file:./index.js",
75
+ "editorStyle": "file:./editor.css",
76
+ "style": "file:./style-index.css"
77
+ }