@wordpress/block-library 11.0.2-next.v.202609171837.0 → 11.2.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 (686) hide show
  1. package/CHANGELOG.md +44 -1
  2. package/build/accordion/block.json +4 -1
  3. package/build/accordion-heading/block.json +1 -0
  4. package/build/accordion-item/block.json +7 -1
  5. package/build/accordion-panel/block.json +9 -1
  6. package/build/archives/block.json +12 -0
  7. package/build/audio/block.json +8 -0
  8. package/build/audio/edit.cjs +2 -1
  9. package/build/audio/edit.cjs.map +2 -2
  10. package/build/avatar/block.json +4 -0
  11. package/build/avatar/edit.cjs +31 -1
  12. package/build/avatar/edit.cjs.map +3 -3
  13. package/build/breadcrumbs/block.json +3 -0
  14. package/build/breadcrumbs/edit.cjs.map +3 -3
  15. package/build/button/block.json +6 -0
  16. package/build/button/edit.cjs +9 -6
  17. package/build/button/edit.cjs.map +2 -2
  18. package/build/buttons/block.json +15 -1
  19. package/build/categories/block.json +12 -1
  20. package/build/code/block.json +13 -0
  21. package/build/column/block.json +9 -0
  22. package/build/column/edit.cjs +5 -0
  23. package/build/column/edit.cjs.map +2 -2
  24. package/build/columns/block.json +13 -0
  25. package/build/columns/edit.cjs +21 -112
  26. package/build/columns/edit.cjs.map +3 -3
  27. package/build/comment-author-name/block.json +3 -0
  28. package/build/comment-content/block.json +5 -0
  29. package/build/comment-date/block.json +3 -0
  30. package/build/comment-edit-link/block.json +3 -0
  31. package/build/comment-reply-link/block.json +3 -0
  32. package/build/comments/block.json +10 -0
  33. package/build/comments/edit/placeholder.cjs +95 -87
  34. package/build/comments/edit/placeholder.cjs.map +2 -2
  35. package/build/comments-pagination/block.json +14 -0
  36. package/build/comments-pagination-next/block.json +3 -0
  37. package/build/comments-pagination-numbers/block.json +3 -0
  38. package/build/comments-pagination-previous/block.json +6 -0
  39. package/build/comments-title/block.json +3 -0
  40. package/build/cover/block.json +2 -1
  41. package/build/cover/edit/index.cjs +30 -6
  42. package/build/cover/edit/index.cjs.map +2 -2
  43. package/build/cover/edit/inspector-controls.cjs +56 -14
  44. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  45. package/build/cover/embed-video-utils.cjs +9 -8
  46. package/build/cover/embed-video-utils.cjs.map +2 -2
  47. package/build/cover/view.cjs +21 -0
  48. package/build/cover/view.cjs.map +7 -0
  49. package/build/details/block.json +14 -0
  50. package/build/embed/block.json +6 -1
  51. package/build/file/block.json +14 -0
  52. package/build/footnotes/block.json +13 -0
  53. package/build/gallery/block.json +22 -0
  54. package/build/gallery/dynamic-gallery.cjs +32 -93
  55. package/build/gallery/dynamic-gallery.cjs.map +3 -3
  56. package/build/gallery/edit.cjs +104 -42
  57. package/build/gallery/edit.cjs.map +2 -2
  58. package/build/gallery/order-controls.cjs +107 -0
  59. package/build/gallery/order-controls.cjs.map +7 -0
  60. package/build/gallery/order-images.cjs +92 -0
  61. package/build/gallery/order-images.cjs.map +7 -0
  62. package/build/gallery/order-options.cjs +62 -0
  63. package/build/gallery/order-options.cjs.map +7 -0
  64. package/build/gallery/use-dynamic-gallery.cjs +1 -7
  65. package/build/gallery/use-dynamic-gallery.cjs.map +2 -2
  66. package/build/gallery/use-get-media.cjs +2 -3
  67. package/build/gallery/use-get-media.cjs.map +2 -2
  68. package/build/group/block.json +1 -0
  69. package/build/group/edit.cjs +3 -3
  70. package/build/group/edit.cjs.map +2 -2
  71. package/build/heading/block.json +14 -0
  72. package/build/home-link/block.json +30 -0
  73. package/build/home-link/edit.cjs.map +3 -3
  74. package/build/icon/components/custom-inserter/index.cjs +3 -1
  75. package/build/icon/components/custom-inserter/index.cjs.map +2 -2
  76. package/build/icon/edit.cjs +49 -5
  77. package/build/icon/edit.cjs.map +2 -2
  78. package/build/image/image.cjs +10 -8
  79. package/build/image/image.cjs.map +3 -3
  80. package/build/image/use-open-image-media-editor-modal.cjs +32 -8
  81. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  82. package/build/image/view.cjs +44 -50
  83. package/build/image/view.cjs.map +2 -2
  84. package/build/latest-comments/block.json +20 -0
  85. package/build/latest-posts/block.json +14 -0
  86. package/build/list/block.json +12 -1
  87. package/build/list-item/block.json +8 -1
  88. package/build/list-item/index.cjs +4 -0
  89. package/build/list-item/index.cjs.map +3 -3
  90. package/build/loginout/block.json +14 -0
  91. package/build/math/block.json +14 -0
  92. package/build/media-text/block.json +19 -0
  93. package/build/navigation/edit/index.cjs +1 -4
  94. package/build/navigation/edit/index.cjs.map +2 -2
  95. package/build/navigation-link/link-ui/index.cjs +33 -19
  96. package/build/navigation-link/link-ui/index.cjs.map +2 -2
  97. package/build/navigation-link/link-ui/page-creator.cjs.map +3 -3
  98. package/build/navigation-link/shared/controls.cjs.map +3 -3
  99. package/build/navigation-link/shared/index.cjs +5 -0
  100. package/build/navigation-link/shared/index.cjs.map +2 -2
  101. package/build/navigation-link/shared/use-block-suggestions.cjs +141 -0
  102. package/build/navigation-link/shared/use-block-suggestions.cjs.map +7 -0
  103. package/build/navigation-link/shared/use-link-preview.cjs +13 -13
  104. package/build/navigation-link/shared/use-link-preview.cjs.map +2 -2
  105. package/build/navigation-overlay-close/block.json +7 -0
  106. package/build/navigation-submenu/block.json +6 -0
  107. package/build/navigation-submenu/edit.cjs +9 -1
  108. package/build/navigation-submenu/edit.cjs.map +3 -3
  109. package/build/page-list/block.json +14 -0
  110. package/build/paragraph/block.json +1 -0
  111. package/build/paragraph/edit.cjs +1 -2
  112. package/build/paragraph/edit.cjs.map +2 -2
  113. package/build/playlist/block.json +1 -0
  114. package/build/post-author-biography/block.json +5 -0
  115. package/build/post-author-name/block.json +5 -0
  116. package/build/post-comments-count/block.json +3 -0
  117. package/build/post-comments-form/block.json +15 -0
  118. package/build/post-content/block.json +4 -1
  119. package/build/post-date/block.json +3 -0
  120. package/build/post-excerpt/block.json +9 -0
  121. package/build/post-featured-image/block.json +1 -0
  122. package/build/post-featured-image/edit.cjs +12 -10
  123. package/build/post-featured-image/edit.cjs.map +2 -2
  124. package/build/post-navigation-link/block.json +30 -0
  125. package/build/post-navigation-link/edit.cjs +13 -2
  126. package/build/post-navigation-link/edit.cjs.map +3 -3
  127. package/build/post-template/block.json +13 -1
  128. package/build/post-terms/block.json +10 -0
  129. package/build/post-time-to-read/block.json +10 -0
  130. package/build/post-title/block.json +14 -0
  131. package/build/preformatted/block.json +11 -0
  132. package/build/pullquote/block.json +3 -1
  133. package/build/query-no-results/block.json +14 -2
  134. package/build/query-pagination/block.json +20 -0
  135. package/build/query-pagination-next/block.json +3 -0
  136. package/build/query-pagination-numbers/block.json +3 -0
  137. package/build/query-pagination-previous/block.json +3 -0
  138. package/build/query-title/block.json +3 -0
  139. package/build/query-total/block.json +10 -0
  140. package/build/quote/block.json +3 -0
  141. package/build/read-more/block.json +11 -0
  142. package/build/rss/block.json +10 -0
  143. package/build/search/block.json +2 -1
  144. package/build/site-tagline/block.json +12 -1
  145. package/build/site-title/block.json +11 -1
  146. package/build/social-links/block.json +4 -0
  147. package/build/social-links/edit.cjs +2 -3
  148. package/build/social-links/edit.cjs.map +2 -2
  149. package/build/tab-list/block.json +4 -0
  150. package/build/tab-list/edit.cjs +3 -1
  151. package/build/tab-list/edit.cjs.map +3 -3
  152. package/build/tab-list/save.cjs +3 -1
  153. package/build/tab-list/save.cjs.map +3 -3
  154. package/build/tab-panel/block.json +25 -0
  155. package/build/tab-panel/controls.cjs.map +3 -3
  156. package/build/tab-panels/block.json +21 -1
  157. package/build/table-of-contents/block.json +7 -0
  158. package/build/tabs/block.json +27 -1
  159. package/build/tag-cloud/block.json +19 -0
  160. package/build/template-part/edit/selection-modal.cjs.map +1 -1
  161. package/build/term-count/block.json +12 -0
  162. package/build/term-description/block.json +13 -0
  163. package/build/term-name/block.json +16 -1
  164. package/build/term-template/block.json +14 -1
  165. package/build/utils/search-patterns.cjs +7 -43
  166. package/build/utils/search-patterns.cjs.map +3 -3
  167. package/build/utils/style-state.cjs +4 -6
  168. package/build/utils/style-state.cjs.map +2 -2
  169. package/build/utils/waveform-utils.cjs +2 -2
  170. package/build/utils/waveform-utils.cjs.map +2 -2
  171. package/build/verse/block.json +4 -0
  172. package/build/video/block.json +12 -0
  173. package/build/video/edit.cjs +30 -14
  174. package/build/video/edit.cjs.map +3 -3
  175. package/build/video/index.cjs +0 -2
  176. package/build/video/index.cjs.map +3 -3
  177. package/build/video/save.cjs +5 -1
  178. package/build/video/save.cjs.map +3 -3
  179. package/build-module/accordion/block.json +4 -1
  180. package/build-module/accordion-heading/block.json +1 -0
  181. package/build-module/accordion-item/block.json +7 -1
  182. package/build-module/accordion-panel/block.json +9 -1
  183. package/build-module/archives/block.json +12 -0
  184. package/build-module/audio/block.json +8 -0
  185. package/build-module/audio/edit.mjs +2 -1
  186. package/build-module/audio/edit.mjs.map +2 -2
  187. package/build-module/avatar/block.json +4 -0
  188. package/build-module/avatar/edit.mjs +33 -2
  189. package/build-module/avatar/edit.mjs.map +2 -2
  190. package/build-module/breadcrumbs/block.json +3 -0
  191. package/build-module/breadcrumbs/edit.mjs +3 -3
  192. package/build-module/breadcrumbs/edit.mjs.map +2 -2
  193. package/build-module/button/block.json +6 -0
  194. package/build-module/button/edit.mjs +11 -7
  195. package/build-module/button/edit.mjs.map +2 -2
  196. package/build-module/buttons/block.json +15 -1
  197. package/build-module/categories/block.json +12 -1
  198. package/build-module/code/block.json +13 -0
  199. package/build-module/column/block.json +9 -0
  200. package/build-module/column/edit.mjs +5 -0
  201. package/build-module/column/edit.mjs.map +2 -2
  202. package/build-module/columns/block.json +13 -0
  203. package/build-module/columns/edit.mjs +22 -122
  204. package/build-module/columns/edit.mjs.map +2 -2
  205. package/build-module/comment-author-name/block.json +3 -0
  206. package/build-module/comment-content/block.json +5 -0
  207. package/build-module/comment-date/block.json +3 -0
  208. package/build-module/comment-edit-link/block.json +3 -0
  209. package/build-module/comment-reply-link/block.json +3 -0
  210. package/build-module/comments/block.json +10 -0
  211. package/build-module/comments/edit/placeholder.mjs +95 -87
  212. package/build-module/comments/edit/placeholder.mjs.map +2 -2
  213. package/build-module/comments-pagination/block.json +14 -0
  214. package/build-module/comments-pagination-next/block.json +3 -0
  215. package/build-module/comments-pagination-numbers/block.json +3 -0
  216. package/build-module/comments-pagination-previous/block.json +6 -0
  217. package/build-module/comments-title/block.json +3 -0
  218. package/build-module/cover/block.json +2 -1
  219. package/build-module/cover/edit/index.mjs +36 -7
  220. package/build-module/cover/edit/index.mjs.map +2 -2
  221. package/build-module/cover/edit/inspector-controls.mjs +62 -16
  222. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  223. package/build-module/cover/embed-video-utils.mjs +9 -8
  224. package/build-module/cover/embed-video-utils.mjs.map +2 -2
  225. package/build-module/cover/view.mjs +19 -0
  226. package/build-module/cover/view.mjs.map +7 -0
  227. package/build-module/details/block.json +14 -0
  228. package/build-module/embed/block.json +6 -1
  229. package/build-module/file/block.json +14 -0
  230. package/build-module/footnotes/block.json +13 -0
  231. package/build-module/gallery/block.json +22 -0
  232. package/build-module/gallery/dynamic-gallery.mjs +33 -97
  233. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  234. package/build-module/gallery/edit.mjs +111 -44
  235. package/build-module/gallery/edit.mjs.map +2 -2
  236. package/build-module/gallery/order-controls.mjs +87 -0
  237. package/build-module/gallery/order-controls.mjs.map +7 -0
  238. package/build-module/gallery/order-images.mjs +66 -0
  239. package/build-module/gallery/order-images.mjs.map +7 -0
  240. package/build-module/gallery/order-options.mjs +33 -0
  241. package/build-module/gallery/order-options.mjs.map +7 -0
  242. package/build-module/gallery/use-dynamic-gallery.mjs +1 -7
  243. package/build-module/gallery/use-dynamic-gallery.mjs.map +2 -2
  244. package/build-module/gallery/use-get-media.mjs +2 -3
  245. package/build-module/gallery/use-get-media.mjs.map +2 -2
  246. package/build-module/group/block.json +1 -0
  247. package/build-module/group/edit.mjs +4 -4
  248. package/build-module/group/edit.mjs.map +2 -2
  249. package/build-module/heading/block.json +14 -0
  250. package/build-module/home-link/block.json +30 -0
  251. package/build-module/home-link/edit.mjs +2 -2
  252. package/build-module/home-link/edit.mjs.map +2 -2
  253. package/build-module/icon/components/custom-inserter/index.mjs +3 -1
  254. package/build-module/icon/components/custom-inserter/index.mjs.map +2 -2
  255. package/build-module/icon/edit.mjs +50 -6
  256. package/build-module/icon/edit.mjs.map +2 -2
  257. package/build-module/image/image.mjs +12 -10
  258. package/build-module/image/image.mjs.map +2 -2
  259. package/build-module/image/use-open-image-media-editor-modal.mjs +32 -8
  260. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  261. package/build-module/image/view.mjs +44 -50
  262. package/build-module/image/view.mjs.map +2 -2
  263. package/build-module/latest-comments/block.json +20 -0
  264. package/build-module/latest-posts/block.json +14 -0
  265. package/build-module/list/block.json +12 -1
  266. package/build-module/list-item/block.json +8 -1
  267. package/build-module/list-item/index.mjs +4 -0
  268. package/build-module/list-item/index.mjs.map +2 -2
  269. package/build-module/loginout/block.json +14 -0
  270. package/build-module/math/block.json +14 -0
  271. package/build-module/media-text/block.json +19 -0
  272. package/build-module/navigation/edit/index.mjs +1 -4
  273. package/build-module/navigation/edit/index.mjs.map +2 -2
  274. package/build-module/navigation-link/link-ui/index.mjs +39 -20
  275. package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
  276. package/build-module/navigation-link/link-ui/page-creator.mjs +2 -2
  277. package/build-module/navigation-link/link-ui/page-creator.mjs.map +2 -2
  278. package/build-module/navigation-link/shared/controls.mjs +2 -2
  279. package/build-module/navigation-link/shared/controls.mjs.map +2 -2
  280. package/build-module/navigation-link/shared/index.mjs +6 -0
  281. package/build-module/navigation-link/shared/index.mjs.map +2 -2
  282. package/build-module/navigation-link/shared/use-block-suggestions.mjs +120 -0
  283. package/build-module/navigation-link/shared/use-block-suggestions.mjs.map +7 -0
  284. package/build-module/navigation-link/shared/use-link-preview.mjs +13 -13
  285. package/build-module/navigation-link/shared/use-link-preview.mjs.map +2 -2
  286. package/build-module/navigation-overlay-close/block.json +7 -0
  287. package/build-module/navigation-submenu/block.json +6 -0
  288. package/build-module/navigation-submenu/edit.mjs +11 -2
  289. package/build-module/navigation-submenu/edit.mjs.map +2 -2
  290. package/build-module/page-list/block.json +14 -0
  291. package/build-module/paragraph/block.json +1 -0
  292. package/build-module/paragraph/edit.mjs +1 -2
  293. package/build-module/paragraph/edit.mjs.map +2 -2
  294. package/build-module/playlist/block.json +1 -0
  295. package/build-module/post-author-biography/block.json +5 -0
  296. package/build-module/post-author-name/block.json +5 -0
  297. package/build-module/post-comments-count/block.json +3 -0
  298. package/build-module/post-comments-form/block.json +15 -0
  299. package/build-module/post-content/block.json +4 -1
  300. package/build-module/post-date/block.json +3 -0
  301. package/build-module/post-excerpt/block.json +9 -0
  302. package/build-module/post-featured-image/block.json +1 -0
  303. package/build-module/post-featured-image/edit.mjs +12 -10
  304. package/build-module/post-featured-image/edit.mjs.map +2 -2
  305. package/build-module/post-navigation-link/block.json +30 -0
  306. package/build-module/post-navigation-link/edit.mjs +17 -3
  307. package/build-module/post-navigation-link/edit.mjs.map +2 -2
  308. package/build-module/post-template/block.json +13 -1
  309. package/build-module/post-terms/block.json +10 -0
  310. package/build-module/post-time-to-read/block.json +10 -0
  311. package/build-module/post-title/block.json +14 -0
  312. package/build-module/preformatted/block.json +11 -0
  313. package/build-module/pullquote/block.json +3 -1
  314. package/build-module/query-no-results/block.json +14 -2
  315. package/build-module/query-pagination/block.json +20 -0
  316. package/build-module/query-pagination-next/block.json +3 -0
  317. package/build-module/query-pagination-numbers/block.json +3 -0
  318. package/build-module/query-pagination-previous/block.json +3 -0
  319. package/build-module/query-title/block.json +3 -0
  320. package/build-module/query-total/block.json +10 -0
  321. package/build-module/quote/block.json +3 -0
  322. package/build-module/read-more/block.json +11 -0
  323. package/build-module/rss/block.json +10 -0
  324. package/build-module/search/block.json +2 -1
  325. package/build-module/site-tagline/block.json +12 -1
  326. package/build-module/site-title/block.json +11 -1
  327. package/build-module/social-links/block.json +4 -0
  328. package/build-module/social-links/edit.mjs +2 -3
  329. package/build-module/social-links/edit.mjs.map +2 -2
  330. package/build-module/tab-list/block.json +4 -0
  331. package/build-module/tab-list/edit.mjs +4 -1
  332. package/build-module/tab-list/edit.mjs.map +2 -2
  333. package/build-module/tab-list/save.mjs +4 -1
  334. package/build-module/tab-list/save.mjs.map +2 -2
  335. package/build-module/tab-panel/block.json +25 -0
  336. package/build-module/tab-panel/controls.mjs +2 -2
  337. package/build-module/tab-panel/controls.mjs.map +2 -2
  338. package/build-module/tab-panels/block.json +21 -1
  339. package/build-module/table-of-contents/block.json +7 -0
  340. package/build-module/tabs/block.json +27 -1
  341. package/build-module/tag-cloud/block.json +19 -0
  342. package/build-module/template-part/edit/selection-modal.mjs.map +1 -1
  343. package/build-module/term-count/block.json +12 -0
  344. package/build-module/term-description/block.json +13 -0
  345. package/build-module/term-name/block.json +16 -1
  346. package/build-module/term-template/block.json +14 -1
  347. package/build-module/utils/search-patterns.mjs +7 -32
  348. package/build-module/utils/search-patterns.mjs.map +2 -2
  349. package/build-module/utils/style-state.mjs +6 -4
  350. package/build-module/utils/style-state.mjs.map +2 -2
  351. package/build-module/utils/waveform-utils.mjs +1 -1
  352. package/build-module/utils/waveform-utils.mjs.map +1 -1
  353. package/build-module/verse/block.json +4 -0
  354. package/build-module/video/block.json +12 -0
  355. package/build-module/video/edit.mjs +32 -15
  356. package/build-module/video/edit.mjs.map +2 -2
  357. package/build-module/video/index.mjs +0 -2
  358. package/build-module/video/index.mjs.map +2 -2
  359. package/build-module/video/save.mjs +7 -2
  360. package/build-module/video/save.mjs.map +2 -2
  361. package/build-style/avatar/editor-rtl.css +4 -0
  362. package/build-style/avatar/editor.css +4 -0
  363. package/build-style/comments-pagination/style-rtl.css +3 -0
  364. package/build-style/comments-pagination/style.css +3 -0
  365. package/build-style/common-rtl.css +32 -1
  366. package/build-style/common.css +35 -2
  367. package/build-style/editor-rtl.css +23 -6
  368. package/build-style/editor.css +23 -6
  369. package/build-style/embed/style-rtl.css +4 -1
  370. package/build-style/embed/style.css +4 -1
  371. package/build-style/gallery/editor-rtl.css +1 -3
  372. package/build-style/gallery/editor.css +1 -3
  373. package/build-style/image/editor-rtl.css +6 -0
  374. package/build-style/image/editor.css +6 -0
  375. package/build-style/image/style-rtl.css +11 -2
  376. package/build-style/image/style.css +11 -2
  377. package/build-style/media-text/style-rtl.css +4 -1
  378. package/build-style/media-text/style.css +4 -1
  379. package/build-style/navigation/style-rtl.css +18 -3
  380. package/build-style/navigation/style.css +18 -3
  381. package/build-style/navigation-link/editor-rtl.css +3 -1
  382. package/build-style/navigation-link/editor.css +3 -1
  383. package/build-style/navigation-overlay-close/style-rtl.css +1 -1
  384. package/build-style/navigation-overlay-close/style.css +1 -1
  385. package/build-style/navigation-submenu/editor-rtl.css +3 -1
  386. package/build-style/navigation-submenu/editor.css +3 -1
  387. package/build-style/post-navigation-link/style-rtl.css +3 -0
  388. package/build-style/post-navigation-link/style.css +3 -0
  389. package/build-style/query-pagination/style-rtl.css +3 -0
  390. package/build-style/query-pagination/style.css +3 -0
  391. package/build-style/style-rtl.css +94 -13
  392. package/build-style/style.css +97 -14
  393. package/build-style/tab-panel/style-rtl.css +2 -0
  394. package/build-style/tab-panel/style.css +2 -0
  395. package/build-style/table/editor-rtl.css +6 -1
  396. package/build-style/table/editor.css +6 -1
  397. package/build-style/table/style-rtl.css +4 -2
  398. package/build-style/table/style.css +4 -2
  399. package/build-style/tag-cloud/style-rtl.css +1 -1
  400. package/build-style/tag-cloud/style.css +1 -1
  401. package/build-style/verse/style-rtl.css +8 -1
  402. package/build-style/verse/style.css +8 -1
  403. package/build-types/gallery/order-controls.d.ts +58 -0
  404. package/build-types/gallery/order-controls.d.ts.map +1 -0
  405. package/build-types/gallery/order-options.d.ts +67 -0
  406. package/build-types/gallery/order-options.d.ts.map +1 -0
  407. package/package.json +46 -44
  408. package/src/accordion/README.md +3 -0
  409. package/src/accordion/block.json +4 -1
  410. package/src/accordion-heading/README.md +1 -0
  411. package/src/accordion-heading/block.json +1 -0
  412. package/src/accordion-item/README.md +5 -0
  413. package/src/accordion-item/block.json +7 -1
  414. package/src/accordion-panel/README.md +7 -0
  415. package/src/accordion-panel/block.json +9 -1
  416. package/src/archives/README.md +6 -0
  417. package/src/archives/block.json +12 -0
  418. package/src/audio/README.md +4 -0
  419. package/src/audio/block.json +8 -0
  420. package/src/audio/edit.jsx +2 -1
  421. package/src/avatar/README.md +2 -0
  422. package/src/avatar/block.json +4 -0
  423. package/src/avatar/edit.jsx +48 -2
  424. package/src/avatar/editor.scss +4 -0
  425. package/src/avatar/index.php +5 -3
  426. package/src/breadcrumbs/README.md +2 -0
  427. package/src/breadcrumbs/block.json +3 -0
  428. package/src/breadcrumbs/edit.jsx +3 -3
  429. package/src/breadcrumbs/index.php +1 -1
  430. package/src/button/README.md +4 -0
  431. package/src/button/block.json +6 -0
  432. package/src/button/edit.jsx +47 -52
  433. package/src/button/index.php +47 -0
  434. package/src/buttons/README.md +8 -0
  435. package/src/buttons/block.json +15 -1
  436. package/src/categories/README.md +6 -0
  437. package/src/categories/block.json +12 -1
  438. package/src/code/README.md +7 -0
  439. package/src/code/block.json +13 -0
  440. package/src/column/README.md +4 -0
  441. package/src/column/block.json +9 -0
  442. package/src/column/edit.jsx +6 -0
  443. package/src/columns/README.md +7 -0
  444. package/src/columns/block.json +13 -0
  445. package/src/columns/edit.jsx +1 -131
  446. package/src/comment-author-name/README.md +2 -0
  447. package/src/comment-author-name/block.json +3 -0
  448. package/src/comment-content/README.md +4 -0
  449. package/src/comment-content/block.json +5 -0
  450. package/src/comment-date/README.md +2 -0
  451. package/src/comment-date/block.json +3 -0
  452. package/src/comment-edit-link/README.md +2 -0
  453. package/src/comment-edit-link/block.json +3 -0
  454. package/src/comment-reply-link/README.md +2 -0
  455. package/src/comment-reply-link/block.json +3 -0
  456. package/src/comments/README.md +5 -0
  457. package/src/comments/block.json +10 -0
  458. package/src/comments/edit/placeholder.jsx +5 -1
  459. package/src/comments-pagination/README.md +6 -0
  460. package/src/comments-pagination/block.json +14 -0
  461. package/src/comments-pagination/style.scss +3 -0
  462. package/src/comments-pagination-next/README.md +2 -0
  463. package/src/comments-pagination-next/block.json +3 -0
  464. package/src/comments-pagination-numbers/README.md +2 -0
  465. package/src/comments-pagination-numbers/block.json +3 -0
  466. package/src/comments-pagination-previous/README.md +2 -0
  467. package/src/comments-pagination-previous/block.json +6 -0
  468. package/src/comments-title/README.md +2 -0
  469. package/src/comments-title/block.json +3 -0
  470. package/src/common.scss +38 -0
  471. package/src/cover/README.md +1 -0
  472. package/src/cover/block.json +2 -1
  473. package/src/cover/edit/index.jsx +41 -6
  474. package/src/cover/edit/inspector-controls.jsx +74 -14
  475. package/src/cover/embed-video-utils.js +18 -10
  476. package/src/cover/index.php +44 -15
  477. package/src/cover/test/edit.browser.test.js +200 -4
  478. package/src/cover/test/embed-video-utils.test.js +48 -0
  479. package/src/cover/view.js +22 -0
  480. package/src/details/README.md +8 -0
  481. package/src/details/block.json +14 -0
  482. package/src/embed/README.md +4 -0
  483. package/src/embed/block.json +6 -1
  484. package/src/embed/style.scss +7 -1
  485. package/src/file/README.md +8 -0
  486. package/src/file/block.json +14 -0
  487. package/src/footnotes/README.md +7 -0
  488. package/src/footnotes/block.json +13 -0
  489. package/src/gallery/README.md +17 -0
  490. package/src/gallery/block.json +22 -0
  491. package/src/gallery/dynamic-gallery.jsx +11 -91
  492. package/src/gallery/edit.jsx +147 -49
  493. package/src/gallery/editor.scss +5 -9
  494. package/src/gallery/order-controls.tsx +143 -0
  495. package/src/gallery/order-images.js +111 -0
  496. package/src/gallery/order-options.ts +75 -0
  497. package/src/gallery/test/edit.jsdom.test.js +87 -10
  498. package/src/gallery/test/order-images.js +162 -0
  499. package/src/gallery/use-dynamic-gallery.js +1 -9
  500. package/src/gallery/use-get-media.js +7 -2
  501. package/src/group/README.md +1 -0
  502. package/src/group/block.json +1 -0
  503. package/src/group/edit.jsx +5 -5
  504. package/src/heading/README.md +8 -0
  505. package/src/heading/block.json +14 -0
  506. package/src/home-link/README.md +11 -0
  507. package/src/home-link/block.json +30 -0
  508. package/src/home-link/edit.jsx +2 -2
  509. package/src/icon/components/custom-inserter/index.jsx +5 -1
  510. package/src/icon/edit.jsx +68 -7
  511. package/src/icon/index.php +10 -1
  512. package/src/image/editor.scss +8 -0
  513. package/src/image/image.jsx +13 -11
  514. package/src/image/index.php +3 -4
  515. package/src/image/style.scss +14 -2
  516. package/src/image/test/use-open-image-media-editor-modal.jsdom.test.js +201 -0
  517. package/src/image/use-open-image-media-editor-modal.js +37 -4
  518. package/src/image/view.js +64 -68
  519. package/src/latest-comments/README.md +8 -0
  520. package/src/latest-comments/block.json +20 -0
  521. package/src/latest-posts/README.md +8 -0
  522. package/src/latest-posts/block.json +14 -0
  523. package/src/list/README.md +6 -0
  524. package/src/list/block.json +12 -1
  525. package/src/list-item/README.md +6 -0
  526. package/src/list-item/block.json +8 -1
  527. package/src/list-item/index.js +5 -0
  528. package/src/loginout/README.md +8 -0
  529. package/src/loginout/block.json +14 -0
  530. package/src/math/README.md +8 -0
  531. package/src/math/block.json +14 -0
  532. package/src/media-text/README.md +18 -0
  533. package/src/media-text/block.json +19 -0
  534. package/src/media-text/style.scss +5 -1
  535. package/src/navigation/edit/index.jsx +2 -4
  536. package/src/navigation/style.scss +40 -4
  537. package/src/navigation/test/use-navigation-menu.jsdom.test.js +1 -1
  538. package/src/navigation-link/README.md +1 -1
  539. package/src/navigation-link/editor.scss +6 -1
  540. package/src/navigation-link/link-ui/index.jsx +60 -27
  541. package/src/navigation-link/link-ui/page-creator.jsx +2 -2
  542. package/src/navigation-link/link-ui/test/get-suggestions-query.jsdom.test.js +67 -0
  543. package/src/navigation-link/shared/controls.jsx +2 -2
  544. package/src/navigation-link/shared/index.js +4 -0
  545. package/src/navigation-link/shared/test/use-block-suggestions.jsdom.test.js +158 -0
  546. package/src/navigation-link/shared/test/use-entity-binding.jsdom.test.js +1 -7
  547. package/src/navigation-link/shared/test/use-link-preview.jsdom.test.js +22 -22
  548. package/src/navigation-link/shared/use-block-suggestions.js +192 -0
  549. package/src/navigation-link/shared/use-link-preview.js +15 -14
  550. package/src/navigation-overlay-close/README.md +1 -0
  551. package/src/navigation-overlay-close/block.json +7 -0
  552. package/src/navigation-overlay-close/style.scss +1 -1
  553. package/src/navigation-submenu/README.md +7 -0
  554. package/src/navigation-submenu/block.json +6 -0
  555. package/src/navigation-submenu/edit.jsx +11 -1
  556. package/src/navigation-submenu/editor.scss +6 -1
  557. package/src/navigation-submenu/index.php +11 -0
  558. package/src/page-list/README.md +8 -0
  559. package/src/page-list/block.json +14 -0
  560. package/src/paragraph/README.md +1 -0
  561. package/src/paragraph/block.json +1 -0
  562. package/src/paragraph/edit.jsx +1 -3
  563. package/src/playlist/README.md +1 -0
  564. package/src/playlist/block.json +1 -0
  565. package/src/playlist/test/edit-component.jsdom.test.jsx +11 -11
  566. package/src/playlist-track/test/edit.jsdom.test.jsx +3 -3
  567. package/src/post-author-biography/README.md +4 -0
  568. package/src/post-author-biography/block.json +5 -0
  569. package/src/post-author-name/README.md +4 -0
  570. package/src/post-author-name/block.json +5 -0
  571. package/src/post-comments-count/README.md +2 -0
  572. package/src/post-comments-count/block.json +3 -0
  573. package/src/post-comments-form/README.md +8 -0
  574. package/src/post-comments-form/block.json +15 -0
  575. package/src/post-content/README.md +3 -0
  576. package/src/post-content/block.json +4 -1
  577. package/src/post-date/README.md +2 -0
  578. package/src/post-date/block.json +3 -0
  579. package/src/post-excerpt/README.md +7 -0
  580. package/src/post-excerpt/block.json +9 -0
  581. package/src/post-featured-image/block.json +1 -0
  582. package/src/post-featured-image/edit.jsx +13 -11
  583. package/src/post-navigation-link/README.md +12 -0
  584. package/src/post-navigation-link/block.json +30 -0
  585. package/src/post-navigation-link/edit.jsx +23 -2
  586. package/src/post-navigation-link/index.php +94 -5
  587. package/src/post-navigation-link/style.scss +2 -0
  588. package/src/post-template/README.md +7 -0
  589. package/src/post-template/block.json +13 -1
  590. package/src/post-terms/README.md +8 -0
  591. package/src/post-terms/block.json +10 -0
  592. package/src/post-time-to-read/README.md +8 -0
  593. package/src/post-time-to-read/block.json +10 -0
  594. package/src/post-title/README.md +8 -0
  595. package/src/post-title/block.json +14 -0
  596. package/src/preformatted/README.md +9 -0
  597. package/src/preformatted/block.json +11 -0
  598. package/src/pullquote/README.md +2 -0
  599. package/src/pullquote/block.json +3 -1
  600. package/src/query-no-results/README.md +10 -0
  601. package/src/query-no-results/block.json +14 -2
  602. package/src/query-pagination/README.md +6 -0
  603. package/src/query-pagination/block.json +20 -0
  604. package/src/query-pagination/style.scss +3 -0
  605. package/src/query-pagination-next/README.md +2 -0
  606. package/src/query-pagination-next/block.json +3 -0
  607. package/src/query-pagination-numbers/README.md +2 -0
  608. package/src/query-pagination-numbers/block.json +3 -0
  609. package/src/query-pagination-previous/README.md +2 -0
  610. package/src/query-pagination-previous/block.json +3 -0
  611. package/src/query-title/README.md +2 -0
  612. package/src/query-title/block.json +3 -0
  613. package/src/query-total/README.md +8 -0
  614. package/src/query-total/block.json +10 -0
  615. package/src/quote/README.md +3 -0
  616. package/src/quote/block.json +3 -0
  617. package/src/read-more/README.md +8 -0
  618. package/src/read-more/block.json +11 -0
  619. package/src/rss/README.md +8 -0
  620. package/src/rss/block.json +10 -0
  621. package/src/search/README.md +1 -0
  622. package/src/search/block.json +2 -1
  623. package/src/site-tagline/README.md +9 -0
  624. package/src/site-tagline/block.json +12 -1
  625. package/src/site-title/README.md +8 -0
  626. package/src/site-title/block.json +11 -1
  627. package/src/social-links/README.md +3 -0
  628. package/src/social-links/block.json +4 -0
  629. package/src/social-links/edit.jsx +2 -3
  630. package/src/tab-list/README.md +2 -0
  631. package/src/tab-list/block.json +4 -0
  632. package/src/tab-list/edit.jsx +3 -0
  633. package/src/tab-list/save.jsx +3 -0
  634. package/src/tab-panel/README.md +9 -0
  635. package/src/tab-panel/block.json +25 -0
  636. package/src/tab-panel/controls.jsx +2 -2
  637. package/src/tab-panel/style.scss +5 -2
  638. package/src/tab-panels/README.md +9 -0
  639. package/src/tab-panels/block.json +21 -1
  640. package/src/table/editor.scss +8 -2
  641. package/src/table/style.scss +4 -4
  642. package/src/table-of-contents/README.md +6 -0
  643. package/src/table-of-contents/block.json +7 -0
  644. package/src/tabs/README.md +11 -0
  645. package/src/tabs/block.json +27 -1
  646. package/src/tag-cloud/README.md +9 -0
  647. package/src/tag-cloud/block.json +19 -0
  648. package/src/tag-cloud/style.scss +1 -1
  649. package/src/template-part/edit/selection-modal.jsx +1 -1
  650. package/src/template-part/index.php +16 -3
  651. package/src/term-count/README.md +10 -0
  652. package/src/term-count/block.json +12 -0
  653. package/src/term-description/README.md +8 -0
  654. package/src/term-description/block.json +13 -0
  655. package/src/term-name/README.md +9 -0
  656. package/src/term-name/block.json +16 -1
  657. package/src/term-name/index.php +1 -1
  658. package/src/term-template/README.md +8 -0
  659. package/src/term-template/block.json +14 -1
  660. package/src/utils/search-patterns.js +9 -53
  661. package/src/utils/style-state.js +6 -4
  662. package/src/utils/test/{search-patterns.js → search-patterns.jsdom.test.js} +1 -22
  663. package/src/utils/test/waveform-player-auto-init.jsdom.test.js +25 -0
  664. package/src/utils/test/waveform-player-dependency.jsdom.test.js +7 -60
  665. package/src/utils/test/waveform-utils.browser.test.js +3 -15
  666. package/src/utils/waveform-utils.js +1 -1
  667. package/src/verse/README.md +4 -0
  668. package/src/verse/block.json +4 -0
  669. package/src/verse/style.scss +11 -2
  670. package/src/video/README.md +11 -0
  671. package/src/video/block.json +12 -0
  672. package/src/video/edit.jsx +65 -49
  673. package/src/video/index.js +0 -2
  674. package/src/video/save.jsx +10 -1
  675. package/build/columns/utils.cjs +0 -112
  676. package/build/columns/utils.cjs.map +0 -7
  677. package/build/video/variations.cjs +0 -75
  678. package/build/video/variations.cjs.map +0 -7
  679. package/build-module/columns/utils.mjs +0 -78
  680. package/build-module/columns/utils.mjs.map +0 -7
  681. package/build-module/video/variations.mjs +0 -50
  682. package/build-module/video/variations.mjs.map +0 -7
  683. package/src/columns/test/utils.js +0 -331
  684. package/src/columns/utils.js +0 -176
  685. package/src/video/test/variations.js +0 -63
  686. package/src/video/variations.js +0 -62
@@ -0,0 +1,87 @@
1
+ // packages/block-library/src/gallery/order-controls.tsx
2
+ import { __ } from "@wordpress/i18n";
3
+ import { SelectControl as WCSelectControl } from "@wordpress/components";
4
+ import {
5
+ ORDER_OPTIONS,
6
+ RANDOM_OPTION,
7
+ RANDOM_ORDER,
8
+ parseOrderValue,
9
+ toOrderValue
10
+ } from "./order-options.mjs";
11
+ import { jsx } from "react/jsx-runtime";
12
+ function getOrderHelp(isRandom) {
13
+ return isRandom ? __("Images are shown in a random order each time the page loads.") : void 0;
14
+ }
15
+ var SOURCE_ORDER_OPTIONS = [...ORDER_OPTIONS, RANDOM_OPTION];
16
+ function SourceOrderControl({
17
+ order,
18
+ isRandom,
19
+ onChange,
20
+ onSelectRandom
21
+ }) {
22
+ return /* @__PURE__ */ jsx(
23
+ WCSelectControl,
24
+ {
25
+ label: __("Order by"),
26
+ value: isRandom ? RANDOM_ORDER : toOrderValue(order),
27
+ options: SOURCE_ORDER_OPTIONS,
28
+ help: getOrderHelp(isRandom),
29
+ onChange: (value) => {
30
+ if (value === RANDOM_ORDER) {
31
+ onSelectRandom();
32
+ return;
33
+ }
34
+ onChange(parseOrderValue(value));
35
+ }
36
+ }
37
+ );
38
+ }
39
+ var CUSTOM_ORDER = "custom";
40
+ function SortImagesControl({
41
+ currentOrder,
42
+ isRandom,
43
+ canSort,
44
+ onSort,
45
+ onSelectCustom,
46
+ onSelectRandom
47
+ }) {
48
+ const options = [
49
+ { label: __("Custom"), value: CUSTOM_ORDER, disabled: !isRandom },
50
+ ...ORDER_OPTIONS.map((option) => ({
51
+ ...option,
52
+ disabled: !canSort
53
+ })),
54
+ RANDOM_OPTION
55
+ ];
56
+ let value = CUSTOM_ORDER;
57
+ if (isRandom) {
58
+ value = RANDOM_ORDER;
59
+ } else if (currentOrder) {
60
+ value = toOrderValue(currentOrder);
61
+ }
62
+ return /* @__PURE__ */ jsx(
63
+ WCSelectControl,
64
+ {
65
+ label: __("Order by"),
66
+ value,
67
+ options,
68
+ help: getOrderHelp(isRandom),
69
+ onChange: (nextValue) => {
70
+ if (nextValue === RANDOM_ORDER) {
71
+ onSelectRandom();
72
+ return;
73
+ }
74
+ if (nextValue === CUSTOM_ORDER) {
75
+ onSelectCustom();
76
+ return;
77
+ }
78
+ onSort(parseOrderValue(nextValue));
79
+ }
80
+ }
81
+ );
82
+ }
83
+ export {
84
+ SortImagesControl,
85
+ SourceOrderControl
86
+ };
87
+ //# sourceMappingURL=order-controls.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/gallery/order-controls.tsx"],
4
+ "sourcesContent": ["import { __ } from '@wordpress/i18n';\nimport { SelectControl as WCSelectControl } from '@wordpress/components';\nimport {\n\tORDER_OPTIONS,\n\tRANDOM_OPTION,\n\tRANDOM_ORDER,\n\tparseOrderValue,\n\ttoOrderValue,\n} from './order-options';\nimport type { Order } from './order-options';\n\nfunction getOrderHelp( isRandom: boolean ): string | undefined {\n\treturn isRandom\n\t\t? __( 'Images are shown in a random order each time the page loads.' )\n\t\t: undefined;\n}\n\nconst SOURCE_ORDER_OPTIONS = [ ...ORDER_OPTIONS, RANDOM_OPTION ];\n\ntype SourceOrderControlProps = {\n\t/** The stored query order. */\n\torder: Order;\n\t/** Whether the gallery's `randomOrder` attribute is set. */\n\tisRandom: boolean;\n\t/**\n\t * Called with `{ orderby, order }` to update the query. Choosing an order\n\t * also turns \"Random\" off; the handler owns that so both writes land in one\n\t * undo level.\n\t */\n\tonChange: ( order: Order ) => void;\n\t/** Called when \"Random\" is chosen. */\n\tonSelectRandom: () => void;\n};\n\n/**\n * Ordering control for a dynamic gallery, shown in the Settings panel. The\n * chosen order is a *setting*: it's stored in the source's query and re-applied\n * every time the source resolves. \"Random\" is stored separately (the\n * `randomOrder` attribute) and overrides the query order on the front end, so\n * while it's set the control shows it instead of the query order.\n */\nexport function SourceOrderControl( {\n\torder,\n\tisRandom,\n\tonChange,\n\tonSelectRandom,\n}: SourceOrderControlProps ) {\n\treturn (\n\t\t<WCSelectControl\n\t\t\tlabel={ __( 'Order by' ) }\n\t\t\tvalue={ isRandom ? RANDOM_ORDER : toOrderValue( order ) }\n\t\t\toptions={ SOURCE_ORDER_OPTIONS }\n\t\t\thelp={ getOrderHelp( isRandom ) }\n\t\t\tonChange={ ( value ) => {\n\t\t\t\tif ( value === RANDOM_ORDER ) {\n\t\t\t\t\tonSelectRandom();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonChange( parseOrderValue( value ) );\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nconst CUSTOM_ORDER = 'custom';\n\ntype SortImagesControlProps = {\n\t/** The last sort applied, while it still holds, or `null` for a custom order. */\n\tcurrentOrder: Order | null;\n\t/** Whether the gallery's `randomOrder` attribute is set. */\n\tisRandom: boolean;\n\t/** Whether the sort orders can be applied (false while media resolves). */\n\tcanSort: boolean;\n\t/**\n\t * Called with `{ orderby, order }` to sort the images. Sorting also turns\n\t * \"Random\" off; the handler owns that so both writes land in one undo level.\n\t */\n\tonSort: ( order: Order ) => void;\n\t/** Called when \"Custom\" is chosen, which turns \"Random\" off. */\n\tonSelectCustom: () => void;\n\t/** Called when \"Random\" is chosen. */\n\tonSelectRandom: () => void;\n};\n\n/**\n * Ordering control for a static gallery, shown in the Settings panel.\n *\n * The date and title orders are one-off *actions*: choosing one reorders the\n * inner image blocks once, and the user can drag them into any other order\n * afterwards. Nothing is stored for them, so the caller passes back the last\n * sort it applied for as long as the images remain in that sequence, and\n * `null` (\"Custom\") otherwise. \"Custom\" means the order arranged in the\n * editor, and is choosable only while \"Random\" is on: picking it turns\n * \"Random\" off without reordering anything.\n *\n * \"Random\" is the one stored value (the `randomOrder` attribute). It applies\n * on the front end only, leaving the editor order as it is, and choosing any\n * other option clears it.\n */\nexport function SortImagesControl( {\n\tcurrentOrder,\n\tisRandom,\n\tcanSort,\n\tonSort,\n\tonSelectCustom,\n\tonSelectRandom,\n}: SortImagesControlProps ) {\n\tconst options = [\n\t\t{ label: __( 'Custom' ), value: CUSTOM_ORDER, disabled: ! isRandom },\n\t\t...ORDER_OPTIONS.map( ( option ) => ( {\n\t\t\t...option,\n\t\t\tdisabled: ! canSort,\n\t\t} ) ),\n\t\tRANDOM_OPTION,\n\t];\n\n\tlet value = CUSTOM_ORDER;\n\tif ( isRandom ) {\n\t\tvalue = RANDOM_ORDER;\n\t} else if ( currentOrder ) {\n\t\tvalue = toOrderValue( currentOrder );\n\t}\n\n\treturn (\n\t\t<WCSelectControl\n\t\t\tlabel={ __( 'Order by' ) }\n\t\t\tvalue={ value }\n\t\t\toptions={ options }\n\t\t\thelp={ getOrderHelp( isRandom ) }\n\t\t\tonChange={ ( nextValue ) => {\n\t\t\t\tif ( nextValue === RANDOM_ORDER ) {\n\t\t\t\t\tonSelectRandom();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( nextValue === CUSTOM_ORDER ) {\n\t\t\t\t\tonSelectCustom();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonSort( parseOrderValue( nextValue ) );\n\t\t\t} }\n\t\t/>\n\t);\n}\n"],
5
+ "mappings": ";AAAA,SAAS,UAAU;AACnB,SAAS,iBAAiB,uBAAuB;AACjD;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAwCL;AArCF,SAAS,aAAc,UAAwC;AAC9D,SAAO,WACJ,GAAI,8DAA+D,IACnE;AACJ;AAEA,IAAM,uBAAuB,CAAE,GAAG,eAAe,aAAc;AAwBxD,SAAS,mBAAoB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAA6B;AAC5B,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ,GAAI,UAAW;AAAA,MACvB,OAAQ,WAAW,eAAe,aAAc,KAAM;AAAA,MACtD,SAAU;AAAA,MACV,MAAO,aAAc,QAAS;AAAA,MAC9B,UAAW,CAAE,UAAW;AACvB,YAAK,UAAU,cAAe;AAC7B,yBAAe;AACf;AAAA,QACD;AACA,iBAAU,gBAAiB,KAAM,CAAE;AAAA,MACpC;AAAA;AAAA,EACD;AAEF;AAEA,IAAM,eAAe;AAmCd,SAAS,kBAAmB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAA4B;AAC3B,QAAM,UAAU;AAAA,IACf,EAAE,OAAO,GAAI,QAAS,GAAG,OAAO,cAAc,UAAU,CAAE,SAAS;AAAA,IACnE,GAAG,cAAc,IAAK,CAAE,YAAc;AAAA,MACrC,GAAG;AAAA,MACH,UAAU,CAAE;AAAA,IACb,EAAI;AAAA,IACJ;AAAA,EACD;AAEA,MAAI,QAAQ;AACZ,MAAK,UAAW;AACf,YAAQ;AAAA,EACT,WAAY,cAAe;AAC1B,YAAQ,aAAc,YAAa;AAAA,EACpC;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ,GAAI,UAAW;AAAA,MACvB;AAAA,MACA;AAAA,MACA,MAAO,aAAc,QAAS;AAAA,MAC9B,UAAW,CAAE,cAAe;AAC3B,YAAK,cAAc,cAAe;AACjC,yBAAe;AACf;AAAA,QACD;AACA,YAAK,cAAc,cAAe;AACjC,yBAAe;AACf;AAAA,QACD;AACA,eAAQ,gBAAiB,SAAU,CAAE;AAAA,MACtC;AAAA;AAAA,EACD;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,66 @@
1
+ // packages/block-library/src/gallery/order-images.js
2
+ function getSortKey(block, media, orderby) {
3
+ const { id } = block.attributes;
4
+ if (id === void 0) {
5
+ return void 0;
6
+ }
7
+ const record = media.find((item) => item.id === id);
8
+ if (!record) {
9
+ return void 0;
10
+ }
11
+ if (orderby === "title") {
12
+ return record.title?.raw ?? record.title?.rendered ?? "";
13
+ }
14
+ return record.date ?? "";
15
+ }
16
+ function hasSortableImages(blocks, media) {
17
+ const mediaIds = new Set(media.map((item) => item.id));
18
+ let sortableCount = 0;
19
+ for (const block of blocks) {
20
+ if (!mediaIds.has(block.attributes.id)) {
21
+ continue;
22
+ }
23
+ sortableCount++;
24
+ if (sortableCount > 1) {
25
+ return true;
26
+ }
27
+ }
28
+ return false;
29
+ }
30
+ function compareKeys(a, b, orderby) {
31
+ if (orderby === "title") {
32
+ return a.localeCompare(b, void 0, {
33
+ numeric: true,
34
+ sensitivity: "base"
35
+ });
36
+ }
37
+ if (a === b) {
38
+ return 0;
39
+ }
40
+ return a < b ? -1 : 1;
41
+ }
42
+ function sortImageBlocks(blocks, media, { orderby, order }) {
43
+ const direction = order === "desc" ? -1 : 1;
44
+ const keys = new Map(
45
+ blocks.map((block) => [
46
+ block,
47
+ getSortKey(block, media, orderby)
48
+ ])
49
+ );
50
+ return [...blocks].sort((a, b) => {
51
+ const keyA = keys.get(a);
52
+ const keyB = keys.get(b);
53
+ if (keyA === void 0 || keyB === void 0) {
54
+ if (keyA === keyB) {
55
+ return 0;
56
+ }
57
+ return keyA === void 0 ? 1 : -1;
58
+ }
59
+ return compareKeys(keyA, keyB, orderby) * direction;
60
+ });
61
+ }
62
+ export {
63
+ hasSortableImages,
64
+ sortImageBlocks
65
+ };
66
+ //# sourceMappingURL=order-images.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/gallery/order-images.js"],
4
+ "sourcesContent": ["/**\n * Returns the value an image block is ordered by, or `undefined` when it has no\n * resolved attachment record to take it from.\n *\n * @param {Object} block A `core/image` inner block.\n * @param {Array} media Attachment records for the gallery's images.\n * @param {string} orderby `date` or `title`.\n * @return {?string} The sort key.\n */\nfunction getSortKey( block, media, orderby ) {\n\tconst { id } = block.attributes;\n\tif ( id === undefined ) {\n\t\treturn undefined;\n\t}\n\tconst record = media.find( ( item ) => item.id === id );\n\tif ( ! record ) {\n\t\treturn undefined;\n\t}\n\tif ( orderby === 'title' ) {\n\t\t// The media is fetched in the default (view) context, so `rendered`\n\t\t// is the usual source; `raw` is only present with the edit context.\n\t\treturn record.title?.raw ?? record.title?.rendered ?? '';\n\t}\n\treturn record.date ?? '';\n}\n\n/**\n * Whether there's anything to sort: at least two image blocks with a resolved\n * attachment record. With fewer, sorting is a no-op, so the sort options are\n * disabled.\n *\n * @param {Array} blocks The gallery's `core/image` inner blocks.\n * @param {Array} media Attachment records for the gallery's images.\n * @return {boolean} Whether the images can be sorted.\n */\nexport function hasSortableImages( blocks, media ) {\n\t// Runs on every render, so avoid scanning `media` once per block.\n\tconst mediaIds = new Set( media.map( ( item ) => item.id ) );\n\tlet sortableCount = 0;\n\tfor ( const block of blocks ) {\n\t\tif ( ! mediaIds.has( block.attributes.id ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tsortableCount++;\n\t\tif ( sortableCount > 1 ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Compares two sort keys for the given field. Titles use a natural,\n * case-insensitive comparison so `IMG_2` sorts before `IMG_10`; dates are ISO\n * 8601 strings, so a plain string comparison orders them chronologically.\n *\n * @param {string} a First key.\n * @param {string} b Second key.\n * @param {string} orderby `date` or `title`.\n * @return {number} Negative when `a` sorts first, positive when `b` does.\n */\nfunction compareKeys( a, b, orderby ) {\n\tif ( orderby === 'title' ) {\n\t\treturn a.localeCompare( b, undefined, {\n\t\t\tnumeric: true,\n\t\t\tsensitivity: 'base',\n\t\t} );\n\t}\n\tif ( a === b ) {\n\t\treturn 0;\n\t}\n\treturn a < b ? -1 : 1;\n}\n\n/**\n * Sorts a static gallery's image blocks by an attachment field.\n *\n * Blocks without an `id`, or whose attachment record isn't in `media` (still\n * loading, or deleted from the library), can't be placed, so they keep their\n * relative order and move to the end. Blocks with equal keys likewise keep\n * their relative order (`Array.prototype.sort` is stable), so re-applying the\n * current order is a no-op.\n *\n * @param {Array} blocks The gallery's `core/image` inner blocks.\n * @param {Array} media Attachment records for the gallery's images.\n * @param {Object} order The order to apply.\n * @param {string} order.orderby `date` or `title`.\n * @param {string} order.order `asc` or `desc`.\n * @return {Array} A new array holding the same block objects, sorted.\n */\nexport function sortImageBlocks( blocks, media, { orderby, order } ) {\n\tconst direction = order === 'desc' ? -1 : 1;\n\tconst keys = new Map(\n\t\tblocks.map( ( block ) => [\n\t\t\tblock,\n\t\t\tgetSortKey( block, media, orderby ),\n\t\t] )\n\t);\n\n\treturn [ ...blocks ].sort( ( a, b ) => {\n\t\tconst keyA = keys.get( a );\n\t\tconst keyB = keys.get( b );\n\t\tif ( keyA === undefined || keyB === undefined ) {\n\t\t\tif ( keyA === keyB ) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn keyA === undefined ? 1 : -1;\n\t\t}\n\t\treturn compareKeys( keyA, keyB, orderby ) * direction;\n\t} );\n}\n"],
5
+ "mappings": ";AASA,SAAS,WAAY,OAAO,OAAO,SAAU;AAC5C,QAAM,EAAE,GAAG,IAAI,MAAM;AACrB,MAAK,OAAO,QAAY;AACvB,WAAO;AAAA,EACR;AACA,QAAM,SAAS,MAAM,KAAM,CAAE,SAAU,KAAK,OAAO,EAAG;AACtD,MAAK,CAAE,QAAS;AACf,WAAO;AAAA,EACR;AACA,MAAK,YAAY,SAAU;AAG1B,WAAO,OAAO,OAAO,OAAO,OAAO,OAAO,YAAY;AAAA,EACvD;AACA,SAAO,OAAO,QAAQ;AACvB;AAWO,SAAS,kBAAmB,QAAQ,OAAQ;AAElD,QAAM,WAAW,IAAI,IAAK,MAAM,IAAK,CAAE,SAAU,KAAK,EAAG,CAAE;AAC3D,MAAI,gBAAgB;AACpB,aAAY,SAAS,QAAS;AAC7B,QAAK,CAAE,SAAS,IAAK,MAAM,WAAW,EAAG,GAAI;AAC5C;AAAA,IACD;AACA;AACA,QAAK,gBAAgB,GAAI;AACxB,aAAO;AAAA,IACR;AAAA,EACD;AACA,SAAO;AACR;AAYA,SAAS,YAAa,GAAG,GAAG,SAAU;AACrC,MAAK,YAAY,SAAU;AAC1B,WAAO,EAAE,cAAe,GAAG,QAAW;AAAA,MACrC,SAAS;AAAA,MACT,aAAa;AAAA,IACd,CAAE;AAAA,EACH;AACA,MAAK,MAAM,GAAI;AACd,WAAO;AAAA,EACR;AACA,SAAO,IAAI,IAAI,KAAK;AACrB;AAkBO,SAAS,gBAAiB,QAAQ,OAAO,EAAE,SAAS,MAAM,GAAI;AACpE,QAAM,YAAY,UAAU,SAAS,KAAK;AAC1C,QAAM,OAAO,IAAI;AAAA,IAChB,OAAO,IAAK,CAAE,UAAW;AAAA,MACxB;AAAA,MACA,WAAY,OAAO,OAAO,OAAQ;AAAA,IACnC,CAAE;AAAA,EACH;AAEA,SAAO,CAAE,GAAG,MAAO,EAAE,KAAM,CAAE,GAAG,MAAO;AACtC,UAAM,OAAO,KAAK,IAAK,CAAE;AACzB,UAAM,OAAO,KAAK,IAAK,CAAE;AACzB,QAAK,SAAS,UAAa,SAAS,QAAY;AAC/C,UAAK,SAAS,MAAO;AACpB,eAAO;AAAA,MACR;AACA,aAAO,SAAS,SAAY,IAAI;AAAA,IACjC;AACA,WAAO,YAAa,MAAM,MAAM,OAAQ,IAAI;AAAA,EAC7C,CAAE;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,33 @@
1
+ // packages/block-library/src/gallery/order-options.ts
2
+ import { __ } from "@wordpress/i18n";
3
+ function toOrderValue(order) {
4
+ return `${order.orderby}/${order.order}`;
5
+ }
6
+ function parseOrderValue(value) {
7
+ const [orderby, order] = value.split("/");
8
+ return { orderby, order };
9
+ }
10
+ var ORDER_OPTIONS = [
11
+ { label: __("Newest to oldest"), value: "date/desc" },
12
+ { label: __("Oldest to newest"), value: "date/asc" },
13
+ {
14
+ /* translators: Label for ordering images by title in ascending order. */
15
+ label: __("A → Z"),
16
+ value: "title/asc"
17
+ },
18
+ {
19
+ /* translators: Label for ordering images by title in descending order. */
20
+ label: __("Z → A"),
21
+ value: "title/desc"
22
+ }
23
+ ];
24
+ var RANDOM_ORDER = "random";
25
+ var RANDOM_OPTION = { label: __("Random"), value: RANDOM_ORDER };
26
+ export {
27
+ ORDER_OPTIONS,
28
+ RANDOM_OPTION,
29
+ RANDOM_ORDER,
30
+ parseOrderValue,
31
+ toOrderValue
32
+ };
33
+ //# sourceMappingURL=order-options.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/gallery/order-options.ts"],
4
+ "sourcesContent": ["import { __ } from '@wordpress/i18n';\n\n/**\n * An ordering of gallery images: the field to order by and the direction.\n */\nexport type Order = {\n\torderby: string;\n\torder: string;\n};\n\n/**\n * The composite `\"orderby/order\"` select value for an order. A select needs one\n * string per option, so this format exists only at the select boundary; the\n * rest of the feature passes `Order` objects.\n *\n * @param order The order.\n * @return The select value.\n */\nexport function toOrderValue( order: Order ): string {\n\treturn `${ order.orderby }/${ order.order }`;\n}\n\n/**\n * Parses a composite `\"orderby/order\"` select value back into an order.\n *\n * @param value The select value.\n * @return The order.\n */\nexport function parseOrderValue( value: string ): Order {\n\tconst [ orderby, order ] = value.split( '/' );\n\treturn { orderby, order };\n}\n\n/**\n * Ordering options offered for gallery images. Each value is a composite\n * `orderby/order` string. The two modes share values and labels but differ\n * in their comparison logic:\n *\n * - A dynamic gallery passes `orderby/order` to the REST API in the editor (the\n * `/wp/v2/media` collection params; see `dynamic-source.js`) and to a\n * `WP_Query` on the front end (see `index.php`). Either way the database\n * orders by post date or post title.\n * - A static gallery orders its inner image blocks client-side from the same\n * attachment fields (see `order-images.js`). Dates compare the same way.\n * Titles use a natural, case-insensitive compare, so `IMG_2` sorts before\n * `IMG_10` where the database would put it after. The two title orders can\n * therefore differ for numbered titles.\n *\n * `menu_order` is deliberately omitted — it isn't a valid REST `orderby`\n * value, so the editor preview couldn't reproduce it (see `dynamic-source.js`).\n */\nexport const ORDER_OPTIONS = [\n\t{ label: __( 'Newest to oldest' ), value: 'date/desc' },\n\t{ label: __( 'Oldest to newest' ), value: 'date/asc' },\n\t{\n\t\t/* translators: Label for ordering images by title in ascending order. */\n\t\tlabel: __( 'A → Z' ),\n\t\tvalue: 'title/asc',\n\t},\n\t{\n\t\t/* translators: Label for ordering images by title in descending order. */\n\t\tlabel: __( 'Z → A' ),\n\t\tvalue: 'title/desc',\n\t},\n];\n\n/**\n * The \"Random\" order. Unlike the orders above it isn't an `orderby`: it is the\n * gallery's `randomOrder` attribute, applied only on the front end by shuffling\n * the rendered images (see `index.php`), so the editor keeps showing the\n * underlying order. Offered as the last option of both modes' \"Order by\"\n * control, since it overrides whatever other order is in place.\n */\nexport const RANDOM_ORDER = 'random';\nexport const RANDOM_OPTION = { label: __( 'Random' ), value: RANDOM_ORDER };\n"],
5
+ "mappings": ";AAAA,SAAS,UAAU;AAkBZ,SAAS,aAAc,OAAuB;AACpD,SAAO,GAAI,MAAM,OAAQ,IAAK,MAAM,KAAM;AAC3C;AAQO,SAAS,gBAAiB,OAAuB;AACvD,QAAM,CAAE,SAAS,KAAM,IAAI,MAAM,MAAO,GAAI;AAC5C,SAAO,EAAE,SAAS,MAAM;AACzB;AAoBO,IAAM,gBAAgB;AAAA,EAC5B,EAAE,OAAO,GAAI,kBAAmB,GAAG,OAAO,YAAY;AAAA,EACtD,EAAE,OAAO,GAAI,kBAAmB,GAAG,OAAO,WAAW;AAAA,EACrD;AAAA;AAAA,IAEC,OAAO,GAAI,OAAQ;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA;AAAA;AAAA,IAEC,OAAO,GAAI,OAAQ;AAAA,IACnB,OAAO;AAAA,EACR;AACD;AASO,IAAM,eAAe;AACrB,IAAM,gBAAgB,EAAE,OAAO,GAAI,QAAS,GAAG,OAAO,aAAa;",
6
+ "names": []
7
+ }
@@ -145,11 +145,6 @@ function useDynamicGallery({
145
145
  }
146
146
  setAttributes({ dynamicContent: nextSource });
147
147
  }
148
- function resetSource() {
149
- setAttributes({
150
- dynamicContent: { source: dynamicContent.source }
151
- });
152
- }
153
148
  return {
154
149
  dynamicContent,
155
150
  canUseDynamicSource,
@@ -164,8 +159,7 @@ function useDynamicGallery({
164
159
  galleryContext,
165
160
  enableDynamicMode,
166
161
  convertToStatic,
167
- setSourceOrder,
168
- resetSource
162
+ setSourceOrder
169
163
  };
170
164
  }
171
165
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/gallery/use-dynamic-gallery.js"],
4
- "sourcesContent": ["import { useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { createBlock } from '@wordpress/blocks';\nimport { pickRelevantMediaFiles } from './shared';\nimport { getHrefAndDestination } from './utils';\nimport { getUpdatedLinkTargetSettings } from '../image/utils';\nimport {\n\tgetSourceQuery,\n\tgetDynamicSource,\n\tATTACHED_MEDIA,\n\tDEFAULT_ORDERBY,\n\tDEFAULT_ORDER,\n\tMAX_IMAGES,\n} from './dynamic-source';\n\nconst EMPTY_ARRAY = [];\n\n/**\n * Builds the attributes for a `core/image` block from a media (attachment)\n * record, applying the gallery-wide settings that affect how the image renders.\n *\n * Used to construct the (non-persisted) image blocks previewed in dynamic mode,\n * and the real image blocks created when a dynamic gallery is converted\n * (\"pinned\") back to individual images. The frontend equivalent is\n * `block_core_gallery_render_dynamic_image()` in `index.php`.\n *\n * @param {Object} media A media object as returned by the REST API.\n * @param {Object} galleryAttributes The gallery block's attributes.\n * @return {Object} Attributes to pass to `createBlock( 'core/image', ... )`.\n */\nfunction buildImageBlockAttributes( media, galleryAttributes ) {\n\tconst { sizeSlug, linkTo, linkTarget, aspectRatio } = galleryAttributes;\n\tconst hasAspectRatio = !! aspectRatio && aspectRatio !== 'auto';\n\n\treturn {\n\t\tid: media.id,\n\t\t...pickRelevantMediaFiles( media, sizeSlug ),\n\t\t...getHrefAndDestination( media, linkTo ),\n\t\t...getUpdatedLinkTargetSettings( linkTarget, galleryAttributes ),\n\t\tsizeSlug,\n\t\t// Raw caption, mirroring the frontend (`index.php`). Gap: the REST API\n\t\t// exposes no caption run through `wp_get_attachment_caption`, so neither\n\t\t// side applies that filter.\n\t\tcaption: media.caption?.raw || '',\n\t\talt: media.alt_text || '',\n\t\taspectRatio: hasAspectRatio ? aspectRatio : undefined,\n\t\t// Pair `scale` with `aspectRatio` so the image crops rather than stretches,\n\t\t// matching the image block's UI and the frontend (`index.php`).\n\t\tscale: hasAspectRatio ? 'cover' : undefined,\n\t};\n}\n\n/**\n * Builds a set of `core/image` blocks from the resolved media, applying the\n * gallery-wide settings. Each call mints fresh client IDs, so it can produce\n * both the editor preview and the materialized inner blocks on convert.\n *\n * @param {Object[]} media Media records from the REST API.\n * @param {Object} galleryAttributes The image-relevant gallery attributes.\n * @return {Object[]} New `core/image` block instances.\n */\nfunction buildImageBlocks( media, galleryAttributes ) {\n\treturn media.map( ( mediaItem ) =>\n\t\tcreateBlock(\n\t\t\t'core/image',\n\t\t\tbuildImageBlockAttributes( mediaItem, galleryAttributes )\n\t\t)\n\t);\n}\n\n/**\n * Bundles the Gallery block's \"dynamic mode\" source resolution and actions.\n *\n * Dynamic mode resolves the gallery's images from a configured source\n * (`attributes.dynamicContent`) instead of from manually-added inner image\n * blocks. This hook centralizes the shared, single-instance pieces — the source\n * resolution (one `getEntityRecords`), the editor-preview blocks, and the\n * mode/ordering actions — out of the block's `edit` component. Transient UI\n * concerns (e.g. the convert-to-dynamic confirmation) live in the components\n * that own them.\n *\n * @param {Object} options\n * @param {Object} options.attributes The gallery block attributes.\n * @param {Function} options.setAttributes The block's `setAttributes`.\n * @param {string} options.clientId The block client ID.\n * @param {?number} options.postId The current post ID (from block context).\n * @param {?string} options.postType The current post type (from block context).\n * @return {Object} Dynamic-mode source data and actions.\n */\nexport default function useDynamicGallery( {\n\tattributes,\n\tsetAttributes,\n\tclientId,\n\tpostId,\n\tpostType,\n} ) {\n\tconst { dynamicContent } = attributes;\n\n\t// Whether dynamic mode makes sense in the current editing context. A\n\t// `postType` means the block will resolve against some post at render time —\n\t// either a concrete post (post/page editor, Query Loop item) or a post-bound\n\t// template (`single`, `page`) whose post is filled in by `get_the_ID()` on the\n\t// frontend (see `index.php`). Without it (template part, pattern, generic\n\t// template) there's no post to attach to, so the source can never resolve.\n\tconst canUseDynamicSource = !! postType;\n\n\t// The descriptor for the configured source (its `title`/`description`/\n\t// `emptyMessage`), resolved once here so consumers read the copy without\n\t// re-deriving it from `dynamicContent`. `undefined` for an unknown source.\n\tconst sourceDescriptor = getDynamicSource( dynamicContent?.source );\n\n\t// Current source ordering, falling back to the shared defaults when unset.\n\tconst sourceOrderby = dynamicContent?.args?.orderBy ?? DEFAULT_ORDERBY;\n\tconst sourceOrder = dynamicContent?.args?.order ?? DEFAULT_ORDER;\n\n\tconst registry = useRegistry();\n\tconst { replaceInnerBlocks, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Resolve the configured source to a media query. `null` (static mode, or an\n\t// unresolvable source) short-circuits the select below so no request fires.\n\tconst query = useMemo(\n\t\t() =>\n\t\t\tdynamicContent\n\t\t\t\t? getSourceQuery( dynamicContent, { postId } )\n\t\t\t\t: null,\n\t\t[ dynamicContent, postId ]\n\t);\n\n\tconst { dynamicMedia, dynamicMediaTotal, isResolvingDynamic } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! query ) {\n\t\t\t\treturn {\n\t\t\t\t\tdynamicMedia: EMPTY_ARRAY,\n\t\t\t\t\tdynamicMediaTotal: 0,\n\t\t\t\t\tisResolvingDynamic: false,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst selectorArgs = [ 'postType', 'attachment', query ];\n\t\t\treturn {\n\t\t\t\tdynamicMedia:\n\t\t\t\t\tselect( coreStore ).getEntityRecords( ...selectorArgs ) ??\n\t\t\t\t\tEMPTY_ARRAY,\n\t\t\t\t// Total matching attachments (the `X-WP-Total` header), which the\n\t\t\t\t// query's `per_page` cap doesn't bound — so it reveals when the\n\t\t\t\t// post has more attached images than are shown.\n\t\t\t\tdynamicMediaTotal:\n\t\t\t\t\tselect( coreStore ).getEntityRecordsTotalItems(\n\t\t\t\t\t\t...selectorArgs\n\t\t\t\t\t) ?? 0,\n\t\t\t\tisResolvingDynamic: ! select( coreStore ).hasFinishedResolution(\n\t\t\t\t\t'getEntityRecords',\n\t\t\t\t\tselectorArgs\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ query ]\n\t);\n\n\t// The source caps results at `MAX_IMAGES` (matching the frontend), so flag\n\t// when the post has more attached images than the gallery can show.\n\tconst hasMoreImagesThanCap = dynamicMediaTotal > MAX_IMAGES;\n\n\t// The only gallery settings that affect how an image renders, and so the\n\t// only ones `buildImageBlockAttributes` reads. Depending on this narrowed\n\t// set (rather than the whole `attributes` object) keeps the preview from\n\t// rebuilding on unrelated edits, e.g. typing in the gallery caption.\n\tconst { sizeSlug, linkTo, linkTarget, aspectRatio } = attributes;\n\tconst imageAttributes = useMemo(\n\t\t() => ( { sizeSlug, linkTo, linkTarget, aspectRatio } ),\n\t\t[ sizeSlug, linkTo, linkTarget, aspectRatio ]\n\t);\n\n\t// The (non-persisted) `core/image` blocks used for the editor preview.\n\t// Rebuilt when the resolved media or an image-relevant setting changes.\n\tconst dynamicImageBlocks = useMemo(\n\t\t() => buildImageBlocks( dynamicMedia, imageAttributes ),\n\t\t[ dynamicMedia, imageAttributes ]\n\t);\n\n\t// Context the gallery provides to its (previewed) image blocks.\n\tconst galleryContext = useMemo(\n\t\t() => ( {\n\t\t\tallowResize: attributes.allowResize ?? false,\n\t\t\timageCrop: attributes.imageCrop,\n\t\t\tfixedHeight: attributes.fixedHeight,\n\t\t\tnavigationButtonType: attributes.navigationButtonType,\n\t\t} ),\n\t\t[\n\t\t\tattributes.allowResize,\n\t\t\tattributes.imageCrop,\n\t\t\tattributes.fixedHeight,\n\t\t\tattributes.navigationButtonType,\n\t\t]\n\t);\n\n\t// Switches the gallery into dynamic mode, displaying images attached to the\n\t// current post. Clearing the inner blocks removes the manually-added images:\n\t// they're the gallery's image data, so there's nothing else to reset. The\n\t// legacy `images`/`ids` attributes aren't touched — they're back-compat shims\n\t// for the pre-innerBlocks format (see `deprecated.jsx`/`transforms.js`), empty\n\t// on any gallery reachable here.\n\tfunction enableDynamicMode() {\n\t\t// Batch the attribute change and the inner-block reset into a single\n\t\t// undo level: they're two halves of one mode switch, so one undo should\n\t\t// revert both. Marking the second dispatch non-persistent stops it from\n\t\t// opening a second undo level, which would otherwise leave the gallery\n\t\t// in a half-switched state (dynamic source set, images still present).\n\t\tregistry.batch( () => {\n\t\t\tsetAttributes( { dynamicContent: { source: ATTACHED_MEDIA } } );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\treplaceInnerBlocks( clientId, [] );\n\t\t} );\n\t}\n\n\t// \"Pins\" a dynamic gallery: materializes the currently-resolved media as\n\t// real, editable image blocks and leaves dynamic mode.\n\tfunction convertToStatic() {\n\t\t// Batch the inner-block materialization and the attribute change into a\n\t\t// single undo level so one undo reverts the whole conversion (see\n\t\t// `enableDynamicMode`). Build fresh blocks rather than reusing the\n\t\t// preview's `dynamicImageBlocks` so the materialized inner blocks get\n\t\t// their own client IDs, distinct from the (disabled) preview instances.\n\t\tregistry.batch( () => {\n\t\t\treplaceInnerBlocks(\n\t\t\t\tclientId,\n\t\t\t\tbuildImageBlocks( dynamicMedia, imageAttributes )\n\t\t\t);\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( { dynamicContent: undefined } );\n\t\t} );\n\t}\n\n\t// Updates the source ordering within `dynamicContent.args`. Passing\n\t// `undefined` (or the default order) strips the keys so they aren't\n\t// persisted redundantly and the ToolsPanel item reads as unset.\n\tfunction setSourceOrder( nextOrderby, nextOrder ) {\n\t\tconst nextArgs = { ...dynamicContent?.args };\n\t\tdelete nextArgs.orderBy;\n\t\tdelete nextArgs.order;\n\t\tif (\n\t\t\tnextOrderby !== undefined &&\n\t\t\t( nextOrderby !== DEFAULT_ORDERBY || nextOrder !== DEFAULT_ORDER )\n\t\t) {\n\t\t\tnextArgs.orderBy = nextOrderby;\n\t\t\tnextArgs.order = nextOrder;\n\t\t}\n\t\tconst nextSource = { ...dynamicContent };\n\t\tif ( Object.keys( nextArgs ).length ) {\n\t\t\tnextSource.args = nextArgs;\n\t\t} else {\n\t\t\tdelete nextSource.args;\n\t\t}\n\t\tsetAttributes( { dynamicContent: nextSource } );\n\t}\n\n\t// Resets the source to its bare form: keeps the source kind, drops its args.\n\tfunction resetSource() {\n\t\tsetAttributes( {\n\t\t\tdynamicContent: { source: dynamicContent.source },\n\t\t} );\n\t}\n\n\treturn {\n\t\tdynamicContent,\n\t\tcanUseDynamicSource,\n\t\tsourceDescriptor,\n\t\thasMoreImagesThanCap,\n\t\tdynamicMediaTotal,\n\t\tsourceOrderby,\n\t\tsourceOrder,\n\t\tdynamicMedia,\n\t\tdynamicImageBlocks,\n\t\tisResolvingDynamic,\n\t\tgalleryContext,\n\t\tenableDynamicMode,\n\t\tconvertToStatic,\n\t\tsetSourceOrder,\n\t\tresetSource,\n\t};\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { createBlock } from '@wordpress/blocks';\nimport { pickRelevantMediaFiles } from './shared';\nimport { getHrefAndDestination } from './utils';\nimport { getUpdatedLinkTargetSettings } from '../image/utils';\nimport {\n\tgetSourceQuery,\n\tgetDynamicSource,\n\tATTACHED_MEDIA,\n\tDEFAULT_ORDERBY,\n\tDEFAULT_ORDER,\n\tMAX_IMAGES,\n} from './dynamic-source';\n\nconst EMPTY_ARRAY = [];\n\n/**\n * Builds the attributes for a `core/image` block from a media (attachment)\n * record, applying the gallery-wide settings that affect how the image renders.\n *\n * Used to construct the (non-persisted) image blocks previewed in dynamic mode,\n * and the real image blocks created when a dynamic gallery is converted\n * (\"pinned\") back to individual images. The frontend equivalent is\n * `block_core_gallery_render_dynamic_image()` in `index.php`.\n *\n * @param {Object} media A media object as returned by the REST API.\n * @param {Object} galleryAttributes The gallery block's attributes.\n * @return {Object} Attributes to pass to `createBlock( 'core/image', ... )`.\n */\nfunction buildImageBlockAttributes( media, galleryAttributes ) {\n\tconst { sizeSlug, linkTo, linkTarget, aspectRatio } = galleryAttributes;\n\tconst hasAspectRatio = !! aspectRatio && aspectRatio !== 'auto';\n\n\treturn {\n\t\tid: media.id,\n\t\t...pickRelevantMediaFiles( media, sizeSlug ),\n\t\t...getHrefAndDestination( media, linkTo ),\n\t\t...getUpdatedLinkTargetSettings( linkTarget, galleryAttributes ),\n\t\tsizeSlug,\n\t\t// Raw caption, mirroring the frontend (`index.php`). Gap: the REST API\n\t\t// exposes no caption run through `wp_get_attachment_caption`, so neither\n\t\t// side applies that filter.\n\t\tcaption: media.caption?.raw || '',\n\t\talt: media.alt_text || '',\n\t\taspectRatio: hasAspectRatio ? aspectRatio : undefined,\n\t\t// Pair `scale` with `aspectRatio` so the image crops rather than stretches,\n\t\t// matching the image block's UI and the frontend (`index.php`).\n\t\tscale: hasAspectRatio ? 'cover' : undefined,\n\t};\n}\n\n/**\n * Builds a set of `core/image` blocks from the resolved media, applying the\n * gallery-wide settings. Each call mints fresh client IDs, so it can produce\n * both the editor preview and the materialized inner blocks on convert.\n *\n * @param {Object[]} media Media records from the REST API.\n * @param {Object} galleryAttributes The image-relevant gallery attributes.\n * @return {Object[]} New `core/image` block instances.\n */\nfunction buildImageBlocks( media, galleryAttributes ) {\n\treturn media.map( ( mediaItem ) =>\n\t\tcreateBlock(\n\t\t\t'core/image',\n\t\t\tbuildImageBlockAttributes( mediaItem, galleryAttributes )\n\t\t)\n\t);\n}\n\n/**\n * Bundles the Gallery block's \"dynamic mode\" source resolution and actions.\n *\n * Dynamic mode resolves the gallery's images from a configured source\n * (`attributes.dynamicContent`) instead of from manually-added inner image\n * blocks. This hook centralizes the shared, single-instance pieces — the source\n * resolution (one `getEntityRecords`), the editor-preview blocks, and the\n * mode/ordering actions — out of the block's `edit` component. Transient UI\n * concerns (e.g. the convert-to-dynamic confirmation) live in the components\n * that own them.\n *\n * @param {Object} options\n * @param {Object} options.attributes The gallery block attributes.\n * @param {Function} options.setAttributes The block's `setAttributes`.\n * @param {string} options.clientId The block client ID.\n * @param {?number} options.postId The current post ID (from block context).\n * @param {?string} options.postType The current post type (from block context).\n * @return {Object} Dynamic-mode source data and actions.\n */\nexport default function useDynamicGallery( {\n\tattributes,\n\tsetAttributes,\n\tclientId,\n\tpostId,\n\tpostType,\n} ) {\n\tconst { dynamicContent } = attributes;\n\n\t// Whether dynamic mode makes sense in the current editing context. A\n\t// `postType` means the block will resolve against some post at render time —\n\t// either a concrete post (post/page editor, Query Loop item) or a post-bound\n\t// template (`single`, `page`) whose post is filled in by `get_the_ID()` on the\n\t// frontend (see `index.php`). Without it (template part, pattern, generic\n\t// template) there's no post to attach to, so the source can never resolve.\n\tconst canUseDynamicSource = !! postType;\n\n\t// The descriptor for the configured source (its `title`/`description`/\n\t// `emptyMessage`), resolved once here so consumers read the copy without\n\t// re-deriving it from `dynamicContent`. `undefined` for an unknown source.\n\tconst sourceDescriptor = getDynamicSource( dynamicContent?.source );\n\n\t// Current source ordering, falling back to the shared defaults when unset.\n\tconst sourceOrderby = dynamicContent?.args?.orderBy ?? DEFAULT_ORDERBY;\n\tconst sourceOrder = dynamicContent?.args?.order ?? DEFAULT_ORDER;\n\n\tconst registry = useRegistry();\n\tconst { replaceInnerBlocks, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Resolve the configured source to a media query. `null` (static mode, or an\n\t// unresolvable source) short-circuits the select below so no request fires.\n\tconst query = useMemo(\n\t\t() =>\n\t\t\tdynamicContent\n\t\t\t\t? getSourceQuery( dynamicContent, { postId } )\n\t\t\t\t: null,\n\t\t[ dynamicContent, postId ]\n\t);\n\n\tconst { dynamicMedia, dynamicMediaTotal, isResolvingDynamic } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! query ) {\n\t\t\t\treturn {\n\t\t\t\t\tdynamicMedia: EMPTY_ARRAY,\n\t\t\t\t\tdynamicMediaTotal: 0,\n\t\t\t\t\tisResolvingDynamic: false,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst selectorArgs = [ 'postType', 'attachment', query ];\n\t\t\treturn {\n\t\t\t\tdynamicMedia:\n\t\t\t\t\tselect( coreStore ).getEntityRecords( ...selectorArgs ) ??\n\t\t\t\t\tEMPTY_ARRAY,\n\t\t\t\t// Total matching attachments (the `X-WP-Total` header), which the\n\t\t\t\t// query's `per_page` cap doesn't bound — so it reveals when the\n\t\t\t\t// post has more attached images than are shown.\n\t\t\t\tdynamicMediaTotal:\n\t\t\t\t\tselect( coreStore ).getEntityRecordsTotalItems(\n\t\t\t\t\t\t...selectorArgs\n\t\t\t\t\t) ?? 0,\n\t\t\t\tisResolvingDynamic: ! select( coreStore ).hasFinishedResolution(\n\t\t\t\t\t'getEntityRecords',\n\t\t\t\t\tselectorArgs\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ query ]\n\t);\n\n\t// The source caps results at `MAX_IMAGES` (matching the frontend), so flag\n\t// when the post has more attached images than the gallery can show.\n\tconst hasMoreImagesThanCap = dynamicMediaTotal > MAX_IMAGES;\n\n\t// The only gallery settings that affect how an image renders, and so the\n\t// only ones `buildImageBlockAttributes` reads. Depending on this narrowed\n\t// set (rather than the whole `attributes` object) keeps the preview from\n\t// rebuilding on unrelated edits, e.g. typing in the gallery caption.\n\tconst { sizeSlug, linkTo, linkTarget, aspectRatio } = attributes;\n\tconst imageAttributes = useMemo(\n\t\t() => ( { sizeSlug, linkTo, linkTarget, aspectRatio } ),\n\t\t[ sizeSlug, linkTo, linkTarget, aspectRatio ]\n\t);\n\n\t// The (non-persisted) `core/image` blocks used for the editor preview.\n\t// Rebuilt when the resolved media or an image-relevant setting changes.\n\tconst dynamicImageBlocks = useMemo(\n\t\t() => buildImageBlocks( dynamicMedia, imageAttributes ),\n\t\t[ dynamicMedia, imageAttributes ]\n\t);\n\n\t// Context the gallery provides to its (previewed) image blocks.\n\tconst galleryContext = useMemo(\n\t\t() => ( {\n\t\t\tallowResize: attributes.allowResize ?? false,\n\t\t\timageCrop: attributes.imageCrop,\n\t\t\tfixedHeight: attributes.fixedHeight,\n\t\t\tnavigationButtonType: attributes.navigationButtonType,\n\t\t} ),\n\t\t[\n\t\t\tattributes.allowResize,\n\t\t\tattributes.imageCrop,\n\t\t\tattributes.fixedHeight,\n\t\t\tattributes.navigationButtonType,\n\t\t]\n\t);\n\n\t// Switches the gallery into dynamic mode, displaying images attached to the\n\t// current post. Clearing the inner blocks removes the manually-added images:\n\t// they're the gallery's image data, so there's nothing else to reset. The\n\t// legacy `images`/`ids` attributes aren't touched — they're back-compat shims\n\t// for the pre-innerBlocks format (see `deprecated.jsx`/`transforms.js`), empty\n\t// on any gallery reachable here.\n\tfunction enableDynamicMode() {\n\t\t// Batch the attribute change and the inner-block reset into a single\n\t\t// undo level: they're two halves of one mode switch, so one undo should\n\t\t// revert both. Marking the second dispatch non-persistent stops it from\n\t\t// opening a second undo level, which would otherwise leave the gallery\n\t\t// in a half-switched state (dynamic source set, images still present).\n\t\tregistry.batch( () => {\n\t\t\tsetAttributes( { dynamicContent: { source: ATTACHED_MEDIA } } );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\treplaceInnerBlocks( clientId, [] );\n\t\t} );\n\t}\n\n\t// \"Pins\" a dynamic gallery: materializes the currently-resolved media as\n\t// real, editable image blocks and leaves dynamic mode.\n\tfunction convertToStatic() {\n\t\t// Batch the inner-block materialization and the attribute change into a\n\t\t// single undo level so one undo reverts the whole conversion (see\n\t\t// `enableDynamicMode`). Build fresh blocks rather than reusing the\n\t\t// preview's `dynamicImageBlocks` so the materialized inner blocks get\n\t\t// their own client IDs, distinct from the (disabled) preview instances.\n\t\tregistry.batch( () => {\n\t\t\treplaceInnerBlocks(\n\t\t\t\tclientId,\n\t\t\t\tbuildImageBlocks( dynamicMedia, imageAttributes )\n\t\t\t);\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( { dynamicContent: undefined } );\n\t\t} );\n\t}\n\n\t// Updates the source ordering within `dynamicContent.args`. Passing\n\t// `undefined` (or the default order) strips the keys so they aren't\n\t// persisted redundantly and the Settings \"Order by\" item reads as unset.\n\tfunction setSourceOrder( nextOrderby, nextOrder ) {\n\t\tconst nextArgs = { ...dynamicContent?.args };\n\t\tdelete nextArgs.orderBy;\n\t\tdelete nextArgs.order;\n\t\tif (\n\t\t\tnextOrderby !== undefined &&\n\t\t\t( nextOrderby !== DEFAULT_ORDERBY || nextOrder !== DEFAULT_ORDER )\n\t\t) {\n\t\t\tnextArgs.orderBy = nextOrderby;\n\t\t\tnextArgs.order = nextOrder;\n\t\t}\n\t\tconst nextSource = { ...dynamicContent };\n\t\tif ( Object.keys( nextArgs ).length ) {\n\t\t\tnextSource.args = nextArgs;\n\t\t} else {\n\t\t\tdelete nextSource.args;\n\t\t}\n\t\tsetAttributes( { dynamicContent: nextSource } );\n\t}\n\n\treturn {\n\t\tdynamicContent,\n\t\tcanUseDynamicSource,\n\t\tsourceDescriptor,\n\t\thasMoreImagesThanCap,\n\t\tdynamicMediaTotal,\n\t\tsourceOrderby,\n\t\tsourceOrder,\n\t\tdynamicMedia,\n\t\tdynamicImageBlocks,\n\t\tisResolvingDynamic,\n\t\tgalleryContext,\n\t\tenableDynamicMode,\n\t\tconvertToStatic,\n\t\tsetSourceOrder,\n\t};\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -5,7 +5,7 @@ var EMPTY_IMAGE_MEDIA = [];
5
5
  function useGetMedia(innerBlockImages) {
6
6
  return useSelect(
7
7
  (select) => {
8
- const imageIds = innerBlockImages.map((imageBlock) => imageBlock.attributes.id).filter((id) => id !== void 0);
8
+ const imageIds = innerBlockImages.map((imageBlock) => imageBlock.attributes.id).filter((id) => id !== void 0).sort((a, b) => a - b);
9
9
  if (imageIds.length === 0) {
10
10
  return EMPTY_IMAGE_MEDIA;
11
11
  }
@@ -14,8 +14,7 @@ function useGetMedia(innerBlockImages) {
14
14
  "attachment",
15
15
  {
16
16
  include: imageIds.join(","),
17
- per_page: -1,
18
- orderby: "include"
17
+ per_page: -1
19
18
  }
20
19
  ) ?? EMPTY_IMAGE_MEDIA;
21
20
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/gallery/use-get-media.js"],
4
- "sourcesContent": ["import { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\nconst EMPTY_IMAGE_MEDIA = [];\n\n/**\n * Retrieves the extended media info for each gallery image from the store. This is used to\n * determine which image size options are available for the current gallery.\n *\n * @param {Array} innerBlockImages An array of the innerBlock images currently in the gallery.\n *\n * @return {Array} An array of media info options for each gallery image.\n */\nexport default function useGetMedia( innerBlockImages ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst imageIds = innerBlockImages\n\t\t\t\t.map( ( imageBlock ) => imageBlock.attributes.id )\n\t\t\t\t.filter( ( id ) => id !== undefined );\n\n\t\t\tif ( imageIds.length === 0 ) {\n\t\t\t\treturn EMPTY_IMAGE_MEDIA;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\tselect( coreStore ).getEntityRecords(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'attachment',\n\t\t\t\t\t{\n\t\t\t\t\t\tinclude: imageIds.join( ',' ),\n\t\t\t\t\t\tper_page: -1,\n\t\t\t\t\t\torderby: 'include',\n\t\t\t\t\t}\n\t\t\t\t) ?? EMPTY_IMAGE_MEDIA\n\t\t\t);\n\t\t},\n\t\t[ innerBlockImages ]\n\t);\n}\n"],
5
- "mappings": ";AAAA,SAAS,iBAAiB;AAC1B,SAAS,SAAS,iBAAiB;AAEnC,IAAM,oBAAoB,CAAC;AAUZ,SAAR,YAA8B,kBAAmB;AACvD,SAAO;AAAA,IACN,CAAE,WAAY;AACb,YAAM,WAAW,iBACf,IAAK,CAAE,eAAgB,WAAW,WAAW,EAAG,EAChD,OAAQ,CAAE,OAAQ,OAAO,MAAU;AAErC,UAAK,SAAS,WAAW,GAAI;AAC5B,eAAO;AAAA,MACR;AAEA,aACC,OAAQ,SAAU,EAAE;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,UACC,SAAS,SAAS,KAAM,GAAI;AAAA,UAC5B,UAAU;AAAA,UACV,SAAS;AAAA,QACV;AAAA,MACD,KAAK;AAAA,IAEP;AAAA,IACA,CAAE,gBAAiB;AAAA,EACpB;AACD;",
4
+ "sourcesContent": ["import { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\nconst EMPTY_IMAGE_MEDIA = [];\n\n/**\n * Retrieves the extended media info for each gallery image from the store. This is used to\n * determine which image size options are available for the current gallery.\n *\n * @param {Array} innerBlockImages An array of the innerBlock images currently in the gallery.\n *\n * @return {Array} An array of media info options for each gallery image.\n */\nexport default function useGetMedia( innerBlockImages ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\t// Sorted so the query only changes when the set of images changes,\n\t\t\t// not when they're reordered: a reorder would otherwise be a new\n\t\t\t// query, and the records would read as empty until it resolved.\n\t\t\t// Consumers look records up by id, so the returned order doesn't\n\t\t\t// matter.\n\t\t\tconst imageIds = innerBlockImages\n\t\t\t\t.map( ( imageBlock ) => imageBlock.attributes.id )\n\t\t\t\t.filter( ( id ) => id !== undefined )\n\t\t\t\t.sort( ( a, b ) => a - b );\n\n\t\t\tif ( imageIds.length === 0 ) {\n\t\t\t\treturn EMPTY_IMAGE_MEDIA;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\tselect( coreStore ).getEntityRecords(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'attachment',\n\t\t\t\t\t{\n\t\t\t\t\t\tinclude: imageIds.join( ',' ),\n\t\t\t\t\t\tper_page: -1,\n\t\t\t\t\t}\n\t\t\t\t) ?? EMPTY_IMAGE_MEDIA\n\t\t\t);\n\t\t},\n\t\t[ innerBlockImages ]\n\t);\n}\n"],
5
+ "mappings": ";AAAA,SAAS,iBAAiB;AAC1B,SAAS,SAAS,iBAAiB;AAEnC,IAAM,oBAAoB,CAAC;AAUZ,SAAR,YAA8B,kBAAmB;AACvD,SAAO;AAAA,IACN,CAAE,WAAY;AAMb,YAAM,WAAW,iBACf,IAAK,CAAE,eAAgB,WAAW,WAAW,EAAG,EAChD,OAAQ,CAAE,OAAQ,OAAO,MAAU,EACnC,KAAM,CAAE,GAAG,MAAO,IAAI,CAAE;AAE1B,UAAK,SAAS,WAAW,GAAI;AAC5B,eAAO;AAAA,MACR;AAEA,aACC,OAAQ,SAAU,EAAE;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,UACC,SAAS,SAAS,KAAM,GAAI;AAAA,UAC5B,UAAU;AAAA,QACX;AAAA,MACD,KAAK;AAAA,IAEP;AAAA,IACA,CAAE,gBAAiB;AAAA,EACpB;AACD;",
6
6
  "names": []
7
7
  }
@@ -75,6 +75,7 @@
75
75
  "typography": {
76
76
  "fontSize": true,
77
77
  "lineHeight": true,
78
+ "textColumns": true,
78
79
  "__experimentalFontFamily": true,
79
80
  "__experimentalFontWeight": true,
80
81
  "__experimentalFontStyle": true,
@@ -8,7 +8,7 @@ import {
8
8
  store as blockEditorStore,
9
9
  privateApis as blockEditorPrivateApis
10
10
  } from "@wordpress/block-editor";
11
- import { useRef } from "@wordpress/element";
11
+ import { useState } from "@wordpress/element";
12
12
  import { __ } from "@wordpress/i18n";
13
13
  import GroupPlaceHolder, { useShouldShowPlaceHolder } from "./placeholder.mjs";
14
14
  import { unlock } from "../lock-unlock.mjs";
@@ -53,8 +53,8 @@ function GroupEdit({ attributes, name, setAttributes, clientId }) {
53
53
  } = attributes;
54
54
  const { type = "default" } = layout;
55
55
  const layoutSupportEnabled = themeSupportsLayout || type === "flex" || type === "grid";
56
- const ref = useRef();
57
- const blockProps = useBlockProps({ ref });
56
+ const [dropZoneElement, setDropZoneElement] = useState(null);
57
+ const blockProps = useBlockProps({ ref: setDropZoneElement });
58
58
  const [showPlaceholder, setShowPlaceholder] = useShouldShowPlaceHolder({
59
59
  attributes,
60
60
  usedLayoutType: type,
@@ -69,7 +69,7 @@ function GroupEdit({ attributes, name, setAttributes, clientId }) {
69
69
  const innerBlocksProps = useInnerBlocksProps(
70
70
  layoutSupportEnabled ? blockProps : { className: "wp-block-group__inner-container" },
71
71
  {
72
- dropZoneElement: ref.current,
72
+ dropZoneElement,
73
73
  templateLock,
74
74
  allowedBlocks,
75
75
  renderAppender
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/group/edit.jsx"],
4
- "sourcesContent": ["import { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tInnerBlocks,\n\tuseBlockProps,\n\tInspectorControls,\n\tuseInnerBlocksProps,\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useRef } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport GroupPlaceHolder, { useShouldShowPlaceHolder } from './placeholder';\nimport { unlock } from '../lock-unlock';\n\nconst { HTMLElementControl } = unlock( blockEditorPrivateApis );\n\n/**\n * Render inspector controls for the Group block.\n *\n * @param {Object} props Component props.\n * @param {string} props.tagName The HTML tag name.\n * @param {Function} props.onSelectTagName onChange function for the SelectControl.\n * @param {string} props.clientId The client ID of the current block.\n *\n * @return {React.JSX.Element} The control group.\n */\nfunction GroupEditControls( { tagName, onSelectTagName, clientId } ) {\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<HTMLElementControl\n\t\t\t\ttagName={ tagName }\n\t\t\t\tonChange={ onSelectTagName }\n\t\t\t\tclientId={ clientId }\n\t\t\t\toptions={ [\n\t\t\t\t\t{ label: __( 'Default (<div>)' ), value: 'div' },\n\t\t\t\t\t{ label: '<header>', value: 'header' },\n\t\t\t\t\t{ label: '<main>', value: 'main' },\n\t\t\t\t\t{ label: '<section>', value: 'section' },\n\t\t\t\t\t{ label: '<article>', value: 'article' },\n\t\t\t\t\t{ label: '<aside>', value: 'aside' },\n\t\t\t\t\t{ label: '<footer>', value: 'footer' },\n\t\t\t\t] }\n\t\t\t/>\n\t\t</InspectorControls>\n\t);\n}\n\nfunction GroupEdit( { attributes, name, setAttributes, clientId } ) {\n\tconst { hasInnerBlocks, themeSupportsLayout } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getSettings } = select( blockEditorStore );\n\t\t\tconst block = getBlock( clientId );\n\t\t\treturn {\n\t\t\t\thasInnerBlocks: !! ( block && block.innerBlocks.length ),\n\t\t\t\tthemeSupportsLayout: getSettings()?.supportsLayout,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst {\n\t\ttagName: TagName = 'div',\n\t\ttemplateLock,\n\t\tallowedBlocks,\n\t\tlayout = {},\n\t} = attributes;\n\n\t// Layout settings.\n\tconst { type = 'default' } = layout;\n\tconst layoutSupportEnabled =\n\t\tthemeSupportsLayout || type === 'flex' || type === 'grid';\n\n\t// Hooks.\n\tconst ref = useRef();\n\tconst blockProps = useBlockProps( { ref } );\n\n\tconst [ showPlaceholder, setShowPlaceholder ] = useShouldShowPlaceHolder( {\n\t\tattributes,\n\t\tusedLayoutType: type,\n\t\thasInnerBlocks,\n\t} );\n\n\t// Default to the regular appender being rendered.\n\tlet renderAppender;\n\tif ( showPlaceholder ) {\n\t\t// In the placeholder state, ensure the appender is not rendered.\n\t\t// This is needed because `...innerBlocksProps` is used in the placeholder\n\t\t// state so that blocks can dragged onto the placeholder area\n\t\t// from both the list view and in the editor canvas.\n\t\trenderAppender = false;\n\t} else if ( ! hasInnerBlocks ) {\n\t\t// When there is no placeholder, but the block is also empty,\n\t\t// use the larger button appender.\n\t\trenderAppender = InnerBlocks.ButtonBlockAppender;\n\t}\n\n\tconst innerBlocksProps = useInnerBlocksProps(\n\t\tlayoutSupportEnabled\n\t\t\t? blockProps\n\t\t\t: { className: 'wp-block-group__inner-container' },\n\t\t{\n\t\t\tdropZoneElement: ref.current,\n\t\t\ttemplateLock,\n\t\t\tallowedBlocks,\n\t\t\trenderAppender,\n\t\t}\n\t);\n\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\tconst selectVariation = ( nextVariation ) => {\n\t\tsetAttributes( nextVariation.attributes );\n\t\tselectBlock( clientId, -1 );\n\t\tsetShowPlaceholder( false );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<GroupEditControls\n\t\t\t\ttagName={ TagName }\n\t\t\t\tonSelectTagName={ ( value ) =>\n\t\t\t\t\tsetAttributes( { tagName: value } )\n\t\t\t\t}\n\t\t\t\tclientId={ clientId }\n\t\t\t/>\n\t\t\t{ showPlaceholder && (\n\t\t\t\t<div>\n\t\t\t\t\t{ innerBlocksProps.children }\n\t\t\t\t\t<GroupPlaceHolder\n\t\t\t\t\t\tname={ name }\n\t\t\t\t\t\tonSelect={ selectVariation }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ layoutSupportEnabled && ! showPlaceholder && (\n\t\t\t\t<TagName { ...innerBlocksProps } />\n\t\t\t) }\n\t\t\t{ /* Ideally this is not needed but it's there for backward compatibility reason\n\t\t\t\tto keep this div for themes that might rely on its presence */ }\n\t\t\t{ ! layoutSupportEnabled && ! showPlaceholder && (\n\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t\t</TagName>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default GroupEdit;\n"],
5
- "mappings": ";AAAA,SAAS,aAAa,iBAAiB;AACvC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,eAAe;AAAA,OACT;AACP,SAAS,cAAc;AACvB,SAAS,UAAU;AACnB,OAAO,oBAAoB,gCAAgC;AAC3D,SAAS,cAAc;AAiBpB,SAwFD,UAxFC,KAiGC,YAjGD;AAfH,IAAM,EAAE,mBAAmB,IAAI,OAAQ,sBAAuB;AAY9D,SAAS,kBAAmB,EAAE,SAAS,iBAAiB,SAAS,GAAI;AACpE,SACC,oBAAC,qBAAkB,OAAM,YACxB;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,UAAW;AAAA,MACX;AAAA,MACA,SAAU;AAAA,QACT,EAAE,OAAO,GAAI,iBAAkB,GAAG,OAAO,MAAM;AAAA,QAC/C,EAAE,OAAO,YAAY,OAAO,SAAS;AAAA,QACrC,EAAE,OAAO,UAAU,OAAO,OAAO;AAAA,QACjC,EAAE,OAAO,aAAa,OAAO,UAAU;AAAA,QACvC,EAAE,OAAO,aAAa,OAAO,UAAU;AAAA,QACvC,EAAE,OAAO,WAAW,OAAO,QAAQ;AAAA,QACnC,EAAE,OAAO,YAAY,OAAO,SAAS;AAAA,MACtC;AAAA;AAAA,EACD,GACD;AAEF;AAEA,SAAS,UAAW,EAAE,YAAY,MAAM,eAAe,SAAS,GAAI;AACnE,QAAM,EAAE,gBAAgB,oBAAoB,IAAI;AAAA,IAC/C,CAAE,WAAY;AACb,YAAM,EAAE,UAAU,YAAY,IAAI,OAAQ,gBAAiB;AAC3D,YAAM,QAAQ,SAAU,QAAS;AACjC,aAAO;AAAA,QACN,gBAAgB,CAAC,EAAI,SAAS,MAAM,YAAY;AAAA,QAChD,qBAAqB,YAAY,GAAG;AAAA,MACrC;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,QAAM;AAAA,IACL,SAAS,UAAU;AAAA,IACnB;AAAA,IACA;AAAA,IACA,SAAS,CAAC;AAAA,EACX,IAAI;AAGJ,QAAM,EAAE,OAAO,UAAU,IAAI;AAC7B,QAAM,uBACL,uBAAuB,SAAS,UAAU,SAAS;AAGpD,QAAM,MAAM,OAAO;AACnB,QAAM,aAAa,cAAe,EAAE,IAAI,CAAE;AAE1C,QAAM,CAAE,iBAAiB,kBAAmB,IAAI,yBAA0B;AAAA,IACzE;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,EACD,CAAE;AAGF,MAAI;AACJ,MAAK,iBAAkB;AAKtB,qBAAiB;AAAA,EAClB,WAAY,CAAE,gBAAiB;AAG9B,qBAAiB,YAAY;AAAA,EAC9B;AAEA,QAAM,mBAAmB;AAAA,IACxB,uBACG,aACA,EAAE,WAAW,kCAAkC;AAAA,IAClD;AAAA,MACC,iBAAiB,IAAI;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,QAAM,EAAE,YAAY,IAAI,YAAa,gBAAiB;AAEtD,QAAM,kBAAkB,CAAE,kBAAmB;AAC5C,kBAAe,cAAc,UAAW;AACxC,gBAAa,UAAU,EAAG;AAC1B,uBAAoB,KAAM;AAAA,EAC3B;AAEA,SACC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,SAAU;AAAA,QACV,iBAAkB,CAAE,UACnB,cAAe,EAAE,SAAS,MAAM,CAAE;AAAA,QAEnC;AAAA;AAAA,IACD;AAAA,IACE,mBACD,qBAAC,SACE;AAAA,uBAAiB;AAAA,MACnB;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA,UAAW;AAAA;AAAA,MACZ;AAAA,OACD;AAAA,IAEC,wBAAwB,CAAE,mBAC3B,oBAAC,WAAU,GAAG,kBAAmB;AAAA,IAIhC,CAAE,wBAAwB,CAAE,mBAC7B,oBAAC,WAAU,GAAG,YACb,8BAAC,SAAM,GAAG,kBAAmB,GAC9B;AAAA,KAEF;AAEF;AAEA,IAAO,eAAQ;",
4
+ "sourcesContent": ["import { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tInnerBlocks,\n\tuseBlockProps,\n\tInspectorControls,\n\tuseInnerBlocksProps,\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport GroupPlaceHolder, { useShouldShowPlaceHolder } from './placeholder';\nimport { unlock } from '../lock-unlock';\n\nconst { HTMLElementControl } = unlock( blockEditorPrivateApis );\n\n/**\n * Render inspector controls for the Group block.\n *\n * @param {Object} props Component props.\n * @param {string} props.tagName The HTML tag name.\n * @param {Function} props.onSelectTagName onChange function for the SelectControl.\n * @param {string} props.clientId The client ID of the current block.\n *\n * @return {React.JSX.Element} The control group.\n */\nfunction GroupEditControls( { tagName, onSelectTagName, clientId } ) {\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<HTMLElementControl\n\t\t\t\ttagName={ tagName }\n\t\t\t\tonChange={ onSelectTagName }\n\t\t\t\tclientId={ clientId }\n\t\t\t\toptions={ [\n\t\t\t\t\t{ label: __( 'Default (<div>)' ), value: 'div' },\n\t\t\t\t\t{ label: '<header>', value: 'header' },\n\t\t\t\t\t{ label: '<main>', value: 'main' },\n\t\t\t\t\t{ label: '<section>', value: 'section' },\n\t\t\t\t\t{ label: '<article>', value: 'article' },\n\t\t\t\t\t{ label: '<aside>', value: 'aside' },\n\t\t\t\t\t{ label: '<footer>', value: 'footer' },\n\t\t\t\t] }\n\t\t\t/>\n\t\t</InspectorControls>\n\t);\n}\n\nfunction GroupEdit( { attributes, name, setAttributes, clientId } ) {\n\tconst { hasInnerBlocks, themeSupportsLayout } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getSettings } = select( blockEditorStore );\n\t\t\tconst block = getBlock( clientId );\n\t\t\treturn {\n\t\t\t\thasInnerBlocks: !! ( block && block.innerBlocks.length ),\n\t\t\t\tthemeSupportsLayout: getSettings()?.supportsLayout,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst {\n\t\ttagName: TagName = 'div',\n\t\ttemplateLock,\n\t\tallowedBlocks,\n\t\tlayout = {},\n\t} = attributes;\n\n\t// Layout settings.\n\tconst { type = 'default' } = layout;\n\tconst layoutSupportEnabled =\n\t\tthemeSupportsLayout || type === 'flex' || type === 'grid';\n\n\t// State, not a ref, so that the element is there on the next render.\n\tconst [ dropZoneElement, setDropZoneElement ] = useState( null );\n\tconst blockProps = useBlockProps( { ref: setDropZoneElement } );\n\n\tconst [ showPlaceholder, setShowPlaceholder ] = useShouldShowPlaceHolder( {\n\t\tattributes,\n\t\tusedLayoutType: type,\n\t\thasInnerBlocks,\n\t} );\n\n\t// Default to the regular appender being rendered.\n\tlet renderAppender;\n\tif ( showPlaceholder ) {\n\t\t// In the placeholder state, ensure the appender is not rendered.\n\t\t// This is needed because `...innerBlocksProps` is used in the placeholder\n\t\t// state so that blocks can dragged onto the placeholder area\n\t\t// from both the list view and in the editor canvas.\n\t\trenderAppender = false;\n\t} else if ( ! hasInnerBlocks ) {\n\t\t// When there is no placeholder, but the block is also empty,\n\t\t// use the larger button appender.\n\t\trenderAppender = InnerBlocks.ButtonBlockAppender;\n\t}\n\n\tconst innerBlocksProps = useInnerBlocksProps(\n\t\tlayoutSupportEnabled\n\t\t\t? blockProps\n\t\t\t: { className: 'wp-block-group__inner-container' },\n\t\t{\n\t\t\tdropZoneElement,\n\t\t\ttemplateLock,\n\t\t\tallowedBlocks,\n\t\t\trenderAppender,\n\t\t}\n\t);\n\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\tconst selectVariation = ( nextVariation ) => {\n\t\tsetAttributes( nextVariation.attributes );\n\t\tselectBlock( clientId, -1 );\n\t\tsetShowPlaceholder( false );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<GroupEditControls\n\t\t\t\ttagName={ TagName }\n\t\t\t\tonSelectTagName={ ( value ) =>\n\t\t\t\t\tsetAttributes( { tagName: value } )\n\t\t\t\t}\n\t\t\t\tclientId={ clientId }\n\t\t\t/>\n\t\t\t{ showPlaceholder && (\n\t\t\t\t<div>\n\t\t\t\t\t{ innerBlocksProps.children }\n\t\t\t\t\t<GroupPlaceHolder\n\t\t\t\t\t\tname={ name }\n\t\t\t\t\t\tonSelect={ selectVariation }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ layoutSupportEnabled && ! showPlaceholder && (\n\t\t\t\t<TagName { ...innerBlocksProps } />\n\t\t\t) }\n\t\t\t{ /* Ideally this is not needed but it's there for backward compatibility reason\n\t\t\t\tto keep this div for themes that might rely on its presence */ }\n\t\t\t{ ! layoutSupportEnabled && ! showPlaceholder && (\n\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t\t</TagName>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default GroupEdit;\n"],
5
+ "mappings": ";AAAA,SAAS,aAAa,iBAAiB;AACvC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,eAAe;AAAA,OACT;AACP,SAAS,gBAAgB;AACzB,SAAS,UAAU;AACnB,OAAO,oBAAoB,gCAAgC;AAC3D,SAAS,cAAc;AAiBpB,SAwFD,UAxFC,KAiGC,YAjGD;AAfH,IAAM,EAAE,mBAAmB,IAAI,OAAQ,sBAAuB;AAY9D,SAAS,kBAAmB,EAAE,SAAS,iBAAiB,SAAS,GAAI;AACpE,SACC,oBAAC,qBAAkB,OAAM,YACxB;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,UAAW;AAAA,MACX;AAAA,MACA,SAAU;AAAA,QACT,EAAE,OAAO,GAAI,iBAAkB,GAAG,OAAO,MAAM;AAAA,QAC/C,EAAE,OAAO,YAAY,OAAO,SAAS;AAAA,QACrC,EAAE,OAAO,UAAU,OAAO,OAAO;AAAA,QACjC,EAAE,OAAO,aAAa,OAAO,UAAU;AAAA,QACvC,EAAE,OAAO,aAAa,OAAO,UAAU;AAAA,QACvC,EAAE,OAAO,WAAW,OAAO,QAAQ;AAAA,QACnC,EAAE,OAAO,YAAY,OAAO,SAAS;AAAA,MACtC;AAAA;AAAA,EACD,GACD;AAEF;AAEA,SAAS,UAAW,EAAE,YAAY,MAAM,eAAe,SAAS,GAAI;AACnE,QAAM,EAAE,gBAAgB,oBAAoB,IAAI;AAAA,IAC/C,CAAE,WAAY;AACb,YAAM,EAAE,UAAU,YAAY,IAAI,OAAQ,gBAAiB;AAC3D,YAAM,QAAQ,SAAU,QAAS;AACjC,aAAO;AAAA,QACN,gBAAgB,CAAC,EAAI,SAAS,MAAM,YAAY;AAAA,QAChD,qBAAqB,YAAY,GAAG;AAAA,MACrC;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,QAAM;AAAA,IACL,SAAS,UAAU;AAAA,IACnB;AAAA,IACA;AAAA,IACA,SAAS,CAAC;AAAA,EACX,IAAI;AAGJ,QAAM,EAAE,OAAO,UAAU,IAAI;AAC7B,QAAM,uBACL,uBAAuB,SAAS,UAAU,SAAS;AAGpD,QAAM,CAAE,iBAAiB,kBAAmB,IAAI,SAAU,IAAK;AAC/D,QAAM,aAAa,cAAe,EAAE,KAAK,mBAAmB,CAAE;AAE9D,QAAM,CAAE,iBAAiB,kBAAmB,IAAI,yBAA0B;AAAA,IACzE;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,EACD,CAAE;AAGF,MAAI;AACJ,MAAK,iBAAkB;AAKtB,qBAAiB;AAAA,EAClB,WAAY,CAAE,gBAAiB;AAG9B,qBAAiB,YAAY;AAAA,EAC9B;AAEA,QAAM,mBAAmB;AAAA,IACxB,uBACG,aACA,EAAE,WAAW,kCAAkC;AAAA,IAClD;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,QAAM,EAAE,YAAY,IAAI,YAAa,gBAAiB;AAEtD,QAAM,kBAAkB,CAAE,kBAAmB;AAC5C,kBAAe,cAAc,UAAW;AACxC,gBAAa,UAAU,EAAG;AAC1B,uBAAoB,KAAM;AAAA,EAC3B;AAEA,SACC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,SAAU;AAAA,QACV,iBAAkB,CAAE,UACnB,cAAe,EAAE,SAAS,MAAM,CAAE;AAAA,QAEnC;AAAA;AAAA,IACD;AAAA,IACE,mBACD,qBAAC,SACE;AAAA,uBAAiB;AAAA,MACnB;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA,UAAW;AAAA;AAAA,MACZ;AAAA,OACD;AAAA,IAEC,wBAAwB,CAAE,mBAC3B,oBAAC,WAAU,GAAG,kBAAmB;AAAA,IAIhC,CAAE,wBAAwB,CAAE,mBAC7B,oBAAC,WAAU,GAAG,YACb,8BAAC,SAAM,GAAG,kBAAmB,GAC9B;AAAA,KAEF;AAEF;AAEA,IAAO,eAAQ;",
6
6
  "names": []
7
7
  }
@@ -30,6 +30,15 @@
30
30
  "anchor": true,
31
31
  "className": true,
32
32
  "splitting": true,
33
+ "background": {
34
+ "backgroundImage": true,
35
+ "backgroundSize": true,
36
+ "gradient": true,
37
+ "__experimentalDefaultControls": {
38
+ "backgroundImage": true,
39
+ "gradient": true
40
+ }
41
+ },
33
42
  "__experimentalBorder": {
34
43
  "color": true,
35
44
  "radius": true,
@@ -44,6 +53,10 @@
44
53
  "text": true
45
54
  }
46
55
  },
56
+ "dimensions": {
57
+ "minHeight": true,
58
+ "minWidth": true
59
+ },
47
60
  "shadow": true,
48
61
  "spacing": {
49
62
  "margin": true,
@@ -57,6 +70,7 @@
57
70
  "fontSize": true,
58
71
  "lineHeight": true,
59
72
  "textAlign": true,
73
+ "textIndent": true,
60
74
  "__experimentalFontFamily": true,
61
75
  "__experimentalFontStyle": true,
62
76
  "__experimentalFontWeight": true,
@@ -33,6 +33,11 @@
33
33
  "anchor": true,
34
34
  "reusable": false,
35
35
  "html": false,
36
+ "background": {
37
+ "backgroundImage": true,
38
+ "backgroundSize": true,
39
+ "gradient": true
40
+ },
36
41
  "typography": {
37
42
  "fontSize": true,
38
43
  "lineHeight": true,
@@ -46,6 +51,31 @@
46
51
  "fontSize": true
47
52
  }
48
53
  },
54
+ "shadow": true,
55
+ "dimensions": {
56
+ "minHeight": true,
57
+ "minWidth": true
58
+ },
59
+ "__experimentalBorder": {
60
+ "color": true,
61
+ "radius": true,
62
+ "style": true,
63
+ "width": true,
64
+ "__experimentalDefaultControls": {
65
+ "color": false,
66
+ "radius": false,
67
+ "style": false,
68
+ "width": false
69
+ }
70
+ },
71
+ "spacing": {
72
+ "margin": true,
73
+ "padding": true,
74
+ "__experimentalDefaultControls": {
75
+ "margin": false,
76
+ "padding": false
77
+ }
78
+ },
49
79
  "interactivity": {
50
80
  "clientNavigation": true
51
81
  }
@@ -8,7 +8,7 @@ import {
8
8
  } from "@wordpress/block-editor";
9
9
  import {
10
10
  Button,
11
- CheckboxControl,
11
+ CheckboxControl as WCCheckboxControl,
12
12
  TextControl,
13
13
  TextareaControl as WCTextareaControl,
14
14
  __experimentalToolsPanel as ToolsPanel,
@@ -102,7 +102,7 @@ function HomeEdit({ attributes, setAttributes, context }) {
102
102
  onDeselect: () => setAttributes({ opensInNewTab: false }),
103
103
  isShownByDefault: true,
104
104
  children: /* @__PURE__ */ jsx(
105
- CheckboxControl,
105
+ WCCheckboxControl,
106
106
  {
107
107
  label: __("Open in new tab"),
108
108
  checked: opensInNewTab,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/home-link/edit.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport {\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport {\n\tButton,\n\tCheckboxControl,\n\tTextControl,\n\tTextareaControl as WCTextareaControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { external } from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\n\nconst preventDefault = ( event ) => event.preventDefault();\n\nexport default function HomeEdit( { attributes, setAttributes, context } ) {\n\tconst {\n\t\thomeUrl,\n\t\tonNavigateToEntityRecord,\n\t\tfrontPageId,\n\t\tfrontPageTemplateId,\n\t} = useSelect( ( select ) => {\n\t\tconst { getEntityRecord, getDefaultTemplateId, canUser } =\n\t\t\tselect( coreStore );\n\n\t\t// Site index.\n\t\tconst baseUrl = getEntityRecord( 'root', '__unstableBase' )?.home;\n\n\t\t// Front-page data (only available if the user can read site settings).\n\t\tconst canReadSettings = canUser( 'read', {\n\t\t\tkind: 'root',\n\t\t\tname: 'site',\n\t\t} );\n\t\tconst site = canReadSettings ? getEntityRecord( 'root', 'site' ) : null;\n\t\tconst resolvedFrontPageId =\n\t\t\tsite?.show_on_front === 'page' ? site?.page_on_front : null;\n\n\t\t// When no specific front page is set, fall back to the front-page template.\n\t\tconst resolvedFrontPageTemplateId = ! resolvedFrontPageId\n\t\t\t? getDefaultTemplateId( { slug: 'front-page' } )\n\t\t\t: null;\n\n\t\treturn {\n\t\t\thomeUrl: baseUrl,\n\t\t\tonNavigateToEntityRecord:\n\t\t\t\tselect( blockEditorStore ).getSettings()\n\t\t\t\t\t.onNavigateToEntityRecord,\n\t\t\tfrontPageId: resolvedFrontPageId,\n\t\t\tfrontPageTemplateId: resolvedFrontPageTemplateId,\n\t\t};\n\t}, [] );\n\n\tconst { textColor, backgroundColor, style } = context;\n\tconst { label, opensInNewTab, description } = attributes;\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( 'wp-block-navigation-item', {\n\t\t\t'has-text-color': !! textColor || !! style?.color?.text,\n\t\t\t[ `has-${ textColor }-color` ]: !! textColor,\n\t\t\t'has-background': !! backgroundColor || !! style?.color?.background,\n\t\t\t[ `has-${ backgroundColor }-background-color` ]: !! backgroundColor,\n\t\t} ),\n\t\tstyle: {\n\t\t\tcolor: style?.color?.text,\n\t\t\tbackgroundColor: style?.color?.background,\n\t\t},\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls group=\"content\">\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tresetAll={ () => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tlabel: '',\n\t\t\t\t\t\t\topensInNewTab: false,\n\t\t\t\t\t\t\tdescription: '',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => !! label }\n\t\t\t\t\t\tlabel={ __( 'Text' ) }\n\t\t\t\t\t\tonDeselect={ () => setAttributes( { label: '' } ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tlabel={ __( 'Text' ) }\n\t\t\t\t\t\t\tvalue={ label ? stripHTML( label ) : '' }\n\t\t\t\t\t\t\tonChange={ ( labelValue ) => {\n\t\t\t\t\t\t\t\tsetAttributes( { label: labelValue } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => !! opensInNewTab }\n\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { opensInNewTab: false } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t>\n\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tchecked={ opensInNewTab }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { opensInNewTab: value } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t{ onNavigateToEntityRecord &&\n\t\t\t\t\t\t( frontPageId || frontPageTemplateId ) && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tif ( frontPageId ) {\n\t\t\t\t\t\t\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\t\t\t\t\t\t\tpostId: frontPageId,\n\t\t\t\t\t\t\t\t\t\t\tpostType: 'page',\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\t\t\t\t\t\t\tpostId: frontPageTemplateId,\n\t\t\t\t\t\t\t\t\t\t\tpostType: 'wp_template',\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tclassName=\"navigation-link-to__action-button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) }\n\t\t\t\t\t{ homeUrl && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\thref={ homeUrl }\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t\t\ticonPosition=\"right\"\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tclassName=\"navigation-link-to__action-button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'View' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => !! description }\n\t\t\t\t\t\tlabel={ __( 'Description' ) }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { description: '' } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t>\n\t\t\t\t\t\t<WCTextareaControl\n\t\t\t\t\t\t\tlabel={ __( 'Description' ) }\n\t\t\t\t\t\t\tvalue={ description || '' }\n\t\t\t\t\t\t\tonChange={ ( descriptionValue ) => {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tdescription: descriptionValue,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'The description will be displayed in the menu if the current theme supports it.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<a\n\t\t\t\t\tclassName=\"wp-block-home-link__content wp-block-navigation-item__content\"\n\t\t\t\t\thref={ homeUrl }\n\t\t\t\t\tonClick={ preventDefault }\n\t\t\t\t>\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"label\"\n\t\t\t\t\t\tclassName=\"wp-block-home-link__label\"\n\t\t\t\t\t\tvalue={ label ?? __( 'Home' ) }\n\t\t\t\t\t\tonChange={ ( labelValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { label: labelValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\taria-label={ __( 'Home link text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add label…' ) }\n\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t/>\n\t\t\t\t\t{ description && (\n\t\t\t\t\t\t<span className=\"wp-block-navigation-item__description\">\n\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) }\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport {\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport {\n\tButton,\n\tCheckboxControl as WCCheckboxControl,\n\tTextControl,\n\tTextareaControl as WCTextareaControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { external } from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\n\nconst preventDefault = ( event ) => event.preventDefault();\n\nexport default function HomeEdit( { attributes, setAttributes, context } ) {\n\tconst {\n\t\thomeUrl,\n\t\tonNavigateToEntityRecord,\n\t\tfrontPageId,\n\t\tfrontPageTemplateId,\n\t} = useSelect( ( select ) => {\n\t\tconst { getEntityRecord, getDefaultTemplateId, canUser } =\n\t\t\tselect( coreStore );\n\n\t\t// Site index.\n\t\tconst baseUrl = getEntityRecord( 'root', '__unstableBase' )?.home;\n\n\t\t// Front-page data (only available if the user can read site settings).\n\t\tconst canReadSettings = canUser( 'read', {\n\t\t\tkind: 'root',\n\t\t\tname: 'site',\n\t\t} );\n\t\tconst site = canReadSettings ? getEntityRecord( 'root', 'site' ) : null;\n\t\tconst resolvedFrontPageId =\n\t\t\tsite?.show_on_front === 'page' ? site?.page_on_front : null;\n\n\t\t// When no specific front page is set, fall back to the front-page template.\n\t\tconst resolvedFrontPageTemplateId = ! resolvedFrontPageId\n\t\t\t? getDefaultTemplateId( { slug: 'front-page' } )\n\t\t\t: null;\n\n\t\treturn {\n\t\t\thomeUrl: baseUrl,\n\t\t\tonNavigateToEntityRecord:\n\t\t\t\tselect( blockEditorStore ).getSettings()\n\t\t\t\t\t.onNavigateToEntityRecord,\n\t\t\tfrontPageId: resolvedFrontPageId,\n\t\t\tfrontPageTemplateId: resolvedFrontPageTemplateId,\n\t\t};\n\t}, [] );\n\n\tconst { textColor, backgroundColor, style } = context;\n\tconst { label, opensInNewTab, description } = attributes;\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( 'wp-block-navigation-item', {\n\t\t\t'has-text-color': !! textColor || !! style?.color?.text,\n\t\t\t[ `has-${ textColor }-color` ]: !! textColor,\n\t\t\t'has-background': !! backgroundColor || !! style?.color?.background,\n\t\t\t[ `has-${ backgroundColor }-background-color` ]: !! backgroundColor,\n\t\t} ),\n\t\tstyle: {\n\t\t\tcolor: style?.color?.text,\n\t\t\tbackgroundColor: style?.color?.background,\n\t\t},\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls group=\"content\">\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tresetAll={ () => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tlabel: '',\n\t\t\t\t\t\t\topensInNewTab: false,\n\t\t\t\t\t\t\tdescription: '',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => !! label }\n\t\t\t\t\t\tlabel={ __( 'Text' ) }\n\t\t\t\t\t\tonDeselect={ () => setAttributes( { label: '' } ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tlabel={ __( 'Text' ) }\n\t\t\t\t\t\t\tvalue={ label ? stripHTML( label ) : '' }\n\t\t\t\t\t\t\tonChange={ ( labelValue ) => {\n\t\t\t\t\t\t\t\tsetAttributes( { label: labelValue } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => !! opensInNewTab }\n\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { opensInNewTab: false } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t>\n\t\t\t\t\t\t<WCCheckboxControl\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tchecked={ opensInNewTab }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { opensInNewTab: value } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t{ onNavigateToEntityRecord &&\n\t\t\t\t\t\t( frontPageId || frontPageTemplateId ) && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tif ( frontPageId ) {\n\t\t\t\t\t\t\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\t\t\t\t\t\t\tpostId: frontPageId,\n\t\t\t\t\t\t\t\t\t\t\tpostType: 'page',\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\t\t\t\t\t\t\tpostId: frontPageTemplateId,\n\t\t\t\t\t\t\t\t\t\t\tpostType: 'wp_template',\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tclassName=\"navigation-link-to__action-button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) }\n\t\t\t\t\t{ homeUrl && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\thref={ homeUrl }\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t\t\ticonPosition=\"right\"\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tclassName=\"navigation-link-to__action-button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'View' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => !! description }\n\t\t\t\t\t\tlabel={ __( 'Description' ) }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { description: '' } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t>\n\t\t\t\t\t\t<WCTextareaControl\n\t\t\t\t\t\t\tlabel={ __( 'Description' ) }\n\t\t\t\t\t\t\tvalue={ description || '' }\n\t\t\t\t\t\t\tonChange={ ( descriptionValue ) => {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tdescription: descriptionValue,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'The description will be displayed in the menu if the current theme supports it.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<a\n\t\t\t\t\tclassName=\"wp-block-home-link__content wp-block-navigation-item__content\"\n\t\t\t\t\thref={ homeUrl }\n\t\t\t\t\tonClick={ preventDefault }\n\t\t\t\t>\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"label\"\n\t\t\t\t\t\tclassName=\"wp-block-home-link__label\"\n\t\t\t\t\t\tvalue={ label ?? __( 'Home' ) }\n\t\t\t\t\t\tonChange={ ( labelValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { label: labelValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\taria-label={ __( 'Home link text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add label…' ) }\n\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t/>\n\t\t\t\t\t{ description && (\n\t\t\t\t\t\t<span className=\"wp-block-navigation-item__description\">\n\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) }\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -49,7 +49,9 @@ function CustomInserterModal({ onClose, value, onChange }) {
49
49
  return icons.filter((icon) => {
50
50
  const iconName = normalizeSearchInput(icon.name);
51
51
  const iconLabel = normalizeSearchInput(icon.label);
52
- return iconName.includes(input) || iconLabel.includes(input);
52
+ return iconName.includes(input) || iconLabel.includes(input) || (icon.keywords ?? []).some(
53
+ (keyword) => normalizeSearchInput(keyword).includes(input)
54
+ );
53
55
  });
54
56
  }
55
57
  return icons;