@wordpress/block-library 10.1.1-next.v.202607070741.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 (580) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/build/accordion/block.json +1 -0
  3. package/build/accordion-panel/block.json +1 -0
  4. package/build/button/edit.cjs +18 -8
  5. package/build/button/edit.cjs.map +2 -2
  6. package/build/code/edit.cjs +3 -1
  7. package/build/code/edit.cjs.map +2 -2
  8. package/build/cover/block.json +12 -0
  9. package/build/cover/edit/block-controls.cjs +14 -5
  10. package/build/cover/edit/block-controls.cjs.map +2 -2
  11. package/build/cover/edit/embed-video-url-input.cjs +5 -3
  12. package/build/cover/edit/embed-video-url-input.cjs.map +3 -3
  13. package/build/cover/edit/index.cjs +76 -32
  14. package/build/cover/edit/index.cjs.map +2 -2
  15. package/build/cover/embed-video-utils.cjs +17 -7
  16. package/build/cover/embed-video-utils.cjs.map +2 -2
  17. package/build/details/transforms.cjs +1 -3
  18. package/build/details/transforms.cjs.map +2 -2
  19. package/build/embed/edit.cjs +1 -1
  20. package/build/embed/edit.cjs.map +2 -2
  21. package/build/embed/embed-placeholder.cjs +1 -2
  22. package/build/embed/embed-placeholder.cjs.map +2 -2
  23. package/build/file/edit.cjs +4 -3
  24. package/build/file/edit.cjs.map +2 -2
  25. package/build/file/transforms.cjs +25 -60
  26. package/build/file/transforms.cjs.map +2 -2
  27. package/build/gallery/block.json +4 -2
  28. package/build/gallery/dynamic-gallery.cjs +104 -61
  29. package/build/gallery/dynamic-gallery.cjs.map +3 -3
  30. package/build/gallery/edit.cjs +1 -1
  31. package/build/gallery/edit.cjs.map +3 -3
  32. package/build/gallery/gap-styles.cjs +49 -13
  33. package/build/gallery/gap-styles.cjs.map +3 -3
  34. package/build/gallery/use-dynamic-gallery.cjs +15 -8
  35. package/build/gallery/use-dynamic-gallery.cjs.map +2 -2
  36. package/build/group/transforms.cjs +1 -1
  37. package/build/group/transforms.cjs.map +2 -2
  38. package/build/heading/edit.cjs +1 -1
  39. package/build/heading/edit.cjs.map +2 -2
  40. package/build/html/modal.cjs +63 -54
  41. package/build/html/modal.cjs.map +3 -3
  42. package/build/icon/block.json +5 -3
  43. package/build/icon/components/custom-inserter/icon-grid.cjs +25 -12
  44. package/build/icon/components/custom-inserter/icon-grid.cjs.map +2 -2
  45. package/build/icon/components/custom-inserter/index.cjs +100 -31
  46. package/build/icon/components/custom-inserter/index.cjs.map +3 -3
  47. package/build/icon/edit.cjs +11 -12
  48. package/build/icon/edit.cjs.map +2 -2
  49. package/build/image/block.json +1 -1
  50. package/build/image/edit.cjs +1 -35
  51. package/build/image/edit.cjs.map +2 -2
  52. package/build/image/image.cjs +23 -18
  53. package/build/image/image.cjs.map +3 -3
  54. package/build/image/transforms.cjs +78 -0
  55. package/build/image/transforms.cjs.map +3 -3
  56. package/build/image/use-open-image-media-editor-modal.cjs +6 -2
  57. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  58. package/build/index.cjs +18 -8
  59. package/build/index.cjs.map +2 -2
  60. package/build/latest-posts/edit.cjs +5 -8
  61. package/build/latest-posts/edit.cjs.map +2 -2
  62. package/build/list-item/edit.cjs +1 -1
  63. package/build/list-item/edit.cjs.map +2 -2
  64. package/build/list-item/hooks/use-enter.cjs +14 -17
  65. package/build/list-item/hooks/use-enter.cjs.map +3 -3
  66. package/build/list-item/hooks/use-indent-list-item.cjs +10 -2
  67. package/build/list-item/hooks/use-indent-list-item.cjs.map +2 -2
  68. package/build/list-item/hooks/use-space.cjs +3 -2
  69. package/build/list-item/hooks/use-space.cjs.map +3 -3
  70. package/build/math/edit.cjs +39 -56
  71. package/build/math/edit.cjs.map +3 -3
  72. package/build/media-text/edit.cjs +2 -1
  73. package/build/media-text/edit.cjs.map +2 -2
  74. package/build/more/edit.cjs +2 -2
  75. package/build/more/edit.cjs.map +2 -2
  76. package/build/navigation/edit/index.cjs +30 -16
  77. package/build/navigation/edit/index.cjs.map +3 -3
  78. package/build/navigation/edit/use-layout-custom-properties.cjs +72 -0
  79. package/build/navigation/edit/use-layout-custom-properties.cjs.map +7 -0
  80. package/build/navigation/view.cjs +9 -6
  81. package/build/navigation/view.cjs.map +2 -2
  82. package/build/navigation-link/edit.cjs +3 -3
  83. package/build/navigation-link/edit.cjs.map +2 -2
  84. package/build/navigation-link/link-ui/index.cjs +2 -2
  85. package/build/navigation-link/link-ui/index.cjs.map +2 -2
  86. package/build/paragraph/edit.cjs +5 -2
  87. package/build/paragraph/edit.cjs.map +3 -3
  88. package/build/paragraph/index.cjs +4 -1
  89. package/build/paragraph/index.cjs.map +2 -2
  90. package/build/paragraph/use-enter.cjs +3 -7
  91. package/build/paragraph/use-enter.cjs.map +3 -3
  92. package/build/playlist/block.json +29 -10
  93. package/build/playlist/context.cjs +2 -1
  94. package/build/playlist/context.cjs.map +2 -2
  95. package/build/playlist/edit.cjs +328 -39
  96. package/build/playlist/edit.cjs.map +3 -3
  97. package/build/playlist/index.cjs +1 -1
  98. package/build/playlist/index.cjs.map +2 -2
  99. package/build/playlist/utils.cjs +37 -8
  100. package/build/playlist/utils.cjs.map +2 -2
  101. package/build/playlist/view.cjs +83 -13
  102. package/build/playlist/view.cjs.map +2 -2
  103. package/build/playlist-track/block.json +4 -2
  104. package/build/playlist-track/edit.cjs +115 -70
  105. package/build/playlist-track/edit.cjs.map +2 -2
  106. package/build/post-content/block.json +1 -0
  107. package/build/post-content/edit.cjs +36 -15
  108. package/build/post-content/edit.cjs.map +2 -2
  109. package/build/post-featured-image/edit.cjs +3 -2
  110. package/build/post-featured-image/edit.cjs.map +2 -2
  111. package/build/post-template/block.json +2 -1
  112. package/build/post-template/edit.cjs +10 -1
  113. package/build/post-template/edit.cjs.map +2 -2
  114. package/build/post-terms/edit.cjs +2 -2
  115. package/build/post-terms/edit.cjs.map +2 -2
  116. package/build/post-title/edit.cjs +2 -2
  117. package/build/post-title/edit.cjs.map +2 -2
  118. package/build/preformatted/edit.cjs +3 -1
  119. package/build/preformatted/edit.cjs.map +2 -2
  120. package/build/pullquote/block.json +3 -1
  121. package/build/pullquote/edit.cjs +5 -3
  122. package/build/pullquote/edit.cjs.map +2 -2
  123. package/build/query/block.json +3 -2
  124. package/build/query/edit/inspector-controls/index.cjs +42 -5
  125. package/build/query/edit/inspector-controls/index.cjs.map +2 -2
  126. package/build/query/edit/inspector-controls/offset-controls.cjs +1 -2
  127. package/build/query/edit/inspector-controls/offset-controls.cjs.map +2 -2
  128. package/build/query/edit/inspector-controls/pages-control.cjs +0 -1
  129. package/build/query/edit/inspector-controls/pages-control.cjs.map +2 -2
  130. package/build/query/edit/query-content.cjs +10 -3
  131. package/build/query/edit/query-content.cjs.map +2 -2
  132. package/build/query/index.cjs +2 -1
  133. package/build/query/index.cjs.map +2 -2
  134. package/build/quote/block.json +3 -1
  135. package/build/quote/transforms.cjs +1 -3
  136. package/build/quote/transforms.cjs.map +2 -2
  137. package/build/read-more/edit.cjs +3 -1
  138. package/build/read-more/edit.cjs.map +2 -2
  139. package/build/rss/edit.cjs +0 -1
  140. package/build/rss/edit.cjs.map +2 -2
  141. package/build/site-tagline/edit.cjs +3 -1
  142. package/build/site-tagline/edit.cjs.map +2 -2
  143. package/build/site-title/edit.cjs +3 -1
  144. package/build/site-title/edit.cjs.map +2 -2
  145. package/build/social-links/edit.cjs +11 -4
  146. package/build/social-links/edit.cjs.map +2 -2
  147. package/build/tab-list/block.json +4 -3
  148. package/build/tab-list/edit.cjs +67 -11
  149. package/build/tab-list/edit.cjs.map +3 -3
  150. package/build/tab-list/tab-movers.cjs +87 -0
  151. package/build/tab-list/tab-movers.cjs.map +7 -0
  152. package/build/tab-panel/block.json +1 -6
  153. package/build/tab-panel/edit.cjs +16 -24
  154. package/build/tab-panel/edit.cjs.map +2 -2
  155. package/build/tab-panels/block.json +0 -1
  156. package/build/table/edit.cjs +1 -1
  157. package/build/table/edit.cjs.map +2 -2
  158. package/build/tabs/block.json +0 -5
  159. package/build/tabs/edit.cjs +4 -39
  160. package/build/tabs/edit.cjs.map +3 -3
  161. package/build/tabs/use-tab-actions.cjs +23 -1
  162. package/build/tabs/use-tab-actions.cjs.map +2 -2
  163. package/build/tabs/use-tab-list-items-sync.cjs +19 -1
  164. package/build/tabs/use-tab-list-items-sync.cjs.map +2 -2
  165. package/build/term-name/block.json +1 -3
  166. package/build/term-name/deprecated.cjs +105 -0
  167. package/build/term-name/deprecated.cjs.map +7 -0
  168. package/build/term-name/edit.cjs +11 -37
  169. package/build/term-name/edit.cjs.map +3 -3
  170. package/build/term-name/index.cjs +3 -1
  171. package/build/term-name/index.cjs.map +3 -3
  172. package/build/utils/caption.cjs +2 -2
  173. package/build/utils/caption.cjs.map +2 -2
  174. package/build/utils/waveform-player.cjs +138 -22
  175. package/build/utils/waveform-player.cjs.map +2 -2
  176. package/build/utils/waveform-utils.cjs +315 -17
  177. package/build/utils/waveform-utils.cjs.map +2 -2
  178. package/build/verse/edit.cjs +3 -1
  179. package/build/verse/edit.cjs.map +2 -2
  180. package/build/video/edit.cjs +2 -11
  181. package/build/video/edit.cjs.map +3 -3
  182. package/build/video/tracks-editor.cjs +0 -1
  183. package/build/video/tracks-editor.cjs.map +2 -2
  184. package/build-module/accordion/block.json +1 -0
  185. package/build-module/accordion-panel/block.json +1 -0
  186. package/build-module/button/edit.mjs +19 -14
  187. package/build-module/button/edit.mjs.map +2 -2
  188. package/build-module/code/edit.mjs +3 -1
  189. package/build-module/code/edit.mjs.map +2 -2
  190. package/build-module/cover/block.json +12 -0
  191. package/build-module/cover/edit/block-controls.mjs +14 -5
  192. package/build-module/cover/edit/block-controls.mjs.map +2 -2
  193. package/build-module/cover/edit/embed-video-url-input.mjs +5 -4
  194. package/build-module/cover/edit/embed-video-url-input.mjs.map +2 -2
  195. package/build-module/cover/edit/index.mjs +79 -35
  196. package/build-module/cover/edit/index.mjs.map +2 -2
  197. package/build-module/cover/embed-video-utils.mjs +16 -7
  198. package/build-module/cover/embed-video-utils.mjs.map +2 -2
  199. package/build-module/details/transforms.mjs +2 -7
  200. package/build-module/details/transforms.mjs.map +2 -2
  201. package/build-module/embed/edit.mjs +1 -1
  202. package/build-module/embed/edit.mjs.map +2 -2
  203. package/build-module/embed/embed-placeholder.mjs +1 -2
  204. package/build-module/embed/embed-placeholder.mjs.map +2 -2
  205. package/build-module/file/edit.mjs +4 -3
  206. package/build-module/file/edit.mjs.map +2 -2
  207. package/build-module/file/transforms.mjs +25 -60
  208. package/build-module/file/transforms.mjs.map +2 -2
  209. package/build-module/gallery/block.json +4 -2
  210. package/build-module/gallery/dynamic-gallery.mjs +104 -61
  211. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  212. package/build-module/gallery/edit.mjs +3 -3
  213. package/build-module/gallery/edit.mjs.map +2 -2
  214. package/build-module/gallery/gap-styles.mjs +53 -14
  215. package/build-module/gallery/gap-styles.mjs.map +2 -2
  216. package/build-module/gallery/use-dynamic-gallery.mjs +16 -9
  217. package/build-module/gallery/use-dynamic-gallery.mjs.map +2 -2
  218. package/build-module/group/transforms.mjs +2 -5
  219. package/build-module/group/transforms.mjs.map +2 -2
  220. package/build-module/heading/edit.mjs +1 -1
  221. package/build-module/heading/edit.mjs.map +2 -2
  222. package/build-module/html/modal.mjs +68 -55
  223. package/build-module/html/modal.mjs.map +2 -2
  224. package/build-module/icon/block.json +5 -3
  225. package/build-module/icon/components/custom-inserter/icon-grid.mjs +25 -12
  226. package/build-module/icon/components/custom-inserter/icon-grid.mjs.map +2 -2
  227. package/build-module/icon/components/custom-inserter/index.mjs +102 -33
  228. package/build-module/icon/components/custom-inserter/index.mjs.map +2 -2
  229. package/build-module/icon/edit.mjs +11 -12
  230. package/build-module/icon/edit.mjs.map +2 -2
  231. package/build-module/image/block.json +1 -1
  232. package/build-module/image/edit.mjs +1 -35
  233. package/build-module/image/edit.mjs.map +2 -2
  234. package/build-module/image/image.mjs +23 -18
  235. package/build-module/image/image.mjs.map +2 -2
  236. package/build-module/image/transforms.mjs +78 -0
  237. package/build-module/image/transforms.mjs.map +2 -2
  238. package/build-module/image/use-open-image-media-editor-modal.mjs +6 -2
  239. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  240. package/build-module/index.mjs +18 -8
  241. package/build-module/index.mjs.map +2 -2
  242. package/build-module/latest-posts/edit.mjs +5 -8
  243. package/build-module/latest-posts/edit.mjs.map +2 -2
  244. package/build-module/list-item/edit.mjs +1 -1
  245. package/build-module/list-item/edit.mjs.map +2 -2
  246. package/build-module/list-item/hooks/use-enter.mjs +15 -21
  247. package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
  248. package/build-module/list-item/hooks/use-indent-list-item.mjs +10 -2
  249. package/build-module/list-item/hooks/use-indent-list-item.mjs.map +2 -2
  250. package/build-module/list-item/hooks/use-space.mjs +4 -6
  251. package/build-module/list-item/hooks/use-space.mjs.map +2 -2
  252. package/build-module/math/edit.mjs +41 -60
  253. package/build-module/math/edit.mjs.map +2 -2
  254. package/build-module/media-text/edit.mjs +2 -1
  255. package/build-module/media-text/edit.mjs.map +2 -2
  256. package/build-module/more/edit.mjs +2 -2
  257. package/build-module/more/edit.mjs.map +2 -2
  258. package/build-module/navigation/edit/index.mjs +30 -16
  259. package/build-module/navigation/edit/index.mjs.map +2 -2
  260. package/build-module/navigation/edit/use-layout-custom-properties.mjs +51 -0
  261. package/build-module/navigation/edit/use-layout-custom-properties.mjs.map +7 -0
  262. package/build-module/navigation/view.mjs +9 -6
  263. package/build-module/navigation/view.mjs.map +2 -2
  264. package/build-module/navigation-link/edit.mjs +3 -3
  265. package/build-module/navigation-link/edit.mjs.map +2 -2
  266. package/build-module/navigation-link/link-ui/index.mjs +2 -2
  267. package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
  268. package/build-module/paragraph/edit.mjs +6 -2
  269. package/build-module/paragraph/edit.mjs.map +2 -2
  270. package/build-module/paragraph/index.mjs +4 -1
  271. package/build-module/paragraph/index.mjs.map +2 -2
  272. package/build-module/paragraph/use-enter.mjs +4 -11
  273. package/build-module/paragraph/use-enter.mjs.map +2 -2
  274. package/build-module/playlist/block.json +29 -10
  275. package/build-module/playlist/context.mjs +2 -1
  276. package/build-module/playlist/context.mjs.map +2 -2
  277. package/build-module/playlist/edit.mjs +331 -41
  278. package/build-module/playlist/edit.mjs.map +2 -2
  279. package/build-module/playlist/index.mjs +1 -1
  280. package/build-module/playlist/index.mjs.map +2 -2
  281. package/build-module/playlist/utils.mjs +35 -7
  282. package/build-module/playlist/utils.mjs.map +2 -2
  283. package/build-module/playlist/view.mjs +89 -14
  284. package/build-module/playlist/view.mjs.map +2 -2
  285. package/build-module/playlist-track/block.json +4 -2
  286. package/build-module/playlist-track/edit.mjs +117 -71
  287. package/build-module/playlist-track/edit.mjs.map +2 -2
  288. package/build-module/post-content/block.json +1 -0
  289. package/build-module/post-content/edit.mjs +37 -15
  290. package/build-module/post-content/edit.mjs.map +2 -2
  291. package/build-module/post-featured-image/edit.mjs +3 -2
  292. package/build-module/post-featured-image/edit.mjs.map +2 -2
  293. package/build-module/post-template/block.json +2 -1
  294. package/build-module/post-template/edit.mjs +10 -1
  295. package/build-module/post-template/edit.mjs.map +2 -2
  296. package/build-module/post-terms/edit.mjs +2 -2
  297. package/build-module/post-terms/edit.mjs.map +2 -2
  298. package/build-module/post-title/edit.mjs +2 -2
  299. package/build-module/post-title/edit.mjs.map +2 -2
  300. package/build-module/preformatted/edit.mjs +3 -1
  301. package/build-module/preformatted/edit.mjs.map +2 -2
  302. package/build-module/pullquote/block.json +3 -1
  303. package/build-module/pullquote/edit.mjs +5 -3
  304. package/build-module/pullquote/edit.mjs.map +2 -2
  305. package/build-module/query/block.json +3 -2
  306. package/build-module/query/edit/inspector-controls/index.mjs +44 -6
  307. package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
  308. package/build-module/query/edit/inspector-controls/offset-controls.mjs +2 -3
  309. package/build-module/query/edit/inspector-controls/offset-controls.mjs.map +2 -2
  310. package/build-module/query/edit/inspector-controls/pages-control.mjs +0 -1
  311. package/build-module/query/edit/inspector-controls/pages-control.mjs.map +2 -2
  312. package/build-module/query/edit/query-content.mjs +10 -3
  313. package/build-module/query/edit/query-content.mjs.map +2 -2
  314. package/build-module/query/index.mjs +2 -1
  315. package/build-module/query/index.mjs.map +2 -2
  316. package/build-module/quote/block.json +3 -1
  317. package/build-module/quote/transforms.mjs +2 -4
  318. package/build-module/quote/transforms.mjs.map +2 -2
  319. package/build-module/read-more/edit.mjs +3 -1
  320. package/build-module/read-more/edit.mjs.map +2 -2
  321. package/build-module/rss/edit.mjs +0 -1
  322. package/build-module/rss/edit.mjs.map +2 -2
  323. package/build-module/site-tagline/edit.mjs +3 -1
  324. package/build-module/site-tagline/edit.mjs.map +2 -2
  325. package/build-module/site-title/edit.mjs +3 -1
  326. package/build-module/site-title/edit.mjs.map +2 -2
  327. package/build-module/social-links/edit.mjs +11 -4
  328. package/build-module/social-links/edit.mjs.map +2 -2
  329. package/build-module/tab-list/block.json +4 -3
  330. package/build-module/tab-list/edit.mjs +74 -13
  331. package/build-module/tab-list/edit.mjs.map +2 -2
  332. package/build-module/tab-list/tab-movers.mjs +59 -0
  333. package/build-module/tab-list/tab-movers.mjs.map +7 -0
  334. package/build-module/tab-panel/block.json +1 -6
  335. package/build-module/tab-panel/edit.mjs +17 -25
  336. package/build-module/tab-panel/edit.mjs.map +2 -2
  337. package/build-module/tab-panels/block.json +0 -1
  338. package/build-module/table/edit.mjs +1 -1
  339. package/build-module/table/edit.mjs.map +2 -2
  340. package/build-module/tabs/block.json +0 -5
  341. package/build-module/tabs/edit.mjs +5 -45
  342. package/build-module/tabs/edit.mjs.map +2 -2
  343. package/build-module/tabs/use-tab-actions.mjs +23 -1
  344. package/build-module/tabs/use-tab-actions.mjs.map +2 -2
  345. package/build-module/tabs/use-tab-list-items-sync.mjs +19 -1
  346. package/build-module/tabs/use-tab-list-items-sync.mjs.map +2 -2
  347. package/build-module/term-name/block.json +1 -3
  348. package/build-module/term-name/deprecated.mjs +74 -0
  349. package/build-module/term-name/deprecated.mjs.map +7 -0
  350. package/build-module/term-name/edit.mjs +11 -28
  351. package/build-module/term-name/edit.mjs.map +2 -2
  352. package/build-module/term-name/index.mjs +3 -1
  353. package/build-module/term-name/index.mjs.map +2 -2
  354. package/build-module/utils/caption.mjs +2 -2
  355. package/build-module/utils/caption.mjs.map +2 -2
  356. package/build-module/utils/waveform-player.mjs +144 -23
  357. package/build-module/utils/waveform-player.mjs.map +2 -2
  358. package/build-module/utils/waveform-utils.mjs +310 -16
  359. package/build-module/utils/waveform-utils.mjs.map +2 -2
  360. package/build-module/verse/edit.mjs +3 -1
  361. package/build-module/verse/edit.mjs.map +2 -2
  362. package/build-module/video/edit.mjs +2 -11
  363. package/build-module/video/edit.mjs.map +2 -2
  364. package/build-module/video/tracks-editor.mjs +0 -1
  365. package/build-module/video/tracks-editor.mjs.map +2 -2
  366. package/build-style/cover/editor-rtl.css +3 -0
  367. package/build-style/cover/editor.css +3 -0
  368. package/build-style/editor-rtl.css +61 -59
  369. package/build-style/editor.css +61 -59
  370. package/build-style/icon/editor-rtl.css +80 -10
  371. package/build-style/icon/editor.css +80 -10
  372. package/build-style/image/editor-rtl.css +3 -32
  373. package/build-style/image/editor.css +3 -32
  374. package/build-style/more/editor-rtl.css +2 -2
  375. package/build-style/more/editor.css +2 -2
  376. package/build-style/navigation/editor-rtl.css +3 -4
  377. package/build-style/navigation/editor.css +3 -4
  378. package/build-style/navigation-link/editor-rtl.css +1 -1
  379. package/build-style/navigation-link/editor.css +1 -1
  380. package/build-style/nextpage/editor-rtl.css +2 -2
  381. package/build-style/nextpage/editor.css +2 -2
  382. package/build-style/playlist/editor-rtl.css +4 -3
  383. package/build-style/playlist/editor.css +4 -3
  384. package/build-style/playlist/style-rtl.css +81 -5
  385. package/build-style/playlist/style.css +81 -5
  386. package/build-style/playlist-track/style-rtl.css +10 -0
  387. package/build-style/playlist-track/style.css +10 -0
  388. package/build-style/pullquote/editor-rtl.css +4 -0
  389. package/build-style/pullquote/editor.css +4 -0
  390. package/build-style/style-rtl.css +91 -5
  391. package/build-style/style.css +91 -5
  392. package/build-style/tab-list/editor-rtl.css +101 -0
  393. package/build-style/tab-list/editor.css +101 -0
  394. package/build-style/video/editor-rtl.css +1 -1
  395. package/build-style/video/editor.css +1 -1
  396. package/build-types/table-of-contents/list.d.ts +1 -1
  397. package/build-types/table-of-contents/list.d.ts.map +1 -1
  398. package/package.json +47 -45
  399. package/src/accordion/README.md +1 -0
  400. package/src/accordion/block.json +1 -0
  401. package/src/accordion-panel/block.json +1 -0
  402. package/src/breadcrumbs/index.php +3 -1
  403. package/src/button/edit.js +21 -15
  404. package/src/button/index.php +1 -1
  405. package/src/code/edit.js +7 -2
  406. package/src/cover/README.md +60 -0
  407. package/src/cover/block.json +12 -0
  408. package/src/cover/edit/block-controls.js +26 -11
  409. package/src/cover/edit/embed-video-url-input.js +5 -4
  410. package/src/cover/edit/index.js +109 -46
  411. package/src/cover/editor.scss +6 -0
  412. package/src/cover/embed-video-utils.js +38 -13
  413. package/src/cover/index.php +9 -2
  414. package/src/details/transforms.js +2 -7
  415. package/src/editor.scss +1 -0
  416. package/src/embed/edit.js +3 -1
  417. package/src/embed/embed-placeholder.js +9 -8
  418. package/src/file/edit.js +8 -8
  419. package/src/file/transforms.js +28 -60
  420. package/src/form/index.php +6 -4
  421. package/src/gallery/README.md +1 -1
  422. package/src/gallery/block.json +4 -2
  423. package/src/gallery/dynamic-gallery.js +133 -74
  424. package/src/gallery/edit.js +3 -3
  425. package/src/gallery/gap-styles.js +79 -20
  426. package/src/gallery/index.php +103 -43
  427. package/src/gallery/use-dynamic-gallery.js +27 -12
  428. package/src/group/transforms.js +2 -5
  429. package/src/heading/edit.js +1 -1
  430. package/src/html/modal.js +13 -2
  431. package/src/icon/README.md +1 -3
  432. package/src/icon/block.json +5 -3
  433. package/src/icon/components/custom-inserter/icon-grid.js +40 -11
  434. package/src/icon/components/custom-inserter/index.js +98 -25
  435. package/src/icon/edit.js +11 -17
  436. package/src/icon/editor.scss +33 -11
  437. package/src/image/README.md +1 -1
  438. package/src/image/block.json +1 -1
  439. package/src/image/edit.js +1 -57
  440. package/src/image/editor.scss +6 -44
  441. package/src/image/image.js +56 -27
  442. package/src/image/test/use-open-image-media-editor-modal.js +37 -1
  443. package/src/image/transforms.js +128 -0
  444. package/src/image/use-open-image-media-editor-modal.js +8 -1
  445. package/src/index.js +19 -7
  446. package/src/latest-posts/edit.js +5 -8
  447. package/src/latest-posts/index.php +49 -18
  448. package/src/list-item/edit.js +1 -1
  449. package/src/list-item/hooks/use-enter.js +15 -22
  450. package/src/list-item/hooks/use-indent-list-item.js +10 -1
  451. package/src/list-item/hooks/use-space.js +4 -6
  452. package/src/math/edit.js +42 -59
  453. package/src/media-text/edit.js +1 -0
  454. package/src/media-text/editor.scss +1 -0
  455. package/src/media-text/index.php +11 -2
  456. package/src/more/edit.js +7 -4
  457. package/src/more/editor.scss +1 -1
  458. package/src/navigation/edit/index.js +52 -36
  459. package/src/navigation/edit/test/layout-custom-properties.js +138 -0
  460. package/src/navigation/edit/use-layout-custom-properties.js +84 -0
  461. package/src/navigation/editor.scss +1 -2
  462. package/src/navigation/index.php +123 -12
  463. package/src/navigation/test/view.js +51 -0
  464. package/src/navigation/view.js +15 -14
  465. package/src/navigation-link/edit.js +11 -7
  466. package/src/navigation-link/editor.scss +1 -1
  467. package/src/navigation-link/index.php +70 -3
  468. package/src/navigation-link/link-ui/index.js +2 -1
  469. package/src/navigation-link/test/__snapshots__/hooks.js.snap +1 -1
  470. package/src/navigation-submenu/index.php +6 -3
  471. package/src/nextpage/editor.scss +1 -1
  472. package/src/page-list/index.php +4 -3
  473. package/src/paragraph/edit.js +9 -2
  474. package/src/paragraph/index.js +4 -1
  475. package/src/paragraph/use-enter.js +4 -11
  476. package/src/pattern/index.php +5 -5
  477. package/src/playlist/README.md +17 -18
  478. package/src/playlist/block.json +29 -10
  479. package/src/playlist/context.js +1 -0
  480. package/src/playlist/edit.js +395 -59
  481. package/src/playlist/editor.scss +4 -5
  482. package/src/playlist/index.js +1 -1
  483. package/src/playlist/index.php +71 -22
  484. package/src/playlist/style.scss +54 -1
  485. package/src/playlist/test/edit-component.js +139 -0
  486. package/src/playlist/test/edit.js +43 -2
  487. package/src/playlist/utils.js +49 -10
  488. package/src/playlist/view.js +97 -16
  489. package/src/playlist-track/README.md +3 -3
  490. package/src/playlist-track/block.json +4 -2
  491. package/src/playlist-track/edit.js +116 -75
  492. package/src/playlist-track/index.php +26 -11
  493. package/src/playlist-track/style.scss +10 -0
  494. package/src/playlist-track/test/edit.js +253 -0
  495. package/src/post-content/README.md +1 -0
  496. package/src/post-content/block.json +1 -0
  497. package/src/post-content/edit.js +45 -16
  498. package/src/post-excerpt/index.php +4 -1
  499. package/src/post-featured-image/edit.js +3 -2
  500. package/src/post-featured-image/index.php +4 -1
  501. package/src/post-template/README.md +1 -0
  502. package/src/post-template/block.json +2 -1
  503. package/src/post-template/edit.js +9 -0
  504. package/src/post-terms/edit.js +7 -4
  505. package/src/post-title/edit.js +5 -3
  506. package/src/preformatted/edit.js +7 -2
  507. package/src/pullquote/README.md +1 -0
  508. package/src/pullquote/block.json +3 -1
  509. package/src/pullquote/edit.js +9 -4
  510. package/src/pullquote/editor.scss +6 -0
  511. package/src/query/README.md +2 -1
  512. package/src/query/block.json +3 -2
  513. package/src/query/edit/inspector-controls/index.js +47 -4
  514. package/src/query/edit/inspector-controls/offset-controls.js +2 -3
  515. package/src/query/edit/inspector-controls/pages-control.js +0 -1
  516. package/src/query/edit/query-content.js +19 -3
  517. package/src/query/index.js +1 -0
  518. package/src/quote/README.md +1 -0
  519. package/src/quote/block.json +3 -1
  520. package/src/quote/transforms.js +2 -4
  521. package/src/read-more/edit.js +7 -2
  522. package/src/rss/edit.js +0 -1
  523. package/src/rss/index.php +10 -4
  524. package/src/site-tagline/edit.js +7 -2
  525. package/src/site-title/edit.js +7 -2
  526. package/src/social-link/index.php +19 -9
  527. package/src/social-links/edit.js +21 -12
  528. package/src/tab-list/README.md +4 -5
  529. package/src/tab-list/block.json +4 -3
  530. package/src/tab-list/edit.js +92 -28
  531. package/src/tab-list/editor.scss +9 -0
  532. package/src/tab-list/index.php +9 -4
  533. package/src/tab-list/tab-movers.js +72 -0
  534. package/src/tab-panel/README.md +4 -6
  535. package/src/tab-panel/block.json +1 -6
  536. package/src/tab-panel/edit.js +20 -33
  537. package/src/tab-panels/README.md +5 -3
  538. package/src/tab-panels/block.json +0 -1
  539. package/src/table/edit.js +1 -1
  540. package/src/table-of-contents/index.php +386 -1
  541. package/src/tabs/README.md +18 -9
  542. package/src/tabs/block.json +0 -5
  543. package/src/tabs/edit.js +7 -64
  544. package/src/tabs/use-tab-actions.js +32 -3
  545. package/src/tabs/use-tab-list-items-sync.js +24 -4
  546. package/src/tag-cloud/index.php +3 -2
  547. package/src/template-part/index.php +3 -17
  548. package/src/term-name/README.md +1 -1
  549. package/src/term-name/block.json +1 -3
  550. package/src/term-name/deprecated.js +74 -0
  551. package/src/term-name/edit.js +2 -18
  552. package/src/term-name/index.js +2 -0
  553. package/src/utils/caption.js +7 -4
  554. package/src/utils/media-control.scss +1 -5
  555. package/src/utils/test/waveform-player.js +297 -34
  556. package/src/utils/test/waveform-utils.js +473 -5
  557. package/src/utils/waveform-player.js +189 -59
  558. package/src/utils/waveform-utils.js +443 -40
  559. package/src/verse/edit.js +7 -2
  560. package/src/video/edit.js +0 -8
  561. package/src/video/editor.scss +1 -1
  562. package/src/video/index.php +2 -2
  563. package/src/video/tracks-editor.js +0 -1
  564. package/build/image/animated-gif-convert-control.cjs +0 -105
  565. package/build/image/animated-gif-convert-control.cjs.map +0 -7
  566. package/build/utils/gif-conversion-attributes.cjs +0 -40
  567. package/build/utils/gif-conversion-attributes.cjs.map +0 -7
  568. package/build/video/gif-restore-control.cjs +0 -73
  569. package/build/video/gif-restore-control.cjs.map +0 -7
  570. package/build-module/image/animated-gif-convert-control.mjs +0 -87
  571. package/build-module/image/animated-gif-convert-control.mjs.map +0 -7
  572. package/build-module/utils/gif-conversion-attributes.mjs +0 -15
  573. package/build-module/utils/gif-conversion-attributes.mjs.map +0 -7
  574. package/build-module/video/gif-restore-control.mjs +0 -55
  575. package/build-module/video/gif-restore-control.mjs.map +0 -7
  576. package/src/image/animated-gif-convert-control.js +0 -135
  577. package/src/image/test/animated-gif-convert-control.js +0 -276
  578. package/src/utils/gif-conversion-attributes.js +0 -30
  579. package/src/utils/test/gif-conversion-attributes.js +0 -60
  580. package/src/video/gif-restore-control.js +0 -92
@@ -16,7 +16,8 @@ import {
16
16
  useInnerBlocksProps,
17
17
  BlockControls,
18
18
  InspectorControls,
19
- InnerBlocks,
19
+ __experimentalColorGradientSettingsDropdown as ColorGradientSettingsDropdown,
20
+ __experimentalUseMultipleOriginColorsAndGradients as useMultipleOriginColorsAndGradients,
20
21
  } from '@wordpress/block-editor';
21
22
  import {
22
23
  ToggleControl,
@@ -27,9 +28,10 @@ import {
27
28
  } from '@wordpress/components';
28
29
  import { useSelect, useDispatch } from '@wordpress/data';
29
30
  import { store as noticesStore } from '@wordpress/notices';
30
- import { __ } from '@wordpress/i18n';
31
- import { audio as icon } from '@wordpress/icons';
31
+ import { __, _x } from '@wordpress/i18n';
32
+ import { playlist as icon } from '@wordpress/icons';
32
33
  import { createBlock } from '@wordpress/blocks';
34
+ import { createBlobURL } from '@wordpress/blob';
33
35
 
34
36
  /**
35
37
  * Internal dependencies
@@ -41,6 +43,35 @@ import { PlaylistContext } from './context';
41
43
  import { getTrackAttributes } from './utils';
42
44
 
43
45
  const ALLOWED_MEDIA_TYPES = [ 'audio' ];
46
+ const AUDIO_FILE_EXTENSION =
47
+ /\.(aac|aif|aiff|flac|m4a|m4b|mp3|oga|ogg|opus|wav|weba)$/i;
48
+ const DEFAULT_WAVEFORM_STYLE = 'bars';
49
+ const FILE_LIST_OBJECT_NAME = '[object FileList]';
50
+ const WAVEFORM_STYLE_OPTIONS = [
51
+ { label: _x( 'Bars', 'waveform style option' ), value: 'bars' },
52
+ { label: _x( 'Mirror', 'waveform style option' ), value: 'mirror' },
53
+ { label: _x( 'Line', 'waveform style option' ), value: 'line' },
54
+ { label: _x( 'Blocks', 'waveform style option' ), value: 'blocks' },
55
+ { label: _x( 'Dots', 'waveform style option' ), value: 'dots' },
56
+ { label: _x( 'Seekbar', 'waveform style option' ), value: 'seekbar' },
57
+ ];
58
+
59
+ function isFile( value ) {
60
+ return (
61
+ Object.prototype.toString.call( value ) === '[object File]' ||
62
+ ( typeof File !== 'undefined' && value instanceof File )
63
+ );
64
+ }
65
+
66
+ function isAudioFile( file ) {
67
+ return file.type
68
+ ? file.type.startsWith( 'audio/' )
69
+ : AUDIO_FILE_EXTENSION.test( file.name );
70
+ }
71
+
72
+ function getTrackIdentifier( track ) {
73
+ return track.id ?? track.src ?? track.blob;
74
+ }
44
75
 
45
76
  const PlaylistEdit = ( {
46
77
  attributes,
@@ -54,20 +85,50 @@ const PlaylistEdit = ( {
54
85
  showTracklist,
55
86
  showNumbers,
56
87
  showImages,
88
+ showPlayButtonArtwork,
57
89
  showArtists,
58
90
  showTrackLength,
91
+ waveformStyle = DEFAULT_WAVEFORM_STYLE,
92
+ waveformColor,
93
+ waveformGradient,
94
+ waveformBackgroundColor,
95
+ waveformBackgroundGradient,
59
96
  } = attributes;
60
97
 
61
- // Extract the waveform style from the block style variation class.
62
- const waveformStyle =
63
- attributes.className?.match( /is-style-([\w-]+)/ )?.[ 1 ] || 'bars';
64
98
  const blockProps = useBlockProps();
65
- const { replaceInnerBlocks } = useDispatch( blockEditorStore );
99
+ const waveformPanelId = `${ clientId }-waveform`;
100
+ const { replaceInnerBlocks, selectBlock } = useDispatch( blockEditorStore );
66
101
  const { createErrorNotice } = useDispatch( noticesStore );
67
102
  const dropdownMenuProps = useToolsPanelDropdownMenuProps();
68
- function onUploadError( message ) {
69
- createErrorNotice( message, { type: 'snackbar' } );
70
- }
103
+ const colorGradientSettings = useMultipleOriginColorsAndGradients();
104
+ const colors = useMemo(
105
+ () =>
106
+ colorGradientSettings.colors.flatMap(
107
+ ( origin ) => origin?.colors ?? []
108
+ ),
109
+ [ colorGradientSettings.colors ]
110
+ );
111
+ const gradients = useMemo(
112
+ () =>
113
+ colorGradientSettings.gradients.flatMap(
114
+ ( origin ) => origin?.gradients ?? []
115
+ ),
116
+ [ colorGradientSettings.gradients ]
117
+ );
118
+ const hasColors =
119
+ colors.length > 0 || ! colorGradientSettings.disableCustomColors;
120
+ const hasGradients =
121
+ gradients.length > 0 || ! colorGradientSettings.disableCustomGradients;
122
+ const waveformGradientValue = waveformGradient;
123
+ const waveformBackgroundGradientValue = waveformBackgroundGradient;
124
+ let waveformColorGradientChange;
125
+ let waveformBackgroundColorGradientChange;
126
+ const onUploadError = useCallback(
127
+ ( message ) => {
128
+ createErrorNotice( message, { type: 'snackbar' } );
129
+ },
130
+ [ createErrorNotice ]
131
+ );
71
132
  const [ currentTrackClientId, setCurrentTrackClientId ] = useState( null );
72
133
 
73
134
  const { innerBlockTracks } = useSelect(
@@ -114,31 +175,112 @@ const PlaylistEdit = ( {
114
175
  }
115
176
  }, [ currentTrackClientId, setCurrentTrackClientId, validTracks ] );
116
177
 
117
- const playlistContext = useMemo(
118
- () => ( { currentTrackClientId, setCurrentTrackClientId } ),
119
- [ currentTrackClientId, setCurrentTrackClientId ]
120
- );
121
-
122
- const onSelectTracks = useCallback(
178
+ const createTrackBlocks = useCallback(
123
179
  ( media ) => {
124
180
  if ( ! media ) {
125
- return;
181
+ return [];
126
182
  }
127
183
 
128
- if ( ! Array.isArray( media ) ) {
129
- media = [ media ];
184
+ let mediaItems = [ media ];
185
+ if (
186
+ Object.prototype.toString.call( media ) ===
187
+ FILE_LIST_OBJECT_NAME
188
+ ) {
189
+ mediaItems = Array.from( media );
190
+ } else if ( Array.isArray( media ) ) {
191
+ mediaItems = media;
130
192
  }
193
+ let hasInvalidFile = false;
194
+
195
+ const blocks = mediaItems
196
+ .map( ( mediaItem ) => {
197
+ if ( isFile( mediaItem ) ) {
198
+ if ( ! isAudioFile( mediaItem ) ) {
199
+ hasInvalidFile = true;
200
+ return null;
201
+ }
202
+
203
+ return createBlock( 'core/playlist-track', {
204
+ blob: createBlobURL( mediaItem ),
205
+ title: mediaItem.name,
206
+ } );
207
+ }
131
208
 
132
- const trackList = media.map( getTrackAttributes );
209
+ const track = getTrackAttributes( mediaItem );
210
+
211
+ return track.src
212
+ ? createBlock( 'core/playlist-track', track )
213
+ : null;
214
+ } )
215
+ .filter( Boolean );
216
+
217
+ if ( hasInvalidFile ) {
218
+ onUploadError(
219
+ __( 'Only audio files can be added to a playlist.' )
220
+ );
221
+ }
222
+
223
+ return blocks;
224
+ },
225
+ [ onUploadError ]
226
+ );
227
+
228
+ const onSelectTracks = useCallback(
229
+ ( media ) => {
230
+ const newBlocks = createTrackBlocks( media );
231
+ if ( newBlocks.length === 0 ) {
232
+ return;
233
+ }
133
234
 
134
- const newBlocks = trackList.map( ( track ) =>
135
- createBlock( 'core/playlist-track', track )
136
- );
137
235
  setCurrentTrackClientId( newBlocks[ 0 ]?.clientId ?? null );
138
236
  // Replace the inner blocks with the new tracks.
139
237
  replaceInnerBlocks( clientId, newBlocks );
140
238
  },
141
- [ replaceInnerBlocks, clientId, setCurrentTrackClientId ]
239
+ [
240
+ clientId,
241
+ createTrackBlocks,
242
+ replaceInnerBlocks,
243
+ setCurrentTrackClientId,
244
+ ]
245
+ );
246
+
247
+ const onAddTracks = useCallback(
248
+ ( media ) => {
249
+ const existingIds = new Set(
250
+ validTracks
251
+ .map( ( block ) => getTrackIdentifier( block.attributes ) )
252
+ .filter( Boolean )
253
+ );
254
+ const newBlocks = createTrackBlocks( media ).filter(
255
+ ( block ) =>
256
+ ! existingIds.has( getTrackIdentifier( block.attributes ) )
257
+ );
258
+ if ( newBlocks.length === 0 ) {
259
+ return;
260
+ }
261
+
262
+ const nextBlocks = [ ...validTracks, ...newBlocks ];
263
+ setCurrentTrackClientId( newBlocks[ 0 ].clientId );
264
+ replaceInnerBlocks( clientId, nextBlocks );
265
+ selectBlock( newBlocks[ 0 ].clientId );
266
+ },
267
+ [
268
+ clientId,
269
+ createTrackBlocks,
270
+ replaceInnerBlocks,
271
+ selectBlock,
272
+ setCurrentTrackClientId,
273
+ validTracks,
274
+ ]
275
+ );
276
+
277
+ const playlistContext = useMemo(
278
+ () => ( {
279
+ currentTrackClientId,
280
+ setCurrentTrackClientId,
281
+ addTracks: onAddTracks,
282
+ } ),
283
+ [ currentTrackClientId, onAddTracks, setCurrentTrackClientId ]
142
284
  );
143
285
 
144
286
  // Get current track data by finding the track with matching client ID.
@@ -189,17 +331,129 @@ const PlaylistEdit = ( {
189
331
  };
190
332
  }
191
333
 
192
- const hasSelectedChild = useSelect(
193
- ( select ) =>
194
- select( blockEditorStore ).hasSelectedInnerBlock( clientId ),
195
- [ clientId ]
334
+ const onChangeWaveformStyle = useCallback(
335
+ ( newWaveformStyle ) => {
336
+ setAttributes( {
337
+ waveformStyle:
338
+ newWaveformStyle === DEFAULT_WAVEFORM_STYLE
339
+ ? undefined
340
+ : newWaveformStyle,
341
+ } );
342
+ },
343
+ [ setAttributes ]
196
344
  );
197
345
 
198
- const hasAnySelected = isSelected || hasSelectedChild;
346
+ function updateWaveformColor( colorValue ) {
347
+ const isSettingColor = colorValue !== undefined;
348
+ if ( ! isSettingColor && waveformColorGradientChange === 'gradient' ) {
349
+ waveformColorGradientChange = undefined;
350
+ return;
351
+ }
352
+
353
+ waveformColorGradientChange = 'color';
354
+
355
+ setAttributes( {
356
+ waveformColor: colorValue,
357
+ waveformGradient: undefined,
358
+ } );
359
+ }
360
+
361
+ function updateWaveformGradient( gradientValue ) {
362
+ const isSettingGradient = gradientValue !== undefined;
363
+ if ( ! isSettingGradient && waveformColorGradientChange === 'color' ) {
364
+ waveformColorGradientChange = undefined;
365
+ return;
366
+ }
367
+
368
+ waveformColorGradientChange = 'gradient';
369
+
370
+ setAttributes( {
371
+ waveformGradient: gradientValue,
372
+ waveformColor: undefined,
373
+ } );
374
+ }
375
+
376
+ function updateWaveformBackgroundColor( colorValue ) {
377
+ const isSettingColor = colorValue !== undefined;
378
+ if (
379
+ ! isSettingColor &&
380
+ waveformBackgroundColorGradientChange === 'gradient'
381
+ ) {
382
+ waveformBackgroundColorGradientChange = undefined;
383
+ return;
384
+ }
385
+
386
+ waveformBackgroundColorGradientChange = 'color';
387
+
388
+ setAttributes( {
389
+ waveformBackgroundColor: colorValue,
390
+ waveformBackgroundGradient: undefined,
391
+ } );
392
+ }
393
+
394
+ function updateWaveformBackgroundGradient( gradientValue ) {
395
+ const isSettingGradient = gradientValue !== undefined;
396
+ if (
397
+ ! isSettingGradient &&
398
+ waveformBackgroundColorGradientChange === 'color'
399
+ ) {
400
+ waveformBackgroundColorGradientChange = undefined;
401
+ return;
402
+ }
403
+
404
+ waveformBackgroundColorGradientChange = 'gradient';
405
+
406
+ setAttributes( {
407
+ waveformBackgroundGradient: gradientValue,
408
+ waveformBackgroundColor: undefined,
409
+ } );
410
+ }
411
+
412
+ const colorSettings = [];
413
+ if ( hasColors || hasGradients ) {
414
+ colorSettings.push(
415
+ {
416
+ colorValue: hasColors ? waveformColor : undefined,
417
+ gradientValue: hasGradients ? waveformGradientValue : undefined,
418
+ label: __( 'Waveform & Play button' ),
419
+ onColorChange: hasColors ? updateWaveformColor : undefined,
420
+ onGradientChange: hasGradients
421
+ ? updateWaveformGradient
422
+ : undefined,
423
+ isShownByDefault: true,
424
+ clearable: true,
425
+ enableAlpha: true,
426
+ resetAllFilter: () => ( {
427
+ waveformColor: undefined,
428
+ waveformGradient: undefined,
429
+ } ),
430
+ },
431
+ {
432
+ colorValue: hasColors ? waveformBackgroundColor : undefined,
433
+ gradientValue: hasGradients
434
+ ? waveformBackgroundGradientValue
435
+ : undefined,
436
+ label: __( 'Waveform background' ),
437
+ onColorChange: hasColors
438
+ ? updateWaveformBackgroundColor
439
+ : undefined,
440
+ onGradientChange: hasGradients
441
+ ? updateWaveformBackgroundGradient
442
+ : undefined,
443
+ isShownByDefault: true,
444
+ clearable: true,
445
+ enableAlpha: true,
446
+ resetAllFilter: () => ( {
447
+ waveformBackgroundColor: undefined,
448
+ waveformBackgroundGradient: undefined,
449
+ } ),
450
+ }
451
+ );
452
+ }
199
453
 
200
454
  const innerBlocksProps = useInnerBlocksProps( blockProps, {
201
455
  __experimentalAppenderTagName: 'li',
202
- renderAppender: hasAnySelected && InnerBlocks.ButtonBlockAppender,
456
+ renderAppender: false,
203
457
  } );
204
458
 
205
459
  if ( tracks.length === 0 ) {
@@ -219,6 +473,7 @@ const PlaylistEdit = ( {
219
473
  onSelect={ onSelectTracks }
220
474
  accept="audio/*"
221
475
  multiple
476
+ handleUpload={ false }
222
477
  allowedTypes={ ALLOWED_MEDIA_TYPES }
223
478
  onError={ onUploadError }
224
479
  />
@@ -230,13 +485,11 @@ const PlaylistEdit = ( {
230
485
  <>
231
486
  <BlockControls group="other">
232
487
  <MediaReplaceFlow
233
- name={ __( 'Edit' ) }
234
- onSelect={ onSelectTracks }
488
+ name={ __( 'Add' ) }
489
+ onSelect={ onAddTracks }
235
490
  accept="audio/*"
236
491
  multiple
237
- mediaIds={ tracks
238
- .filter( ( track ) => track.id )
239
- .map( ( track ) => track.id ) }
492
+ handleUpload={ false }
240
493
  allowedTypes={ ALLOWED_MEDIA_TYPES }
241
494
  onError={ onUploadError }
242
495
  />
@@ -251,13 +504,14 @@ const PlaylistEdit = ( {
251
504
  showNumbers: true,
252
505
  showTrackLength: true,
253
506
  showImages: true,
507
+ showPlayButtonArtwork: false,
254
508
  order: 'asc',
255
509
  } );
256
510
  } }
257
511
  dropdownMenuProps={ dropdownMenuProps }
258
512
  >
259
513
  <ToolsPanelItem
260
- label={ __( 'Show Tracklist' ) }
514
+ label={ __( 'Show tracklist' ) }
261
515
  isShownByDefault
262
516
  hasValue={ () => showTracklist !== true }
263
517
  onDeselect={ () =>
@@ -265,7 +519,7 @@ const PlaylistEdit = ( {
265
519
  }
266
520
  >
267
521
  <ToggleControl
268
- label={ __( 'Show Tracklist' ) }
522
+ label={ __( 'Show tracklist' ) }
269
523
  onChange={ toggleAttribute( 'showTracklist' ) }
270
524
  checked={ showTracklist }
271
525
  />
@@ -273,7 +527,7 @@ const PlaylistEdit = ( {
273
527
  { showTracklist && (
274
528
  <>
275
529
  <ToolsPanelItem
276
- label={ __( 'Show artist name in Tracklist' ) }
530
+ label={ __( 'Show artist name in tracklist' ) }
277
531
  isShownByDefault
278
532
  hasValue={ () => showArtists !== true }
279
533
  onDeselect={ () =>
@@ -282,7 +536,7 @@ const PlaylistEdit = ( {
282
536
  >
283
537
  <ToggleControl
284
538
  label={ __(
285
- 'Show artist name in Tracklist'
539
+ 'Show artist name in tracklist'
286
540
  ) }
287
541
  onChange={ toggleAttribute(
288
542
  'showArtists'
@@ -291,7 +545,9 @@ const PlaylistEdit = ( {
291
545
  />
292
546
  </ToolsPanelItem>
293
547
  <ToolsPanelItem
294
- label={ __( 'Show number in Tracklist' ) }
548
+ label={ __(
549
+ 'Show track numbers in tracklist'
550
+ ) }
295
551
  isShownByDefault
296
552
  hasValue={ () => showNumbers !== true }
297
553
  onDeselect={ () =>
@@ -299,7 +555,9 @@ const PlaylistEdit = ( {
299
555
  }
300
556
  >
301
557
  <ToggleControl
302
- label={ __( 'Show number in Tracklist' ) }
558
+ label={ __(
559
+ 'Show track numbers in tracklist'
560
+ ) }
303
561
  onChange={ toggleAttribute(
304
562
  'showNumbers'
305
563
  ) }
@@ -307,7 +565,9 @@ const PlaylistEdit = ( {
307
565
  />
308
566
  </ToolsPanelItem>
309
567
  <ToolsPanelItem
310
- label={ __( 'Show track length in Tracklist' ) }
568
+ label={ __(
569
+ 'Show track duration in tracklist'
570
+ ) }
311
571
  isShownByDefault
312
572
  hasValue={ () => showTrackLength !== true }
313
573
  onDeselect={ () =>
@@ -316,7 +576,7 @@ const PlaylistEdit = ( {
316
576
  >
317
577
  <ToggleControl
318
578
  label={ __(
319
- 'Show track length in Tracklist'
579
+ 'Show track duration in tracklist'
320
580
  ) }
321
581
  onChange={ toggleAttribute(
322
582
  'showTrackLength'
@@ -327,7 +587,7 @@ const PlaylistEdit = ( {
327
587
  </>
328
588
  ) }
329
589
  <ToolsPanelItem
330
- label={ __( 'Show images' ) }
590
+ label={ __( 'Show tracklist images' ) }
331
591
  isShownByDefault
332
592
  hasValue={ () => showImages !== true }
333
593
  onDeselect={ () =>
@@ -335,11 +595,27 @@ const PlaylistEdit = ( {
335
595
  }
336
596
  >
337
597
  <ToggleControl
338
- label={ __( 'Show images' ) }
598
+ label={ __( 'Show tracklist images' ) }
339
599
  onChange={ toggleAttribute( 'showImages' ) }
340
600
  checked={ showImages }
341
601
  />
342
602
  </ToolsPanelItem>
603
+ <ToolsPanelItem
604
+ label={ __( 'Show track image on play button' ) }
605
+ isShownByDefault
606
+ hasValue={ () => showPlayButtonArtwork === true }
607
+ onDeselect={ () =>
608
+ setAttributes( { showPlayButtonArtwork: false } )
609
+ }
610
+ >
611
+ <ToggleControl
612
+ label={ __( 'Show track image on play button' ) }
613
+ onChange={ toggleAttribute(
614
+ 'showPlayButtonArtwork'
615
+ ) }
616
+ checked={ showPlayButtonArtwork === true }
617
+ />
618
+ </ToolsPanelItem>
343
619
  <ToolsPanelItem
344
620
  label={ __( 'Order' ) }
345
621
  isShownByDefault
@@ -358,31 +634,91 @@ const PlaylistEdit = ( {
358
634
  </ToolsPanelItem>
359
635
  </ToolsPanel>
360
636
  </InspectorControls>
637
+ <InspectorControls group="styles">
638
+ <ToolsPanel
639
+ label={ __( 'Waveform' ) }
640
+ resetAll={ () => {
641
+ setAttributes( {
642
+ waveformStyle: undefined,
643
+ waveformColor: undefined,
644
+ waveformGradient: undefined,
645
+ waveformBackgroundColor: undefined,
646
+ waveformBackgroundGradient: undefined,
647
+ } );
648
+ } }
649
+ panelId={ waveformPanelId }
650
+ dropdownMenuProps={ dropdownMenuProps }
651
+ >
652
+ { colorSettings.length > 0 && (
653
+ <div className="wp-block-playlist__waveform-color-controls">
654
+ <ColorGradientSettingsDropdown
655
+ __experimentalIsRenderedInSidebar
656
+ settings={ colorSettings }
657
+ panelId={ waveformPanelId }
658
+ { ...colorGradientSettings }
659
+ />
660
+ </div>
661
+ ) }
662
+ <ToolsPanelItem
663
+ label={ __( 'Shape' ) }
664
+ isShownByDefault
665
+ hasValue={ () =>
666
+ waveformStyle !== DEFAULT_WAVEFORM_STYLE
667
+ }
668
+ onDeselect={ () =>
669
+ onChangeWaveformStyle( DEFAULT_WAVEFORM_STYLE )
670
+ }
671
+ panelId={ waveformPanelId }
672
+ >
673
+ <SelectControl
674
+ label={ __( 'Shape' ) }
675
+ value={ waveformStyle }
676
+ options={ WAVEFORM_STYLE_OPTIONS }
677
+ onChange={ onChangeWaveformStyle }
678
+ />
679
+ </ToolsPanelItem>
680
+ </ToolsPanel>
681
+ </InspectorControls>
361
682
  <figure { ...blockProps }>
683
+ <MediaPlaceholder
684
+ onSelect={ onAddTracks }
685
+ accept="audio/*"
686
+ multiple
687
+ handleUpload={ false }
688
+ disableMediaButtons
689
+ allowedTypes={ ALLOWED_MEDIA_TYPES }
690
+ onError={ onUploadError }
691
+ />
362
692
  <Disabled isDisabled={ ! isSelected }>
363
693
  <WaveformPlayer
364
694
  src={ currentTrackData?.src }
365
695
  title={ currentTrackData?.title }
366
696
  artist={ currentTrackData?.artist }
367
697
  image={ currentTrackData?.image }
698
+ imageAlt={ currentTrackData?.imageAlt }
368
699
  waveformStyle={ waveformStyle }
700
+ color={ waveformColor }
701
+ gradient={ waveformGradientValue }
702
+ backgroundColor={ waveformBackgroundColor }
703
+ backgroundGradient={ waveformBackgroundGradientValue }
369
704
  onEnded={ onTrackEnded }
705
+ showPlayButtonArtwork={ showPlayButtonArtwork === true }
370
706
  />
371
707
  </Disabled>
372
- { showTracklist && (
373
- <ol
374
- className={ clsx( 'wp-block-playlist__tracklist', {
375
- 'wp-block-playlist__tracklist-show-numbers':
376
- showNumbers,
377
- 'wp-block-playlist__tracklist-length-is-hidden':
378
- ! showTrackLength,
379
- } ) }
380
- >
381
- <PlaylistContext.Provider value={ playlistContext }>
382
- { innerBlocksProps.children }
383
- </PlaylistContext.Provider>
384
- </ol>
385
- ) }
708
+ <ol
709
+ className={ clsx( 'wp-block-playlist__tracklist', {
710
+ 'wp-block-playlist__tracklist-is-hidden':
711
+ ! showTracklist,
712
+ 'wp-block-playlist__tracklist-show-numbers':
713
+ showNumbers,
714
+ 'wp-block-playlist__tracklist-length-is-hidden':
715
+ ! showTrackLength,
716
+ } ) }
717
+ >
718
+ <PlaylistContext.Provider value={ playlistContext }>
719
+ { innerBlocksProps.children }
720
+ </PlaylistContext.Provider>
721
+ </ol>
386
722
  <Caption
387
723
  attributes={ attributes }
388
724
  setAttributes={ setAttributes }
@@ -1,6 +1,5 @@
1
- .wp-block-playlist {
2
- li.block-list-appender.block-list-appender {
3
- position: initial;
4
- margin-top: var(--wp--preset--spacing--30, 1em);
5
- }
1
+ .wp-block-playlist__waveform-color-controls {
2
+ display: grid;
3
+ grid-column: 1 / -1;
4
+ row-gap: 0;
6
5
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { audio as icon } from '@wordpress/icons';
4
+ import { playlist as icon } from '@wordpress/icons';
5
5
 
6
6
  /**
7
7
  * Internal dependencies