@wordpress/block-library 10.2.0 → 10.3.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 (308) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/build/accordion-panel/block.json +1 -0
  3. package/build/code/edit.cjs +3 -1
  4. package/build/code/edit.cjs.map +2 -2
  5. package/build/cover/block.json +1 -0
  6. package/build/cover/edit/block-controls.cjs +3 -1
  7. package/build/cover/edit/block-controls.cjs.map +2 -2
  8. package/build/cover/edit/index.cjs +75 -31
  9. package/build/cover/edit/index.cjs.map +2 -2
  10. package/build/embed/edit.cjs +1 -1
  11. package/build/embed/edit.cjs.map +2 -2
  12. package/build/embed/embed-placeholder.cjs +1 -1
  13. package/build/embed/embed-placeholder.cjs.map +2 -2
  14. package/build/gallery/dynamic-gallery.cjs +104 -61
  15. package/build/gallery/dynamic-gallery.cjs.map +3 -3
  16. package/build/gallery/use-dynamic-gallery.cjs +15 -8
  17. package/build/gallery/use-dynamic-gallery.cjs.map +2 -2
  18. package/build/heading/edit.cjs +1 -1
  19. package/build/heading/edit.cjs.map +2 -2
  20. package/build/html/modal.cjs +63 -54
  21. package/build/html/modal.cjs.map +3 -3
  22. package/build/icon/block.json +5 -3
  23. package/build/image/edit.cjs +1 -1
  24. package/build/image/edit.cjs.map +2 -2
  25. package/build/image/image.cjs +29 -5
  26. package/build/image/image.cjs.map +3 -3
  27. package/build/image/use-open-image-media-editor-modal.cjs +6 -2
  28. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  29. package/build/list-item/hooks/use-indent-list-item.cjs +10 -2
  30. package/build/list-item/hooks/use-indent-list-item.cjs.map +2 -2
  31. package/build/math/edit.cjs +39 -56
  32. package/build/math/edit.cjs.map +3 -3
  33. package/build/media-text/edit.cjs +2 -1
  34. package/build/media-text/edit.cjs.map +2 -2
  35. package/build/more/edit.cjs +2 -2
  36. package/build/more/edit.cjs.map +2 -2
  37. package/build/navigation/edit/index.cjs +30 -16
  38. package/build/navigation/edit/index.cjs.map +3 -3
  39. package/build/navigation/edit/use-layout-custom-properties.cjs +72 -0
  40. package/build/navigation/edit/use-layout-custom-properties.cjs.map +7 -0
  41. package/build/navigation/view.cjs +9 -6
  42. package/build/navigation/view.cjs.map +2 -2
  43. package/build/navigation-link/edit.cjs +3 -3
  44. package/build/navigation-link/edit.cjs.map +2 -2
  45. package/build/navigation-link/link-ui/index.cjs +2 -2
  46. package/build/navigation-link/link-ui/index.cjs.map +2 -2
  47. package/build/paragraph/block.json +0 -1
  48. package/build/paragraph/edit.cjs +5 -2
  49. package/build/paragraph/edit.cjs.map +3 -3
  50. package/build/paragraph/index.cjs +4 -1
  51. package/build/paragraph/index.cjs.map +2 -2
  52. package/build/playlist/context.cjs +2 -1
  53. package/build/playlist/context.cjs.map +2 -2
  54. package/build/playlist/edit.cjs +113 -26
  55. package/build/playlist/edit.cjs.map +2 -2
  56. package/build/playlist/utils.cjs +19 -4
  57. package/build/playlist/utils.cjs.map +2 -2
  58. package/build/playlist-track/edit.cjs +21 -6
  59. package/build/playlist-track/edit.cjs.map +2 -2
  60. package/build/post-content/edit.cjs +36 -15
  61. package/build/post-content/edit.cjs.map +2 -2
  62. package/build/post-featured-image/edit.cjs +3 -2
  63. package/build/post-featured-image/edit.cjs.map +2 -2
  64. package/build/post-terms/edit.cjs +2 -2
  65. package/build/post-terms/edit.cjs.map +2 -2
  66. package/build/post-title/edit.cjs +2 -2
  67. package/build/post-title/edit.cjs.map +2 -2
  68. package/build/preformatted/edit.cjs +3 -1
  69. package/build/preformatted/edit.cjs.map +2 -2
  70. package/build/pullquote/edit.cjs +5 -3
  71. package/build/pullquote/edit.cjs.map +2 -2
  72. package/build/query/edit/inspector-controls/index.cjs +4 -1
  73. package/build/query/edit/inspector-controls/index.cjs.map +2 -2
  74. package/build/query/edit/inspector-controls/offset-controls.cjs +1 -1
  75. package/build/query/edit/inspector-controls/offset-controls.cjs.map +2 -2
  76. package/build/read-more/edit.cjs +3 -1
  77. package/build/read-more/edit.cjs.map +2 -2
  78. package/build/site-tagline/edit.cjs +3 -1
  79. package/build/site-tagline/edit.cjs.map +2 -2
  80. package/build/site-title/edit.cjs +3 -1
  81. package/build/site-title/edit.cjs.map +2 -2
  82. package/build/social-links/edit.cjs +11 -4
  83. package/build/social-links/edit.cjs.map +2 -2
  84. package/build/tab-list/block.json +2 -1
  85. package/build/tab-list/edit.cjs +2 -0
  86. package/build/tab-list/edit.cjs.map +3 -3
  87. package/build/tab-list/tab-movers.cjs +87 -0
  88. package/build/tab-list/tab-movers.cjs.map +7 -0
  89. package/build/tab-panel/edit.cjs +1 -9
  90. package/build/tab-panel/edit.cjs.map +2 -2
  91. package/build/table/edit.cjs +1 -1
  92. package/build/table/edit.cjs.map +2 -2
  93. package/build/tabs/use-tab-actions.cjs +23 -1
  94. package/build/tabs/use-tab-actions.cjs.map +2 -2
  95. package/build/utils/caption.cjs +2 -2
  96. package/build/utils/caption.cjs.map +2 -2
  97. package/build/verse/edit.cjs +3 -1
  98. package/build/verse/edit.cjs.map +2 -2
  99. package/build/video/tracks-editor.cjs +0 -1
  100. package/build/video/tracks-editor.cjs.map +2 -2
  101. package/build-module/accordion-panel/block.json +1 -0
  102. package/build-module/code/edit.mjs +3 -1
  103. package/build-module/code/edit.mjs.map +2 -2
  104. package/build-module/cover/block.json +1 -0
  105. package/build-module/cover/edit/block-controls.mjs +3 -1
  106. package/build-module/cover/edit/block-controls.mjs.map +2 -2
  107. package/build-module/cover/edit/index.mjs +78 -34
  108. package/build-module/cover/edit/index.mjs.map +2 -2
  109. package/build-module/embed/edit.mjs +1 -1
  110. package/build-module/embed/edit.mjs.map +2 -2
  111. package/build-module/embed/embed-placeholder.mjs +1 -1
  112. package/build-module/embed/embed-placeholder.mjs.map +2 -2
  113. package/build-module/gallery/dynamic-gallery.mjs +104 -61
  114. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  115. package/build-module/gallery/use-dynamic-gallery.mjs +16 -9
  116. package/build-module/gallery/use-dynamic-gallery.mjs.map +2 -2
  117. package/build-module/heading/edit.mjs +1 -1
  118. package/build-module/heading/edit.mjs.map +2 -2
  119. package/build-module/html/modal.mjs +68 -55
  120. package/build-module/html/modal.mjs.map +2 -2
  121. package/build-module/icon/block.json +5 -3
  122. package/build-module/image/edit.mjs +1 -1
  123. package/build-module/image/edit.mjs.map +2 -2
  124. package/build-module/image/image.mjs +19 -5
  125. package/build-module/image/image.mjs.map +2 -2
  126. package/build-module/image/use-open-image-media-editor-modal.mjs +6 -2
  127. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  128. package/build-module/list-item/hooks/use-indent-list-item.mjs +10 -2
  129. package/build-module/list-item/hooks/use-indent-list-item.mjs.map +2 -2
  130. package/build-module/math/edit.mjs +41 -60
  131. package/build-module/math/edit.mjs.map +2 -2
  132. package/build-module/media-text/edit.mjs +2 -1
  133. package/build-module/media-text/edit.mjs.map +2 -2
  134. package/build-module/more/edit.mjs +2 -2
  135. package/build-module/more/edit.mjs.map +2 -2
  136. package/build-module/navigation/edit/index.mjs +30 -16
  137. package/build-module/navigation/edit/index.mjs.map +2 -2
  138. package/build-module/navigation/edit/use-layout-custom-properties.mjs +51 -0
  139. package/build-module/navigation/edit/use-layout-custom-properties.mjs.map +7 -0
  140. package/build-module/navigation/view.mjs +9 -6
  141. package/build-module/navigation/view.mjs.map +2 -2
  142. package/build-module/navigation-link/edit.mjs +3 -3
  143. package/build-module/navigation-link/edit.mjs.map +2 -2
  144. package/build-module/navigation-link/link-ui/index.mjs +2 -2
  145. package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
  146. package/build-module/paragraph/block.json +0 -1
  147. package/build-module/paragraph/edit.mjs +6 -2
  148. package/build-module/paragraph/edit.mjs.map +2 -2
  149. package/build-module/paragraph/index.mjs +4 -1
  150. package/build-module/paragraph/index.mjs.map +2 -2
  151. package/build-module/playlist/context.mjs +2 -1
  152. package/build-module/playlist/context.mjs.map +2 -2
  153. package/build-module/playlist/edit.mjs +113 -27
  154. package/build-module/playlist/edit.mjs.map +2 -2
  155. package/build-module/playlist/utils.mjs +19 -4
  156. package/build-module/playlist/utils.mjs.map +2 -2
  157. package/build-module/playlist-track/edit.mjs +21 -6
  158. package/build-module/playlist-track/edit.mjs.map +2 -2
  159. package/build-module/post-content/edit.mjs +37 -15
  160. package/build-module/post-content/edit.mjs.map +2 -2
  161. package/build-module/post-featured-image/edit.mjs +3 -2
  162. package/build-module/post-featured-image/edit.mjs.map +2 -2
  163. package/build-module/post-terms/edit.mjs +2 -2
  164. package/build-module/post-terms/edit.mjs.map +2 -2
  165. package/build-module/post-title/edit.mjs +2 -2
  166. package/build-module/post-title/edit.mjs.map +2 -2
  167. package/build-module/preformatted/edit.mjs +3 -1
  168. package/build-module/preformatted/edit.mjs.map +2 -2
  169. package/build-module/pullquote/edit.mjs +5 -3
  170. package/build-module/pullquote/edit.mjs.map +2 -2
  171. package/build-module/query/edit/inspector-controls/index.mjs +5 -2
  172. package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
  173. package/build-module/query/edit/inspector-controls/offset-controls.mjs +2 -2
  174. package/build-module/query/edit/inspector-controls/offset-controls.mjs.map +2 -2
  175. package/build-module/read-more/edit.mjs +3 -1
  176. package/build-module/read-more/edit.mjs.map +2 -2
  177. package/build-module/site-tagline/edit.mjs +3 -1
  178. package/build-module/site-tagline/edit.mjs.map +2 -2
  179. package/build-module/site-title/edit.mjs +3 -1
  180. package/build-module/site-title/edit.mjs.map +2 -2
  181. package/build-module/social-links/edit.mjs +11 -4
  182. package/build-module/social-links/edit.mjs.map +2 -2
  183. package/build-module/tab-list/block.json +2 -1
  184. package/build-module/tab-list/edit.mjs +2 -0
  185. package/build-module/tab-list/edit.mjs.map +2 -2
  186. package/build-module/tab-list/tab-movers.mjs +59 -0
  187. package/build-module/tab-list/tab-movers.mjs.map +7 -0
  188. package/build-module/tab-panel/edit.mjs +1 -9
  189. package/build-module/tab-panel/edit.mjs.map +2 -2
  190. package/build-module/table/edit.mjs +1 -1
  191. package/build-module/table/edit.mjs.map +2 -2
  192. package/build-module/tabs/use-tab-actions.mjs +23 -1
  193. package/build-module/tabs/use-tab-actions.mjs.map +2 -2
  194. package/build-module/utils/caption.mjs +2 -2
  195. package/build-module/utils/caption.mjs.map +2 -2
  196. package/build-module/verse/edit.mjs +3 -1
  197. package/build-module/verse/edit.mjs.map +2 -2
  198. package/build-module/video/tracks-editor.mjs +0 -1
  199. package/build-module/video/tracks-editor.mjs.map +2 -2
  200. package/build-style/cover/editor-rtl.css +3 -0
  201. package/build-style/cover/editor.css +3 -0
  202. package/build-style/editor-rtl.css +18 -41
  203. package/build-style/editor.css +18 -41
  204. package/build-style/icon/editor-rtl.css +1 -4
  205. package/build-style/icon/editor.css +1 -4
  206. package/build-style/image/editor-rtl.css +3 -32
  207. package/build-style/image/editor.css +3 -32
  208. package/build-style/playlist/editor-rtl.css +0 -5
  209. package/build-style/playlist/editor.css +0 -5
  210. package/build-style/playlist/style-rtl.css +44 -4
  211. package/build-style/playlist/style.css +44 -4
  212. package/build-style/pullquote/editor-rtl.css +4 -0
  213. package/build-style/pullquote/editor.css +4 -0
  214. package/build-style/style-rtl.css +44 -4
  215. package/build-style/style.css +44 -4
  216. package/build-style/tab-list/editor-rtl.css +101 -0
  217. package/build-style/tab-list/editor.css +101 -0
  218. package/package.json +43 -43
  219. package/src/accordion-panel/block.json +1 -0
  220. package/src/breadcrumbs/index.php +3 -1
  221. package/src/button/index.php +1 -1
  222. package/src/code/edit.js +7 -2
  223. package/src/cover/block.json +1 -0
  224. package/src/cover/edit/block-controls.js +5 -0
  225. package/src/cover/edit/index.js +100 -35
  226. package/src/cover/editor.scss +6 -0
  227. package/src/cover/index.php +9 -2
  228. package/src/editor.scss +1 -0
  229. package/src/embed/edit.js +3 -1
  230. package/src/embed/embed-placeholder.js +9 -7
  231. package/src/form/index.php +6 -4
  232. package/src/gallery/dynamic-gallery.js +133 -74
  233. package/src/gallery/use-dynamic-gallery.js +27 -12
  234. package/src/heading/edit.js +1 -1
  235. package/src/html/modal.js +13 -2
  236. package/src/icon/README.md +1 -3
  237. package/src/icon/block.json +5 -3
  238. package/src/icon/editor.scss +1 -4
  239. package/src/image/edit.js +1 -5
  240. package/src/image/editor.scss +6 -46
  241. package/src/image/image.js +37 -3
  242. package/src/image/test/use-open-image-media-editor-modal.js +37 -1
  243. package/src/image/use-open-image-media-editor-modal.js +8 -1
  244. package/src/latest-posts/index.php +3 -2
  245. package/src/list-item/hooks/use-indent-list-item.js +10 -1
  246. package/src/math/edit.js +42 -59
  247. package/src/media-text/edit.js +1 -0
  248. package/src/media-text/index.php +11 -2
  249. package/src/more/edit.js +7 -4
  250. package/src/navigation/edit/index.js +52 -36
  251. package/src/navigation/edit/test/layout-custom-properties.js +138 -0
  252. package/src/navigation/edit/use-layout-custom-properties.js +84 -0
  253. package/src/navigation/index.php +123 -12
  254. package/src/navigation/test/view.js +51 -0
  255. package/src/navigation/view.js +15 -14
  256. package/src/navigation-link/edit.js +11 -7
  257. package/src/navigation-link/index.php +64 -0
  258. package/src/navigation-link/link-ui/index.js +2 -1
  259. package/src/navigation-link/test/__snapshots__/hooks.js.snap +1 -1
  260. package/src/page-list/index.php +4 -3
  261. package/src/paragraph/README.md +0 -1
  262. package/src/paragraph/block.json +0 -1
  263. package/src/paragraph/edit.js +9 -2
  264. package/src/paragraph/index.js +4 -1
  265. package/src/pattern/index.php +5 -5
  266. package/src/playlist/context.js +1 -0
  267. package/src/playlist/edit.js +151 -47
  268. package/src/playlist/editor.scss +0 -7
  269. package/src/playlist/index.php +14 -9
  270. package/src/playlist/style.scss +3 -0
  271. package/src/playlist/test/edit-component.js +139 -0
  272. package/src/playlist/test/edit.js +30 -0
  273. package/src/playlist/utils.js +25 -4
  274. package/src/playlist-track/edit.js +22 -5
  275. package/src/playlist-track/index.php +8 -7
  276. package/src/playlist-track/test/edit.js +87 -3
  277. package/src/post-content/edit.js +45 -16
  278. package/src/post-excerpt/index.php +4 -1
  279. package/src/post-featured-image/edit.js +3 -2
  280. package/src/post-featured-image/index.php +4 -1
  281. package/src/post-terms/edit.js +7 -4
  282. package/src/post-title/edit.js +5 -3
  283. package/src/preformatted/edit.js +7 -2
  284. package/src/pullquote/edit.js +9 -4
  285. package/src/pullquote/editor.scss +6 -0
  286. package/src/query/edit/inspector-controls/index.js +5 -2
  287. package/src/query/edit/inspector-controls/offset-controls.js +2 -2
  288. package/src/read-more/edit.js +7 -2
  289. package/src/rss/index.php +9 -3
  290. package/src/site-tagline/edit.js +7 -2
  291. package/src/site-title/edit.js +7 -2
  292. package/src/social-link/index.php +19 -9
  293. package/src/social-links/edit.js +21 -12
  294. package/src/tab-list/block.json +2 -1
  295. package/src/tab-list/edit.js +2 -0
  296. package/src/tab-list/editor.scss +9 -0
  297. package/src/tab-list/tab-movers.js +72 -0
  298. package/src/tab-panel/edit.js +1 -9
  299. package/src/table/edit.js +1 -1
  300. package/src/table-of-contents/index.php +386 -1
  301. package/src/tabs/use-tab-actions.js +32 -3
  302. package/src/tag-cloud/index.php +3 -2
  303. package/src/template-part/index.php +2 -1
  304. package/src/utils/caption.js +7 -4
  305. package/src/utils/test/waveform-utils.js +63 -0
  306. package/src/verse/edit.js +7 -2
  307. package/src/video/index.php +2 -2
  308. package/src/video/tracks-editor.js +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs/use-tab-actions.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { createBlock } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useDispatch, useRegistry } from '@wordpress/data';\n\n/**\n * Provides callbacks to insert and remove tabs for a tabs block.\n *\n * The hook intentionally avoids subscribing to the store: all data is derived\n * lazily inside the callbacks via `registry.select`, so consumers don't\n * re-render when the tab structure changes.\n *\n * @param {string|null} tabsClientId The client ID of the parent tabs block.\n * @return {{ insertTab: Function, removeTab: Function }} Tab action callbacks.\n */\nexport default function useTabActions( tabsClientId ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tinsertBlock,\n\t\tremoveBlock,\n\t\tupdateBlockAttributes,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\t// Derive the current tabs state at call time without subscribing.\n\tconst getTabsState = () => {\n\t\tconst { getBlocks, getBlockAttributes } =\n\t\t\tregistry.select( blockEditorStore );\n\n\t\tconst tabsAttributes = tabsClientId\n\t\t\t? getBlockAttributes( tabsClientId )\n\t\t\t: undefined;\n\t\tconst tabPanels = tabsClientId\n\t\t\t? getBlocks( tabsClientId ).find(\n\t\t\t\t\t( block ) => block.name === 'core/tab-panels'\n\t\t\t )\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\ttabPanelsClientId: tabPanels?.clientId ?? null,\n\t\t\ttabPanelBlocks: tabPanels?.innerBlocks ?? [],\n\t\t\tactiveIndex:\n\t\t\t\ttabsAttributes?.editorActiveTabIndex ??\n\t\t\t\ttabsAttributes?.activeTabIndex ??\n\t\t\t\t0,\n\t\t};\n\t};\n\n\t// Insert a new tab and make it active. Defaults to appending at the end.\n\tconst insertTab = ( atIndex ) => {\n\t\tconst { tabPanelsClientId, tabPanelBlocks } = getTabsState();\n\t\tif ( ! tabPanelsClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newIndex = atIndex ?? tabPanelBlocks.length;\n\t\tinsertBlock(\n\t\t\tcreateBlock( 'core/tab-panel', { label: __( 'Tab' ) } ),\n\t\t\tnewIndex,\n\t\t\ttabPanelsClientId,\n\t\t\tfalse\n\t\t);\n\n\t\t// Switch editor active tab to the new tab.\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\teditorActiveTabIndex: newIndex,\n\t\t} );\n\t};\n\n\t// Remove a tab and move the active tab to an adjacent one. Defaults to the\n\t// currently active tab.\n\tconst removeTab = ( atIndex ) => {\n\t\tconst { tabPanelBlocks, activeIndex } = getTabsState();\n\t\tconst tabCount = tabPanelBlocks.length;\n\t\tif ( tabCount <= 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst removeIndex = atIndex ?? activeIndex;\n\t\tconst target = tabPanelBlocks[ removeIndex ];\n\t\tif ( ! target ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Calculate new active index after removal.\n\t\tconst newActiveIndex =\n\t\t\tremoveIndex >= tabCount - 1 ? tabCount - 2 : removeIndex;\n\n\t\t// Switch editor to the adjacent tab and remove the current one.\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\teditorActiveTabIndex: newActiveIndex,\n\t\t} );\n\t\tremoveBlock( target.clientId, false );\n\t};\n\n\treturn { insertTab, removeTab };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAmB;AACnB,oBAA4B;AAC5B,0BAA0C;AAC1C,kBAAyC;AAY1B,SAAR,cAAgC,cAAe;AACrD,QAAM,eAAW,yBAAY;AAC7B,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,QAAI,yBAAa,oBAAAA,KAAiB;AAGlC,QAAM,eAAe,MAAM;AAC1B,UAAM,EAAE,WAAW,mBAAmB,IACrC,SAAS,OAAQ,oBAAAA,KAAiB;AAEnC,UAAM,iBAAiB,eACpB,mBAAoB,YAAa,IACjC;AACH,UAAM,YAAY,eACf,UAAW,YAAa,EAAE;AAAA,MAC1B,CAAE,UAAW,MAAM,SAAS;AAAA,IAC5B,IACA;AAEH,WAAO;AAAA,MACN,mBAAmB,WAAW,YAAY;AAAA,MAC1C,gBAAgB,WAAW,eAAe,CAAC;AAAA,MAC3C,aACC,gBAAgB,wBAChB,gBAAgB,kBAChB;AAAA,IACF;AAAA,EACD;AAGA,QAAM,YAAY,CAAE,YAAa;AAChC,UAAM,EAAE,mBAAmB,eAAe,IAAI,aAAa;AAC3D,QAAK,CAAE,mBAAoB;AAC1B;AAAA,IACD;AAEA,UAAM,WAAW,WAAW,eAAe;AAC3C;AAAA,UACC,2BAAa,kBAAkB,EAAE,WAAO,gBAAI,KAAM,EAAE,CAAE;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAGA,4CAAwC;AACxC,0BAAuB,cAAc;AAAA,MACpC,sBAAsB;AAAA,IACvB,CAAE;AAAA,EACH;AAIA,QAAM,YAAY,CAAE,YAAa;AAChC,UAAM,EAAE,gBAAgB,YAAY,IAAI,aAAa;AACrD,UAAM,WAAW,eAAe;AAChC,QAAK,YAAY,GAAI;AACpB;AAAA,IACD;AAEA,UAAM,cAAc,WAAW;AAC/B,UAAM,SAAS,eAAgB,WAAY;AAC3C,QAAK,CAAE,QAAS;AACf;AAAA,IACD;AAGA,UAAM,iBACL,eAAe,WAAW,IAAI,WAAW,IAAI;AAG9C,4CAAwC;AACxC,0BAAuB,cAAc;AAAA,MACpC,sBAAsB;AAAA,IACvB,CAAE;AACF,gBAAa,OAAO,UAAU,KAAM;AAAA,EACrC;AAEA,SAAO,EAAE,WAAW,UAAU;AAC/B;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { createBlock } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useDispatch, useRegistry } from '@wordpress/data';\n\n/**\n * Provides callbacks to insert, remove and move tabs for a tabs block.\n *\n * The hook intentionally avoids subscribing to the store: all data is derived\n * lazily inside the callbacks via `registry.select`, so consumers don't\n * re-render when the tab structure changes.\n *\n * @param {string|null} tabsClientId The client ID of the parent tabs block.\n * @return {{ insertTab: Function, removeTab: Function, moveTab: Function }} Tab action callbacks.\n */\nexport default function useTabActions( tabsClientId ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tinsertBlock,\n\t\tremoveBlock,\n\t\tmoveBlocksToPosition,\n\t\tupdateBlockAttributes,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\t// Derive the current tabs state at call time without subscribing.\n\tconst getTabsState = () => {\n\t\tconst { getBlocks, getBlockAttributes } =\n\t\t\tregistry.select( blockEditorStore );\n\n\t\tconst tabsAttributes = tabsClientId\n\t\t\t? getBlockAttributes( tabsClientId )\n\t\t\t: undefined;\n\t\tconst tabPanels = tabsClientId\n\t\t\t? getBlocks( tabsClientId ).find(\n\t\t\t\t\t( block ) => block.name === 'core/tab-panels'\n\t\t\t )\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\ttabPanelsClientId: tabPanels?.clientId ?? null,\n\t\t\ttabPanelBlocks: tabPanels?.innerBlocks ?? [],\n\t\t\tactiveIndex:\n\t\t\t\ttabsAttributes?.editorActiveTabIndex ??\n\t\t\t\ttabsAttributes?.activeTabIndex ??\n\t\t\t\t0,\n\t\t};\n\t};\n\n\t// Insert a new tab and make it active. Defaults to appending at the end.\n\tconst insertTab = ( atIndex ) => {\n\t\tconst { tabPanelsClientId, tabPanelBlocks } = getTabsState();\n\t\tif ( ! tabPanelsClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newIndex = atIndex ?? tabPanelBlocks.length;\n\t\tinsertBlock(\n\t\t\tcreateBlock( 'core/tab-panel', { label: __( 'Tab' ) } ),\n\t\t\tnewIndex,\n\t\t\ttabPanelsClientId,\n\t\t\tfalse\n\t\t);\n\n\t\t// Switch editor active tab to the new tab.\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\teditorActiveTabIndex: newIndex,\n\t\t} );\n\t};\n\n\t// Remove a tab and move the active tab to an adjacent one. Defaults to the\n\t// currently active tab.\n\tconst removeTab = ( atIndex ) => {\n\t\tconst { tabPanelBlocks, activeIndex } = getTabsState();\n\t\tconst tabCount = tabPanelBlocks.length;\n\t\tif ( tabCount <= 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst removeIndex = atIndex ?? activeIndex;\n\t\tconst target = tabPanelBlocks[ removeIndex ];\n\t\tif ( ! target ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Calculate new active index after removal.\n\t\tconst newActiveIndex =\n\t\t\tremoveIndex >= tabCount - 1 ? tabCount - 2 : removeIndex;\n\n\t\t// Switch editor to the adjacent tab and remove the current one.\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\teditorActiveTabIndex: newActiveIndex,\n\t\t} );\n\t\tremoveBlock( target.clientId, false );\n\t};\n\n\t// Move the active tab one position left or right by reordering the\n\t// underlying tab-panel. The tab-list labels follow their panel\n\t// automatically via useTabListItemsSync.\n\tconst moveTab = ( direction ) => {\n\t\tconst { tabPanelsClientId, tabPanelBlocks, activeIndex } =\n\t\t\tgetTabsState();\n\t\tif ( ! tabPanelsClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst toIndex = activeIndex + direction;\n\t\tconst target = tabPanelBlocks[ activeIndex ];\n\t\tif ( ! target || toIndex < 0 || toIndex >= tabPanelBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\teditorActiveTabIndex: toIndex,\n\t\t} );\n\t\tmoveBlocksToPosition(\n\t\t\t[ target.clientId ],\n\t\t\ttabPanelsClientId,\n\t\t\ttabPanelsClientId,\n\t\t\ttoIndex\n\t\t);\n\t};\n\n\treturn { insertTab, removeTab, moveTab };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAmB;AACnB,oBAA4B;AAC5B,0BAA0C;AAC1C,kBAAyC;AAY1B,SAAR,cAAgC,cAAe;AACrD,QAAM,eAAW,yBAAY;AAC7B,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,QAAI,yBAAa,oBAAAA,KAAiB;AAGlC,QAAM,eAAe,MAAM;AAC1B,UAAM,EAAE,WAAW,mBAAmB,IACrC,SAAS,OAAQ,oBAAAA,KAAiB;AAEnC,UAAM,iBAAiB,eACpB,mBAAoB,YAAa,IACjC;AACH,UAAM,YAAY,eACf,UAAW,YAAa,EAAE;AAAA,MAC1B,CAAE,UAAW,MAAM,SAAS;AAAA,IAC5B,IACA;AAEH,WAAO;AAAA,MACN,mBAAmB,WAAW,YAAY;AAAA,MAC1C,gBAAgB,WAAW,eAAe,CAAC;AAAA,MAC3C,aACC,gBAAgB,wBAChB,gBAAgB,kBAChB;AAAA,IACF;AAAA,EACD;AAGA,QAAM,YAAY,CAAE,YAAa;AAChC,UAAM,EAAE,mBAAmB,eAAe,IAAI,aAAa;AAC3D,QAAK,CAAE,mBAAoB;AAC1B;AAAA,IACD;AAEA,UAAM,WAAW,WAAW,eAAe;AAC3C;AAAA,UACC,2BAAa,kBAAkB,EAAE,WAAO,gBAAI,KAAM,EAAE,CAAE;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAGA,4CAAwC;AACxC,0BAAuB,cAAc;AAAA,MACpC,sBAAsB;AAAA,IACvB,CAAE;AAAA,EACH;AAIA,QAAM,YAAY,CAAE,YAAa;AAChC,UAAM,EAAE,gBAAgB,YAAY,IAAI,aAAa;AACrD,UAAM,WAAW,eAAe;AAChC,QAAK,YAAY,GAAI;AACpB;AAAA,IACD;AAEA,UAAM,cAAc,WAAW;AAC/B,UAAM,SAAS,eAAgB,WAAY;AAC3C,QAAK,CAAE,QAAS;AACf;AAAA,IACD;AAGA,UAAM,iBACL,eAAe,WAAW,IAAI,WAAW,IAAI;AAG9C,4CAAwC;AACxC,0BAAuB,cAAc;AAAA,MACpC,sBAAsB;AAAA,IACvB,CAAE;AACF,gBAAa,OAAO,UAAU,KAAM;AAAA,EACrC;AAKA,QAAM,UAAU,CAAE,cAAe;AAChC,UAAM,EAAE,mBAAmB,gBAAgB,YAAY,IACtD,aAAa;AACd,QAAK,CAAE,mBAAoB;AAC1B;AAAA,IACD;AAEA,UAAM,UAAU,cAAc;AAC9B,UAAM,SAAS,eAAgB,WAAY;AAC3C,QAAK,CAAE,UAAU,UAAU,KAAK,WAAW,eAAe,QAAS;AAClE;AAAA,IACD;AAEA,4CAAwC;AACxC,0BAAuB,cAAc;AAAA,MACpC,sBAAsB;AAAA,IACvB,CAAE;AACF;AAAA,MACC,CAAE,OAAO,QAAS;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,SAAO,EAAE,WAAW,WAAW,QAAQ;AACxC;",
6
6
  "names": ["blockEditorStore"]
7
7
  }
@@ -115,9 +115,9 @@ function Caption({
115
115
  value: caption,
116
116
  onChange: (value) => setAttributes({ [attributeKey]: value }),
117
117
  inlineToolbar: true,
118
- __unstableOnSplitAtEnd: () => insertBlocksAfter(
118
+ __unstableOnSplitAtEnd: insertBlocksAfter ? () => insertBlocksAfter(
119
119
  (0, import_blocks.createBlock)((0, import_blocks.getDefaultBlockName)())
120
- ),
120
+ ) : void 0,
121
121
  readOnly,
122
122
  ...props
123
123
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/caption.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport { usePrevious } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\t__experimentalGetElementClassName,\n\tRichText,\n} from '@wordpress/block-editor';\nimport { ToolbarButton } from '@wordpress/components';\nimport { caption as captionIcon } from '@wordpress/icons';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\n\nexport function Caption( {\n\tattributeKey = 'caption',\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tplaceholder = __( 'Add caption' ),\n\tlabel = __( 'Caption text' ),\n\tshowToolbarButton = true,\n\texcludeElementClassName,\n\tclassName,\n\treadOnly,\n\ttagName = 'figcaption',\n\taddLabel = __( 'Add caption' ),\n\tremoveLabel = __( 'Remove caption' ),\n\ticon = captionIcon,\n\t...props\n} ) {\n\tconst caption = attributes[ attributeKey ];\n\tconst prevCaption = usePrevious( caption );\n\tconst isCaptionEmpty = RichText.isEmpty( caption );\n\tconst isPrevCaptionEmpty = RichText.isEmpty( prevCaption );\n\tconst [ showCaption, setShowCaption ] = useState( ! isCaptionEmpty );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( ! isCaptionEmpty && isPrevCaptionEmpty ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ isCaptionEmpty, isPrevCaptionEmpty ] );\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected && isCaptionEmpty ) {\n\t\t\tsetShowCaption( false );\n\t\t}\n\t}, [ isSelected, isCaptionEmpty ] );\n\n\t// Focus the caption when we click to add one.\n\tconst ref = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && isCaptionEmpty ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ isCaptionEmpty ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{ showToolbarButton && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t[ attributeKey ]: undefined,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={ showCaption ? removeLabel : addLabel }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier={ attributeKey }\n\t\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\texcludeElementClassName\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: __experimentalGetElementClassName( 'caption' )\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { [ attributeKey ]: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treadOnly={ readOnly }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AAKjB,qBAAiD;AACjD,qBAA4B;AAC5B,kBAAmB;AACnB,0BAIO;AACP,wBAA8B;AAC9B,mBAAuC;AACvC,oBAAiD;AAmD/C;AAjDK,SAAS,QAAS;AAAA,EACxB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAc,gBAAI,aAAc;AAAA,EAChC,YAAQ,gBAAI,cAAe;AAAA,EAC3B,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,eAAW,gBAAI,aAAc;AAAA,EAC7B,kBAAc,gBAAI,gBAAiB;AAAA,EACnC,OAAO,aAAAA;AAAA,EACP,GAAG;AACJ,GAAI;AACH,QAAM,UAAU,WAAY,YAAa;AACzC,QAAM,kBAAc,4BAAa,OAAQ;AACzC,QAAM,iBAAiB,6BAAS,QAAS,OAAQ;AACjD,QAAM,qBAAqB,6BAAS,QAAS,WAAY;AACzD,QAAM,CAAE,aAAa,cAAe,QAAI,yBAAU,CAAE,cAAe;AAInE,gCAAW,MAAM;AAChB,QAAK,CAAE,kBAAkB,oBAAqB;AAC7C,qBAAgB,IAAK;AAAA,IACtB;AAAA,EACD,GAAG,CAAE,gBAAgB,kBAAmB,CAAE;AAE1C,gCAAW,MAAM;AAChB,QAAK,CAAE,cAAc,gBAAiB;AACrC,qBAAgB,KAAM;AAAA,IACvB;AAAA,EACD,GAAG,CAAE,YAAY,cAAe,CAAE;AAGlC,QAAM,UAAM;AAAA,IACX,CAAE,SAAU;AACX,UAAK,QAAQ,gBAAiB;AAC7B,aAAK,MAAM;AAAA,MACZ;AAAA,IACD;AAAA,IACA,CAAE,cAAe;AAAA,EAClB;AAEA,SACC,4EACG;AAAA,yBACD,4CAAC,qCAAc,OAAM,SACpB;AAAA,MAAC;AAAA;AAAA,QACA,SAAU,MAAM;AACf,yBAAgB,CAAE,WAAY;AAC9B,cAAK,eAAe,SAAU;AAC7B,0BAAe;AAAA,cACd,CAAE,YAAa,GAAG;AAAA,YACnB,CAAE;AAAA,UACH;AAAA,QACD;AAAA,QACA;AAAA,QACA,WAAY;AAAA,QACZ,OAAQ,cAAc,cAAc;AAAA;AAAA,IACrC,GACD;AAAA,IAEC,gBACC,CAAE,6BAAS,QAAS,OAAQ,KAAK,eAClC;AAAA,MAAC;AAAA;AAAA,QACA,YAAa;AAAA,QACb;AAAA,QACA,eAAY,YAAAC;AAAA,UACX;AAAA,UACA,0BACG,SACA,uDAAmC,SAAU;AAAA,QACjD;AAAA,QACA;AAAA,QACA,cAAa;AAAA,QACb;AAAA,QACA,OAAQ;AAAA,QACR,UAAW,CAAE,UACZ,cAAe,EAAE,CAAE,YAAa,GAAG,MAAM,CAAE;AAAA,QAE5C,eAAa;AAAA,QACb,wBAAyB,MACxB;AAAA,cACC,+BAAa,mCAAoB,CAAE;AAAA,QACpC;AAAA,QAED;AAAA,QACE,GAAG;AAAA;AAAA,IACN;AAAA,KAEH;AAEF;",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport { usePrevious } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\t__experimentalGetElementClassName,\n\tRichText,\n} from '@wordpress/block-editor';\nimport { ToolbarButton } from '@wordpress/components';\nimport { caption as captionIcon } from '@wordpress/icons';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\n\nexport function Caption( {\n\tattributeKey = 'caption',\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tplaceholder = __( 'Add caption' ),\n\tlabel = __( 'Caption text' ),\n\tshowToolbarButton = true,\n\texcludeElementClassName,\n\tclassName,\n\treadOnly,\n\ttagName = 'figcaption',\n\taddLabel = __( 'Add caption' ),\n\tremoveLabel = __( 'Remove caption' ),\n\ticon = captionIcon,\n\t...props\n} ) {\n\tconst caption = attributes[ attributeKey ];\n\tconst prevCaption = usePrevious( caption );\n\tconst isCaptionEmpty = RichText.isEmpty( caption );\n\tconst isPrevCaptionEmpty = RichText.isEmpty( prevCaption );\n\tconst [ showCaption, setShowCaption ] = useState( ! isCaptionEmpty );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( ! isCaptionEmpty && isPrevCaptionEmpty ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ isCaptionEmpty, isPrevCaptionEmpty ] );\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected && isCaptionEmpty ) {\n\t\t\tsetShowCaption( false );\n\t\t}\n\t}, [ isSelected, isCaptionEmpty ] );\n\n\t// Focus the caption when we click to add one.\n\tconst ref = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && isCaptionEmpty ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ isCaptionEmpty ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{ showToolbarButton && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t[ attributeKey ]: undefined,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={ showCaption ? removeLabel : addLabel }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier={ attributeKey }\n\t\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\texcludeElementClassName\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: __experimentalGetElementClassName( 'caption' )\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { [ attributeKey ]: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={\n\t\t\t\t\t\t\tinsertBlocksAfter\n\t\t\t\t\t\t\t\t? () =>\n\t\t\t\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\treadOnly={ readOnly }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AAKjB,qBAAiD;AACjD,qBAA4B;AAC5B,kBAAmB;AACnB,0BAIO;AACP,wBAA8B;AAC9B,mBAAuC;AACvC,oBAAiD;AAmD/C;AAjDK,SAAS,QAAS;AAAA,EACxB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAc,gBAAI,aAAc;AAAA,EAChC,YAAQ,gBAAI,cAAe;AAAA,EAC3B,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,eAAW,gBAAI,aAAc;AAAA,EAC7B,kBAAc,gBAAI,gBAAiB;AAAA,EACnC,OAAO,aAAAA;AAAA,EACP,GAAG;AACJ,GAAI;AACH,QAAM,UAAU,WAAY,YAAa;AACzC,QAAM,kBAAc,4BAAa,OAAQ;AACzC,QAAM,iBAAiB,6BAAS,QAAS,OAAQ;AACjD,QAAM,qBAAqB,6BAAS,QAAS,WAAY;AACzD,QAAM,CAAE,aAAa,cAAe,QAAI,yBAAU,CAAE,cAAe;AAInE,gCAAW,MAAM;AAChB,QAAK,CAAE,kBAAkB,oBAAqB;AAC7C,qBAAgB,IAAK;AAAA,IACtB;AAAA,EACD,GAAG,CAAE,gBAAgB,kBAAmB,CAAE;AAE1C,gCAAW,MAAM;AAChB,QAAK,CAAE,cAAc,gBAAiB;AACrC,qBAAgB,KAAM;AAAA,IACvB;AAAA,EACD,GAAG,CAAE,YAAY,cAAe,CAAE;AAGlC,QAAM,UAAM;AAAA,IACX,CAAE,SAAU;AACX,UAAK,QAAQ,gBAAiB;AAC7B,aAAK,MAAM;AAAA,MACZ;AAAA,IACD;AAAA,IACA,CAAE,cAAe;AAAA,EAClB;AAEA,SACC,4EACG;AAAA,yBACD,4CAAC,qCAAc,OAAM,SACpB;AAAA,MAAC;AAAA;AAAA,QACA,SAAU,MAAM;AACf,yBAAgB,CAAE,WAAY;AAC9B,cAAK,eAAe,SAAU;AAC7B,0BAAe;AAAA,cACd,CAAE,YAAa,GAAG;AAAA,YACnB,CAAE;AAAA,UACH;AAAA,QACD;AAAA,QACA;AAAA,QACA,WAAY;AAAA,QACZ,OAAQ,cAAc,cAAc;AAAA;AAAA,IACrC,GACD;AAAA,IAEC,gBACC,CAAE,6BAAS,QAAS,OAAQ,KAAK,eAClC;AAAA,MAAC;AAAA;AAAA,QACA,YAAa;AAAA,QACb;AAAA,QACA,eAAY,YAAAC;AAAA,UACX;AAAA,UACA,0BACG,SACA,uDAAmC,SAAU;AAAA,QACjD;AAAA,QACA;AAAA,QACA,cAAa;AAAA,QACb;AAAA,QACA,OAAQ;AAAA,QACR,UAAW,CAAE,UACZ,cAAe,EAAE,CAAE,YAAa,GAAG,MAAM,CAAE;AAAA,QAE5C,eAAa;AAAA,QACb,wBACC,oBACG,MACA;AAAA,cACC,+BAAa,mCAAoB,CAAE;AAAA,QACpC,IACA;AAAA,QAEJ;AAAA,QACE,GAAG;AAAA;AAAA,IACN;AAAA,KAEH;AAEF;",
6
6
  "names": ["captionIcon", "clsx"]
7
7
  }
@@ -68,7 +68,9 @@ function VerseEdit(props) {
68
68
  onMerge: mergeBlocks,
69
69
  ...blockProps,
70
70
  __unstablePastePlainText: true,
71
- __unstableOnSplitAtDoubleLineEnd: () => insertBlocksAfter((0, import_blocks.createBlock)((0, import_blocks.getDefaultBlockName)()))
71
+ __unstableOnSplitAtDoubleLineEnd: insertBlocksAfter ? () => insertBlocksAfter(
72
+ (0, import_blocks.createBlock)((0, import_blocks.getDefaultBlockName)())
73
+ ) : void 0
72
74
  }
73
75
  );
74
76
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/verse/edit.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { RichText, useBlockProps } from '@wordpress/block-editor';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useDeprecatedTextAlign from '../utils/deprecated-text-align-attributes';\n\nexport default function VerseEdit( props ) {\n\tconst {\n\t\tattributes,\n\t\tsetAttributes,\n\t\tmergeBlocks,\n\t\tonRemove,\n\t\tinsertBlocksAfter,\n\t\tstyle,\n\t} = props;\n\tconst { content } = attributes;\n\tuseDeprecatedTextAlign( props );\n\tconst blockProps = useBlockProps( { style } );\n\n\treturn (\n\t\t<RichText\n\t\t\ttagName=\"pre\"\n\t\t\tidentifier=\"content\"\n\t\t\tpreserveWhiteSpace\n\t\t\tvalue={ content }\n\t\t\tonChange={ ( nextContent ) => {\n\t\t\t\tsetAttributes( {\n\t\t\t\t\tcontent: nextContent,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\taria-label={ __( 'Poetry text' ) }\n\t\t\tplaceholder={ __( 'Write poetry…' ) }\n\t\t\tonRemove={ onRemove }\n\t\t\tonMerge={ mergeBlocks }\n\t\t\t{ ...blockProps }\n\t\t\t__unstablePastePlainText\n\t\t\t__unstableOnSplitAtDoubleLineEnd={ () =>\n\t\t\t\tinsertBlocksAfter( createBlock( getDefaultBlockName() ) )\n\t\t\t}\n\t\t/>\n\t);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAmB;AACnB,0BAAwC;AACxC,oBAAiD;AAKjD,8CAAmC;AAgBjC;AAda,SAAR,UAA4B,OAAQ;AAC1C,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI;AACJ,QAAM,EAAE,QAAQ,IAAI;AACpB,8CAAAA,SAAwB,KAAM;AAC9B,QAAM,iBAAa,mCAAe,EAAE,MAAM,CAAE;AAE5C,SACC;AAAA,IAAC;AAAA;AAAA,MACA,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,oBAAkB;AAAA,MAClB,OAAQ;AAAA,MACR,UAAW,CAAE,gBAAiB;AAC7B,sBAAe;AAAA,UACd,SAAS;AAAA,QACV,CAAE;AAAA,MACH;AAAA,MACA,kBAAa,gBAAI,aAAc;AAAA,MAC/B,iBAAc,gBAAI,eAAgB;AAAA,MAClC;AAAA,MACA,SAAU;AAAA,MACR,GAAG;AAAA,MACL,0BAAwB;AAAA,MACxB,kCAAmC,MAClC,sBAAmB,+BAAa,mCAAoB,CAAE,CAAE;AAAA;AAAA,EAE1D;AAEF;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { RichText, useBlockProps } from '@wordpress/block-editor';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useDeprecatedTextAlign from '../utils/deprecated-text-align-attributes';\n\nexport default function VerseEdit( props ) {\n\tconst {\n\t\tattributes,\n\t\tsetAttributes,\n\t\tmergeBlocks,\n\t\tonRemove,\n\t\tinsertBlocksAfter,\n\t\tstyle,\n\t} = props;\n\tconst { content } = attributes;\n\tuseDeprecatedTextAlign( props );\n\tconst blockProps = useBlockProps( { style } );\n\n\treturn (\n\t\t<RichText\n\t\t\ttagName=\"pre\"\n\t\t\tidentifier=\"content\"\n\t\t\tpreserveWhiteSpace\n\t\t\tvalue={ content }\n\t\t\tonChange={ ( nextContent ) => {\n\t\t\t\tsetAttributes( {\n\t\t\t\t\tcontent: nextContent,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\taria-label={ __( 'Poetry text' ) }\n\t\t\tplaceholder={ __( 'Write poetry…' ) }\n\t\t\tonRemove={ onRemove }\n\t\t\tonMerge={ mergeBlocks }\n\t\t\t{ ...blockProps }\n\t\t\t__unstablePastePlainText\n\t\t\t__unstableOnSplitAtDoubleLineEnd={\n\t\t\t\tinsertBlocksAfter\n\t\t\t\t\t? () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t/>\n\t);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAmB;AACnB,0BAAwC;AACxC,oBAAiD;AAKjD,8CAAmC;AAgBjC;AAda,SAAR,UAA4B,OAAQ;AAC1C,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI;AACJ,QAAM,EAAE,QAAQ,IAAI;AACpB,8CAAAA,SAAwB,KAAM;AAC9B,QAAM,iBAAa,mCAAe,EAAE,MAAM,CAAE;AAE5C,SACC;AAAA,IAAC;AAAA;AAAA,MACA,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,oBAAkB;AAAA,MAClB,OAAQ;AAAA,MACR,UAAW,CAAE,gBAAiB;AAC7B,sBAAe;AAAA,UACd,SAAS;AAAA,QACV,CAAE;AAAA,MACH;AAAA,MACA,kBAAa,gBAAI,aAAc;AAAA,MAC/B,iBAAc,gBAAI,eAAgB;AAAA,MAClC;AAAA,MACA,SAAU;AAAA,MACR,GAAG;AAAA,MACL,0BAAwB;AAAA,MACxB,kCACC,oBACG,MACA;AAAA,YACC,+BAAa,mCAAoB,CAAE;AAAA,MACpC,IACA;AAAA;AAAA,EAEL;AAEF;",
6
6
  "names": ["useDeprecatedTextAlign"]
7
7
  }
@@ -156,7 +156,6 @@ function SingleTrackEditor({
156
156
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
157
157
  import_components.ToggleControl,
158
158
  {
159
- __next40pxDefaultSize: true,
160
159
  label: (0, import_i18n.__)("Set as default track"),
161
160
  checked: isDefaultTrack,
162
161
  disabled: !allowSettingDefault,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/video/tracks-editor.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport {\n\tNavigableMenu,\n\tMenuItem,\n\tFormFileUpload,\n\tMenuGroup,\n\tToolbarGroup,\n\tToolbarButton,\n\tDropdown,\n\tButton,\n\tTextControl,\n\tSelectControl,\n\tToggleControl,\n\t__experimentalGrid as Grid,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport {\n\tMediaUpload,\n\tMediaUploadCheck,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { upload, media } from '@wordpress/icons';\nimport { useSelect } from '@wordpress/data';\nimport { useState, useRef, useEffect } from '@wordpress/element';\nimport { getFilename } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\nconst { Badge: WCBadge } = unlock( componentsPrivateApis );\n\nconst ALLOWED_TYPES = [ 'text/vtt' ];\n\nconst DEFAULT_KIND = 'subtitles';\n\nconst KIND_OPTIONS = [\n\t{ label: __( 'Subtitles' ), value: 'subtitles' },\n\t{ label: __( 'Captions' ), value: 'captions' },\n\t{ label: __( 'Descriptions' ), value: 'descriptions' },\n\t{ label: __( 'Chapters' ), value: 'chapters' },\n\t{ label: __( 'Metadata' ), value: 'metadata' },\n];\n\nconst DEFAULT_TRACK = {\n\tsrc: '',\n\tlabel: '',\n\tsrcLang: 'en',\n\tkind: DEFAULT_KIND,\n\tdefault: false,\n};\n\nfunction TrackList( { tracks, onEditPress } ) {\n\tconst content = tracks.map( ( track, index ) => {\n\t\treturn (\n\t\t\t<HStack\n\t\t\t\tkey={ track.id ?? track.src }\n\t\t\t\tclassName=\"block-library-video-tracks-editor__track-list-track\"\n\t\t\t>\n\t\t\t\t<span>{ track.label }</span>\n\t\t\t\t<HStack justify=\"flex-end\">\n\t\t\t\t\t{ track.default && <WCBadge>{ __( 'Default' ) }</WCBadge> }\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tonClick={ () => onEditPress( index ) }\n\t\t\t\t\t\taria-label={ sprintf(\n\t\t\t\t\t\t\t/* translators: %s: Label of the video text track e.g: \"French subtitles\". */\n\t\t\t\t\t\t\t_x( 'Edit %s', 'text tracks' ),\n\t\t\t\t\t\t\ttrack.label\n\t\t\t\t\t\t) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t</HStack>\n\t\t);\n\t} );\n\n\treturn (\n\t\t<MenuGroup\n\t\t\tlabel={ __( 'Text tracks' ) }\n\t\t\tclassName=\"block-library-video-tracks-editor__track-list\"\n\t\t>\n\t\t\t{ content }\n\t\t</MenuGroup>\n\t);\n}\n\nfunction SingleTrackEditor( {\n\ttrack,\n\tonChange,\n\tonClose,\n\tonRemove,\n\tallowSettingDefault,\n} ) {\n\tconst [ trackState, setTrackState ] = useState( {\n\t\t...DEFAULT_TRACK,\n\t\t...track,\n\t} );\n\n\tconst { src, label, srcLang, kind, default: isDefaultTrack } = trackState;\n\tconst fileName = src.startsWith( 'blob:' ) ? '' : getFilename( src ) || '';\n\treturn (\n\t\t<VStack\n\t\t\tclassName=\"block-library-video-tracks-editor__single-track-editor\"\n\t\t\tspacing=\"4\"\n\t\t>\n\t\t\t<span className=\"block-library-video-tracks-editor__single-track-editor-edit-track-label\">\n\t\t\t\t{ __( 'Edit track' ) }\n\t\t\t</span>\n\t\t\t<span>\n\t\t\t\t{ __( 'File' ) }: <b>{ fileName }</b>\n\t\t\t</span>\n\t\t\t<Grid columns={ 2 } gap={ 4 }>\n\t\t\t\t<TextControl\n\t\t\t\t\tonChange={ ( newLabel ) =>\n\t\t\t\t\t\tsetTrackState( ( prevTrackState ) => ( {\n\t\t\t\t\t\t\t...prevTrackState,\n\t\t\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\t\t} ) )\n\t\t\t\t\t}\n\t\t\t\t\tlabel={ __( 'Label' ) }\n\t\t\t\t\tvalue={ label }\n\t\t\t\t\thelp={ __( 'Title of track' ) }\n\t\t\t\t/>\n\t\t\t\t<TextControl\n\t\t\t\t\tonChange={ ( newSrcLang ) =>\n\t\t\t\t\t\tsetTrackState( ( prevTrackState ) => ( {\n\t\t\t\t\t\t\t...prevTrackState,\n\t\t\t\t\t\t\tsrcLang: newSrcLang,\n\t\t\t\t\t\t} ) )\n\t\t\t\t\t}\n\t\t\t\t\tlabel={ __( 'Source language' ) }\n\t\t\t\t\tvalue={ srcLang }\n\t\t\t\t\thelp={ __( 'Language tag (en, fr, etc.)' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t\t<VStack spacing=\"4\">\n\t\t\t\t<SelectControl\n\t\t\t\t\tclassName=\"block-library-video-tracks-editor__single-track-editor-kind-select\"\n\t\t\t\t\toptions={ KIND_OPTIONS }\n\t\t\t\t\tvalue={ kind }\n\t\t\t\t\tlabel={ __( 'Kind' ) }\n\t\t\t\t\tonChange={ ( newKind ) =>\n\t\t\t\t\t\tsetTrackState( ( prevTrackState ) => ( {\n\t\t\t\t\t\t\t...prevTrackState,\n\t\t\t\t\t\t\tkind: newKind,\n\t\t\t\t\t\t} ) )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<ToggleControl\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tlabel={ __( 'Set as default track' ) }\n\t\t\t\t\tchecked={ isDefaultTrack }\n\t\t\t\t\tdisabled={ ! allowSettingDefault }\n\t\t\t\t\tonChange={ ( defaultTrack ) =>\n\t\t\t\t\t\tsetTrackState( ( prevTrackState ) => ( {\n\t\t\t\t\t\t\t...prevTrackState,\n\t\t\t\t\t\t\tdefault: defaultTrack,\n\t\t\t\t\t\t} ) )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<HStack className=\"block-library-video-tracks-editor__single-track-editor-buttons-container\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tisDestructive\n\t\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\t\tonClick={ onRemove }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Remove track' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonChange( trackState );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t</VStack>\n\t\t</VStack>\n\t);\n}\n\nexport default function TracksEditor( { tracks = [], onChange } ) {\n\tconst mediaUpload = useSelect( ( select ) => {\n\t\treturn select( blockEditorStore ).getSettings().mediaUpload;\n\t}, [] );\n\tconst [ trackBeingEdited, setTrackBeingEdited ] = useState( null );\n\tconst dropdownPopoverRef = useRef();\n\n\tconst handleTrackSelect = ( selectedTracks = [], appendTracks = false ) => {\n\t\tconst existingTracksMap = new Map(\n\t\t\ttracks.map( ( track ) => [ track.id, track ] )\n\t\t);\n\t\tconst tracksToAdd = selectedTracks.map( ( { id, title, url } ) => {\n\t\t\t// Reuse existing tracks to preserve user-configured metadata.\n\t\t\tif ( existingTracksMap.has( id ) ) {\n\t\t\t\treturn existingTracksMap.get( id );\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...DEFAULT_TRACK,\n\t\t\t\tid,\n\t\t\t\tlabel: title || '',\n\t\t\t\tsrc: url,\n\t\t\t};\n\t\t} );\n\n\t\tif ( tracksToAdd.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tonChange( [ ...( appendTracks ? tracks : [] ), ...tracksToAdd ] );\n\t};\n\n\tfunction uploadFiles( event ) {\n\t\tconst files = event.target.files;\n\t\tmediaUpload( {\n\t\t\tallowedTypes: ALLOWED_TYPES,\n\t\t\tfilesList: files,\n\t\t\tonFileChange: ( selectedTracks ) => {\n\t\t\t\tif ( ! Array.isArray( selectedTracks ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Wait until the track has been uploaded.\n\t\t\t\tconst uploadedTracks = selectedTracks.filter(\n\t\t\t\t\t( track ) => !! track?.id\n\t\t\t\t);\n\n\t\t\t\tif ( ! uploadedTracks.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\thandleTrackSelect( uploadedTracks, true );\n\t\t\t},\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tdropdownPopoverRef.current?.focus();\n\t}, [ trackBeingEdited ] );\n\n\tif ( ! mediaUpload ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<Dropdown\n\t\t\tcontentClassName=\"block-library-video-tracks-editor\"\n\t\t\tfocusOnMount\n\t\t\tpopoverProps={ {\n\t\t\t\tref: dropdownPopoverRef,\n\t\t\t} }\n\t\t\trenderToggle={ ( { isOpen, onToggle } ) => {\n\t\t\t\tconst handleOnToggle = () => {\n\t\t\t\t\tif ( ! isOpen ) {\n\t\t\t\t\t\t// When the Popover opens make sure the initial view is\n\t\t\t\t\t\t// always the track list rather than the edit track UI.\n\t\t\t\t\t\tsetTrackBeingEdited( null );\n\t\t\t\t\t}\n\t\t\t\t\tonToggle();\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\t\t\tonClick={ handleOnToggle }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Text tracks' ) }\n\t\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => {\n\t\t\t\tif ( trackBeingEdited !== null ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SingleTrackEditor\n\t\t\t\t\t\t\ttrack={ tracks[ trackBeingEdited ] }\n\t\t\t\t\t\t\tonChange={ ( newTrack ) => {\n\t\t\t\t\t\t\t\tconst newTracks = [ ...tracks ];\n\t\t\t\t\t\t\t\tnewTracks[ trackBeingEdited ] = newTrack;\n\t\t\t\t\t\t\t\tonChange( newTracks );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonClose={ () => setTrackBeingEdited( null ) }\n\t\t\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\t\ttracks.filter(\n\t\t\t\t\t\t\t\t\t\t( _track, index ) =>\n\t\t\t\t\t\t\t\t\t\t\tindex !== trackBeingEdited\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tsetTrackBeingEdited( null );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tallowSettingDefault={\n\t\t\t\t\t\t\t\t! tracks.some( ( track ) => track.default ) ||\n\t\t\t\t\t\t\t\ttracks[ trackBeingEdited ].default\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ tracks.length === 0 && (\n\t\t\t\t\t\t\t<div className=\"block-library-video-tracks-editor__tracks-informative-message\">\n\t\t\t\t\t\t\t\t<h2 className=\"block-library-video-tracks-editor__tracks-informative-message-title\">\n\t\t\t\t\t\t\t\t\t{ __( 'Text tracks' ) }\n\t\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t\t<p className=\"block-library-video-tracks-editor__tracks-informative-message-description\">\n\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t'Tracks can be subtitles, captions, chapters, or descriptions. They help make your content more accessible to a wider range of users.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<NavigableMenu>\n\t\t\t\t\t\t\t<TrackList\n\t\t\t\t\t\t\t\ttracks={ tracks }\n\t\t\t\t\t\t\t\tonEditPress={ setTrackBeingEdited }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<MenuGroup\n\t\t\t\t\t\t\t\tclassName=\"block-library-video-tracks-editor__add-tracks-container\"\n\t\t\t\t\t\t\t\tlabel={ __( 'Add tracks' ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\t\t\t\t\tonSelect={ handleTrackSelect }\n\t\t\t\t\t\t\t\t\t\tallowedTypes={ ALLOWED_TYPES }\n\t\t\t\t\t\t\t\t\t\tvalue={ tracks.map( ( { id } ) => id ) }\n\t\t\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\ticon={ media }\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{ __( 'Open Media Library' ) }\n\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<FormFileUpload\n\t\t\t\t\t\t\t\t\t\tonChange={ uploadFiles }\n\t\t\t\t\t\t\t\t\t\taccept=\".vtt,text/vtt\"\n\t\t\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\t\t\trender={ ( { openFileDialog } ) => {\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={ openFileDialog }\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ _x( 'Upload', 'verb' ) }\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t</NavigableMenu>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport {\n\tNavigableMenu,\n\tMenuItem,\n\tFormFileUpload,\n\tMenuGroup,\n\tToolbarGroup,\n\tToolbarButton,\n\tDropdown,\n\tButton,\n\tTextControl,\n\tSelectControl,\n\tToggleControl,\n\t__experimentalGrid as Grid,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport {\n\tMediaUpload,\n\tMediaUploadCheck,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { upload, media } from '@wordpress/icons';\nimport { useSelect } from '@wordpress/data';\nimport { useState, useRef, useEffect } from '@wordpress/element';\nimport { getFilename } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\nconst { Badge: WCBadge } = unlock( componentsPrivateApis );\n\nconst ALLOWED_TYPES = [ 'text/vtt' ];\n\nconst DEFAULT_KIND = 'subtitles';\n\nconst KIND_OPTIONS = [\n\t{ label: __( 'Subtitles' ), value: 'subtitles' },\n\t{ label: __( 'Captions' ), value: 'captions' },\n\t{ label: __( 'Descriptions' ), value: 'descriptions' },\n\t{ label: __( 'Chapters' ), value: 'chapters' },\n\t{ label: __( 'Metadata' ), value: 'metadata' },\n];\n\nconst DEFAULT_TRACK = {\n\tsrc: '',\n\tlabel: '',\n\tsrcLang: 'en',\n\tkind: DEFAULT_KIND,\n\tdefault: false,\n};\n\nfunction TrackList( { tracks, onEditPress } ) {\n\tconst content = tracks.map( ( track, index ) => {\n\t\treturn (\n\t\t\t<HStack\n\t\t\t\tkey={ track.id ?? track.src }\n\t\t\t\tclassName=\"block-library-video-tracks-editor__track-list-track\"\n\t\t\t>\n\t\t\t\t<span>{ track.label }</span>\n\t\t\t\t<HStack justify=\"flex-end\">\n\t\t\t\t\t{ track.default && <WCBadge>{ __( 'Default' ) }</WCBadge> }\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tonClick={ () => onEditPress( index ) }\n\t\t\t\t\t\taria-label={ sprintf(\n\t\t\t\t\t\t\t/* translators: %s: Label of the video text track e.g: \"French subtitles\". */\n\t\t\t\t\t\t\t_x( 'Edit %s', 'text tracks' ),\n\t\t\t\t\t\t\ttrack.label\n\t\t\t\t\t\t) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t</HStack>\n\t\t);\n\t} );\n\n\treturn (\n\t\t<MenuGroup\n\t\t\tlabel={ __( 'Text tracks' ) }\n\t\t\tclassName=\"block-library-video-tracks-editor__track-list\"\n\t\t>\n\t\t\t{ content }\n\t\t</MenuGroup>\n\t);\n}\n\nfunction SingleTrackEditor( {\n\ttrack,\n\tonChange,\n\tonClose,\n\tonRemove,\n\tallowSettingDefault,\n} ) {\n\tconst [ trackState, setTrackState ] = useState( {\n\t\t...DEFAULT_TRACK,\n\t\t...track,\n\t} );\n\n\tconst { src, label, srcLang, kind, default: isDefaultTrack } = trackState;\n\tconst fileName = src.startsWith( 'blob:' ) ? '' : getFilename( src ) || '';\n\treturn (\n\t\t<VStack\n\t\t\tclassName=\"block-library-video-tracks-editor__single-track-editor\"\n\t\t\tspacing=\"4\"\n\t\t>\n\t\t\t<span className=\"block-library-video-tracks-editor__single-track-editor-edit-track-label\">\n\t\t\t\t{ __( 'Edit track' ) }\n\t\t\t</span>\n\t\t\t<span>\n\t\t\t\t{ __( 'File' ) }: <b>{ fileName }</b>\n\t\t\t</span>\n\t\t\t<Grid columns={ 2 } gap={ 4 }>\n\t\t\t\t<TextControl\n\t\t\t\t\tonChange={ ( newLabel ) =>\n\t\t\t\t\t\tsetTrackState( ( prevTrackState ) => ( {\n\t\t\t\t\t\t\t...prevTrackState,\n\t\t\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\t\t} ) )\n\t\t\t\t\t}\n\t\t\t\t\tlabel={ __( 'Label' ) }\n\t\t\t\t\tvalue={ label }\n\t\t\t\t\thelp={ __( 'Title of track' ) }\n\t\t\t\t/>\n\t\t\t\t<TextControl\n\t\t\t\t\tonChange={ ( newSrcLang ) =>\n\t\t\t\t\t\tsetTrackState( ( prevTrackState ) => ( {\n\t\t\t\t\t\t\t...prevTrackState,\n\t\t\t\t\t\t\tsrcLang: newSrcLang,\n\t\t\t\t\t\t} ) )\n\t\t\t\t\t}\n\t\t\t\t\tlabel={ __( 'Source language' ) }\n\t\t\t\t\tvalue={ srcLang }\n\t\t\t\t\thelp={ __( 'Language tag (en, fr, etc.)' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t\t<VStack spacing=\"4\">\n\t\t\t\t<SelectControl\n\t\t\t\t\tclassName=\"block-library-video-tracks-editor__single-track-editor-kind-select\"\n\t\t\t\t\toptions={ KIND_OPTIONS }\n\t\t\t\t\tvalue={ kind }\n\t\t\t\t\tlabel={ __( 'Kind' ) }\n\t\t\t\t\tonChange={ ( newKind ) =>\n\t\t\t\t\t\tsetTrackState( ( prevTrackState ) => ( {\n\t\t\t\t\t\t\t...prevTrackState,\n\t\t\t\t\t\t\tkind: newKind,\n\t\t\t\t\t\t} ) )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<ToggleControl\n\t\t\t\t\tlabel={ __( 'Set as default track' ) }\n\t\t\t\t\tchecked={ isDefaultTrack }\n\t\t\t\t\tdisabled={ ! allowSettingDefault }\n\t\t\t\t\tonChange={ ( defaultTrack ) =>\n\t\t\t\t\t\tsetTrackState( ( prevTrackState ) => ( {\n\t\t\t\t\t\t\t...prevTrackState,\n\t\t\t\t\t\t\tdefault: defaultTrack,\n\t\t\t\t\t\t} ) )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<HStack className=\"block-library-video-tracks-editor__single-track-editor-buttons-container\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tisDestructive\n\t\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\t\tonClick={ onRemove }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Remove track' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonChange( trackState );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t</VStack>\n\t\t</VStack>\n\t);\n}\n\nexport default function TracksEditor( { tracks = [], onChange } ) {\n\tconst mediaUpload = useSelect( ( select ) => {\n\t\treturn select( blockEditorStore ).getSettings().mediaUpload;\n\t}, [] );\n\tconst [ trackBeingEdited, setTrackBeingEdited ] = useState( null );\n\tconst dropdownPopoverRef = useRef();\n\n\tconst handleTrackSelect = ( selectedTracks = [], appendTracks = false ) => {\n\t\tconst existingTracksMap = new Map(\n\t\t\ttracks.map( ( track ) => [ track.id, track ] )\n\t\t);\n\t\tconst tracksToAdd = selectedTracks.map( ( { id, title, url } ) => {\n\t\t\t// Reuse existing tracks to preserve user-configured metadata.\n\t\t\tif ( existingTracksMap.has( id ) ) {\n\t\t\t\treturn existingTracksMap.get( id );\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...DEFAULT_TRACK,\n\t\t\t\tid,\n\t\t\t\tlabel: title || '',\n\t\t\t\tsrc: url,\n\t\t\t};\n\t\t} );\n\n\t\tif ( tracksToAdd.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tonChange( [ ...( appendTracks ? tracks : [] ), ...tracksToAdd ] );\n\t};\n\n\tfunction uploadFiles( event ) {\n\t\tconst files = event.target.files;\n\t\tmediaUpload( {\n\t\t\tallowedTypes: ALLOWED_TYPES,\n\t\t\tfilesList: files,\n\t\t\tonFileChange: ( selectedTracks ) => {\n\t\t\t\tif ( ! Array.isArray( selectedTracks ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Wait until the track has been uploaded.\n\t\t\t\tconst uploadedTracks = selectedTracks.filter(\n\t\t\t\t\t( track ) => !! track?.id\n\t\t\t\t);\n\n\t\t\t\tif ( ! uploadedTracks.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\thandleTrackSelect( uploadedTracks, true );\n\t\t\t},\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tdropdownPopoverRef.current?.focus();\n\t}, [ trackBeingEdited ] );\n\n\tif ( ! mediaUpload ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<Dropdown\n\t\t\tcontentClassName=\"block-library-video-tracks-editor\"\n\t\t\tfocusOnMount\n\t\t\tpopoverProps={ {\n\t\t\t\tref: dropdownPopoverRef,\n\t\t\t} }\n\t\t\trenderToggle={ ( { isOpen, onToggle } ) => {\n\t\t\t\tconst handleOnToggle = () => {\n\t\t\t\t\tif ( ! isOpen ) {\n\t\t\t\t\t\t// When the Popover opens make sure the initial view is\n\t\t\t\t\t\t// always the track list rather than the edit track UI.\n\t\t\t\t\t\tsetTrackBeingEdited( null );\n\t\t\t\t\t}\n\t\t\t\t\tonToggle();\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\t\t\tonClick={ handleOnToggle }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Text tracks' ) }\n\t\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => {\n\t\t\t\tif ( trackBeingEdited !== null ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SingleTrackEditor\n\t\t\t\t\t\t\ttrack={ tracks[ trackBeingEdited ] }\n\t\t\t\t\t\t\tonChange={ ( newTrack ) => {\n\t\t\t\t\t\t\t\tconst newTracks = [ ...tracks ];\n\t\t\t\t\t\t\t\tnewTracks[ trackBeingEdited ] = newTrack;\n\t\t\t\t\t\t\t\tonChange( newTracks );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonClose={ () => setTrackBeingEdited( null ) }\n\t\t\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\t\t\ttracks.filter(\n\t\t\t\t\t\t\t\t\t\t( _track, index ) =>\n\t\t\t\t\t\t\t\t\t\t\tindex !== trackBeingEdited\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tsetTrackBeingEdited( null );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tallowSettingDefault={\n\t\t\t\t\t\t\t\t! tracks.some( ( track ) => track.default ) ||\n\t\t\t\t\t\t\t\ttracks[ trackBeingEdited ].default\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ tracks.length === 0 && (\n\t\t\t\t\t\t\t<div className=\"block-library-video-tracks-editor__tracks-informative-message\">\n\t\t\t\t\t\t\t\t<h2 className=\"block-library-video-tracks-editor__tracks-informative-message-title\">\n\t\t\t\t\t\t\t\t\t{ __( 'Text tracks' ) }\n\t\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t\t<p className=\"block-library-video-tracks-editor__tracks-informative-message-description\">\n\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t'Tracks can be subtitles, captions, chapters, or descriptions. They help make your content more accessible to a wider range of users.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<NavigableMenu>\n\t\t\t\t\t\t\t<TrackList\n\t\t\t\t\t\t\t\ttracks={ tracks }\n\t\t\t\t\t\t\t\tonEditPress={ setTrackBeingEdited }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<MenuGroup\n\t\t\t\t\t\t\t\tclassName=\"block-library-video-tracks-editor__add-tracks-container\"\n\t\t\t\t\t\t\t\tlabel={ __( 'Add tracks' ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\t\t\t\t\tonSelect={ handleTrackSelect }\n\t\t\t\t\t\t\t\t\t\tallowedTypes={ ALLOWED_TYPES }\n\t\t\t\t\t\t\t\t\t\tvalue={ tracks.map( ( { id } ) => id ) }\n\t\t\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\ticon={ media }\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{ __( 'Open Media Library' ) }\n\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<FormFileUpload\n\t\t\t\t\t\t\t\t\t\tonChange={ uploadFiles }\n\t\t\t\t\t\t\t\t\t\taccept=\".vtt,text/vtt\"\n\t\t\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\t\t\trender={ ( { openFileDialog } ) => {\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={ openFileDialog }\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ _x( 'Upload', 'verb' ) }\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t</NavigableMenu>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["componentsPrivateApis", "HStack", "VStack", "Grid", "blockEditorStore"]
7
7
  }
@@ -8,6 +8,7 @@
8
8
  "parent": [ "core/accordion-item" ],
9
9
  "usesContext": [ "core/accordion-open-by-default" ],
10
10
  "supports": {
11
+ "__experimentalOnEnter": true,
11
12
  "html": false,
12
13
  "color": {
13
14
  "background": true,
@@ -24,7 +24,9 @@ function CodeEdit({
24
24
  "aria-label": __("Code"),
25
25
  preserveWhiteSpace: true,
26
26
  __unstablePastePlainText: true,
27
- __unstableOnSplitAtDoubleLineEnd: () => insertBlocksAfter(createBlock(getDefaultBlockName())),
27
+ __unstableOnSplitAtDoubleLineEnd: insertBlocksAfter ? () => insertBlocksAfter(
28
+ createBlock(getDefaultBlockName())
29
+ ) : void 0,
28
30
  style: { whiteSpace: "break-spaces" }
29
31
  }
30
32
  ) });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/code/edit.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { RichText, useBlockProps } from '@wordpress/block-editor';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\n\nexport default function CodeEdit( {\n\tattributes,\n\tsetAttributes,\n\tonRemove,\n\tinsertBlocksAfter,\n\tmergeBlocks,\n} ) {\n\tconst blockProps = useBlockProps();\n\treturn (\n\t\t<pre { ...blockProps }>\n\t\t\t<RichText\n\t\t\t\ttagName=\"code\"\n\t\t\t\tidentifier=\"content\"\n\t\t\t\tvalue={ attributes.content }\n\t\t\t\tonChange={ ( content ) => setAttributes( { content } ) }\n\t\t\t\tonRemove={ onRemove }\n\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\tplaceholder={ __( 'Write code…' ) }\n\t\t\t\taria-label={ __( 'Code' ) }\n\t\t\t\tpreserveWhiteSpace\n\t\t\t\t__unstablePastePlainText\n\t\t\t\t__unstableOnSplitAtDoubleLineEnd={ () =>\n\t\t\t\t\tinsertBlocksAfter( createBlock( getDefaultBlockName() ) )\n\t\t\t\t}\n\t\t\t\tstyle={ { whiteSpace: 'break-spaces' } }\n\t\t\t/>\n\t\t</pre>\n\t);\n}\n"],
5
- "mappings": ";AAGA,SAAS,UAAU;AACnB,SAAS,UAAU,qBAAqB;AACxC,SAAS,aAAa,2BAA2B;AAY9C;AAVY,SAAR,SAA2B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,aAAa,cAAc;AACjC,SACC,oBAAC,SAAM,GAAG,YACT;AAAA,IAAC;AAAA;AAAA,MACA,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,OAAQ,WAAW;AAAA,MACnB,UAAW,CAAE,YAAa,cAAe,EAAE,QAAQ,CAAE;AAAA,MACrD;AAAA,MACA,SAAU;AAAA,MACV,aAAc,GAAI,aAAc;AAAA,MAChC,cAAa,GAAI,MAAO;AAAA,MACxB,oBAAkB;AAAA,MAClB,0BAAwB;AAAA,MACxB,kCAAmC,MAClC,kBAAmB,YAAa,oBAAoB,CAAE,CAAE;AAAA,MAEzD,OAAQ,EAAE,YAAY,eAAe;AAAA;AAAA,EACtC,GACD;AAEF;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { RichText, useBlockProps } from '@wordpress/block-editor';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\n\nexport default function CodeEdit( {\n\tattributes,\n\tsetAttributes,\n\tonRemove,\n\tinsertBlocksAfter,\n\tmergeBlocks,\n} ) {\n\tconst blockProps = useBlockProps();\n\treturn (\n\t\t<pre { ...blockProps }>\n\t\t\t<RichText\n\t\t\t\ttagName=\"code\"\n\t\t\t\tidentifier=\"content\"\n\t\t\t\tvalue={ attributes.content }\n\t\t\t\tonChange={ ( content ) => setAttributes( { content } ) }\n\t\t\t\tonRemove={ onRemove }\n\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\tplaceholder={ __( 'Write code…' ) }\n\t\t\t\taria-label={ __( 'Code' ) }\n\t\t\t\tpreserveWhiteSpace\n\t\t\t\t__unstablePastePlainText\n\t\t\t\t__unstableOnSplitAtDoubleLineEnd={\n\t\t\t\t\tinsertBlocksAfter\n\t\t\t\t\t\t? () =>\n\t\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tstyle={ { whiteSpace: 'break-spaces' } }\n\t\t\t/>\n\t\t</pre>\n\t);\n}\n"],
5
+ "mappings": ";AAGA,SAAS,UAAU;AACnB,SAAS,UAAU,qBAAqB;AACxC,SAAS,aAAa,2BAA2B;AAY9C;AAVY,SAAR,SAA2B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,aAAa,cAAc;AACjC,SACC,oBAAC,SAAM,GAAG,YACT;AAAA,IAAC;AAAA;AAAA,MACA,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,OAAQ,WAAW;AAAA,MACnB,UAAW,CAAE,YAAa,cAAe,EAAE,QAAQ,CAAE;AAAA,MACrD;AAAA,MACA,SAAU;AAAA,MACV,aAAc,GAAI,aAAc;AAAA,MAChC,cAAa,GAAI,MAAO;AAAA,MACxB,oBAAkB;AAAA,MAClB,0BAAwB;AAAA,MACxB,kCACC,oBACG,MACA;AAAA,QACC,YAAa,oBAAoB,CAAE;AAAA,MACpC,IACA;AAAA,MAEJ,OAAQ,EAAE,YAAY,eAAe;AAAA;AAAA,EACtC,GACD;AAEF;",
6
6
  "names": []
7
7
  }
@@ -100,6 +100,7 @@
100
100
  },
101
101
  "usesContext": [ "postId", "postType" ],
102
102
  "supports": {
103
+ "__experimentalOnEnter": true,
103
104
  "anchor": true,
104
105
  "align": true,
105
106
  "html": false,
@@ -27,6 +27,7 @@ function CoverBlockControls({
27
27
  onEditMedia,
28
28
  editMediaButtonRef,
29
29
  showEditMediaButton,
30
+ isEditMediaDisabled,
30
31
  blockEditingMode
31
32
  }) {
32
33
  const {
@@ -104,7 +105,8 @@ function CoverBlockControls({
104
105
  icon: crop,
105
106
  label: __("Crop background image"),
106
107
  onClick: onEditMedia,
107
- "aria-haspopup": "dialog"
108
+ "aria-haspopup": "dialog",
109
+ disabled: isEditMediaDisabled
108
110
  }
109
111
  )
110
112
  ] }),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cover/edit/block-controls.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\n\nimport {\n\tBlockControls,\n\tMediaReplaceFlow,\n\t__experimentalBlockAlignmentMatrixControl as BlockAlignmentMatrixControl,\n\t__experimentalBlockFullHeightAligmentControl as FullHeightAlignmentControl,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem, ToolbarButton } from '@wordpress/components';\nimport { crop, link } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { ALLOWED_MEDIA_TYPES, EMBED_VIDEO_BACKGROUND_TYPE } from '../shared';\nimport { unlock } from '../../lock-unlock';\nimport EmbedVideoUrlInput from './embed-video-url-input';\nimport { getAllowedVideoProviders } from '../embed-video-utils';\n\nconst { cleanEmptyObject } = unlock( blockEditorPrivateApis );\n\nexport default function CoverBlockControls( {\n\tattributes,\n\tsetAttributes,\n\tonSelectMedia,\n\tcurrentSettings,\n\ttoggleUseFeaturedImage,\n\tonClearMedia,\n\tonSelectEmbedUrl,\n\tonEditMedia,\n\teditMediaButtonRef,\n\tshowEditMediaButton,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\tcontentPosition,\n\t\tid,\n\t\tuseFeaturedImage,\n\t\tminHeight,\n\t\tminHeightUnit,\n\t\tbackgroundType,\n\t\tallowedVideoProviders,\n\t} = attributes;\n\tconst { hasInnerBlocks, url } = currentSettings;\n\n\tconst filteredVideoProviders = getAllowedVideoProviders(\n\t\tallowedVideoProviders\n\t);\n\tconst hasAllowedVideoProviders = filteredVideoProviders.length > 0;\n\n\tconst [ prevMinHeightValue, setPrevMinHeightValue ] = useState( minHeight );\n\tconst [ prevMinHeightUnit, setPrevMinHeightUnit ] =\n\t\tuseState( minHeightUnit );\n\tconst [ isEmbedUrlInputOpen, setIsEmbedUrlInputOpen ] = useState( false );\n\tconst isMinFullHeight =\n\t\tminHeightUnit === 'vh' &&\n\t\tminHeight === 100 &&\n\t\t! attributes?.style?.dimensions?.aspectRatio;\n\tconst isContentOnlyMode = blockEditingMode === 'contentOnly';\n\n\tconst toggleMinFullHeight = () => {\n\t\tif ( isMinFullHeight ) {\n\t\t\t// If there aren't previous values, take the default ones.\n\t\t\tif ( prevMinHeightUnit === 'vh' && prevMinHeightValue === 100 ) {\n\t\t\t\treturn setAttributes( {\n\t\t\t\t\tminHeight: undefined,\n\t\t\t\t\tminHeightUnit: undefined,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Set the previous values of height.\n\t\t\treturn setAttributes( {\n\t\t\t\tminHeight: prevMinHeightValue,\n\t\t\t\tminHeightUnit: prevMinHeightUnit,\n\t\t\t} );\n\t\t}\n\n\t\tsetPrevMinHeightValue( minHeight );\n\t\tsetPrevMinHeightUnit( minHeightUnit );\n\n\t\t// Set full height, and clear any aspect ratio value.\n\t\treturn setAttributes( {\n\t\t\tminHeight: 100,\n\t\t\tminHeightUnit: 'vh',\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...attributes?.style,\n\t\t\t\tdimensions: {\n\t\t\t\t\t...attributes?.style?.dimensions,\n\t\t\t\t\taspectRatio: undefined, // Reset aspect ratio when minHeight is set.\n\t\t\t\t},\n\t\t\t} ),\n\t\t} );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ ! isContentOnlyMode && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<BlockAlignmentMatrixControl\n\t\t\t\t\t\tlabel={ __( 'Change content position' ) }\n\t\t\t\t\t\tvalue={ contentPosition }\n\t\t\t\t\t\tonChange={ ( nextPosition ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tcontentPosition: nextPosition,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisDisabled={ ! hasInnerBlocks }\n\t\t\t\t\t/>\n\t\t\t\t\t<FullHeightAlignmentControl\n\t\t\t\t\t\tisActive={ isMinFullHeight }\n\t\t\t\t\t\tonToggle={ toggleMinFullHeight }\n\t\t\t\t\t\tisDisabled={ ! hasInnerBlocks }\n\t\t\t\t\t/>\n\t\t\t\t\t{ showEditMediaButton && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tref={ editMediaButtonRef }\n\t\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\t\tlabel={ __( 'Crop background image' ) }\n\t\t\t\t\t\t\tonClick={ onEditMedia }\n\t\t\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<BlockControls group=\"other\">\n\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\tmediaId={ id }\n\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonSelect={ onSelectMedia }\n\t\t\t\t\tonToggleFeaturedImage={ toggleUseFeaturedImage }\n\t\t\t\t\tuseFeaturedImage={ useFeaturedImage }\n\t\t\t\t\tname={ ! url ? __( 'Add media' ) : __( 'Replace' ) }\n\t\t\t\t\tonReset={ onClearMedia }\n\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t>\n\t\t\t\t\t{ ( { onClose } ) =>\n\t\t\t\t\t\thasAllowedVideoProviders ? (\n\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\ticon={ link }\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tsetIsEmbedUrlInputOpen( true );\n\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Embed video from URL' ) }\n\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t) : null\n\t\t\t\t\t}\n\t\t\t\t</MediaReplaceFlow>\n\t\t\t</BlockControls>\n\t\t\t{ isEmbedUrlInputOpen && (\n\t\t\t\t<EmbedVideoUrlInput\n\t\t\t\t\tonSubmit={ ( embedUrl ) => {\n\t\t\t\t\t\tonSelectEmbedUrl( embedUrl );\n\t\t\t\t\t} }\n\t\t\t\t\tonClose={ () => setIsEmbedUrlInputOpen( false ) }\n\t\t\t\t\tinitialUrl={\n\t\t\t\t\t\tbackgroundType === EMBED_VIDEO_BACKGROUND_TYPE\n\t\t\t\t\t\t\t? url\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t}\n\t\t\t\t\tallowedVideoProviders={ filteredVideoProviders }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\n\nimport {\n\tBlockControls,\n\tMediaReplaceFlow,\n\t__experimentalBlockAlignmentMatrixControl as BlockAlignmentMatrixControl,\n\t__experimentalBlockFullHeightAligmentControl as FullHeightAlignmentControl,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem, ToolbarButton } from '@wordpress/components';\nimport { crop, link } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { ALLOWED_MEDIA_TYPES, EMBED_VIDEO_BACKGROUND_TYPE } from '../shared';\nimport { unlock } from '../../lock-unlock';\nimport EmbedVideoUrlInput from './embed-video-url-input';\nimport { getAllowedVideoProviders } from '../embed-video-utils';\n\nconst { cleanEmptyObject } = unlock( blockEditorPrivateApis );\n\nexport default function CoverBlockControls( {\n\tattributes,\n\tsetAttributes,\n\tonSelectMedia,\n\tcurrentSettings,\n\ttoggleUseFeaturedImage,\n\tonClearMedia,\n\tonSelectEmbedUrl,\n\tonEditMedia,\n\teditMediaButtonRef,\n\tshowEditMediaButton,\n\tisEditMediaDisabled,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\tcontentPosition,\n\t\tid,\n\t\tuseFeaturedImage,\n\t\tminHeight,\n\t\tminHeightUnit,\n\t\tbackgroundType,\n\t\tallowedVideoProviders,\n\t} = attributes;\n\tconst { hasInnerBlocks, url } = currentSettings;\n\n\tconst filteredVideoProviders = getAllowedVideoProviders(\n\t\tallowedVideoProviders\n\t);\n\tconst hasAllowedVideoProviders = filteredVideoProviders.length > 0;\n\n\tconst [ prevMinHeightValue, setPrevMinHeightValue ] = useState( minHeight );\n\tconst [ prevMinHeightUnit, setPrevMinHeightUnit ] =\n\t\tuseState( minHeightUnit );\n\tconst [ isEmbedUrlInputOpen, setIsEmbedUrlInputOpen ] = useState( false );\n\tconst isMinFullHeight =\n\t\tminHeightUnit === 'vh' &&\n\t\tminHeight === 100 &&\n\t\t! attributes?.style?.dimensions?.aspectRatio;\n\tconst isContentOnlyMode = blockEditingMode === 'contentOnly';\n\n\tconst toggleMinFullHeight = () => {\n\t\tif ( isMinFullHeight ) {\n\t\t\t// If there aren't previous values, take the default ones.\n\t\t\tif ( prevMinHeightUnit === 'vh' && prevMinHeightValue === 100 ) {\n\t\t\t\treturn setAttributes( {\n\t\t\t\t\tminHeight: undefined,\n\t\t\t\t\tminHeightUnit: undefined,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Set the previous values of height.\n\t\t\treturn setAttributes( {\n\t\t\t\tminHeight: prevMinHeightValue,\n\t\t\t\tminHeightUnit: prevMinHeightUnit,\n\t\t\t} );\n\t\t}\n\n\t\tsetPrevMinHeightValue( minHeight );\n\t\tsetPrevMinHeightUnit( minHeightUnit );\n\n\t\t// Set full height, and clear any aspect ratio value.\n\t\treturn setAttributes( {\n\t\t\tminHeight: 100,\n\t\t\tminHeightUnit: 'vh',\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...attributes?.style,\n\t\t\t\tdimensions: {\n\t\t\t\t\t...attributes?.style?.dimensions,\n\t\t\t\t\taspectRatio: undefined, // Reset aspect ratio when minHeight is set.\n\t\t\t\t},\n\t\t\t} ),\n\t\t} );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ ! isContentOnlyMode && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<BlockAlignmentMatrixControl\n\t\t\t\t\t\tlabel={ __( 'Change content position' ) }\n\t\t\t\t\t\tvalue={ contentPosition }\n\t\t\t\t\t\tonChange={ ( nextPosition ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tcontentPosition: nextPosition,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisDisabled={ ! hasInnerBlocks }\n\t\t\t\t\t/>\n\t\t\t\t\t<FullHeightAlignmentControl\n\t\t\t\t\t\tisActive={ isMinFullHeight }\n\t\t\t\t\t\tonToggle={ toggleMinFullHeight }\n\t\t\t\t\t\tisDisabled={ ! hasInnerBlocks }\n\t\t\t\t\t/>\n\t\t\t\t\t{ showEditMediaButton && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tref={ editMediaButtonRef }\n\t\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\t\tlabel={ __( 'Crop background image' ) }\n\t\t\t\t\t\t\tonClick={ onEditMedia }\n\t\t\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t\t\t// Disable rather than hide while the edited image\n\t\t\t\t\t\t\t// loads, so the button keeps focus when the modal\n\t\t\t\t\t\t\t// closes instead of dropping it to the canvas.\n\t\t\t\t\t\t\tdisabled={ isEditMediaDisabled }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<BlockControls group=\"other\">\n\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\tmediaId={ id }\n\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonSelect={ onSelectMedia }\n\t\t\t\t\tonToggleFeaturedImage={ toggleUseFeaturedImage }\n\t\t\t\t\tuseFeaturedImage={ useFeaturedImage }\n\t\t\t\t\tname={ ! url ? __( 'Add media' ) : __( 'Replace' ) }\n\t\t\t\t\tonReset={ onClearMedia }\n\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t>\n\t\t\t\t\t{ ( { onClose } ) =>\n\t\t\t\t\t\thasAllowedVideoProviders ? (\n\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\ticon={ link }\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tsetIsEmbedUrlInputOpen( true );\n\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Embed video from URL' ) }\n\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t) : null\n\t\t\t\t\t}\n\t\t\t\t</MediaReplaceFlow>\n\t\t\t</BlockControls>\n\t\t\t{ isEmbedUrlInputOpen && (\n\t\t\t\t<EmbedVideoUrlInput\n\t\t\t\t\tonSubmit={ ( embedUrl ) => {\n\t\t\t\t\t\tonSelectEmbedUrl( embedUrl );\n\t\t\t\t\t} }\n\t\t\t\t\tonClose={ () => setIsEmbedUrlInputOpen( false ) }\n\t\t\t\t\tinitialUrl={\n\t\t\t\t\t\tbackgroundType === EMBED_VIDEO_BACKGROUND_TYPE\n\t\t\t\t\t\t\t? url\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t}\n\t\t\t\t\tallowedVideoProviders={ filteredVideoProviders }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -6,7 +6,8 @@ import {
6
6
  useEffect,
7
7
  useLayoutEffect,
8
8
  useMemo,
9
- useRef
9
+ useRef,
10
+ useState
10
11
  } from "@wordpress/element";
11
12
  import { Placeholder, SandBox, Spinner } from "@wordpress/components";
12
13
  import { compose, useResizeObserver } from "@wordpress/compose";
@@ -14,7 +15,6 @@ import {
14
15
  withColors,
15
16
  ColorPalette,
16
17
  useBlockProps,
17
- useSettings,
18
18
  useInnerBlocksProps,
19
19
  __experimentalUseGradient,
20
20
  store as blockEditorStore,
@@ -22,7 +22,8 @@ import {
22
22
  privateApis as blockEditorPrivateApis
23
23
  } from "@wordpress/block-editor";
24
24
  import { __ } from "@wordpress/i18n";
25
- import { useSelect, useDispatch } from "@wordpress/data";
25
+ import { useSelect, useDispatch, useRegistry } from "@wordpress/data";
26
+ import { createBlocksFromInnerBlocksTemplate } from "@wordpress/blocks";
26
27
  import { isBlobURL } from "@wordpress/blob";
27
28
  import { store as noticesStore } from "@wordpress/notices";
28
29
  import {
@@ -109,7 +110,8 @@ function CoverEdit({
109
110
  (select) => select(blockEditorStore).getSettings()[openMediaEditorModalKey],
110
111
  []
111
112
  );
112
- const { __unstableMarkNextChangeAsNotPersistent } = useDispatch(blockEditorStore);
113
+ const { __unstableMarkNextChangeAsNotPersistent, replaceInnerBlocks } = useDispatch(blockEditorStore);
114
+ const registry = useRegistry();
113
115
  const propsRef = useRef({ attributes, overlayColor });
114
116
  useLayoutEffect(() => {
115
117
  propsRef.current = { attributes, overlayColor };
@@ -168,6 +170,30 @@ function CoverEdit({
168
170
  const backgroundType = useFeaturedImage ? IMAGE_BACKGROUND_TYPE : originalBackgroundType;
169
171
  const { createErrorNotice } = useDispatch(noticesStore);
170
172
  const { gradientClass, gradientValue } = __experimentalUseGradient();
173
+ const scaffoldInnerBlocks = () => {
174
+ const {
175
+ getBlocks,
176
+ isBlockSelected,
177
+ getSelectedBlocksInitialCaretPosition
178
+ } = registry.select(blockEditorStore);
179
+ if (getBlocks(clientId).length > 0) {
180
+ return;
181
+ }
182
+ const [fontSizes] = unlock(
183
+ registry.select(blockEditorStore)
184
+ ).getBlockSettings(clientId, "typography.fontSizes");
185
+ const hasFontSizes = fontSizes?.length > 0;
186
+ replaceInnerBlocks(
187
+ clientId,
188
+ createBlocksFromInnerBlocksTemplate(
189
+ getInnerBlocksTemplate({
190
+ fontSize: hasFontSizes ? "large" : void 0
191
+ })
192
+ ),
193
+ isBlockSelected(clientId),
194
+ getSelectedBlocksInitialCaretPosition()
195
+ );
196
+ };
171
197
  const onSelectMedia = async (newMedia) => {
172
198
  const mediaAttributes = attributesFromMedia(newMedia);
173
199
  const isImage = [newMedia?.type, newMedia?.media_type].includes(
@@ -201,13 +227,16 @@ function CoverEdit({
201
227
  mediaAttributes.sizeSlug = DEFAULT_MEDIA_SIZE_SLUG;
202
228
  }
203
229
  }
204
- setAttributes({
205
- ...mediaAttributes,
206
- focalPoint: void 0,
207
- useFeaturedImage: void 0,
208
- dimRatio: newDimRatio,
209
- isDark: newIsDark,
210
- isUserOverlayColor: currentAttrs.isUserOverlayColor || false
230
+ registry.batch(() => {
231
+ setAttributes({
232
+ ...mediaAttributes,
233
+ focalPoint: void 0,
234
+ useFeaturedImage: void 0,
235
+ dimRatio: newDimRatio,
236
+ isDark: newIsDark,
237
+ isUserOverlayColor: currentAttrs.isUserOverlayColor || false
238
+ });
239
+ scaffoldInnerBlocks();
211
240
  });
212
241
  };
213
242
  const onClearMedia = () => {
@@ -243,9 +272,14 @@ function CoverEdit({
243
272
  );
244
273
  setOverlayColor(newOverlayColor);
245
274
  __unstableMarkNextChangeAsNotPersistent();
246
- setAttributes({
247
- isUserOverlayColor: true,
248
- isDark: newIsDark
275
+ registry.batch(() => {
276
+ setAttributes({
277
+ isUserOverlayColor: true,
278
+ isDark: newIsDark
279
+ });
280
+ if (newOverlayColor) {
281
+ scaffoldInnerBlocks();
282
+ }
249
283
  });
250
284
  };
251
285
  const onUpdateDimRatio = async (newDimRatio) => {
@@ -299,6 +333,7 @@ function CoverEdit({
299
333
  }
300
334
  return getBackgroundEmbedHtml(embedPreview.html);
301
335
  }, [embedPreview, backgroundType]);
336
+ const [isSwappingMedia, setIsSwappingMedia] = useState(false);
302
337
  const isUploadingMedia = isTemporaryMedia(id, url);
303
338
  const isImageBackground = IMAGE_BACKGROUND_TYPE === backgroundType;
304
339
  const isVideoBackground = VIDEO_BACKGROUND_TYPE === backgroundType;
@@ -330,20 +365,11 @@ function CoverEdit({
330
365
  );
331
366
  const ref = useRef();
332
367
  const blockProps = useBlockProps({ ref });
333
- const [fontSizes] = useSettings("typography.fontSizes");
334
- const hasFontSizes = fontSizes?.length > 0;
335
- const innerBlocksTemplate = getInnerBlocksTemplate({
336
- fontSize: hasFontSizes ? "large" : void 0
337
- });
338
368
  const innerBlocksProps = useInnerBlocksProps(
339
369
  {
340
370
  className: "wp-block-cover__inner-container"
341
371
  },
342
372
  {
343
- // Avoid template sync when the `templateLock` value is `all` or `contentOnly`.
344
- // See: https://github.com/WordPress/gutenberg/pull/45632
345
- template: !hasInnerBlocks ? innerBlocksTemplate : void 0,
346
- templateInsertUpdatesSelection: true,
347
373
  allowedBlocks,
348
374
  templateLock,
349
375
  dropZoneElement: ref.current
@@ -373,6 +399,9 @@ function CoverEdit({
373
399
  if (typeof newId !== "number") {
374
400
  return;
375
401
  }
402
+ if (newId !== id && newUrl) {
403
+ setIsSwappingMedia(true);
404
+ }
376
405
  const nextAttributes = {
377
406
  id: newId,
378
407
  backgroundType: IMAGE_BACKGROUND_TYPE,
@@ -399,6 +428,13 @@ function CoverEdit({
399
428
  nextAttributes.isUserOverlayColor = currentAttrs.isUserOverlayColor || false;
400
429
  }
401
430
  setAttributes(nextAttributes);
431
+ const {
432
+ hasParallax: currentHasParallax,
433
+ isRepeated: currentIsRepeated
434
+ } = propsRef.current.attributes;
435
+ if (currentHasParallax || currentIsRepeated) {
436
+ setIsSwappingMedia(false);
437
+ }
402
438
  }
403
439
  });
404
440
  }, [
@@ -428,13 +464,18 @@ function CoverEdit({
428
464
  newOverlayColor,
429
465
  averageBackgroundColor
430
466
  );
431
- setAttributes({
432
- id: void 0,
433
- url: void 0,
434
- useFeaturedImage: newUseFeaturedImage,
435
- dimRatio: newDimRatio,
436
- backgroundType: useFeaturedImage ? IMAGE_BACKGROUND_TYPE : void 0,
437
- isDark: newIsDark
467
+ registry.batch(() => {
468
+ setAttributes({
469
+ id: void 0,
470
+ url: void 0,
471
+ useFeaturedImage: newUseFeaturedImage,
472
+ dimRatio: newDimRatio,
473
+ backgroundType: useFeaturedImage ? IMAGE_BACKGROUND_TYPE : void 0,
474
+ isDark: newIsDark
475
+ });
476
+ if (newUseFeaturedImage) {
477
+ scaffoldInnerBlocks();
478
+ }
438
479
  });
439
480
  };
440
481
  const blockControls = /* @__PURE__ */ jsx(
@@ -450,7 +491,8 @@ function CoverEdit({
450
491
  blockEditingMode,
451
492
  onEditMedia: openCoverMediaEditorModal,
452
493
  editMediaButtonRef,
453
- showEditMediaButton
494
+ showEditMediaButton,
495
+ isEditMediaDisabled: isSwappingMedia
454
496
  }
455
497
  );
456
498
  const inspectorControls = /* @__PURE__ */ jsx(
@@ -533,7 +575,7 @@ function CoverEdit({
533
575
  {
534
576
  "is-dark-theme": isDark,
535
577
  "is-light": !isDark,
536
- "is-transient": isUploadingMedia,
578
+ "is-transient": isUploadingMedia || isSwappingMedia,
537
579
  "has-parallax": hasParallax,
538
580
  "is-repeated": isRepeated,
539
581
  "has-custom-content-position": !isContentPositionCenter(contentPosition)
@@ -567,7 +609,9 @@ function CoverEdit({
567
609
  className: "wp-block-cover__image-background",
568
610
  alt,
569
611
  src: url,
570
- style: mediaStyle
612
+ style: mediaStyle,
613
+ onLoad: () => setIsSwappingMedia(false),
614
+ onError: () => setIsSwappingMedia(false)
571
615
  }
572
616
  ) : /* @__PURE__ */ jsx(
573
617
  "div",
@@ -636,7 +680,7 @@ function CoverEdit({
636
680
  style: { backgroundImage: gradientValue, ...bgStyle }
637
681
  }
638
682
  ),
639
- isUploadingMedia && /* @__PURE__ */ jsx(Spinner, {}),
683
+ (isUploadingMedia || isSwappingMedia) && /* @__PURE__ */ jsx(Spinner, {}),
640
684
  /* @__PURE__ */ jsx(
641
685
  CoverPlaceholder,
642
686
  {