@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
@@ -14,6 +14,7 @@ import WaveformPlayerLib from '@arraypress/waveform-player';
14
14
  * Note: DEFAULT_WAVEFORM_HEIGHT should match $waveform-player-height in style.scss.
15
15
  */
16
16
  const DEFAULT_WAVEFORM_HEIGHT = 100;
17
+ const DEFAULT_SEEK_LABEL = 'Seek';
17
18
 
18
19
  /**
19
20
  * Get computed style for an element, using ownerDocument for iframe compatibility.
@@ -25,33 +26,238 @@ function getComputedStyle( element ) {
25
26
  return element.ownerDocument.defaultView.getComputedStyle( element );
26
27
  }
27
28
 
29
+ function getTopLevelGradientParts( gradientValue ) {
30
+ const match = gradientValue?.trim().match( /^[\w-]+-gradient\((.*)\)$/i );
31
+ if ( ! match ) {
32
+ return [];
33
+ }
34
+
35
+ const parts = [];
36
+ let depth = 0;
37
+ let current = '';
38
+
39
+ for ( const character of match[ 1 ] ) {
40
+ if ( character === '(' ) {
41
+ ++depth;
42
+ } else if ( character === ')' ) {
43
+ --depth;
44
+ }
45
+
46
+ if ( character === ',' && depth === 0 ) {
47
+ parts.push( current.trim() );
48
+ current = '';
49
+ continue;
50
+ }
51
+
52
+ current += character;
53
+ }
54
+
55
+ if ( current.trim() ) {
56
+ parts.push( current.trim() );
57
+ }
58
+
59
+ return parts;
60
+ }
61
+
62
+ function getLeadingColorFunction( value ) {
63
+ const match = value.match( /^([\w-]+)\(/ );
64
+ if ( ! match ) {
65
+ return;
66
+ }
67
+
68
+ const supportedFunctions = [
69
+ 'color',
70
+ 'color-mix',
71
+ 'hsl',
72
+ 'hsla',
73
+ 'hwb',
74
+ 'lab',
75
+ 'lch',
76
+ 'oklab',
77
+ 'oklch',
78
+ 'rgb',
79
+ 'rgba',
80
+ 'var',
81
+ ];
82
+ if ( ! supportedFunctions.includes( match[ 1 ].toLowerCase() ) ) {
83
+ return;
84
+ }
85
+
86
+ let depth = 0;
87
+ let foundOpeningParenthesis = false;
88
+ for ( let index = 0; index < value.length; index++ ) {
89
+ const character = value[ index ];
90
+ if ( character === '(' ) {
91
+ foundOpeningParenthesis = true;
92
+ ++depth;
93
+ } else if ( character === ')' ) {
94
+ --depth;
95
+ }
96
+
97
+ if ( foundOpeningParenthesis && depth === 0 ) {
98
+ return value.slice( 0, index + 1 );
99
+ }
100
+ }
101
+ }
102
+
103
+ function getColorStopValue( gradientPart ) {
104
+ const colorFunction = getLeadingColorFunction( gradientPart );
105
+ if ( colorFunction ) {
106
+ return colorFunction;
107
+ }
108
+
109
+ const [ possibleColor ] = gradientPart.split( /\s+/ );
110
+ if ( colord( possibleColor ).isValid() ) {
111
+ return possibleColor;
112
+ }
113
+ }
114
+
115
+ function getWaveformGradientDirection( gradientValue ) {
116
+ const parts = getTopLevelGradientParts( gradientValue );
117
+ const direction = parts[ 0 ];
118
+ const angleMatch = direction?.match( /^(-?\d+(?:\.\d+)?)deg$/i );
119
+ if ( angleMatch ) {
120
+ const angle = ( ( Number( angleMatch[ 1 ] ) % 360 ) + 360 ) % 360;
121
+ if ( angle === 90 || angle === 270 ) {
122
+ return 'horizontal';
123
+ }
124
+ if ( angle === 0 || angle === 180 ) {
125
+ return 'vertical';
126
+ }
127
+ return 'diagonal';
128
+ }
129
+
130
+ if ( ! direction?.startsWith( 'to ' ) ) {
131
+ return undefined;
132
+ }
133
+
134
+ const sideOrCorner = direction.toLowerCase().replace( /^to\s+/, '' );
135
+ const hasHorizontalSide =
136
+ sideOrCorner.includes( 'left' ) || sideOrCorner.includes( 'right' );
137
+ const hasVerticalSide =
138
+ sideOrCorner.includes( 'top' ) || sideOrCorner.includes( 'bottom' );
139
+
140
+ if ( hasHorizontalSide && hasVerticalSide ) {
141
+ return 'diagonal';
142
+ }
143
+ if ( hasHorizontalSide ) {
144
+ return 'horizontal';
145
+ }
146
+ if ( hasVerticalSide ) {
147
+ return 'vertical';
148
+ }
149
+ }
150
+
151
+ function resolveColorValue( element, colorValue ) {
152
+ if ( ! colorValue || colord( colorValue ).isValid() ) {
153
+ return colorValue;
154
+ }
155
+
156
+ const colorResolver = element.ownerDocument.createElement( 'span' );
157
+ colorResolver.style.color = colorValue;
158
+ if ( ! colorResolver.style.color ) {
159
+ return colorValue;
160
+ }
161
+ element.appendChild( colorResolver );
162
+
163
+ const resolvedColor = getComputedStyle( colorResolver ).color;
164
+ colorResolver.remove();
165
+
166
+ return resolvedColor && colord( resolvedColor ).isValid()
167
+ ? resolvedColor
168
+ : colorValue;
169
+ }
170
+
171
+ function getResolvedGradientStops( element, gradientValue ) {
172
+ const stops = getWaveformGradientStops( gradientValue )
173
+ ?.map( ( colorValue ) => resolveColorValue( element, colorValue ) )
174
+ .filter( ( colorValue ) => colord( colorValue ).isValid() );
175
+
176
+ return stops?.length > 1 ? stops : undefined;
177
+ }
178
+
179
+ function applyAlpha( colorValue, alpha ) {
180
+ if ( Array.isArray( colorValue ) ) {
181
+ return colorValue.map( ( color ) =>
182
+ colord( color ).alpha( alpha ).toRgbString()
183
+ );
184
+ }
185
+ return colord( colorValue ).alpha( alpha ).toRgbString();
186
+ }
187
+
188
+ function getRepresentativeColor( colorValue ) {
189
+ if ( Array.isArray( colorValue ) ) {
190
+ return colorValue[ colorValue.length - 1 ];
191
+ }
192
+ return colorValue;
193
+ }
194
+
195
+ export function getWaveformGradientStops( gradientValue ) {
196
+ const stops = getTopLevelGradientParts( gradientValue )
197
+ .map( getColorStopValue )
198
+ .filter( Boolean );
199
+
200
+ return stops.length > 1 ? stops : undefined;
201
+ }
202
+
203
+ function serializeColorValue( colorValue ) {
204
+ return Array.isArray( colorValue )
205
+ ? JSON.stringify( colorValue )
206
+ : colorValue;
207
+ }
208
+
28
209
  /**
29
210
  * Get all colors needed for the waveform player based on the element's styles.
30
211
  *
31
- * @param {Element} element - The element to derive colors from.
212
+ * @param {Element} element - The element to derive colors from.
213
+ * @param {string} waveformColorValue - The base waveform color value to use.
214
+ * @param {string} textColorValue - The text color value to use.
215
+ * @param {string} waveformGradientValue - The waveform gradient value to use.
32
216
  * @return {Object} Object containing textColor, waveformColor, progressColor.
33
217
  */
34
- export function getWaveformColors( element ) {
35
- const textColor = getComputedStyle( element ).color;
36
- const waveformColor = colord( textColor ).alpha( 0.3 ).toRgbString();
37
- const progressColor = colord( textColor ).alpha( 0.6 ).toRgbString();
218
+ export function getWaveformColors(
219
+ element,
220
+ waveformColorValue,
221
+ textColorValue,
222
+ waveformGradientValue
223
+ ) {
224
+ const textColor = textColorValue || getComputedStyle( element ).color;
225
+ const waveformGradientStops = getResolvedGradientStops(
226
+ element,
227
+ waveformGradientValue
228
+ );
229
+ const waveformBaseColor =
230
+ waveformGradientStops || waveformColorValue || textColor;
231
+ const waveformColor = applyAlpha( waveformBaseColor, 0.3 );
232
+ const progressColor = applyAlpha( waveformBaseColor, 0.6 );
233
+ const waveformGradient = waveformGradientStops
234
+ ? getWaveformGradientDirection( waveformGradientValue )
235
+ : undefined;
38
236
 
39
- return { textColor, waveformColor, progressColor };
237
+ return {
238
+ textColor,
239
+ waveformColor,
240
+ progressColor,
241
+ ...( waveformGradient && { waveformGradient } ),
242
+ };
40
243
  }
41
244
 
42
245
  /**
43
246
  * Create a waveform container element with the specified attributes.
44
247
  *
45
- * @param {Object} options - The options for the container.
46
- * @param {string} options.url - The audio URL.
47
- * @param {string} options.title - The track title.
48
- * @param {string} options.artist - The track artist.
49
- * @param {string} options.artwork - The album artwork URL.
50
- * @param {string} options.waveformColor - The waveform bar color.
51
- * @param {string} options.progressColor - The progress indicator color.
52
- * @param {string} options.buttonColor - The play button color.
53
- * @param {number} options.height - The waveform height in pixels.
54
- * @param {string} options.waveformStyle - The visualization style (bars, mirror, line, blocks, dots, seekbar).
248
+ * @param {Object} options - The options for the container.
249
+ * @param {string} options.url - The audio URL.
250
+ * @param {string} options.title - The track title.
251
+ * @param {string} options.artist - The track artist.
252
+ * @param {string} options.artwork - The track image URL.
253
+ * @param {string} options.waveformColor - The waveform bar color.
254
+ * @param {string} options.progressColor - The progress indicator color.
255
+ * @param {string} options.waveformGradient - The waveform gradient direction.
256
+ * @param {string} options.buttonColor - The play button color.
257
+ * @param {string} options.seekLabel - Accessible label for the seek control.
258
+ * @param {string} options.seekValueText - Accessible value-text template for the seek control (e.g. '%1$s of %2$s').
259
+ * @param {number} options.height - The waveform height in pixels.
260
+ * @param {string} options.waveformStyle - The visualization style (bars, mirror, line, blocks, dots, seekbar).
55
261
  * @return {Element} The configured container element.
56
262
  */
57
263
  export function createWaveformContainer( {
@@ -61,7 +267,10 @@ export function createWaveformContainer( {
61
267
  artwork,
62
268
  waveformColor,
63
269
  progressColor,
270
+ waveformGradient,
64
271
  buttonColor,
272
+ seekLabel,
273
+ seekValueText,
65
274
  height = DEFAULT_WAVEFORM_HEIGHT,
66
275
  waveformStyle = 'bars',
67
276
  } ) {
@@ -70,16 +279,35 @@ export function createWaveformContainer( {
70
279
  container.setAttribute( 'data-url', url );
71
280
  container.setAttribute( 'data-height', String( height ) );
72
281
  container.setAttribute( 'data-waveform-style', waveformStyle );
73
- container.setAttribute( 'data-waveform-color', waveformColor );
74
- container.setAttribute( 'data-progress-color', progressColor );
282
+ container.setAttribute(
283
+ 'data-waveform-color',
284
+ serializeColorValue( waveformColor )
285
+ );
286
+ container.setAttribute(
287
+ 'data-progress-color',
288
+ serializeColorValue( progressColor )
289
+ );
290
+ if ( waveformGradient ) {
291
+ container.setAttribute( 'data-waveform-gradient', waveformGradient );
292
+ }
75
293
  container.setAttribute( 'data-button-color', buttonColor );
294
+ container.setAttribute(
295
+ 'data-seek-label',
296
+ getSeekControlLabel( seekLabel )
297
+ );
298
+ // The library formats the current time and duration and interpolates them
299
+ // into this translated template for the seek slider's aria-valuetext.
300
+ if ( seekValueText ) {
301
+ container.setAttribute( 'data-seek-value-text', seekValueText );
302
+ }
76
303
  container.setAttribute( 'data-text-color', buttonColor );
77
304
  container.setAttribute( 'data-text-secondary-color', buttonColor );
305
+
78
306
  if ( title ) {
79
307
  container.setAttribute( 'data-title', title );
80
308
  }
81
309
  if ( artist ) {
82
- container.setAttribute( 'data-subtitle', artist );
310
+ container.setAttribute( 'data-artist', artist );
83
311
  }
84
312
  if ( artwork ) {
85
313
  container.setAttribute( 'data-artwork', artwork );
@@ -87,12 +315,78 @@ export function createWaveformContainer( {
87
315
  return container;
88
316
  }
89
317
 
318
+ /**
319
+ * Apply custom styles to a generated waveform player.
320
+ *
321
+ * @param {Element} container - The generated player container.
322
+ * @param {Object} styles - The player styles.
323
+ * @param {string} styles.backgroundColor - The waveform area background color.
324
+ * @param {string} styles.backgroundGradient - The waveform area background gradient.
325
+ * @param {string} styles.textColor - The player text color.
326
+ * @param {string} styles.playButtonColor - The play button color.
327
+ * @param {string} styles.playButtonGradient - The play button gradient.
328
+ */
329
+ export function applyWaveformPlayerStyles(
330
+ container,
331
+ {
332
+ backgroundColor,
333
+ backgroundGradient,
334
+ textColor,
335
+ playButtonColor,
336
+ playButtonGradient,
337
+ } = {}
338
+ ) {
339
+ const waveformContainer = container.querySelector( '.waveform-container' );
340
+ const playButton = container.querySelector( '.waveform-btn' );
341
+ const playButtonBaseColor = getRepresentativeColor(
342
+ getResolvedGradientStops( container, playButtonGradient ) ||
343
+ playButtonColor
344
+ );
345
+
346
+ if ( playButtonBaseColor ) {
347
+ container.style.setProperty(
348
+ '--wfp-button-color',
349
+ playButtonBaseColor
350
+ );
351
+ } else {
352
+ container.style.removeProperty( '--wfp-button-color' );
353
+ }
354
+
355
+ if ( textColor ) {
356
+ container.style.setProperty( '--wfp-text-color', textColor );
357
+ container.style.setProperty( '--wfp-text-secondary-color', textColor );
358
+ } else {
359
+ container.style.removeProperty( '--wfp-text-color' );
360
+ container.style.removeProperty( '--wfp-text-secondary-color' );
361
+ }
362
+
363
+ if ( playButton ) {
364
+ if ( playButtonGradient ) {
365
+ playButton.style.background = playButtonGradient;
366
+ } else {
367
+ playButton.style.removeProperty( 'background' );
368
+ }
369
+ }
370
+
371
+ if ( waveformContainer ) {
372
+ if ( backgroundGradient ) {
373
+ waveformContainer.style.background = backgroundGradient;
374
+ } else if ( backgroundColor ) {
375
+ waveformContainer.style.removeProperty( 'background' );
376
+ waveformContainer.style.backgroundColor = backgroundColor;
377
+ } else {
378
+ waveformContainer.style.removeProperty( 'background' );
379
+ waveformContainer.style.removeProperty( 'background-color' );
380
+ }
381
+ }
382
+ }
383
+
90
384
  /**
91
385
  * Apply contrasting color to SVG icon paths for visibility.
92
- * The icons should contrast with the button background (which uses textColor).
386
+ * The icons should contrast with the button background.
93
387
  *
94
388
  * @param {Element} container - The waveform container element.
95
- * @param {string} buttonColor - The button background color (textColor).
389
+ * @param {string} buttonColor - The button background color.
96
390
  */
97
391
  export function styleSvgIcons( container, buttonColor ) {
98
392
  // Compute a contrasting color for the icons based on button brightness.
@@ -138,6 +432,56 @@ export function setupPlayButtonAccessibility(
138
432
  };
139
433
  }
140
434
 
435
+ /**
436
+ * Get the accessible label for the waveform seek control.
437
+ *
438
+ * @param {string} label - Accessible label for the seek control.
439
+ * @return {string} The provided label or translated fallback.
440
+ */
441
+ function getSeekControlLabel( label ) {
442
+ return label || DEFAULT_SEEK_LABEL;
443
+ }
444
+
445
+ /**
446
+ * Update the waveform seek control label.
447
+ *
448
+ * @param {Object} instance - The WaveformPlayer instance.
449
+ * @param {string} label - Accessible label for the seek control.
450
+ */
451
+ export function updateSeekControlLabel( instance, label ) {
452
+ const seekLabel = getSeekControlLabel( label );
453
+ instance.options.seekLabel = seekLabel;
454
+ instance.applySeekLabel?.( seekLabel );
455
+
456
+ const seekControl = instance?.container?.querySelector(
457
+ '.waveform-container'
458
+ );
459
+
460
+ if ( seekControl ) {
461
+ seekControl.setAttribute( 'aria-label', seekLabel );
462
+ }
463
+ }
464
+
465
+ /**
466
+ * Show the current artwork as the play button background.
467
+ *
468
+ * @param {Element} container - The waveform player container element.
469
+ * @param {string} artworkUrl - The track image URL.
470
+ */
471
+ export function setupPlayButtonArtwork( container, artworkUrl ) {
472
+ if ( ! artworkUrl ) {
473
+ container.classList.remove( 'has-play-button-artwork' );
474
+ container.style.removeProperty( '--wp--playlist--play-button-artwork' );
475
+ return;
476
+ }
477
+
478
+ container.classList.add( 'has-play-button-artwork' );
479
+ container.style.setProperty(
480
+ '--wp--playlist--play-button-artwork',
481
+ `url(${ JSON.stringify( artworkUrl ) })`
482
+ );
483
+ }
484
+
141
485
  /**
142
486
  * Log play errors, filtering out expected AbortError.
143
487
  *
@@ -160,48 +504,107 @@ export function logPlayError( error ) {
160
504
  * This is the shared core logic used by both the React component (editor)
161
505
  * and the Interactivity API (frontend).
162
506
  *
163
- * @param {Element} element - The container element (must be in DOM).
164
- * @param {Object} options - Configuration options.
165
- * @param {string} options.src - The audio file URL.
166
- * @param {string} options.title - The track title.
167
- * @param {string} options.artist - The artist name.
168
- * @param {string} options.image - The artwork image URL.
169
- * @param {boolean} options.autoPlay - Whether to auto-play when ready.
170
- * @param {Function} options.onEnded - Callback when track ends.
171
- * @param {Object} options.labels - Translated button labels.
172
- * @param {string} options.waveformStyle - Waveform style (bars, mirror, line, blocks, dots, seekbar).
507
+ * @param {Element} element - The container element (must be in DOM).
508
+ * @param {Object} options - Configuration options.
509
+ * @param {string} options.src - The audio file URL.
510
+ * @param {string} options.title - The track title.
511
+ * @param {string} options.artist - The artist name.
512
+ * @param {string} options.image - The track image URL.
513
+ * @param {string} options.imageAlt - The track image alt text.
514
+ * @param {string} options.waveformColor - The waveform color.
515
+ * @param {string} options.waveformGradient - The waveform gradient.
516
+ * @param {string} options.textColor - The player text color.
517
+ * @param {string} options.backgroundColor - The player background color.
518
+ * @param {string} options.backgroundGradient - The player background gradient.
519
+ * @param {boolean} options.autoPlay - Whether to auto-play when ready.
520
+ * @param {Function} options.onEnded - Callback when track ends.
521
+ * @param {Object} options.labels - Translated button labels.
522
+ * @param {string} options.waveformStyle - Waveform style (bars, mirror, line, blocks, dots, seekbar).
523
+ * @param {boolean} options.showPlayButtonArtwork - Whether to show artwork on the play button.
173
524
  * @return {Object} Object with instance, container, and destroy function.
174
525
  */
175
526
  export function initWaveformPlayer(
176
527
  element,
177
- { src, title, artist, image, autoPlay, onEnded, labels, waveformStyle }
528
+ {
529
+ src,
530
+ title,
531
+ artist,
532
+ image,
533
+ imageAlt,
534
+ waveformColor: waveformColorValue,
535
+ waveformGradient: waveformGradientValue,
536
+ textColor: textColorValue,
537
+ backgroundColor,
538
+ backgroundGradient,
539
+ autoPlay,
540
+ onEnded,
541
+ labels,
542
+ waveformStyle,
543
+ showPlayButtonArtwork = false,
544
+ }
178
545
  ) {
546
+ const playerArtwork = showPlayButtonArtwork ? undefined : image;
547
+
179
548
  // Get colors from computed styles.
180
- const { textColor, waveformColor, progressColor } =
181
- getWaveformColors( element );
549
+ const { textColor, waveformColor, progressColor, waveformGradient } =
550
+ getWaveformColors(
551
+ element,
552
+ waveformColorValue,
553
+ textColorValue,
554
+ waveformGradientValue
555
+ );
556
+ const waveformGradientStops = getResolvedGradientStops(
557
+ element,
558
+ waveformGradientValue
559
+ );
560
+ const waveformButtonColor = getRepresentativeColor(
561
+ waveformGradientStops || waveformColorValue
562
+ );
182
563
 
183
564
  // Create the waveform container.
184
565
  const container = createWaveformContainer( {
185
566
  url: src,
186
567
  title,
187
568
  artist,
188
- artwork: image,
569
+ artwork: playerArtwork,
189
570
  waveformColor,
190
571
  progressColor,
572
+ waveformGradient,
191
573
  buttonColor: textColor,
574
+ seekLabel: title || labels?.seek,
575
+ seekValueText: labels?.seekValueText,
192
576
  waveformStyle,
193
577
  } );
194
578
  element.appendChild( container );
195
579
 
196
- // Initialize the WaveformPlayer library.
580
+ // Initialize the WaveformPlayer library. The library reads the translated
581
+ // seek label and value-text templates from the container's data attributes
582
+ // and owns the seek slider's accessible label and value text.
197
583
  const instance = new WaveformPlayerLib( container );
584
+ if ( instance.artworkEl ) {
585
+ instance.artworkEl.alt = imageAlt || '';
586
+ }
587
+ applyWaveformPlayerStyles( container, {
588
+ backgroundColor,
589
+ backgroundGradient,
590
+ textColor,
591
+ playButtonColor: showPlayButtonArtwork
592
+ ? undefined
593
+ : waveformButtonColor,
594
+ playButtonGradient: showPlayButtonArtwork
595
+ ? undefined
596
+ : waveformGradientValue,
597
+ } );
198
598
 
199
599
  // Set up event handlers.
200
- let cleanupAccessibility;
600
+ let cleanupPlayButtonAccessibility;
201
601
  const handlers = {
202
602
  ready: () => {
203
- styleSvgIcons( container, textColor );
204
- cleanupAccessibility = setupPlayButtonAccessibility(
603
+ styleSvgIcons( container, waveformButtonColor || textColor );
604
+ if ( showPlayButtonArtwork ) {
605
+ setupPlayButtonArtwork( container, image );
606
+ }
607
+ cleanupPlayButtonAccessibility = setupPlayButtonAccessibility(
205
608
  container,
206
609
  labels
207
610
  );
@@ -220,7 +623,7 @@ export function initWaveformPlayer(
220
623
  instance,
221
624
  container,
222
625
  destroy: () => {
223
- cleanupAccessibility?.();
626
+ cleanupPlayButtonAccessibility?.();
224
627
  container.removeEventListener(
225
628
  'waveformplayer:ready',
226
629
  handlers.ready
package/src/verse/edit.js CHANGED
@@ -40,8 +40,13 @@ export default function VerseEdit( props ) {
40
40
  onMerge={ mergeBlocks }
41
41
  { ...blockProps }
42
42
  __unstablePastePlainText
43
- __unstableOnSplitAtDoubleLineEnd={ () =>
44
- insertBlocksAfter( createBlock( getDefaultBlockName() ) )
43
+ __unstableOnSplitAtDoubleLineEnd={
44
+ insertBlocksAfter
45
+ ? () =>
46
+ insertBlocksAfter(
47
+ createBlock( getDefaultBlockName() )
48
+ )
49
+ : undefined
45
50
  }
46
51
  />
47
52
  );
package/src/video/edit.js CHANGED
@@ -42,7 +42,6 @@ import Tracks from './tracks';
42
42
  import { Caption } from '../utils/caption';
43
43
  import PosterImage from '../utils/poster-image';
44
44
  import { isGifVariation } from './variations';
45
- import GifRestoreControl from './gif-restore-control';
46
45
 
47
46
  const ALLOWED_MEDIA_TYPES = [ 'video' ];
48
47
 
@@ -53,7 +52,6 @@ function VideoEdit( {
53
52
  setAttributes,
54
53
  insertBlocksAfter,
55
54
  onReplace,
56
- clientId,
57
55
  } ) {
58
56
  const videoPlayer = useRef();
59
57
  const { id, controls, poster, src, tracks, width, height } = attributes;
@@ -225,12 +223,6 @@ function VideoEdit( {
225
223
  variant="toolbar"
226
224
  />
227
225
  </BlockControls>
228
- { isGif && (
229
- <GifRestoreControl
230
- attributes={ attributes }
231
- clientId={ clientId }
232
- />
233
- ) }
234
226
  </>
235
227
  ) }
236
228
  <InspectorControls>
@@ -46,7 +46,7 @@
46
46
  color: $gray-700;
47
47
  text-transform: uppercase;
48
48
  font-size: 11px;
49
- font-weight: $font-weight-medium;
49
+ font-weight: var(--wpds-typography-font-weight-emphasis);
50
50
  display: block;
51
51
  }
52
52
 
@@ -17,8 +17,8 @@
17
17
  * @return string The block content with the dimensions added.
18
18
  */
19
19
  function render_block_core_video( array $attributes, string $content ): string {
20
- // if the content lacks any video tag, abort.
21
- if ( ! str_contains( $content, '<video' ) ) {
20
+ // If the content lacks any video tag (either <video> or <VIDEO>), abort. Note that str_contains() is case-sensitive.
21
+ if ( stripos( $content, '<video' ) === false ) {
22
22
  return $content;
23
23
  }
24
24
 
@@ -156,7 +156,6 @@ function SingleTrackEditor( {
156
156
  }
157
157
  />
158
158
  <ToggleControl
159
- __next40pxDefaultSize
160
159
  label={ __( 'Set as default track' ) }
161
160
  checked={ isDefaultTrack }
162
161
  disabled={ ! allowSettingDefault }