@wordpress/block-library 10.2.0 → 10.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/build/accordion-panel/block.json +1 -0
  3. package/build/code/edit.cjs +3 -1
  4. package/build/code/edit.cjs.map +2 -2
  5. package/build/cover/block.json +1 -0
  6. package/build/cover/edit/block-controls.cjs +3 -1
  7. package/build/cover/edit/block-controls.cjs.map +2 -2
  8. package/build/cover/edit/index.cjs +75 -31
  9. package/build/cover/edit/index.cjs.map +2 -2
  10. package/build/embed/edit.cjs +1 -1
  11. package/build/embed/edit.cjs.map +2 -2
  12. package/build/embed/embed-placeholder.cjs +1 -1
  13. package/build/embed/embed-placeholder.cjs.map +2 -2
  14. package/build/gallery/dynamic-gallery.cjs +104 -61
  15. package/build/gallery/dynamic-gallery.cjs.map +3 -3
  16. package/build/gallery/use-dynamic-gallery.cjs +15 -8
  17. package/build/gallery/use-dynamic-gallery.cjs.map +2 -2
  18. package/build/heading/edit.cjs +1 -1
  19. package/build/heading/edit.cjs.map +2 -2
  20. package/build/html/modal.cjs +63 -54
  21. package/build/html/modal.cjs.map +3 -3
  22. package/build/icon/block.json +5 -3
  23. package/build/image/edit.cjs +1 -1
  24. package/build/image/edit.cjs.map +2 -2
  25. package/build/image/image.cjs +29 -5
  26. package/build/image/image.cjs.map +3 -3
  27. package/build/image/use-open-image-media-editor-modal.cjs +6 -2
  28. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  29. package/build/list-item/hooks/use-indent-list-item.cjs +10 -2
  30. package/build/list-item/hooks/use-indent-list-item.cjs.map +2 -2
  31. package/build/math/edit.cjs +39 -56
  32. package/build/math/edit.cjs.map +3 -3
  33. package/build/media-text/edit.cjs +2 -1
  34. package/build/media-text/edit.cjs.map +2 -2
  35. package/build/more/edit.cjs +2 -2
  36. package/build/more/edit.cjs.map +2 -2
  37. package/build/navigation/edit/index.cjs +30 -16
  38. package/build/navigation/edit/index.cjs.map +3 -3
  39. package/build/navigation/edit/use-layout-custom-properties.cjs +72 -0
  40. package/build/navigation/edit/use-layout-custom-properties.cjs.map +7 -0
  41. package/build/navigation/view.cjs +9 -6
  42. package/build/navigation/view.cjs.map +2 -2
  43. package/build/navigation-link/edit.cjs +3 -3
  44. package/build/navigation-link/edit.cjs.map +2 -2
  45. package/build/navigation-link/link-ui/index.cjs +2 -2
  46. package/build/navigation-link/link-ui/index.cjs.map +2 -2
  47. package/build/paragraph/block.json +0 -1
  48. package/build/paragraph/edit.cjs +5 -2
  49. package/build/paragraph/edit.cjs.map +3 -3
  50. package/build/paragraph/index.cjs +4 -1
  51. package/build/paragraph/index.cjs.map +2 -2
  52. package/build/playlist/context.cjs +2 -1
  53. package/build/playlist/context.cjs.map +2 -2
  54. package/build/playlist/edit.cjs +113 -26
  55. package/build/playlist/edit.cjs.map +2 -2
  56. package/build/playlist/utils.cjs +19 -4
  57. package/build/playlist/utils.cjs.map +2 -2
  58. package/build/playlist-track/edit.cjs +21 -6
  59. package/build/playlist-track/edit.cjs.map +2 -2
  60. package/build/post-content/edit.cjs +36 -15
  61. package/build/post-content/edit.cjs.map +2 -2
  62. package/build/post-featured-image/edit.cjs +3 -2
  63. package/build/post-featured-image/edit.cjs.map +2 -2
  64. package/build/post-terms/edit.cjs +2 -2
  65. package/build/post-terms/edit.cjs.map +2 -2
  66. package/build/post-title/edit.cjs +2 -2
  67. package/build/post-title/edit.cjs.map +2 -2
  68. package/build/preformatted/edit.cjs +3 -1
  69. package/build/preformatted/edit.cjs.map +2 -2
  70. package/build/pullquote/edit.cjs +5 -3
  71. package/build/pullquote/edit.cjs.map +2 -2
  72. package/build/query/edit/inspector-controls/index.cjs +4 -1
  73. package/build/query/edit/inspector-controls/index.cjs.map +2 -2
  74. package/build/query/edit/inspector-controls/offset-controls.cjs +1 -1
  75. package/build/query/edit/inspector-controls/offset-controls.cjs.map +2 -2
  76. package/build/read-more/edit.cjs +3 -1
  77. package/build/read-more/edit.cjs.map +2 -2
  78. package/build/site-tagline/edit.cjs +3 -1
  79. package/build/site-tagline/edit.cjs.map +2 -2
  80. package/build/site-title/edit.cjs +3 -1
  81. package/build/site-title/edit.cjs.map +2 -2
  82. package/build/social-links/edit.cjs +11 -4
  83. package/build/social-links/edit.cjs.map +2 -2
  84. package/build/tab-list/block.json +2 -1
  85. package/build/tab-list/edit.cjs +2 -0
  86. package/build/tab-list/edit.cjs.map +3 -3
  87. package/build/tab-list/tab-movers.cjs +87 -0
  88. package/build/tab-list/tab-movers.cjs.map +7 -0
  89. package/build/tab-panel/edit.cjs +1 -9
  90. package/build/tab-panel/edit.cjs.map +2 -2
  91. package/build/table/edit.cjs +1 -1
  92. package/build/table/edit.cjs.map +2 -2
  93. package/build/tabs/use-tab-actions.cjs +23 -1
  94. package/build/tabs/use-tab-actions.cjs.map +2 -2
  95. package/build/utils/caption.cjs +2 -2
  96. package/build/utils/caption.cjs.map +2 -2
  97. package/build/verse/edit.cjs +3 -1
  98. package/build/verse/edit.cjs.map +2 -2
  99. package/build/video/tracks-editor.cjs +0 -1
  100. package/build/video/tracks-editor.cjs.map +2 -2
  101. package/build-module/accordion-panel/block.json +1 -0
  102. package/build-module/code/edit.mjs +3 -1
  103. package/build-module/code/edit.mjs.map +2 -2
  104. package/build-module/cover/block.json +1 -0
  105. package/build-module/cover/edit/block-controls.mjs +3 -1
  106. package/build-module/cover/edit/block-controls.mjs.map +2 -2
  107. package/build-module/cover/edit/index.mjs +78 -34
  108. package/build-module/cover/edit/index.mjs.map +2 -2
  109. package/build-module/embed/edit.mjs +1 -1
  110. package/build-module/embed/edit.mjs.map +2 -2
  111. package/build-module/embed/embed-placeholder.mjs +1 -1
  112. package/build-module/embed/embed-placeholder.mjs.map +2 -2
  113. package/build-module/gallery/dynamic-gallery.mjs +104 -61
  114. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  115. package/build-module/gallery/use-dynamic-gallery.mjs +16 -9
  116. package/build-module/gallery/use-dynamic-gallery.mjs.map +2 -2
  117. package/build-module/heading/edit.mjs +1 -1
  118. package/build-module/heading/edit.mjs.map +2 -2
  119. package/build-module/html/modal.mjs +68 -55
  120. package/build-module/html/modal.mjs.map +2 -2
  121. package/build-module/icon/block.json +5 -3
  122. package/build-module/image/edit.mjs +1 -1
  123. package/build-module/image/edit.mjs.map +2 -2
  124. package/build-module/image/image.mjs +19 -5
  125. package/build-module/image/image.mjs.map +2 -2
  126. package/build-module/image/use-open-image-media-editor-modal.mjs +6 -2
  127. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  128. package/build-module/list-item/hooks/use-indent-list-item.mjs +10 -2
  129. package/build-module/list-item/hooks/use-indent-list-item.mjs.map +2 -2
  130. package/build-module/math/edit.mjs +41 -60
  131. package/build-module/math/edit.mjs.map +2 -2
  132. package/build-module/media-text/edit.mjs +2 -1
  133. package/build-module/media-text/edit.mjs.map +2 -2
  134. package/build-module/more/edit.mjs +2 -2
  135. package/build-module/more/edit.mjs.map +2 -2
  136. package/build-module/navigation/edit/index.mjs +30 -16
  137. package/build-module/navigation/edit/index.mjs.map +2 -2
  138. package/build-module/navigation/edit/use-layout-custom-properties.mjs +51 -0
  139. package/build-module/navigation/edit/use-layout-custom-properties.mjs.map +7 -0
  140. package/build-module/navigation/view.mjs +9 -6
  141. package/build-module/navigation/view.mjs.map +2 -2
  142. package/build-module/navigation-link/edit.mjs +3 -3
  143. package/build-module/navigation-link/edit.mjs.map +2 -2
  144. package/build-module/navigation-link/link-ui/index.mjs +2 -2
  145. package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
  146. package/build-module/paragraph/block.json +0 -1
  147. package/build-module/paragraph/edit.mjs +6 -2
  148. package/build-module/paragraph/edit.mjs.map +2 -2
  149. package/build-module/paragraph/index.mjs +4 -1
  150. package/build-module/paragraph/index.mjs.map +2 -2
  151. package/build-module/playlist/context.mjs +2 -1
  152. package/build-module/playlist/context.mjs.map +2 -2
  153. package/build-module/playlist/edit.mjs +113 -27
  154. package/build-module/playlist/edit.mjs.map +2 -2
  155. package/build-module/playlist/utils.mjs +19 -4
  156. package/build-module/playlist/utils.mjs.map +2 -2
  157. package/build-module/playlist-track/edit.mjs +21 -6
  158. package/build-module/playlist-track/edit.mjs.map +2 -2
  159. package/build-module/post-content/edit.mjs +37 -15
  160. package/build-module/post-content/edit.mjs.map +2 -2
  161. package/build-module/post-featured-image/edit.mjs +3 -2
  162. package/build-module/post-featured-image/edit.mjs.map +2 -2
  163. package/build-module/post-terms/edit.mjs +2 -2
  164. package/build-module/post-terms/edit.mjs.map +2 -2
  165. package/build-module/post-title/edit.mjs +2 -2
  166. package/build-module/post-title/edit.mjs.map +2 -2
  167. package/build-module/preformatted/edit.mjs +3 -1
  168. package/build-module/preformatted/edit.mjs.map +2 -2
  169. package/build-module/pullquote/edit.mjs +5 -3
  170. package/build-module/pullquote/edit.mjs.map +2 -2
  171. package/build-module/query/edit/inspector-controls/index.mjs +5 -2
  172. package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
  173. package/build-module/query/edit/inspector-controls/offset-controls.mjs +2 -2
  174. package/build-module/query/edit/inspector-controls/offset-controls.mjs.map +2 -2
  175. package/build-module/read-more/edit.mjs +3 -1
  176. package/build-module/read-more/edit.mjs.map +2 -2
  177. package/build-module/site-tagline/edit.mjs +3 -1
  178. package/build-module/site-tagline/edit.mjs.map +2 -2
  179. package/build-module/site-title/edit.mjs +3 -1
  180. package/build-module/site-title/edit.mjs.map +2 -2
  181. package/build-module/social-links/edit.mjs +11 -4
  182. package/build-module/social-links/edit.mjs.map +2 -2
  183. package/build-module/tab-list/block.json +2 -1
  184. package/build-module/tab-list/edit.mjs +2 -0
  185. package/build-module/tab-list/edit.mjs.map +2 -2
  186. package/build-module/tab-list/tab-movers.mjs +59 -0
  187. package/build-module/tab-list/tab-movers.mjs.map +7 -0
  188. package/build-module/tab-panel/edit.mjs +1 -9
  189. package/build-module/tab-panel/edit.mjs.map +2 -2
  190. package/build-module/table/edit.mjs +1 -1
  191. package/build-module/table/edit.mjs.map +2 -2
  192. package/build-module/tabs/use-tab-actions.mjs +23 -1
  193. package/build-module/tabs/use-tab-actions.mjs.map +2 -2
  194. package/build-module/utils/caption.mjs +2 -2
  195. package/build-module/utils/caption.mjs.map +2 -2
  196. package/build-module/verse/edit.mjs +3 -1
  197. package/build-module/verse/edit.mjs.map +2 -2
  198. package/build-module/video/tracks-editor.mjs +0 -1
  199. package/build-module/video/tracks-editor.mjs.map +2 -2
  200. package/build-style/cover/editor-rtl.css +3 -0
  201. package/build-style/cover/editor.css +3 -0
  202. package/build-style/editor-rtl.css +18 -41
  203. package/build-style/editor.css +18 -41
  204. package/build-style/icon/editor-rtl.css +1 -4
  205. package/build-style/icon/editor.css +1 -4
  206. package/build-style/image/editor-rtl.css +3 -32
  207. package/build-style/image/editor.css +3 -32
  208. package/build-style/playlist/editor-rtl.css +0 -5
  209. package/build-style/playlist/editor.css +0 -5
  210. package/build-style/playlist/style-rtl.css +44 -4
  211. package/build-style/playlist/style.css +44 -4
  212. package/build-style/pullquote/editor-rtl.css +4 -0
  213. package/build-style/pullquote/editor.css +4 -0
  214. package/build-style/style-rtl.css +44 -4
  215. package/build-style/style.css +44 -4
  216. package/build-style/tab-list/editor-rtl.css +101 -0
  217. package/build-style/tab-list/editor.css +101 -0
  218. package/package.json +43 -43
  219. package/src/accordion-panel/block.json +1 -0
  220. package/src/breadcrumbs/index.php +3 -1
  221. package/src/button/index.php +1 -1
  222. package/src/code/edit.js +7 -2
  223. package/src/cover/block.json +1 -0
  224. package/src/cover/edit/block-controls.js +5 -0
  225. package/src/cover/edit/index.js +100 -35
  226. package/src/cover/editor.scss +6 -0
  227. package/src/cover/index.php +9 -2
  228. package/src/editor.scss +1 -0
  229. package/src/embed/edit.js +3 -1
  230. package/src/embed/embed-placeholder.js +9 -7
  231. package/src/form/index.php +6 -4
  232. package/src/gallery/dynamic-gallery.js +133 -74
  233. package/src/gallery/use-dynamic-gallery.js +27 -12
  234. package/src/heading/edit.js +1 -1
  235. package/src/html/modal.js +13 -2
  236. package/src/icon/README.md +1 -3
  237. package/src/icon/block.json +5 -3
  238. package/src/icon/editor.scss +1 -4
  239. package/src/image/edit.js +1 -5
  240. package/src/image/editor.scss +6 -46
  241. package/src/image/image.js +37 -3
  242. package/src/image/test/use-open-image-media-editor-modal.js +37 -1
  243. package/src/image/use-open-image-media-editor-modal.js +8 -1
  244. package/src/latest-posts/index.php +3 -2
  245. package/src/list-item/hooks/use-indent-list-item.js +10 -1
  246. package/src/math/edit.js +42 -59
  247. package/src/media-text/edit.js +1 -0
  248. package/src/media-text/index.php +11 -2
  249. package/src/more/edit.js +7 -4
  250. package/src/navigation/edit/index.js +52 -36
  251. package/src/navigation/edit/test/layout-custom-properties.js +138 -0
  252. package/src/navigation/edit/use-layout-custom-properties.js +84 -0
  253. package/src/navigation/index.php +123 -12
  254. package/src/navigation/test/view.js +51 -0
  255. package/src/navigation/view.js +15 -14
  256. package/src/navigation-link/edit.js +11 -7
  257. package/src/navigation-link/index.php +64 -0
  258. package/src/navigation-link/link-ui/index.js +2 -1
  259. package/src/navigation-link/test/__snapshots__/hooks.js.snap +1 -1
  260. package/src/page-list/index.php +4 -3
  261. package/src/paragraph/README.md +0 -1
  262. package/src/paragraph/block.json +0 -1
  263. package/src/paragraph/edit.js +9 -2
  264. package/src/paragraph/index.js +4 -1
  265. package/src/pattern/index.php +5 -5
  266. package/src/playlist/context.js +1 -0
  267. package/src/playlist/edit.js +151 -47
  268. package/src/playlist/editor.scss +0 -7
  269. package/src/playlist/index.php +14 -9
  270. package/src/playlist/style.scss +3 -0
  271. package/src/playlist/test/edit-component.js +139 -0
  272. package/src/playlist/test/edit.js +30 -0
  273. package/src/playlist/utils.js +25 -4
  274. package/src/playlist-track/edit.js +22 -5
  275. package/src/playlist-track/index.php +8 -7
  276. package/src/playlist-track/test/edit.js +87 -3
  277. package/src/post-content/edit.js +45 -16
  278. package/src/post-excerpt/index.php +4 -1
  279. package/src/post-featured-image/edit.js +3 -2
  280. package/src/post-featured-image/index.php +4 -1
  281. package/src/post-terms/edit.js +7 -4
  282. package/src/post-title/edit.js +5 -3
  283. package/src/preformatted/edit.js +7 -2
  284. package/src/pullquote/edit.js +9 -4
  285. package/src/pullquote/editor.scss +6 -0
  286. package/src/query/edit/inspector-controls/index.js +5 -2
  287. package/src/query/edit/inspector-controls/offset-controls.js +2 -2
  288. package/src/read-more/edit.js +7 -2
  289. package/src/rss/index.php +9 -3
  290. package/src/site-tagline/edit.js +7 -2
  291. package/src/site-title/edit.js +7 -2
  292. package/src/social-link/index.php +19 -9
  293. package/src/social-links/edit.js +21 -12
  294. package/src/tab-list/block.json +2 -1
  295. package/src/tab-list/edit.js +2 -0
  296. package/src/tab-list/editor.scss +9 -0
  297. package/src/tab-list/tab-movers.js +72 -0
  298. package/src/tab-panel/edit.js +1 -9
  299. package/src/table/edit.js +1 -1
  300. package/src/table-of-contents/index.php +386 -1
  301. package/src/tabs/use-tab-actions.js +32 -3
  302. package/src/tag-cloud/index.php +3 -2
  303. package/src/template-part/index.php +2 -1
  304. package/src/utils/caption.js +7 -4
  305. package/src/utils/test/waveform-utils.js +63 -0
  306. package/src/verse/edit.js +7 -2
  307. package/src/video/index.php +2 -2
  308. package/src/video/tracks-editor.js +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/playlist/edit.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\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\tInnerBlocks,\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';\n\n/**\n * Internal dependencies\n */\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 DEFAULT_WAVEFORM_STYLE = 'bars';\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\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 { replaceInnerBlocks } = 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\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\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\tconst playlistContext = useMemo(\n\t\t() => ( { currentTrackClientId, setCurrentTrackClientId } ),\n\t\t[ currentTrackClientId, setCurrentTrackClientId ]\n\t);\n\n\tconst onSelectTracks = useCallback(\n\t\t( media ) => {\n\t\t\tif ( ! media ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! Array.isArray( media ) ) {\n\t\t\t\tmedia = [ media ];\n\t\t\t}\n\n\t\t\tconst trackList = media.map( getTrackAttributes );\n\n\t\t\tconst newBlocks = trackList.map( ( track ) =>\n\t\t\t\tcreateBlock( 'core/playlist-track', track )\n\t\t\t);\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[ replaceInnerBlocks, clientId, setCurrentTrackClientId ]\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 hasSelectedChild = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).hasSelectedInnerBlock( clientId ),\n\t\t[ clientId ]\n\t);\n\n\tconst hasAnySelected = isSelected || hasSelectedChild;\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 innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\t__experimentalAppenderTagName: 'li',\n\t\trenderAppender: hasAnySelected && InnerBlocks.ButtonBlockAppender,\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\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={ __( 'Edit' ) }\n\t\t\t\t\tonSelect={ onSelectTracks }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmultiple\n\t\t\t\t\tmediaIds={ tracks\n\t\t\t\t\t\t.filter( ( track ) => track.id )\n\t\t\t\t\t\t.map( ( track ) => track.id ) }\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<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{ showTracklist && (\n\t\t\t\t\t<ol\n\t\t\t\t\t\tclassName={ clsx( 'wp-block-playlist__tracklist', {\n\t\t\t\t\t\t\t'wp-block-playlist__tracklist-show-numbers':\n\t\t\t\t\t\t\t\tshowNumbers,\n\t\t\t\t\t\t\t'wp-block-playlist__tracklist-length-is-hidden':\n\t\t\t\t\t\t\t\t! showTrackLength,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlaylistContext.Provider value={ playlistContext }>\n\t\t\t\t\t\t\t{ innerBlocksProps.children }\n\t\t\t\t\t\t</PlaylistContext.Provider>\n\t\t\t\t\t</ol>\n\t\t\t\t) }\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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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\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';\n\n/**\n * Internal dependencies\n */\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 { replaceInnerBlocks, selectBlock } = 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\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\tconst nextBlocks = [ ...validTracks, ...newBlocks ];\n\t\t\tsetCurrentTrackClientId( newBlocks[ 0 ].clientId );\n\t\t\treplaceInnerBlocks( clientId, nextBlocks );\n\t\t\tselectBlock( newBlocks[ 0 ].clientId );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tcreateTrackBlocks,\n\t\t\treplaceInnerBlocks,\n\t\t\tselectBlock,\n\t\t\tsetCurrentTrackClientId,\n\t\t\tvalidTracks,\n\t\t]\n\t);\n\n\tconst playlistContext = useMemo(\n\t\t() => ( {\n\t\t\tcurrentTrackClientId,\n\t\t\tsetCurrentTrackClientId,\n\t\t\taddTracks: onAddTracks,\n\t\t} ),\n\t\t[ currentTrackClientId, onAddTracks, setCurrentTrackClientId ]\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 innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\t__experimentalAppenderTagName: 'li',\n\t\trenderAppender: false,\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\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' ) }\n\t\t\t\t\tonSelect={ onAddTracks }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmultiple\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\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\n\t\t\t\t\tclassName={ clsx( 'wp-block-playlist__tracklist', {\n\t\t\t\t\t\t'wp-block-playlist__tracklist-is-hidden':\n\t\t\t\t\t\t\t! showTracklist,\n\t\t\t\t\t\t'wp-block-playlist__tracklist-show-numbers':\n\t\t\t\t\t\t\tshowNumbers,\n\t\t\t\t\t\t'wp-block-playlist__tracklist-length-is-hidden':\n\t\t\t\t\t\t\t! showTrackLength,\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t<PlaylistContext.Provider value={ playlistContext }>\n\t\t\t\t\t\t{ innerBlocksProps.children }\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
6
  "names": []
7
7
  }
@@ -1,7 +1,21 @@
1
1
  // packages/block-library/src/playlist/utils.js
2
2
  import { __ } from "@wordpress/i18n";
3
+ import { decodeEntities } from "@wordpress/html-entities";
4
+ function getMediaUrl(media) {
5
+ return media?.url ?? media?.source_url;
6
+ }
7
+ function getMediaTitle(media) {
8
+ const title = media?.title;
9
+ if (title === void 0) {
10
+ return void 0;
11
+ }
12
+ if (typeof title === "string") {
13
+ return title;
14
+ }
15
+ return decodeEntities(title?.raw || title?.rendered || "");
16
+ }
3
17
  function getTrackImageAttributes(image) {
4
- const imageSrc = image?.src ?? image?.url;
18
+ const imageSrc = image?.src ?? getMediaUrl(image);
5
19
  if (imageSrc?.endsWith("/images/media/audio.svg")) {
6
20
  return {
7
21
  image: "",
@@ -15,11 +29,12 @@ function getTrackImageAttributes(image) {
15
29
  };
16
30
  }
17
31
  function getTrackAttributes(media) {
32
+ const mediaUrl = getMediaUrl(media);
18
33
  return {
19
- id: media.id || media.url,
34
+ id: media.id || mediaUrl,
20
35
  // Attachment ID or URL.
21
- src: media.url,
22
- title: media.title,
36
+ src: mediaUrl,
37
+ title: getMediaTitle(media),
23
38
  artist: media.artist || media?.meta?.artist || media?.media_details?.artist || __("Unknown artist"),
24
39
  album: media.album || media?.meta?.album || media?.media_details?.album || __("Unknown album"),
25
40
  length: media?.fileLength || media?.media_details?.length_formatted,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/playlist/utils.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Transform media library image data into track image attributes.\n *\n * @param {Object} image - Image object from the media library.\n * @return {Object} Track image attributes for the playlist-track block.\n */\nexport function getTrackImageAttributes( image ) {\n\tconst imageSrc = image?.src ?? image?.url;\n\n\t// Prevent using the default media attachment icon as the track image.\n\tif ( imageSrc?.endsWith( '/images/media/audio.svg' ) ) {\n\t\treturn {\n\t\t\timage: '',\n\t\t\timageAlt: '',\n\t\t};\n\t}\n\n\treturn {\n\t\t// Note: Image is not available when a new track is uploaded.\n\t\timage: imageSrc,\n\t\timageAlt: imageSrc ? image?.alt || image?.alt_text || '' : undefined,\n\t};\n}\n\n/**\n * Transform media library data into track block attributes.\n *\n * @param {Object} media - Media object from the media library.\n * @return {Object} Track attributes for the playlist-track block.\n */\nexport function getTrackAttributes( media ) {\n\treturn {\n\t\tid: media.id || media.url, // Attachment ID or URL.\n\t\tsrc: media.url,\n\t\ttitle: media.title,\n\t\tartist:\n\t\t\tmedia.artist ||\n\t\t\tmedia?.meta?.artist ||\n\t\t\tmedia?.media_details?.artist ||\n\t\t\t__( 'Unknown artist' ),\n\t\talbum:\n\t\t\tmedia.album ||\n\t\t\tmedia?.meta?.album ||\n\t\t\tmedia?.media_details?.album ||\n\t\t\t__( 'Unknown album' ),\n\t\tlength: media?.fileLength || media?.media_details?.length_formatted,\n\t\t...getTrackImageAttributes( media?.image ),\n\t};\n}\n"],
5
- "mappings": ";AAGA,SAAS,UAAU;AAQZ,SAAS,wBAAyB,OAAQ;AAChD,QAAM,WAAW,OAAO,OAAO,OAAO;AAGtC,MAAK,UAAU,SAAU,yBAA0B,GAAI;AACtD,WAAO;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,IACX;AAAA,EACD;AAEA,SAAO;AAAA;AAAA,IAEN,OAAO;AAAA,IACP,UAAU,WAAW,OAAO,OAAO,OAAO,YAAY,KAAK;AAAA,EAC5D;AACD;AAQO,SAAS,mBAAoB,OAAQ;AAC3C,SAAO;AAAA,IACN,IAAI,MAAM,MAAM,MAAM;AAAA;AAAA,IACtB,KAAK,MAAM;AAAA,IACX,OAAO,MAAM;AAAA,IACb,QACC,MAAM,UACN,OAAO,MAAM,UACb,OAAO,eAAe,UACtB,GAAI,gBAAiB;AAAA,IACtB,OACC,MAAM,SACN,OAAO,MAAM,SACb,OAAO,eAAe,SACtB,GAAI,eAAgB;AAAA,IACrB,QAAQ,OAAO,cAAc,OAAO,eAAe;AAAA,IACnD,GAAG,wBAAyB,OAAO,KAAM;AAAA,EAC1C;AACD;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { decodeEntities } from '@wordpress/html-entities';\n\nfunction getMediaUrl( media ) {\n\treturn media?.url ?? media?.source_url;\n}\n\nfunction getMediaTitle( media ) {\n\tconst title = media?.title;\n\n\tif ( title === undefined ) {\n\t\treturn undefined;\n\t}\n\n\tif ( typeof title === 'string' ) {\n\t\treturn title;\n\t}\n\n\treturn decodeEntities( title?.raw || title?.rendered || '' );\n}\n\n/**\n * Transform media library image data into track image attributes.\n *\n * @param {Object} image - Image object from the media library.\n * @return {Object} Track image attributes for the playlist-track block.\n */\nexport function getTrackImageAttributes( image ) {\n\tconst imageSrc = image?.src ?? getMediaUrl( image );\n\n\t// Prevent using the default media attachment icon as the track image.\n\tif ( imageSrc?.endsWith( '/images/media/audio.svg' ) ) {\n\t\treturn {\n\t\t\timage: '',\n\t\t\timageAlt: '',\n\t\t};\n\t}\n\n\treturn {\n\t\t// Note: Image is not available when a new track is uploaded.\n\t\timage: imageSrc,\n\t\timageAlt: imageSrc ? image?.alt || image?.alt_text || '' : undefined,\n\t};\n}\n\n/**\n * Transform media library data into track block attributes.\n *\n * @param {Object} media - Media object from the media library.\n * @return {Object} Track attributes for the playlist-track block.\n */\nexport function getTrackAttributes( media ) {\n\tconst mediaUrl = getMediaUrl( media );\n\n\treturn {\n\t\tid: media.id || mediaUrl, // Attachment ID or URL.\n\t\tsrc: mediaUrl,\n\t\ttitle: getMediaTitle( media ),\n\t\tartist:\n\t\t\tmedia.artist ||\n\t\t\tmedia?.meta?.artist ||\n\t\t\tmedia?.media_details?.artist ||\n\t\t\t__( 'Unknown artist' ),\n\t\talbum:\n\t\t\tmedia.album ||\n\t\t\tmedia?.meta?.album ||\n\t\t\tmedia?.media_details?.album ||\n\t\t\t__( 'Unknown album' ),\n\t\tlength: media?.fileLength || media?.media_details?.length_formatted,\n\t\t...getTrackImageAttributes( media?.image ),\n\t};\n}\n"],
5
+ "mappings": ";AAGA,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAE/B,SAAS,YAAa,OAAQ;AAC7B,SAAO,OAAO,OAAO,OAAO;AAC7B;AAEA,SAAS,cAAe,OAAQ;AAC/B,QAAM,QAAQ,OAAO;AAErB,MAAK,UAAU,QAAY;AAC1B,WAAO;AAAA,EACR;AAEA,MAAK,OAAO,UAAU,UAAW;AAChC,WAAO;AAAA,EACR;AAEA,SAAO,eAAgB,OAAO,OAAO,OAAO,YAAY,EAAG;AAC5D;AAQO,SAAS,wBAAyB,OAAQ;AAChD,QAAM,WAAW,OAAO,OAAO,YAAa,KAAM;AAGlD,MAAK,UAAU,SAAU,yBAA0B,GAAI;AACtD,WAAO;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,IACX;AAAA,EACD;AAEA,SAAO;AAAA;AAAA,IAEN,OAAO;AAAA,IACP,UAAU,WAAW,OAAO,OAAO,OAAO,YAAY,KAAK;AAAA,EAC5D;AACD;AAQO,SAAS,mBAAoB,OAAQ;AAC3C,QAAM,WAAW,YAAa,KAAM;AAEpC,SAAO;AAAA,IACN,IAAI,MAAM,MAAM;AAAA;AAAA,IAChB,KAAK;AAAA,IACL,OAAO,cAAe,KAAM;AAAA,IAC5B,QACC,MAAM,UACN,OAAO,MAAM,UACb,OAAO,eAAe,UACtB,GAAI,gBAAiB;AAAA,IACtB,OACC,MAAM,SACN,OAAO,MAAM,SACb,OAAO,eAAe,SACtB,GAAI,eAAgB;AAAA,IACrB,QAAQ,OAAO,cAAc,OAAO,eAAe;AAAA,IACnD,GAAG,wBAAyB,OAAO,KAAM;AAAA,EAC1C;AACD;",
6
6
  "names": []
7
7
  }
@@ -45,7 +45,7 @@ var PlaylistTrackEdit = ({
45
45
  const showImages = context?.showImages ?? true;
46
46
  const imageButton = useRef();
47
47
  const blockProps = useBlockProps();
48
- const { currentTrackClientId, setCurrentTrackClientId } = useContext(PlaylistContext);
48
+ const { currentTrackClientId, setCurrentTrackClientId, addTracks } = useContext(PlaylistContext);
49
49
  const { createErrorNotice } = useDispatch(noticesStore);
50
50
  function onUploadError(message) {
51
51
  createErrorNotice(message, { type: "snackbar" });
@@ -63,13 +63,14 @@ var PlaylistTrackEdit = ({
63
63
  setCurrentTrackClientId
64
64
  ]);
65
65
  useUploadMediaFromBlobURL({
66
- src: temporaryURL,
66
+ url: temporaryURL,
67
67
  allowedTypes: ALLOWED_MEDIA_TYPES,
68
68
  onChange: onSelectTrack,
69
69
  onError: onUploadError
70
70
  });
71
71
  function onSelectTrack(media) {
72
- if (!media || !media.url) {
72
+ const mediaUrl = media?.url ?? media?.source_url;
73
+ if (!media || !mediaUrl) {
73
74
  setAttributes({
74
75
  blob: void 0,
75
76
  id: void 0,
@@ -84,8 +85,8 @@ var PlaylistTrackEdit = ({
84
85
  setTemporaryURL();
85
86
  return;
86
87
  }
87
- if (isBlobURL(media.url)) {
88
- setTemporaryURL(media.url);
88
+ if (isBlobURL(mediaUrl)) {
89
+ setTemporaryURL(mediaUrl);
89
90
  return;
90
91
  }
91
92
  setAttributes({
@@ -130,7 +131,21 @@ var PlaylistTrackEdit = ({
130
131
  mediaId: id,
131
132
  mediaURL: src,
132
133
  allowedTypes: ALLOWED_MEDIA_TYPES,
133
- onError: onUploadError
134
+ onError: onUploadError,
135
+ variant: "toolbar"
136
+ }
137
+ ) }),
138
+ !!addTracks && /* @__PURE__ */ jsx(BlockControls, { group: "block", children: /* @__PURE__ */ jsx(
139
+ MediaReplaceFlow,
140
+ {
141
+ name: __("Add"),
142
+ onSelect: addTracks,
143
+ accept: "audio/*",
144
+ multiple: true,
145
+ handleUpload: false,
146
+ allowedTypes: ALLOWED_MEDIA_TYPES,
147
+ onError: onUploadError,
148
+ variant: "toolbar"
134
149
  }
135
150
  ) }),
136
151
  /* @__PURE__ */ jsx(InspectorControls, { children: /* @__PURE__ */ jsxs(PanelBody, { title: __("Settings"), children: [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/playlist-track/edit.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport { useContext, useEffect, useRef, useState } from '@wordpress/element';\nimport {\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tMediaUpload,\n\tMediaUploadCheck,\n\tBlockIcon,\n\tuseBlockProps,\n\tBlockControls,\n\tInspectorControls,\n\tPlainText,\n} from '@wordpress/block-editor';\nimport {\n\tButton,\n\tPanelBody,\n\tTextControl,\n\tTextareaControl,\n\tBaseControl,\n\tSpinner,\n} from '@wordpress/components';\nimport { Link } from '@wordpress/ui';\nimport { useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __ } from '@wordpress/i18n';\nimport { audio as icon } from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { PlaylistContext } from '../playlist/context';\nimport { getTrackAttributes, getTrackImageAttributes } from '../playlist/utils';\nimport { useUploadMediaFromBlobURL } from '../utils/hooks';\n\nconst ALLOWED_MEDIA_TYPES = [ 'audio' ];\nconst TRACK_IMAGE_ALLOWED_MEDIA_TYPES = [ 'image' ];\n\nconst PlaylistTrackEdit = ( {\n\tattributes,\n\tsetAttributes,\n\tcontext,\n\tclientId,\n\tisSelected,\n} ) => {\n\tconst { id, src, album, artist, image, imageAlt, length, title } =\n\t\tattributes;\n\tconst [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );\n\tconst showArtists = context?.showArtists;\n\tconst showImages = context?.showImages ?? true;\n\tconst imageButton = useRef();\n\tconst blockProps = useBlockProps();\n\tconst { currentTrackClientId, setCurrentTrackClientId } =\n\t\tuseContext( PlaylistContext );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t}\n\tconst hasTrackSource = !! src || !! temporaryURL;\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\tisSelected &&\n\t\t\thasTrackSource &&\n\t\t\tcurrentTrackClientId !== clientId\n\t\t) {\n\t\t\tsetCurrentTrackClientId( clientId );\n\t\t}\n\t}, [\n\t\tisSelected,\n\t\thasTrackSource,\n\t\tclientId,\n\t\tcurrentTrackClientId,\n\t\tsetCurrentTrackClientId,\n\t] );\n\n\tuseUploadMediaFromBlobURL( {\n\t\tsrc: temporaryURL,\n\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\tonChange: onSelectTrack,\n\t\tonError: onUploadError,\n\t} );\n\n\tfunction onSelectTrack( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\t// In this case there was an error and we should continue in the editing state\n\t\t\t// previous attributes should be removed because they may be temporary blob urls.\n\t\t\tsetAttributes( {\n\t\t\t\tblob: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\tartist: undefined,\n\t\t\t\talbum: undefined,\n\t\t\t\timage: undefined,\n\t\t\t\timageAlt: undefined,\n\t\t\t\tlength: undefined,\n\t\t\t\ttitle: undefined,\n\t\t\t\turl: undefined,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\tblob: undefined,\n\t\t\t...getTrackAttributes( media ),\n\t\t} );\n\t\tsetTemporaryURL();\n\t}\n\n\tfunction onSelectTrackImage( trackImage ) {\n\t\tsetAttributes( getTrackImageAttributes( trackImage ) );\n\t}\n\n\tfunction onRemoveTrackImage() {\n\t\tsetAttributes( { image: undefined, imageAlt: undefined } );\n\n\t\t// Move focus back to the Media Upload button.\n\t\timageButton.current.focus();\n\t}\n\n\tif ( ! hasTrackSource ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\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: __( 'Track' ),\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={ onSelectTrack }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tvalue={ attributes }\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={ __( 'Replace' ) }\n\t\t\t\t\tonSelect={ onSelectTrack }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmediaId={ id }\n\t\t\t\t\tmediaURL={ src }\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<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Artist' ) }\n\t\t\t\t\t\tvalue={ artist ? stripHTML( artist ) : '' }\n\t\t\t\t\t\tonChange={ ( artistValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { artist: artistValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Album' ) }\n\t\t\t\t\t\tvalue={ album ? stripHTML( album ) : '' }\n\t\t\t\t\t\tonChange={ ( albumValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { album: albumValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Title' ) }\n\t\t\t\t\t\tvalue={ title ? stripHTML( title ) : '' }\n\t\t\t\t\t\tonChange={ ( titleValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { title: titleValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t<BaseControl>\n\t\t\t\t\t\t\t<BaseControl.VisualLabel>\n\t\t\t\t\t\t\t\t{ __( 'Track image' ) }\n\t\t\t\t\t\t\t</BaseControl.VisualLabel>\n\t\t\t\t\t\t\t<div className=\"editor-video-poster-control\">\n\t\t\t\t\t\t\t\t{ !! image && (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={ image }\n\t\t\t\t\t\t\t\t\t\talt={ __(\n\t\t\t\t\t\t\t\t\t\t\t'Preview of the track image'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\t\t\t\ttitle={ __( 'Select image' ) }\n\t\t\t\t\t\t\t\t\tonSelect={ onSelectTrackImage }\n\t\t\t\t\t\t\t\t\tallowedTypes={\n\t\t\t\t\t\t\t\t\t\tTRACK_IMAGE_ALLOWED_MEDIA_TYPES\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\t\t\tref={ imageButton }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ ! image\n\t\t\t\t\t\t\t\t\t\t\t\t? __( 'Select' )\n\t\t\t\t\t\t\t\t\t\t\t\t: __( 'Replace' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\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\t{ !! image && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\t\tonClick={ onRemoveTrackImage }\n\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</BaseControl>\n\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t\t{ !! image && (\n\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tvalue={ imageAlt || '' }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { imageAlt: value } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\topenInNewTab\n\t\t\t\t\t\t\t\t\thref={\n\t\t\t\t\t\t\t\t\t\t// translators: Localized tutorial, if one exists. W3C Web Accessibility Initiative link has list of existing translations.\n\t\t\t\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t\t\t\t'https://www.w3.org/WAI/tutorials/images/decision-tree/'\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</Link>\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</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<li { ...blockProps }>\n\t\t\t\t{ !! temporaryURL && <Spinner /> }\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"wp-block-playlist-track__button\"\n\t\t\t\t\tonClick={ () => setCurrentTrackClientId( clientId ) }\n\t\t\t\t\taria-current={\n\t\t\t\t\t\tcurrentTrackClientId === clientId ? 'true' : 'false'\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ showImages && !! image && (\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tclassName=\"wp-block-playlist-track__image\"\n\t\t\t\t\t\t\tsrc={ image }\n\t\t\t\t\t\t\talt={ imageAlt || '' }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t<span className=\"wp-block-playlist-track__content\">\n\t\t\t\t\t\t<PlainText\n\t\t\t\t\t\t\ttagName=\"span\"\n\t\t\t\t\t\t\tclassName=\"wp-block-playlist-track__title\"\n\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\tplaceholder={ __( 'Add title' ) }\n\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\tsetAttributes( { title: value } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t__experimentalVersion={ 2 }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ showArtists && (\n\t\t\t\t\t\t\t<PlainText\n\t\t\t\t\t\t\t\ttagName=\"span\"\n\t\t\t\t\t\t\t\tclassName=\"wp-block-playlist-track__artist\"\n\t\t\t\t\t\t\t\tvalue={ artist }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'Add artist' ) }\n\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { artist: value } )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t__experimentalVersion={ 2 }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"wp-block-playlist-track__length\">\n\t\t\t\t\t\t{ length && (\n\t\t\t\t\t\t\t<span className=\"screen-reader-text\">\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t/* translators: Visually hidden label for the track duration (screen reader text). */\n\t\t\t\t\t\t\t\t\t__( 'Duration:' )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ length }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"screen-reader-text\">{ __( 'Play' ) }</span>\n\t\t\t\t</button>\n\t\t\t</li>\n\t\t</>\n\t);\n};\n\nexport default PlaylistTrackEdit;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport { useContext, useEffect, useRef, useState } from '@wordpress/element';\nimport {\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tMediaUpload,\n\tMediaUploadCheck,\n\tBlockIcon,\n\tuseBlockProps,\n\tBlockControls,\n\tInspectorControls,\n\tPlainText,\n} from '@wordpress/block-editor';\nimport {\n\tButton,\n\tPanelBody,\n\tTextControl,\n\tTextareaControl,\n\tBaseControl,\n\tSpinner,\n} from '@wordpress/components';\nimport { Link } from '@wordpress/ui';\nimport { useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __ } from '@wordpress/i18n';\nimport { audio as icon } from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { PlaylistContext } from '../playlist/context';\nimport { getTrackAttributes, getTrackImageAttributes } from '../playlist/utils';\nimport { useUploadMediaFromBlobURL } from '../utils/hooks';\n\nconst ALLOWED_MEDIA_TYPES = [ 'audio' ];\nconst TRACK_IMAGE_ALLOWED_MEDIA_TYPES = [ 'image' ];\n\nconst PlaylistTrackEdit = ( {\n\tattributes,\n\tsetAttributes,\n\tcontext,\n\tclientId,\n\tisSelected,\n} ) => {\n\tconst { id, src, album, artist, image, imageAlt, length, title } =\n\t\tattributes;\n\tconst [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );\n\tconst showArtists = context?.showArtists;\n\tconst showImages = context?.showImages ?? true;\n\tconst imageButton = useRef();\n\tconst blockProps = useBlockProps();\n\tconst { currentTrackClientId, setCurrentTrackClientId, addTracks } =\n\t\tuseContext( PlaylistContext );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t}\n\tconst hasTrackSource = !! src || !! temporaryURL;\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\tisSelected &&\n\t\t\thasTrackSource &&\n\t\t\tcurrentTrackClientId !== clientId\n\t\t) {\n\t\t\tsetCurrentTrackClientId( clientId );\n\t\t}\n\t}, [\n\t\tisSelected,\n\t\thasTrackSource,\n\t\tclientId,\n\t\tcurrentTrackClientId,\n\t\tsetCurrentTrackClientId,\n\t] );\n\n\tuseUploadMediaFromBlobURL( {\n\t\turl: temporaryURL,\n\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\tonChange: onSelectTrack,\n\t\tonError: onUploadError,\n\t} );\n\n\tfunction onSelectTrack( media ) {\n\t\tconst mediaUrl = media?.url ?? media?.source_url;\n\n\t\tif ( ! media || ! mediaUrl ) {\n\t\t\t// In this case there was an error and we should continue in the editing state\n\t\t\t// previous attributes should be removed because they may be temporary blob urls.\n\t\t\tsetAttributes( {\n\t\t\t\tblob: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\tartist: undefined,\n\t\t\t\talbum: undefined,\n\t\t\t\timage: undefined,\n\t\t\t\timageAlt: undefined,\n\t\t\t\tlength: undefined,\n\t\t\t\ttitle: undefined,\n\t\t\t\turl: undefined,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( mediaUrl ) ) {\n\t\t\tsetTemporaryURL( mediaUrl );\n\t\t\treturn;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\tblob: undefined,\n\t\t\t...getTrackAttributes( media ),\n\t\t} );\n\t\tsetTemporaryURL();\n\t}\n\n\tfunction onSelectTrackImage( trackImage ) {\n\t\tsetAttributes( getTrackImageAttributes( trackImage ) );\n\t}\n\n\tfunction onRemoveTrackImage() {\n\t\tsetAttributes( { image: undefined, imageAlt: undefined } );\n\n\t\t// Move focus back to the Media Upload button.\n\t\timageButton.current.focus();\n\t}\n\n\tif ( ! hasTrackSource ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\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: __( 'Track' ),\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={ onSelectTrack }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tvalue={ attributes }\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={ __( 'Replace' ) }\n\t\t\t\t\tonSelect={ onSelectTrack }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tmediaId={ id }\n\t\t\t\t\tmediaURL={ src }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t{ !! addTracks && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tname={ __( 'Add' ) }\n\t\t\t\t\t\tonSelect={ addTracks }\n\t\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\t\tmultiple\n\t\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Artist' ) }\n\t\t\t\t\t\tvalue={ artist ? stripHTML( artist ) : '' }\n\t\t\t\t\t\tonChange={ ( artistValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { artist: artistValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Album' ) }\n\t\t\t\t\t\tvalue={ album ? stripHTML( album ) : '' }\n\t\t\t\t\t\tonChange={ ( albumValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { album: albumValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Title' ) }\n\t\t\t\t\t\tvalue={ title ? stripHTML( title ) : '' }\n\t\t\t\t\t\tonChange={ ( titleValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { title: titleValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t<BaseControl>\n\t\t\t\t\t\t\t<BaseControl.VisualLabel>\n\t\t\t\t\t\t\t\t{ __( 'Track image' ) }\n\t\t\t\t\t\t\t</BaseControl.VisualLabel>\n\t\t\t\t\t\t\t<div className=\"editor-video-poster-control\">\n\t\t\t\t\t\t\t\t{ !! image && (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={ image }\n\t\t\t\t\t\t\t\t\t\talt={ __(\n\t\t\t\t\t\t\t\t\t\t\t'Preview of the track image'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\t\t\t\ttitle={ __( 'Select image' ) }\n\t\t\t\t\t\t\t\t\tonSelect={ onSelectTrackImage }\n\t\t\t\t\t\t\t\t\tallowedTypes={\n\t\t\t\t\t\t\t\t\t\tTRACK_IMAGE_ALLOWED_MEDIA_TYPES\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\t\t\tref={ imageButton }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ ! image\n\t\t\t\t\t\t\t\t\t\t\t\t? __( 'Select' )\n\t\t\t\t\t\t\t\t\t\t\t\t: __( 'Replace' ) }\n\t\t\t\t\t\t\t\t\t\t</Button>\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\t{ !! image && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\t\tonClick={ onRemoveTrackImage }\n\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</BaseControl>\n\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t\t{ !! image && (\n\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tvalue={ imageAlt || '' }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { imageAlt: value } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\topenInNewTab\n\t\t\t\t\t\t\t\t\thref={\n\t\t\t\t\t\t\t\t\t\t// translators: Localized tutorial, if one exists. W3C Web Accessibility Initiative link has list of existing translations.\n\t\t\t\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t\t\t\t'https://www.w3.org/WAI/tutorials/images/decision-tree/'\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</Link>\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</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<li { ...blockProps }>\n\t\t\t\t{ !! temporaryURL && <Spinner /> }\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"wp-block-playlist-track__button\"\n\t\t\t\t\tonClick={ () => setCurrentTrackClientId( clientId ) }\n\t\t\t\t\taria-current={\n\t\t\t\t\t\tcurrentTrackClientId === clientId ? 'true' : 'false'\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ showImages && !! image && (\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tclassName=\"wp-block-playlist-track__image\"\n\t\t\t\t\t\t\tsrc={ image }\n\t\t\t\t\t\t\talt={ imageAlt || '' }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t<span className=\"wp-block-playlist-track__content\">\n\t\t\t\t\t\t<PlainText\n\t\t\t\t\t\t\ttagName=\"span\"\n\t\t\t\t\t\t\tclassName=\"wp-block-playlist-track__title\"\n\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t\tplaceholder={ __( 'Add title' ) }\n\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\tsetAttributes( { title: value } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t__experimentalVersion={ 2 }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ showArtists && (\n\t\t\t\t\t\t\t<PlainText\n\t\t\t\t\t\t\t\ttagName=\"span\"\n\t\t\t\t\t\t\t\tclassName=\"wp-block-playlist-track__artist\"\n\t\t\t\t\t\t\t\tvalue={ artist }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'Add artist' ) }\n\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( { artist: value } )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t__experimentalVersion={ 2 }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"wp-block-playlist-track__length\">\n\t\t\t\t\t\t{ length && (\n\t\t\t\t\t\t\t<span className=\"screen-reader-text\">\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t/* translators: Visually hidden label for the track duration (screen reader text). */\n\t\t\t\t\t\t\t\t\t__( 'Duration:' )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ length }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"screen-reader-text\">{ __( 'Play' ) }</span>\n\t\t\t\t</button>\n\t\t\t</li>\n\t\t</>\n\t);\n};\n\nexport default PlaylistTrackEdit;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,7 @@
1
1
  // packages/block-library/src/post-content/edit.js
2
2
  import { __ } from "@wordpress/i18n";
3
3
  import {
4
+ InnerBlocks,
4
5
  InspectorControls,
5
6
  useBlockProps,
6
7
  useInnerBlocksProps,
@@ -56,6 +57,23 @@ function ReadOnlyContent({
56
57
  }
57
58
  );
58
59
  }
60
+ function EditableContentLoaded({
61
+ blockProps,
62
+ blocks,
63
+ onInput,
64
+ onChange,
65
+ tagName: TagName = "div"
66
+ }) {
67
+ const props = useInnerBlocksProps(blockProps, {
68
+ value: blocks,
69
+ onInput,
70
+ onChange,
71
+ // Show a writing prompt for empty content, even when the block
72
+ // is not selected, so the content area remains discoverable.
73
+ renderAppender: blocks?.length ? void 0 : InnerBlocks.DefaultBlockAppender
74
+ });
75
+ return /* @__PURE__ */ jsx(TagName, { ...props });
76
+ }
59
77
  function EditableContent({ context = {}, tagName: TagName = "div" }) {
60
78
  const { postType, postId } = context;
61
79
  const [blocks, onInput, onChange] = useEntityBlockEditor(
@@ -63,28 +81,32 @@ function EditableContent({ context = {}, tagName: TagName = "div" }) {
63
81
  postType,
64
82
  { id: postId }
65
83
  );
66
- const entityRecord = useSelect(
67
- (select) => {
68
- return select(coreStore).getEntityRecord(
69
- "postType",
70
- postType,
71
- postId
72
- );
73
- },
84
+ const hasLoadedRecord = useSelect(
85
+ (select) => select(coreStore).getEntityRecord(
86
+ "postType",
87
+ postType,
88
+ postId
89
+ ) !== void 0 || select(coreStore).hasFinishedResolution("getEntityRecord", [
90
+ "postType",
91
+ postType,
92
+ postId
93
+ ]),
74
94
  [postType, postId]
75
95
  );
76
- const hasInnerBlocks = !!entityRecord?.content?.raw || blocks?.length;
77
- const initialInnerBlocks = [["core/paragraph"]];
78
- const props = useInnerBlocksProps(
79
- useBlockProps({ className: "entry-content" }),
96
+ const blockProps = useBlockProps({ className: "entry-content" });
97
+ if (!hasLoadedRecord) {
98
+ return /* @__PURE__ */ jsx(TagName, { ...blockProps });
99
+ }
100
+ return /* @__PURE__ */ jsx(
101
+ EditableContentLoaded,
80
102
  {
81
- value: blocks,
103
+ blockProps,
104
+ blocks,
82
105
  onInput,
83
106
  onChange,
84
- template: !hasInnerBlocks ? initialInnerBlocks : void 0
107
+ tagName: TagName
85
108
  }
86
109
  );
87
- return /* @__PURE__ */ jsx(TagName, { ...props });
88
110
  }
89
111
  function Content(props) {
90
112
  const {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/post-content/edit.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tInspectorControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tRecursionProvider,\n\tuseHasRecursion,\n\tWarning,\n\tprivateApis as blockEditorPrivateApis,\n\t__experimentalUseBlockPreview as useBlockPreview,\n} from '@wordpress/block-editor';\nimport { parse } from '@wordpress/blocks';\nimport {\n\tuseEntityProp,\n\tuseEntityBlockEditor,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useCanEditEntity } from '../utils/hooks';\nimport { unlock } from '../lock-unlock';\n\nconst { HTMLElementControl } = unlock( blockEditorPrivateApis );\n\nfunction ReadOnlyContent( {\n\tparentLayout,\n\tlayoutClassNames,\n\tuserCanEdit,\n\tpostType,\n\tpostId,\n\ttagName: TagName = 'div',\n} ) {\n\tconst [ , , content ] = useEntityProp(\n\t\t'postType',\n\t\tpostType,\n\t\t'content',\n\t\tpostId\n\t);\n\tconst blockProps = useBlockProps( { className: layoutClassNames } );\n\tconst blocks = useMemo( () => {\n\t\treturn content?.raw ? parse( content.raw ) : [];\n\t}, [ content?.raw ] );\n\tconst blockPreviewProps = useBlockPreview( {\n\t\tblocks,\n\t\tprops: blockProps,\n\t\tlayout: parentLayout,\n\t} );\n\n\tif ( userCanEdit ) {\n\t\t/*\n\t\t * Rendering the block preview using the raw content blocks allows for\n\t\t * block support styles to be generated and applied by the editor.\n\t\t *\n\t\t * The preview using the raw blocks can only be presented to users with\n\t\t * edit permissions for the post to prevent potential exposure of private\n\t\t * block content.\n\t\t */\n\t\treturn <div { ...blockPreviewProps }></div>;\n\t}\n\n\treturn content?.protected ? (\n\t\t<TagName { ...blockProps }>\n\t\t\t<Warning>{ __( 'This content is password protected.' ) }</Warning>\n\t\t</TagName>\n\t) : (\n\t\t<TagName\n\t\t\t{ ...blockProps }\n\t\t\tdangerouslySetInnerHTML={ { __html: content?.rendered } }\n\t\t></TagName>\n\t);\n}\n\nfunction EditableContent( { context = {}, tagName: TagName = 'div' } ) {\n\tconst { postType, postId } = context;\n\n\tconst [ blocks, onInput, onChange ] = useEntityBlockEditor(\n\t\t'postType',\n\t\tpostType,\n\t\t{ id: postId }\n\t);\n\n\tconst entityRecord = useSelect(\n\t\t( select ) => {\n\t\t\treturn select( coreStore ).getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\tpostId\n\t\t\t);\n\t\t},\n\t\t[ postType, postId ]\n\t);\n\n\tconst hasInnerBlocks = !! entityRecord?.content?.raw || blocks?.length;\n\n\tconst initialInnerBlocks = [ [ 'core/paragraph' ] ];\n\n\tconst props = useInnerBlocksProps(\n\t\tuseBlockProps( { className: 'entry-content' } ),\n\t\t{\n\t\t\tvalue: blocks,\n\t\t\tonInput,\n\t\t\tonChange,\n\t\t\ttemplate: ! hasInnerBlocks ? initialInnerBlocks : undefined,\n\t\t}\n\t);\n\treturn <TagName { ...props } />;\n}\n\nfunction Content( props ) {\n\tconst {\n\t\tcontext: { queryId, postType, postId } = {},\n\t\tlayoutClassNames,\n\t\ttagName,\n\t} = props;\n\tconst userCanEdit = useCanEditEntity( 'postType', postType, postId );\n\tif ( userCanEdit === undefined ) {\n\t\treturn null;\n\t}\n\n\tconst isDescendentOfQueryLoop = Number.isFinite( queryId );\n\tconst isEditable = userCanEdit && ! isDescendentOfQueryLoop;\n\n\treturn isEditable ? (\n\t\t<EditableContent { ...props } />\n\t) : (\n\t\t<ReadOnlyContent\n\t\t\tparentLayout={ props.parentLayout }\n\t\t\tlayoutClassNames={ layoutClassNames }\n\t\t\tuserCanEdit={ userCanEdit }\n\t\t\tpostType={ postType }\n\t\t\tpostId={ postId }\n\t\t\ttagName={ tagName }\n\t\t/>\n\t);\n}\n\nfunction Placeholder( { layoutClassNames } ) {\n\tconst blockProps = useBlockProps( { className: layoutClassNames } );\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'This is the Content block, it will display all the blocks in any single post or page.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'That might be a simple arrangement like consecutive paragraphs in a blog post, or a more elaborate composition that includes image galleries, videos, tables, columns, and any other block types.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'If there are any Custom Post Types registered at your site, the Content block can display the contents of those entries as well.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t</div>\n\t);\n}\n\nfunction RecursionError() {\n\tconst blockProps = useBlockProps();\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<Warning>\n\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t</Warning>\n\t\t</div>\n\t);\n}\n\n/**\n * Render inspector controls for the PostContent block.\n *\n * @param {Object} props Component props.\n * @param {string} props.tagName The HTML tag name.\n * @param {Function} props.onSelectTagName onChange function for the SelectControl.\n * @param {string} props.clientId The client ID of the current block.\n *\n * @return {React.JSX.Element} The control group.\n */\nfunction PostContentEditControls( { tagName, onSelectTagName, clientId } ) {\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<HTMLElementControl\n\t\t\t\ttagName={ tagName }\n\t\t\t\tonChange={ onSelectTagName }\n\t\t\t\tclientId={ clientId }\n\t\t\t\toptions={ [\n\t\t\t\t\t{ label: __( 'Default (<div>)' ), value: 'div' },\n\t\t\t\t\t{ label: '<main>', value: 'main' },\n\t\t\t\t\t{ label: '<section>', value: 'section' },\n\t\t\t\t\t{ label: '<article>', value: 'article' },\n\t\t\t\t] }\n\t\t\t/>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default function PostContentEdit( {\n\tcontext,\n\tattributes: { tagName = 'div' },\n\tsetAttributes,\n\tclientId,\n\t__unstableLayoutClassNames: layoutClassNames,\n\t__unstableParentLayout: parentLayout,\n} ) {\n\tconst { postId: contextPostId, postType: contextPostType } = context;\n\tconst hasAlreadyRendered = useHasRecursion( contextPostId );\n\n\tif ( contextPostId && contextPostType && hasAlreadyRendered ) {\n\t\treturn <RecursionError />;\n\t}\n\n\tconst handleSelectTagName = ( value ) => {\n\t\tsetAttributes( { tagName: value } );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PostContentEditControls\n\t\t\t\ttagName={ tagName }\n\t\t\t\tonSelectTagName={ handleSelectTagName }\n\t\t\t\tclientId={ clientId }\n\t\t\t/>\n\t\t\t<RecursionProvider uniqueId={ contextPostId }>\n\t\t\t\t{ contextPostId && contextPostType ? (\n\t\t\t\t\t<Content\n\t\t\t\t\t\tcontext={ context }\n\t\t\t\t\t\tparentLayout={ parentLayout }\n\t\t\t\t\t\tlayoutClassNames={ layoutClassNames }\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<Placeholder layoutClassNames={ layoutClassNames } />\n\t\t\t\t) }\n\t\t\t</RecursionProvider>\n\t\t</>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tInnerBlocks,\n\tInspectorControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tRecursionProvider,\n\tuseHasRecursion,\n\tWarning,\n\tprivateApis as blockEditorPrivateApis,\n\t__experimentalUseBlockPreview as useBlockPreview,\n} from '@wordpress/block-editor';\nimport { parse } from '@wordpress/blocks';\nimport {\n\tuseEntityProp,\n\tuseEntityBlockEditor,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useCanEditEntity } from '../utils/hooks';\nimport { unlock } from '../lock-unlock';\n\nconst { HTMLElementControl } = unlock( blockEditorPrivateApis );\n\nfunction ReadOnlyContent( {\n\tparentLayout,\n\tlayoutClassNames,\n\tuserCanEdit,\n\tpostType,\n\tpostId,\n\ttagName: TagName = 'div',\n} ) {\n\tconst [ , , content ] = useEntityProp(\n\t\t'postType',\n\t\tpostType,\n\t\t'content',\n\t\tpostId\n\t);\n\tconst blockProps = useBlockProps( { className: layoutClassNames } );\n\tconst blocks = useMemo( () => {\n\t\treturn content?.raw ? parse( content.raw ) : [];\n\t}, [ content?.raw ] );\n\tconst blockPreviewProps = useBlockPreview( {\n\t\tblocks,\n\t\tprops: blockProps,\n\t\tlayout: parentLayout,\n\t} );\n\n\tif ( userCanEdit ) {\n\t\t/*\n\t\t * Rendering the block preview using the raw content blocks allows for\n\t\t * block support styles to be generated and applied by the editor.\n\t\t *\n\t\t * The preview using the raw blocks can only be presented to users with\n\t\t * edit permissions for the post to prevent potential exposure of private\n\t\t * block content.\n\t\t */\n\t\treturn <div { ...blockPreviewProps }></div>;\n\t}\n\n\treturn content?.protected ? (\n\t\t<TagName { ...blockProps }>\n\t\t\t<Warning>{ __( 'This content is password protected.' ) }</Warning>\n\t\t</TagName>\n\t) : (\n\t\t<TagName\n\t\t\t{ ...blockProps }\n\t\t\tdangerouslySetInnerHTML={ { __html: content?.rendered } }\n\t\t></TagName>\n\t);\n}\n\nfunction EditableContentLoaded( {\n\tblockProps,\n\tblocks,\n\tonInput,\n\tonChange,\n\ttagName: TagName = 'div',\n} ) {\n\tconst props = useInnerBlocksProps( blockProps, {\n\t\tvalue: blocks,\n\t\tonInput,\n\t\tonChange,\n\t\t// Show a writing prompt for empty content, even when the block\n\t\t// is not selected, so the content area remains discoverable.\n\t\trenderAppender: blocks?.length\n\t\t\t? undefined\n\t\t\t: InnerBlocks.DefaultBlockAppender,\n\t} );\n\treturn <TagName { ...props } />;\n}\n\nfunction EditableContent( { context = {}, tagName: TagName = 'div' } ) {\n\tconst { postType, postId } = context;\n\n\tconst [ blocks, onInput, onChange ] = useEntityBlockEditor(\n\t\t'postType',\n\t\tpostType,\n\t\t{ id: postId }\n\t);\n\n\t// Wait for the entity record before mounting the inner blocks area, so\n\t// that an empty `blocks` value means an empty post rather than one that\n\t// has not loaded yet.\n\tconst hasLoadedRecord = useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreStore ).getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\tpostId\n\t\t\t) !== undefined ||\n\t\t\tselect( coreStore ).hasFinishedResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\tpostId,\n\t\t\t] ),\n\t\t[ postType, postId ]\n\t);\n\n\tconst blockProps = useBlockProps( { className: 'entry-content' } );\n\n\tif ( ! hasLoadedRecord ) {\n\t\treturn <TagName { ...blockProps } />;\n\t}\n\n\treturn (\n\t\t<EditableContentLoaded\n\t\t\tblockProps={ blockProps }\n\t\t\tblocks={ blocks }\n\t\t\tonInput={ onInput }\n\t\t\tonChange={ onChange }\n\t\t\ttagName={ TagName }\n\t\t/>\n\t);\n}\n\nfunction Content( props ) {\n\tconst {\n\t\tcontext: { queryId, postType, postId } = {},\n\t\tlayoutClassNames,\n\t\ttagName,\n\t} = props;\n\tconst userCanEdit = useCanEditEntity( 'postType', postType, postId );\n\tif ( userCanEdit === undefined ) {\n\t\treturn null;\n\t}\n\n\tconst isDescendentOfQueryLoop = Number.isFinite( queryId );\n\tconst isEditable = userCanEdit && ! isDescendentOfQueryLoop;\n\n\treturn isEditable ? (\n\t\t<EditableContent { ...props } />\n\t) : (\n\t\t<ReadOnlyContent\n\t\t\tparentLayout={ props.parentLayout }\n\t\t\tlayoutClassNames={ layoutClassNames }\n\t\t\tuserCanEdit={ userCanEdit }\n\t\t\tpostType={ postType }\n\t\t\tpostId={ postId }\n\t\t\ttagName={ tagName }\n\t\t/>\n\t);\n}\n\nfunction Placeholder( { layoutClassNames } ) {\n\tconst blockProps = useBlockProps( { className: layoutClassNames } );\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'This is the Content block, it will display all the blocks in any single post or page.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'That might be a simple arrangement like consecutive paragraphs in a blog post, or a more elaborate composition that includes image galleries, videos, tables, columns, and any other block types.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'If there are any Custom Post Types registered at your site, the Content block can display the contents of those entries as well.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t</div>\n\t);\n}\n\nfunction RecursionError() {\n\tconst blockProps = useBlockProps();\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<Warning>\n\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t</Warning>\n\t\t</div>\n\t);\n}\n\n/**\n * Render inspector controls for the PostContent block.\n *\n * @param {Object} props Component props.\n * @param {string} props.tagName The HTML tag name.\n * @param {Function} props.onSelectTagName onChange function for the SelectControl.\n * @param {string} props.clientId The client ID of the current block.\n *\n * @return {React.JSX.Element} The control group.\n */\nfunction PostContentEditControls( { tagName, onSelectTagName, clientId } ) {\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<HTMLElementControl\n\t\t\t\ttagName={ tagName }\n\t\t\t\tonChange={ onSelectTagName }\n\t\t\t\tclientId={ clientId }\n\t\t\t\toptions={ [\n\t\t\t\t\t{ label: __( 'Default (<div>)' ), value: 'div' },\n\t\t\t\t\t{ label: '<main>', value: 'main' },\n\t\t\t\t\t{ label: '<section>', value: 'section' },\n\t\t\t\t\t{ label: '<article>', value: 'article' },\n\t\t\t\t] }\n\t\t\t/>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default function PostContentEdit( {\n\tcontext,\n\tattributes: { tagName = 'div' },\n\tsetAttributes,\n\tclientId,\n\t__unstableLayoutClassNames: layoutClassNames,\n\t__unstableParentLayout: parentLayout,\n} ) {\n\tconst { postId: contextPostId, postType: contextPostType } = context;\n\tconst hasAlreadyRendered = useHasRecursion( contextPostId );\n\n\tif ( contextPostId && contextPostType && hasAlreadyRendered ) {\n\t\treturn <RecursionError />;\n\t}\n\n\tconst handleSelectTagName = ( value ) => {\n\t\tsetAttributes( { tagName: value } );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PostContentEditControls\n\t\t\t\ttagName={ tagName }\n\t\t\t\tonSelectTagName={ handleSelectTagName }\n\t\t\t\tclientId={ clientId }\n\t\t\t/>\n\t\t\t<RecursionProvider uniqueId={ contextPostId }>\n\t\t\t\t{ contextPostId && contextPostType ? (\n\t\t\t\t\t<Content\n\t\t\t\t\t\tcontext={ context }\n\t\t\t\t\t\tparentLayout={ parentLayout }\n\t\t\t\t\t\tlayoutClassNames={ layoutClassNames }\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<Placeholder layoutClassNames={ layoutClassNames } />\n\t\t\t\t) }\n\t\t\t</RecursionProvider>\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -145,6 +145,7 @@ function PostFeaturedImageEdit({
145
145
  const borderProps = useBorderProps(attributes);
146
146
  const shadowProps = getShadowClassesAndStyles(attributes);
147
147
  const blockEditingMode = useBlockEditingMode();
148
+ const aspectRatioStyle = aspectRatio === "auto" ? void 0 : aspectRatio;
148
149
  const placeholder = (content) => {
149
150
  return /* @__PURE__ */ jsx(
150
151
  Placeholder,
@@ -155,7 +156,7 @@ function PostFeaturedImageEdit({
155
156
  ),
156
157
  withIllustration: true,
157
158
  style: {
158
- aspectRatio,
159
+ aspectRatio: aspectRatioStyle,
159
160
  height: hasDimensionValue(height) ? height : hasDimensionValue(width) && "auto",
160
161
  width: hasDimensionValue(width) ? width : !!aspectRatio && "100%",
161
162
  ...borderProps.style,
@@ -351,7 +352,7 @@ function PostFeaturedImageEdit({
351
352
  const imageStyles = {
352
353
  ...borderProps.style,
353
354
  ...shadowProps.style,
354
- aspectRatio,
355
+ aspectRatio: aspectRatioStyle,
355
356
  height: hasDimensionValue(height) ? height : hasDimensionValue(width) && "auto",
356
357
  width: hasDimensionValue(width) ? width : !!aspectRatio && "100%",
357
358
  objectFit: !!(height || aspectRatio) && scale