@wordpress/block-library 11.0.0 → 11.1.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 (811) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +7 -7
  3. package/build/accordion/block.json +4 -1
  4. package/build/accordion-item/block.json +7 -1
  5. package/build/accordion-panel/block.json +9 -1
  6. package/build/archives/block.json +9 -0
  7. package/build/archives/edit.cjs.map +3 -3
  8. package/build/audio/block.json +8 -0
  9. package/build/audio/edit.cjs.map +3 -3
  10. package/build/avatar/hooks.cjs.map +2 -2
  11. package/build/breadcrumbs/block.json +3 -0
  12. package/build/breadcrumbs/edit.cjs.map +3 -3
  13. package/build/button/edit.cjs.map +2 -2
  14. package/build/buttons/block.json +9 -0
  15. package/build/categories/block.json +12 -1
  16. package/build/categories/edit.cjs.map +3 -3
  17. package/build/code/block.json +10 -0
  18. package/build/code/save.cjs.map +2 -2
  19. package/build/column/block.json +9 -0
  20. package/build/columns/block.json +9 -0
  21. package/build/comment-author-name/block.json +3 -0
  22. package/build/comment-content/block.json +5 -0
  23. package/build/comment-date/block.json +3 -0
  24. package/build/comment-edit-link/block.json +3 -0
  25. package/build/comment-reply-link/block.json +3 -0
  26. package/build/comment-template/hooks.cjs.map +2 -2
  27. package/build/comments/block.json +10 -0
  28. package/build/comments-pagination/block.json +3 -0
  29. package/build/comments-pagination-next/block.json +3 -0
  30. package/build/comments-pagination-numbers/block.json +3 -0
  31. package/build/comments-pagination-previous/block.json +6 -0
  32. package/build/comments-title/block.json +3 -0
  33. package/build/cover/edit/index.cjs +4 -1
  34. package/build/cover/edit/index.cjs.map +2 -2
  35. package/build/cover/edit/inspector-controls.cjs +52 -13
  36. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  37. package/build/cover/transforms.cjs.map +2 -2
  38. package/build/details/block.json +12 -0
  39. package/build/details/index.cjs.map +2 -2
  40. package/build/embed/embed-controls.cjs.map +2 -2
  41. package/build/file/block.json +9 -0
  42. package/build/file/deprecated.cjs.map +2 -2
  43. package/build/file/edit.cjs.map +2 -2
  44. package/build/file/inspector.cjs.map +3 -3
  45. package/build/file/save.cjs.map +2 -2
  46. package/build/footnotes/block.json +10 -0
  47. package/build/footnotes/edit.cjs.map +2 -2
  48. package/build/gallery/block.json +9 -0
  49. package/build/gallery/dynamic-gallery.cjs.map +3 -3
  50. package/build/gallery/edit.cjs +65 -39
  51. package/build/gallery/edit.cjs.map +3 -3
  52. package/build/gallery/{flex-styles.cjs → gallery-styles.cjs} +31 -32
  53. package/build/gallery/gallery-styles.cjs.map +7 -0
  54. package/build/gallery/responsive-styles.cjs +27 -5
  55. package/build/gallery/responsive-styles.cjs.map +2 -2
  56. package/build/group/block.json +1 -0
  57. package/build/heading/block.json +11 -0
  58. package/build/heading/index.cjs.map +2 -2
  59. package/build/home-link/block.json +18 -0
  60. package/build/home-link/edit.cjs.map +3 -3
  61. package/build/html/modal.cjs +3 -6
  62. package/build/html/modal.cjs.map +2 -2
  63. package/build/image/edit.cjs.map +2 -2
  64. package/build/image/image.cjs +10 -8
  65. package/build/image/image.cjs.map +3 -3
  66. package/build/image/use-open-image-media-editor-modal.cjs +20 -0
  67. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  68. package/build/index.cjs.map +2 -2
  69. package/build/latest-comments/block.json +10 -0
  70. package/build/latest-comments/edit.cjs.map +3 -3
  71. package/build/latest-posts/block.json +10 -0
  72. package/build/latest-posts/edit.cjs.map +2 -2
  73. package/build/list/ordered-list-settings.cjs.map +3 -3
  74. package/build/list-item/hooks/use-enter.cjs.map +2 -2
  75. package/build/loginout/block.json +10 -0
  76. package/build/math/block.json +12 -0
  77. package/build/math/deprecated.cjs +29 -12
  78. package/build/math/deprecated.cjs.map +2 -2
  79. package/build/math/edit.cjs +67 -46
  80. package/build/math/edit.cjs.map +2 -2
  81. package/build/math/save.cjs +2 -2
  82. package/build/math/save.cjs.map +2 -2
  83. package/build/media-text/block.json +1 -0
  84. package/build/media-text/constants.cjs +3 -0
  85. package/build/media-text/constants.cjs.map +2 -2
  86. package/build/media-text/deprecated.cjs.map +2 -2
  87. package/build/media-text/edit.cjs +40 -0
  88. package/build/media-text/edit.cjs.map +3 -3
  89. package/build/media-text/image-fill.cjs.map +2 -2
  90. package/build/media-text/media-container.cjs +3 -3
  91. package/build/media-text/media-container.cjs.map +2 -2
  92. package/build/navigation/edit/index.cjs +1 -4
  93. package/build/navigation/edit/index.cjs.map +2 -2
  94. package/build/navigation/edit/menu-inspector-controls.cjs.map +2 -2
  95. package/build/navigation/edit/overlay-template-part-selector.cjs.map +3 -3
  96. package/build/navigation/edit/responsive-wrapper.cjs.map +2 -2
  97. package/build/navigation/edit/use-generate-default-navigation-title.cjs.map +2 -2
  98. package/build/navigation/view.cjs +2 -2
  99. package/build/navigation/view.cjs.map +2 -2
  100. package/build/navigation-link/edit.cjs.map +2 -2
  101. package/build/navigation-link/link-ui/page-creator.cjs.map +3 -3
  102. package/build/navigation-link/shared/controls.cjs.map +3 -3
  103. package/build/navigation-link/shared/invalid-draft-display.cjs.map +2 -2
  104. package/build/navigation-link/shared/use-link-preview.cjs +13 -13
  105. package/build/navigation-link/shared/use-link-preview.cjs.map +2 -2
  106. package/build/navigation-overlay-close/block.json +7 -0
  107. package/build/navigation-submenu/block.json +6 -0
  108. package/build/navigation-submenu/edit.cjs +9 -1
  109. package/build/navigation-submenu/edit.cjs.map +3 -3
  110. package/build/page-list/block.json +10 -0
  111. package/build/paragraph/block.json +1 -0
  112. package/build/paragraph/edit.cjs +1 -2
  113. package/build/paragraph/edit.cjs.map +2 -2
  114. package/build/paragraph/index.cjs +6 -0
  115. package/build/paragraph/index.cjs.map +3 -3
  116. package/build/playlist/block.json +1 -0
  117. package/build/playlist/edit.cjs +2 -1
  118. package/build/playlist/edit.cjs.map +3 -3
  119. package/build/post-author/edit.cjs.map +3 -3
  120. package/build/post-author-biography/block.json +4 -0
  121. package/build/post-author-name/block.json +5 -0
  122. package/build/post-author-name/edit.cjs.map +2 -2
  123. package/build/post-comments-count/block.json +3 -0
  124. package/build/post-comments-form/block.json +10 -0
  125. package/build/post-content/block.json +3 -0
  126. package/build/post-date/block.json +3 -0
  127. package/build/post-date/edit.cjs.map +2 -2
  128. package/build/post-excerpt/block.json +6 -0
  129. package/build/post-excerpt/edit.cjs.map +2 -2
  130. package/build/post-featured-image/edit.cjs +11 -9
  131. package/build/post-featured-image/edit.cjs.map +2 -2
  132. package/build/post-navigation-link/block.json +30 -0
  133. package/build/post-navigation-link/edit.cjs +13 -2
  134. package/build/post-navigation-link/edit.cjs.map +3 -3
  135. package/build/post-template/block.json +13 -1
  136. package/build/post-terms/block.json +6 -0
  137. package/build/post-time-to-read/block.json +6 -0
  138. package/build/post-time-to-read/edit.cjs.map +2 -2
  139. package/build/post-title/block.json +10 -0
  140. package/build/preformatted/block.json +7 -0
  141. package/build/pullquote/block.json +1 -0
  142. package/build/pullquote/deprecated.cjs.map +2 -2
  143. package/build/query/deprecated.cjs.map +2 -2
  144. package/build/query/edit/inspector-controls/index.cjs.map +3 -3
  145. package/build/query/edit/inspector-controls/order-control.cjs.map +3 -3
  146. package/build/query/edit/inspector-controls/sticky-control.cjs.map +3 -3
  147. package/build/query/view.cjs.map +2 -2
  148. package/build/query-no-results/block.json +10 -2
  149. package/build/query-pagination/block.json +3 -0
  150. package/build/query-pagination-next/block.json +3 -0
  151. package/build/query-pagination-numbers/block.json +3 -0
  152. package/build/query-pagination-previous/block.json +3 -0
  153. package/build/query-title/block.json +3 -0
  154. package/build/query-title/use-archive-label.cjs.map +2 -2
  155. package/build/query-total/block.json +6 -0
  156. package/build/quote/block.json +1 -0
  157. package/build/quote/deprecated.cjs.map +2 -2
  158. package/build/quote/transforms.cjs.map +2 -2
  159. package/build/read-more/block.json +6 -0
  160. package/build/rss/block.json +6 -0
  161. package/build/search/edit.cjs.map +3 -3
  162. package/build/separator/edit.cjs.map +3 -3
  163. package/build/site-tagline/block.json +8 -1
  164. package/build/site-title/block.json +7 -1
  165. package/build/social-links/block.json +3 -0
  166. package/build/social-links/edit.cjs +2 -3
  167. package/build/social-links/edit.cjs.map +3 -3
  168. package/build/tab-panel/block.json +25 -0
  169. package/build/tab-panel/controls.cjs.map +3 -3
  170. package/build/tab-panels/block.json +18 -1
  171. package/build/table/state.cjs.map +2 -2
  172. package/build/table-of-contents/block.json +7 -0
  173. package/build/table-of-contents/edit.cjs.map +3 -3
  174. package/build/table-of-contents/utils.cjs.map +2 -2
  175. package/build/tabs/block.json +24 -1
  176. package/build/tabs/use-tab-actions.cjs.map +2 -2
  177. package/build/tag-cloud/block.json +19 -0
  178. package/build/tag-cloud/edit.cjs.map +3 -3
  179. package/build/template-part/edit/advanced-controls.cjs.map +3 -3
  180. package/build/template-part/edit/import-controls.cjs.map +3 -3
  181. package/build/template-part/edit/index.cjs.map +2 -2
  182. package/build/template-part/edit/inner-blocks.cjs.map +2 -2
  183. package/build/template-part/edit/placeholder.cjs.map +2 -2
  184. package/build/template-part/edit/selection-modal.cjs.map +1 -1
  185. package/build/term-count/block.json +7 -0
  186. package/build/term-count/use-term-count.cjs.map +2 -2
  187. package/build/term-description/block.json +9 -0
  188. package/build/term-description/use-term-description.cjs.map +2 -2
  189. package/build/term-name/block.json +10 -0
  190. package/build/term-name/use-term-name.cjs.map +2 -2
  191. package/build/term-template/block.json +10 -1
  192. package/build/terms-query/edit/inspector-controls/index.cjs.map +2 -2
  193. package/build/terms-query/edit/inspector-controls/inherit-control.cjs.map +2 -2
  194. package/build/terms-query/edit/inspector-controls/order-control.cjs.map +3 -3
  195. package/build/terms-query/edit/inspector-controls/taxonomy-control.cjs.map +3 -3
  196. package/build/utils/hooks.cjs.map +2 -2
  197. package/build/utils/media-control.cjs +5 -1
  198. package/build/utils/media-control.cjs.map +2 -2
  199. package/build/utils/poster-image.cjs.map +2 -2
  200. package/build/utils/search-patterns.cjs +7 -43
  201. package/build/utils/search-patterns.cjs.map +3 -3
  202. package/build/utils/style-state.cjs +4 -6
  203. package/build/utils/style-state.cjs.map +2 -2
  204. package/build/verse/block.json +1 -0
  205. package/build/video/block.json +6 -0
  206. package/build/video/edit-common-settings.cjs.map +3 -3
  207. package/build/video/edit.cjs +23 -15
  208. package/build/video/edit.cjs.map +3 -3
  209. package/build/video/index.cjs +0 -2
  210. package/build/video/index.cjs.map +3 -3
  211. package/build/video/save.cjs +5 -1
  212. package/build/video/save.cjs.map +3 -3
  213. package/build/video/tracks-editor.cjs.map +3 -3
  214. package/build-module/accordion/block.json +4 -1
  215. package/build-module/accordion-item/block.json +7 -1
  216. package/build-module/accordion-panel/block.json +9 -1
  217. package/build-module/archives/block.json +9 -0
  218. package/build-module/archives/edit.mjs +2 -2
  219. package/build-module/archives/edit.mjs.map +2 -2
  220. package/build-module/audio/block.json +8 -0
  221. package/build-module/audio/edit.mjs +2 -2
  222. package/build-module/audio/edit.mjs.map +2 -2
  223. package/build-module/avatar/hooks.mjs.map +2 -2
  224. package/build-module/breadcrumbs/block.json +3 -0
  225. package/build-module/breadcrumbs/edit.mjs +3 -3
  226. package/build-module/breadcrumbs/edit.mjs.map +2 -2
  227. package/build-module/button/edit.mjs.map +2 -2
  228. package/build-module/buttons/block.json +9 -0
  229. package/build-module/categories/block.json +12 -1
  230. package/build-module/categories/edit.mjs +2 -2
  231. package/build-module/categories/edit.mjs.map +2 -2
  232. package/build-module/code/block.json +10 -0
  233. package/build-module/code/save.mjs.map +2 -2
  234. package/build-module/column/block.json +9 -0
  235. package/build-module/columns/block.json +9 -0
  236. package/build-module/comment-author-name/block.json +3 -0
  237. package/build-module/comment-content/block.json +5 -0
  238. package/build-module/comment-date/block.json +3 -0
  239. package/build-module/comment-edit-link/block.json +3 -0
  240. package/build-module/comment-reply-link/block.json +3 -0
  241. package/build-module/comment-template/hooks.mjs.map +2 -2
  242. package/build-module/comments/block.json +10 -0
  243. package/build-module/comments-pagination/block.json +3 -0
  244. package/build-module/comments-pagination-next/block.json +3 -0
  245. package/build-module/comments-pagination-numbers/block.json +3 -0
  246. package/build-module/comments-pagination-previous/block.json +6 -0
  247. package/build-module/comments-title/block.json +3 -0
  248. package/build-module/cover/edit/index.mjs +4 -1
  249. package/build-module/cover/edit/index.mjs.map +2 -2
  250. package/build-module/cover/edit/inspector-controls.mjs +57 -14
  251. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  252. package/build-module/cover/transforms.mjs.map +2 -2
  253. package/build-module/details/block.json +12 -0
  254. package/build-module/details/index.mjs.map +2 -2
  255. package/build-module/embed/embed-controls.mjs.map +2 -2
  256. package/build-module/file/block.json +9 -0
  257. package/build-module/file/deprecated.mjs.map +2 -2
  258. package/build-module/file/edit.mjs.map +2 -2
  259. package/build-module/file/inspector.mjs +2 -2
  260. package/build-module/file/inspector.mjs.map +2 -2
  261. package/build-module/file/save.mjs.map +2 -2
  262. package/build-module/footnotes/block.json +10 -0
  263. package/build-module/footnotes/edit.mjs.map +2 -2
  264. package/build-module/gallery/block.json +9 -0
  265. package/build-module/gallery/dynamic-gallery.mjs +2 -2
  266. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  267. package/build-module/gallery/edit.mjs +68 -42
  268. package/build-module/gallery/edit.mjs.map +2 -2
  269. package/build-module/gallery/{flex-styles.mjs → gallery-styles.mjs} +29 -30
  270. package/build-module/gallery/gallery-styles.mjs.map +7 -0
  271. package/build-module/gallery/responsive-styles.mjs +25 -4
  272. package/build-module/gallery/responsive-styles.mjs.map +2 -2
  273. package/build-module/group/block.json +1 -0
  274. package/build-module/heading/block.json +11 -0
  275. package/build-module/heading/index.mjs.map +2 -2
  276. package/build-module/home-link/block.json +18 -0
  277. package/build-module/home-link/edit.mjs +2 -2
  278. package/build-module/home-link/edit.mjs.map +2 -2
  279. package/build-module/html/modal.mjs +3 -6
  280. package/build-module/html/modal.mjs.map +2 -2
  281. package/build-module/image/edit.mjs.map +2 -2
  282. package/build-module/image/image.mjs +12 -10
  283. package/build-module/image/image.mjs.map +2 -2
  284. package/build-module/image/use-open-image-media-editor-modal.mjs +20 -0
  285. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  286. package/build-module/index.mjs.map +2 -2
  287. package/build-module/latest-comments/block.json +10 -0
  288. package/build-module/latest-comments/edit.mjs +2 -2
  289. package/build-module/latest-comments/edit.mjs.map +2 -2
  290. package/build-module/latest-posts/block.json +10 -0
  291. package/build-module/latest-posts/edit.mjs.map +2 -2
  292. package/build-module/list/ordered-list-settings.mjs +2 -2
  293. package/build-module/list/ordered-list-settings.mjs.map +2 -2
  294. package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
  295. package/build-module/loginout/block.json +10 -0
  296. package/build-module/math/block.json +12 -0
  297. package/build-module/math/deprecated.mjs +29 -12
  298. package/build-module/math/deprecated.mjs.map +2 -2
  299. package/build-module/math/edit.mjs +68 -47
  300. package/build-module/math/edit.mjs.map +2 -2
  301. package/build-module/math/save.mjs +2 -2
  302. package/build-module/math/save.mjs.map +2 -2
  303. package/build-module/media-text/block.json +1 -0
  304. package/build-module/media-text/constants.mjs +2 -0
  305. package/build-module/media-text/constants.mjs.map +2 -2
  306. package/build-module/media-text/deprecated.mjs.map +2 -2
  307. package/build-module/media-text/edit.mjs +42 -1
  308. package/build-module/media-text/edit.mjs.map +2 -2
  309. package/build-module/media-text/image-fill.mjs.map +2 -2
  310. package/build-module/media-text/media-container.mjs +1 -1
  311. package/build-module/media-text/media-container.mjs.map +2 -2
  312. package/build-module/navigation/edit/index.mjs +1 -4
  313. package/build-module/navigation/edit/index.mjs.map +2 -2
  314. package/build-module/navigation/edit/menu-inspector-controls.mjs.map +2 -2
  315. package/build-module/navigation/edit/overlay-template-part-selector.mjs +2 -2
  316. package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +2 -2
  317. package/build-module/navigation/edit/responsive-wrapper.mjs.map +2 -2
  318. package/build-module/navigation/edit/use-generate-default-navigation-title.mjs.map +2 -2
  319. package/build-module/navigation/view.mjs +2 -2
  320. package/build-module/navigation/view.mjs.map +2 -2
  321. package/build-module/navigation-link/edit.mjs.map +2 -2
  322. package/build-module/navigation-link/link-ui/page-creator.mjs +2 -2
  323. package/build-module/navigation-link/link-ui/page-creator.mjs.map +2 -2
  324. package/build-module/navigation-link/shared/controls.mjs +2 -2
  325. package/build-module/navigation-link/shared/controls.mjs.map +2 -2
  326. package/build-module/navigation-link/shared/invalid-draft-display.mjs.map +2 -2
  327. package/build-module/navigation-link/shared/use-link-preview.mjs +13 -13
  328. package/build-module/navigation-link/shared/use-link-preview.mjs.map +2 -2
  329. package/build-module/navigation-overlay-close/block.json +7 -0
  330. package/build-module/navigation-submenu/block.json +6 -0
  331. package/build-module/navigation-submenu/edit.mjs +11 -2
  332. package/build-module/navigation-submenu/edit.mjs.map +2 -2
  333. package/build-module/page-list/block.json +10 -0
  334. package/build-module/paragraph/block.json +1 -0
  335. package/build-module/paragraph/edit.mjs +1 -2
  336. package/build-module/paragraph/edit.mjs.map +2 -2
  337. package/build-module/paragraph/index.mjs +6 -0
  338. package/build-module/paragraph/index.mjs.map +2 -2
  339. package/build-module/playlist/block.json +1 -0
  340. package/build-module/playlist/edit.mjs +5 -4
  341. package/build-module/playlist/edit.mjs.map +2 -2
  342. package/build-module/post-author/edit.mjs +2 -2
  343. package/build-module/post-author/edit.mjs.map +2 -2
  344. package/build-module/post-author-biography/block.json +4 -0
  345. package/build-module/post-author-name/block.json +5 -0
  346. package/build-module/post-author-name/edit.mjs.map +2 -2
  347. package/build-module/post-comments-count/block.json +3 -0
  348. package/build-module/post-comments-form/block.json +10 -0
  349. package/build-module/post-content/block.json +3 -0
  350. package/build-module/post-date/block.json +3 -0
  351. package/build-module/post-date/edit.mjs.map +2 -2
  352. package/build-module/post-excerpt/block.json +6 -0
  353. package/build-module/post-excerpt/edit.mjs.map +2 -2
  354. package/build-module/post-featured-image/edit.mjs +11 -9
  355. package/build-module/post-featured-image/edit.mjs.map +2 -2
  356. package/build-module/post-navigation-link/block.json +30 -0
  357. package/build-module/post-navigation-link/edit.mjs +19 -5
  358. package/build-module/post-navigation-link/edit.mjs.map +2 -2
  359. package/build-module/post-template/block.json +13 -1
  360. package/build-module/post-terms/block.json +6 -0
  361. package/build-module/post-time-to-read/block.json +6 -0
  362. package/build-module/post-time-to-read/edit.mjs.map +2 -2
  363. package/build-module/post-title/block.json +10 -0
  364. package/build-module/preformatted/block.json +7 -0
  365. package/build-module/pullquote/block.json +1 -0
  366. package/build-module/pullquote/deprecated.mjs.map +2 -2
  367. package/build-module/query/deprecated.mjs.map +2 -2
  368. package/build-module/query/edit/inspector-controls/index.mjs +2 -2
  369. package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
  370. package/build-module/query/edit/inspector-controls/order-control.mjs +2 -2
  371. package/build-module/query/edit/inspector-controls/order-control.mjs.map +2 -2
  372. package/build-module/query/edit/inspector-controls/sticky-control.mjs +2 -2
  373. package/build-module/query/edit/inspector-controls/sticky-control.mjs.map +2 -2
  374. package/build-module/query/view.mjs.map +2 -2
  375. package/build-module/query-no-results/block.json +10 -2
  376. package/build-module/query-pagination/block.json +3 -0
  377. package/build-module/query-pagination-next/block.json +3 -0
  378. package/build-module/query-pagination-numbers/block.json +3 -0
  379. package/build-module/query-pagination-previous/block.json +3 -0
  380. package/build-module/query-title/block.json +3 -0
  381. package/build-module/query-title/use-archive-label.mjs.map +2 -2
  382. package/build-module/query-total/block.json +6 -0
  383. package/build-module/quote/block.json +1 -0
  384. package/build-module/quote/deprecated.mjs.map +2 -2
  385. package/build-module/quote/transforms.mjs.map +2 -2
  386. package/build-module/read-more/block.json +6 -0
  387. package/build-module/rss/block.json +6 -0
  388. package/build-module/search/edit.mjs +3 -3
  389. package/build-module/search/edit.mjs.map +2 -2
  390. package/build-module/separator/edit.mjs +5 -2
  391. package/build-module/separator/edit.mjs.map +2 -2
  392. package/build-module/site-tagline/block.json +8 -1
  393. package/build-module/site-title/block.json +7 -1
  394. package/build-module/social-links/block.json +3 -0
  395. package/build-module/social-links/edit.mjs +4 -5
  396. package/build-module/social-links/edit.mjs.map +2 -2
  397. package/build-module/tab-panel/block.json +25 -0
  398. package/build-module/tab-panel/controls.mjs +2 -2
  399. package/build-module/tab-panel/controls.mjs.map +2 -2
  400. package/build-module/tab-panels/block.json +18 -1
  401. package/build-module/table/state.mjs.map +2 -2
  402. package/build-module/table-of-contents/block.json +7 -0
  403. package/build-module/table-of-contents/edit.mjs +2 -2
  404. package/build-module/table-of-contents/edit.mjs.map +2 -2
  405. package/build-module/table-of-contents/utils.mjs.map +2 -2
  406. package/build-module/tabs/block.json +24 -1
  407. package/build-module/tabs/use-tab-actions.mjs.map +2 -2
  408. package/build-module/tag-cloud/block.json +19 -0
  409. package/build-module/tag-cloud/edit.mjs +2 -2
  410. package/build-module/tag-cloud/edit.mjs.map +2 -2
  411. package/build-module/template-part/edit/advanced-controls.mjs +5 -2
  412. package/build-module/template-part/edit/advanced-controls.mjs.map +2 -2
  413. package/build-module/template-part/edit/import-controls.mjs +2 -2
  414. package/build-module/template-part/edit/import-controls.mjs.map +2 -2
  415. package/build-module/template-part/edit/index.mjs.map +2 -2
  416. package/build-module/template-part/edit/inner-blocks.mjs.map +2 -2
  417. package/build-module/template-part/edit/placeholder.mjs.map +2 -2
  418. package/build-module/template-part/edit/selection-modal.mjs.map +1 -1
  419. package/build-module/term-count/block.json +7 -0
  420. package/build-module/term-count/use-term-count.mjs.map +2 -2
  421. package/build-module/term-description/block.json +9 -0
  422. package/build-module/term-description/use-term-description.mjs.map +2 -2
  423. package/build-module/term-name/block.json +10 -0
  424. package/build-module/term-name/use-term-name.mjs.map +2 -2
  425. package/build-module/term-template/block.json +10 -1
  426. package/build-module/terms-query/edit/inspector-controls/index.mjs.map +2 -2
  427. package/build-module/terms-query/edit/inspector-controls/inherit-control.mjs.map +2 -2
  428. package/build-module/terms-query/edit/inspector-controls/order-control.mjs +2 -2
  429. package/build-module/terms-query/edit/inspector-controls/order-control.mjs.map +2 -2
  430. package/build-module/terms-query/edit/inspector-controls/taxonomy-control.mjs +2 -2
  431. package/build-module/terms-query/edit/inspector-controls/taxonomy-control.mjs.map +2 -2
  432. package/build-module/utils/hooks.mjs.map +2 -2
  433. package/build-module/utils/media-control.mjs +5 -1
  434. package/build-module/utils/media-control.mjs.map +2 -2
  435. package/build-module/utils/poster-image.mjs.map +2 -2
  436. package/build-module/utils/search-patterns.mjs +7 -32
  437. package/build-module/utils/search-patterns.mjs.map +2 -2
  438. package/build-module/utils/style-state.mjs +6 -4
  439. package/build-module/utils/style-state.mjs.map +2 -2
  440. package/build-module/verse/block.json +1 -0
  441. package/build-module/video/block.json +6 -0
  442. package/build-module/video/edit-common-settings.mjs +2 -2
  443. package/build-module/video/edit-common-settings.mjs.map +2 -2
  444. package/build-module/video/edit.mjs +25 -16
  445. package/build-module/video/edit.mjs.map +2 -2
  446. package/build-module/video/index.mjs +0 -2
  447. package/build-module/video/index.mjs.map +2 -2
  448. package/build-module/video/save.mjs +7 -2
  449. package/build-module/video/save.mjs.map +2 -2
  450. package/build-module/video/tracks-editor.mjs +2 -2
  451. package/build-module/video/tracks-editor.mjs.map +2 -2
  452. package/build-style/button/style-rtl.css +2 -1
  453. package/build-style/button/style.css +2 -1
  454. package/build-style/columns/style-rtl.css +1 -1
  455. package/build-style/columns/style.css +1 -1
  456. package/build-style/comments/editor-rtl.css +1 -1
  457. package/build-style/comments/editor.css +1 -1
  458. package/build-style/comments/style-rtl.css +1 -1
  459. package/build-style/comments/style.css +1 -1
  460. package/build-style/common-rtl.css +1 -1
  461. package/build-style/common.css +1 -1
  462. package/build-style/cover/style-rtl.css +6 -0
  463. package/build-style/cover/style.css +6 -0
  464. package/build-style/editor-rtl.css +21 -7
  465. package/build-style/editor.css +21 -7
  466. package/build-style/embed/editor-rtl.css +2 -1
  467. package/build-style/embed/editor.css +2 -1
  468. package/build-style/gallery/style-rtl.css +1 -2
  469. package/build-style/gallery/style.css +1 -2
  470. package/build-style/image/editor-rtl.css +6 -0
  471. package/build-style/image/editor.css +6 -0
  472. package/build-style/image/style-rtl.css +6 -9
  473. package/build-style/image/style.css +6 -9
  474. package/build-style/math/editor-rtl.css +5 -0
  475. package/build-style/math/editor.css +5 -0
  476. package/build-style/navigation/editor-rtl.css +1 -0
  477. package/build-style/navigation/editor.css +1 -0
  478. package/build-style/navigation/style-rtl.css +19 -4
  479. package/build-style/navigation/style.css +19 -4
  480. package/build-style/navigation-link/editor-rtl.css +3 -1
  481. package/build-style/navigation-link/editor.css +3 -1
  482. package/build-style/navigation-overlay-close/style-rtl.css +1 -1
  483. package/build-style/navigation-overlay-close/style.css +1 -1
  484. package/build-style/navigation-submenu/editor-rtl.css +3 -1
  485. package/build-style/navigation-submenu/editor.css +3 -1
  486. package/build-style/post-navigation-link/style-rtl.css +3 -0
  487. package/build-style/post-navigation-link/style.css +3 -0
  488. package/build-style/post-title/style-rtl.css +2 -2
  489. package/build-style/post-title/style.css +2 -2
  490. package/build-style/query-pagination/editor-rtl.css +0 -3
  491. package/build-style/query-pagination/editor.css +0 -3
  492. package/build-style/search/theme-rtl.css +1 -1
  493. package/build-style/search/theme.css +1 -1
  494. package/build-style/style-rtl.css +47 -23
  495. package/build-style/style.css +47 -23
  496. package/build-style/tab-panel/style-rtl.css +2 -0
  497. package/build-style/tab-panel/style.css +2 -0
  498. package/build-style/theme-rtl.css +1 -1
  499. package/build-style/theme.css +1 -1
  500. package/build-style/verse/style-rtl.css +2 -1
  501. package/build-style/verse/style.css +2 -1
  502. package/package.json +42 -43
  503. package/src/accordion/README.md +3 -0
  504. package/src/accordion/block.json +4 -1
  505. package/src/accordion-item/README.md +5 -0
  506. package/src/accordion-item/block.json +7 -1
  507. package/src/accordion-panel/README.md +7 -0
  508. package/src/accordion-panel/block.json +9 -1
  509. package/src/archives/README.md +4 -0
  510. package/src/archives/block.json +9 -0
  511. package/src/archives/edit.jsx +2 -2
  512. package/src/audio/README.md +4 -0
  513. package/src/audio/block.json +8 -0
  514. package/src/audio/edit.jsx +2 -2
  515. package/src/avatar/hooks.js +2 -2
  516. package/src/breadcrumbs/README.md +2 -0
  517. package/src/breadcrumbs/block.json +3 -0
  518. package/src/breadcrumbs/edit.jsx +3 -3
  519. package/src/breadcrumbs/index.php +1 -1
  520. package/src/button/edit.jsx +1 -1
  521. package/src/button/style.scss +2 -2
  522. package/src/buttons/README.md +4 -0
  523. package/src/buttons/block.json +9 -0
  524. package/src/calendar/index.php +1 -1
  525. package/src/categories/README.md +6 -0
  526. package/src/categories/block.json +12 -1
  527. package/src/categories/edit.jsx +2 -2
  528. package/src/code/README.md +5 -0
  529. package/src/code/block.json +10 -0
  530. package/src/code/save.jsx +1 -1
  531. package/src/column/README.md +4 -0
  532. package/src/column/block.json +9 -0
  533. package/src/columns/README.md +4 -0
  534. package/src/columns/block.json +9 -0
  535. package/src/columns/style.scss +2 -3
  536. package/src/comment-author-name/README.md +2 -0
  537. package/src/comment-author-name/block.json +3 -0
  538. package/src/comment-content/README.md +4 -0
  539. package/src/comment-content/block.json +5 -0
  540. package/src/comment-date/README.md +2 -0
  541. package/src/comment-date/block.json +3 -0
  542. package/src/comment-edit-link/README.md +2 -0
  543. package/src/comment-edit-link/block.json +3 -0
  544. package/src/comment-reply-link/README.md +2 -0
  545. package/src/comment-reply-link/block.json +3 -0
  546. package/src/comment-template/hooks.js +1 -1
  547. package/src/comments/README.md +5 -0
  548. package/src/comments/block.json +10 -0
  549. package/src/comments/style.scss +1 -1
  550. package/src/comments-pagination/README.md +2 -0
  551. package/src/comments-pagination/block.json +3 -0
  552. package/src/comments-pagination-next/README.md +2 -0
  553. package/src/comments-pagination-next/block.json +3 -0
  554. package/src/comments-pagination-numbers/README.md +2 -0
  555. package/src/comments-pagination-numbers/block.json +3 -0
  556. package/src/comments-pagination-previous/README.md +2 -0
  557. package/src/comments-pagination-previous/block.json +6 -0
  558. package/src/comments-title/README.md +2 -0
  559. package/src/comments-title/block.json +3 -0
  560. package/src/common.scss +1 -2
  561. package/src/cover/edit/index.jsx +5 -2
  562. package/src/cover/edit/inspector-controls.jsx +66 -15
  563. package/src/cover/style.scss +10 -0
  564. package/src/cover/test/{edit.jsdom.test.js → edit.browser.test.js} +122 -147
  565. package/src/cover/transforms.js +3 -3
  566. package/src/details/README.md +7 -0
  567. package/src/details/block.json +12 -0
  568. package/src/details/index.js +1 -1
  569. package/src/embed/editor.scss +2 -2
  570. package/src/embed/embed-controls.jsx +2 -2
  571. package/src/file/README.md +4 -0
  572. package/src/file/block.json +9 -0
  573. package/src/file/deprecated.jsx +3 -3
  574. package/src/file/edit.jsx +5 -3
  575. package/src/file/inspector.jsx +3 -3
  576. package/src/file/save.jsx +2 -2
  577. package/src/footnotes/README.md +5 -0
  578. package/src/footnotes/block.json +10 -0
  579. package/src/footnotes/edit.jsx +1 -1
  580. package/src/gallery/README.md +4 -0
  581. package/src/gallery/block.json +9 -0
  582. package/src/gallery/dynamic-gallery.jsx +4 -4
  583. package/src/gallery/edit.jsx +122 -70
  584. package/src/gallery/gallery-styles.js +117 -0
  585. package/src/gallery/index.php +181 -67
  586. package/src/gallery/responsive-styles.js +59 -5
  587. package/src/gallery/test/edit.jsdom.test.js +71 -3
  588. package/src/gallery/test/responsive-styles.js +59 -5
  589. package/src/group/README.md +1 -0
  590. package/src/group/block.json +1 -0
  591. package/src/heading/README.md +6 -0
  592. package/src/heading/block.json +11 -0
  593. package/src/heading/index.js +2 -2
  594. package/src/home-link/README.md +5 -0
  595. package/src/home-link/block.json +18 -0
  596. package/src/home-link/edit.jsx +2 -2
  597. package/src/html/modal.jsx +0 -3
  598. package/src/icon/index.php +9 -0
  599. package/src/image/edit.jsx +1 -1
  600. package/src/image/editor.scss +8 -0
  601. package/src/image/image.jsx +20 -18
  602. package/src/image/index.php +10 -4
  603. package/src/image/style.scss +1 -0
  604. package/src/image/test/use-open-image-media-editor-modal.jsdom.test.js +140 -1
  605. package/src/image/use-open-image-media-editor-modal.js +37 -0
  606. package/src/index.jsx +1 -1
  607. package/src/latest-comments/README.md +5 -0
  608. package/src/latest-comments/block.json +10 -0
  609. package/src/latest-comments/edit.jsx +2 -2
  610. package/src/latest-posts/README.md +5 -0
  611. package/src/latest-posts/block.json +10 -0
  612. package/src/latest-posts/edit.jsx +1 -1
  613. package/src/list/ordered-list-settings.jsx +2 -2
  614. package/src/list-item/hooks/use-enter.js +1 -1
  615. package/src/loginout/README.md +5 -0
  616. package/src/loginout/block.json +10 -0
  617. package/src/math/README.md +7 -2
  618. package/src/math/block.json +12 -0
  619. package/src/math/deprecated.jsx +38 -12
  620. package/src/math/edit.jsx +49 -20
  621. package/src/math/editor.scss +5 -0
  622. package/src/math/save.jsx +20 -4
  623. package/src/media-text/README.md +1 -0
  624. package/src/media-text/block.json +1 -0
  625. package/src/media-text/constants.js +1 -0
  626. package/src/media-text/deprecated.jsx +3 -3
  627. package/src/media-text/edit.jsx +48 -3
  628. package/src/media-text/image-fill.js +2 -2
  629. package/src/media-text/media-container.jsx +1 -1
  630. package/src/navigation/edit/index.jsx +3 -5
  631. package/src/navigation/edit/menu-inspector-controls.jsx +2 -2
  632. package/src/navigation/edit/overlay-template-part-selector.jsx +3 -3
  633. package/src/navigation/edit/responsive-wrapper.jsx +1 -1
  634. package/src/navigation/edit/use-generate-default-navigation-title.js +2 -2
  635. package/src/navigation/editor.scss +1 -0
  636. package/src/navigation/index.php +12 -0
  637. package/src/navigation/style.scss +41 -5
  638. package/src/navigation/test/use-navigation-menu.jsdom.test.js +6 -28
  639. package/src/navigation/test/view.jsdom.test.js +23 -0
  640. package/src/navigation/view.js +9 -6
  641. package/src/navigation-link/edit.jsx +1 -1
  642. package/src/navigation-link/editor.scss +6 -1
  643. package/src/navigation-link/link-ui/page-creator.jsx +2 -2
  644. package/src/navigation-link/shared/controls.jsx +2 -2
  645. package/src/navigation-link/shared/invalid-draft-display.jsx +2 -2
  646. package/src/navigation-link/shared/test/use-link-preview.jsdom.test.js +22 -22
  647. package/src/navigation-link/shared/use-link-preview.js +15 -14
  648. package/src/navigation-link/test/__snapshots__/hooks.jsdom.test.js.snap +41 -11
  649. package/src/navigation-overlay-close/README.md +1 -0
  650. package/src/navigation-overlay-close/block.json +7 -0
  651. package/src/navigation-overlay-close/style.scss +1 -1
  652. package/src/navigation-submenu/README.md +7 -0
  653. package/src/navigation-submenu/block.json +6 -0
  654. package/src/navigation-submenu/edit.jsx +12 -2
  655. package/src/navigation-submenu/editor.scss +6 -1
  656. package/src/navigation-submenu/index.php +11 -0
  657. package/src/page-list/README.md +5 -0
  658. package/src/page-list/block.json +10 -0
  659. package/src/paragraph/README.md +1 -0
  660. package/src/paragraph/block.json +1 -0
  661. package/src/paragraph/edit.jsx +2 -4
  662. package/src/paragraph/index.js +7 -0
  663. package/src/pattern/index.php +2 -2
  664. package/src/playlist/README.md +1 -0
  665. package/src/playlist/block.json +1 -0
  666. package/src/playlist/edit.jsx +6 -4
  667. package/src/playlist-track/test/edit.jsdom.test.jsx +2 -3
  668. package/src/post-author/edit.jsx +2 -2
  669. package/src/post-author-biography/README.md +3 -0
  670. package/src/post-author-biography/block.json +4 -0
  671. package/src/post-author-name/README.md +4 -0
  672. package/src/post-author-name/block.json +5 -0
  673. package/src/post-author-name/edit.jsx +1 -1
  674. package/src/post-comments-count/README.md +2 -0
  675. package/src/post-comments-count/block.json +3 -0
  676. package/src/post-comments-form/README.md +5 -0
  677. package/src/post-comments-form/block.json +10 -0
  678. package/src/post-content/README.md +3 -0
  679. package/src/post-content/block.json +3 -0
  680. package/src/post-date/README.md +2 -0
  681. package/src/post-date/block.json +3 -0
  682. package/src/post-date/edit.jsx +2 -2
  683. package/src/post-excerpt/README.md +5 -0
  684. package/src/post-excerpt/block.json +6 -0
  685. package/src/post-excerpt/edit.jsx +1 -1
  686. package/src/post-featured-image/edit.jsx +13 -11
  687. package/src/post-navigation-link/README.md +12 -0
  688. package/src/post-navigation-link/block.json +30 -0
  689. package/src/post-navigation-link/edit.jsx +27 -6
  690. package/src/post-navigation-link/index.php +94 -5
  691. package/src/post-navigation-link/style.scss +2 -0
  692. package/src/post-template/README.md +7 -0
  693. package/src/post-template/block.json +13 -1
  694. package/src/post-terms/README.md +5 -0
  695. package/src/post-terms/block.json +6 -0
  696. package/src/post-time-to-read/README.md +5 -0
  697. package/src/post-time-to-read/block.json +6 -0
  698. package/src/post-time-to-read/edit.jsx +2 -2
  699. package/src/post-title/README.md +5 -0
  700. package/src/post-title/block.json +10 -0
  701. package/src/post-title/style.scss +2 -3
  702. package/src/preformatted/README.md +6 -0
  703. package/src/preformatted/block.json +7 -0
  704. package/src/pullquote/README.md +1 -0
  705. package/src/pullquote/block.json +1 -0
  706. package/src/pullquote/deprecated.jsx +1 -1
  707. package/src/query/deprecated.jsx +1 -1
  708. package/src/query/edit/inspector-controls/index.jsx +4 -4
  709. package/src/query/edit/inspector-controls/order-control.jsx +2 -2
  710. package/src/query/edit/inspector-controls/sticky-control.jsx +2 -2
  711. package/src/query/view.js +6 -9
  712. package/src/query-no-results/README.md +7 -0
  713. package/src/query-no-results/block.json +10 -2
  714. package/src/query-pagination/README.md +2 -0
  715. package/src/query-pagination/block.json +3 -0
  716. package/src/query-pagination/editor.scss +0 -3
  717. package/src/query-pagination-next/README.md +2 -0
  718. package/src/query-pagination-next/block.json +3 -0
  719. package/src/query-pagination-numbers/README.md +2 -0
  720. package/src/query-pagination-numbers/block.json +3 -0
  721. package/src/query-pagination-previous/README.md +2 -0
  722. package/src/query-pagination-previous/block.json +3 -0
  723. package/src/query-title/README.md +2 -0
  724. package/src/query-title/block.json +3 -0
  725. package/src/query-title/use-archive-label.js +1 -1
  726. package/src/query-total/README.md +5 -0
  727. package/src/query-total/block.json +6 -0
  728. package/src/quote/README.md +1 -0
  729. package/src/quote/block.json +1 -0
  730. package/src/quote/deprecated.jsx +2 -2
  731. package/src/quote/transforms.js +3 -3
  732. package/src/read-more/README.md +5 -0
  733. package/src/read-more/block.json +6 -0
  734. package/src/rss/README.md +5 -0
  735. package/src/rss/block.json +6 -0
  736. package/src/search/edit.jsx +6 -6
  737. package/src/search/theme.scss +1 -1
  738. package/src/separator/edit.jsx +7 -4
  739. package/src/site-tagline/README.md +6 -0
  740. package/src/site-tagline/block.json +8 -1
  741. package/src/site-title/README.md +5 -0
  742. package/src/site-title/block.json +7 -1
  743. package/src/social-links/README.md +2 -0
  744. package/src/social-links/block.json +3 -0
  745. package/src/social-links/edit.jsx +4 -5
  746. package/src/tab-panel/README.md +9 -0
  747. package/src/tab-panel/block.json +25 -0
  748. package/src/tab-panel/controls.jsx +2 -2
  749. package/src/tab-panel/style.scss +5 -2
  750. package/src/tab-panels/README.md +7 -0
  751. package/src/tab-panels/block.json +18 -1
  752. package/src/table/state.js +1 -1
  753. package/src/table-of-contents/README.md +6 -0
  754. package/src/table-of-contents/block.json +7 -0
  755. package/src/table-of-contents/edit.jsx +6 -6
  756. package/src/table-of-contents/utils.ts +2 -2
  757. package/src/tabs/README.md +9 -0
  758. package/src/tabs/block.json +24 -1
  759. package/src/tabs/use-tab-actions.js +1 -1
  760. package/src/tag-cloud/README.md +9 -0
  761. package/src/tag-cloud/block.json +19 -0
  762. package/src/tag-cloud/edit.jsx +2 -2
  763. package/src/template-part/edit/advanced-controls.jsx +5 -2
  764. package/src/template-part/edit/import-controls.jsx +2 -2
  765. package/src/template-part/edit/index.jsx +2 -2
  766. package/src/template-part/edit/inner-blocks.jsx +1 -1
  767. package/src/template-part/edit/placeholder.jsx +2 -2
  768. package/src/template-part/edit/selection-modal.jsx +1 -1
  769. package/src/term-count/README.md +6 -0
  770. package/src/term-count/block.json +7 -0
  771. package/src/term-count/use-term-count.js +1 -1
  772. package/src/term-description/README.md +5 -0
  773. package/src/term-description/block.json +9 -0
  774. package/src/term-description/use-term-description.js +1 -1
  775. package/src/term-name/README.md +5 -0
  776. package/src/term-name/block.json +10 -0
  777. package/src/term-name/index.php +1 -1
  778. package/src/term-name/use-term-name.js +1 -1
  779. package/src/term-template/README.md +5 -0
  780. package/src/term-template/block.json +10 -1
  781. package/src/terms-query/edit/inspector-controls/index.jsx +2 -2
  782. package/src/terms-query/edit/inspector-controls/inherit-control.jsx +1 -1
  783. package/src/terms-query/edit/inspector-controls/order-control.jsx +2 -2
  784. package/src/terms-query/edit/inspector-controls/taxonomy-control.jsx +2 -2
  785. package/src/utils/hooks.js +1 -1
  786. package/src/utils/media-control.jsx +16 -10
  787. package/src/utils/poster-image.jsx +2 -2
  788. package/src/utils/search-patterns.js +9 -53
  789. package/src/utils/style-state.js +6 -4
  790. package/src/utils/test/{search-patterns.js → search-patterns.jsdom.test.js} +1 -22
  791. package/src/utils/test/waveform-player.jsdom.test.jsx +36 -38
  792. package/src/utils/test/{waveform-utils.jsdom.test.js → waveform-utils.browser.test.js} +64 -44
  793. package/src/verse/README.md +1 -0
  794. package/src/verse/block.json +1 -0
  795. package/src/verse/style.scss +2 -2
  796. package/src/video/README.md +7 -0
  797. package/src/video/block.json +6 -0
  798. package/src/video/edit-common-settings.jsx +3 -3
  799. package/src/video/edit.jsx +56 -51
  800. package/src/video/index.js +0 -2
  801. package/src/video/save.jsx +10 -1
  802. package/src/video/tracks-editor.jsx +2 -2
  803. package/build/gallery/flex-styles.cjs.map +0 -7
  804. package/build/video/variations.cjs +0 -75
  805. package/build/video/variations.cjs.map +0 -7
  806. package/build-module/gallery/flex-styles.mjs.map +0 -7
  807. package/build-module/video/variations.mjs +0 -50
  808. package/build-module/video/variations.mjs.map +0 -7
  809. package/src/gallery/flex-styles.js +0 -99
  810. package/src/video/test/variations.js +0 -63
  811. package/src/video/variations.js +0 -62
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/navigation-link/shared/use-link-preview.js"],
4
- "sourcesContent": ["import { __, sprintf } from '@wordpress/i18n';\nimport { safeDecodeURI } from '@wordpress/url';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreDataStore } from '@wordpress/core-data';\nimport { unlock } from '../../lock-unlock';\n\nconst { useRemoteUrlData, isHashLink, isRelativePath } = unlock(\n\tblockEditorPrivateApis\n);\n\n/**\n * Capitalize the first letter of a string.\n *\n * @param {string} str - The string to capitalize\n * @return {string} Capitalized string\n */\nfunction capitalize( str ) {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n}\n\n/**\n * Check if a URL points to the site homepage.\n * Handles protocol (http/https) and trailing slash variations.\n * Does not match subdomains unless they are the site URL.\n *\n * @param {string} url - The URL to check\n * @param {string} homeUrl - The WordPress site URL\n * @return {boolean} True if url is the homepage\n */\nexport function isHomepage( url, homeUrl ) {\n\tif ( url === '/' ) {\n\t\treturn true;\n\t}\n\tif ( ! url || ! homeUrl ) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst urlParsed = new URL( url, homeUrl );\n\t\tconst homeParsed = new URL( homeUrl );\n\n\t\t// Same host, i.e. sub.homepage.com or homepage.com\n\t\tif ( urlParsed.hostname !== homeParsed.hostname ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Path must match site root (normalize trailing slash)\n\t\tconst urlPath = urlParsed.pathname.replace( /\\/$/, '' );\n\t\tconst homePath = homeParsed.pathname.replace( /\\/$/, '' );\n\n\t\treturn urlPath === homePath;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Compute display URL - strips site URL if internal, shows full URL if external.\n *\n * @param {Object} options - Parameters object\n * @param {string} options.linkUrl - The URL to process\n * @param {string} options.homeUrl - The WordPress site URL (required for internal/external detection)\n * @return {Object} Object with displayUrl and isExternal flag\n */\nexport function computeDisplayUrl( { linkUrl, homeUrl } = {} ) {\n\tif ( ! linkUrl ) {\n\t\treturn { displayUrl: '', isExternal: false };\n\t}\n\n\tlet displayUrl = safeDecodeURI( linkUrl );\n\tlet isExternal = false;\n\n\t// Check hash links and relative paths first - these are always internal\n\tif ( isRelativePath( linkUrl ) || isHashLink( linkUrl ) ) {\n\t\treturn { displayUrl, isExternal: false };\n\t}\n\n\t// Try to parse as a full URL to determine if it's actually external\n\t// This must happen before trusting the type attribute\n\ttry {\n\t\tconst parsedUrl = new URL( linkUrl );\n\t\t// Compare by host (not origin) so http/https to same site both count as internal\n\t\tconst siteHost = new URL( homeUrl ).host;\n\n\t\tif ( parsedUrl.host === siteHost ) {\n\t\t\t// Show only the pathname (and search/hash if present)\n\t\t\tlet path = parsedUrl.pathname + parsedUrl.search + parsedUrl.hash;\n\t\t\t// Remove trailing slash\n\t\t\tif ( path.endsWith( '/' ) && path.length > 1 ) {\n\t\t\t\tpath = path.slice( 0, -1 );\n\t\t\t}\n\t\t\tdisplayUrl = path;\n\t\t} else {\n\t\t\t// Different host - this is an external link\n\t\t\tisExternal = true;\n\t\t}\n\t} catch {\n\t\t// URL parsing failed - treat as external (e.g. no homeUrl, or URL without protocol)\n\t\tisExternal = true;\n\t}\n\n\treturn { displayUrl, isExternal };\n}\n\n/**\n * Compute badges for the link preview.\n *\n * @param {Object} options - Options object\n * @param {string} options.url - Link URL\n * @param {string} options.homeUrl - WordPress site URL (for homepage detection)\n * @param {string} options.type - Entity type (page, post, etc.)\n * @param {boolean} options.isExternal - Whether link is external\n * @param {string} options.entityStatus - Entity status (publish, draft, etc.)\n * @param {boolean} options.hasBinding - Whether link has entity binding\n * @param {boolean} options.isEntityAvailable - Whether bound entity exists\n * @return {Array} Array of badge objects with label and intent\n */\nexport function computeBadges( {\n\turl,\n\thomeUrl,\n\ttype,\n\tisExternal,\n\tentityStatus,\n\thasBinding,\n\tisEntityAvailable,\n} ) {\n\tconst badges = [];\n\t// Kind badge\n\tif ( url ) {\n\t\tif ( isExternal ) {\n\t\t\tbadges.push( {\n\t\t\t\tlabel: __( 'External link' ),\n\t\t\t\tintent: 'default',\n\t\t\t} );\n\t\t} else if ( isHashLink( url ) ) {\n\t\t\t// Hash links should be detected before type check\n\t\t\t// because they're not entity links even if type is set\n\t\t\tbadges.push( {\n\t\t\t\tlabel: __( 'Internal link' ),\n\t\t\t\tintent: 'default',\n\t\t\t} );\n\t\t} else if ( isHomepage( url, homeUrl ) ) {\n\t\t\tbadges.push( {\n\t\t\t\tlabel: __( 'Homepage' ),\n\t\t\t\tintent: 'default',\n\t\t\t} );\n\t\t} else if ( type && type !== 'custom' ) {\n\t\t\t// Show entity type badge (page, post, category, etc.)\n\t\t\t// but not 'custom' since that's just a manual link\n\t\t\tbadges.push( { label: capitalize( type ), intent: 'default' } );\n\t\t} else {\n\t\t\t// Internal link (not external, not hash, not entity)\n\t\t\tbadges.push( {\n\t\t\t\tlabel: __( 'Page' ),\n\t\t\t\tintent: 'default',\n\t\t\t} );\n\t\t}\n\t}\n\n\t// Status badge\n\tif ( hasBinding && ! isEntityAvailable ) {\n\t\tbadges.push( {\n\t\t\tlabel: sprintf(\n\t\t\t\t/* translators: %s is the entity type (e.g., \"page\", \"post\", \"category\") */\n\t\t\t\t__( 'Missing %s' ),\n\t\t\t\ttype\n\t\t\t),\n\t\t\tintent: 'error',\n\t\t} );\n\t} else if ( ! url ) {\n\t\tbadges.push( { label: __( 'No link selected' ), intent: 'error' } );\n\t} else if ( entityStatus ) {\n\t\tconst statusMap = {\n\t\t\tpublish: { label: __( 'Published' ), intent: 'success' },\n\t\t\tfuture: { label: __( 'Scheduled' ), intent: 'warning' },\n\t\t\tdraft: { label: __( 'Draft' ), intent: 'warning' },\n\t\t\tpending: { label: __( 'Pending' ), intent: 'warning' },\n\t\t\tprivate: { label: __( 'Private' ), intent: 'default' },\n\t\t\ttrash: { label: __( 'Trash' ), intent: 'error' },\n\t\t};\n\t\tconst badge = statusMap[ entityStatus ];\n\t\tif ( badge ) {\n\t\t\tbadges.push( badge );\n\t\t}\n\t}\n\n\treturn badges;\n}\n\n/**\n * Returns an entity record's display title: the rendered title, \"(no title)\"\n * for an untitled entity, or the record's name.\n *\n * @param {Object} entityRecord The entity record.\n * @return {string|undefined} The display title.\n */\nfunction getEntityTitle( entityRecord ) {\n\tconst title = entityRecord?.title;\n\n\t// Some entity types use a plain string for the title.\n\tif ( typeof title === 'string' ) {\n\t\treturn title;\n\t}\n\n\t// Posts and pages expose `title` as a { raw, rendered } object.\n\tif ( title && 'rendered' in title ) {\n\t\treturn title.rendered || __( '(no title)' );\n\t}\n\n\treturn entityRecord?.name;\n}\n\n/**\n * Hook to compute link preview data for display.\n *\n * This hook takes raw link data and entity information and computes\n * presentation-ready preview data including formatted title, URL, and badges.\n *\n * @param {Object} options - Options object\n * @param {string} options.url - Link URL\n * @param {string} options.type - Entity type (page, post, etc.)\n * @param {Object} options.entityRecord - Entity record\n * @param {boolean} options.hasBinding - Whether link has entity binding\n * @param {boolean} options.isEntityAvailable - Whether bound entity exists\n * @return {Object} Preview data object with title, url, image, and badges\n */\nexport function useLinkPreview( {\n\turl,\n\tentityRecord,\n\ttype,\n\thasBinding,\n\tisEntityAvailable,\n} ) {\n\t// Get the WordPress homepage URL from settings\n\tconst homeUrl = useSelect( ( select ) => {\n\t\treturn select( coreDataStore ).getEntityRecord(\n\t\t\t'root',\n\t\t\t'__unstableBase'\n\t\t)?.home;\n\t}, [] );\n\n\tconst title = getEntityTitle( entityRecord );\n\n\t// Fetch rich URL data if we don't have a title. Internal links should have passed a title.\n\tconst { richData } = useRemoteUrlData( title ? null : url );\n\n\t// Compute display URL and external flag\n\tconst { displayUrl, isExternal } = computeDisplayUrl( {\n\t\tlinkUrl: url,\n\t\thomeUrl,\n\t} );\n\n\tconst image = useSelect(\n\t\t( select ) => {\n\t\t\t// Only fetch for post-type entities with featured media\n\t\t\tif ( ! entityRecord?.featured_media ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst { getEntityRecord } = select( coreDataStore );\n\n\t\t\t// Get the media entity to fetch the image URL\n\t\t\tconst media = getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'attachment',\n\t\t\t\tentityRecord.featured_media\n\t\t\t);\n\n\t\t\t// Return the thumbnail or medium size URL, fallback to source_url\n\t\t\treturn (\n\t\t\t\tmedia?.media_details?.sizes?.thumbnail?.source_url ||\n\t\t\t\tmedia?.media_details?.sizes?.medium?.source_url ||\n\t\t\t\tmedia?.source_url ||\n\t\t\t\tnull\n\t\t\t);\n\t\t},\n\t\t[ entityRecord?.featured_media ]\n\t);\n\n\t// Compute badges\n\tconst badges = computeBadges( {\n\t\turl,\n\t\thomeUrl,\n\t\ttype,\n\t\tisExternal,\n\t\tentityStatus: entityRecord?.status,\n\t\thasBinding,\n\t\tisEntityAvailable,\n\t} );\n\n\t// Get display title - use provided title, fallback to rich data, or URL\n\tconst displayTitle = url\n\t\t? title || richData?.title || safeDecodeURI( url )\n\t\t: __( 'Add link' );\n\n\treturn {\n\t\ttitle: displayTitle,\n\t\turl: displayUrl,\n\t\timage,\n\t\tbadges,\n\t};\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { __, sprintf } from '@wordpress/i18n';\nimport { safeDecodeURI } from '@wordpress/url';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreDataStore } from '@wordpress/core-data';\nimport { unlock } from '../../lock-unlock';\n\nconst { useRemoteUrlData, isHashLink, isRelativePath } = unlock(\n\tblockEditorPrivateApis\n);\n\n/**\n * Capitalize the first letter of a string.\n *\n * @param {string} str - The string to capitalize\n * @return {string} Capitalized string\n */\nfunction capitalize( str ) {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n}\n\n/**\n * Check if a URL points to the site homepage.\n * Handles protocol (http/https) and trailing slash variations.\n * Does not match subdomains unless they are the site URL.\n *\n * @param {string} url - The URL to check\n * @param {string} homeUrl - The WordPress site URL\n * @return {boolean} True if url is the homepage\n */\nexport function isHomepage( url, homeUrl ) {\n\tif ( url === '/' ) {\n\t\treturn true;\n\t}\n\tif ( ! url || ! homeUrl ) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst urlParsed = new URL( url, homeUrl );\n\t\tconst homeParsed = new URL( homeUrl );\n\n\t\t// Same host, i.e. sub.homepage.com or homepage.com\n\t\tif ( urlParsed.hostname !== homeParsed.hostname ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Path must match site root (normalize trailing slash)\n\t\tconst urlPath = urlParsed.pathname.replace( /\\/$/, '' );\n\t\tconst homePath = homeParsed.pathname.replace( /\\/$/, '' );\n\n\t\treturn urlPath === homePath;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Compute display URL - strips site URL if internal, shows full URL if external.\n *\n * @param {Object} options - Parameters object\n * @param {string} options.linkUrl - The URL to process\n * @param {string} options.homeUrl - The WordPress site URL (required for internal/external detection)\n * @return {Object} Object with displayUrl and isExternal flag\n */\nexport function computeDisplayUrl( { linkUrl, homeUrl } = {} ) {\n\tif ( ! linkUrl ) {\n\t\treturn { displayUrl: '', isExternal: false };\n\t}\n\n\tlet displayUrl = safeDecodeURI( linkUrl );\n\tlet isExternal = false;\n\n\t// Check hash links and relative paths first - these are always internal\n\tif ( isRelativePath( linkUrl ) || isHashLink( linkUrl ) ) {\n\t\treturn { displayUrl, isExternal: false };\n\t}\n\n\t// Try to parse as a full URL to determine if it's actually external\n\t// This must happen before trusting the type attribute\n\ttry {\n\t\tconst parsedUrl = new URL( linkUrl );\n\t\t// Compare by host (not origin) so http/https to same site both count as internal\n\t\tconst siteHost = new URL( homeUrl ).host;\n\n\t\tif ( parsedUrl.host === siteHost ) {\n\t\t\t// Show only the pathname (and search/hash if present)\n\t\t\tlet path = parsedUrl.pathname + parsedUrl.search + parsedUrl.hash;\n\t\t\t// Remove trailing slash\n\t\t\tif ( path.endsWith( '/' ) && path.length > 1 ) {\n\t\t\t\tpath = path.slice( 0, -1 );\n\t\t\t}\n\t\t\tdisplayUrl = path;\n\t\t} else {\n\t\t\t// Different host - this is an external link\n\t\t\tisExternal = true;\n\t\t}\n\t} catch {\n\t\t// URL parsing failed - treat as external (e.g. no homeUrl, or URL without protocol)\n\t\tisExternal = true;\n\t}\n\n\treturn { displayUrl, isExternal };\n}\n\n/**\n * Compute badges for the link preview.\n *\n * @param {Object} options - Options object\n * @param {string} options.url - Link URL\n * @param {string} options.homeUrl - WordPress site URL (for homepage detection)\n * @param {string} options.type - Entity type (page, post, etc.)\n * @param {boolean} options.isExternal - Whether link is external\n * @param {string} options.entityStatus - Entity status (publish, draft, etc.)\n * @param {boolean} options.hasBinding - Whether link has entity binding\n * @param {boolean} options.isEntityAvailable - Whether bound entity exists\n * @return {Array} Array of badge objects with label and `@wordpress/ui`\n * `Badge` intent\n */\nexport function computeBadges( {\n\turl,\n\thomeUrl,\n\ttype,\n\tisExternal,\n\tentityStatus,\n\thasBinding,\n\tisEntityAvailable,\n} ) {\n\tconst badges = [];\n\t// Kind badge\n\tif ( url ) {\n\t\tif ( isExternal ) {\n\t\t\tbadges.push( {\n\t\t\t\tlabel: __( 'External link' ),\n\t\t\t\tintent: 'none',\n\t\t\t} );\n\t\t} else if ( isHashLink( url ) ) {\n\t\t\t// Hash links should be detected before type check\n\t\t\t// because they're not entity links even if type is set\n\t\t\tbadges.push( {\n\t\t\t\tlabel: __( 'Internal link' ),\n\t\t\t\tintent: 'none',\n\t\t\t} );\n\t\t} else if ( isHomepage( url, homeUrl ) ) {\n\t\t\tbadges.push( {\n\t\t\t\tlabel: __( 'Homepage' ),\n\t\t\t\tintent: 'none',\n\t\t\t} );\n\t\t} else if ( type && type !== 'custom' ) {\n\t\t\t// Show entity type badge (page, post, category, etc.)\n\t\t\t// but not 'custom' since that's just a manual link\n\t\t\tbadges.push( { label: capitalize( type ), intent: 'none' } );\n\t\t} else {\n\t\t\t// Internal link (not external, not hash, not entity)\n\t\t\tbadges.push( {\n\t\t\t\tlabel: __( 'Page' ),\n\t\t\t\tintent: 'none',\n\t\t\t} );\n\t\t}\n\t}\n\n\t// Status badge\n\tif ( hasBinding && ! isEntityAvailable ) {\n\t\tbadges.push( {\n\t\t\tlabel: sprintf(\n\t\t\t\t/* translators: %s is the entity type (e.g., \"page\", \"post\", \"category\") */\n\t\t\t\t__( 'Missing %s' ),\n\t\t\t\ttype\n\t\t\t),\n\t\t\tintent: 'high',\n\t\t} );\n\t} else if ( ! url ) {\n\t\tbadges.push( { label: __( 'No link selected' ), intent: 'high' } );\n\t} else if ( entityStatus ) {\n\t\tconst statusMap = {\n\t\t\tpublish: { label: __( 'Published' ), intent: 'stable' },\n\t\t\tfuture: { label: __( 'Scheduled' ), intent: 'informational' },\n\t\t\tdraft: { label: __( 'Draft' ), intent: 'low' },\n\t\t\tpending: { label: __( 'Pending' ), intent: 'low' },\n\t\t\tprivate: { label: __( 'Private' ), intent: 'informational' },\n\t\t\ttrash: { label: __( 'Trashed' ), intent: 'high' },\n\t\t};\n\t\tconst badge = statusMap[ entityStatus ];\n\t\tif ( badge ) {\n\t\t\tbadges.push( badge );\n\t\t}\n\t}\n\n\treturn badges;\n}\n\n/**\n * Returns an entity record's display title: the rendered title, \"(no title)\"\n * for an untitled entity, or the record's name.\n *\n * @param {Object} entityRecord The entity record.\n * @return {string|undefined} The display title.\n */\nfunction getEntityTitle( entityRecord ) {\n\tconst title = entityRecord?.title;\n\n\t// Some entity types use a plain string for the title.\n\tif ( typeof title === 'string' ) {\n\t\treturn title;\n\t}\n\n\t// Posts and pages expose `title` as a { raw, rendered } object.\n\tif ( title && 'rendered' in title ) {\n\t\treturn title.rendered || __( '(no title)' );\n\t}\n\n\treturn entityRecord?.name;\n}\n\n/**\n * Hook to compute link preview data for display.\n *\n * This hook takes raw link data and entity information and computes\n * presentation-ready preview data including formatted title, URL, and badges.\n *\n * @param {Object} options - Options object\n * @param {string} options.url - Link URL\n * @param {string} options.type - Entity type (page, post, etc.)\n * @param {Object} options.entityRecord - Entity record\n * @param {boolean} options.hasBinding - Whether link has entity binding\n * @param {boolean} options.isEntityAvailable - Whether bound entity exists\n * @return {Object} Preview data object with title, url, image, and badges\n */\nexport function useLinkPreview( {\n\turl,\n\tentityRecord,\n\ttype,\n\thasBinding,\n\tisEntityAvailable,\n} ) {\n\t// Get the WordPress homepage URL from settings\n\tconst homeUrl = useSelect( ( select ) => {\n\t\treturn select( coreDataStore ).getEntityRecord(\n\t\t\t'root',\n\t\t\t'__unstableBase'\n\t\t)?.home;\n\t}, [] );\n\n\tconst title = getEntityTitle( entityRecord );\n\n\t// Fetch rich URL data if we don't have a title. Internal links should have passed a title.\n\tconst { richData } = useRemoteUrlData( title ? null : url );\n\n\t// Compute display URL and external flag\n\tconst { displayUrl, isExternal } = computeDisplayUrl( {\n\t\tlinkUrl: url,\n\t\thomeUrl,\n\t} );\n\n\tconst image = useSelect(\n\t\t( select ) => {\n\t\t\t// Only fetch for post-type entities with featured media\n\t\t\tif ( ! entityRecord?.featured_media ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst { getEntityRecord } = select( coreDataStore );\n\n\t\t\t// Get the media entity to fetch the image URL\n\t\t\tconst media = getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'attachment',\n\t\t\t\tentityRecord.featured_media\n\t\t\t);\n\n\t\t\t// Return the thumbnail or medium size URL, fallback to source_url\n\t\t\treturn (\n\t\t\t\tmedia?.media_details?.sizes?.thumbnail?.source_url ||\n\t\t\t\tmedia?.media_details?.sizes?.medium?.source_url ||\n\t\t\t\tmedia?.source_url ||\n\t\t\t\tnull\n\t\t\t);\n\t\t},\n\t\t[ entityRecord?.featured_media ]\n\t);\n\n\t// Compute badges\n\tconst badges = computeBadges( {\n\t\turl,\n\t\thomeUrl,\n\t\ttype,\n\t\tisExternal,\n\t\tentityStatus: entityRecord?.status,\n\t\thasBinding,\n\t\tisEntityAvailable,\n\t} );\n\n\t// Get display title - use provided title, fallback to rich data, or URL\n\tconst displayTitle = url\n\t\t? title || richData?.title || safeDecodeURI( url )\n\t\t: __( 'Add link' );\n\n\treturn {\n\t\ttitle: displayTitle,\n\t\turl: displayUrl,\n\t\timage,\n\t\tbadges,\n\t};\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4B;AAC5B,iBAA8B;AAC9B,0BAAsD;AACtD,kBAA0B;AAC1B,uBAAuC;AACvC,yBAAuB;AAEvB,IAAM,EAAE,kBAAkB,YAAY,eAAe,QAAI;AAAA,EACxD,oBAAAA;AACD;AAQA,SAAS,WAAY,KAAM;AAC1B,SAAO,IAAI,OAAQ,CAAE,EAAE,YAAY,IAAI,IAAI,MAAO,CAAE;AACrD;AAWO,SAAS,WAAY,KAAK,SAAU;AAC1C,MAAK,QAAQ,KAAM;AAClB,WAAO;AAAA,EACR;AACA,MAAK,CAAE,OAAO,CAAE,SAAU;AACzB,WAAO;AAAA,EACR;AACA,MAAI;AACH,UAAM,YAAY,IAAI,IAAK,KAAK,OAAQ;AACxC,UAAM,aAAa,IAAI,IAAK,OAAQ;AAGpC,QAAK,UAAU,aAAa,WAAW,UAAW;AACjD,aAAO;AAAA,IACR;AAGA,UAAM,UAAU,UAAU,SAAS,QAAS,OAAO,EAAG;AACtD,UAAM,WAAW,WAAW,SAAS,QAAS,OAAO,EAAG;AAExD,WAAO,YAAY;AAAA,EACpB,QAAQ;AACP,WAAO;AAAA,EACR;AACD;AAUO,SAAS,kBAAmB,EAAE,SAAS,QAAQ,IAAI,CAAC,GAAI;AAC9D,MAAK,CAAE,SAAU;AAChB,WAAO,EAAE,YAAY,IAAI,YAAY,MAAM;AAAA,EAC5C;AAEA,MAAI,iBAAa,0BAAe,OAAQ;AACxC,MAAI,aAAa;AAGjB,MAAK,eAAgB,OAAQ,KAAK,WAAY,OAAQ,GAAI;AACzD,WAAO,EAAE,YAAY,YAAY,MAAM;AAAA,EACxC;AAIA,MAAI;AACH,UAAM,YAAY,IAAI,IAAK,OAAQ;AAEnC,UAAM,WAAW,IAAI,IAAK,OAAQ,EAAE;AAEpC,QAAK,UAAU,SAAS,UAAW;AAElC,UAAI,OAAO,UAAU,WAAW,UAAU,SAAS,UAAU;AAE7D,UAAK,KAAK,SAAU,GAAI,KAAK,KAAK,SAAS,GAAI;AAC9C,eAAO,KAAK,MAAO,GAAG,EAAG;AAAA,MAC1B;AACA,mBAAa;AAAA,IACd,OAAO;AAEN,mBAAa;AAAA,IACd;AAAA,EACD,QAAQ;AAEP,iBAAa;AAAA,EACd;AAEA,SAAO,EAAE,YAAY,WAAW;AACjC;AAgBO,SAAS,cAAe;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,SAAS,CAAC;AAEhB,MAAK,KAAM;AACV,QAAK,YAAa;AACjB,aAAO,KAAM;AAAA,QACZ,WAAO,gBAAI,eAAgB;AAAA,QAC3B,QAAQ;AAAA,MACT,CAAE;AAAA,IACH,WAAY,WAAY,GAAI,GAAI;AAG/B,aAAO,KAAM;AAAA,QACZ,WAAO,gBAAI,eAAgB;AAAA,QAC3B,QAAQ;AAAA,MACT,CAAE;AAAA,IACH,WAAY,WAAY,KAAK,OAAQ,GAAI;AACxC,aAAO,KAAM;AAAA,QACZ,WAAO,gBAAI,UAAW;AAAA,QACtB,QAAQ;AAAA,MACT,CAAE;AAAA,IACH,WAAY,QAAQ,SAAS,UAAW;AAGvC,aAAO,KAAM,EAAE,OAAO,WAAY,IAAK,GAAG,QAAQ,OAAO,CAAE;AAAA,IAC5D,OAAO;AAEN,aAAO,KAAM;AAAA,QACZ,WAAO,gBAAI,MAAO;AAAA,QAClB,QAAQ;AAAA,MACT,CAAE;AAAA,IACH;AAAA,EACD;AAGA,MAAK,cAAc,CAAE,mBAAoB;AACxC,WAAO,KAAM;AAAA,MACZ,WAAO;AAAA;AAAA,YAEN,gBAAI,YAAa;AAAA,QACjB;AAAA,MACD;AAAA,MACA,QAAQ;AAAA,IACT,CAAE;AAAA,EACH,WAAY,CAAE,KAAM;AACnB,WAAO,KAAM,EAAE,WAAO,gBAAI,kBAAmB,GAAG,QAAQ,OAAO,CAAE;AAAA,EAClE,WAAY,cAAe;AAC1B,UAAM,YAAY;AAAA,MACjB,SAAS,EAAE,WAAO,gBAAI,WAAY,GAAG,QAAQ,SAAS;AAAA,MACtD,QAAQ,EAAE,WAAO,gBAAI,WAAY,GAAG,QAAQ,gBAAgB;AAAA,MAC5D,OAAO,EAAE,WAAO,gBAAI,OAAQ,GAAG,QAAQ,MAAM;AAAA,MAC7C,SAAS,EAAE,WAAO,gBAAI,SAAU,GAAG,QAAQ,MAAM;AAAA,MACjD,SAAS,EAAE,WAAO,gBAAI,SAAU,GAAG,QAAQ,gBAAgB;AAAA,MAC3D,OAAO,EAAE,WAAO,gBAAI,SAAU,GAAG,QAAQ,OAAO;AAAA,IACjD;AACA,UAAM,QAAQ,UAAW,YAAa;AACtC,QAAK,OAAQ;AACZ,aAAO,KAAM,KAAM;AAAA,IACpB;AAAA,EACD;AAEA,SAAO;AACR;AASA,SAAS,eAAgB,cAAe;AACvC,QAAM,QAAQ,cAAc;AAG5B,MAAK,OAAO,UAAU,UAAW;AAChC,WAAO;AAAA,EACR;AAGA,MAAK,SAAS,cAAc,OAAQ;AACnC,WAAO,MAAM,gBAAY,gBAAI,YAAa;AAAA,EAC3C;AAEA,SAAO,cAAc;AACtB;AAgBO,SAAS,eAAgB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AAEH,QAAM,cAAU,uBAAW,CAAE,WAAY;AACxC,WAAO,OAAQ,iBAAAC,KAAc,EAAE;AAAA,MAC9B;AAAA,MACA;AAAA,IACD,GAAG;AAAA,EACJ,GAAG,CAAC,CAAE;AAEN,QAAM,QAAQ,eAAgB,YAAa;AAG3C,QAAM,EAAE,SAAS,IAAI,iBAAkB,QAAQ,OAAO,GAAI;AAG1D,QAAM,EAAE,YAAY,WAAW,IAAI,kBAAmB;AAAA,IACrD,SAAS;AAAA,IACT;AAAA,EACD,CAAE;AAEF,QAAM,YAAQ;AAAA,IACb,CAAE,WAAY;AAEb,UAAK,CAAE,cAAc,gBAAiB;AACrC,eAAO;AAAA,MACR;AAEA,YAAM,EAAE,gBAAgB,IAAI,OAAQ,iBAAAA,KAAc;AAGlD,YAAM,QAAQ;AAAA,QACb;AAAA,QACA;AAAA,QACA,aAAa;AAAA,MACd;AAGA,aACC,OAAO,eAAe,OAAO,WAAW,cACxC,OAAO,eAAe,OAAO,QAAQ,cACrC,OAAO,cACP;AAAA,IAEF;AAAA,IACA,CAAE,cAAc,cAAe;AAAA,EAChC;AAGA,QAAM,SAAS,cAAe;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,cAAc;AAAA,IAC5B;AAAA,IACA;AAAA,EACD,CAAE;AAGF,QAAM,eAAe,MAClB,SAAS,UAAU,aAAS,0BAAe,GAAI,QAC/C,gBAAI,UAAW;AAElB,SAAO;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL;AAAA,IACA;AAAA,EACD;AACD;",
6
6
  "names": ["blockEditorPrivateApis", "coreDataStore"]
7
7
  }
@@ -25,6 +25,13 @@
25
25
  "text": true
26
26
  }
27
27
  },
28
+ "shadow": true,
29
+ "__experimentalBorder": {
30
+ "color": true,
31
+ "radius": true,
32
+ "style": true,
33
+ "width": true
34
+ },
28
35
  "spacing": {
29
36
  "padding": true,
30
37
  "__experimentalDefaultControls": {
@@ -83,10 +83,16 @@
83
83
  "fontSize": true
84
84
  }
85
85
  },
86
+ "shadow": {
87
+ "__experimentalSkipSerialization": true
88
+ },
86
89
  "interactivity": {
87
90
  "clientNavigation": true
88
91
  }
89
92
  },
93
+ "selectors": {
94
+ "shadow": ".wp-block-navigation-submenu > .wp-block-navigation__submenu-container"
95
+ },
90
96
  "editorStyle": "wp-block-navigation-submenu-editor",
91
97
  "style": "wp-block-navigation-submenu"
92
98
  }
@@ -192,8 +192,16 @@ function NavigationSubmenuEdit({
192
192
  const allowedBlocks = parentCount >= maxNestingLevel ? ALLOWED_BLOCKS.filter(
193
193
  (blockName) => blockName !== "core/navigation-submenu"
194
194
  ) : ALLOWED_BLOCKS;
195
+ const shadowProps = (0, import_block_editor.__experimentalGetShadowClassesAndStyles)(attributes);
195
196
  const navigationChildBlockProps = (0, import_utils.getNavigationChildBlockProps)(innerBlocksColors);
196
- const innerBlocksProps = (0, import_block_editor.useInnerBlocksProps)(navigationChildBlockProps, {
197
+ const submenuBlockProps = {
198
+ ...navigationChildBlockProps,
199
+ style: {
200
+ ...navigationChildBlockProps.style,
201
+ ...shadowProps.style
202
+ }
203
+ };
204
+ const innerBlocksProps = (0, import_block_editor.useInnerBlocksProps)(submenuBlockProps, {
197
205
  allowedBlocks,
198
206
  defaultBlock: import_constants.DEFAULT_BLOCK,
199
207
  directInsert: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/navigation-submenu/edit.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { displayShortcut, isKeyboardEvent } from '@wordpress/keycodes';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\tInnerBlocks,\n\tInspectorControls,\n\tuseInnerBlocksProps,\n\tRichText,\n\tuseBlockProps,\n\tuseBlockEditingMode,\n\tstore as blockEditorStore,\n\tgetColorClassName,\n} from '@wordpress/block-editor';\nimport { isURL, prependHTTP } from '@wordpress/url';\nimport { useState, useEffect, useRef } from '@wordpress/element';\nimport { link as linkIcon, removeSubmenu } from '@wordpress/icons';\nimport { speak } from '@wordpress/a11y';\nimport { createBlock } from '@wordpress/blocks';\nimport { useMergeRefs, usePrevious } from '@wordpress/compose';\nimport { ItemSubmenuIcon } from './icons';\nimport {\n\tControls,\n\tLinkUI,\n\tuseEntityBinding,\n\tuseHandleLinkChange,\n\tuseIsInvalidLink,\n\tInvalidDraftDisplay,\n\tuseEnableLinkStatusValidation,\n\tuseIsDraggingWithin,\n\tselectLabelText,\n} from '../navigation-link/shared';\nimport {\n\tgetColors,\n\tgetNavigationChildBlockProps,\n} from '../navigation/edit/utils';\nimport { DEFAULT_BLOCK } from '../navigation/constants';\n\nconst ALLOWED_BLOCKS = [\n\t'core/navigation-link',\n\t'core/navigation-submenu',\n\t'core/page-list',\n\t'core/loginout',\n];\n\n/**\n * @typedef {'post-type'|'custom'|'taxonomy'|'post-type-archive'} WPNavigationLinkKind\n */\n\n/**\n * Navigation Link Block Attributes\n *\n * @typedef {Object} WPNavigationLinkBlockAttributes\n *\n * @property {string} [label] Link text.\n * @property {WPNavigationLinkKind} [kind] Kind is used to differentiate between term and post ids to check post draft status.\n * @property {string} [type] The type such as post, page, tag, category and other custom types.\n * @property {string} [rel] The relationship of the linked URL.\n * @property {number} [id] A post or term id.\n * @property {boolean} [opensInNewTab] Sets link target to _blank when true.\n * @property {string} [url] Link href.\n */\n\nexport default function NavigationSubmenuEdit( {\n\tattributes,\n\tisSelected,\n\tsetAttributes,\n\tmergeBlocks,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst { label, url, description, kind, type, id } = attributes;\n\n\tconst { showSubmenuIcon, maxNestingLevel, submenuVisibility } = context;\n\tconst blockEditingMode = useBlockEditingMode();\n\n\t// Force click-only behavior in contentOnly mode to prevent hover dropdowns\n\tconst openSubmenusOnClick =\n\t\tblockEditingMode !== 'default' ? true : submenuVisibility === 'click';\n\n\t// URL binding logic\n\tconst { hasUrlBinding, isBoundEntityAvailable, entityRecord } =\n\t\tuseEntityBinding( {\n\t\t\tclientId,\n\t\t\tattributes,\n\t\t} );\n\n\tconst handleLinkChange = useHandleLinkChange( {\n\t\tclientId,\n\t\tattributes,\n\t\tsetAttributes,\n\t\tallowTextUpdate: true,\n\t} );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent, replaceBlock } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ isLinkOpen, setIsLinkOpen ] = useState( false );\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst listItemRef = useRef( null );\n\tconst isDraggingWithin = useIsDraggingWithin( listItemRef );\n\tconst itemLabelPlaceholder = __( 'Add text…' );\n\tconst ref = useRef();\n\n\tconst {\n\t\tparentCount,\n\t\tisParentOfSelectedBlock,\n\t\tisImmediateParentOfSelectedBlock,\n\t\thasChildren,\n\t\tselectedBlockHasChildren,\n\t\tonlyDescendantIsEmptyLink,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetBlockParentsByBlockName,\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockOrder,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tlet _onlyDescendantIsEmptyLink;\n\n\t\t\tconst selectedBlockId = getSelectedBlockClientId();\n\n\t\t\tconst selectedBlockChildren = getBlockOrder( selectedBlockId );\n\n\t\t\t// Check for a single descendant in the submenu. If that block\n\t\t\t// is a link block in a \"placeholder\" state with no label then\n\t\t\t// we can consider as an \"empty\" link.\n\t\t\tif ( selectedBlockChildren?.length === 1 ) {\n\t\t\t\tconst singleBlock = getBlock( selectedBlockChildren[ 0 ] );\n\n\t\t\t\t_onlyDescendantIsEmptyLink =\n\t\t\t\t\tsingleBlock?.name === 'core/navigation-link' &&\n\t\t\t\t\t! singleBlock?.attributes?.label;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tparentCount: getBlockParentsByBlockName(\n\t\t\t\t\tclientId,\n\t\t\t\t\t'core/navigation-submenu'\n\t\t\t\t).length,\n\t\t\t\tisParentOfSelectedBlock: hasSelectedInnerBlock(\n\t\t\t\t\tclientId,\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t\t\tisImmediateParentOfSelectedBlock: hasSelectedInnerBlock(\n\t\t\t\t\tclientId,\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t\thasChildren: !! getBlockCount( clientId ),\n\t\t\t\tselectedBlockHasChildren: !! selectedBlockChildren?.length,\n\t\t\t\tonlyDescendantIsEmptyLink: _onlyDescendantIsEmptyLink,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst validateLinkStatus = useEnableLinkStatusValidation( clientId );\n\n\tconst prevHasChildren = usePrevious( hasChildren );\n\n\t// Check if the submenu's parent link is invalid or draft\n\tconst [ isInvalid, isDraft ] = useIsInvalidLink(\n\t\tkind,\n\t\ttype,\n\t\tid,\n\t\tvalidateLinkStatus\n\t);\n\n\t// Show the LinkControl on mount if the URL is empty\n\t// ( When adding a new menu item)\n\t// This can't be done in the useState call because it conflicts\n\t// with the autofocus behavior of the BlockListBlock component.\n\tuseEffect( () => {\n\t\tif ( ! openSubmenusOnClick && ! url ) {\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}, [] );\n\n\t/**\n\t * The hook shouldn't be necessary but due to a focus loss happening\n\t * when selecting a suggestion in the link popover, we force close on block unselection.\n\t */\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsLinkOpen( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\t// If the LinkControl popover is open and the URL has changed, close the LinkControl and focus the label text.\n\tuseEffect( () => {\n\t\tif ( isLinkOpen && url ) {\n\t\t\t// Does this look like a URL and have something TLD-ish?\n\t\t\tif (\n\t\t\t\tisURL( prependHTTP( label ) ) &&\n\t\t\t\t/^.+\\.[a-z]+/.test( label )\n\t\t\t) {\n\t\t\t\t// Focus and select the label text.\n\t\t\t\tselectLabelText( ref );\n\t\t\t}\n\t\t}\n\t}, [ url ] );\n\n\tconst {\n\t\ttextColor,\n\t\tcustomTextColor,\n\t\tbackgroundColor,\n\t\tcustomBackgroundColor,\n\t} = getColors( context, parentCount > 0 );\n\n\tfunction onKeyDown( event ) {\n\t\tif ( isKeyboardEvent.primary( event, 'k' ) ) {\n\t\t\t// Required to prevent the command center from opening,\n\t\t\t// as it shares the CMD+K shortcut.\n\t\t\t// See https://github.com/WordPress/gutenberg/pull/59845.\n\t\t\tevent.preventDefault();\n\t\t\t// If we don't stop propagation, this event bubbles up to the parent submenu item\n\t\t\tevent.stopPropagation();\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, listItemRef ] ),\n\t\tclassName: clsx( 'wp-block-navigation-item', {\n\t\t\t'is-editing': isSelected || isParentOfSelectedBlock,\n\t\t\t'is-dragging-within': isDraggingWithin,\n\t\t\t'has-link': !! url,\n\t\t\t'has-child': hasChildren,\n\t\t\t'has-text-color': !! textColor || !! customTextColor,\n\t\t\t[ getColorClassName( 'color', textColor ) ]: !! textColor,\n\t\t\t'has-background': !! backgroundColor || customBackgroundColor,\n\t\t\t[ getColorClassName( 'background-color', backgroundColor ) ]:\n\t\t\t\t!! backgroundColor,\n\t\t\t'open-on-click': openSubmenusOnClick,\n\t\t\t'open-always': submenuVisibility === 'always',\n\t\t} ),\n\t\tstyle: {\n\t\t\tcolor: ! textColor && customTextColor,\n\t\t\tbackgroundColor: ! backgroundColor && customBackgroundColor,\n\t\t},\n\t\tonKeyDown,\n\t} );\n\n\t// Always use overlay colors for submenus.\n\tconst innerBlocksColors = getColors( context, true );\n\n\tconst allowedBlocks =\n\t\tparentCount >= maxNestingLevel\n\t\t\t? ALLOWED_BLOCKS.filter(\n\t\t\t\t\t( blockName ) => blockName !== 'core/navigation-submenu'\n\t\t\t )\n\t\t\t: ALLOWED_BLOCKS;\n\n\tconst navigationChildBlockProps =\n\t\tgetNavigationChildBlockProps( innerBlocksColors );\n\tconst innerBlocksProps = useInnerBlocksProps( navigationChildBlockProps, {\n\t\tallowedBlocks,\n\t\tdefaultBlock: DEFAULT_BLOCK,\n\t\tdirectInsert: true,\n\n\t\t// Ensure block toolbar is not too far removed from item\n\t\t// being edited.\n\t\t// see: https://github.com/WordPress/gutenberg/pull/34615.\n\t\t__experimentalCaptureToolbars: true,\n\n\t\trenderAppender:\n\t\t\tisSelected ||\n\t\t\t( isImmediateParentOfSelectedBlock &&\n\t\t\t\t! selectedBlockHasChildren ) ||\n\t\t\t// Show the appender while dragging to allow inserting element between item and the appender.\n\t\t\thasChildren\n\t\t\t\t? InnerBlocks.ButtonBlockAppender\n\t\t\t\t: false,\n\t} );\n\n\tconst ParentElement = openSubmenusOnClick ? 'button' : 'a';\n\n\tfunction transformToLink() {\n\t\tconst newLinkBlock = createBlock( 'core/navigation-link', attributes );\n\t\treplaceBlock( clientId, newLinkBlock );\n\t}\n\n\tuseEffect( () => {\n\t\t// If block becomes empty, transform to Navigation Link.\n\t\tif ( ! hasChildren && prevHasChildren ) {\n\t\t\t// This side-effect should not create an undo level as those should\n\t\t\t// only be created via user interactions.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\ttransformToLink();\n\t\t}\n\t}, [ hasChildren, prevHasChildren ] );\n\n\tconst canConvertToLink =\n\t\t! selectedBlockHasChildren || onlyDescendantIsEmptyLink;\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t{ ! openSubmenusOnClick && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tsetIsLinkOpen( true );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"revert\"\n\t\t\t\t\t\ticon={ removeSubmenu }\n\t\t\t\t\t\ttitle={ __( 'Convert to Link' ) }\n\t\t\t\t\t\tonClick={ transformToLink }\n\t\t\t\t\t\tclassName=\"wp-block-navigation__submenu__revert\"\n\t\t\t\t\t\tdisabled={ ! canConvertToLink }\n\t\t\t\t\t/>\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t<InspectorControls group=\"content\">\n\t\t\t\t<Controls\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisLinkEditable={ ! openSubmenusOnClick }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<ParentElement className=\"wp-block-navigation-item__content\">\n\t\t\t\t\t{ ! isInvalid && ! isDraft && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\tidentifier=\"label\"\n\t\t\t\t\t\t\t\tclassName=\"wp-block-navigation-item__label\"\n\t\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\t\tonChange={ ( labelValue ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { label: labelValue } )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\t\t\t\taria-label={ __( 'Navigation link text' ) }\n\t\t\t\t\t\t\t\tplaceholder={ itemLabelPlaceholder }\n\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tif ( ! openSubmenusOnClick && ! url ) {\n\t\t\t\t\t\t\t\t\t\tsetIsLinkOpen( true );\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/>\n\t\t\t\t\t\t\t{ description && (\n\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-item__description\">\n\t\t\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t\t\t</span>\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\t{ ( isInvalid || isDraft ) && (\n\t\t\t\t\t\t<InvalidDraftDisplay\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\tisInvalid={ isInvalid }\n\t\t\t\t\t\t\tisDraft={ isDraft }\n\t\t\t\t\t\t\tclassName=\"wp-block-navigation-item__label\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! openSubmenusOnClick && isLinkOpen && (\n\t\t\t\t\t\t<LinkUI\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tlink={ attributes }\n\t\t\t\t\t\t\tentity={ {\n\t\t\t\t\t\t\t\tentityRecord,\n\t\t\t\t\t\t\t\thasBinding: hasUrlBinding,\n\t\t\t\t\t\t\t\tisEntityAvailable: isBoundEntityAvailable,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\tsetIsLinkOpen( false );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\t\t\tsetAttributes( { url: '' } );\n\t\t\t\t\t\t\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonChange={ handleLinkChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ParentElement>\n\t\t\t\t{ ( showSubmenuIcon || openSubmenusOnClick ) && (\n\t\t\t\t\t<span className=\"wp-block-navigation__submenu-icon\">\n\t\t\t\t\t\t<ItemSubmenuIcon />\n\t\t\t\t\t</span>\n\t\t\t\t) }\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_icons", "blockEditorStore", "clsx", "linkIcon"]
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { displayShortcut, isKeyboardEvent } from '@wordpress/keycodes';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\tInnerBlocks,\n\tInspectorControls,\n\tuseInnerBlocksProps,\n\tRichText,\n\tuseBlockProps,\n\tuseBlockEditingMode,\n\tstore as blockEditorStore,\n\tgetColorClassName,\n\t__experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,\n} from '@wordpress/block-editor';\nimport { isURL, prependHTTP } from '@wordpress/url';\nimport { useState, useEffect, useRef } from '@wordpress/element';\nimport { link as linkIcon, removeSubmenu } from '@wordpress/icons';\nimport { speak } from '@wordpress/a11y';\nimport { createBlock } from '@wordpress/blocks';\nimport { useMergeRefs, usePrevious } from '@wordpress/compose';\nimport { ItemSubmenuIcon } from './icons';\nimport {\n\tControls,\n\tLinkUI,\n\tuseEntityBinding,\n\tuseHandleLinkChange,\n\tuseIsInvalidLink,\n\tInvalidDraftDisplay,\n\tuseEnableLinkStatusValidation,\n\tuseIsDraggingWithin,\n\tselectLabelText,\n} from '../navigation-link/shared';\nimport {\n\tgetColors,\n\tgetNavigationChildBlockProps,\n} from '../navigation/edit/utils';\nimport { DEFAULT_BLOCK } from '../navigation/constants';\n\nconst ALLOWED_BLOCKS = [\n\t'core/navigation-link',\n\t'core/navigation-submenu',\n\t'core/page-list',\n\t'core/loginout',\n];\n\n/**\n * @typedef {'post-type'|'custom'|'taxonomy'|'post-type-archive'} WPNavigationLinkKind\n */\n\n/**\n * Navigation Link Block Attributes\n *\n * @typedef {Object} WPNavigationLinkBlockAttributes\n *\n * @property {string} [label] Link text.\n * @property {WPNavigationLinkKind} [kind] Kind is used to differentiate between term and post ids to check post draft status.\n * @property {string} [type] The type such as post, page, tag, category and other custom types.\n * @property {string} [rel] The relationship of the linked URL.\n * @property {number} [id] A post or term id.\n * @property {boolean} [opensInNewTab] Sets link target to _blank when true.\n * @property {string} [url] Link href.\n */\n\nexport default function NavigationSubmenuEdit( {\n\tattributes,\n\tisSelected,\n\tsetAttributes,\n\tmergeBlocks,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst { label, url, description, kind, type, id } = attributes;\n\n\tconst { showSubmenuIcon, maxNestingLevel, submenuVisibility } = context;\n\tconst blockEditingMode = useBlockEditingMode();\n\n\t// Force click-only behavior in contentOnly mode to prevent hover dropdowns\n\tconst openSubmenusOnClick =\n\t\tblockEditingMode !== 'default' ? true : submenuVisibility === 'click';\n\n\t// URL binding logic\n\tconst { hasUrlBinding, isBoundEntityAvailable, entityRecord } =\n\t\tuseEntityBinding( {\n\t\t\tclientId,\n\t\t\tattributes,\n\t\t} );\n\n\tconst handleLinkChange = useHandleLinkChange( {\n\t\tclientId,\n\t\tattributes,\n\t\tsetAttributes,\n\t\tallowTextUpdate: true,\n\t} );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent, replaceBlock } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ isLinkOpen, setIsLinkOpen ] = useState( false );\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst listItemRef = useRef( null );\n\tconst isDraggingWithin = useIsDraggingWithin( listItemRef );\n\tconst itemLabelPlaceholder = __( 'Add text…' );\n\tconst ref = useRef();\n\n\tconst {\n\t\tparentCount,\n\t\tisParentOfSelectedBlock,\n\t\tisImmediateParentOfSelectedBlock,\n\t\thasChildren,\n\t\tselectedBlockHasChildren,\n\t\tonlyDescendantIsEmptyLink,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetBlockParentsByBlockName,\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockOrder,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tlet _onlyDescendantIsEmptyLink;\n\n\t\t\tconst selectedBlockId = getSelectedBlockClientId();\n\n\t\t\tconst selectedBlockChildren = getBlockOrder( selectedBlockId );\n\n\t\t\t// Check for a single descendant in the submenu. If that block\n\t\t\t// is a link block in a \"placeholder\" state with no label then\n\t\t\t// we can consider as an \"empty\" link.\n\t\t\tif ( selectedBlockChildren?.length === 1 ) {\n\t\t\t\tconst singleBlock = getBlock( selectedBlockChildren[ 0 ] );\n\n\t\t\t\t_onlyDescendantIsEmptyLink =\n\t\t\t\t\tsingleBlock?.name === 'core/navigation-link' &&\n\t\t\t\t\t! singleBlock?.attributes?.label;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tparentCount: getBlockParentsByBlockName(\n\t\t\t\t\tclientId,\n\t\t\t\t\t'core/navigation-submenu'\n\t\t\t\t).length,\n\t\t\t\tisParentOfSelectedBlock: hasSelectedInnerBlock(\n\t\t\t\t\tclientId,\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t\t\tisImmediateParentOfSelectedBlock: hasSelectedInnerBlock(\n\t\t\t\t\tclientId,\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t\thasChildren: !! getBlockCount( clientId ),\n\t\t\t\tselectedBlockHasChildren: !! selectedBlockChildren?.length,\n\t\t\t\tonlyDescendantIsEmptyLink: _onlyDescendantIsEmptyLink,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst validateLinkStatus = useEnableLinkStatusValidation( clientId );\n\n\tconst prevHasChildren = usePrevious( hasChildren );\n\n\t// Check if the submenu's parent link is invalid or draft\n\tconst [ isInvalid, isDraft ] = useIsInvalidLink(\n\t\tkind,\n\t\ttype,\n\t\tid,\n\t\tvalidateLinkStatus\n\t);\n\n\t// Show the LinkControl on mount if the URL is empty\n\t// ( When adding a new menu item)\n\t// This can't be done in the useState call because it conflicts\n\t// with the autofocus behavior of the BlockListBlock component.\n\tuseEffect( () => {\n\t\tif ( ! openSubmenusOnClick && ! url ) {\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}, [] );\n\n\t/**\n\t * The hook shouldn't be necessary but due to a focus loss happening\n\t * when selecting a suggestion in the link popover, we force close on block unselection.\n\t */\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsLinkOpen( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\t// If the LinkControl popover is open and the URL has changed, close the LinkControl and focus the label text.\n\tuseEffect( () => {\n\t\tif ( isLinkOpen && url ) {\n\t\t\t// Does this look like a URL and have something TLD-ish?\n\t\t\tif (\n\t\t\t\tisURL( prependHTTP( label ) ) &&\n\t\t\t\t/^.+\\.[a-z]+/.test( label )\n\t\t\t) {\n\t\t\t\t// Focus and select the label text.\n\t\t\t\tselectLabelText( ref );\n\t\t\t}\n\t\t}\n\t}, [ url ] );\n\n\tconst {\n\t\ttextColor,\n\t\tcustomTextColor,\n\t\tbackgroundColor,\n\t\tcustomBackgroundColor,\n\t} = getColors( context, parentCount > 0 );\n\n\tfunction onKeyDown( event ) {\n\t\tif ( isKeyboardEvent.primary( event, 'k' ) ) {\n\t\t\t// Required to prevent the command center from opening,\n\t\t\t// as it shares the CMD+K shortcut.\n\t\t\t// See https://github.com/WordPress/gutenberg/pull/59845.\n\t\t\tevent.preventDefault();\n\t\t\t// If we don't stop propagation, this event bubbles up to the parent submenu item\n\t\t\tevent.stopPropagation();\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, listItemRef ] ),\n\t\tclassName: clsx( 'wp-block-navigation-item', {\n\t\t\t'is-editing': isSelected || isParentOfSelectedBlock,\n\t\t\t'is-dragging-within': isDraggingWithin,\n\t\t\t'has-link': !! url,\n\t\t\t'has-child': hasChildren,\n\t\t\t'has-text-color': !! textColor || !! customTextColor,\n\t\t\t[ getColorClassName( 'color', textColor ) ]: !! textColor,\n\t\t\t'has-background': !! backgroundColor || customBackgroundColor,\n\t\t\t[ getColorClassName( 'background-color', backgroundColor ) ]:\n\t\t\t\t!! backgroundColor,\n\t\t\t'open-on-click': openSubmenusOnClick,\n\t\t\t'open-always': submenuVisibility === 'always',\n\t\t} ),\n\t\tstyle: {\n\t\t\tcolor: ! textColor && customTextColor,\n\t\t\tbackgroundColor: ! backgroundColor && customBackgroundColor,\n\t\t},\n\t\tonKeyDown,\n\t} );\n\n\t// Always use overlay colors for submenus.\n\tconst innerBlocksColors = getColors( context, true );\n\n\tconst allowedBlocks =\n\t\tparentCount >= maxNestingLevel\n\t\t\t? ALLOWED_BLOCKS.filter(\n\t\t\t\t\t( blockName ) => blockName !== 'core/navigation-submenu'\n\t\t\t\t)\n\t\t\t: ALLOWED_BLOCKS;\n\n\t// Shadow serialization is skipped so the shadow lands on the dropdown, not the item.\n\tconst shadowProps = getShadowClassesAndStyles( attributes );\n\tconst navigationChildBlockProps =\n\t\tgetNavigationChildBlockProps( innerBlocksColors );\n\tconst submenuBlockProps = {\n\t\t...navigationChildBlockProps,\n\t\tstyle: {\n\t\t\t...navigationChildBlockProps.style,\n\t\t\t...shadowProps.style,\n\t\t},\n\t};\n\tconst innerBlocksProps = useInnerBlocksProps( submenuBlockProps, {\n\t\tallowedBlocks,\n\t\tdefaultBlock: DEFAULT_BLOCK,\n\t\tdirectInsert: true,\n\n\t\t// Ensure block toolbar is not too far removed from item\n\t\t// being edited.\n\t\t// see: https://github.com/WordPress/gutenberg/pull/34615.\n\t\t__experimentalCaptureToolbars: true,\n\n\t\trenderAppender:\n\t\t\tisSelected ||\n\t\t\t( isImmediateParentOfSelectedBlock &&\n\t\t\t\t! selectedBlockHasChildren ) ||\n\t\t\t// Show the appender while dragging to allow inserting element between item and the appender.\n\t\t\thasChildren\n\t\t\t\t? InnerBlocks.ButtonBlockAppender\n\t\t\t\t: false,\n\t} );\n\n\tconst ParentElement = openSubmenusOnClick ? 'button' : 'a';\n\n\tfunction transformToLink() {\n\t\tconst newLinkBlock = createBlock( 'core/navigation-link', attributes );\n\t\treplaceBlock( clientId, newLinkBlock );\n\t}\n\n\tuseEffect( () => {\n\t\t// If block becomes empty, transform to Navigation Link.\n\t\tif ( ! hasChildren && prevHasChildren ) {\n\t\t\t// This side-effect should not create an undo level as those should\n\t\t\t// only be created via user interactions.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\ttransformToLink();\n\t\t}\n\t}, [ hasChildren, prevHasChildren ] );\n\n\tconst canConvertToLink =\n\t\t! selectedBlockHasChildren || onlyDescendantIsEmptyLink;\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t{ ! openSubmenusOnClick && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tsetIsLinkOpen( true );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"revert\"\n\t\t\t\t\t\ticon={ removeSubmenu }\n\t\t\t\t\t\ttitle={ __( 'Convert to Link' ) }\n\t\t\t\t\t\tonClick={ transformToLink }\n\t\t\t\t\t\tclassName=\"wp-block-navigation__submenu__revert\"\n\t\t\t\t\t\tdisabled={ ! canConvertToLink }\n\t\t\t\t\t/>\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t<InspectorControls group=\"content\">\n\t\t\t\t<Controls\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisLinkEditable={ ! openSubmenusOnClick }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<ParentElement className=\"wp-block-navigation-item__content\">\n\t\t\t\t\t{ ! isInvalid && ! isDraft && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\tidentifier=\"label\"\n\t\t\t\t\t\t\t\tclassName=\"wp-block-navigation-item__label\"\n\t\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\t\tonChange={ ( labelValue ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { label: labelValue } )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\t\t\t\taria-label={ __( 'Navigation link text' ) }\n\t\t\t\t\t\t\t\tplaceholder={ itemLabelPlaceholder }\n\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tif ( ! openSubmenusOnClick && ! url ) {\n\t\t\t\t\t\t\t\t\t\tsetIsLinkOpen( true );\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/>\n\t\t\t\t\t\t\t{ description && (\n\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-item__description\">\n\t\t\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t\t\t</span>\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\t{ ( isInvalid || isDraft ) && (\n\t\t\t\t\t\t<InvalidDraftDisplay\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\tisInvalid={ isInvalid }\n\t\t\t\t\t\t\tisDraft={ isDraft }\n\t\t\t\t\t\t\tclassName=\"wp-block-navigation-item__label\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! openSubmenusOnClick && isLinkOpen && (\n\t\t\t\t\t\t<LinkUI\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tlink={ attributes }\n\t\t\t\t\t\t\tentity={ {\n\t\t\t\t\t\t\t\tentityRecord,\n\t\t\t\t\t\t\t\thasBinding: hasUrlBinding,\n\t\t\t\t\t\t\t\tisEntityAvailable: isBoundEntityAvailable,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\tsetIsLinkOpen( false );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\t\t\tsetAttributes( { url: '' } );\n\t\t\t\t\t\t\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonChange={ handleLinkChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ParentElement>\n\t\t\t\t{ ( showSubmenuIcon || openSubmenusOnClick ) && (\n\t\t\t\t\t<span className=\"wp-block-navigation__submenu-icon\">\n\t\t\t\t\t\t<ItemSubmenuIcon />\n\t\t\t\t\t</span>\n\t\t\t\t) }\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_icons", "blockEditorStore", "clsx", "getShadowClassesAndStyles", "linkIcon"]
7
7
  }
@@ -51,6 +51,15 @@
51
51
  "interactivity": {
52
52
  "clientNavigation": true
53
53
  },
54
+ "background": {
55
+ "backgroundImage": true,
56
+ "backgroundSize": true,
57
+ "gradient": true,
58
+ "__experimentalDefaultControls": {
59
+ "backgroundImage": true,
60
+ "gradient": true
61
+ }
62
+ },
54
63
  "color": {
55
64
  "text": true,
56
65
  "background": true,
@@ -76,6 +85,7 @@
76
85
  "margin": false
77
86
  }
78
87
  },
88
+ "shadow": true,
79
89
  "contentRole": true
80
90
  },
81
91
  "editorStyle": "wp-block-page-list-editor",
@@ -66,6 +66,7 @@
66
66
  "__experimentalLetterSpacing": true,
67
67
  "__experimentalTextTransform": true,
68
68
  "__experimentalWritingMode": true,
69
+ "textShadow": true,
69
70
  "fitText": true,
70
71
  "__experimentalDefaultControls": {
71
72
  "fontSize": true
@@ -42,7 +42,6 @@ var import_blocks = require("@wordpress/blocks");
42
42
  var import_icons = require("@wordpress/icons");
43
43
  var import_use_enter = require("./use-enter.cjs");
44
44
  var import_deprecated_attributes = __toESM(require("./deprecated-attributes.cjs"));
45
- var import_lock_unlock = require("../lock-unlock.cjs");
46
45
  var import_jsx_runtime = require("react/jsx-runtime");
47
46
  function ParagraphRTLControl({ direction, setDirection }) {
48
47
  return (0, import_i18n.isRTL)() && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -64,7 +63,7 @@ function DropCapControl({ clientId, attributes, setAttributes, name }) {
64
63
  const [isDropCapFeatureEnabled] = (0, import_block_editor.useSettings)("typography.dropCap");
65
64
  const hasSelectedStyleState = (0, import_data.useSelect)(
66
65
  (select) => {
67
- const { hasSelectedStyleState: hasSelectedBlockStyleState } = (0, import_lock_unlock.unlock)(select(import_block_editor.store));
66
+ const { hasSelectedBlockStyleState } = select(import_block_editor.store);
68
67
  return hasSelectedBlockStyleState(clientId);
69
68
  },
70
69
  [clientId]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/paragraph/edit.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { __, _x, isRTL } from '@wordpress/i18n';\nimport {\n\tToolbarButton,\n\tToggleControl,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tuseSettings,\n\tuseBlockEditingMode,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { formatLTR } from '@wordpress/icons';\nimport { useOnEnter } from './use-enter';\nimport useDeprecatedAlign from './deprecated-attributes';\nimport { unlock } from '../lock-unlock';\n\nfunction ParagraphRTLControl( { direction, setDirection } ) {\n\treturn (\n\t\tisRTL() && (\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ formatLTR }\n\t\t\t\ttitle={ _x( 'Left to right', 'editor button' ) }\n\t\t\t\tisActive={ direction === 'ltr' }\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tsetDirection( direction === 'ltr' ? undefined : 'ltr' );\n\t\t\t\t} }\n\t\t\t/>\n\t\t)\n\t);\n}\n\nfunction hasDropCapDisabled( align ) {\n\treturn align === ( isRTL() ? 'left' : 'right' ) || align === 'center';\n}\n\nfunction DropCapControl( { clientId, attributes, setAttributes, name } ) {\n\t// Please do not add a useSelect call to the paragraph block unconditionally.\n\t// Every useSelect added to a (frequently used) block will degrade load\n\t// and type performance. By moving it within InspectorControls, the subscription is\n\t// now only added for the selected block(s).\n\tconst [ isDropCapFeatureEnabled ] = useSettings( 'typography.dropCap' );\n\tconst hasSelectedStyleState = useSelect(\n\t\t( select ) => {\n\t\t\tconst { hasSelectedStyleState: hasSelectedBlockStyleState } =\n\t\t\t\tunlock( select( blockEditorStore ) );\n\n\t\t\treturn hasSelectedBlockStyleState( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tif ( ! isDropCapFeatureEnabled || hasSelectedStyleState ) {\n\t\treturn null;\n\t}\n\n\tconst { style, dropCap } = attributes;\n\tconst textAlign = style?.typography?.textAlign;\n\n\tlet helpText;\n\tif ( hasDropCapDisabled( textAlign ) ) {\n\t\thelpText = __( 'Not available for aligned text.' );\n\t} else if ( dropCap ) {\n\t\thelpText = __( 'Showing large initial letter.' );\n\t} else {\n\t\thelpText = __( 'Show a large initial letter.' );\n\t}\n\n\tconst isDropCapControlEnabledByDefault = getBlockSupport(\n\t\tname,\n\t\t'typography.defaultControls.dropCap',\n\t\tfalse\n\t);\n\n\treturn (\n\t\t<InspectorControls group=\"typography\">\n\t\t\t<ToolsPanelItem\n\t\t\t\thasValue={ () => !! dropCap }\n\t\t\t\tlabel={ __( 'Drop cap' ) }\n\t\t\t\tisShownByDefault={ isDropCapControlEnabledByDefault }\n\t\t\t\tonDeselect={ () => setAttributes( { dropCap: false } ) }\n\t\t\t\tresetAllFilter={ () => ( { dropCap: false } ) }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<ToggleControl\n\t\t\t\t\tlabel={ __( 'Drop cap' ) }\n\t\t\t\t\tchecked={ !! dropCap }\n\t\t\t\t\tonChange={ () => setAttributes( { dropCap: ! dropCap } ) }\n\t\t\t\t\thelp={ helpText }\n\t\t\t\t\tdisabled={ hasDropCapDisabled( textAlign ) }\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t</InspectorControls>\n\t);\n}\n\nfunction ParagraphBlock( {\n\tattributes,\n\tmergeBlocks,\n\tonReplace,\n\tonRemove,\n\tsetAttributes,\n\tclientId,\n\tisSelected: isSingleSelected,\n\tname,\n} ) {\n\tconst { content, direction, dropCap, placeholder, style } = attributes;\n\tconst textAlign = style?.typography?.textAlign;\n\tuseDeprecatedAlign( attributes.align, style, setAttributes );\n\tconst blockProps = useBlockProps( {\n\t\tref: useOnEnter( { clientId, content } ),\n\t\tclassName: clsx( {\n\t\t\t'has-drop-cap': hasDropCapDisabled( textAlign ) ? false : dropCap,\n\t\t} ),\n\t\tstyle: { direction },\n\t\t'aria-label': RichText.isEmpty( content )\n\t\t\t? __(\n\t\t\t\t\t'Empty block; start writing or type forward slash to choose a block'\n\t\t\t )\n\t\t\t: __( 'Block: Paragraph' ),\n\t} );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\treturn (\n\t\t<>\n\t\t\t{ blockEditingMode === 'default' && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<ParagraphRTLControl\n\t\t\t\t\t\tdirection={ direction }\n\t\t\t\t\t\tsetDirection={ ( newDirection ) =>\n\t\t\t\t\t\t\tsetAttributes( { direction: newDirection } )\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{ isSingleSelected && (\n\t\t\t\t<DropCapControl\n\t\t\t\t\tname={ name }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t<RichText\n\t\t\t\tidentifier=\"content\"\n\t\t\t\ttagName=\"p\"\n\t\t\t\t{ ...blockProps }\n\t\t\t\tvalue={ content }\n\t\t\t\tonChange={ ( newContent ) =>\n\t\t\t\t\tsetAttributes( { content: newContent } )\n\t\t\t\t}\n\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\tonReplace={ onReplace }\n\t\t\t\tonRemove={ onRemove }\n\t\t\t\tdata-empty={ RichText.isEmpty( content ) }\n\t\t\t\tplaceholder={ placeholder || __( 'Type / to choose a block' ) }\n\t\t\t\tdata-custom-placeholder={ placeholder ? true : undefined }\n\t\t\t\t__unstableEmbedURLOnPaste\n\t\t\t\t__unstableAllowPrefixTransformations\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nexport default ParagraphBlock;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { __, _x, isRTL } from '@wordpress/i18n';\nimport {\n\tToolbarButton,\n\tToggleControl,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tuseSettings,\n\tuseBlockEditingMode,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { formatLTR } from '@wordpress/icons';\nimport { useOnEnter } from './use-enter';\nimport useDeprecatedAlign from './deprecated-attributes';\n\nfunction ParagraphRTLControl( { direction, setDirection } ) {\n\treturn (\n\t\tisRTL() && (\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ formatLTR }\n\t\t\t\ttitle={ _x( 'Left to right', 'editor button' ) }\n\t\t\t\tisActive={ direction === 'ltr' }\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tsetDirection( direction === 'ltr' ? undefined : 'ltr' );\n\t\t\t\t} }\n\t\t\t/>\n\t\t)\n\t);\n}\n\nfunction hasDropCapDisabled( align ) {\n\treturn align === ( isRTL() ? 'left' : 'right' ) || align === 'center';\n}\n\nfunction DropCapControl( { clientId, attributes, setAttributes, name } ) {\n\t// Please do not add a useSelect call to the paragraph block unconditionally.\n\t// Every useSelect added to a (frequently used) block will degrade load\n\t// and type performance. By moving it within InspectorControls, the subscription is\n\t// now only added for the selected block(s).\n\tconst [ isDropCapFeatureEnabled ] = useSettings( 'typography.dropCap' );\n\tconst hasSelectedStyleState = useSelect(\n\t\t( select ) => {\n\t\t\tconst { hasSelectedBlockStyleState } = select( blockEditorStore );\n\n\t\t\treturn hasSelectedBlockStyleState( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tif ( ! isDropCapFeatureEnabled || hasSelectedStyleState ) {\n\t\treturn null;\n\t}\n\n\tconst { style, dropCap } = attributes;\n\tconst textAlign = style?.typography?.textAlign;\n\n\tlet helpText;\n\tif ( hasDropCapDisabled( textAlign ) ) {\n\t\thelpText = __( 'Not available for aligned text.' );\n\t} else if ( dropCap ) {\n\t\thelpText = __( 'Showing large initial letter.' );\n\t} else {\n\t\thelpText = __( 'Show a large initial letter.' );\n\t}\n\n\tconst isDropCapControlEnabledByDefault = getBlockSupport(\n\t\tname,\n\t\t'typography.defaultControls.dropCap',\n\t\tfalse\n\t);\n\n\treturn (\n\t\t<InspectorControls group=\"typography\">\n\t\t\t<ToolsPanelItem\n\t\t\t\thasValue={ () => !! dropCap }\n\t\t\t\tlabel={ __( 'Drop cap' ) }\n\t\t\t\tisShownByDefault={ isDropCapControlEnabledByDefault }\n\t\t\t\tonDeselect={ () => setAttributes( { dropCap: false } ) }\n\t\t\t\tresetAllFilter={ () => ( { dropCap: false } ) }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<ToggleControl\n\t\t\t\t\tlabel={ __( 'Drop cap' ) }\n\t\t\t\t\tchecked={ !! dropCap }\n\t\t\t\t\tonChange={ () => setAttributes( { dropCap: ! dropCap } ) }\n\t\t\t\t\thelp={ helpText }\n\t\t\t\t\tdisabled={ hasDropCapDisabled( textAlign ) }\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t</InspectorControls>\n\t);\n}\n\nfunction ParagraphBlock( {\n\tattributes,\n\tmergeBlocks,\n\tonReplace,\n\tonRemove,\n\tsetAttributes,\n\tclientId,\n\tisSelected: isSingleSelected,\n\tname,\n} ) {\n\tconst { content, direction, dropCap, placeholder, style } = attributes;\n\tconst textAlign = style?.typography?.textAlign;\n\tuseDeprecatedAlign( attributes.align, style, setAttributes );\n\tconst blockProps = useBlockProps( {\n\t\tref: useOnEnter( { clientId, content } ),\n\t\tclassName: clsx( {\n\t\t\t'has-drop-cap': hasDropCapDisabled( textAlign ) ? false : dropCap,\n\t\t} ),\n\t\tstyle: { direction },\n\t\t'aria-label': RichText.isEmpty( content )\n\t\t\t? __(\n\t\t\t\t\t'Empty block; start writing or type forward slash to choose a block'\n\t\t\t\t)\n\t\t\t: __( 'Block: Paragraph' ),\n\t} );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\treturn (\n\t\t<>\n\t\t\t{ blockEditingMode === 'default' && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<ParagraphRTLControl\n\t\t\t\t\t\tdirection={ direction }\n\t\t\t\t\t\tsetDirection={ ( newDirection ) =>\n\t\t\t\t\t\t\tsetAttributes( { direction: newDirection } )\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{ isSingleSelected && (\n\t\t\t\t<DropCapControl\n\t\t\t\t\tname={ name }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t<RichText\n\t\t\t\tidentifier=\"content\"\n\t\t\t\ttagName=\"p\"\n\t\t\t\t{ ...blockProps }\n\t\t\t\tvalue={ content }\n\t\t\t\tonChange={ ( newContent ) =>\n\t\t\t\t\tsetAttributes( { content: newContent } )\n\t\t\t\t}\n\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\tonReplace={ onReplace }\n\t\t\t\tonRemove={ onRemove }\n\t\t\t\tdata-empty={ RichText.isEmpty( content ) }\n\t\t\t\tplaceholder={ placeholder || __( 'Type / to choose a block' ) }\n\t\t\t\tdata-custom-placeholder={ placeholder ? true : undefined }\n\t\t\t\t__unstableEmbedURLOnPaste\n\t\t\t\t__unstableAllowPrefixTransformations\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nexport default ParagraphBlock;\n"],
5
+ "mappings": "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",
6
6
  "names": ["blockEditorStore", "ToolsPanelItem", "useDeprecatedAlign", "clsx"]
7
7
  }
@@ -38,15 +38,21 @@ __export(paragraph_exports, {
38
38
  module.exports = __toCommonJS(paragraph_exports);
39
39
  var import_i18n = require("@wordpress/i18n");
40
40
  var import_icons = require("@wordpress/icons");
41
+ var import_blocks = require("@wordpress/blocks");
41
42
  var import_init_block = __toESM(require("../utils/init-block.cjs"));
42
43
  var import_deprecated = __toESM(require("./deprecated.cjs"));
43
44
  var import_edit = __toESM(require("./edit.cjs"));
44
45
  var import_block = __toESM(require("./block.json"));
45
46
  var import_save = __toESM(require("./save.cjs"));
46
47
  var import_transforms = __toESM(require("./transforms.cjs"));
48
+ var import_lock_unlock = require("../lock-unlock.cjs");
49
+ var { editableRootKey } = (0, import_lock_unlock.unlock)(import_blocks.privateApis);
47
50
  var { name } = import_block.default;
48
51
  var settings = {
49
52
  icon: import_icons.paragraph,
53
+ // Opt into the editing host behaviour privately. It's a Symbol setting
54
+ // rather than a public `supports` key so it stays an internal detail.
55
+ [editableRootKey]: true,
50
56
  example: {
51
57
  attributes: {
52
58
  content: (0, import_i18n.__)(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/paragraph/index.js"],
4
- "sourcesContent": ["import { __ } from '@wordpress/i18n';\nimport { paragraph as icon } from '@wordpress/icons';\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tcontent: __(\n\t\t\t\t'In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.'\n\t\t\t),\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tconst customName = attributes?.metadata?.name;\n\n\t\tif (\n\t\t\t( context === 'list-view' || context === 'breadcrumb' ) &&\n\t\t\tcustomName\n\t\t) {\n\t\t\treturn customName;\n\t\t}\n\n\t\tif ( context === 'accessibility' ) {\n\t\t\tif ( customName ) {\n\t\t\t\treturn customName;\n\t\t\t}\n\n\t\t\tconst { content } = attributes;\n\t\t\treturn ! content || content.length === 0 ? __( 'Empty' ) : content;\n\t\t}\n\t},\n\ttransforms,\n\tdeprecated,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\tcontent:\n\t\t\t\t( attributes.content || '' ) +\n\t\t\t\t( attributesToMerge.content || '' ),\n\t\t};\n\t},\n\tedit,\n\tsave,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,+BAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,kBAAmB;AACnB,mBAAkC;AAClC,wBAAsB;AACtB,wBAAuB;AACvB,kBAAiB;AACjB,mBAAqB;AACrB,kBAAiB;AACjB,wBAAuB;AAEvB,IAAM,EAAE,KAAK,IAAI,aAAAA;AAIV,IAAM,WAAW;AAAA,EACvB,mBAAAC;AAAA,EACA,SAAS;AAAA,IACR,YAAY;AAAA,MACX,aAAS;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,oBAAqB,YAAY,EAAE,QAAQ,GAAI;AAC9C,UAAM,aAAa,YAAY,UAAU;AAEzC,SACG,YAAY,eAAe,YAAY,iBACzC,YACC;AACD,aAAO;AAAA,IACR;AAEA,QAAK,YAAY,iBAAkB;AAClC,UAAK,YAAa;AACjB,eAAO;AAAA,MACR;AAEA,YAAM,EAAE,QAAQ,IAAI;AACpB,aAAO,CAAE,WAAW,QAAQ,WAAW,QAAI,gBAAI,OAAQ,IAAI;AAAA,IAC5D;AAAA,EACD;AAAA,EACA,8BAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,MAAO,YAAY,mBAAoB;AACtC,WAAO;AAAA,MACN,UACG,WAAW,WAAW,OACtB,kBAAkB,WAAW;AAAA,IACjC;AAAA,EACD;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AACD;AAEO,IAAM,OAAO,UAAM,kBAAAC,SAAW,EAAE,MAAM,uBAAAC,SAAU,SAAS,CAAE;",
6
- "names": ["metadata", "icon", "transforms", "deprecated", "edit", "save", "initBlock", "metadata"]
4
+ "sourcesContent": ["import { __ } from '@wordpress/i18n';\nimport { paragraph as icon } from '@wordpress/icons';\nimport { privateApis as blocksPrivateApis } from '@wordpress/blocks';\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\nimport { unlock } from '../lock-unlock';\n\nconst { editableRootKey } = unlock( blocksPrivateApis );\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\t// Opt into the editing host behaviour privately. It's a Symbol setting\n\t// rather than a public `supports` key so it stays an internal detail.\n\t[ editableRootKey ]: true,\n\texample: {\n\t\tattributes: {\n\t\t\tcontent: __(\n\t\t\t\t'In a village of La Mancha, the name of which I have no desire to call to mind, there lived not long since one of those gentlemen that keep a lance in the lance-rack, an old buckler, a lean hack, and a greyhound for coursing.'\n\t\t\t),\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tconst customName = attributes?.metadata?.name;\n\n\t\tif (\n\t\t\t( context === 'list-view' || context === 'breadcrumb' ) &&\n\t\t\tcustomName\n\t\t) {\n\t\t\treturn customName;\n\t\t}\n\n\t\tif ( context === 'accessibility' ) {\n\t\t\tif ( customName ) {\n\t\t\t\treturn customName;\n\t\t\t}\n\n\t\t\tconst { content } = attributes;\n\t\t\treturn ! content || content.length === 0 ? __( 'Empty' ) : content;\n\t\t}\n\t},\n\ttransforms,\n\tdeprecated,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\tcontent:\n\t\t\t\t( attributes.content || '' ) +\n\t\t\t\t( attributesToMerge.content || '' ),\n\t\t};\n\t},\n\tedit,\n\tsave,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,+BAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,kBAAmB;AACnB,mBAAkC;AAClC,oBAAiD;AACjD,wBAAsB;AACtB,wBAAuB;AACvB,kBAAiB;AACjB,mBAAqB;AACrB,kBAAiB;AACjB,wBAAuB;AACvB,yBAAuB;AAEvB,IAAM,EAAE,gBAAgB,QAAI,2BAAQ,cAAAC,WAAkB;AAEtD,IAAM,EAAE,KAAK,IAAI,aAAAD;AAIV,IAAM,WAAW;AAAA,EACvB,mBAAAE;AAAA;AAAA;AAAA,EAGA,CAAE,eAAgB,GAAG;AAAA,EACrB,SAAS;AAAA,IACR,YAAY;AAAA,MACX,aAAS;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,oBAAqB,YAAY,EAAE,QAAQ,GAAI;AAC9C,UAAM,aAAa,YAAY,UAAU;AAEzC,SACG,YAAY,eAAe,YAAY,iBACzC,YACC;AACD,aAAO;AAAA,IACR;AAEA,QAAK,YAAY,iBAAkB;AAClC,UAAK,YAAa;AACjB,eAAO;AAAA,MACR;AAEA,YAAM,EAAE,QAAQ,IAAI;AACpB,aAAO,CAAE,WAAW,QAAQ,WAAW,QAAI,gBAAI,OAAQ,IAAI;AAAA,IAC5D;AAAA,EACD;AAAA,EACA,8BAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,MAAO,YAAY,mBAAoB;AACtC,WAAO;AAAA,MACN,UACG,WAAW,WAAW,OACtB,kBAAkB,WAAW;AAAA,IACjC;AAAA,EACD;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AACD;AAEO,IAAM,OAAO,UAAM,kBAAAC,SAAW,EAAE,MAAM,uBAAAC,SAAU,SAAS,CAAE;",
6
+ "names": ["metadata", "blocksPrivateApis", "icon", "transforms", "deprecated", "edit", "save", "initBlock", "metadata"]
7
7
  }
@@ -88,6 +88,7 @@
88
88
  }
89
89
  },
90
90
  "interactivity": true,
91
+ "shadow": true,
91
92
  "spacing": {
92
93
  "margin": true,
93
94
  "padding": true
@@ -50,6 +50,7 @@ var import_context = require("./context.cjs");
50
50
  var import_utils = require("./utils.cjs");
51
51
  var import_jsx_runtime = require("react/jsx-runtime");
52
52
  var ALLOWED_MEDIA_TYPES = ["audio"];
53
+ var EMPTY_ARRAY = [];
53
54
  var AUDIO_FILE_EXTENSION = /\.(aac|aif|aiff|flac|m4a|m4b|mp3|oga|ogg|opus|wav|weba)$/i;
54
55
  var DEFAULT_WAVEFORM_STYLE = "bars";
55
56
  var FILE_LIST_OBJECT_NAME = "[object FileList]";
@@ -132,7 +133,7 @@ var PlaylistEdit = ({
132
133
  (select) => {
133
134
  const { getBlock: _getBlock } = select(import_block_editor.store);
134
135
  return {
135
- innerBlockTracks: _getBlock(clientId)?.innerBlocks ?? []
136
+ innerBlockTracks: _getBlock(clientId)?.innerBlocks ?? EMPTY_ARRAY
136
137
  };
137
138
  },
138
139
  [clientId]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/playlist/edit.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { useCallback, useEffect, useMemo, useState } from '@wordpress/element';\nimport {\n\tstore as blockEditorStore,\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tBlockIcon,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tBlockControls,\n\tInspectorControls,\n\t__experimentalColorGradientSettingsDropdown as ColorGradientSettingsDropdown,\n\t__experimentalUseMultipleOriginColorsAndGradients as useMultipleOriginColorsAndGradients,\n} from '@wordpress/block-editor';\nimport {\n\tToggleControl,\n\tDisabled,\n\tSelectControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __, _x } from '@wordpress/i18n';\nimport { playlist as icon } from '@wordpress/icons';\nimport { createBlock } from '@wordpress/blocks';\nimport { createBlobURL } from '@wordpress/blob';\nimport { Caption } from '../utils/caption';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\nimport { WaveformPlayer } from '../utils/waveform-player';\nimport { PlaylistContext } from './context';\nimport { getTrackAttributes } from './utils';\n\nconst ALLOWED_MEDIA_TYPES = [ 'audio' ];\nconst AUDIO_FILE_EXTENSION =\n\t/\\.(aac|aif|aiff|flac|m4a|m4b|mp3|oga|ogg|opus|wav|weba)$/i;\nconst DEFAULT_WAVEFORM_STYLE = 'bars';\nconst FILE_LIST_OBJECT_NAME = '[object FileList]';\nconst WAVEFORM_STYLE_OPTIONS = [\n\t{ label: _x( 'Bars', 'waveform style option' ), value: 'bars' },\n\t{ label: _x( 'Mirror', 'waveform style option' ), value: 'mirror' },\n\t{ label: _x( 'Line', 'waveform style option' ), value: 'line' },\n\t{ label: _x( 'Blocks', 'waveform style option' ), value: 'blocks' },\n\t{ label: _x( 'Dots', 'waveform style option' ), value: 'dots' },\n\t{ label: _x( 'Seekbar', 'waveform style option' ), value: 'seekbar' },\n];\n\nfunction isFile( value ) {\n\treturn (\n\t\tObject.prototype.toString.call( value ) === '[object File]' ||\n\t\t( typeof File !== 'undefined' && value instanceof File )\n\t);\n}\n\nfunction isAudioFile( file ) {\n\treturn file.type\n\t\t? file.type.startsWith( 'audio/' )\n\t\t: AUDIO_FILE_EXTENSION.test( file.name );\n}\n\nfunction getTrackIdentifier( track ) {\n\treturn track.id ?? track.src ?? track.blob;\n}\n\nconst PlaylistEdit = ( {\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tclientId,\n} ) => {\n\tconst {\n\t\torder,\n\t\tshowTracklist,\n\t\tshowNumbers,\n\t\tshowImages,\n\t\tshowPlayButtonArtwork,\n\t\tshowArtists,\n\t\tshowTrackLength,\n\t\twaveformStyle = DEFAULT_WAVEFORM_STYLE,\n\t\twaveformColor,\n\t\twaveformGradient,\n\t\twaveformBackgroundColor,\n\t\twaveformBackgroundGradient,\n\t} = attributes;\n\n\tconst blockProps = useBlockProps();\n\tconst waveformPanelId = `${ clientId }-waveform`;\n\tconst {\n\t\treplaceInnerBlocks,\n\t\treplaceBlocks,\n\t\tinsertBlocks,\n\t\tselectBlock,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst colorGradientSettings = useMultipleOriginColorsAndGradients();\n\tconst colors = useMemo(\n\t\t() =>\n\t\t\tcolorGradientSettings.colors.flatMap(\n\t\t\t\t( origin ) => origin?.colors ?? []\n\t\t\t),\n\t\t[ colorGradientSettings.colors ]\n\t);\n\tconst gradients = useMemo(\n\t\t() =>\n\t\t\tcolorGradientSettings.gradients.flatMap(\n\t\t\t\t( origin ) => origin?.gradients ?? []\n\t\t\t),\n\t\t[ colorGradientSettings.gradients ]\n\t);\n\tconst hasColors =\n\t\tcolors.length > 0 || ! colorGradientSettings.disableCustomColors;\n\tconst hasGradients =\n\t\tgradients.length > 0 || ! colorGradientSettings.disableCustomGradients;\n\tconst waveformGradientValue = waveformGradient;\n\tconst waveformBackgroundGradientValue = waveformBackgroundGradient;\n\tlet waveformColorGradientChange;\n\tlet waveformBackgroundColorGradientChange;\n\tconst onUploadError = useCallback(\n\t\t( message ) => {\n\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t},\n\t\t[ createErrorNotice ]\n\t);\n\tconst [ currentTrackClientId, setCurrentTrackClientId ] = useState( null );\n\n\tconst { innerBlockTracks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock: _getBlock } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tinnerBlockTracks: _getBlock( clientId )?.innerBlocks ?? [],\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t// Create a list of tracks from the inner blocks,\n\t// but skip blocks that do not have a source, such as the media placeholder.\n\tconst validTracks = useMemo(\n\t\t() =>\n\t\t\tinnerBlockTracks.filter(\n\t\t\t\t( block ) => !! block.attributes.src || !! block.attributes.blob\n\t\t\t),\n\t\t[ innerBlockTracks ]\n\t);\n\tconst tracks = useMemo(\n\t\t() =>\n\t\t\tvalidTracks.map( ( block ) => ( {\n\t\t\t\t...block.attributes,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} ) ),\n\t\t[ validTracks ]\n\t);\n\n\tuseEffect( () => {\n\t\tif ( validTracks.length === 0 ) {\n\t\t\tif ( currentTrackClientId !== null ) {\n\t\t\t\tsetCurrentTrackClientId( null );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentTrackExists = validTracks.some(\n\t\t\t( block ) => block.clientId === currentTrackClientId\n\t\t);\n\t\tif ( ! currentTrackExists ) {\n\t\t\tsetCurrentTrackClientId( validTracks[ 0 ].clientId );\n\t\t}\n\t}, [ currentTrackClientId, setCurrentTrackClientId, validTracks ] );\n\n\t// Clean up placeholder tracks when reverting back to playlist placeholder state\n\tuseEffect( () => {\n\t\tif ( validTracks.length > 0 || innerBlockTracks.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove any lingering placeholder track blocks\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\treplaceInnerBlocks( clientId, [] );\n\t}, [\n\t\tclientId,\n\t\tinnerBlockTracks,\n\t\treplaceInnerBlocks,\n\t\tvalidTracks,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t] );\n\n\tconst createTrackBlocks = useCallback(\n\t\t( media ) => {\n\t\t\tif ( ! media ) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tlet mediaItems = [ media ];\n\t\t\tif (\n\t\t\t\tObject.prototype.toString.call( media ) ===\n\t\t\t\tFILE_LIST_OBJECT_NAME\n\t\t\t) {\n\t\t\t\tmediaItems = Array.from( media );\n\t\t\t} else if ( Array.isArray( media ) ) {\n\t\t\t\tmediaItems = media;\n\t\t\t}\n\t\t\tlet hasInvalidFile = false;\n\n\t\t\tconst blocks = mediaItems\n\t\t\t\t.map( ( mediaItem ) => {\n\t\t\t\t\tif ( isFile( mediaItem ) ) {\n\t\t\t\t\t\tif ( ! isAudioFile( mediaItem ) ) {\n\t\t\t\t\t\t\thasInvalidFile = true;\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn createBlock( 'core/playlist-track', {\n\t\t\t\t\t\t\tblob: createBlobURL( mediaItem ),\n\t\t\t\t\t\t\ttitle: mediaItem.name,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\tconst track = getTrackAttributes( mediaItem );\n\n\t\t\t\t\treturn track.src\n\t\t\t\t\t\t? createBlock( 'core/playlist-track', track )\n\t\t\t\t\t\t: null;\n\t\t\t\t} )\n\t\t\t\t.filter( Boolean );\n\n\t\t\tif ( hasInvalidFile ) {\n\t\t\t\tonUploadError(\n\t\t\t\t\t__( 'Only audio files can be added to a playlist.' )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn blocks;\n\t\t},\n\t\t[ onUploadError ]\n\t);\n\n\tconst onSelectTracks = useCallback(\n\t\t( media ) => {\n\t\t\tconst newBlocks = createTrackBlocks( media );\n\t\t\tif ( newBlocks.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetCurrentTrackClientId( newBlocks[ 0 ]?.clientId ?? null );\n\t\t\t// Replace the inner blocks with the new tracks.\n\t\t\treplaceInnerBlocks( clientId, newBlocks );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tcreateTrackBlocks,\n\t\t\treplaceInnerBlocks,\n\t\t\tsetCurrentTrackClientId,\n\t\t]\n\t);\n\n\tconst onAddTracks = useCallback(\n\t\t( media ) => {\n\t\t\tconst existingIds = new Set(\n\t\t\t\tvalidTracks\n\t\t\t\t\t.map( ( block ) => getTrackIdentifier( block.attributes ) )\n\t\t\t\t\t.filter( Boolean )\n\t\t\t);\n\t\t\tconst newBlocks = createTrackBlocks( media ).filter(\n\t\t\t\t( block ) =>\n\t\t\t\t\t! existingIds.has( getTrackIdentifier( block.attributes ) )\n\t\t\t);\n\t\t\tif ( newBlocks.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetCurrentTrackClientId( newBlocks[ 0 ].clientId );\n\t\t\tinsertBlocks( newBlocks, undefined, clientId, false );\n\t\t\tselectBlock( newBlocks[ 0 ].clientId );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tcreateTrackBlocks,\n\t\t\tinsertBlocks,\n\t\t\tselectBlock,\n\t\t\tsetCurrentTrackClientId,\n\t\t\tvalidTracks,\n\t\t]\n\t);\n\n\tconst removeTrack = useCallback(\n\t\t( trackClientId ) => {\n\t\t\t// Not `removeBlock`: it removes the container along with its\n\t\t\t// last inner block, so this would take the playlist with it.\n\t\t\treplaceBlocks( trackClientId, [] );\n\t\t},\n\t\t[ replaceBlocks ]\n\t);\n\n\tconst playlistContext = useMemo(\n\t\t() => ( {\n\t\t\tcurrentTrackClientId,\n\t\t\tsetCurrentTrackClientId,\n\t\t\tremoveTrack,\n\t\t} ),\n\t\t[ currentTrackClientId, setCurrentTrackClientId, removeTrack ]\n\t);\n\n\t// Get current track data by finding the track with matching client ID.\n\tconst currentTrackData =\n\t\ttracks.find( ( track ) => track.clientId === currentTrackClientId ) ??\n\t\ttracks[ 0 ];\n\n\t// Handle track end - advance to next track or loop to first.\n\tconst onTrackEnded = useCallback( () => {\n\t\tconst currentIndex = tracks.findIndex(\n\t\t\t( track ) => track.clientId === currentTrackClientId\n\t\t);\n\t\tconst nextTrack = tracks[ currentIndex + 1 ] || tracks[ 0 ];\n\t\tif ( nextTrack?.clientId ) {\n\t\t\tsetCurrentTrackClientId( nextTrack.clientId );\n\t\t}\n\t}, [ currentTrackClientId, setCurrentTrackClientId, tracks ] );\n\n\tconst onChangeOrder = useCallback(\n\t\t( trackOrder ) => {\n\t\t\tconst sortedBlocks = [ ...innerBlockTracks ].sort( ( a, b ) => {\n\t\t\t\tconst titleA = a.attributes.title || '';\n\t\t\t\tconst titleB = b.attributes.title || '';\n\n\t\t\t\tif ( trackOrder === 'asc' ) {\n\t\t\t\t\treturn titleA.localeCompare( titleB );\n\t\t\t\t}\n\t\t\t\treturn titleB.localeCompare( titleA );\n\t\t\t} );\n\t\t\treplaceInnerBlocks( clientId, sortedBlocks );\n\t\t\tsetCurrentTrackClientId( sortedBlocks[ 0 ]?.clientId ?? null );\n\t\t\tsetAttributes( {\n\t\t\t\torder: trackOrder,\n\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tinnerBlockTracks,\n\t\t\treplaceInnerBlocks,\n\t\t\tsetAttributes,\n\t\t\tsetCurrentTrackClientId,\n\t\t]\n\t);\n\n\tfunction toggleAttribute( attribute ) {\n\t\treturn ( newValue ) => {\n\t\t\tsetAttributes( { [ attribute ]: newValue } );\n\t\t};\n\t}\n\n\tconst onChangeWaveformStyle = useCallback(\n\t\t( newWaveformStyle ) => {\n\t\t\tsetAttributes( {\n\t\t\t\twaveformStyle:\n\t\t\t\t\tnewWaveformStyle === DEFAULT_WAVEFORM_STYLE\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: newWaveformStyle,\n\t\t\t} );\n\t\t},\n\t\t[ setAttributes ]\n\t);\n\n\tfunction updateWaveformColor( colorValue ) {\n\t\tconst isSettingColor = colorValue !== undefined;\n\t\tif ( ! isSettingColor && waveformColorGradientChange === 'gradient' ) {\n\t\t\twaveformColorGradientChange = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\twaveformColorGradientChange = 'color';\n\n\t\tsetAttributes( {\n\t\t\twaveformColor: colorValue,\n\t\t\twaveformGradient: undefined,\n\t\t} );\n\t}\n\n\tfunction updateWaveformGradient( gradientValue ) {\n\t\tconst isSettingGradient = gradientValue !== undefined;\n\t\tif ( ! isSettingGradient && waveformColorGradientChange === 'color' ) {\n\t\t\twaveformColorGradientChange = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\twaveformColorGradientChange = 'gradient';\n\n\t\tsetAttributes( {\n\t\t\twaveformGradient: gradientValue,\n\t\t\twaveformColor: undefined,\n\t\t} );\n\t}\n\n\tfunction updateWaveformBackgroundColor( colorValue ) {\n\t\tconst isSettingColor = colorValue !== undefined;\n\t\tif (\n\t\t\t! isSettingColor &&\n\t\t\twaveformBackgroundColorGradientChange === 'gradient'\n\t\t) {\n\t\t\twaveformBackgroundColorGradientChange = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\twaveformBackgroundColorGradientChange = 'color';\n\n\t\tsetAttributes( {\n\t\t\twaveformBackgroundColor: colorValue,\n\t\t\twaveformBackgroundGradient: undefined,\n\t\t} );\n\t}\n\n\tfunction updateWaveformBackgroundGradient( gradientValue ) {\n\t\tconst isSettingGradient = gradientValue !== undefined;\n\t\tif (\n\t\t\t! isSettingGradient &&\n\t\t\twaveformBackgroundColorGradientChange === 'color'\n\t\t) {\n\t\t\twaveformBackgroundColorGradientChange = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\twaveformBackgroundColorGradientChange = 'gradient';\n\n\t\tsetAttributes( {\n\t\t\twaveformBackgroundGradient: gradientValue,\n\t\t\twaveformBackgroundColor: undefined,\n\t\t} );\n\t}\n\n\tconst colorSettings = [];\n\tif ( hasColors || hasGradients ) {\n\t\tcolorSettings.push(\n\t\t\t{\n\t\t\t\tcolorValue: hasColors ? waveformColor : undefined,\n\t\t\t\tgradientValue: hasGradients ? waveformGradientValue : undefined,\n\t\t\t\tlabel: __( 'Waveform & Play button' ),\n\t\t\t\tonColorChange: hasColors ? updateWaveformColor : undefined,\n\t\t\t\tonGradientChange: hasGradients\n\t\t\t\t\t? updateWaveformGradient\n\t\t\t\t\t: undefined,\n\t\t\t\tisShownByDefault: true,\n\t\t\t\tclearable: true,\n\t\t\t\tenableAlpha: true,\n\t\t\t\tresetAllFilter: () => ( {\n\t\t\t\t\twaveformColor: undefined,\n\t\t\t\t\twaveformGradient: undefined,\n\t\t\t\t} ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tcolorValue: hasColors ? waveformBackgroundColor : undefined,\n\t\t\t\tgradientValue: hasGradients\n\t\t\t\t\t? waveformBackgroundGradientValue\n\t\t\t\t\t: undefined,\n\t\t\t\tlabel: __( 'Waveform background' ),\n\t\t\t\tonColorChange: hasColors\n\t\t\t\t\t? updateWaveformBackgroundColor\n\t\t\t\t\t: undefined,\n\t\t\t\tonGradientChange: hasGradients\n\t\t\t\t\t? updateWaveformBackgroundGradient\n\t\t\t\t\t: undefined,\n\t\t\t\tisShownByDefault: true,\n\t\t\t\tclearable: true,\n\t\t\t\tenableAlpha: true,\n\t\t\t\tresetAllFilter: () => ( {\n\t\t\t\t\twaveformBackgroundColor: undefined,\n\t\t\t\t\twaveformBackgroundGradient: undefined,\n\t\t\t\t} ),\n\t\t\t}\n\t\t);\n\t}\n\n\tconst { children: innerBlocks, ...trackListProps } = useInnerBlocksProps(\n\t\t{\n\t\t\tclassName: clsx( 'wp-block-playlist__tracklist', {\n\t\t\t\t'wp-block-playlist__tracklist-is-hidden': ! showTracklist,\n\t\t\t\t'wp-block-playlist__tracklist-show-numbers': showNumbers,\n\t\t\t\t'wp-block-playlist__tracklist-length-is-hidden':\n\t\t\t\t\t! showTrackLength,\n\t\t\t} ),\n\t\t},\n\t\t{\n\t\t\t__experimentalAppenderTagName: 'li',\n\t\t\trenderAppender: false,\n\t\t}\n\t);\n\n\tif ( tracks.length === 0 ) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\t{ ...blockProps }\n\t\t\t\tclassName={ clsx( 'is-placeholder', blockProps.className ) }\n\t\t\t>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tlabels={ {\n\t\t\t\t\t\ttitle: __( 'Playlist' ),\n\t\t\t\t\t\tinstructions: __(\n\t\t\t\t\t\t\t'Upload an audio file or pick one from your media library.'\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t\tonSelect={ onSelectTracks }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmultiple=\"add\"\n\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls group=\"other\">\n\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\tname={ __( 'Add track' ) }\n\t\t\t\t\tonSelect={ onAddTracks }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmultiple=\"add\"\n\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tresetAll={ () => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tshowTracklist: true,\n\t\t\t\t\t\t\tshowArtists: true,\n\t\t\t\t\t\t\tshowNumbers: true,\n\t\t\t\t\t\t\tshowTrackLength: true,\n\t\t\t\t\t\t\tshowImages: true,\n\t\t\t\t\t\t\tshowPlayButtonArtwork: false,\n\t\t\t\t\t\t\torder: 'asc',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show tracklist' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => showTracklist !== true }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showTracklist: true } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show tracklist' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'showTracklist' ) }\n\t\t\t\t\t\t\tchecked={ showTracklist }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t{ showTracklist && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tlabel={ __( 'Show artist name in tracklist' ) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\thasValue={ () => showArtists !== true }\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { showArtists: true } )\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<ToggleControl\n\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t'Show artist name in tracklist'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tonChange={ toggleAttribute(\n\t\t\t\t\t\t\t\t\t\t'showArtists'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tchecked={ showArtists }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t'Show track numbers in tracklist'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\thasValue={ () => showNumbers !== true }\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { showNumbers: true } )\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<ToggleControl\n\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t'Show track numbers in tracklist'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tonChange={ toggleAttribute(\n\t\t\t\t\t\t\t\t\t\t'showNumbers'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tchecked={ showNumbers }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t'Show track duration in tracklist'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\thasValue={ () => showTrackLength !== true }\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { showTrackLength: true } )\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<ToggleControl\n\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t'Show track duration in tracklist'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tonChange={ toggleAttribute(\n\t\t\t\t\t\t\t\t\t\t'showTrackLength'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tchecked={ showTrackLength }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show tracklist images' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => showImages !== true }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showImages: true } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show tracklist images' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'showImages' ) }\n\t\t\t\t\t\t\tchecked={ showImages }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show track image on play button' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => showPlayButtonArtwork === true }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showPlayButtonArtwork: false } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show track image on play button' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute(\n\t\t\t\t\t\t\t\t'showPlayButtonArtwork'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tchecked={ showPlayButtonArtwork === true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Order' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => order !== 'asc' }\n\t\t\t\t\t\tonDeselect={ () => setAttributes( { order: 'asc' } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\tlabel={ __( 'Order' ) }\n\t\t\t\t\t\t\tvalue={ order }\n\t\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t\t{ label: __( 'Descending' ), value: 'desc' },\n\t\t\t\t\t\t\t\t{ label: __( 'Ascending' ), value: 'asc' },\n\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\tonChange={ ( value ) => onChangeOrder( value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"styles\">\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Waveform' ) }\n\t\t\t\t\tresetAll={ () => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\twaveformStyle: undefined,\n\t\t\t\t\t\t\twaveformColor: undefined,\n\t\t\t\t\t\t\twaveformGradient: undefined,\n\t\t\t\t\t\t\twaveformBackgroundColor: undefined,\n\t\t\t\t\t\t\twaveformBackgroundGradient: undefined,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tpanelId={ waveformPanelId }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t{ colorSettings.length > 0 && (\n\t\t\t\t\t\t<div className=\"wp-block-playlist__waveform-color-controls\">\n\t\t\t\t\t\t\t<ColorGradientSettingsDropdown\n\t\t\t\t\t\t\t\t__experimentalIsRenderedInSidebar\n\t\t\t\t\t\t\t\tsettings={ colorSettings }\n\t\t\t\t\t\t\t\tpanelId={ waveformPanelId }\n\t\t\t\t\t\t\t\t{ ...colorGradientSettings }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Shape' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\twaveformStyle !== DEFAULT_WAVEFORM_STYLE\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tonChangeWaveformStyle( DEFAULT_WAVEFORM_STYLE )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpanelId={ waveformPanelId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\tlabel={ __( 'Shape' ) }\n\t\t\t\t\t\t\tvalue={ waveformStyle }\n\t\t\t\t\t\t\toptions={ WAVEFORM_STYLE_OPTIONS }\n\t\t\t\t\t\t\tonChange={ onChangeWaveformStyle }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<figure { ...blockProps }>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\tonSelect={ onAddTracks }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmultiple=\"add\"\n\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\tdisableMediaButtons\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t\t<Disabled isDisabled={ ! isSelected }>\n\t\t\t\t\t<WaveformPlayer\n\t\t\t\t\t\tsrc={ currentTrackData?.src }\n\t\t\t\t\t\ttitle={ currentTrackData?.title }\n\t\t\t\t\t\tartist={ currentTrackData?.artist }\n\t\t\t\t\t\timage={ currentTrackData?.image }\n\t\t\t\t\t\timageAlt={ currentTrackData?.imageAlt }\n\t\t\t\t\t\twaveformStyle={ waveformStyle }\n\t\t\t\t\t\tcolor={ waveformColor }\n\t\t\t\t\t\tgradient={ waveformGradientValue }\n\t\t\t\t\t\tbackgroundColor={ waveformBackgroundColor }\n\t\t\t\t\t\tbackgroundGradient={ waveformBackgroundGradientValue }\n\t\t\t\t\t\tonEnded={ onTrackEnded }\n\t\t\t\t\t\tshowPlayButtonArtwork={ showPlayButtonArtwork === true }\n\t\t\t\t\t/>\n\t\t\t\t</Disabled>\n\t\t\t\t<ol { ...trackListProps }>\n\t\t\t\t\t<PlaylistContext.Provider value={ playlistContext }>\n\t\t\t\t\t\t{ innerBlocks }\n\t\t\t\t\t</PlaylistContext.Provider>\n\t\t\t\t</ol>\n\t\t\t\t<Caption\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tlabel={ __( 'Playlist caption text' ) }\n\t\t\t\t\tshowToolbarButton={ isSelected }\n\t\t\t\t\tstyle={ { marginTop: 16 } }\n\t\t\t\t/>\n\t\t\t</figure>\n\t\t</>\n\t);\n};\n\nexport default PlaylistEdit;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,qBAA0D;AAC1D,0BAWO;AACP,wBAMO;AACP,kBAAuC;AACvC,qBAAsC;AACtC,kBAAuB;AACvB,mBAAiC;AACjC,oBAA4B;AAC5B,kBAA8B;AAC9B,qBAAwB;AACxB,mBAA+C;AAC/C,6BAA+B;AAC/B,qBAAgC;AAChC,mBAAmC;AAgdvB;AA9cZ,IAAM,sBAAsB,CAAE,OAAQ;AACtC,IAAM,uBACL;AACD,IAAM,yBAAyB;AAC/B,IAAM,wBAAwB;AAC9B,IAAM,yBAAyB;AAAA,EAC9B,EAAE,WAAO,gBAAI,QAAQ,uBAAwB,GAAG,OAAO,OAAO;AAAA,EAC9D,EAAE,WAAO,gBAAI,UAAU,uBAAwB,GAAG,OAAO,SAAS;AAAA,EAClE,EAAE,WAAO,gBAAI,QAAQ,uBAAwB,GAAG,OAAO,OAAO;AAAA,EAC9D,EAAE,WAAO,gBAAI,UAAU,uBAAwB,GAAG,OAAO,SAAS;AAAA,EAClE,EAAE,WAAO,gBAAI,QAAQ,uBAAwB,GAAG,OAAO,OAAO;AAAA,EAC9D,EAAE,WAAO,gBAAI,WAAW,uBAAwB,GAAG,OAAO,UAAU;AACrE;AAEA,SAAS,OAAQ,OAAQ;AACxB,SACC,OAAO,UAAU,SAAS,KAAM,KAAM,MAAM,mBAC1C,OAAO,SAAS,eAAe,iBAAiB;AAEpD;AAEA,SAAS,YAAa,MAAO;AAC5B,SAAO,KAAK,OACT,KAAK,KAAK,WAAY,QAAS,IAC/B,qBAAqB,KAAM,KAAK,IAAK;AACzC;AAEA,SAAS,mBAAoB,OAAQ;AACpC,SAAO,MAAM,MAAM,MAAM,OAAO,MAAM;AACvC;AAEA,IAAM,eAAe,CAAE;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,MAAO;AACN,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI;AAEJ,QAAM,iBAAa,mCAAc;AACjC,QAAM,kBAAkB,GAAI,QAAS;AACrC,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,QAAI,yBAAa,oBAAAA,KAAiB;AAClC,QAAM,EAAE,kBAAkB,QAAI,yBAAa,eAAAC,KAAa;AACxD,QAAM,wBAAoB,6CAA+B;AACzD,QAAM,4BAAwB,oBAAAC,mDAAoC;AAClE,QAAM,aAAS;AAAA,IACd,MACC,sBAAsB,OAAO;AAAA,MAC5B,CAAE,WAAY,QAAQ,UAAU,CAAC;AAAA,IAClC;AAAA,IACD,CAAE,sBAAsB,MAAO;AAAA,EAChC;AACA,QAAM,gBAAY;AAAA,IACjB,MACC,sBAAsB,UAAU;AAAA,MAC/B,CAAE,WAAY,QAAQ,aAAa,CAAC;AAAA,IACrC;AAAA,IACD,CAAE,sBAAsB,SAAU;AAAA,EACnC;AACA,QAAM,YACL,OAAO,SAAS,KAAK,CAAE,sBAAsB;AAC9C,QAAM,eACL,UAAU,SAAS,KAAK,CAAE,sBAAsB;AACjD,QAAM,wBAAwB;AAC9B,QAAM,kCAAkC;AACxC,MAAI;AACJ,MAAI;AACJ,QAAM,oBAAgB;AAAA,IACrB,CAAE,YAAa;AACd,wBAAmB,SAAS,EAAE,MAAM,WAAW,CAAE;AAAA,IAClD;AAAA,IACA,CAAE,iBAAkB;AAAA,EACrB;AACA,QAAM,CAAE,sBAAsB,uBAAwB,QAAI,yBAAU,IAAK;AAEzE,QAAM,EAAE,iBAAiB,QAAI;AAAA,IAC5B,CAAE,WAAY;AACb,YAAM,EAAE,UAAU,UAAU,IAAI,OAAQ,oBAAAF,KAAiB;AACzD,aAAO;AAAA,QACN,kBAAkB,UAAW,QAAS,GAAG,eAAe,CAAC;AAAA,MAC1D;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAIA,QAAM,kBAAc;AAAA,IACnB,MACC,iBAAiB;AAAA,MAChB,CAAE,UAAW,CAAC,CAAE,MAAM,WAAW,OAAO,CAAC,CAAE,MAAM,WAAW;AAAA,IAC7D;AAAA,IACD,CAAE,gBAAiB;AAAA,EACpB;AACA,QAAM,aAAS;AAAA,IACd,MACC,YAAY,IAAK,CAAE,WAAa;AAAA,MAC/B,GAAG,MAAM;AAAA,MACT,UAAU,MAAM;AAAA,IACjB,EAAI;AAAA,IACL,CAAE,WAAY;AAAA,EACf;AAEA,gCAAW,MAAM;AAChB,QAAK,YAAY,WAAW,GAAI;AAC/B,UAAK,yBAAyB,MAAO;AACpC,gCAAyB,IAAK;AAAA,MAC/B;AACA;AAAA,IACD;AAEA,UAAM,qBAAqB,YAAY;AAAA,MACtC,CAAE,UAAW,MAAM,aAAa;AAAA,IACjC;AACA,QAAK,CAAE,oBAAqB;AAC3B,8BAAyB,YAAa,CAAE,EAAE,QAAS;AAAA,IACpD;AAAA,EACD,GAAG,CAAE,sBAAsB,yBAAyB,WAAY,CAAE;AAGlE,gCAAW,MAAM;AAChB,QAAK,YAAY,SAAS,KAAK,iBAAiB,WAAW,GAAI;AAC9D;AAAA,IACD;AAGA,4CAAwC;AACxC,uBAAoB,UAAU,CAAC,CAAE;AAAA,EAClC,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AAEF,QAAM,wBAAoB;AAAA,IACzB,CAAE,UAAW;AACZ,UAAK,CAAE,OAAQ;AACd,eAAO,CAAC;AAAA,MACT;AAEA,UAAI,aAAa,CAAE,KAAM;AACzB,UACC,OAAO,UAAU,SAAS,KAAM,KAAM,MACtC,uBACC;AACD,qBAAa,MAAM,KAAM,KAAM;AAAA,MAChC,WAAY,MAAM,QAAS,KAAM,GAAI;AACpC,qBAAa;AAAA,MACd;AACA,UAAI,iBAAiB;AAErB,YAAM,SAAS,WACb,IAAK,CAAE,cAAe;AACtB,YAAK,OAAQ,SAAU,GAAI;AAC1B,cAAK,CAAE,YAAa,SAAU,GAAI;AACjC,6BAAiB;AACjB,mBAAO;AAAA,UACR;AAEA,qBAAO,2BAAa,uBAAuB;AAAA,YAC1C,UAAM,2BAAe,SAAU;AAAA,YAC/B,OAAO,UAAU;AAAA,UAClB,CAAE;AAAA,QACH;AAEA,cAAM,YAAQ,iCAAoB,SAAU;AAE5C,eAAO,MAAM,UACV,2BAAa,uBAAuB,KAAM,IAC1C;AAAA,MACJ,CAAE,EACD,OAAQ,OAAQ;AAElB,UAAK,gBAAiB;AACrB;AAAA,cACC,gBAAI,8CAA+C;AAAA,QACpD;AAAA,MACD;AAEA,aAAO;AAAA,IACR;AAAA,IACA,CAAE,aAAc;AAAA,EACjB;AAEA,QAAM,qBAAiB;AAAA,IACtB,CAAE,UAAW;AACZ,YAAM,YAAY,kBAAmB,KAAM;AAC3C,UAAK,UAAU,WAAW,GAAI;AAC7B;AAAA,MACD;AAEA,8BAAyB,UAAW,CAAE,GAAG,YAAY,IAAK;AAE1D,yBAAoB,UAAU,SAAU;AAAA,IACzC;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,QAAM,kBAAc;AAAA,IACnB,CAAE,UAAW;AACZ,YAAM,cAAc,IAAI;AAAA,QACvB,YACE,IAAK,CAAE,UAAW,mBAAoB,MAAM,UAAW,CAAE,EACzD,OAAQ,OAAQ;AAAA,MACnB;AACA,YAAM,YAAY,kBAAmB,KAAM,EAAE;AAAA,QAC5C,CAAE,UACD,CAAE,YAAY,IAAK,mBAAoB,MAAM,UAAW,CAAE;AAAA,MAC5D;AACA,UAAK,UAAU,WAAW,GAAI;AAC7B;AAAA,MACD;AAEA,8BAAyB,UAAW,CAAE,EAAE,QAAS;AACjD,mBAAc,WAAW,QAAW,UAAU,KAAM;AACpD,kBAAa,UAAW,CAAE,EAAE,QAAS;AAAA,IACtC;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,QAAM,kBAAc;AAAA,IACnB,CAAE,kBAAmB;AAGpB,oBAAe,eAAe,CAAC,CAAE;AAAA,IAClC;AAAA,IACA,CAAE,aAAc;AAAA,EACjB;AAEA,QAAM,sBAAkB;AAAA,IACvB,OAAQ;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,CAAE,sBAAsB,yBAAyB,WAAY;AAAA,EAC9D;AAGA,QAAM,mBACL,OAAO,KAAM,CAAE,UAAW,MAAM,aAAa,oBAAqB,KAClE,OAAQ,CAAE;AAGX,QAAM,mBAAe,4BAAa,MAAM;AACvC,UAAM,eAAe,OAAO;AAAA,MAC3B,CAAE,UAAW,MAAM,aAAa;AAAA,IACjC;AACA,UAAM,YAAY,OAAQ,eAAe,CAAE,KAAK,OAAQ,CAAE;AAC1D,QAAK,WAAW,UAAW;AAC1B,8BAAyB,UAAU,QAAS;AAAA,IAC7C;AAAA,EACD,GAAG,CAAE,sBAAsB,yBAAyB,MAAO,CAAE;AAE7D,QAAM,oBAAgB;AAAA,IACrB,CAAE,eAAgB;AACjB,YAAM,eAAe,CAAE,GAAG,gBAAiB,EAAE,KAAM,CAAE,GAAG,MAAO;AAC9D,cAAM,SAAS,EAAE,WAAW,SAAS;AACrC,cAAM,SAAS,EAAE,WAAW,SAAS;AAErC,YAAK,eAAe,OAAQ;AAC3B,iBAAO,OAAO,cAAe,MAAO;AAAA,QACrC;AACA,eAAO,OAAO,cAAe,MAAO;AAAA,MACrC,CAAE;AACF,yBAAoB,UAAU,YAAa;AAC3C,8BAAyB,aAAc,CAAE,GAAG,YAAY,IAAK;AAC7D,oBAAe;AAAA,QACd,OAAO;AAAA,MACR,CAAE;AAAA,IACH;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,WAAS,gBAAiB,WAAY;AACrC,WAAO,CAAE,aAAc;AACtB,oBAAe,EAAE,CAAE,SAAU,GAAG,SAAS,CAAE;AAAA,IAC5C;AAAA,EACD;AAEA,QAAM,4BAAwB;AAAA,IAC7B,CAAE,qBAAsB;AACvB,oBAAe;AAAA,QACd,eACC,qBAAqB,yBAClB,SACA;AAAA,MACL,CAAE;AAAA,IACH;AAAA,IACA,CAAE,aAAc;AAAA,EACjB;AAEA,WAAS,oBAAqB,YAAa;AAC1C,UAAM,iBAAiB,eAAe;AACtC,QAAK,CAAE,kBAAkB,gCAAgC,YAAa;AACrE,oCAA8B;AAC9B;AAAA,IACD;AAEA,kCAA8B;AAE9B,kBAAe;AAAA,MACd,eAAe;AAAA,MACf,kBAAkB;AAAA,IACnB,CAAE;AAAA,EACH;AAEA,WAAS,uBAAwB,eAAgB;AAChD,UAAM,oBAAoB,kBAAkB;AAC5C,QAAK,CAAE,qBAAqB,gCAAgC,SAAU;AACrE,oCAA8B;AAC9B;AAAA,IACD;AAEA,kCAA8B;AAE9B,kBAAe;AAAA,MACd,kBAAkB;AAAA,MAClB,eAAe;AAAA,IAChB,CAAE;AAAA,EACH;AAEA,WAAS,8BAA+B,YAAa;AACpD,UAAM,iBAAiB,eAAe;AACtC,QACC,CAAE,kBACF,0CAA0C,YACzC;AACD,8CAAwC;AACxC;AAAA,IACD;AAEA,4CAAwC;AAExC,kBAAe;AAAA,MACd,yBAAyB;AAAA,MACzB,4BAA4B;AAAA,IAC7B,CAAE;AAAA,EACH;AAEA,WAAS,iCAAkC,eAAgB;AAC1D,UAAM,oBAAoB,kBAAkB;AAC5C,QACC,CAAE,qBACF,0CAA0C,SACzC;AACD,8CAAwC;AACxC;AAAA,IACD;AAEA,4CAAwC;AAExC,kBAAe;AAAA,MACd,4BAA4B;AAAA,MAC5B,yBAAyB;AAAA,IAC1B,CAAE;AAAA,EACH;AAEA,QAAM,gBAAgB,CAAC;AACvB,MAAK,aAAa,cAAe;AAChC,kBAAc;AAAA,MACb;AAAA,QACC,YAAY,YAAY,gBAAgB;AAAA,QACxC,eAAe,eAAe,wBAAwB;AAAA,QACtD,WAAO,gBAAI,wBAAyB;AAAA,QACpC,eAAe,YAAY,sBAAsB;AAAA,QACjD,kBAAkB,eACf,yBACA;AAAA,QACH,kBAAkB;AAAA,QAClB,WAAW;AAAA,QACX,aAAa;AAAA,QACb,gBAAgB,OAAQ;AAAA,UACvB,eAAe;AAAA,UACf,kBAAkB;AAAA,QACnB;AAAA,MACD;AAAA,MACA;AAAA,QACC,YAAY,YAAY,0BAA0B;AAAA,QAClD,eAAe,eACZ,kCACA;AAAA,QACH,WAAO,gBAAI,qBAAsB;AAAA,QACjC,eAAe,YACZ,gCACA;AAAA,QACH,kBAAkB,eACf,mCACA;AAAA,QACH,kBAAkB;AAAA,QAClB,WAAW;AAAA,QACX,aAAa;AAAA,QACb,gBAAgB,OAAQ;AAAA,UACvB,yBAAyB;AAAA,UACzB,4BAA4B;AAAA,QAC7B;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,QAAM,EAAE,UAAU,aAAa,GAAG,eAAe,QAAI;AAAA,IACpD;AAAA,MACC,eAAW,YAAAG,SAAM,gCAAgC;AAAA,QAChD,0CAA0C,CAAE;AAAA,QAC5C,6CAA6C;AAAA,QAC7C,iDACC,CAAE;AAAA,MACJ,CAAE;AAAA,IACH;AAAA,IACA;AAAA,MACC,+BAA+B;AAAA,MAC/B,gBAAgB;AAAA,IACjB;AAAA,EACD;AAEA,MAAK,OAAO,WAAW,GAAI;AAC1B,WACC;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACL,eAAY,YAAAA,SAAM,kBAAkB,WAAW,SAAU;AAAA,QAEzD;AAAA,UAAC;AAAA;AAAA,YACA,MAAO,4CAAC,iCAAU,MAAO,aAAAC,UAAO;AAAA,YAChC,QAAS;AAAA,cACR,WAAO,gBAAI,UAAW;AAAA,cACtB,kBAAc;AAAA,gBACb;AAAA,cACD;AAAA,YACD;AAAA,YACA,UAAW;AAAA,YACX,QAAO;AAAA,YACP,UAAS;AAAA,YACT,cAAe;AAAA,YACf,cAAe;AAAA,YACf,SAAU;AAAA;AAAA,QACX;AAAA;AAAA,IACD;AAAA,EAEF;AAEA,SACC,4EACC;AAAA,gDAAC,qCAAc,OAAM,SACpB;AAAA,MAAC;AAAA;AAAA,QACA,UAAO,gBAAI,WAAY;AAAA,QACvB,UAAW;AAAA,QACX,QAAO;AAAA,QACP,UAAS;AAAA,QACT,cAAe;AAAA,QACf,cAAe;AAAA,QACf,SAAU;AAAA;AAAA,IACX,GACD;AAAA,IACA,4CAAC,yCACA;AAAA,MAAC,kBAAAC;AAAA,MAAA;AAAA,QACA,WAAQ,gBAAI,UAAW;AAAA,QACvB,UAAW,MAAM;AAChB,wBAAe;AAAA,YACd,eAAe;AAAA,YACf,aAAa;AAAA,YACb,aAAa;AAAA,YACb,iBAAiB;AAAA,YACjB,YAAY;AAAA,YACZ,uBAAuB;AAAA,YACvB,OAAO;AAAA,UACR,CAAE;AAAA,QACH;AAAA,QACA;AAAA,QAEA;AAAA;AAAA,YAAC,kBAAAC;AAAA,YAAA;AAAA,cACA,WAAQ,gBAAI,gBAAiB;AAAA,cAC7B,kBAAgB;AAAA,cAChB,UAAW,MAAM,kBAAkB;AAAA,cACnC,YAAa,MACZ,cAAe,EAAE,eAAe,KAAK,CAAE;AAAA,cAGxC;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAQ,gBAAI,gBAAiB;AAAA,kBAC7B,UAAW,gBAAiB,eAAgB;AAAA,kBAC5C,SAAU;AAAA;AAAA,cACX;AAAA;AAAA,UACD;AAAA,UACE,iBACD,4EACC;AAAA;AAAA,cAAC,kBAAAA;AAAA,cAAA;AAAA,gBACA,WAAQ,gBAAI,+BAAgC;AAAA,gBAC5C,kBAAgB;AAAA,gBAChB,UAAW,MAAM,gBAAgB;AAAA,gBACjC,YAAa,MACZ,cAAe,EAAE,aAAa,KAAK,CAAE;AAAA,gBAGtC;AAAA,kBAAC;AAAA;AAAA,oBACA,WAAQ;AAAA,sBACP;AAAA,oBACD;AAAA,oBACA,UAAW;AAAA,sBACV;AAAA,oBACD;AAAA,oBACA,SAAU;AAAA;AAAA,gBACX;AAAA;AAAA,YACD;AAAA,YACA;AAAA,cAAC,kBAAAA;AAAA,cAAA;AAAA,gBACA,WAAQ;AAAA,kBACP;AAAA,gBACD;AAAA,gBACA,kBAAgB;AAAA,gBAChB,UAAW,MAAM,gBAAgB;AAAA,gBACjC,YAAa,MACZ,cAAe,EAAE,aAAa,KAAK,CAAE;AAAA,gBAGtC;AAAA,kBAAC;AAAA;AAAA,oBACA,WAAQ;AAAA,sBACP;AAAA,oBACD;AAAA,oBACA,UAAW;AAAA,sBACV;AAAA,oBACD;AAAA,oBACA,SAAU;AAAA;AAAA,gBACX;AAAA;AAAA,YACD;AAAA,YACA;AAAA,cAAC,kBAAAA;AAAA,cAAA;AAAA,gBACA,WAAQ;AAAA,kBACP;AAAA,gBACD;AAAA,gBACA,kBAAgB;AAAA,gBAChB,UAAW,MAAM,oBAAoB;AAAA,gBACrC,YAAa,MACZ,cAAe,EAAE,iBAAiB,KAAK,CAAE;AAAA,gBAG1C;AAAA,kBAAC;AAAA;AAAA,oBACA,WAAQ;AAAA,sBACP;AAAA,oBACD;AAAA,oBACA,UAAW;AAAA,sBACV;AAAA,oBACD;AAAA,oBACA,SAAU;AAAA;AAAA,gBACX;AAAA;AAAA,YACD;AAAA,aACD;AAAA,UAED;AAAA,YAAC,kBAAAA;AAAA,YAAA;AAAA,cACA,WAAQ,gBAAI,uBAAwB;AAAA,cACpC,kBAAgB;AAAA,cAChB,UAAW,MAAM,eAAe;AAAA,cAChC,YAAa,MACZ,cAAe,EAAE,YAAY,KAAK,CAAE;AAAA,cAGrC;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAQ,gBAAI,uBAAwB;AAAA,kBACpC,UAAW,gBAAiB,YAAa;AAAA,kBACzC,SAAU;AAAA;AAAA,cACX;AAAA;AAAA,UACD;AAAA,UACA;AAAA,YAAC,kBAAAA;AAAA,YAAA;AAAA,cACA,WAAQ,gBAAI,iCAAkC;AAAA,cAC9C,kBAAgB;AAAA,cAChB,UAAW,MAAM,0BAA0B;AAAA,cAC3C,YAAa,MACZ,cAAe,EAAE,uBAAuB,MAAM,CAAE;AAAA,cAGjD;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAQ,gBAAI,iCAAkC;AAAA,kBAC9C,UAAW;AAAA,oBACV;AAAA,kBACD;AAAA,kBACA,SAAU,0BAA0B;AAAA;AAAA,cACrC;AAAA;AAAA,UACD;AAAA,UACA;AAAA,YAAC,kBAAAA;AAAA,YAAA;AAAA,cACA,WAAQ,gBAAI,OAAQ;AAAA,cACpB,kBAAgB;AAAA,cAChB,UAAW,MAAM,UAAU;AAAA,cAC3B,YAAa,MAAM,cAAe,EAAE,OAAO,MAAM,CAAE;AAAA,cAEnD;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAQ,gBAAI,OAAQ;AAAA,kBACpB,OAAQ;AAAA,kBACR,SAAU;AAAA,oBACT,EAAE,WAAO,gBAAI,YAAa,GAAG,OAAO,OAAO;AAAA,oBAC3C,EAAE,WAAO,gBAAI,WAAY,GAAG,OAAO,MAAM;AAAA,kBAC1C;AAAA,kBACA,UAAW,CAAE,UAAW,cAAe,KAAM;AAAA;AAAA,cAC9C;AAAA;AAAA,UACD;AAAA;AAAA;AAAA,IACD,GACD;AAAA,IACA,4CAAC,yCAAkB,OAAM,UACxB;AAAA,MAAC,kBAAAD;AAAA,MAAA;AAAA,QACA,WAAQ,gBAAI,UAAW;AAAA,QACvB,UAAW,MAAM;AAChB,wBAAe;AAAA,YACd,eAAe;AAAA,YACf,eAAe;AAAA,YACf,kBAAkB;AAAA,YAClB,yBAAyB;AAAA,YACzB,4BAA4B;AAAA,UAC7B,CAAE;AAAA,QACH;AAAA,QACA,SAAU;AAAA,QACV;AAAA,QAEE;AAAA,wBAAc,SAAS,KACxB,4CAAC,SAAI,WAAU,8CACd;AAAA,YAAC,oBAAAE;AAAA,YAAA;AAAA,cACA,mCAAiC;AAAA,cACjC,UAAW;AAAA,cACX,SAAU;AAAA,cACR,GAAG;AAAA;AAAA,UACN,GACD;AAAA,UAED;AAAA,YAAC,kBAAAD;AAAA,YAAA;AAAA,cACA,WAAQ,gBAAI,OAAQ;AAAA,cACpB,kBAAgB;AAAA,cAChB,UAAW,MACV,kBAAkB;AAAA,cAEnB,YAAa,MACZ,sBAAuB,sBAAuB;AAAA,cAE/C,SAAU;AAAA,cAEV;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAQ,gBAAI,OAAQ;AAAA,kBACpB,OAAQ;AAAA,kBACR,SAAU;AAAA,kBACV,UAAW;AAAA;AAAA,cACZ;AAAA;AAAA,UACD;AAAA;AAAA;AAAA,IACD,GACD;AAAA,IACA,6CAAC,YAAS,GAAG,YACZ;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,UAAW;AAAA,UACX,QAAO;AAAA,UACP,UAAS;AAAA,UACT,cAAe;AAAA,UACf,qBAAmB;AAAA,UACnB,cAAe;AAAA,UACf,SAAU;AAAA;AAAA,MACX;AAAA,MACA,4CAAC,8BAAS,YAAa,CAAE,YACxB;AAAA,QAAC;AAAA;AAAA,UACA,KAAM,kBAAkB;AAAA,UACxB,OAAQ,kBAAkB;AAAA,UAC1B,QAAS,kBAAkB;AAAA,UAC3B,OAAQ,kBAAkB;AAAA,UAC1B,UAAW,kBAAkB;AAAA,UAC7B;AAAA,UACA,OAAQ;AAAA,UACR,UAAW;AAAA,UACX,iBAAkB;AAAA,UAClB,oBAAqB;AAAA,UACrB,SAAU;AAAA,UACV,uBAAwB,0BAA0B;AAAA;AAAA,MACnD,GACD;AAAA,MACA,4CAAC,QAAK,GAAG,gBACR,sDAAC,+BAAgB,UAAhB,EAAyB,OAAQ,iBAC/B,uBACH,GACD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAQ,gBAAI,uBAAwB;AAAA,UACpC,mBAAoB;AAAA,UACpB,OAAQ,EAAE,WAAW,GAAG;AAAA;AAAA,MACzB;AAAA,OACD;AAAA,KACD;AAEF;AAEA,IAAO,eAAQ;",
6
- "names": ["blockEditorStore", "noticesStore", "useMultipleOriginColorsAndGradients", "clsx", "icon", "ToolsPanel", "ToolsPanelItem", "ColorGradientSettingsDropdown"]
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { useCallback, useEffect, useMemo, useState } from '@wordpress/element';\nimport {\n\tstore as blockEditorStore,\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tBlockIcon,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tBlockControls,\n\tInspectorControls,\n\t__experimentalColorGradientSettingsDropdown as ColorGradientSettingsDropdown,\n\t__experimentalUseMultipleOriginColorsAndGradients as useMultipleOriginColorsAndGradients,\n} from '@wordpress/block-editor';\nimport {\n\tToggleControl,\n\tDisabled,\n\tSelectControl as WCSelectControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __, _x } from '@wordpress/i18n';\nimport { playlist as icon } from '@wordpress/icons';\nimport { createBlock } from '@wordpress/blocks';\nimport { createBlobURL } from '@wordpress/blob';\nimport { Caption } from '../utils/caption';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\nimport { WaveformPlayer } from '../utils/waveform-player';\nimport { PlaylistContext } from './context';\nimport { getTrackAttributes } from './utils';\n\nconst ALLOWED_MEDIA_TYPES = [ 'audio' ];\nconst EMPTY_ARRAY = [];\nconst AUDIO_FILE_EXTENSION =\n\t/\\.(aac|aif|aiff|flac|m4a|m4b|mp3|oga|ogg|opus|wav|weba)$/i;\nconst DEFAULT_WAVEFORM_STYLE = 'bars';\nconst FILE_LIST_OBJECT_NAME = '[object FileList]';\nconst WAVEFORM_STYLE_OPTIONS = [\n\t{ label: _x( 'Bars', 'waveform style option' ), value: 'bars' },\n\t{ label: _x( 'Mirror', 'waveform style option' ), value: 'mirror' },\n\t{ label: _x( 'Line', 'waveform style option' ), value: 'line' },\n\t{ label: _x( 'Blocks', 'waveform style option' ), value: 'blocks' },\n\t{ label: _x( 'Dots', 'waveform style option' ), value: 'dots' },\n\t{ label: _x( 'Seekbar', 'waveform style option' ), value: 'seekbar' },\n];\n\nfunction isFile( value ) {\n\treturn (\n\t\tObject.prototype.toString.call( value ) === '[object File]' ||\n\t\t( typeof File !== 'undefined' && value instanceof File )\n\t);\n}\n\nfunction isAudioFile( file ) {\n\treturn file.type\n\t\t? file.type.startsWith( 'audio/' )\n\t\t: AUDIO_FILE_EXTENSION.test( file.name );\n}\n\nfunction getTrackIdentifier( track ) {\n\treturn track.id ?? track.src ?? track.blob;\n}\n\nconst PlaylistEdit = ( {\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tclientId,\n} ) => {\n\tconst {\n\t\torder,\n\t\tshowTracklist,\n\t\tshowNumbers,\n\t\tshowImages,\n\t\tshowPlayButtonArtwork,\n\t\tshowArtists,\n\t\tshowTrackLength,\n\t\twaveformStyle = DEFAULT_WAVEFORM_STYLE,\n\t\twaveformColor,\n\t\twaveformGradient,\n\t\twaveformBackgroundColor,\n\t\twaveformBackgroundGradient,\n\t} = attributes;\n\n\tconst blockProps = useBlockProps();\n\tconst waveformPanelId = `${ clientId }-waveform`;\n\tconst {\n\t\treplaceInnerBlocks,\n\t\treplaceBlocks,\n\t\tinsertBlocks,\n\t\tselectBlock,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst colorGradientSettings = useMultipleOriginColorsAndGradients();\n\tconst colors = useMemo(\n\t\t() =>\n\t\t\tcolorGradientSettings.colors.flatMap(\n\t\t\t\t( origin ) => origin?.colors ?? []\n\t\t\t),\n\t\t[ colorGradientSettings.colors ]\n\t);\n\tconst gradients = useMemo(\n\t\t() =>\n\t\t\tcolorGradientSettings.gradients.flatMap(\n\t\t\t\t( origin ) => origin?.gradients ?? []\n\t\t\t),\n\t\t[ colorGradientSettings.gradients ]\n\t);\n\tconst hasColors =\n\t\tcolors.length > 0 || ! colorGradientSettings.disableCustomColors;\n\tconst hasGradients =\n\t\tgradients.length > 0 || ! colorGradientSettings.disableCustomGradients;\n\tconst waveformGradientValue = waveformGradient;\n\tconst waveformBackgroundGradientValue = waveformBackgroundGradient;\n\tlet waveformColorGradientChange;\n\tlet waveformBackgroundColorGradientChange;\n\tconst onUploadError = useCallback(\n\t\t( message ) => {\n\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t},\n\t\t[ createErrorNotice ]\n\t);\n\tconst [ currentTrackClientId, setCurrentTrackClientId ] = useState( null );\n\n\tconst { innerBlockTracks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock: _getBlock } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tinnerBlockTracks:\n\t\t\t\t\t_getBlock( clientId )?.innerBlocks ?? EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t// Create a list of tracks from the inner blocks,\n\t// but skip blocks that do not have a source, such as the media placeholder.\n\tconst validTracks = useMemo(\n\t\t() =>\n\t\t\tinnerBlockTracks.filter(\n\t\t\t\t( block ) => !! block.attributes.src || !! block.attributes.blob\n\t\t\t),\n\t\t[ innerBlockTracks ]\n\t);\n\tconst tracks = useMemo(\n\t\t() =>\n\t\t\tvalidTracks.map( ( block ) => ( {\n\t\t\t\t...block.attributes,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} ) ),\n\t\t[ validTracks ]\n\t);\n\n\tuseEffect( () => {\n\t\tif ( validTracks.length === 0 ) {\n\t\t\tif ( currentTrackClientId !== null ) {\n\t\t\t\tsetCurrentTrackClientId( null );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentTrackExists = validTracks.some(\n\t\t\t( block ) => block.clientId === currentTrackClientId\n\t\t);\n\t\tif ( ! currentTrackExists ) {\n\t\t\tsetCurrentTrackClientId( validTracks[ 0 ].clientId );\n\t\t}\n\t}, [ currentTrackClientId, setCurrentTrackClientId, validTracks ] );\n\n\t// Clean up placeholder tracks when reverting back to playlist placeholder state\n\tuseEffect( () => {\n\t\tif ( validTracks.length > 0 || innerBlockTracks.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove any lingering placeholder track blocks\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\treplaceInnerBlocks( clientId, [] );\n\t}, [\n\t\tclientId,\n\t\tinnerBlockTracks,\n\t\treplaceInnerBlocks,\n\t\tvalidTracks,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t] );\n\n\tconst createTrackBlocks = useCallback(\n\t\t( media ) => {\n\t\t\tif ( ! media ) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tlet mediaItems = [ media ];\n\t\t\tif (\n\t\t\t\tObject.prototype.toString.call( media ) ===\n\t\t\t\tFILE_LIST_OBJECT_NAME\n\t\t\t) {\n\t\t\t\tmediaItems = Array.from( media );\n\t\t\t} else if ( Array.isArray( media ) ) {\n\t\t\t\tmediaItems = media;\n\t\t\t}\n\t\t\tlet hasInvalidFile = false;\n\n\t\t\tconst blocks = mediaItems\n\t\t\t\t.map( ( mediaItem ) => {\n\t\t\t\t\tif ( isFile( mediaItem ) ) {\n\t\t\t\t\t\tif ( ! isAudioFile( mediaItem ) ) {\n\t\t\t\t\t\t\thasInvalidFile = true;\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn createBlock( 'core/playlist-track', {\n\t\t\t\t\t\t\tblob: createBlobURL( mediaItem ),\n\t\t\t\t\t\t\ttitle: mediaItem.name,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\tconst track = getTrackAttributes( mediaItem );\n\n\t\t\t\t\treturn track.src\n\t\t\t\t\t\t? createBlock( 'core/playlist-track', track )\n\t\t\t\t\t\t: null;\n\t\t\t\t} )\n\t\t\t\t.filter( Boolean );\n\n\t\t\tif ( hasInvalidFile ) {\n\t\t\t\tonUploadError(\n\t\t\t\t\t__( 'Only audio files can be added to a playlist.' )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn blocks;\n\t\t},\n\t\t[ onUploadError ]\n\t);\n\n\tconst onSelectTracks = useCallback(\n\t\t( media ) => {\n\t\t\tconst newBlocks = createTrackBlocks( media );\n\t\t\tif ( newBlocks.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetCurrentTrackClientId( newBlocks[ 0 ]?.clientId ?? null );\n\t\t\t// Replace the inner blocks with the new tracks.\n\t\t\treplaceInnerBlocks( clientId, newBlocks );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tcreateTrackBlocks,\n\t\t\treplaceInnerBlocks,\n\t\t\tsetCurrentTrackClientId,\n\t\t]\n\t);\n\n\tconst onAddTracks = useCallback(\n\t\t( media ) => {\n\t\t\tconst existingIds = new Set(\n\t\t\t\tvalidTracks\n\t\t\t\t\t.map( ( block ) => getTrackIdentifier( block.attributes ) )\n\t\t\t\t\t.filter( Boolean )\n\t\t\t);\n\t\t\tconst newBlocks = createTrackBlocks( media ).filter(\n\t\t\t\t( block ) =>\n\t\t\t\t\t! existingIds.has( getTrackIdentifier( block.attributes ) )\n\t\t\t);\n\t\t\tif ( newBlocks.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetCurrentTrackClientId( newBlocks[ 0 ].clientId );\n\t\t\tinsertBlocks( newBlocks, undefined, clientId, false );\n\t\t\tselectBlock( newBlocks[ 0 ].clientId );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tcreateTrackBlocks,\n\t\t\tinsertBlocks,\n\t\t\tselectBlock,\n\t\t\tsetCurrentTrackClientId,\n\t\t\tvalidTracks,\n\t\t]\n\t);\n\n\tconst removeTrack = useCallback(\n\t\t( trackClientId ) => {\n\t\t\t// Not `removeBlock`: it removes the container along with its\n\t\t\t// last inner block, so this would take the playlist with it.\n\t\t\treplaceBlocks( trackClientId, [] );\n\t\t},\n\t\t[ replaceBlocks ]\n\t);\n\n\tconst playlistContext = useMemo(\n\t\t() => ( {\n\t\t\tcurrentTrackClientId,\n\t\t\tsetCurrentTrackClientId,\n\t\t\tremoveTrack,\n\t\t} ),\n\t\t[ currentTrackClientId, setCurrentTrackClientId, removeTrack ]\n\t);\n\n\t// Get current track data by finding the track with matching client ID.\n\tconst currentTrackData =\n\t\ttracks.find( ( track ) => track.clientId === currentTrackClientId ) ??\n\t\ttracks[ 0 ];\n\n\t// Handle track end - advance to next track or loop to first.\n\tconst onTrackEnded = useCallback( () => {\n\t\tconst currentIndex = tracks.findIndex(\n\t\t\t( track ) => track.clientId === currentTrackClientId\n\t\t);\n\t\tconst nextTrack = tracks[ currentIndex + 1 ] || tracks[ 0 ];\n\t\tif ( nextTrack?.clientId ) {\n\t\t\tsetCurrentTrackClientId( nextTrack.clientId );\n\t\t}\n\t}, [ currentTrackClientId, setCurrentTrackClientId, tracks ] );\n\n\tconst onChangeOrder = useCallback(\n\t\t( trackOrder ) => {\n\t\t\tconst sortedBlocks = [ ...innerBlockTracks ].sort( ( a, b ) => {\n\t\t\t\tconst titleA = a.attributes.title || '';\n\t\t\t\tconst titleB = b.attributes.title || '';\n\n\t\t\t\tif ( trackOrder === 'asc' ) {\n\t\t\t\t\treturn titleA.localeCompare( titleB );\n\t\t\t\t}\n\t\t\t\treturn titleB.localeCompare( titleA );\n\t\t\t} );\n\t\t\treplaceInnerBlocks( clientId, sortedBlocks );\n\t\t\tsetCurrentTrackClientId( sortedBlocks[ 0 ]?.clientId ?? null );\n\t\t\tsetAttributes( {\n\t\t\t\torder: trackOrder,\n\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tinnerBlockTracks,\n\t\t\treplaceInnerBlocks,\n\t\t\tsetAttributes,\n\t\t\tsetCurrentTrackClientId,\n\t\t]\n\t);\n\n\tfunction toggleAttribute( attribute ) {\n\t\treturn ( newValue ) => {\n\t\t\tsetAttributes( { [ attribute ]: newValue } );\n\t\t};\n\t}\n\n\tconst onChangeWaveformStyle = useCallback(\n\t\t( newWaveformStyle ) => {\n\t\t\tsetAttributes( {\n\t\t\t\twaveformStyle:\n\t\t\t\t\tnewWaveformStyle === DEFAULT_WAVEFORM_STYLE\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: newWaveformStyle,\n\t\t\t} );\n\t\t},\n\t\t[ setAttributes ]\n\t);\n\n\tfunction updateWaveformColor( colorValue ) {\n\t\tconst isSettingColor = colorValue !== undefined;\n\t\tif ( ! isSettingColor && waveformColorGradientChange === 'gradient' ) {\n\t\t\twaveformColorGradientChange = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\twaveformColorGradientChange = 'color';\n\n\t\tsetAttributes( {\n\t\t\twaveformColor: colorValue,\n\t\t\twaveformGradient: undefined,\n\t\t} );\n\t}\n\n\tfunction updateWaveformGradient( gradientValue ) {\n\t\tconst isSettingGradient = gradientValue !== undefined;\n\t\tif ( ! isSettingGradient && waveformColorGradientChange === 'color' ) {\n\t\t\twaveformColorGradientChange = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\twaveformColorGradientChange = 'gradient';\n\n\t\tsetAttributes( {\n\t\t\twaveformGradient: gradientValue,\n\t\t\twaveformColor: undefined,\n\t\t} );\n\t}\n\n\tfunction updateWaveformBackgroundColor( colorValue ) {\n\t\tconst isSettingColor = colorValue !== undefined;\n\t\tif (\n\t\t\t! isSettingColor &&\n\t\t\twaveformBackgroundColorGradientChange === 'gradient'\n\t\t) {\n\t\t\twaveformBackgroundColorGradientChange = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\twaveformBackgroundColorGradientChange = 'color';\n\n\t\tsetAttributes( {\n\t\t\twaveformBackgroundColor: colorValue,\n\t\t\twaveformBackgroundGradient: undefined,\n\t\t} );\n\t}\n\n\tfunction updateWaveformBackgroundGradient( gradientValue ) {\n\t\tconst isSettingGradient = gradientValue !== undefined;\n\t\tif (\n\t\t\t! isSettingGradient &&\n\t\t\twaveformBackgroundColorGradientChange === 'color'\n\t\t) {\n\t\t\twaveformBackgroundColorGradientChange = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\twaveformBackgroundColorGradientChange = 'gradient';\n\n\t\tsetAttributes( {\n\t\t\twaveformBackgroundGradient: gradientValue,\n\t\t\twaveformBackgroundColor: undefined,\n\t\t} );\n\t}\n\n\tconst colorSettings = [];\n\tif ( hasColors || hasGradients ) {\n\t\tcolorSettings.push(\n\t\t\t{\n\t\t\t\tcolorValue: hasColors ? waveformColor : undefined,\n\t\t\t\tgradientValue: hasGradients ? waveformGradientValue : undefined,\n\t\t\t\tlabel: __( 'Waveform & Play button' ),\n\t\t\t\tonColorChange: hasColors ? updateWaveformColor : undefined,\n\t\t\t\tonGradientChange: hasGradients\n\t\t\t\t\t? updateWaveformGradient\n\t\t\t\t\t: undefined,\n\t\t\t\tisShownByDefault: true,\n\t\t\t\tclearable: true,\n\t\t\t\tenableAlpha: true,\n\t\t\t\tresetAllFilter: () => ( {\n\t\t\t\t\twaveformColor: undefined,\n\t\t\t\t\twaveformGradient: undefined,\n\t\t\t\t} ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tcolorValue: hasColors ? waveformBackgroundColor : undefined,\n\t\t\t\tgradientValue: hasGradients\n\t\t\t\t\t? waveformBackgroundGradientValue\n\t\t\t\t\t: undefined,\n\t\t\t\tlabel: __( 'Waveform background' ),\n\t\t\t\tonColorChange: hasColors\n\t\t\t\t\t? updateWaveformBackgroundColor\n\t\t\t\t\t: undefined,\n\t\t\t\tonGradientChange: hasGradients\n\t\t\t\t\t? updateWaveformBackgroundGradient\n\t\t\t\t\t: undefined,\n\t\t\t\tisShownByDefault: true,\n\t\t\t\tclearable: true,\n\t\t\t\tenableAlpha: true,\n\t\t\t\tresetAllFilter: () => ( {\n\t\t\t\t\twaveformBackgroundColor: undefined,\n\t\t\t\t\twaveformBackgroundGradient: undefined,\n\t\t\t\t} ),\n\t\t\t}\n\t\t);\n\t}\n\n\tconst { children: innerBlocks, ...trackListProps } = useInnerBlocksProps(\n\t\t{\n\t\t\tclassName: clsx( 'wp-block-playlist__tracklist', {\n\t\t\t\t'wp-block-playlist__tracklist-is-hidden': ! showTracklist,\n\t\t\t\t'wp-block-playlist__tracklist-show-numbers': showNumbers,\n\t\t\t\t'wp-block-playlist__tracklist-length-is-hidden':\n\t\t\t\t\t! showTrackLength,\n\t\t\t} ),\n\t\t},\n\t\t{\n\t\t\t__experimentalAppenderTagName: 'li',\n\t\t\trenderAppender: false,\n\t\t}\n\t);\n\n\tif ( tracks.length === 0 ) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\t{ ...blockProps }\n\t\t\t\tclassName={ clsx( 'is-placeholder', blockProps.className ) }\n\t\t\t>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tlabels={ {\n\t\t\t\t\t\ttitle: __( 'Playlist' ),\n\t\t\t\t\t\tinstructions: __(\n\t\t\t\t\t\t\t'Upload an audio file or pick one from your media library.'\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t\tonSelect={ onSelectTracks }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmultiple=\"add\"\n\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls group=\"other\">\n\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\tname={ __( 'Add track' ) }\n\t\t\t\t\tonSelect={ onAddTracks }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmultiple=\"add\"\n\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tresetAll={ () => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tshowTracklist: true,\n\t\t\t\t\t\t\tshowArtists: true,\n\t\t\t\t\t\t\tshowNumbers: true,\n\t\t\t\t\t\t\tshowTrackLength: true,\n\t\t\t\t\t\t\tshowImages: true,\n\t\t\t\t\t\t\tshowPlayButtonArtwork: false,\n\t\t\t\t\t\t\torder: 'asc',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show tracklist' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => showTracklist !== true }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showTracklist: true } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show tracklist' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'showTracklist' ) }\n\t\t\t\t\t\t\tchecked={ showTracklist }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t{ showTracklist && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tlabel={ __( 'Show artist name in tracklist' ) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\thasValue={ () => showArtists !== true }\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { showArtists: true } )\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<ToggleControl\n\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t'Show artist name in tracklist'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tonChange={ toggleAttribute(\n\t\t\t\t\t\t\t\t\t\t'showArtists'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tchecked={ showArtists }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t'Show track numbers in tracklist'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\thasValue={ () => showNumbers !== true }\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { showNumbers: true } )\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<ToggleControl\n\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t'Show track numbers in tracklist'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tonChange={ toggleAttribute(\n\t\t\t\t\t\t\t\t\t\t'showNumbers'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tchecked={ showNumbers }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t'Show track duration in tracklist'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\thasValue={ () => showTrackLength !== true }\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { showTrackLength: true } )\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<ToggleControl\n\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t'Show track duration in tracklist'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tonChange={ toggleAttribute(\n\t\t\t\t\t\t\t\t\t\t'showTrackLength'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tchecked={ showTrackLength }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show tracklist images' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => showImages !== true }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showImages: true } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show tracklist images' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'showImages' ) }\n\t\t\t\t\t\t\tchecked={ showImages }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show track image on play button' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => showPlayButtonArtwork === true }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showPlayButtonArtwork: false } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show track image on play button' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute(\n\t\t\t\t\t\t\t\t'showPlayButtonArtwork'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tchecked={ showPlayButtonArtwork === true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Order' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => order !== 'asc' }\n\t\t\t\t\t\tonDeselect={ () => setAttributes( { order: 'asc' } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<WCSelectControl\n\t\t\t\t\t\t\tlabel={ __( 'Order' ) }\n\t\t\t\t\t\t\tvalue={ order }\n\t\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t\t{ label: __( 'Descending' ), value: 'desc' },\n\t\t\t\t\t\t\t\t{ label: __( 'Ascending' ), value: 'asc' },\n\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\tonChange={ ( value ) => onChangeOrder( value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"styles\">\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Waveform' ) }\n\t\t\t\t\tresetAll={ () => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\twaveformStyle: undefined,\n\t\t\t\t\t\t\twaveformColor: undefined,\n\t\t\t\t\t\t\twaveformGradient: undefined,\n\t\t\t\t\t\t\twaveformBackgroundColor: undefined,\n\t\t\t\t\t\t\twaveformBackgroundGradient: undefined,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tpanelId={ waveformPanelId }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t{ colorSettings.length > 0 && (\n\t\t\t\t\t\t<div className=\"wp-block-playlist__waveform-color-controls\">\n\t\t\t\t\t\t\t<ColorGradientSettingsDropdown\n\t\t\t\t\t\t\t\t__experimentalIsRenderedInSidebar\n\t\t\t\t\t\t\t\tsettings={ colorSettings }\n\t\t\t\t\t\t\t\tpanelId={ waveformPanelId }\n\t\t\t\t\t\t\t\t{ ...colorGradientSettings }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Shape' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\twaveformStyle !== DEFAULT_WAVEFORM_STYLE\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tonChangeWaveformStyle( DEFAULT_WAVEFORM_STYLE )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpanelId={ waveformPanelId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<WCSelectControl\n\t\t\t\t\t\t\tlabel={ __( 'Shape' ) }\n\t\t\t\t\t\t\tvalue={ waveformStyle }\n\t\t\t\t\t\t\toptions={ WAVEFORM_STYLE_OPTIONS }\n\t\t\t\t\t\t\tonChange={ onChangeWaveformStyle }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<figure { ...blockProps }>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\tonSelect={ onAddTracks }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmultiple=\"add\"\n\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\tdisableMediaButtons\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t\t<Disabled isDisabled={ ! isSelected }>\n\t\t\t\t\t<WaveformPlayer\n\t\t\t\t\t\tsrc={ currentTrackData?.src }\n\t\t\t\t\t\ttitle={ currentTrackData?.title }\n\t\t\t\t\t\tartist={ currentTrackData?.artist }\n\t\t\t\t\t\timage={ currentTrackData?.image }\n\t\t\t\t\t\timageAlt={ currentTrackData?.imageAlt }\n\t\t\t\t\t\twaveformStyle={ waveformStyle }\n\t\t\t\t\t\tcolor={ waveformColor }\n\t\t\t\t\t\tgradient={ waveformGradientValue }\n\t\t\t\t\t\tbackgroundColor={ waveformBackgroundColor }\n\t\t\t\t\t\tbackgroundGradient={ waveformBackgroundGradientValue }\n\t\t\t\t\t\tonEnded={ onTrackEnded }\n\t\t\t\t\t\tshowPlayButtonArtwork={ showPlayButtonArtwork === true }\n\t\t\t\t\t/>\n\t\t\t\t</Disabled>\n\t\t\t\t<ol { ...trackListProps }>\n\t\t\t\t\t<PlaylistContext.Provider value={ playlistContext }>\n\t\t\t\t\t\t{ innerBlocks }\n\t\t\t\t\t</PlaylistContext.Provider>\n\t\t\t\t</ol>\n\t\t\t\t<Caption\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tlabel={ __( 'Playlist caption text' ) }\n\t\t\t\t\tshowToolbarButton={ isSelected }\n\t\t\t\t\tstyle={ { marginTop: 16 } }\n\t\t\t\t/>\n\t\t\t</figure>\n\t\t</>\n\t);\n};\n\nexport default PlaylistEdit;\n"],
5
+ "mappings": "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",
6
+ "names": ["blockEditorStore", "noticesStore", "useMultipleOriginColorsAndGradients", "clsx", "icon", "ToolsPanel", "ToolsPanelItem", "WCSelectControl", "ColorGradientSettingsDropdown"]
7
7
  }