@wordpress/block-library 11.1.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 (444) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/accordion-heading/block.json +1 -0
  3. package/build/archives/block.json +3 -0
  4. package/build/audio/edit.cjs +2 -1
  5. package/build/audio/edit.cjs.map +2 -2
  6. package/build/avatar/block.json +4 -0
  7. package/build/avatar/edit.cjs +31 -1
  8. package/build/avatar/edit.cjs.map +3 -3
  9. package/build/button/block.json +6 -0
  10. package/build/button/edit.cjs +9 -6
  11. package/build/button/edit.cjs.map +2 -2
  12. package/build/buttons/block.json +6 -1
  13. package/build/code/block.json +4 -0
  14. package/build/column/edit.cjs +5 -0
  15. package/build/column/edit.cjs.map +2 -2
  16. package/build/columns/block.json +4 -0
  17. package/build/columns/edit.cjs +21 -112
  18. package/build/columns/edit.cjs.map +3 -3
  19. package/build/comments/edit/placeholder.cjs +95 -87
  20. package/build/comments/edit/placeholder.cjs.map +2 -2
  21. package/build/comments-pagination/block.json +11 -0
  22. package/build/cover/block.json +2 -1
  23. package/build/cover/edit/index.cjs +26 -5
  24. package/build/cover/edit/index.cjs.map +2 -2
  25. package/build/cover/edit/inspector-controls.cjs +4 -1
  26. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  27. package/build/cover/embed-video-utils.cjs +9 -8
  28. package/build/cover/embed-video-utils.cjs.map +2 -2
  29. package/build/cover/view.cjs +21 -0
  30. package/build/cover/view.cjs.map +7 -0
  31. package/build/details/block.json +3 -0
  32. package/build/embed/block.json +6 -1
  33. package/build/file/block.json +5 -0
  34. package/build/footnotes/block.json +4 -0
  35. package/build/gallery/block.json +13 -0
  36. package/build/gallery/dynamic-gallery.cjs +32 -93
  37. package/build/gallery/dynamic-gallery.cjs.map +3 -3
  38. package/build/gallery/edit.cjs +103 -40
  39. package/build/gallery/edit.cjs.map +2 -2
  40. package/build/gallery/order-controls.cjs +107 -0
  41. package/build/gallery/order-controls.cjs.map +7 -0
  42. package/build/gallery/order-images.cjs +92 -0
  43. package/build/gallery/order-images.cjs.map +7 -0
  44. package/build/gallery/order-options.cjs +62 -0
  45. package/build/gallery/order-options.cjs.map +7 -0
  46. package/build/gallery/use-dynamic-gallery.cjs +1 -7
  47. package/build/gallery/use-dynamic-gallery.cjs.map +2 -2
  48. package/build/gallery/use-get-media.cjs +2 -3
  49. package/build/gallery/use-get-media.cjs.map +2 -2
  50. package/build/group/edit.cjs +3 -3
  51. package/build/group/edit.cjs.map +2 -2
  52. package/build/heading/block.json +5 -0
  53. package/build/home-link/block.json +12 -0
  54. package/build/icon/components/custom-inserter/index.cjs +3 -1
  55. package/build/icon/components/custom-inserter/index.cjs.map +2 -2
  56. package/build/icon/edit.cjs +49 -5
  57. package/build/icon/edit.cjs.map +2 -2
  58. package/build/image/use-open-image-media-editor-modal.cjs +32 -28
  59. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  60. package/build/image/view.cjs +44 -50
  61. package/build/image/view.cjs.map +2 -2
  62. package/build/latest-comments/block.json +10 -0
  63. package/build/latest-posts/block.json +4 -0
  64. package/build/list/block.json +12 -1
  65. package/build/list-item/block.json +8 -1
  66. package/build/list-item/index.cjs +4 -0
  67. package/build/list-item/index.cjs.map +3 -3
  68. package/build/loginout/block.json +4 -0
  69. package/build/math/block.json +4 -0
  70. package/build/media-text/block.json +18 -0
  71. package/build/navigation-link/link-ui/index.cjs +33 -19
  72. package/build/navigation-link/link-ui/index.cjs.map +2 -2
  73. package/build/navigation-link/shared/index.cjs +5 -0
  74. package/build/navigation-link/shared/index.cjs.map +2 -2
  75. package/build/navigation-link/shared/use-block-suggestions.cjs +141 -0
  76. package/build/navigation-link/shared/use-block-suggestions.cjs.map +7 -0
  77. package/build/page-list/block.json +4 -0
  78. package/build/paragraph/block.json +1 -0
  79. package/build/post-author-biography/block.json +1 -0
  80. package/build/post-comments-form/block.json +5 -0
  81. package/build/post-content/block.json +2 -1
  82. package/build/post-excerpt/block.json +4 -0
  83. package/build/post-featured-image/block.json +1 -0
  84. package/build/post-featured-image/edit.cjs +1 -1
  85. package/build/post-featured-image/edit.cjs.map +2 -2
  86. package/build/post-terms/block.json +4 -0
  87. package/build/post-time-to-read/block.json +4 -0
  88. package/build/post-title/block.json +4 -0
  89. package/build/preformatted/block.json +4 -0
  90. package/build/pullquote/block.json +2 -1
  91. package/build/query-no-results/block.json +4 -0
  92. package/build/query-pagination/block.json +17 -0
  93. package/build/query-total/block.json +4 -0
  94. package/build/quote/block.json +2 -0
  95. package/build/read-more/block.json +5 -0
  96. package/build/rss/block.json +4 -0
  97. package/build/search/block.json +2 -1
  98. package/build/site-tagline/block.json +4 -0
  99. package/build/site-title/block.json +4 -0
  100. package/build/social-links/block.json +1 -0
  101. package/build/tab-list/block.json +4 -0
  102. package/build/tab-list/edit.cjs +3 -1
  103. package/build/tab-list/edit.cjs.map +3 -3
  104. package/build/tab-list/save.cjs +3 -1
  105. package/build/tab-list/save.cjs.map +3 -3
  106. package/build/tab-panels/block.json +3 -0
  107. package/build/tabs/block.json +3 -0
  108. package/build/term-count/block.json +5 -0
  109. package/build/term-description/block.json +4 -0
  110. package/build/term-name/block.json +6 -1
  111. package/build/term-template/block.json +4 -0
  112. package/build/utils/waveform-utils.cjs +2 -2
  113. package/build/utils/waveform-utils.cjs.map +2 -2
  114. package/build/verse/block.json +4 -0
  115. package/build/video/block.json +7 -1
  116. package/build/video/edit.cjs +10 -2
  117. package/build/video/edit.cjs.map +2 -2
  118. package/build-module/accordion-heading/block.json +1 -0
  119. package/build-module/archives/block.json +3 -0
  120. package/build-module/audio/edit.mjs +2 -1
  121. package/build-module/audio/edit.mjs.map +2 -2
  122. package/build-module/avatar/block.json +4 -0
  123. package/build-module/avatar/edit.mjs +33 -2
  124. package/build-module/avatar/edit.mjs.map +2 -2
  125. package/build-module/button/block.json +6 -0
  126. package/build-module/button/edit.mjs +11 -7
  127. package/build-module/button/edit.mjs.map +2 -2
  128. package/build-module/buttons/block.json +6 -1
  129. package/build-module/code/block.json +4 -0
  130. package/build-module/column/edit.mjs +5 -0
  131. package/build-module/column/edit.mjs.map +2 -2
  132. package/build-module/columns/block.json +4 -0
  133. package/build-module/columns/edit.mjs +22 -122
  134. package/build-module/columns/edit.mjs.map +2 -2
  135. package/build-module/comments/edit/placeholder.mjs +95 -87
  136. package/build-module/comments/edit/placeholder.mjs.map +2 -2
  137. package/build-module/comments-pagination/block.json +11 -0
  138. package/build-module/cover/block.json +2 -1
  139. package/build-module/cover/edit/index.mjs +32 -6
  140. package/build-module/cover/edit/index.mjs.map +2 -2
  141. package/build-module/cover/edit/inspector-controls.mjs +5 -2
  142. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  143. package/build-module/cover/embed-video-utils.mjs +9 -8
  144. package/build-module/cover/embed-video-utils.mjs.map +2 -2
  145. package/build-module/cover/view.mjs +19 -0
  146. package/build-module/cover/view.mjs.map +7 -0
  147. package/build-module/details/block.json +3 -0
  148. package/build-module/embed/block.json +6 -1
  149. package/build-module/file/block.json +5 -0
  150. package/build-module/footnotes/block.json +4 -0
  151. package/build-module/gallery/block.json +13 -0
  152. package/build-module/gallery/dynamic-gallery.mjs +33 -97
  153. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  154. package/build-module/gallery/edit.mjs +110 -42
  155. package/build-module/gallery/edit.mjs.map +2 -2
  156. package/build-module/gallery/order-controls.mjs +87 -0
  157. package/build-module/gallery/order-controls.mjs.map +7 -0
  158. package/build-module/gallery/order-images.mjs +66 -0
  159. package/build-module/gallery/order-images.mjs.map +7 -0
  160. package/build-module/gallery/order-options.mjs +33 -0
  161. package/build-module/gallery/order-options.mjs.map +7 -0
  162. package/build-module/gallery/use-dynamic-gallery.mjs +1 -7
  163. package/build-module/gallery/use-dynamic-gallery.mjs.map +2 -2
  164. package/build-module/gallery/use-get-media.mjs +2 -3
  165. package/build-module/gallery/use-get-media.mjs.map +2 -2
  166. package/build-module/group/edit.mjs +4 -4
  167. package/build-module/group/edit.mjs.map +2 -2
  168. package/build-module/heading/block.json +5 -0
  169. package/build-module/home-link/block.json +12 -0
  170. package/build-module/icon/components/custom-inserter/index.mjs +3 -1
  171. package/build-module/icon/components/custom-inserter/index.mjs.map +2 -2
  172. package/build-module/icon/edit.mjs +50 -6
  173. package/build-module/icon/edit.mjs.map +2 -2
  174. package/build-module/image/use-open-image-media-editor-modal.mjs +32 -28
  175. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  176. package/build-module/image/view.mjs +44 -50
  177. package/build-module/image/view.mjs.map +2 -2
  178. package/build-module/latest-comments/block.json +10 -0
  179. package/build-module/latest-posts/block.json +4 -0
  180. package/build-module/list/block.json +12 -1
  181. package/build-module/list-item/block.json +8 -1
  182. package/build-module/list-item/index.mjs +4 -0
  183. package/build-module/list-item/index.mjs.map +2 -2
  184. package/build-module/loginout/block.json +4 -0
  185. package/build-module/math/block.json +4 -0
  186. package/build-module/media-text/block.json +18 -0
  187. package/build-module/navigation-link/link-ui/index.mjs +39 -20
  188. package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
  189. package/build-module/navigation-link/shared/index.mjs +6 -0
  190. package/build-module/navigation-link/shared/index.mjs.map +2 -2
  191. package/build-module/navigation-link/shared/use-block-suggestions.mjs +120 -0
  192. package/build-module/navigation-link/shared/use-block-suggestions.mjs.map +7 -0
  193. package/build-module/page-list/block.json +4 -0
  194. package/build-module/paragraph/block.json +1 -0
  195. package/build-module/post-author-biography/block.json +1 -0
  196. package/build-module/post-comments-form/block.json +5 -0
  197. package/build-module/post-content/block.json +2 -1
  198. package/build-module/post-excerpt/block.json +4 -0
  199. package/build-module/post-featured-image/block.json +1 -0
  200. package/build-module/post-featured-image/edit.mjs +1 -1
  201. package/build-module/post-featured-image/edit.mjs.map +2 -2
  202. package/build-module/post-terms/block.json +4 -0
  203. package/build-module/post-time-to-read/block.json +4 -0
  204. package/build-module/post-title/block.json +4 -0
  205. package/build-module/preformatted/block.json +4 -0
  206. package/build-module/pullquote/block.json +2 -1
  207. package/build-module/query-no-results/block.json +4 -0
  208. package/build-module/query-pagination/block.json +17 -0
  209. package/build-module/query-total/block.json +4 -0
  210. package/build-module/quote/block.json +2 -0
  211. package/build-module/read-more/block.json +5 -0
  212. package/build-module/rss/block.json +4 -0
  213. package/build-module/search/block.json +2 -1
  214. package/build-module/site-tagline/block.json +4 -0
  215. package/build-module/site-title/block.json +4 -0
  216. package/build-module/social-links/block.json +1 -0
  217. package/build-module/tab-list/block.json +4 -0
  218. package/build-module/tab-list/edit.mjs +4 -1
  219. package/build-module/tab-list/edit.mjs.map +2 -2
  220. package/build-module/tab-list/save.mjs +4 -1
  221. package/build-module/tab-list/save.mjs.map +2 -2
  222. package/build-module/tab-panels/block.json +3 -0
  223. package/build-module/tabs/block.json +3 -0
  224. package/build-module/term-count/block.json +5 -0
  225. package/build-module/term-description/block.json +4 -0
  226. package/build-module/term-name/block.json +6 -1
  227. package/build-module/term-template/block.json +4 -0
  228. package/build-module/utils/waveform-utils.mjs +1 -1
  229. package/build-module/utils/waveform-utils.mjs.map +1 -1
  230. package/build-module/verse/block.json +4 -0
  231. package/build-module/video/block.json +7 -1
  232. package/build-module/video/edit.mjs +10 -2
  233. package/build-module/video/edit.mjs.map +2 -2
  234. package/build-style/avatar/editor-rtl.css +4 -0
  235. package/build-style/avatar/editor.css +4 -0
  236. package/build-style/comments-pagination/style-rtl.css +3 -0
  237. package/build-style/comments-pagination/style.css +3 -0
  238. package/build-style/common-rtl.css +32 -1
  239. package/build-style/common.css +35 -2
  240. package/build-style/editor-rtl.css +11 -4
  241. package/build-style/editor.css +11 -4
  242. package/build-style/embed/style-rtl.css +4 -1
  243. package/build-style/embed/style.css +4 -1
  244. package/build-style/gallery/editor-rtl.css +1 -3
  245. package/build-style/gallery/editor.css +1 -3
  246. package/build-style/image/style-rtl.css +11 -2
  247. package/build-style/image/style.css +11 -2
  248. package/build-style/media-text/style-rtl.css +4 -1
  249. package/build-style/media-text/style.css +4 -1
  250. package/build-style/query-pagination/style-rtl.css +3 -0
  251. package/build-style/query-pagination/style.css +3 -0
  252. package/build-style/style-rtl.css +70 -9
  253. package/build-style/style.css +73 -10
  254. package/build-style/table/editor-rtl.css +6 -1
  255. package/build-style/table/editor.css +6 -1
  256. package/build-style/table/style-rtl.css +4 -2
  257. package/build-style/table/style.css +4 -2
  258. package/build-style/tag-cloud/style-rtl.css +1 -1
  259. package/build-style/tag-cloud/style.css +1 -1
  260. package/build-style/verse/style-rtl.css +8 -1
  261. package/build-style/verse/style.css +8 -1
  262. package/build-types/gallery/order-controls.d.ts +58 -0
  263. package/build-types/gallery/order-controls.d.ts.map +1 -0
  264. package/build-types/gallery/order-options.d.ts +67 -0
  265. package/build-types/gallery/order-options.d.ts.map +1 -0
  266. package/package.json +44 -41
  267. package/src/accordion-heading/README.md +1 -0
  268. package/src/accordion-heading/block.json +1 -0
  269. package/src/archives/README.md +2 -0
  270. package/src/archives/block.json +3 -0
  271. package/src/audio/edit.jsx +2 -1
  272. package/src/avatar/README.md +2 -0
  273. package/src/avatar/block.json +4 -0
  274. package/src/avatar/edit.jsx +48 -2
  275. package/src/avatar/editor.scss +4 -0
  276. package/src/avatar/index.php +5 -3
  277. package/src/breadcrumbs/index.php +1 -1
  278. package/src/button/README.md +4 -0
  279. package/src/button/block.json +6 -0
  280. package/src/button/edit.jsx +47 -52
  281. package/src/button/index.php +47 -0
  282. package/src/buttons/README.md +4 -0
  283. package/src/buttons/block.json +6 -1
  284. package/src/code/README.md +3 -0
  285. package/src/code/block.json +4 -0
  286. package/src/column/edit.jsx +6 -0
  287. package/src/columns/README.md +3 -0
  288. package/src/columns/block.json +4 -0
  289. package/src/columns/edit.jsx +1 -131
  290. package/src/comments/edit/placeholder.jsx +5 -1
  291. package/src/comments-pagination/README.md +4 -0
  292. package/src/comments-pagination/block.json +11 -0
  293. package/src/comments-pagination/style.scss +3 -0
  294. package/src/common.scss +38 -0
  295. package/src/cover/README.md +1 -0
  296. package/src/cover/block.json +2 -1
  297. package/src/cover/edit/index.jsx +38 -6
  298. package/src/cover/edit/inspector-controls.jsx +10 -1
  299. package/src/cover/embed-video-utils.js +18 -10
  300. package/src/cover/index.php +44 -15
  301. package/src/cover/test/edit.browser.test.js +182 -2
  302. package/src/cover/test/embed-video-utils.test.js +48 -0
  303. package/src/cover/view.js +22 -0
  304. package/src/details/README.md +2 -0
  305. package/src/details/block.json +3 -0
  306. package/src/embed/README.md +4 -0
  307. package/src/embed/block.json +6 -1
  308. package/src/embed/style.scss +7 -1
  309. package/src/file/README.md +4 -0
  310. package/src/file/block.json +5 -0
  311. package/src/footnotes/README.md +3 -0
  312. package/src/footnotes/block.json +4 -0
  313. package/src/gallery/README.md +13 -0
  314. package/src/gallery/block.json +13 -0
  315. package/src/gallery/dynamic-gallery.jsx +11 -91
  316. package/src/gallery/edit.jsx +146 -47
  317. package/src/gallery/editor.scss +5 -9
  318. package/src/gallery/order-controls.tsx +143 -0
  319. package/src/gallery/order-images.js +111 -0
  320. package/src/gallery/order-options.ts +75 -0
  321. package/src/gallery/test/edit.jsdom.test.js +87 -10
  322. package/src/gallery/test/order-images.js +162 -0
  323. package/src/gallery/use-dynamic-gallery.js +1 -9
  324. package/src/gallery/use-get-media.js +7 -2
  325. package/src/group/edit.jsx +5 -5
  326. package/src/heading/README.md +4 -0
  327. package/src/heading/block.json +5 -0
  328. package/src/home-link/README.md +6 -0
  329. package/src/home-link/block.json +12 -0
  330. package/src/icon/components/custom-inserter/index.jsx +5 -1
  331. package/src/icon/edit.jsx +68 -7
  332. package/src/icon/index.php +1 -1
  333. package/src/image/index.php +3 -4
  334. package/src/image/style.scss +14 -2
  335. package/src/image/test/use-open-image-media-editor-modal.jsdom.test.js +122 -60
  336. package/src/image/use-open-image-media-editor-modal.js +37 -41
  337. package/src/image/view.js +64 -68
  338. package/src/latest-comments/README.md +3 -0
  339. package/src/latest-comments/block.json +10 -0
  340. package/src/latest-posts/README.md +3 -0
  341. package/src/latest-posts/block.json +4 -0
  342. package/src/list/README.md +6 -0
  343. package/src/list/block.json +12 -1
  344. package/src/list-item/README.md +6 -0
  345. package/src/list-item/block.json +8 -1
  346. package/src/list-item/index.js +5 -0
  347. package/src/loginout/README.md +3 -0
  348. package/src/loginout/block.json +4 -0
  349. package/src/math/README.md +3 -0
  350. package/src/math/block.json +4 -0
  351. package/src/media-text/README.md +17 -0
  352. package/src/media-text/block.json +18 -0
  353. package/src/media-text/style.scss +5 -1
  354. package/src/navigation/test/use-navigation-menu.jsdom.test.js +1 -1
  355. package/src/navigation-link/README.md +1 -1
  356. package/src/navigation-link/link-ui/index.jsx +60 -27
  357. package/src/navigation-link/link-ui/test/get-suggestions-query.jsdom.test.js +67 -0
  358. package/src/navigation-link/shared/index.js +4 -0
  359. package/src/navigation-link/shared/test/use-block-suggestions.jsdom.test.js +158 -0
  360. package/src/navigation-link/shared/test/use-entity-binding.jsdom.test.js +1 -7
  361. package/src/navigation-link/shared/use-block-suggestions.js +192 -0
  362. package/src/page-list/README.md +3 -0
  363. package/src/page-list/block.json +4 -0
  364. package/src/paragraph/README.md +1 -0
  365. package/src/paragraph/block.json +1 -0
  366. package/src/playlist/test/edit-component.jsdom.test.jsx +11 -11
  367. package/src/playlist-track/test/edit.jsdom.test.jsx +3 -3
  368. package/src/post-author-biography/README.md +1 -0
  369. package/src/post-author-biography/block.json +1 -0
  370. package/src/post-comments-form/README.md +3 -0
  371. package/src/post-comments-form/block.json +5 -0
  372. package/src/post-content/README.md +1 -0
  373. package/src/post-content/block.json +2 -1
  374. package/src/post-excerpt/README.md +3 -0
  375. package/src/post-excerpt/block.json +4 -0
  376. package/src/post-featured-image/block.json +1 -0
  377. package/src/post-featured-image/edit.jsx +2 -2
  378. package/src/post-terms/README.md +3 -0
  379. package/src/post-terms/block.json +4 -0
  380. package/src/post-time-to-read/README.md +3 -0
  381. package/src/post-time-to-read/block.json +4 -0
  382. package/src/post-title/README.md +3 -0
  383. package/src/post-title/block.json +4 -0
  384. package/src/preformatted/README.md +3 -0
  385. package/src/preformatted/block.json +4 -0
  386. package/src/pullquote/README.md +1 -0
  387. package/src/pullquote/block.json +2 -1
  388. package/src/query-no-results/README.md +3 -0
  389. package/src/query-no-results/block.json +4 -0
  390. package/src/query-pagination/README.md +4 -0
  391. package/src/query-pagination/block.json +17 -0
  392. package/src/query-pagination/style.scss +3 -0
  393. package/src/query-total/README.md +3 -0
  394. package/src/query-total/block.json +4 -0
  395. package/src/quote/README.md +2 -0
  396. package/src/quote/block.json +2 -0
  397. package/src/read-more/README.md +3 -0
  398. package/src/read-more/block.json +5 -0
  399. package/src/rss/README.md +3 -0
  400. package/src/rss/block.json +4 -0
  401. package/src/search/README.md +1 -0
  402. package/src/search/block.json +2 -1
  403. package/src/site-tagline/README.md +3 -0
  404. package/src/site-tagline/block.json +4 -0
  405. package/src/site-title/README.md +3 -0
  406. package/src/site-title/block.json +4 -0
  407. package/src/social-links/README.md +1 -0
  408. package/src/social-links/block.json +1 -0
  409. package/src/tab-list/README.md +2 -0
  410. package/src/tab-list/block.json +4 -0
  411. package/src/tab-list/edit.jsx +3 -0
  412. package/src/tab-list/save.jsx +3 -0
  413. package/src/tab-panels/README.md +2 -0
  414. package/src/tab-panels/block.json +3 -0
  415. package/src/table/editor.scss +8 -2
  416. package/src/table/style.scss +4 -4
  417. package/src/tabs/README.md +2 -0
  418. package/src/tabs/block.json +3 -0
  419. package/src/tag-cloud/style.scss +1 -1
  420. package/src/template-part/index.php +16 -3
  421. package/src/term-count/README.md +4 -0
  422. package/src/term-count/block.json +5 -0
  423. package/src/term-description/README.md +3 -0
  424. package/src/term-description/block.json +4 -0
  425. package/src/term-name/README.md +4 -0
  426. package/src/term-name/block.json +6 -1
  427. package/src/term-template/README.md +3 -0
  428. package/src/term-template/block.json +4 -0
  429. package/src/utils/test/waveform-player-auto-init.jsdom.test.js +25 -0
  430. package/src/utils/test/waveform-player-dependency.jsdom.test.js +7 -60
  431. package/src/utils/test/waveform-utils.browser.test.js +3 -15
  432. package/src/utils/waveform-utils.js +1 -1
  433. package/src/verse/README.md +4 -0
  434. package/src/verse/block.json +4 -0
  435. package/src/verse/style.scss +11 -2
  436. package/src/video/README.md +4 -0
  437. package/src/video/block.json +7 -1
  438. package/src/video/edit.jsx +13 -2
  439. package/build/columns/utils.cjs +0 -112
  440. package/build/columns/utils.cjs.map +0 -7
  441. package/build-module/columns/utils.mjs +0 -78
  442. package/build-module/columns/utils.mjs.map +0 -7
  443. package/src/columns/test/utils.js +0 -331
  444. package/src/columns/utils.js +0 -176
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/gallery/edit.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport {\n\tSelectControl as WCSelectControl,\n\tToggleControl,\n\tRangeControl,\n\tMenuGroup,\n\tMenuItem,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\tToolbarDropdownMenu,\n\tButton,\n} from '@wordpress/components';\nimport {\n\tstore as blockEditorStore,\n\tMediaPlaceholder,\n\tInspectorControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tuseBlockEditingMode,\n\tBlockControls,\n\tMediaReplaceFlow,\n\tuseSettings,\n} from '@wordpress/block-editor';\nimport { useEffect, useMemo, useRef } from '@wordpress/element';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { createBlock } from '@wordpress/blocks';\nimport { createBlobURL } from '@wordpress/blob';\nimport { store as noticesStore } from '@wordpress/notices';\nimport {\n\tlink as linkIcon,\n\tcustomLink,\n\timage as imageIcon,\n\tlinkOff,\n\tfullscreen,\n} from '@wordpress/icons';\nimport { sharedIcon } from './shared-icon';\nimport {\n\tdefaultColumnsNumber,\n\tisGalleryFlexLayout,\n\tisObject,\n\tpickRelevantMediaFiles,\n} from './shared';\nimport { getHrefAndDestination } from './utils';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\nimport {\n\tgetUpdatedLinkTargetSettings,\n\tgetImageSizeAttributes,\n} from '../image/utils';\nimport Gallery from './gallery';\nimport {\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_MEDIA,\n\tLINK_DESTINATION_NONE,\n\tLINK_DESTINATION_LIGHTBOX,\n\tDEFAULT_MEDIA_SIZE_SLUG,\n\tMAX_COLUMNS,\n} from './constants';\nimport useImageSizes from './use-image-sizes';\nimport useGetNewImages from './use-get-new-images';\nimport useGetMedia from './use-get-media';\nimport GalleryStyles from './gallery-styles';\nimport useDynamicGallery from './use-dynamic-gallery';\nimport { GallerySourcePanel, GalleryDynamicView } from './dynamic-gallery';\nimport { getDynamicSource, ATTACHED_MEDIA } from './dynamic-source';\nimport {\n\tgetViewportGalleryStyle,\n\tgetUpdatedGalleryStyle,\n\tisValidGalleryColumns,\n} from './responsive-styles';\n\nconst LINK_OPTIONS = [\n\t{\n\t\ticon: customLink,\n\t\tlabel: __( 'Link images to attachment pages' ),\n\t\tvalue: LINK_DESTINATION_ATTACHMENT,\n\t\tnoticeText: __( 'Attachment Pages' ),\n\t},\n\t{\n\t\ticon: imageIcon,\n\t\tlabel: __( 'Link images to media files' ),\n\t\tvalue: LINK_DESTINATION_MEDIA,\n\t\tnoticeText: __( 'Media Files' ),\n\t},\n\t{\n\t\ticon: fullscreen,\n\t\tlabel: __( 'Enlarge on click' ),\n\t\tvalue: LINK_DESTINATION_LIGHTBOX,\n\t\tnoticeText: __( 'Lightbox effect' ),\n\t\tinfoText: __( 'Scale images with a lightbox effect' ),\n\t},\n\t{\n\t\ticon: linkOff,\n\t\tlabel: _x( 'None', 'Media item link option' ),\n\t\tvalue: LINK_DESTINATION_NONE,\n\t\tnoticeText: __( 'None' ),\n\t},\n];\nconst NAVIGATION_BUTTON_TYPE_OPTIONS = [\n\t{\n\t\tlabel: __( 'Icon' ),\n\t\tvalue: 'icon',\n\t},\n\t{\n\t\tlabel: __( 'Text' ),\n\t\tvalue: 'text',\n\t},\n\t{\n\t\tlabel: __( 'Both' ),\n\t\tvalue: 'both',\n\t},\n];\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\n\nconst PLACEHOLDER_TEXT = __(\n\t'Drag and drop images, upload, or choose from your library.'\n);\n\nconst DEFAULT_BLOCK = { name: 'core/image' };\nconst EMPTY_ARRAY = [];\n\nexport default function GalleryEdit( props ) {\n\tconst {\n\t\tsetAttributes,\n\t\tattributes,\n\t\tclassName,\n\t\tclientId,\n\t\tisSelected,\n\t\tinsertBlocksAfter,\n\t\tisContentLocked,\n\t\tcontext,\n\t\t__unstableLayoutClassNames: layoutClassNames,\n\t} = props;\n\n\tconst postId = context?.postId;\n\tconst postType = context?.postType;\n\n\t// Entering dynamic mode is a structural change (it discards inner blocks and\n\t// switches the block's mode), so the entry point is only offered when the\n\t// block is fully editable — mirroring the dynamic view's \"Edit images\"\n\t// toolbar control. Under a content lock the mode is `'contentOnly'`/\n\t// `'disabled'`, where structural affordances are hidden.\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst [ lightboxSetting, defaultRatios, themeRatios, showDefaultRatios ] =\n\t\tuseSettings(\n\t\t\t'blocks.core/image.lightbox',\n\t\t\t'dimensions.aspectRatios.default',\n\t\t\t'dimensions.aspectRatios.theme',\n\t\t\t'dimensions.defaultAspectRatios'\n\t\t);\n\n\tconst linkOptions = ! lightboxSetting?.allowEditing\n\t\t? LINK_OPTIONS.filter(\n\t\t\t\t( option ) => option.value !== LINK_DESTINATION_LIGHTBOX\n\t\t\t)\n\t\t: LINK_OPTIONS;\n\n\tconst {\n\t\talign,\n\t\tnavigationButtonType,\n\t\tcolumns,\n\t\timageCrop,\n\t\trandomOrder,\n\t\tlinkTarget,\n\t\tlinkTo,\n\t\tsizeSlug,\n\t\taspectRatio,\n\t\tlayout,\n\t} = attributes;\n\tconst isFlexLayout = isGalleryFlexLayout( layout );\n\tconst previousLayoutRef = useRef( layout );\n\n\tconst {\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\treplaceInnerBlocks,\n\t\tupdateBlockAttributes,\n\t\tselectBlock,\n\t} = useDispatch( blockEditorStore );\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tuseEffect( () => {\n\t\t// Variations replace the whole layout object. Carry Grid-only settings\n\t\t// across a layout type change so switching back restores them.\n\t\tconst previousLayout = previousLayoutRef.current;\n\t\tpreviousLayoutRef.current = layout;\n\n\t\tif (\n\t\t\t! isObject( previousLayout ) ||\n\t\t\t! isObject( layout ) ||\n\t\t\tpreviousLayout.type === layout.type\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextLayout = { ...layout };\n\t\tlet hasPreservedGridSetting = false;\n\n\t\tif (\n\t\t\t! Object.hasOwn( layout, 'columnCount' ) &&\n\t\t\tNumber.isInteger( previousLayout.columnCount ) &&\n\t\t\tpreviousLayout.columnCount > 0\n\t\t) {\n\t\t\tnextLayout.columnCount = previousLayout.columnCount;\n\t\t\thasPreservedGridSetting = true;\n\t\t}\n\n\t\tif (\n\t\t\t! Object.hasOwn( layout, 'minimumColumnWidth' ) &&\n\t\t\ttypeof previousLayout.minimumColumnWidth === 'string'\n\t\t) {\n\t\t\tnextLayout.minimumColumnWidth = previousLayout.minimumColumnWidth;\n\t\t\thasPreservedGridSetting = true;\n\t\t}\n\n\t\tif ( hasPreservedGridSetting ) {\n\t\t\tpreviousLayoutRef.current = nextLayout;\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( { layout: nextLayout } );\n\t\t}\n\t}, [ layout, setAttributes, __unstableMarkNextChangeAsNotPersistent ] );\n\n\tconst {\n\t\tgetBlock,\n\t\tgetSettings,\n\t\tinnerBlockImages,\n\t\tmultiGallerySelection,\n\t\tselectedStyleState,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockName,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\tgetSettings: _getSettings,\n\t\t\t\tgetBlock: _getBlock,\n\t\t\t\tgetSelectedBlockStyleState,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\n\t\t\treturn {\n\t\t\t\tgetBlock: _getBlock,\n\t\t\t\tgetSettings: _getSettings,\n\t\t\t\tinnerBlockImages:\n\t\t\t\t\t_getBlock( clientId )?.innerBlocks ?? EMPTY_ARRAY,\n\t\t\t\tmultiGallerySelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/gallery'\n\t\t\t\t\t),\n\t\t\t\tselectedStyleState: getSelectedBlockStyleState( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst isViewportStyleState =\n\t\tselectedStyleState?.viewport &&\n\t\tselectedStyleState.viewport !== 'default';\n\tconst viewportStyle = isViewportStyleState\n\t\t? getViewportGalleryStyle(\n\t\t\t\tattributes.style,\n\t\t\t\tselectedStyleState.viewport\n\t\t\t)\n\t\t: {};\n\tconst baseColumns = isValidGalleryColumns( columns ) ? columns : undefined;\n\tconst baseImageCrop = typeof imageCrop === 'boolean' ? imageCrop : true;\n\t// Normalized so a Gallery with no aspect ratio and one explicitly set to\n\t// Original compare equal, and a viewport override matching either is\n\t// dropped rather than stored.\n\tconst baseAspectRatio = aspectRatio || 'auto';\n\tconst hasViewportColumns =\n\t\tisViewportStyleState &&\n\t\tObject.hasOwn( viewportStyle, 'columns' ) &&\n\t\tisValidGalleryColumns( viewportStyle.columns );\n\tconst hasViewportImageCrop =\n\t\tisViewportStyleState &&\n\t\tObject.hasOwn( viewportStyle, 'imageCrop' ) &&\n\t\ttypeof viewportStyle.imageCrop === 'boolean';\n\tconst hasViewportAspectRatio =\n\t\tisViewportStyleState &&\n\t\tObject.hasOwn( viewportStyle, 'aspectRatio' ) &&\n\t\ttypeof viewportStyle.aspectRatio === 'string' &&\n\t\t!! viewportStyle.aspectRatio;\n\tconst activeColumns = hasViewportColumns\n\t\t? viewportStyle.columns\n\t\t: baseColumns;\n\tconst activeImageCrop = hasViewportImageCrop\n\t\t? viewportStyle.imageCrop\n\t\t: baseImageCrop;\n\tconst activeAspectRatio = hasViewportAspectRatio\n\t\t? viewportStyle.aspectRatio\n\t\t: baseAspectRatio;\n\n\tconst images = useMemo(\n\t\t() =>\n\t\t\tinnerBlockImages?.map( ( block ) => ( {\n\t\t\t\tclientId: block.clientId,\n\t\t\t\tid: block.attributes.id,\n\t\t\t\turl: block.attributes.url,\n\t\t\t\tattributes: block.attributes,\n\t\t\t\tfromSavedContent: Boolean( block.originalContent ),\n\t\t\t} ) ),\n\t\t[ innerBlockImages ]\n\t);\n\n\tconst imageData = useGetMedia( innerBlockImages );\n\n\tconst newImages = useGetNewImages( images, imageData );\n\n\tconst hasImages = !! images.length;\n\tconst isDynamic = !! attributes.dynamicContent;\n\n\t// Dynamic mode (resolving images from a source instead of inner blocks):\n\t// source resolution, the editor-preview blocks, and the mode/ordering\n\t// actions.\n\tconst dynamic = useDynamicGallery( {\n\t\tattributes,\n\t\tsetAttributes,\n\t\tclientId,\n\t\tpostId,\n\t\tpostType,\n\t} );\n\n\t// State that drives counts/size options should reflect the dynamic media\n\t// when the gallery is in dynamic mode.\n\tconst displayedImageCount = isDynamic\n\t\t? dynamic.dynamicMedia.length\n\t\t: images.length;\n\n\t// Check if there is at least one image with lightbox enabled. In dynamic\n\t// mode the images inherit the gallery's link setting, so the lightbox is on\n\t// when the gallery links images to the lightbox.\n\tlet hasLightboxImages;\n\tif ( isDynamic ) {\n\t\thasLightboxImages = linkTo === LINK_DESTINATION_LIGHTBOX;\n\t} else if ( lightboxSetting?.enabled ) {\n\t\thasLightboxImages =\n\t\t\timages.filter(\n\t\t\t\t( image ) =>\n\t\t\t\t\timage.attributes?.lightbox?.enabled === undefined ||\n\t\t\t\t\timage.attributes?.lightbox?.enabled === true\n\t\t\t).length > 0;\n\t} else {\n\t\thasLightboxImages =\n\t\t\timages.filter( ( image ) => image.attributes.lightbox?.enabled )\n\t\t\t\t.length > 0;\n\t}\n\n\tconst themeOptions = themeRatios?.map( ( { name, ratio } ) => ( {\n\t\tlabel: name,\n\t\tvalue: ratio,\n\t} ) );\n\tconst defaultOptions = defaultRatios?.map( ( { name, ratio } ) => ( {\n\t\tlabel: name,\n\t\tvalue: ratio,\n\t} ) );\n\tconst aspectRatioOptions = [\n\t\t{\n\t\t\tlabel: _x(\n\t\t\t\t'Original',\n\t\t\t\t'Aspect ratio option for dimensions control'\n\t\t\t),\n\t\t\tvalue: 'auto',\n\t\t},\n\t\t...( showDefaultRatios ? defaultOptions || [] : [] ),\n\t\t...( themeOptions || [] ),\n\t];\n\n\tuseEffect( () => {\n\t\tnewImages?.forEach( ( newImage ) => {\n\t\t\t// Update the images data without creating new undo levels.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes( newImage.clientId, {\n\t\t\t\t...buildImageAttributes( newImage.attributes ),\n\t\t\t\tid: newImage.id,\n\t\t\t\talign: undefined,\n\t\t\t} );\n\t\t} );\n\t}, [ newImages ] );\n\n\tconst imageSizeOptions = useImageSizes(\n\t\tisDynamic ? dynamic.dynamicMedia : imageData,\n\t\tisSelected,\n\t\tgetSettings\n\t);\n\n\t/**\n\t * Determines the image attributes that should be applied to an image block\n\t * after the gallery updates.\n\t *\n\t * The gallery will receive the full collection of images when a new image\n\t * is added. As a result we need to reapply the image's original settings if\n\t * it already existed in the gallery. If the image is in fact new, we need\n\t * to apply the gallery's current settings to the image.\n\t *\n\t * @param {Object} imageAttributes Media object for the actual image.\n\t * @return {Object} Attributes to set on the new image block.\n\t */\n\tfunction buildImageAttributes( imageAttributes ) {\n\t\tconst image = imageAttributes.id\n\t\t\t? imageData.find( ( { id } ) => id === imageAttributes.id )\n\t\t\t: null;\n\n\t\tlet newClassName;\n\t\tif ( imageAttributes.className && imageAttributes.className !== '' ) {\n\t\t\tnewClassName = imageAttributes.className;\n\t\t}\n\n\t\tlet newLinkTarget;\n\t\tif ( imageAttributes.linkTarget || imageAttributes.rel ) {\n\t\t\t// When transformed from image blocks, the link destination and rel attributes are inherited.\n\t\t\tnewLinkTarget = {\n\t\t\t\tlinkTarget: imageAttributes.linkTarget,\n\t\t\t\trel: imageAttributes.rel,\n\t\t\t};\n\t\t} else {\n\t\t\t// When an image is added, update the link destination and rel attributes according to the gallery settings\n\t\t\tnewLinkTarget = getUpdatedLinkTargetSettings(\n\t\t\t\tlinkTarget,\n\t\t\t\tattributes\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\t...pickRelevantMediaFiles( image, sizeSlug ),\n\t\t\t...getHrefAndDestination(\n\t\t\t\timage,\n\t\t\t\tlinkTo,\n\t\t\t\timageAttributes?.linkDestination\n\t\t\t),\n\t\t\t...newLinkTarget,\n\t\t\tclassName: newClassName,\n\t\t\tsizeSlug,\n\t\t\tcaption:\n\t\t\t\timageAttributes.caption.length > 0\n\t\t\t\t\t? imageAttributes.caption\n\t\t\t\t\t: image.caption?.raw,\n\t\t\talt: imageAttributes.alt || image.alt_text,\n\t\t\taspectRatio: aspectRatio === 'auto' ? undefined : aspectRatio,\n\t\t\tscale: aspectRatio && aspectRatio !== 'auto' ? 'cover' : undefined,\n\t\t};\n\t}\n\n\tfunction isValidFileType( file ) {\n\t\tconst mediaTypeSelector = file.type;\n\n\t\treturn (\n\t\t\tALLOWED_MEDIA_TYPES.some(\n\t\t\t\t( mediaType ) => mediaTypeSelector?.indexOf( mediaType ) === 0\n\t\t\t) || file.blob\n\t\t);\n\t}\n\n\tfunction updateImages( selectedImages ) {\n\t\tconst newFileUploads =\n\t\t\tObject.prototype.toString.call( selectedImages ) ===\n\t\t\t'[object FileList]';\n\n\t\tconst imageArray = newFileUploads\n\t\t\t? Array.from( selectedImages ).map( ( file ) => {\n\t\t\t\t\tif ( ! file.url ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tblob: createBlobURL( file ),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn file;\n\t\t\t\t} )\n\t\t\t: selectedImages;\n\n\t\tif ( ! imageArray.every( isValidFileType ) ) {\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'If uploading to a gallery all files need to be image formats'\n\t\t\t\t),\n\t\t\t\t{ id: 'gallery-upload-invalid-file', type: 'snackbar' }\n\t\t\t);\n\t\t}\n\n\t\tconst processedImages = imageArray\n\t\t\t.filter( ( file ) => file.url || isValidFileType( file ) )\n\t\t\t.map( ( file ) => {\n\t\t\t\tif ( ! file.url ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tblob: file.blob || createBlobURL( file ),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn file;\n\t\t\t} );\n\n\t\t// Because we are reusing existing innerImage blocks any reordering\n\t\t// done in the media library will be lost so we need to reapply that ordering\n\t\t// once the new image blocks are merged in with existing.\n\t\tconst newOrderMap = processedImages.reduce(\n\t\t\t( result, image, index ) => (\n\t\t\t\t( result[ image.id ] = index ),\n\t\t\t\tresult\n\t\t\t ),\n\t\t\t{}\n\t\t);\n\n\t\tconst existingImageBlocks = ! newFileUploads\n\t\t\t? innerBlockImages.filter( ( block ) =>\n\t\t\t\t\tprocessedImages.find(\n\t\t\t\t\t\t( img ) => img.id === block.attributes.id\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t: innerBlockImages;\n\n\t\tconst newImageList = processedImages.filter(\n\t\t\t( img ) =>\n\t\t\t\t! existingImageBlocks.find(\n\t\t\t\t\t( existingImg ) => img.id === existingImg.attributes.id\n\t\t\t\t)\n\t\t);\n\n\t\tconst newBlocks = newImageList.map( ( image ) => {\n\t\t\treturn createBlock( 'core/image', {\n\t\t\t\tid: image.id,\n\t\t\t\tblob: image.blob,\n\t\t\t\turl: image.url,\n\t\t\t\tcaption: image.caption,\n\t\t\t\talt: image.alt,\n\t\t\t} );\n\t\t} );\n\n\t\treplaceInnerBlocks(\n\t\t\tclientId,\n\t\t\texistingImageBlocks\n\t\t\t\t.concat( newBlocks )\n\t\t\t\t.sort(\n\t\t\t\t\t( a, b ) =>\n\t\t\t\t\t\tnewOrderMap[ a.attributes.id ] -\n\t\t\t\t\t\tnewOrderMap[ b.attributes.id ]\n\t\t\t\t)\n\t\t);\n\n\t\t// Select the first block to scroll into view when new blocks are added.\n\t\tif ( newBlocks?.length > 0 ) {\n\t\t\tselectBlock( newBlocks[ 0 ].clientId );\n\t\t}\n\t}\n\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t}\n\n\tfunction setLinkTo( value ) {\n\t\tsetAttributes( { linkTo: value } );\n\t\tconst changedAttributes = {};\n\t\tconst blocks = [];\n\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\tblocks.push( block.clientId );\n\t\t\tconst image = block.attributes.id\n\t\t\t\t? imageData.find( ( { id } ) => id === block.attributes.id )\n\t\t\t\t: null;\n\n\t\t\tchangedAttributes[ block.clientId ] = getHrefAndDestination(\n\t\t\t\timage,\n\t\t\t\tvalue,\n\t\t\t\tfalse,\n\t\t\t\tblock.attributes,\n\t\t\t\tlightboxSetting\n\t\t\t);\n\t\t} );\n\t\tupdateBlockAttributes( blocks, changedAttributes, {\n\t\t\tuniqueByBlock: true,\n\t\t} );\n\t\tconst linkToText = [ ...linkOptions ].find(\n\t\t\t( linkType ) => linkType.value === value\n\t\t);\n\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: image size settings */\n\t\t\t\t__( 'All gallery image links updated to: %s' ),\n\t\t\t\tlinkToText.noticeText\n\t\t\t),\n\t\t\t{\n\t\t\t\tid: 'gallery-attributes-linkTo',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t}\n\n\tfunction setGallerySettings( settings ) {\n\t\tif ( ! isViewportStyleState ) {\n\t\t\tsetAttributes( settings );\n\t\t\treturn;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\tstyle: getUpdatedGalleryStyle( {\n\t\t\t\tstyle: attributes.style,\n\t\t\t\tviewport: selectedStyleState.viewport,\n\t\t\t\tbaseSettings: {\n\t\t\t\t\tcolumns: baseColumns,\n\t\t\t\t\timageCrop: baseImageCrop,\n\t\t\t\t\taspectRatio: baseAspectRatio,\n\t\t\t\t},\n\t\t\t\tsettings,\n\t\t\t} ),\n\t\t} );\n\t}\n\n\tfunction setColumnsNumber( value ) {\n\t\tsetGallerySettings( { columns: value } );\n\t}\n\n\tfunction toggleImageCrop() {\n\t\tsetGallerySettings( { imageCrop: ! activeImageCrop } );\n\t}\n\n\tfunction toggleRandomOrder() {\n\t\tsetAttributes( { randomOrder: ! randomOrder } );\n\t}\n\n\tfunction toggleOpenInNewTab( openInNewTab ) {\n\t\tconst newLinkTarget = openInNewTab ? '_blank' : undefined;\n\t\tsetAttributes( { linkTarget: newLinkTarget } );\n\t\tconst changedAttributes = {};\n\t\tconst blocks = [];\n\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\tblocks.push( block.clientId );\n\t\t\tchangedAttributes[ block.clientId ] = getUpdatedLinkTargetSettings(\n\t\t\t\tnewLinkTarget,\n\t\t\t\tblock.attributes\n\t\t\t);\n\t\t} );\n\t\tupdateBlockAttributes( blocks, changedAttributes, {\n\t\t\tuniqueByBlock: true,\n\t\t} );\n\t\tconst noticeText = openInNewTab\n\t\t\t? __( 'All gallery images updated to open in new tab' )\n\t\t\t: __( 'All gallery images updated to not open in new tab' );\n\t\tcreateSuccessNotice( noticeText, {\n\t\t\tid: 'gallery-attributes-openInNewTab',\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t}\n\n\tfunction updateImagesSize( newSizeSlug ) {\n\t\tsetAttributes( { sizeSlug: newSizeSlug } );\n\t\tconst changedAttributes = {};\n\t\tconst blocks = [];\n\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\tblocks.push( block.clientId );\n\t\t\tconst image = block.attributes.id\n\t\t\t\t? imageData.find( ( { id } ) => id === block.attributes.id )\n\t\t\t\t: null;\n\t\t\tchangedAttributes[ block.clientId ] = getImageSizeAttributes(\n\t\t\t\timage,\n\t\t\t\tnewSizeSlug\n\t\t\t);\n\t\t} );\n\t\tupdateBlockAttributes( blocks, changedAttributes, {\n\t\t\tuniqueByBlock: true,\n\t\t} );\n\t\tconst imageSize = imageSizeOptions.find(\n\t\t\t( size ) => size.value === newSizeSlug\n\t\t);\n\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: image size settings */\n\t\t\t\t__( 'All gallery image sizes updated to: %s' ),\n\t\t\t\timageSize?.label ?? newSizeSlug\n\t\t\t),\n\t\t\t{\n\t\t\t\tid: 'gallery-attributes-sizeSlug',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Sets the Gallery's aspect ratio.\n\t *\n\t * The base value is added to the img element as an inline\n\t * style. A viewport value is instead rendered\n\t * from the Gallery's responsive CSS, which overrides that inline style.\n\t *\n\t * @param {string|undefined} value Aspect ratio to set. In a viewport state\n\t * `'auto'` is an override that cancels the\n\t * base ratio, while `undefined` removes the\n\t * override so the base value applies again.\n\t */\n\tfunction setAspectRatio( value ) {\n\t\tif ( isViewportStyleState ) {\n\t\t\tsetGallerySettings( { aspectRatio: value } );\n\t\t} else {\n\t\t\tconst cleanValue = ! value || value === 'auto' ? undefined : value;\n\t\t\tsetAttributes( { aspectRatio: value ?? 'auto' } );\n\n\t\t\t// Update all inner image blocks with the new aspect ratio\n\t\t\tconst changedAttributes = {};\n\t\t\tconst blocks = [];\n\n\t\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\t\tblocks.push( block.clientId );\n\t\t\t\tchangedAttributes[ block.clientId ] = {\n\t\t\t\t\taspectRatio: cleanValue,\n\t\t\t\t\tscale: cleanValue ? 'cover' : undefined,\n\t\t\t\t};\n\t\t\t} );\n\n\t\t\tupdateBlockAttributes( blocks, changedAttributes, true );\n\t\t}\n\n\t\tconst noticeValue = value ?? baseAspectRatio;\n\t\tconst aspectRatioText = aspectRatioOptions.find(\n\t\t\t( option ) => option.value === noticeValue\n\t\t);\n\t\tconst noticeText = isViewportStyleState\n\t\t\t? sprintf(\n\t\t\t\t\t/* translators: 1: viewport name, 2: aspect ratio setting */\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Gallery images in the %1$s viewport updated to aspect ratio: %2$s'\n\t\t\t\t\t),\n\t\t\t\t\tselectedStyleState.viewport.replace( '@', '' ),\n\t\t\t\t\taspectRatioText?.label || noticeValue\n\t\t\t\t)\n\t\t\t: sprintf(\n\t\t\t\t\t/* translators: %s: aspect ratio setting */\n\t\t\t\t\t__( 'All gallery images updated to aspect ratio: %s' ),\n\t\t\t\t\taspectRatioText?.label || noticeValue\n\t\t\t\t);\n\n\t\tcreateSuccessNotice( noticeText, {\n\t\t\tid: 'gallery-attributes-aspectRatio',\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\t// linkTo attribute must be saved so blocks don't break when changing image_default_link_type in options.php.\n\t\tif ( ! linkTo ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\tlinkTo:\n\t\t\t\t\twindow?.wp?.media?.view?.settings?.defaultProps?.link ||\n\t\t\t\t\tLINK_DESTINATION_NONE,\n\t\t\t} );\n\t\t}\n\t}, [ linkTo ] );\n\n\tconst hasImageIds = hasImages && images.some( ( image ) => !! image.id );\n\tconst imagesUploading = images.some(\n\t\t( img ) => ! img.id && img.url?.indexOf( 'blob:' ) === 0\n\t);\n\n\tconst mediaPlaceholderProps = {\n\t\taddToGallery: false,\n\t\tdisableMediaButtons: imagesUploading,\n\t\tvalue: {},\n\t};\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx(\n\t\t\tclassName,\n\t\t\t'has-nested-images',\n\t\t\t`wp-block-gallery-${ clientId }`,\n\t\t\t// In dynamic mode there are no inner blocks and the gallery isn't\n\t\t\t// rendered through the `Gallery` component, so the classes that\n\t\t\t// component normally composes onto the `<figure>` (see `gallery.jsx`)\n\t\t\t// must be added here to keep the preview's flex/crop layout matching\n\t\t\t// the static gallery and the frontend.\n\t\t\tisDynamic && [\n\t\t\t\tlayoutClassNames,\n\t\t\t\t'blocks-gallery-grid',\n\t\t\t\t{\n\t\t\t\t\t[ `align${ align }` ]: align,\n\t\t\t\t\t[ `columns-${ columns }` ]:\n\t\t\t\t\t\tisFlexLayout && columns !== undefined,\n\t\t\t\t\t'columns-default': isFlexLayout && columns === undefined,\n\t\t\t\t\t'is-cropped': isFlexLayout && imageCrop,\n\t\t\t\t},\n\t\t\t]\n\t\t),\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tdefaultBlock: DEFAULT_BLOCK,\n\t\tdirectInsert: true,\n\t\torientation: 'horizontal',\n\t\trenderAppender: false,\n\t\t// In dynamic mode nothing may be inserted: the images are resolved from\n\t\t// the source, not authored as inner blocks. `allowedBlocks: []` enforces\n\t\t// this in every context — unlike `templateLock: 'all'`, it isn't relaxed\n\t\t// to `contentOnly` by a content-locked ancestor — so it blocks insertion\n\t\t// and drag-and-drop (via `canInsertBlockType`). It's also what opts the\n\t\t// gallery out of the List View: a block that can't be inserted into and\n\t\t// has no inner blocks has nothing to navigate or add (see\n\t\t// `shouldRenderBlockListView`). This reaches the block's list settings\n\t\t// only while the inner blocks are mounted, which is why the dynamic view\n\t\t// still renders the (empty) inner blocks.\n\t\tallowedBlocks: isDynamic ? EMPTY_ARRAY : undefined,\n\t} );\n\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tif ( ! hasImages && ! isDynamic ) {\n\t\treturn (\n\t\t\t<div { ...innerBlocksProps }>\n\t\t\t\t{ innerBlocksProps.children }\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\ticon={ sharedIcon }\n\t\t\t\t\tlabels={ {\n\t\t\t\t\t\ttitle: __( 'Gallery' ),\n\t\t\t\t\t\tinstructions: PLACEHOLDER_TEXT,\n\t\t\t\t\t} }\n\t\t\t\t\tonSelect={ updateImages }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tmultiple\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t{ ...mediaPlaceholderProps }\n\t\t\t\t>\n\t\t\t\t\t{ /*\n\t\t\t\t\t * Entry into dynamic mode. Gated on the editing mode so it's\n\t\t\t\t\t * hidden in content-only editing (where this structural change\n\t\t\t\t\t * isn't allowed), but intentionally not hidden by\n\t\t\t\t\t * `canUseDynamicSource` the way the inspector is (see\n\t\t\t\t\t * `dynamic-gallery.jsx`): even with no\n\t\t\t\t\t * post type to preview against, the source still resolves at\n\t\t\t\t\t * render time via `get_the_ID()` (see `index.php`) — e.g. in a\n\t\t\t\t\t * template part or pattern shown on a singular page.\n\t\t\t\t\t */ }\n\t\t\t\t\t{ blockEditingMode === 'default' && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tonClick={ dynamic.enableDynamicMode }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ getDynamicSource( ATTACHED_MEDIA ).title }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t</MediaPlaceholder>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst hasLinkTo = linkTo && linkTo !== 'none';\n\t// Columns and crop to fit are Flex-only, so a Gallery in another layout has\n\t// viewport settings to show only when aspect ratios are available. Without\n\t// this the viewport Settings panel would render empty.\n\tconst hasViewportSettings = isFlexLayout || aspectRatioOptions.length > 1;\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls\n\t\t\t\tgroup={\n\t\t\t\t\tisViewportStyleState && hasViewportSettings\n\t\t\t\t\t\t? 'viewport'\n\t\t\t\t\t\t: 'default'\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ ! isViewportStyleState && (\n\t\t\t\t\t<GallerySourcePanel\n\t\t\t\t\t\tdynamic={ dynamic }\n\t\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t\t\thasImages={ hasImages }\n\t\t\t\t\t/>\n\t\t\t\t) }\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\tif ( isViewportStyleState ) {\n\t\t\t\t\t\t\tsetGallerySettings( {\n\t\t\t\t\t\t\t\tcolumns: undefined,\n\t\t\t\t\t\t\t\timageCrop: undefined,\n\t\t\t\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tnavigationButtonType: 'icon',\n\t\t\t\t\t\t\trandomOrder: false,\n\t\t\t\t\t\t\t...( isFlexLayout && {\n\t\t\t\t\t\t\t\tcolumns: undefined,\n\t\t\t\t\t\t\t\timageCrop: true,\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tsetAspectRatio( 'auto' );\n\n\t\t\t\t\t\tif ( sizeSlug !== DEFAULT_MEDIA_SIZE_SLUG ) {\n\t\t\t\t\t\t\tupdateImagesSize( DEFAULT_MEDIA_SIZE_SLUG );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( linkTarget ) {\n\t\t\t\t\t\t\ttoggleOpenInNewTab( false );\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{ isFlexLayout && displayedImageCount > 1 && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\tlabel={ __( 'Columns' ) }\n\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\tisViewportStyleState\n\t\t\t\t\t\t\t\t\t? hasViewportColumns\n\t\t\t\t\t\t\t\t\t: !! activeColumns &&\n\t\t\t\t\t\t\t\t\t\tactiveColumns !== displayedImageCount\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonDeselect={ () => setColumnsNumber( undefined ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RangeControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Columns' ) }\n\t\t\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\t\t\tactiveColumns\n\t\t\t\t\t\t\t\t\t\t? activeColumns\n\t\t\t\t\t\t\t\t\t\t: defaultColumnsNumber(\n\t\t\t\t\t\t\t\t\t\t\t\tdisplayedImageCount\n\t\t\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\tonChange={ setColumnsNumber }\n\t\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\t\tmax={ Math.min(\n\t\t\t\t\t\t\t\t\tMAX_COLUMNS,\n\t\t\t\t\t\t\t\t\tdisplayedImageCount\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! isViewportStyleState &&\n\t\t\t\t\t\timageSizeOptions?.length > 0 && (\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\tlabel={ __( 'Resolution' ) }\n\t\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\t\tsizeSlug !== DEFAULT_MEDIA_SIZE_SLUG\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tupdateImagesSize( DEFAULT_MEDIA_SIZE_SLUG )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<WCSelectControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Resolution' ) }\n\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t\t'Select the size of the source images.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tvalue={ sizeSlug }\n\t\t\t\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t\t\t\t\tonChange={ updateImagesSize }\n\t\t\t\t\t\t\t\t\thideCancelButton\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t) }\n\t\t\t\t\t{ isFlexLayout && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\tlabel={ __( 'Crop images to fit' ) }\n\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\tisViewportStyleState\n\t\t\t\t\t\t\t\t\t? hasViewportImageCrop\n\t\t\t\t\t\t\t\t\t: ! activeImageCrop\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetGallerySettings( {\n\t\t\t\t\t\t\t\t\timageCrop: isViewportStyleState\n\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t: true,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Crop images to fit' ) }\n\t\t\t\t\t\t\t\tchecked={ activeImageCrop }\n\t\t\t\t\t\t\t\tonChange={ toggleImageCrop }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! isViewportStyleState && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\tlabel={ __( 'Randomize order' ) }\n\t\t\t\t\t\t\thasValue={ () => !! randomOrder }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { randomOrder: false } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Randomize order' ) }\n\t\t\t\t\t\t\t\tchecked={ !! randomOrder }\n\t\t\t\t\t\t\t\tonChange={ toggleRandomOrder }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! isViewportStyleState && hasLinkTo && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\tlabel={ __( 'Open images in new tab' ) }\n\t\t\t\t\t\t\thasValue={ () => !! linkTarget }\n\t\t\t\t\t\t\tonDeselect={ () => toggleOpenInNewTab( false ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Open images in new tab' ) }\n\t\t\t\t\t\t\t\tchecked={ linkTarget === '_blank' }\n\t\t\t\t\t\t\t\tonChange={ toggleOpenInNewTab }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ aspectRatioOptions.length > 1 && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\tisViewportStyleState\n\t\t\t\t\t\t\t\t\t? hasViewportAspectRatio\n\t\t\t\t\t\t\t\t\t: activeAspectRatio !== 'auto'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t// In a viewport state this clears the override\n\t\t\t\t\t\t\t\t// so the base ratio applies again, rather than\n\t\t\t\t\t\t\t\t// overriding it with Original.\n\t\t\t\t\t\t\t\tsetAspectRatio(\n\t\t\t\t\t\t\t\t\tisViewportStyleState ? undefined : 'auto'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<WCSelectControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Set a consistent aspect ratio for all images in the gallery.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tvalue={ activeAspectRatio }\n\t\t\t\t\t\t\t\toptions={ aspectRatioOptions }\n\t\t\t\t\t\t\t\tonChange={ setAspectRatio }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! isViewportStyleState &&\n\t\t\t\t\t\tlightboxSetting?.allowEditing &&\n\t\t\t\t\t\thasLightboxImages && (\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tlabel={ __( 'Navigation button type' ) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\t\tnavigationButtonType !== 'icon'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tnavigationButtonType: 'icon',\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ToggleGroupControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Navigation button type' ) }\n\t\t\t\t\t\t\t\t\tvalue={ navigationButtonType }\n\t\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\tnavigationButtonType: value,\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\tisBlock\n\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t\t'Adjust the appearance of buttons in the lightbox.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ NAVIGATION_BUTTON_TYPE_OPTIONS.map(\n\t\t\t\t\t\t\t\t\t\t( option ) => (\n\t\t\t\t\t\t\t\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\t\t\t\t\t\t\t\tkey={ option.value }\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={ option.value }\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={ option.label }\n\t\t\t\t\t\t\t\t\t\t\t/>\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</ToggleGroupControl>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<ToolbarDropdownMenu icon={ linkIcon } label={ __( 'Link' ) }>\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t{ linkOptions.map( ( linkItem ) => {\n\t\t\t\t\t\t\t\tconst isOptionSelected =\n\t\t\t\t\t\t\t\t\tlinkTo === linkItem.value;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tkey={ linkItem.value }\n\t\t\t\t\t\t\t\t\t\tisSelected={ isOptionSelected }\n\t\t\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t\t\t'components-dropdown-menu__menu-item',\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t'is-active': isOptionSelected,\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\t\t\t\t\ticon={ linkItem.icon }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tsetLinkTo( linkItem.value );\n\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\tinfo={ linkItem.infoText }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ linkItem.label }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t) }\n\t\t\t\t</ToolbarDropdownMenu>\n\t\t\t</BlockControls>\n\t\t\t<>\n\t\t\t\t{ ! multiGallerySelection && ! isDynamic && (\n\t\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\t\t\tonSelect={ updateImages }\n\t\t\t\t\t\t\tname={ __( 'Add' ) }\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tmediaIds={ images\n\t\t\t\t\t\t\t\t.filter( ( image ) => image.id )\n\t\t\t\t\t\t\t\t.map( ( image ) => image.id ) }\n\t\t\t\t\t\t\taddToGallery={ hasImageIds }\n\t\t\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</BlockControls>\n\t\t\t\t) }\n\t\t\t\t<GalleryStyles\n\t\t\t\t\tstyle={ attributes.style }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisFlexLayout={ isFlexLayout }\n\t\t\t\t/>\n\t\t\t</>\n\t\t\t{ isDynamic ? (\n\t\t\t\t<GalleryDynamicView\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tdynamic={ dynamic }\n\t\t\t\t\tblockProps={ blockProps }\n\t\t\t\t\tinnerBlocksProps={ innerBlocksProps }\n\t\t\t\t\tmultiGallerySelection={ multiGallerySelection }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<Gallery\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tisContentLocked={ isContentLocked }\n\t\t\t\t\timages={ images }\n\t\t\t\t\tblockProps={ innerBlocksProps }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tmultiGallerySelection={ multiGallerySelection }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport {\n\tSelectControl as WCSelectControl,\n\tToggleControl,\n\tRangeControl,\n\tMenuGroup,\n\tMenuItem,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\tToolbarDropdownMenu,\n\tButton,\n} from '@wordpress/components';\nimport {\n\tstore as blockEditorStore,\n\tMediaPlaceholder,\n\tInspectorControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tuseBlockEditingMode,\n\tBlockControls,\n\tMediaReplaceFlow,\n\tuseSettings,\n} from '@wordpress/block-editor';\nimport { useEffect, useMemo, useRef, useState } from '@wordpress/element';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { createBlock } from '@wordpress/blocks';\nimport { createBlobURL } from '@wordpress/blob';\nimport { store as noticesStore } from '@wordpress/notices';\nimport {\n\tlink as linkIcon,\n\tcustomLink,\n\timage as imageIcon,\n\tlinkOff,\n\tfullscreen,\n} from '@wordpress/icons';\nimport { sharedIcon } from './shared-icon';\nimport {\n\tdefaultColumnsNumber,\n\tisGalleryFlexLayout,\n\tisObject,\n\tpickRelevantMediaFiles,\n} from './shared';\nimport { getHrefAndDestination } from './utils';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\nimport {\n\tgetUpdatedLinkTargetSettings,\n\tgetImageSizeAttributes,\n} from '../image/utils';\nimport Gallery from './gallery';\nimport {\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_MEDIA,\n\tLINK_DESTINATION_NONE,\n\tLINK_DESTINATION_LIGHTBOX,\n\tDEFAULT_MEDIA_SIZE_SLUG,\n\tMAX_COLUMNS,\n} from './constants';\nimport useImageSizes from './use-image-sizes';\nimport useGetNewImages from './use-get-new-images';\nimport useGetMedia from './use-get-media';\nimport GalleryStyles from './gallery-styles';\nimport useDynamicGallery from './use-dynamic-gallery';\nimport { GallerySourcePanel, GalleryDynamicView } from './dynamic-gallery';\nimport { SortImagesControl, SourceOrderControl } from './order-controls';\nimport {\n\tgetDynamicSource,\n\tATTACHED_MEDIA,\n\tDEFAULT_ORDERBY,\n\tDEFAULT_ORDER,\n} from './dynamic-source';\nimport { hasSortableImages, sortImageBlocks } from './order-images';\nimport {\n\tgetViewportGalleryStyle,\n\tgetUpdatedGalleryStyle,\n\tisValidGalleryColumns,\n} from './responsive-styles';\n\nconst LINK_OPTIONS = [\n\t{\n\t\ticon: customLink,\n\t\tlabel: __( 'Link images to attachment pages' ),\n\t\tvalue: LINK_DESTINATION_ATTACHMENT,\n\t\tnoticeText: __( 'Attachment Pages' ),\n\t},\n\t{\n\t\ticon: imageIcon,\n\t\tlabel: __( 'Link images to media files' ),\n\t\tvalue: LINK_DESTINATION_MEDIA,\n\t\tnoticeText: __( 'Media Files' ),\n\t},\n\t{\n\t\ticon: fullscreen,\n\t\tlabel: __( 'Enlarge on click' ),\n\t\tvalue: LINK_DESTINATION_LIGHTBOX,\n\t\tnoticeText: __( 'Lightbox effect' ),\n\t\tinfoText: __( 'Scale images with a lightbox effect' ),\n\t},\n\t{\n\t\ticon: linkOff,\n\t\tlabel: _x( 'None', 'Media item link option' ),\n\t\tvalue: LINK_DESTINATION_NONE,\n\t\tnoticeText: __( 'None' ),\n\t},\n];\nconst NAVIGATION_BUTTON_TYPE_OPTIONS = [\n\t{\n\t\tlabel: __( 'Icon' ),\n\t\tvalue: 'icon',\n\t},\n\t{\n\t\tlabel: __( 'Text' ),\n\t\tvalue: 'text',\n\t},\n\t{\n\t\tlabel: __( 'Both' ),\n\t\tvalue: 'both',\n\t},\n];\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\n\nconst PLACEHOLDER_TEXT = __(\n\t'Drag and drop images, upload, or choose from your library.'\n);\n\nconst DEFAULT_BLOCK = { name: 'core/image' };\nconst EMPTY_ARRAY = [];\n\nexport default function GalleryEdit( props ) {\n\tconst {\n\t\tsetAttributes,\n\t\tattributes,\n\t\tclassName,\n\t\tclientId,\n\t\tisSelected,\n\t\tinsertBlocksAfter,\n\t\tisContentLocked,\n\t\tcontext,\n\t\t__unstableLayoutClassNames: layoutClassNames,\n\t} = props;\n\n\tconst postId = context?.postId;\n\tconst postType = context?.postType;\n\n\t// Entering dynamic mode is a structural change (it discards inner blocks and\n\t// switches the block's mode), so the entry point is only offered when the\n\t// block is fully editable — mirroring the dynamic view's \"Edit images\"\n\t// toolbar control. Under a content lock the mode is `'contentOnly'`/\n\t// `'disabled'`, where structural affordances are hidden.\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst [ lightboxSetting, defaultRatios, themeRatios, showDefaultRatios ] =\n\t\tuseSettings(\n\t\t\t'blocks.core/image.lightbox',\n\t\t\t'dimensions.aspectRatios.default',\n\t\t\t'dimensions.aspectRatios.theme',\n\t\t\t'dimensions.defaultAspectRatios'\n\t\t);\n\n\tconst linkOptions = ! lightboxSetting?.allowEditing\n\t\t? LINK_OPTIONS.filter(\n\t\t\t\t( option ) => option.value !== LINK_DESTINATION_LIGHTBOX\n\t\t\t)\n\t\t: LINK_OPTIONS;\n\n\tconst {\n\t\talign,\n\t\tnavigationButtonType,\n\t\tcolumns,\n\t\timageCrop,\n\t\trandomOrder,\n\t\tlinkTarget,\n\t\tlinkTo,\n\t\tsizeSlug,\n\t\taspectRatio,\n\t\tlayout,\n\t} = attributes;\n\tconst isFlexLayout = isGalleryFlexLayout( layout );\n\tconst previousLayoutRef = useRef( layout );\n\n\tconst {\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\treplaceInnerBlocks,\n\t\tupdateBlockAttributes,\n\t\tselectBlock,\n\t} = useDispatch( blockEditorStore );\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tuseEffect( () => {\n\t\t// Variations replace the whole layout object. Carry Grid-only settings\n\t\t// across a layout type change so switching back restores them.\n\t\tconst previousLayout = previousLayoutRef.current;\n\t\tpreviousLayoutRef.current = layout;\n\n\t\tif (\n\t\t\t! isObject( previousLayout ) ||\n\t\t\t! isObject( layout ) ||\n\t\t\tpreviousLayout.type === layout.type\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextLayout = { ...layout };\n\t\tlet hasPreservedGridSetting = false;\n\n\t\tif (\n\t\t\t! Object.hasOwn( layout, 'columnCount' ) &&\n\t\t\tNumber.isInteger( previousLayout.columnCount ) &&\n\t\t\tpreviousLayout.columnCount > 0\n\t\t) {\n\t\t\tnextLayout.columnCount = previousLayout.columnCount;\n\t\t\thasPreservedGridSetting = true;\n\t\t}\n\n\t\tif (\n\t\t\t! Object.hasOwn( layout, 'minimumColumnWidth' ) &&\n\t\t\ttypeof previousLayout.minimumColumnWidth === 'string'\n\t\t) {\n\t\t\tnextLayout.minimumColumnWidth = previousLayout.minimumColumnWidth;\n\t\t\thasPreservedGridSetting = true;\n\t\t}\n\n\t\tif ( hasPreservedGridSetting ) {\n\t\t\tpreviousLayoutRef.current = nextLayout;\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( { layout: nextLayout } );\n\t\t}\n\t}, [ layout, setAttributes, __unstableMarkNextChangeAsNotPersistent ] );\n\n\tconst {\n\t\tgetBlock,\n\t\tgetSettings,\n\t\tinnerBlockImages,\n\t\tmultiGallerySelection,\n\t\tselectedStyleState,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockName,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\tgetSettings: _getSettings,\n\t\t\t\tgetBlock: _getBlock,\n\t\t\t\tgetSelectedBlockStyleState,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\n\t\t\treturn {\n\t\t\t\tgetBlock: _getBlock,\n\t\t\t\tgetSettings: _getSettings,\n\t\t\t\tinnerBlockImages:\n\t\t\t\t\t_getBlock( clientId )?.innerBlocks ?? EMPTY_ARRAY,\n\t\t\t\tmultiGallerySelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/gallery'\n\t\t\t\t\t),\n\t\t\t\tselectedStyleState: getSelectedBlockStyleState( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst isViewportStyleState =\n\t\tselectedStyleState?.viewport &&\n\t\tselectedStyleState.viewport !== 'default';\n\tconst viewportStyle = isViewportStyleState\n\t\t? getViewportGalleryStyle(\n\t\t\t\tattributes.style,\n\t\t\t\tselectedStyleState.viewport\n\t\t\t)\n\t\t: {};\n\tconst baseColumns = isValidGalleryColumns( columns ) ? columns : undefined;\n\tconst baseImageCrop = typeof imageCrop === 'boolean' ? imageCrop : true;\n\t// Normalized so a Gallery with no aspect ratio and one explicitly set to\n\t// Original compare equal, and a viewport override matching either is\n\t// dropped rather than stored.\n\tconst baseAspectRatio = aspectRatio || 'auto';\n\tconst hasViewportColumns =\n\t\tisViewportStyleState &&\n\t\tObject.hasOwn( viewportStyle, 'columns' ) &&\n\t\tisValidGalleryColumns( viewportStyle.columns );\n\tconst hasViewportImageCrop =\n\t\tisViewportStyleState &&\n\t\tObject.hasOwn( viewportStyle, 'imageCrop' ) &&\n\t\ttypeof viewportStyle.imageCrop === 'boolean';\n\tconst hasViewportAspectRatio =\n\t\tisViewportStyleState &&\n\t\tObject.hasOwn( viewportStyle, 'aspectRatio' ) &&\n\t\ttypeof viewportStyle.aspectRatio === 'string' &&\n\t\t!! viewportStyle.aspectRatio;\n\tconst activeColumns = hasViewportColumns\n\t\t? viewportStyle.columns\n\t\t: baseColumns;\n\tconst activeImageCrop = hasViewportImageCrop\n\t\t? viewportStyle.imageCrop\n\t\t: baseImageCrop;\n\tconst activeAspectRatio = hasViewportAspectRatio\n\t\t? viewportStyle.aspectRatio\n\t\t: baseAspectRatio;\n\n\tconst images = useMemo(\n\t\t() =>\n\t\t\tinnerBlockImages?.map( ( block ) => ( {\n\t\t\t\tclientId: block.clientId,\n\t\t\t\tid: block.attributes.id,\n\t\t\t\turl: block.attributes.url,\n\t\t\t\tattributes: block.attributes,\n\t\t\t\tfromSavedContent: Boolean( block.originalContent ),\n\t\t\t} ) ),\n\t\t[ innerBlockImages ]\n\t);\n\n\tconst imageData = useGetMedia( innerBlockImages );\n\n\tconst newImages = useGetNewImages( images, imageData );\n\n\tconst hasImages = !! images.length;\n\tconst isDynamic = !! attributes.dynamicContent;\n\n\t// The static \"Order by\" control shows the last sort applied from it, for as\n\t// long as the images stay in the sequence that sort produced. Any other\n\t// change to the images (a drag, an addition, a removal) drops it back to\n\t// \"Custom\"; it never reports an order the user didn't choose. Nothing is\n\t// stored, so this is local state rather than an attribute.\n\tconst [ appliedSort, setAppliedSort ] = useState( null );\n\tconst currentOrder =\n\t\tappliedSort &&\n\t\tappliedSort.clientIds.length === innerBlockImages.length &&\n\t\tappliedSort.clientIds.every(\n\t\t\t( id, index ) => innerBlockImages[ index ].clientId === id\n\t\t)\n\t\t\t? appliedSort.order\n\t\t\t: null;\n\tconst canSortImages = hasSortableImages( innerBlockImages, imageData );\n\n\t// Dynamic mode (resolving images from a source instead of inner blocks):\n\t// source resolution, the editor-preview blocks, and the mode/ordering\n\t// actions.\n\tconst dynamic = useDynamicGallery( {\n\t\tattributes,\n\t\tsetAttributes,\n\t\tclientId,\n\t\tpostId,\n\t\tpostType,\n\t} );\n\n\t// State that drives counts/size options should reflect the dynamic media\n\t// when the gallery is in dynamic mode.\n\tconst displayedImageCount = isDynamic\n\t\t? dynamic.dynamicMedia.length\n\t\t: images.length;\n\n\t// Check if there is at least one image with lightbox enabled. In dynamic\n\t// mode the images inherit the gallery's link setting, so the lightbox is on\n\t// when the gallery links images to the lightbox.\n\tlet hasLightboxImages;\n\tif ( isDynamic ) {\n\t\thasLightboxImages = linkTo === LINK_DESTINATION_LIGHTBOX;\n\t} else if ( lightboxSetting?.enabled ) {\n\t\thasLightboxImages =\n\t\t\timages.filter(\n\t\t\t\t( image ) =>\n\t\t\t\t\timage.attributes?.lightbox?.enabled === undefined ||\n\t\t\t\t\timage.attributes?.lightbox?.enabled === true\n\t\t\t).length > 0;\n\t} else {\n\t\thasLightboxImages =\n\t\t\timages.filter( ( image ) => image.attributes.lightbox?.enabled )\n\t\t\t\t.length > 0;\n\t}\n\n\tconst themeOptions = themeRatios?.map( ( { name, ratio } ) => ( {\n\t\tlabel: name,\n\t\tvalue: ratio,\n\t} ) );\n\tconst defaultOptions = defaultRatios?.map( ( { name, ratio } ) => ( {\n\t\tlabel: name,\n\t\tvalue: ratio,\n\t} ) );\n\tconst aspectRatioOptions = [\n\t\t{\n\t\t\tlabel: _x(\n\t\t\t\t'Original',\n\t\t\t\t'Aspect ratio option for dimensions control'\n\t\t\t),\n\t\t\tvalue: 'auto',\n\t\t},\n\t\t...( showDefaultRatios ? defaultOptions || [] : [] ),\n\t\t...( themeOptions || [] ),\n\t];\n\n\tuseEffect( () => {\n\t\tnewImages?.forEach( ( newImage ) => {\n\t\t\t// Update the images data without creating new undo levels.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes( newImage.clientId, {\n\t\t\t\t...buildImageAttributes( newImage.attributes ),\n\t\t\t\tid: newImage.id,\n\t\t\t\talign: undefined,\n\t\t\t} );\n\t\t} );\n\t}, [ newImages ] );\n\n\tconst imageSizeOptions = useImageSizes(\n\t\tisDynamic ? dynamic.dynamicMedia : imageData,\n\t\tisSelected,\n\t\tgetSettings\n\t);\n\n\t/**\n\t * Determines the image attributes that should be applied to an image block\n\t * after the gallery updates.\n\t *\n\t * The gallery will receive the full collection of images when a new image\n\t * is added. As a result we need to reapply the image's original settings if\n\t * it already existed in the gallery. If the image is in fact new, we need\n\t * to apply the gallery's current settings to the image.\n\t *\n\t * @param {Object} imageAttributes Media object for the actual image.\n\t * @return {Object} Attributes to set on the new image block.\n\t */\n\tfunction buildImageAttributes( imageAttributes ) {\n\t\tconst image = imageAttributes.id\n\t\t\t? imageData.find( ( { id } ) => id === imageAttributes.id )\n\t\t\t: null;\n\n\t\tlet newClassName;\n\t\tif ( imageAttributes.className && imageAttributes.className !== '' ) {\n\t\t\tnewClassName = imageAttributes.className;\n\t\t}\n\n\t\tlet newLinkTarget;\n\t\tif ( imageAttributes.linkTarget || imageAttributes.rel ) {\n\t\t\t// When transformed from image blocks, the link destination and rel attributes are inherited.\n\t\t\tnewLinkTarget = {\n\t\t\t\tlinkTarget: imageAttributes.linkTarget,\n\t\t\t\trel: imageAttributes.rel,\n\t\t\t};\n\t\t} else {\n\t\t\t// When an image is added, update the link destination and rel attributes according to the gallery settings\n\t\t\tnewLinkTarget = getUpdatedLinkTargetSettings(\n\t\t\t\tlinkTarget,\n\t\t\t\tattributes\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\t...pickRelevantMediaFiles( image, sizeSlug ),\n\t\t\t...getHrefAndDestination(\n\t\t\t\timage,\n\t\t\t\tlinkTo,\n\t\t\t\timageAttributes?.linkDestination\n\t\t\t),\n\t\t\t...newLinkTarget,\n\t\t\tclassName: newClassName,\n\t\t\tsizeSlug,\n\t\t\tcaption:\n\t\t\t\timageAttributes.caption.length > 0\n\t\t\t\t\t? imageAttributes.caption\n\t\t\t\t\t: image.caption?.raw,\n\t\t\talt: imageAttributes.alt || image.alt_text,\n\t\t\taspectRatio: aspectRatio === 'auto' ? undefined : aspectRatio,\n\t\t\tscale: aspectRatio && aspectRatio !== 'auto' ? 'cover' : undefined,\n\t\t};\n\t}\n\n\tfunction isValidFileType( file ) {\n\t\tconst mediaTypeSelector = file.type;\n\n\t\treturn (\n\t\t\tALLOWED_MEDIA_TYPES.some(\n\t\t\t\t( mediaType ) => mediaTypeSelector?.indexOf( mediaType ) === 0\n\t\t\t) || file.blob\n\t\t);\n\t}\n\n\tfunction updateImages( selectedImages ) {\n\t\tconst newFileUploads =\n\t\t\tObject.prototype.toString.call( selectedImages ) ===\n\t\t\t'[object FileList]';\n\n\t\tconst imageArray = newFileUploads\n\t\t\t? Array.from( selectedImages ).map( ( file ) => {\n\t\t\t\t\tif ( ! file.url ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tblob: createBlobURL( file ),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn file;\n\t\t\t\t} )\n\t\t\t: selectedImages;\n\n\t\tif ( ! imageArray.every( isValidFileType ) ) {\n\t\t\tcreateErrorNotice(\n\t\t\t\t__(\n\t\t\t\t\t'If uploading to a gallery all files need to be image formats'\n\t\t\t\t),\n\t\t\t\t{ id: 'gallery-upload-invalid-file', type: 'snackbar' }\n\t\t\t);\n\t\t}\n\n\t\tconst processedImages = imageArray\n\t\t\t.filter( ( file ) => file.url || isValidFileType( file ) )\n\t\t\t.map( ( file ) => {\n\t\t\t\tif ( ! file.url ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tblob: file.blob || createBlobURL( file ),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn file;\n\t\t\t} );\n\n\t\t// Because we are reusing existing innerImage blocks any reordering\n\t\t// done in the media library will be lost so we need to reapply that ordering\n\t\t// once the new image blocks are merged in with existing.\n\t\tconst newOrderMap = processedImages.reduce(\n\t\t\t( result, image, index ) => (\n\t\t\t\t( result[ image.id ] = index ),\n\t\t\t\tresult\n\t\t\t ),\n\t\t\t{}\n\t\t);\n\n\t\tconst existingImageBlocks = ! newFileUploads\n\t\t\t? innerBlockImages.filter( ( block ) =>\n\t\t\t\t\tprocessedImages.find(\n\t\t\t\t\t\t( img ) => img.id === block.attributes.id\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t: innerBlockImages;\n\n\t\tconst newImageList = processedImages.filter(\n\t\t\t( img ) =>\n\t\t\t\t! existingImageBlocks.find(\n\t\t\t\t\t( existingImg ) => img.id === existingImg.attributes.id\n\t\t\t\t)\n\t\t);\n\n\t\tconst newBlocks = newImageList.map( ( image ) => {\n\t\t\treturn createBlock( 'core/image', {\n\t\t\t\tid: image.id,\n\t\t\t\tblob: image.blob,\n\t\t\t\turl: image.url,\n\t\t\t\tcaption: image.caption,\n\t\t\t\talt: image.alt,\n\t\t\t} );\n\t\t} );\n\n\t\treplaceInnerBlocks(\n\t\t\tclientId,\n\t\t\texistingImageBlocks\n\t\t\t\t.concat( newBlocks )\n\t\t\t\t.sort(\n\t\t\t\t\t( a, b ) =>\n\t\t\t\t\t\tnewOrderMap[ a.attributes.id ] -\n\t\t\t\t\t\tnewOrderMap[ b.attributes.id ]\n\t\t\t\t)\n\t\t);\n\n\t\t// Select the first block to scroll into view when new blocks are added.\n\t\tif ( newBlocks?.length > 0 ) {\n\t\t\tselectBlock( newBlocks[ 0 ].clientId );\n\t\t}\n\t}\n\n\tfunction selectRandomOrder() {\n\t\tsetAttributes( { randomOrder: true } );\n\t}\n\n\t// Choosing any other order turns \"Random\" off. Called straight after the\n\t// edit that applies the order, and marked non-persistent so the two writes\n\t// share one undo level: a single undo restores both the order and Random.\n\tfunction clearRandomOrderAfterEdit() {\n\t\tif ( randomOrder ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( { randomOrder: false } );\n\t\t}\n\t}\n\n\t// Reorders the inner image blocks in place. Left persistent on purpose so\n\t// the sort is a single undoable step.\n\tfunction sortImages( order ) {\n\t\tconst sortedBlocks = sortImageBlocks(\n\t\t\tgetBlock( clientId ).innerBlocks,\n\t\t\timageData,\n\t\t\torder\n\t\t);\n\t\treplaceInnerBlocks( clientId, sortedBlocks );\n\t\tclearRandomOrderAfterEdit();\n\t\tsetAppliedSort( {\n\t\t\torder,\n\t\t\tclientIds: sortedBlocks.map( ( block ) => block.clientId ),\n\t\t} );\n\t}\n\n\t// \"Custom\" is the order arranged in the editor: it turns Random off and\n\t// forgets any sort applied earlier, so the control reads \"Custom\" from\n\t// here on rather than that sort.\n\tfunction selectCustomOrder() {\n\t\tsetAttributes( { randomOrder: false } );\n\t\tsetAppliedSort( null );\n\t}\n\n\tfunction changeSourceOrder( { orderby, order } ) {\n\t\tdynamic.setSourceOrder( orderby, order );\n\t\tclearRandomOrderAfterEdit();\n\t}\n\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t}\n\n\tfunction setLinkTo( value ) {\n\t\tsetAttributes( { linkTo: value } );\n\t\tconst changedAttributes = {};\n\t\tconst blocks = [];\n\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\tblocks.push( block.clientId );\n\t\t\tconst image = block.attributes.id\n\t\t\t\t? imageData.find( ( { id } ) => id === block.attributes.id )\n\t\t\t\t: null;\n\n\t\t\tchangedAttributes[ block.clientId ] = getHrefAndDestination(\n\t\t\t\timage,\n\t\t\t\tvalue,\n\t\t\t\tfalse,\n\t\t\t\tblock.attributes,\n\t\t\t\tlightboxSetting\n\t\t\t);\n\t\t} );\n\t\tupdateBlockAttributes( blocks, changedAttributes, {\n\t\t\tuniqueByBlock: true,\n\t\t} );\n\t\tconst linkToText = [ ...linkOptions ].find(\n\t\t\t( linkType ) => linkType.value === value\n\t\t);\n\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: image size settings */\n\t\t\t\t__( 'All gallery image links updated to: %s' ),\n\t\t\t\tlinkToText.noticeText\n\t\t\t),\n\t\t\t{\n\t\t\t\tid: 'gallery-attributes-linkTo',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t}\n\n\tfunction setGallerySettings( settings ) {\n\t\tif ( ! isViewportStyleState ) {\n\t\t\tsetAttributes( settings );\n\t\t\treturn;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\tstyle: getUpdatedGalleryStyle( {\n\t\t\t\tstyle: attributes.style,\n\t\t\t\tviewport: selectedStyleState.viewport,\n\t\t\t\tbaseSettings: {\n\t\t\t\t\tcolumns: baseColumns,\n\t\t\t\t\timageCrop: baseImageCrop,\n\t\t\t\t\taspectRatio: baseAspectRatio,\n\t\t\t\t},\n\t\t\t\tsettings,\n\t\t\t} ),\n\t\t} );\n\t}\n\n\tfunction setColumnsNumber( value ) {\n\t\tsetGallerySettings( { columns: value } );\n\t}\n\n\tfunction toggleImageCrop() {\n\t\tsetGallerySettings( { imageCrop: ! activeImageCrop } );\n\t}\n\n\tfunction toggleOpenInNewTab( openInNewTab ) {\n\t\tconst newLinkTarget = openInNewTab ? '_blank' : undefined;\n\t\tsetAttributes( { linkTarget: newLinkTarget } );\n\t\tconst changedAttributes = {};\n\t\tconst blocks = [];\n\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\tblocks.push( block.clientId );\n\t\t\tchangedAttributes[ block.clientId ] = getUpdatedLinkTargetSettings(\n\t\t\t\tnewLinkTarget,\n\t\t\t\tblock.attributes\n\t\t\t);\n\t\t} );\n\t\tupdateBlockAttributes( blocks, changedAttributes, {\n\t\t\tuniqueByBlock: true,\n\t\t} );\n\t\tconst noticeText = openInNewTab\n\t\t\t? __( 'All gallery images updated to open in new tab' )\n\t\t\t: __( 'All gallery images updated to not open in new tab' );\n\t\tcreateSuccessNotice( noticeText, {\n\t\t\tid: 'gallery-attributes-openInNewTab',\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t}\n\n\tfunction updateImagesSize( newSizeSlug ) {\n\t\tsetAttributes( { sizeSlug: newSizeSlug } );\n\t\tconst changedAttributes = {};\n\t\tconst blocks = [];\n\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\tblocks.push( block.clientId );\n\t\t\tconst image = block.attributes.id\n\t\t\t\t? imageData.find( ( { id } ) => id === block.attributes.id )\n\t\t\t\t: null;\n\t\t\tchangedAttributes[ block.clientId ] = getImageSizeAttributes(\n\t\t\t\timage,\n\t\t\t\tnewSizeSlug\n\t\t\t);\n\t\t} );\n\t\tupdateBlockAttributes( blocks, changedAttributes, {\n\t\t\tuniqueByBlock: true,\n\t\t} );\n\t\tconst imageSize = imageSizeOptions.find(\n\t\t\t( size ) => size.value === newSizeSlug\n\t\t);\n\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: image size settings */\n\t\t\t\t__( 'All gallery image sizes updated to: %s' ),\n\t\t\t\timageSize?.label ?? newSizeSlug\n\t\t\t),\n\t\t\t{\n\t\t\t\tid: 'gallery-attributes-sizeSlug',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Sets the Gallery's aspect ratio.\n\t *\n\t * The base value is added to the img element as an inline\n\t * style. A viewport value is instead rendered\n\t * from the Gallery's responsive CSS, which overrides that inline style.\n\t *\n\t * @param {string|undefined} value Aspect ratio to set. In a viewport state\n\t * `'auto'` is an override that cancels the\n\t * base ratio, while `undefined` removes the\n\t * override so the base value applies again.\n\t */\n\tfunction setAspectRatio( value ) {\n\t\tif ( isViewportStyleState ) {\n\t\t\tsetGallerySettings( { aspectRatio: value } );\n\t\t} else {\n\t\t\tconst cleanValue = ! value || value === 'auto' ? undefined : value;\n\t\t\tsetAttributes( { aspectRatio: value ?? 'auto' } );\n\n\t\t\t// Update all inner image blocks with the new aspect ratio\n\t\t\tconst changedAttributes = {};\n\t\t\tconst blocks = [];\n\n\t\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\t\tblocks.push( block.clientId );\n\t\t\t\tchangedAttributes[ block.clientId ] = {\n\t\t\t\t\taspectRatio: cleanValue,\n\t\t\t\t\tscale: cleanValue ? 'cover' : undefined,\n\t\t\t\t};\n\t\t\t} );\n\n\t\t\tupdateBlockAttributes( blocks, changedAttributes, true );\n\t\t}\n\n\t\tconst noticeValue = value ?? baseAspectRatio;\n\t\tconst aspectRatioText = aspectRatioOptions.find(\n\t\t\t( option ) => option.value === noticeValue\n\t\t);\n\t\tconst noticeText = isViewportStyleState\n\t\t\t? sprintf(\n\t\t\t\t\t/* translators: 1: viewport name, 2: aspect ratio setting */\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Gallery images in the %1$s viewport updated to aspect ratio: %2$s'\n\t\t\t\t\t),\n\t\t\t\t\tselectedStyleState.viewport.replace( '@', '' ),\n\t\t\t\t\taspectRatioText?.label || noticeValue\n\t\t\t\t)\n\t\t\t: sprintf(\n\t\t\t\t\t/* translators: %s: aspect ratio setting */\n\t\t\t\t\t__( 'All gallery images updated to aspect ratio: %s' ),\n\t\t\t\t\taspectRatioText?.label || noticeValue\n\t\t\t\t);\n\n\t\tcreateSuccessNotice( noticeText, {\n\t\t\tid: 'gallery-attributes-aspectRatio',\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\t// linkTo attribute must be saved so blocks don't break when changing image_default_link_type in options.php.\n\t\tif ( ! linkTo ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\tlinkTo:\n\t\t\t\t\twindow?.wp?.media?.view?.settings?.defaultProps?.link ||\n\t\t\t\t\tLINK_DESTINATION_NONE,\n\t\t\t} );\n\t\t}\n\t}, [ linkTo ] );\n\n\tconst hasImageIds = hasImages && images.some( ( image ) => !! image.id );\n\tconst imagesUploading = images.some(\n\t\t( img ) => ! img.id && img.url?.indexOf( 'blob:' ) === 0\n\t);\n\n\tconst mediaPlaceholderProps = {\n\t\taddToGallery: false,\n\t\tdisableMediaButtons: imagesUploading,\n\t\tvalue: {},\n\t};\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx(\n\t\t\tclassName,\n\t\t\t'has-nested-images',\n\t\t\t`wp-block-gallery-${ clientId }`,\n\t\t\t// In dynamic mode there are no inner blocks and the gallery isn't\n\t\t\t// rendered through the `Gallery` component, so the classes that\n\t\t\t// component normally composes onto the `<figure>` (see `gallery.jsx`)\n\t\t\t// must be added here to keep the preview's flex/crop layout matching\n\t\t\t// the static gallery and the frontend.\n\t\t\tisDynamic && [\n\t\t\t\tlayoutClassNames,\n\t\t\t\t'blocks-gallery-grid',\n\t\t\t\t{\n\t\t\t\t\t[ `align${ align }` ]: align,\n\t\t\t\t\t[ `columns-${ columns }` ]:\n\t\t\t\t\t\tisFlexLayout && columns !== undefined,\n\t\t\t\t\t'columns-default': isFlexLayout && columns === undefined,\n\t\t\t\t\t'is-cropped': isFlexLayout && imageCrop,\n\t\t\t\t},\n\t\t\t]\n\t\t),\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tdefaultBlock: DEFAULT_BLOCK,\n\t\tdirectInsert: true,\n\t\torientation: 'horizontal',\n\t\trenderAppender: false,\n\t\t// In dynamic mode nothing may be inserted: the images are resolved from\n\t\t// the source, not authored as inner blocks. `allowedBlocks: []` enforces\n\t\t// this in every context — unlike `templateLock: 'all'`, it isn't relaxed\n\t\t// to `contentOnly` by a content-locked ancestor — so it blocks insertion\n\t\t// and drag-and-drop (via `canInsertBlockType`). It's also what opts the\n\t\t// gallery out of the List View: a block that can't be inserted into and\n\t\t// has no inner blocks has nothing to navigate or add (see\n\t\t// `shouldRenderBlockListView`). This reaches the block's list settings\n\t\t// only while the inner blocks are mounted, which is why the dynamic view\n\t\t// still renders the (empty) inner blocks.\n\t\tallowedBlocks: isDynamic ? EMPTY_ARRAY : undefined,\n\t} );\n\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tif ( ! hasImages && ! isDynamic ) {\n\t\treturn (\n\t\t\t<div { ...innerBlocksProps }>\n\t\t\t\t{ innerBlocksProps.children }\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\ticon={ sharedIcon }\n\t\t\t\t\tlabels={ {\n\t\t\t\t\t\ttitle: __( 'Gallery' ),\n\t\t\t\t\t\tinstructions: PLACEHOLDER_TEXT,\n\t\t\t\t\t} }\n\t\t\t\t\tonSelect={ updateImages }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tmultiple\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t{ ...mediaPlaceholderProps }\n\t\t\t\t>\n\t\t\t\t\t{ /*\n\t\t\t\t\t * Entry into dynamic mode. Gated on the editing mode so it's\n\t\t\t\t\t * hidden in content-only editing (where this structural change\n\t\t\t\t\t * isn't allowed), but intentionally not hidden by\n\t\t\t\t\t * `canUseDynamicSource` the way the inspector is (see\n\t\t\t\t\t * `dynamic-gallery.jsx`): even with no\n\t\t\t\t\t * post type to preview against, the source still resolves at\n\t\t\t\t\t * render time via `get_the_ID()` (see `index.php`) — e.g. in a\n\t\t\t\t\t * template part or pattern shown on a singular page.\n\t\t\t\t\t */ }\n\t\t\t\t\t{ blockEditingMode === 'default' && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tonClick={ dynamic.enableDynamicMode }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ getDynamicSource( ATTACHED_MEDIA ).title }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t</MediaPlaceholder>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst hasLinkTo = linkTo && linkTo !== 'none';\n\t// Columns and crop to fit are Flex-only, so a Gallery in another layout has\n\t// viewport settings to show only when aspect ratios are available. Without\n\t// this the viewport Settings panel would render empty.\n\tconst hasViewportSettings = isFlexLayout || aspectRatioOptions.length > 1;\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls\n\t\t\t\tgroup={\n\t\t\t\t\tisViewportStyleState && hasViewportSettings\n\t\t\t\t\t\t? 'viewport'\n\t\t\t\t\t\t: 'default'\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ ! isViewportStyleState && (\n\t\t\t\t\t<GallerySourcePanel\n\t\t\t\t\t\tdynamic={ dynamic }\n\t\t\t\t\t\thasImages={ hasImages }\n\t\t\t\t\t/>\n\t\t\t\t) }\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\tif ( isViewportStyleState ) {\n\t\t\t\t\t\t\tsetGallerySettings( {\n\t\t\t\t\t\t\t\tcolumns: undefined,\n\t\t\t\t\t\t\t\timageCrop: undefined,\n\t\t\t\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tnavigationButtonType: 'icon',\n\t\t\t\t\t\t\trandomOrder: false,\n\t\t\t\t\t\t\t...( isFlexLayout && {\n\t\t\t\t\t\t\t\tcolumns: undefined,\n\t\t\t\t\t\t\t\timageCrop: true,\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tsetAspectRatio( 'auto' );\n\n\t\t\t\t\t\tif ( isDynamic ) {\n\t\t\t\t\t\t\tdynamic.setSourceOrder( undefined, undefined );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( sizeSlug !== DEFAULT_MEDIA_SIZE_SLUG ) {\n\t\t\t\t\t\t\tupdateImagesSize( DEFAULT_MEDIA_SIZE_SLUG );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( linkTarget ) {\n\t\t\t\t\t\t\ttoggleOpenInNewTab( false );\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{ isFlexLayout && displayedImageCount > 1 && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\tlabel={ __( 'Columns' ) }\n\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\tisViewportStyleState\n\t\t\t\t\t\t\t\t\t? hasViewportColumns\n\t\t\t\t\t\t\t\t\t: !! activeColumns &&\n\t\t\t\t\t\t\t\t\t\tactiveColumns !== displayedImageCount\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonDeselect={ () => setColumnsNumber( undefined ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RangeControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Columns' ) }\n\t\t\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\t\t\tactiveColumns\n\t\t\t\t\t\t\t\t\t\t? activeColumns\n\t\t\t\t\t\t\t\t\t\t: defaultColumnsNumber(\n\t\t\t\t\t\t\t\t\t\t\t\tdisplayedImageCount\n\t\t\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\tonChange={ setColumnsNumber }\n\t\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\t\tmax={ Math.min(\n\t\t\t\t\t\t\t\t\tMAX_COLUMNS,\n\t\t\t\t\t\t\t\t\tdisplayedImageCount\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! isViewportStyleState && (\n\t\t\t\t\t\t// \"Random\" is stored in both modes. Beyond that, a\n\t\t\t\t\t\t// dynamic gallery's order is a stored query setting,\n\t\t\t\t\t\t// while a static gallery's orders are one-off actions.\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\tlabel={ __( 'Order by' ) }\n\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\t!! randomOrder ||\n\t\t\t\t\t\t\t\t( isDynamic &&\n\t\t\t\t\t\t\t\t\t( dynamic.sourceOrderby !==\n\t\t\t\t\t\t\t\t\t\tDEFAULT_ORDERBY ||\n\t\t\t\t\t\t\t\t\t\tdynamic.sourceOrder !==\n\t\t\t\t\t\t\t\t\t\t\tDEFAULT_ORDER ) )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\t\tif ( isDynamic ) {\n\t\t\t\t\t\t\t\t\t// Two writes, folded into one undo level.\n\t\t\t\t\t\t\t\t\tdynamic.setSourceOrder(\n\t\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tclearRandomOrderAfterEdit();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tselectCustomOrder();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ isDynamic ? (\n\t\t\t\t\t\t\t\t<SourceOrderControl\n\t\t\t\t\t\t\t\t\torder={ {\n\t\t\t\t\t\t\t\t\t\torderby: dynamic.sourceOrderby,\n\t\t\t\t\t\t\t\t\t\torder: dynamic.sourceOrder,\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tisRandom={ !! randomOrder }\n\t\t\t\t\t\t\t\t\tonChange={ changeSourceOrder }\n\t\t\t\t\t\t\t\t\tonSelectRandom={ selectRandomOrder }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<SortImagesControl\n\t\t\t\t\t\t\t\t\tcurrentOrder={ currentOrder }\n\t\t\t\t\t\t\t\t\tisRandom={ !! randomOrder }\n\t\t\t\t\t\t\t\t\tcanSort={ canSortImages }\n\t\t\t\t\t\t\t\t\tonSort={ sortImages }\n\t\t\t\t\t\t\t\t\tonSelectCustom={ selectCustomOrder }\n\t\t\t\t\t\t\t\t\tonSelectRandom={ selectRandomOrder }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! isViewportStyleState &&\n\t\t\t\t\t\timageSizeOptions?.length > 0 && (\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\tlabel={ __( 'Resolution' ) }\n\t\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\t\tsizeSlug !== DEFAULT_MEDIA_SIZE_SLUG\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tupdateImagesSize( DEFAULT_MEDIA_SIZE_SLUG )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<WCSelectControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Resolution' ) }\n\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t\t'Select the size of the source images.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tvalue={ sizeSlug }\n\t\t\t\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t\t\t\t\tonChange={ updateImagesSize }\n\t\t\t\t\t\t\t\t\thideCancelButton\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t) }\n\t\t\t\t\t{ ! isViewportStyleState && hasLinkTo && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\tlabel={ __( 'Open images in new tab' ) }\n\t\t\t\t\t\t\thasValue={ () => !! linkTarget }\n\t\t\t\t\t\t\tonDeselect={ () => toggleOpenInNewTab( false ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Open images in new tab' ) }\n\t\t\t\t\t\t\t\tchecked={ linkTarget === '_blank' }\n\t\t\t\t\t\t\t\tonChange={ toggleOpenInNewTab }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ aspectRatioOptions.length > 1 && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\tisViewportStyleState\n\t\t\t\t\t\t\t\t\t? hasViewportAspectRatio\n\t\t\t\t\t\t\t\t\t: activeAspectRatio !== 'auto'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t// In a viewport state this clears the override\n\t\t\t\t\t\t\t\t// so the base ratio applies again, rather than\n\t\t\t\t\t\t\t\t// overriding it with Original.\n\t\t\t\t\t\t\t\tsetAspectRatio(\n\t\t\t\t\t\t\t\t\tisViewportStyleState ? undefined : 'auto'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<WCSelectControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t'Set a consistent aspect ratio for all images in the gallery.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tvalue={ activeAspectRatio }\n\t\t\t\t\t\t\t\toptions={ aspectRatioOptions }\n\t\t\t\t\t\t\t\tonChange={ setAspectRatio }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ isFlexLayout && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\tlabel={ __( 'Crop images to fit' ) }\n\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\tisViewportStyleState\n\t\t\t\t\t\t\t\t\t? hasViewportImageCrop\n\t\t\t\t\t\t\t\t\t: ! activeImageCrop\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetGallerySettings( {\n\t\t\t\t\t\t\t\t\timageCrop: isViewportStyleState\n\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t: true,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Crop images to fit' ) }\n\t\t\t\t\t\t\t\tchecked={ activeImageCrop }\n\t\t\t\t\t\t\t\tonChange={ toggleImageCrop }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t{ ! isViewportStyleState &&\n\t\t\t\t\t\tlightboxSetting?.allowEditing &&\n\t\t\t\t\t\thasLightboxImages && (\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\tlabel={ __( 'Navigation button type' ) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\t\tnavigationButtonType !== 'icon'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tnavigationButtonType: 'icon',\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ToggleGroupControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Navigation button type' ) }\n\t\t\t\t\t\t\t\t\tvalue={ navigationButtonType }\n\t\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\tnavigationButtonType: value,\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\tisBlock\n\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t\t'Adjust the appearance of buttons in the lightbox.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ NAVIGATION_BUTTON_TYPE_OPTIONS.map(\n\t\t\t\t\t\t\t\t\t\t( option ) => (\n\t\t\t\t\t\t\t\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\t\t\t\t\t\t\t\tkey={ option.value }\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={ option.value }\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={ option.label }\n\t\t\t\t\t\t\t\t\t\t\t/>\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</ToggleGroupControl>\n\t\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<ToolbarDropdownMenu icon={ linkIcon } label={ __( 'Link' ) }>\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t{ linkOptions.map( ( linkItem ) => {\n\t\t\t\t\t\t\t\tconst isOptionSelected =\n\t\t\t\t\t\t\t\t\tlinkTo === linkItem.value;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tkey={ linkItem.value }\n\t\t\t\t\t\t\t\t\t\tisSelected={ isOptionSelected }\n\t\t\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t\t\t'components-dropdown-menu__menu-item',\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t'is-active': isOptionSelected,\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\t\t\t\t\ticon={ linkItem.icon }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tsetLinkTo( linkItem.value );\n\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\tinfo={ linkItem.infoText }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ linkItem.label }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t) }\n\t\t\t\t</ToolbarDropdownMenu>\n\t\t\t</BlockControls>\n\t\t\t<>\n\t\t\t\t{ ! multiGallerySelection && ! isDynamic && (\n\t\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\t\thandleUpload={ false }\n\t\t\t\t\t\t\tonSelect={ updateImages }\n\t\t\t\t\t\t\tname={ __( 'Add' ) }\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tmediaIds={ images\n\t\t\t\t\t\t\t\t.filter( ( image ) => image.id )\n\t\t\t\t\t\t\t\t.map( ( image ) => image.id ) }\n\t\t\t\t\t\t\taddToGallery={ hasImageIds }\n\t\t\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</BlockControls>\n\t\t\t\t) }\n\t\t\t\t<GalleryStyles\n\t\t\t\t\tstyle={ attributes.style }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisFlexLayout={ isFlexLayout }\n\t\t\t\t/>\n\t\t\t</>\n\t\t\t{ isDynamic ? (\n\t\t\t\t<GalleryDynamicView\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tdynamic={ dynamic }\n\t\t\t\t\tblockProps={ blockProps }\n\t\t\t\t\tinnerBlocksProps={ innerBlocksProps }\n\t\t\t\t\tmultiGallerySelection={ multiGallerySelection }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<Gallery\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tisContentLocked={ isContentLocked }\n\t\t\t\t\timages={ images }\n\t\t\t\t\tblockProps={ innerBlocksProps }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tmultiGallerySelection={ multiGallerySelection }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_utils", "imageIcon", "blockEditorStore", "noticesStore", "useGetMedia", "useGetNewImages", "useDynamicGallery", "useImageSizes", "clsx", "ToolsPanel", "ToolsPanelItem", "WCSelectControl", "ToggleGroupControl", "ToggleGroupControlOption", "linkIcon", "GalleryStyles", "Gallery"]
7
7
  }
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/block-library/src/gallery/order-controls.tsx
21
+ var order_controls_exports = {};
22
+ __export(order_controls_exports, {
23
+ SortImagesControl: () => SortImagesControl,
24
+ SourceOrderControl: () => SourceOrderControl
25
+ });
26
+ module.exports = __toCommonJS(order_controls_exports);
27
+ var import_i18n = require("@wordpress/i18n");
28
+ var import_components = require("@wordpress/components");
29
+ var import_order_options = require("./order-options.cjs");
30
+ var import_jsx_runtime = require("react/jsx-runtime");
31
+ function getOrderHelp(isRandom) {
32
+ return isRandom ? (0, import_i18n.__)("Images are shown in a random order each time the page loads.") : void 0;
33
+ }
34
+ var SOURCE_ORDER_OPTIONS = [...import_order_options.ORDER_OPTIONS, import_order_options.RANDOM_OPTION];
35
+ function SourceOrderControl({
36
+ order,
37
+ isRandom,
38
+ onChange,
39
+ onSelectRandom
40
+ }) {
41
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
42
+ import_components.SelectControl,
43
+ {
44
+ label: (0, import_i18n.__)("Order by"),
45
+ value: isRandom ? import_order_options.RANDOM_ORDER : (0, import_order_options.toOrderValue)(order),
46
+ options: SOURCE_ORDER_OPTIONS,
47
+ help: getOrderHelp(isRandom),
48
+ onChange: (value) => {
49
+ if (value === import_order_options.RANDOM_ORDER) {
50
+ onSelectRandom();
51
+ return;
52
+ }
53
+ onChange((0, import_order_options.parseOrderValue)(value));
54
+ }
55
+ }
56
+ );
57
+ }
58
+ var CUSTOM_ORDER = "custom";
59
+ function SortImagesControl({
60
+ currentOrder,
61
+ isRandom,
62
+ canSort,
63
+ onSort,
64
+ onSelectCustom,
65
+ onSelectRandom
66
+ }) {
67
+ const options = [
68
+ { label: (0, import_i18n.__)("Custom"), value: CUSTOM_ORDER, disabled: !isRandom },
69
+ ...import_order_options.ORDER_OPTIONS.map((option) => ({
70
+ ...option,
71
+ disabled: !canSort
72
+ })),
73
+ import_order_options.RANDOM_OPTION
74
+ ];
75
+ let value = CUSTOM_ORDER;
76
+ if (isRandom) {
77
+ value = import_order_options.RANDOM_ORDER;
78
+ } else if (currentOrder) {
79
+ value = (0, import_order_options.toOrderValue)(currentOrder);
80
+ }
81
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
82
+ import_components.SelectControl,
83
+ {
84
+ label: (0, import_i18n.__)("Order by"),
85
+ value,
86
+ options,
87
+ help: getOrderHelp(isRandom),
88
+ onChange: (nextValue) => {
89
+ if (nextValue === import_order_options.RANDOM_ORDER) {
90
+ onSelectRandom();
91
+ return;
92
+ }
93
+ if (nextValue === CUSTOM_ORDER) {
94
+ onSelectCustom();
95
+ return;
96
+ }
97
+ onSort((0, import_order_options.parseOrderValue)(nextValue));
98
+ }
99
+ }
100
+ );
101
+ }
102
+ // Annotate the CommonJS export names for ESM import in node:
103
+ 0 && (module.exports = {
104
+ SortImagesControl,
105
+ SourceOrderControl
106
+ });
107
+ //# sourceMappingURL=order-controls.cjs.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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAmB;AACnB,wBAAiD;AACjD,2BAMO;AAwCL;AArCF,SAAS,aAAc,UAAwC;AAC9D,SAAO,eACJ,gBAAI,8DAA+D,IACnE;AACJ;AAEA,IAAM,uBAAuB,CAAE,GAAG,oCAAe,kCAAc;AAwBxD,SAAS,mBAAoB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAA6B;AAC5B,SACC;AAAA,IAAC,kBAAAA;AAAA,IAAA;AAAA,MACA,WAAQ,gBAAI,UAAW;AAAA,MACvB,OAAQ,WAAW,wCAAe,mCAAc,KAAM;AAAA,MACtD,SAAU;AAAA,MACV,MAAO,aAAc,QAAS;AAAA,MAC9B,UAAW,CAAE,UAAW;AACvB,YAAK,UAAU,mCAAe;AAC7B,yBAAe;AACf;AAAA,QACD;AACA,qBAAU,sCAAiB,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,WAAO,gBAAI,QAAS,GAAG,OAAO,cAAc,UAAU,CAAE,SAAS;AAAA,IACnE,GAAG,mCAAc,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,gBAAQ,mCAAc,YAAa;AAAA,EACpC;AAEA,SACC;AAAA,IAAC,kBAAAA;AAAA,IAAA;AAAA,MACA,WAAQ,gBAAI,UAAW;AAAA,MACvB;AAAA,MACA;AAAA,MACA,MAAO,aAAc,QAAS;AAAA,MAC9B,UAAW,CAAE,cAAe;AAC3B,YAAK,cAAc,mCAAe;AACjC,yBAAe;AACf;AAAA,QACD;AACA,YAAK,cAAc,cAAe;AACjC,yBAAe;AACf;AAAA,QACD;AACA,mBAAQ,sCAAiB,SAAU,CAAE;AAAA,MACtC;AAAA;AAAA,EACD;AAEF;",
6
+ "names": ["WCSelectControl"]
7
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/block-library/src/gallery/order-images.js
21
+ var order_images_exports = {};
22
+ __export(order_images_exports, {
23
+ hasSortableImages: () => hasSortableImages,
24
+ sortImageBlocks: () => sortImageBlocks
25
+ });
26
+ module.exports = __toCommonJS(order_images_exports);
27
+ function getSortKey(block, media, orderby) {
28
+ const { id } = block.attributes;
29
+ if (id === void 0) {
30
+ return void 0;
31
+ }
32
+ const record = media.find((item) => item.id === id);
33
+ if (!record) {
34
+ return void 0;
35
+ }
36
+ if (orderby === "title") {
37
+ return record.title?.raw ?? record.title?.rendered ?? "";
38
+ }
39
+ return record.date ?? "";
40
+ }
41
+ function hasSortableImages(blocks, media) {
42
+ const mediaIds = new Set(media.map((item) => item.id));
43
+ let sortableCount = 0;
44
+ for (const block of blocks) {
45
+ if (!mediaIds.has(block.attributes.id)) {
46
+ continue;
47
+ }
48
+ sortableCount++;
49
+ if (sortableCount > 1) {
50
+ return true;
51
+ }
52
+ }
53
+ return false;
54
+ }
55
+ function compareKeys(a, b, orderby) {
56
+ if (orderby === "title") {
57
+ return a.localeCompare(b, void 0, {
58
+ numeric: true,
59
+ sensitivity: "base"
60
+ });
61
+ }
62
+ if (a === b) {
63
+ return 0;
64
+ }
65
+ return a < b ? -1 : 1;
66
+ }
67
+ function sortImageBlocks(blocks, media, { orderby, order }) {
68
+ const direction = order === "desc" ? -1 : 1;
69
+ const keys = new Map(
70
+ blocks.map((block) => [
71
+ block,
72
+ getSortKey(block, media, orderby)
73
+ ])
74
+ );
75
+ return [...blocks].sort((a, b) => {
76
+ const keyA = keys.get(a);
77
+ const keyB = keys.get(b);
78
+ if (keyA === void 0 || keyB === void 0) {
79
+ if (keyA === keyB) {
80
+ return 0;
81
+ }
82
+ return keyA === void 0 ? 1 : -1;
83
+ }
84
+ return compareKeys(keyA, keyB, orderby) * direction;
85
+ });
86
+ }
87
+ // Annotate the CommonJS export names for ESM import in node:
88
+ 0 && (module.exports = {
89
+ hasSortableImages,
90
+ sortImageBlocks
91
+ });
92
+ //# sourceMappingURL=order-images.cjs.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": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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,62 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/block-library/src/gallery/order-options.ts
21
+ var order_options_exports = {};
22
+ __export(order_options_exports, {
23
+ ORDER_OPTIONS: () => ORDER_OPTIONS,
24
+ RANDOM_OPTION: () => RANDOM_OPTION,
25
+ RANDOM_ORDER: () => RANDOM_ORDER,
26
+ parseOrderValue: () => parseOrderValue,
27
+ toOrderValue: () => toOrderValue
28
+ });
29
+ module.exports = __toCommonJS(order_options_exports);
30
+ var import_i18n = require("@wordpress/i18n");
31
+ function toOrderValue(order) {
32
+ return `${order.orderby}/${order.order}`;
33
+ }
34
+ function parseOrderValue(value) {
35
+ const [orderby, order] = value.split("/");
36
+ return { orderby, order };
37
+ }
38
+ var ORDER_OPTIONS = [
39
+ { label: (0, import_i18n.__)("Newest to oldest"), value: "date/desc" },
40
+ { label: (0, import_i18n.__)("Oldest to newest"), value: "date/asc" },
41
+ {
42
+ /* translators: Label for ordering images by title in ascending order. */
43
+ label: (0, import_i18n.__)("A → Z"),
44
+ value: "title/asc"
45
+ },
46
+ {
47
+ /* translators: Label for ordering images by title in descending order. */
48
+ label: (0, import_i18n.__)("Z → A"),
49
+ value: "title/desc"
50
+ }
51
+ ];
52
+ var RANDOM_ORDER = "random";
53
+ var RANDOM_OPTION = { label: (0, import_i18n.__)("Random"), value: RANDOM_ORDER };
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ ORDER_OPTIONS,
57
+ RANDOM_OPTION,
58
+ RANDOM_ORDER,
59
+ parseOrderValue,
60
+ toOrderValue
61
+ });
62
+ //# sourceMappingURL=order-options.cjs.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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAmB;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,WAAO,gBAAI,kBAAmB,GAAG,OAAO,YAAY;AAAA,EACtD,EAAE,WAAO,gBAAI,kBAAmB,GAAG,OAAO,WAAW;AAAA,EACrD;AAAA;AAAA,IAEC,WAAO,gBAAI,OAAQ;AAAA,IACnB,OAAO;AAAA,EACR;AAAA,EACA;AAAA;AAAA,IAEC,WAAO,gBAAI,OAAQ;AAAA,IACnB,OAAO;AAAA,EACR;AACD;AASO,IAAM,eAAe;AACrB,IAAM,gBAAgB,EAAE,WAAO,gBAAI,QAAS,GAAG,OAAO,aAAa;",
6
+ "names": []
7
+ }
@@ -162,11 +162,6 @@ function useDynamicGallery({
162
162
  }
163
163
  setAttributes({ dynamicContent: nextSource });
164
164
  }
165
- function resetSource() {
166
- setAttributes({
167
- dynamicContent: { source: dynamicContent.source }
168
- });
169
- }
170
165
  return {
171
166
  dynamicContent,
172
167
  canUseDynamicSource,
@@ -181,8 +176,7 @@ function useDynamicGallery({
181
176
  galleryContext,
182
177
  enableDynamicMode,
183
178
  convertToStatic,
184
- setSourceOrder,
185
- resetSource
179
+ setSourceOrder
186
180
  };
187
181
  }
188
182
  //# sourceMappingURL=use-dynamic-gallery.cjs.map