@wordpress/block-library 11.0.0 → 11.0.2-next.v.202609171837.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 (434) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +7 -7
  3. package/build/archives/edit.cjs.map +3 -3
  4. package/build/audio/edit.cjs.map +3 -3
  5. package/build/avatar/hooks.cjs.map +2 -2
  6. package/build/button/edit.cjs.map +2 -2
  7. package/build/categories/edit.cjs.map +3 -3
  8. package/build/code/block.json +1 -0
  9. package/build/code/save.cjs.map +2 -2
  10. package/build/comment-template/hooks.cjs.map +2 -2
  11. package/build/cover/edit/index.cjs.map +2 -2
  12. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  13. package/build/cover/transforms.cjs.map +2 -2
  14. package/build/details/block.json +1 -0
  15. package/build/details/index.cjs.map +2 -2
  16. package/build/embed/embed-controls.cjs.map +2 -2
  17. package/build/file/deprecated.cjs.map +2 -2
  18. package/build/file/edit.cjs.map +2 -2
  19. package/build/file/inspector.cjs.map +3 -3
  20. package/build/file/save.cjs.map +2 -2
  21. package/build/footnotes/block.json +1 -0
  22. package/build/footnotes/edit.cjs.map +2 -2
  23. package/build/gallery/dynamic-gallery.cjs.map +3 -3
  24. package/build/gallery/edit.cjs +64 -37
  25. package/build/gallery/edit.cjs.map +3 -3
  26. package/build/gallery/{flex-styles.cjs → gallery-styles.cjs} +31 -32
  27. package/build/gallery/gallery-styles.cjs.map +7 -0
  28. package/build/gallery/responsive-styles.cjs +27 -5
  29. package/build/gallery/responsive-styles.cjs.map +2 -2
  30. package/build/heading/block.json +2 -0
  31. package/build/heading/index.cjs.map +2 -2
  32. package/build/html/modal.cjs +3 -6
  33. package/build/html/modal.cjs.map +2 -2
  34. package/build/image/edit.cjs.map +2 -2
  35. package/build/image/image.cjs.map +2 -2
  36. package/build/index.cjs.map +2 -2
  37. package/build/latest-comments/edit.cjs.map +3 -3
  38. package/build/latest-posts/edit.cjs.map +2 -2
  39. package/build/list/ordered-list-settings.cjs.map +3 -3
  40. package/build/list-item/hooks/use-enter.cjs.map +2 -2
  41. package/build/math/block.json +2 -0
  42. package/build/math/deprecated.cjs +29 -12
  43. package/build/math/deprecated.cjs.map +2 -2
  44. package/build/math/edit.cjs +67 -46
  45. package/build/math/edit.cjs.map +2 -2
  46. package/build/math/save.cjs +2 -2
  47. package/build/math/save.cjs.map +2 -2
  48. package/build/media-text/constants.cjs +3 -0
  49. package/build/media-text/constants.cjs.map +2 -2
  50. package/build/media-text/deprecated.cjs.map +2 -2
  51. package/build/media-text/edit.cjs +40 -0
  52. package/build/media-text/edit.cjs.map +3 -3
  53. package/build/media-text/image-fill.cjs.map +2 -2
  54. package/build/media-text/media-container.cjs +3 -3
  55. package/build/media-text/media-container.cjs.map +2 -2
  56. package/build/navigation/edit/index.cjs.map +2 -2
  57. package/build/navigation/edit/menu-inspector-controls.cjs.map +2 -2
  58. package/build/navigation/edit/overlay-template-part-selector.cjs.map +3 -3
  59. package/build/navigation/edit/responsive-wrapper.cjs.map +2 -2
  60. package/build/navigation/edit/use-generate-default-navigation-title.cjs.map +2 -2
  61. package/build/navigation/view.cjs +2 -2
  62. package/build/navigation/view.cjs.map +2 -2
  63. package/build/navigation-link/edit.cjs.map +2 -2
  64. package/build/navigation-link/shared/invalid-draft-display.cjs.map +2 -2
  65. package/build/navigation-submenu/edit.cjs.map +2 -2
  66. package/build/paragraph/block.json +1 -0
  67. package/build/paragraph/edit.cjs.map +2 -2
  68. package/build/paragraph/index.cjs +6 -0
  69. package/build/paragraph/index.cjs.map +3 -3
  70. package/build/playlist/edit.cjs +2 -1
  71. package/build/playlist/edit.cjs.map +3 -3
  72. package/build/post-author/edit.cjs.map +3 -3
  73. package/build/post-author-name/edit.cjs.map +2 -2
  74. package/build/post-content/block.json +1 -0
  75. package/build/post-date/edit.cjs.map +2 -2
  76. package/build/post-excerpt/block.json +1 -0
  77. package/build/post-excerpt/edit.cjs.map +2 -2
  78. package/build/post-featured-image/edit.cjs.map +2 -2
  79. package/build/post-navigation-link/edit.cjs.map +3 -3
  80. package/build/post-time-to-read/edit.cjs.map +2 -2
  81. package/build/pullquote/deprecated.cjs.map +2 -2
  82. package/build/query/deprecated.cjs.map +2 -2
  83. package/build/query/edit/inspector-controls/index.cjs.map +3 -3
  84. package/build/query/edit/inspector-controls/order-control.cjs.map +3 -3
  85. package/build/query/edit/inspector-controls/sticky-control.cjs.map +3 -3
  86. package/build/query/view.cjs.map +2 -2
  87. package/build/query-title/use-archive-label.cjs.map +2 -2
  88. package/build/quote/deprecated.cjs.map +2 -2
  89. package/build/quote/transforms.cjs.map +2 -2
  90. package/build/search/edit.cjs.map +3 -3
  91. package/build/separator/edit.cjs.map +3 -3
  92. package/build/social-links/edit.cjs.map +3 -3
  93. package/build/table/state.cjs.map +2 -2
  94. package/build/table-of-contents/edit.cjs.map +3 -3
  95. package/build/table-of-contents/utils.cjs.map +2 -2
  96. package/build/tabs/use-tab-actions.cjs.map +2 -2
  97. package/build/tag-cloud/edit.cjs.map +3 -3
  98. package/build/template-part/edit/advanced-controls.cjs.map +3 -3
  99. package/build/template-part/edit/import-controls.cjs.map +3 -3
  100. package/build/template-part/edit/index.cjs.map +2 -2
  101. package/build/template-part/edit/inner-blocks.cjs.map +2 -2
  102. package/build/template-part/edit/placeholder.cjs.map +2 -2
  103. package/build/term-count/use-term-count.cjs.map +2 -2
  104. package/build/term-description/use-term-description.cjs.map +2 -2
  105. package/build/term-name/use-term-name.cjs.map +2 -2
  106. package/build/terms-query/edit/inspector-controls/index.cjs.map +2 -2
  107. package/build/terms-query/edit/inspector-controls/inherit-control.cjs.map +2 -2
  108. package/build/terms-query/edit/inspector-controls/order-control.cjs.map +3 -3
  109. package/build/terms-query/edit/inspector-controls/taxonomy-control.cjs.map +3 -3
  110. package/build/utils/hooks.cjs.map +2 -2
  111. package/build/utils/media-control.cjs +5 -1
  112. package/build/utils/media-control.cjs.map +2 -2
  113. package/build/utils/poster-image.cjs.map +2 -2
  114. package/build/verse/block.json +1 -0
  115. package/build/video/edit-common-settings.cjs.map +3 -3
  116. package/build/video/tracks-editor.cjs.map +3 -3
  117. package/build-module/archives/edit.mjs +2 -2
  118. package/build-module/archives/edit.mjs.map +2 -2
  119. package/build-module/audio/edit.mjs +2 -2
  120. package/build-module/audio/edit.mjs.map +2 -2
  121. package/build-module/avatar/hooks.mjs.map +2 -2
  122. package/build-module/button/edit.mjs.map +2 -2
  123. package/build-module/categories/edit.mjs +2 -2
  124. package/build-module/categories/edit.mjs.map +2 -2
  125. package/build-module/code/block.json +1 -0
  126. package/build-module/code/save.mjs.map +2 -2
  127. package/build-module/comment-template/hooks.mjs.map +2 -2
  128. package/build-module/cover/edit/index.mjs.map +2 -2
  129. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  130. package/build-module/cover/transforms.mjs.map +2 -2
  131. package/build-module/details/block.json +1 -0
  132. package/build-module/details/index.mjs.map +2 -2
  133. package/build-module/embed/embed-controls.mjs.map +2 -2
  134. package/build-module/file/deprecated.mjs.map +2 -2
  135. package/build-module/file/edit.mjs.map +2 -2
  136. package/build-module/file/inspector.mjs +2 -2
  137. package/build-module/file/inspector.mjs.map +2 -2
  138. package/build-module/file/save.mjs.map +2 -2
  139. package/build-module/footnotes/block.json +1 -0
  140. package/build-module/footnotes/edit.mjs.map +2 -2
  141. package/build-module/gallery/dynamic-gallery.mjs +2 -2
  142. package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
  143. package/build-module/gallery/edit.mjs +67 -40
  144. package/build-module/gallery/edit.mjs.map +2 -2
  145. package/build-module/gallery/{flex-styles.mjs → gallery-styles.mjs} +29 -30
  146. package/build-module/gallery/gallery-styles.mjs.map +7 -0
  147. package/build-module/gallery/responsive-styles.mjs +25 -4
  148. package/build-module/gallery/responsive-styles.mjs.map +2 -2
  149. package/build-module/heading/block.json +2 -0
  150. package/build-module/heading/index.mjs.map +2 -2
  151. package/build-module/html/modal.mjs +3 -6
  152. package/build-module/html/modal.mjs.map +2 -2
  153. package/build-module/image/edit.mjs.map +2 -2
  154. package/build-module/image/image.mjs.map +2 -2
  155. package/build-module/index.mjs.map +2 -2
  156. package/build-module/latest-comments/edit.mjs +2 -2
  157. package/build-module/latest-comments/edit.mjs.map +2 -2
  158. package/build-module/latest-posts/edit.mjs.map +2 -2
  159. package/build-module/list/ordered-list-settings.mjs +2 -2
  160. package/build-module/list/ordered-list-settings.mjs.map +2 -2
  161. package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
  162. package/build-module/math/block.json +2 -0
  163. package/build-module/math/deprecated.mjs +29 -12
  164. package/build-module/math/deprecated.mjs.map +2 -2
  165. package/build-module/math/edit.mjs +68 -47
  166. package/build-module/math/edit.mjs.map +2 -2
  167. package/build-module/math/save.mjs +2 -2
  168. package/build-module/math/save.mjs.map +2 -2
  169. package/build-module/media-text/constants.mjs +2 -0
  170. package/build-module/media-text/constants.mjs.map +2 -2
  171. package/build-module/media-text/deprecated.mjs.map +2 -2
  172. package/build-module/media-text/edit.mjs +42 -1
  173. package/build-module/media-text/edit.mjs.map +2 -2
  174. package/build-module/media-text/image-fill.mjs.map +2 -2
  175. package/build-module/media-text/media-container.mjs +1 -1
  176. package/build-module/media-text/media-container.mjs.map +2 -2
  177. package/build-module/navigation/edit/index.mjs.map +2 -2
  178. package/build-module/navigation/edit/menu-inspector-controls.mjs.map +2 -2
  179. package/build-module/navigation/edit/overlay-template-part-selector.mjs +2 -2
  180. package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +2 -2
  181. package/build-module/navigation/edit/responsive-wrapper.mjs.map +2 -2
  182. package/build-module/navigation/edit/use-generate-default-navigation-title.mjs.map +2 -2
  183. package/build-module/navigation/view.mjs +2 -2
  184. package/build-module/navigation/view.mjs.map +2 -2
  185. package/build-module/navigation-link/edit.mjs.map +2 -2
  186. package/build-module/navigation-link/shared/invalid-draft-display.mjs.map +2 -2
  187. package/build-module/navigation-submenu/edit.mjs.map +2 -2
  188. package/build-module/paragraph/block.json +1 -0
  189. package/build-module/paragraph/edit.mjs.map +2 -2
  190. package/build-module/paragraph/index.mjs +6 -0
  191. package/build-module/paragraph/index.mjs.map +2 -2
  192. package/build-module/playlist/edit.mjs +5 -4
  193. package/build-module/playlist/edit.mjs.map +2 -2
  194. package/build-module/post-author/edit.mjs +2 -2
  195. package/build-module/post-author/edit.mjs.map +2 -2
  196. package/build-module/post-author-name/edit.mjs.map +2 -2
  197. package/build-module/post-content/block.json +1 -0
  198. package/build-module/post-date/edit.mjs.map +2 -2
  199. package/build-module/post-excerpt/block.json +1 -0
  200. package/build-module/post-excerpt/edit.mjs.map +2 -2
  201. package/build-module/post-featured-image/edit.mjs.map +2 -2
  202. package/build-module/post-navigation-link/edit.mjs +2 -2
  203. package/build-module/post-navigation-link/edit.mjs.map +2 -2
  204. package/build-module/post-time-to-read/edit.mjs.map +2 -2
  205. package/build-module/pullquote/deprecated.mjs.map +2 -2
  206. package/build-module/query/deprecated.mjs.map +2 -2
  207. package/build-module/query/edit/inspector-controls/index.mjs +2 -2
  208. package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
  209. package/build-module/query/edit/inspector-controls/order-control.mjs +2 -2
  210. package/build-module/query/edit/inspector-controls/order-control.mjs.map +2 -2
  211. package/build-module/query/edit/inspector-controls/sticky-control.mjs +2 -2
  212. package/build-module/query/edit/inspector-controls/sticky-control.mjs.map +2 -2
  213. package/build-module/query/view.mjs.map +2 -2
  214. package/build-module/query-title/use-archive-label.mjs.map +2 -2
  215. package/build-module/quote/deprecated.mjs.map +2 -2
  216. package/build-module/quote/transforms.mjs.map +2 -2
  217. package/build-module/search/edit.mjs +3 -3
  218. package/build-module/search/edit.mjs.map +2 -2
  219. package/build-module/separator/edit.mjs +5 -2
  220. package/build-module/separator/edit.mjs.map +2 -2
  221. package/build-module/social-links/edit.mjs +2 -2
  222. package/build-module/social-links/edit.mjs.map +2 -2
  223. package/build-module/table/state.mjs.map +2 -2
  224. package/build-module/table-of-contents/edit.mjs +2 -2
  225. package/build-module/table-of-contents/edit.mjs.map +2 -2
  226. package/build-module/table-of-contents/utils.mjs.map +2 -2
  227. package/build-module/tabs/use-tab-actions.mjs.map +2 -2
  228. package/build-module/tag-cloud/edit.mjs +2 -2
  229. package/build-module/tag-cloud/edit.mjs.map +2 -2
  230. package/build-module/template-part/edit/advanced-controls.mjs +5 -2
  231. package/build-module/template-part/edit/advanced-controls.mjs.map +2 -2
  232. package/build-module/template-part/edit/import-controls.mjs +2 -2
  233. package/build-module/template-part/edit/import-controls.mjs.map +2 -2
  234. package/build-module/template-part/edit/index.mjs.map +2 -2
  235. package/build-module/template-part/edit/inner-blocks.mjs.map +2 -2
  236. package/build-module/template-part/edit/placeholder.mjs.map +2 -2
  237. package/build-module/term-count/use-term-count.mjs.map +2 -2
  238. package/build-module/term-description/use-term-description.mjs.map +2 -2
  239. package/build-module/term-name/use-term-name.mjs.map +2 -2
  240. package/build-module/terms-query/edit/inspector-controls/index.mjs.map +2 -2
  241. package/build-module/terms-query/edit/inspector-controls/inherit-control.mjs.map +2 -2
  242. package/build-module/terms-query/edit/inspector-controls/order-control.mjs +2 -2
  243. package/build-module/terms-query/edit/inspector-controls/order-control.mjs.map +2 -2
  244. package/build-module/terms-query/edit/inspector-controls/taxonomy-control.mjs +2 -2
  245. package/build-module/terms-query/edit/inspector-controls/taxonomy-control.mjs.map +2 -2
  246. package/build-module/utils/hooks.mjs.map +2 -2
  247. package/build-module/utils/media-control.mjs +5 -1
  248. package/build-module/utils/media-control.mjs.map +2 -2
  249. package/build-module/utils/poster-image.mjs.map +2 -2
  250. package/build-module/verse/block.json +1 -0
  251. package/build-module/video/edit-common-settings.mjs +2 -2
  252. package/build-module/video/edit-common-settings.mjs.map +2 -2
  253. package/build-module/video/tracks-editor.mjs +2 -2
  254. package/build-module/video/tracks-editor.mjs.map +2 -2
  255. package/build-style/button/style-rtl.css +2 -1
  256. package/build-style/button/style.css +2 -1
  257. package/build-style/columns/style-rtl.css +1 -1
  258. package/build-style/columns/style.css +1 -1
  259. package/build-style/comments/editor-rtl.css +1 -1
  260. package/build-style/comments/editor.css +1 -1
  261. package/build-style/comments/style-rtl.css +1 -1
  262. package/build-style/comments/style.css +1 -1
  263. package/build-style/common-rtl.css +1 -1
  264. package/build-style/common.css +1 -1
  265. package/build-style/cover/style-rtl.css +6 -0
  266. package/build-style/cover/style.css +6 -0
  267. package/build-style/editor-rtl.css +9 -5
  268. package/build-style/editor.css +9 -5
  269. package/build-style/embed/editor-rtl.css +2 -1
  270. package/build-style/embed/editor.css +2 -1
  271. package/build-style/gallery/style-rtl.css +1 -2
  272. package/build-style/gallery/style.css +1 -2
  273. package/build-style/image/style-rtl.css +6 -9
  274. package/build-style/image/style.css +6 -9
  275. package/build-style/math/editor-rtl.css +5 -0
  276. package/build-style/math/editor.css +5 -0
  277. package/build-style/navigation/editor-rtl.css +1 -0
  278. package/build-style/navigation/editor.css +1 -0
  279. package/build-style/navigation/style-rtl.css +1 -1
  280. package/build-style/navigation/style.css +1 -1
  281. package/build-style/post-title/style-rtl.css +2 -2
  282. package/build-style/post-title/style.css +2 -2
  283. package/build-style/query-pagination/editor-rtl.css +0 -3
  284. package/build-style/query-pagination/editor.css +0 -3
  285. package/build-style/search/theme-rtl.css +1 -1
  286. package/build-style/search/theme.css +1 -1
  287. package/build-style/style-rtl.css +23 -19
  288. package/build-style/style.css +23 -19
  289. package/build-style/theme-rtl.css +1 -1
  290. package/build-style/theme.css +1 -1
  291. package/build-style/verse/style-rtl.css +2 -1
  292. package/build-style/verse/style.css +2 -1
  293. package/package.json +40 -40
  294. package/src/archives/edit.jsx +2 -2
  295. package/src/audio/edit.jsx +2 -2
  296. package/src/avatar/hooks.js +2 -2
  297. package/src/button/edit.jsx +1 -1
  298. package/src/button/style.scss +2 -2
  299. package/src/calendar/index.php +1 -1
  300. package/src/categories/edit.jsx +2 -2
  301. package/src/code/README.md +1 -0
  302. package/src/code/block.json +1 -0
  303. package/src/code/save.jsx +1 -1
  304. package/src/columns/style.scss +2 -3
  305. package/src/comment-template/hooks.js +1 -1
  306. package/src/comments/style.scss +1 -1
  307. package/src/common.scss +1 -2
  308. package/src/cover/edit/index.jsx +2 -2
  309. package/src/cover/edit/inspector-controls.jsx +2 -2
  310. package/src/cover/style.scss +10 -0
  311. package/src/cover/test/{edit.jsdom.test.js → edit.browser.test.js} +104 -145
  312. package/src/cover/transforms.js +3 -3
  313. package/src/details/README.md +1 -0
  314. package/src/details/block.json +1 -0
  315. package/src/details/index.js +1 -1
  316. package/src/embed/editor.scss +2 -2
  317. package/src/embed/embed-controls.jsx +2 -2
  318. package/src/file/deprecated.jsx +3 -3
  319. package/src/file/edit.jsx +5 -3
  320. package/src/file/inspector.jsx +3 -3
  321. package/src/file/save.jsx +2 -2
  322. package/src/footnotes/README.md +1 -0
  323. package/src/footnotes/block.json +1 -0
  324. package/src/footnotes/edit.jsx +1 -1
  325. package/src/gallery/dynamic-gallery.jsx +4 -4
  326. package/src/gallery/edit.jsx +121 -68
  327. package/src/gallery/gallery-styles.js +117 -0
  328. package/src/gallery/index.php +181 -67
  329. package/src/gallery/responsive-styles.js +59 -5
  330. package/src/gallery/test/edit.jsdom.test.js +71 -3
  331. package/src/gallery/test/responsive-styles.js +59 -5
  332. package/src/heading/README.md +2 -0
  333. package/src/heading/block.json +2 -0
  334. package/src/heading/index.js +2 -2
  335. package/src/html/modal.jsx +0 -3
  336. package/src/image/edit.jsx +1 -1
  337. package/src/image/image.jsx +7 -7
  338. package/src/image/index.php +10 -4
  339. package/src/image/style.scss +1 -0
  340. package/src/image/test/use-open-image-media-editor-modal.jsdom.test.js +1 -1
  341. package/src/index.jsx +1 -1
  342. package/src/latest-comments/edit.jsx +2 -2
  343. package/src/latest-posts/edit.jsx +1 -1
  344. package/src/list/ordered-list-settings.jsx +2 -2
  345. package/src/list-item/hooks/use-enter.js +1 -1
  346. package/src/math/README.md +2 -2
  347. package/src/math/block.json +2 -0
  348. package/src/math/deprecated.jsx +38 -12
  349. package/src/math/edit.jsx +49 -20
  350. package/src/math/editor.scss +5 -0
  351. package/src/math/save.jsx +20 -4
  352. package/src/media-text/constants.js +1 -0
  353. package/src/media-text/deprecated.jsx +3 -3
  354. package/src/media-text/edit.jsx +48 -3
  355. package/src/media-text/image-fill.js +2 -2
  356. package/src/media-text/media-container.jsx +1 -1
  357. package/src/navigation/edit/index.jsx +1 -1
  358. package/src/navigation/edit/menu-inspector-controls.jsx +2 -2
  359. package/src/navigation/edit/overlay-template-part-selector.jsx +3 -3
  360. package/src/navigation/edit/responsive-wrapper.jsx +1 -1
  361. package/src/navigation/edit/use-generate-default-navigation-title.js +2 -2
  362. package/src/navigation/editor.scss +1 -0
  363. package/src/navigation/index.php +12 -0
  364. package/src/navigation/style.scss +1 -1
  365. package/src/navigation/test/use-navigation-menu.jsdom.test.js +6 -28
  366. package/src/navigation/test/view.jsdom.test.js +23 -0
  367. package/src/navigation/view.js +9 -6
  368. package/src/navigation-link/edit.jsx +1 -1
  369. package/src/navigation-link/shared/invalid-draft-display.jsx +2 -2
  370. package/src/navigation-link/test/__snapshots__/hooks.jsdom.test.js.snap +41 -11
  371. package/src/navigation-submenu/edit.jsx +1 -1
  372. package/src/paragraph/README.md +1 -0
  373. package/src/paragraph/block.json +1 -0
  374. package/src/paragraph/edit.jsx +1 -1
  375. package/src/paragraph/index.js +7 -0
  376. package/src/pattern/index.php +2 -2
  377. package/src/playlist/edit.jsx +6 -4
  378. package/src/playlist-track/test/edit.jsdom.test.jsx +2 -3
  379. package/src/post-author/edit.jsx +2 -2
  380. package/src/post-author-name/edit.jsx +1 -1
  381. package/src/post-content/README.md +1 -0
  382. package/src/post-content/block.json +1 -0
  383. package/src/post-date/edit.jsx +2 -2
  384. package/src/post-excerpt/README.md +1 -0
  385. package/src/post-excerpt/block.json +1 -0
  386. package/src/post-excerpt/edit.jsx +1 -1
  387. package/src/post-featured-image/edit.jsx +2 -2
  388. package/src/post-navigation-link/edit.jsx +4 -4
  389. package/src/post-time-to-read/edit.jsx +2 -2
  390. package/src/post-title/style.scss +2 -3
  391. package/src/pullquote/deprecated.jsx +1 -1
  392. package/src/query/deprecated.jsx +1 -1
  393. package/src/query/edit/inspector-controls/index.jsx +4 -4
  394. package/src/query/edit/inspector-controls/order-control.jsx +2 -2
  395. package/src/query/edit/inspector-controls/sticky-control.jsx +2 -2
  396. package/src/query/view.js +6 -9
  397. package/src/query-pagination/editor.scss +0 -3
  398. package/src/query-title/use-archive-label.js +1 -1
  399. package/src/quote/deprecated.jsx +2 -2
  400. package/src/quote/transforms.js +3 -3
  401. package/src/search/edit.jsx +6 -6
  402. package/src/search/theme.scss +1 -1
  403. package/src/separator/edit.jsx +7 -4
  404. package/src/social-links/edit.jsx +2 -2
  405. package/src/table/state.js +1 -1
  406. package/src/table-of-contents/edit.jsx +6 -6
  407. package/src/table-of-contents/utils.ts +2 -2
  408. package/src/tabs/use-tab-actions.js +1 -1
  409. package/src/tag-cloud/edit.jsx +2 -2
  410. package/src/template-part/edit/advanced-controls.jsx +5 -2
  411. package/src/template-part/edit/import-controls.jsx +2 -2
  412. package/src/template-part/edit/index.jsx +2 -2
  413. package/src/template-part/edit/inner-blocks.jsx +1 -1
  414. package/src/template-part/edit/placeholder.jsx +2 -2
  415. package/src/term-count/use-term-count.js +1 -1
  416. package/src/term-description/use-term-description.js +1 -1
  417. package/src/term-name/use-term-name.js +1 -1
  418. package/src/terms-query/edit/inspector-controls/index.jsx +2 -2
  419. package/src/terms-query/edit/inspector-controls/inherit-control.jsx +1 -1
  420. package/src/terms-query/edit/inspector-controls/order-control.jsx +2 -2
  421. package/src/terms-query/edit/inspector-controls/taxonomy-control.jsx +2 -2
  422. package/src/utils/hooks.js +1 -1
  423. package/src/utils/media-control.jsx +16 -10
  424. package/src/utils/poster-image.jsx +2 -2
  425. package/src/utils/test/waveform-player.jsdom.test.jsx +36 -38
  426. package/src/utils/test/{waveform-utils.jsdom.test.js → waveform-utils.browser.test.js} +64 -44
  427. package/src/verse/README.md +1 -0
  428. package/src/verse/block.json +1 -0
  429. package/src/verse/style.scss +2 -2
  430. package/src/video/edit-common-settings.jsx +3 -3
  431. package/src/video/tracks-editor.jsx +2 -2
  432. package/build/gallery/flex-styles.cjs.map +0 -7
  433. package/build-module/gallery/flex-styles.mjs.map +0 -7
  434. package/src/gallery/flex-styles.js +0 -99
@@ -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,\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 GalleryFlexStyles from './flex-styles';\nimport useDynamicGallery from './use-dynamic-gallery';\nimport { GallerySourcePanel, GalleryDynamicView } from './dynamic-gallery';\nimport { getDynamicSource, ATTACHED_MEDIA } from './dynamic-source';\nimport { unlock } from '../lock-unlock';\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 )\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} = unlock( 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 )\n\t\t: {};\n\tconst baseColumns = isValidGalleryColumns( columns ) ? columns : undefined;\n\tconst baseImageCrop = typeof imageCrop === 'boolean' ? imageCrop : true;\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 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\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};\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 } )\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 ), result\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 )\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 setGalleryFlexSettings( 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},\n\t\t\t\tsettings,\n\t\t\t} ),\n\t\t} );\n\t}\n\n\tfunction setColumnsNumber( value ) {\n\t\tsetGalleryFlexSettings( { columns: value } );\n\t}\n\n\tfunction toggleImageCrop() {\n\t\tsetGalleryFlexSettings( { 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\tfunction setAspectRatio( value ) {\n\t\tsetAttributes( { aspectRatio: value } );\n\n\t\t// Update all inner image blocks with the new aspect ratio\n\t\tconst changedAttributes = {};\n\t\tconst blocks = [];\n\n\t\tgetBlock( clientId ).innerBlocks.forEach( ( block ) => {\n\t\t\tblocks.push( block.clientId );\n\t\t\tchangedAttributes[ block.clientId ] = {\n\t\t\t\taspectRatio: value === 'auto' ? undefined : value,\n\t\t\t};\n\t\t} );\n\n\t\tupdateBlockAttributes( blocks, changedAttributes, true );\n\n\t\tconst aspectRatioText = aspectRatioOptions.find(\n\t\t\t( option ) => option.value === value\n\t\t);\n\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: aspect ratio setting */\n\t\t\t\t__( 'All gallery images updated to aspect ratio: %s' ),\n\t\t\t\taspectRatioText?.label || value\n\t\t\t),\n\t\t\t{\n\t\t\t\tid: 'gallery-attributes-aspectRatio',\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\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\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls\n\t\t\t\tgroup={\n\t\t\t\t\tisViewportStyleState && isFlexLayout\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\tsetGalleryFlexSettings( {\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} );\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 activeColumns !== 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 )\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<SelectControl\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\tsetGalleryFlexSettings( {\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{ ! isViewportStyleState &&\n\t\t\t\t\t\taspectRatioOptions.length > 1 && (\n\t\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\t\t\t\t!! aspectRatio && aspectRatio !== 'auto'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\t\t\t\t\t\tonDeselect={ () => setAspectRatio( 'auto' ) }\n\t\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\t\t\t\t\t\t\thelp={ __(\n\t\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\t) }\n\t\t\t\t\t\t\t\t\tvalue={ aspectRatio }\n\t\t\t\t\t\t\t\t\toptions={ aspectRatioOptions }\n\t\t\t\t\t\t\t\t\tonChange={ setAspectRatio }\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 &&\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{ isFlexLayout && (\n\t\t\t\t\t<GalleryFlexStyles\n\t\t\t\t\t\tstyle={ attributes.style }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t/>\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
- "names": ["import_utils", "imageIcon", "blockEditorStore", "noticesStore", "useGetMedia", "useGetNewImages", "useDynamicGallery", "useImageSizes", "clsx", "ToolsPanel", "ToolsPanelItem", "ToggleGroupControl", "ToggleGroupControlOption", "linkIcon", "GalleryFlexStyles", "Gallery"]
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 { unlock } from '../lock-unlock';\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} = unlock( 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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",
6
+ "names": ["import_utils", "imageIcon", "blockEditorStore", "noticesStore", "useGetMedia", "useGetNewImages", "useDynamicGallery", "useImageSizes", "clsx", "ToolsPanel", "ToolsPanelItem", "WCSelectControl", "ToggleGroupControl", "ToggleGroupControlOption", "linkIcon", "GalleryStyles", "Gallery"]
7
7
  }
@@ -17,12 +17,12 @@ var __copyProps = (to, from, except, desc) => {
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
- // packages/block-library/src/gallery/flex-styles.js
21
- var flex_styles_exports = {};
22
- __export(flex_styles_exports, {
23
- default: () => GalleryFlexStyles
20
+ // packages/block-library/src/gallery/gallery-styles.js
21
+ var gallery_styles_exports = {};
22
+ __export(gallery_styles_exports, {
23
+ default: () => GalleryStyles
24
24
  });
25
- module.exports = __toCommonJS(flex_styles_exports);
25
+ module.exports = __toCommonJS(gallery_styles_exports);
26
26
  var import_block_editor = require("@wordpress/block-editor");
27
27
  var import_data = require("@wordpress/data");
28
28
  var import_global_styles_engine = require("@wordpress/global-styles-engine");
@@ -47,41 +47,40 @@ function getBlockGapValue(style) {
47
47
  }
48
48
  return style.spacing.blockGap;
49
49
  }
50
- function GalleryFlexStyles({ style, clientId }) {
50
+ function GalleryStyles({ style, clientId, isFlexLayout }) {
51
51
  const selector = `.wp-block-gallery-${clientId}`;
52
52
  const [viewportSettings] = (0, import_block_editor.useSettings)("viewport");
53
53
  const globalStyles = (0, import_data.useSelect)(
54
54
  (select) => select(import_block_editor.store).getSettings()?.[globalStylesDataKey],
55
55
  []
56
56
  );
57
- const globalGalleryStyles = globalStyles?.blocks?.[GALLERY_BLOCK_NAME] || {};
58
- const styleBlockGap = getBlockGapValue(style);
59
- const globalGalleryBlockGap = globalGalleryStyles?.spacing?.blockGap ?? FALLBACK_VALUE;
60
- const blockGap = styleBlockGap === void 0 ? globalGalleryBlockGap : styleBlockGap;
61
- let css = getGalleryGapCustomPropertyStyle(selector, blockGap);
62
57
  const responsiveMediaQueries = getResponsiveMediaQueries(viewportSettings);
63
- Object.entries(responsiveMediaQueries).forEach(
64
- ([viewport, mediaQuery]) => {
65
- const styleViewportBlockGap = getBlockGapValue(
66
- style?.[viewport]
67
- );
68
- const globalViewportBlockGap = styleBlockGap === void 0 ? globalGalleryStyles?.[viewport]?.spacing?.blockGap : void 0;
69
- const viewportBlockGap = styleViewportBlockGap === void 0 ? globalViewportBlockGap : styleViewportBlockGap;
70
- if (viewportBlockGap === void 0 || viewportBlockGap === null) {
71
- return;
58
+ let css = "";
59
+ if (isFlexLayout) {
60
+ const globalGalleryStyles = globalStyles?.blocks?.[GALLERY_BLOCK_NAME] || {};
61
+ const styleBlockGap = getBlockGapValue(style);
62
+ const globalGalleryBlockGap = globalGalleryStyles?.spacing?.blockGap ?? FALLBACK_VALUE;
63
+ const blockGap = styleBlockGap === void 0 ? globalGalleryBlockGap : styleBlockGap;
64
+ css += getGalleryGapCustomPropertyStyle(selector, blockGap);
65
+ Object.entries(responsiveMediaQueries).forEach(
66
+ ([viewport, mediaQuery]) => {
67
+ const styleViewportBlockGap = getBlockGapValue(
68
+ style?.[viewport]
69
+ );
70
+ const globalViewportBlockGap = styleBlockGap === void 0 ? globalGalleryStyles?.[viewport]?.spacing?.blockGap : void 0;
71
+ const viewportBlockGap = styleViewportBlockGap === void 0 ? globalViewportBlockGap : styleViewportBlockGap;
72
+ if (viewportBlockGap === void 0 || viewportBlockGap === null) {
73
+ return;
74
+ }
75
+ css += `${mediaQuery}{${getGalleryGapCustomPropertyStyle(
76
+ selector,
77
+ viewportBlockGap
78
+ )}}`;
72
79
  }
73
- css += `${mediaQuery}{${getGalleryGapCustomPropertyStyle(
74
- selector,
75
- viewportBlockGap
76
- )}}`;
77
- }
78
- );
79
- css += (0, import_responsive_styles.getGalleryResponsiveFlexCSS)(
80
- selector,
81
- style,
82
- responsiveMediaQueries
83
- );
80
+ );
81
+ }
82
+ css += (0, import_responsive_styles.getGalleryResponsiveCSS)(selector, style, responsiveMediaQueries);
84
83
  (0, import_block_editor.useStyleOverride)({ css });
85
84
  return null;
86
85
  }
87
- //# sourceMappingURL=flex-styles.cjs.map
86
+ //# sourceMappingURL=gallery-styles.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/gallery/gallery-styles.js"],
4
+ "sourcesContent": ["import {\n\t__experimentalGetGapCSSValue as getGapCSSValue,\n\tprivateApis as blockEditorPrivateApis,\n\tstore as blockEditorStore,\n\tuseStyleOverride,\n\tuseSettings,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\nimport { privateApis as globalStylesEnginePrivateApis } from '@wordpress/global-styles-engine';\nimport { unlock } from '../lock-unlock';\nimport { getGalleryResponsiveCSS } from './responsive-styles';\n\nconst { getResponsiveMediaQueries } = unlock( globalStylesEnginePrivateApis );\nconst { globalStylesDataKey } = unlock( blockEditorPrivateApis );\nconst GALLERY_BLOCK_NAME = 'core/gallery';\n\n// --gallery-block--gutter-size is deprecated. --wp--style--gallery-gap-default should be used by themes that want to set a default\n// gap on the gallery.\nconst FALLBACK_VALUE = `var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) )`;\n\nfunction getGalleryGapCustomPropertyStyle( selector, blockGap ) {\n\tlet column = FALLBACK_VALUE;\n\tif ( blockGap ) {\n\t\tcolumn =\n\t\t\ttypeof blockGap === 'string'\n\t\t\t\t? getGapCSSValue( blockGap ) || FALLBACK_VALUE\n\t\t\t\t: getGapCSSValue( blockGap?.left ) || FALLBACK_VALUE;\n\t}\n\n\t// The unstable gallery gap calculation requires a real value (such as `0px`) and not `0`.\n\treturn `${ selector } {\n\t\t--wp--style--unstable-gallery-gap: ${ column === '0' ? '0px' : column }\n\t}`;\n}\n\nfunction getBlockGapValue( style ) {\n\tif ( ! Object.hasOwn( style?.spacing || {}, 'blockGap' ) ) {\n\t\treturn undefined;\n\t}\n\n\treturn style.spacing.blockGap;\n}\n\n/**\n * Renders the Gallery's instance styles: the gap custom property the Flex\n * layout's column widths are calculated from, and the Gallery's responsive\n * viewport CSS.\n *\n * @param {Object} props\n * @param {Object} props.style Gallery block style attribute.\n * @param {string} props.clientId Gallery block client ID.\n * @param {boolean} props.isFlexLayout Whether the Gallery uses the Flex layout.\n */\nexport default function GalleryStyles( { style, clientId, isFlexLayout } ) {\n\tconst selector = `.wp-block-gallery-${ clientId }`;\n\tconst [ viewportSettings ] = useSettings( 'viewport' );\n\tconst globalStyles = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings()?.[ globalStylesDataKey ],\n\t\t[]\n\t);\n\tconst responsiveMediaQueries =\n\t\tgetResponsiveMediaQueries( viewportSettings );\n\tlet css = '';\n\n\t// The gap custom property only drives the Flex layout's column width\n\t// calculations, so it is not emitted for the other Gallery layouts.\n\tif ( isFlexLayout ) {\n\t\tconst globalGalleryStyles =\n\t\t\tglobalStyles?.blocks?.[ GALLERY_BLOCK_NAME ] || {};\n\t\tconst styleBlockGap = getBlockGapValue( style );\n\t\tconst globalGalleryBlockGap =\n\t\t\tglobalGalleryStyles?.spacing?.blockGap ?? FALLBACK_VALUE;\n\t\t// Prefer the block's own gap value, then Gallery global styles. Missing\n\t\t// values fall back to the Gallery blockGap default.\n\t\tconst blockGap =\n\t\t\tstyleBlockGap === undefined ? globalGalleryBlockGap : styleBlockGap;\n\t\tcss += getGalleryGapCustomPropertyStyle( selector, blockGap );\n\n\t\tObject.entries( responsiveMediaQueries ).forEach(\n\t\t\t( [ viewport, mediaQuery ] ) => {\n\t\t\t\tconst styleViewportBlockGap = getBlockGapValue(\n\t\t\t\t\tstyle?.[ viewport ]\n\t\t\t\t);\n\t\t\t\t// Viewport-specific block values win. Gallery global viewport values\n\t\t\t\t// only apply when the block has no base gap, so they do not override an instance value.\n\t\t\t\tconst globalViewportBlockGap =\n\t\t\t\t\tstyleBlockGap === undefined\n\t\t\t\t\t\t? globalGalleryStyles?.[ viewport ]?.spacing?.blockGap\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst viewportBlockGap =\n\t\t\t\t\tstyleViewportBlockGap === undefined\n\t\t\t\t\t\t? globalViewportBlockGap\n\t\t\t\t\t\t: styleViewportBlockGap;\n\t\t\t\tif (\n\t\t\t\t\tviewportBlockGap === undefined ||\n\t\t\t\t\tviewportBlockGap === null\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcss += `${ mediaQuery }{${ getGalleryGapCustomPropertyStyle(\n\t\t\t\t\tselector,\n\t\t\t\t\tviewportBlockGap\n\t\t\t\t) }}`;\n\t\t\t}\n\t\t);\n\t}\n\n\t// The column and crop rules are scoped to the Flex layout, so they are\n\t// inert in the other layouts and this can run for every Gallery.\n\tcss += getGalleryResponsiveCSS( selector, style, responsiveMediaQueries );\n\n\tuseStyleOverride( { css } );\n\n\treturn null;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMO;AACP,kBAA0B;AAC1B,kCAA6D;AAC7D,yBAAuB;AACvB,+BAAwC;AAExC,IAAM,EAAE,0BAA0B,QAAI,2BAAQ,4BAAAA,WAA8B;AAC5E,IAAM,EAAE,oBAAoB,QAAI,2BAAQ,oBAAAC,WAAuB;AAC/D,IAAM,qBAAqB;AAI3B,IAAM,iBAAiB;AAEvB,SAAS,iCAAkC,UAAU,UAAW;AAC/D,MAAI,SAAS;AACb,MAAK,UAAW;AACf,aACC,OAAO,aAAa,eACjB,oBAAAC,8BAAgB,QAAS,KAAK,qBAC9B,oBAAAA,8BAAgB,UAAU,IAAK,KAAK;AAAA,EACzC;AAGA,SAAO,GAAI,QAAS;AAAA,uCACmB,WAAW,MAAM,QAAQ,MAAO;AAAA;AAExE;AAEA,SAAS,iBAAkB,OAAQ;AAClC,MAAK,CAAE,OAAO,OAAQ,OAAO,WAAW,CAAC,GAAG,UAAW,GAAI;AAC1D,WAAO;AAAA,EACR;AAEA,SAAO,MAAM,QAAQ;AACtB;AAYe,SAAR,cAAgC,EAAE,OAAO,UAAU,aAAa,GAAI;AAC1E,QAAM,WAAW,qBAAsB,QAAS;AAChD,QAAM,CAAE,gBAAiB,QAAI,iCAAa,UAAW;AACrD,QAAM,mBAAe;AAAA,IACpB,CAAE,WACD,OAAQ,oBAAAC,KAAiB,EAAE,YAAY,IAAK,mBAAoB;AAAA,IACjE,CAAC;AAAA,EACF;AACA,QAAM,yBACL,0BAA2B,gBAAiB;AAC7C,MAAI,MAAM;AAIV,MAAK,cAAe;AACnB,UAAM,sBACL,cAAc,SAAU,kBAAmB,KAAK,CAAC;AAClD,UAAM,gBAAgB,iBAAkB,KAAM;AAC9C,UAAM,wBACL,qBAAqB,SAAS,YAAY;AAG3C,UAAM,WACL,kBAAkB,SAAY,wBAAwB;AACvD,WAAO,iCAAkC,UAAU,QAAS;AAE5D,WAAO,QAAS,sBAAuB,EAAE;AAAA,MACxC,CAAE,CAAE,UAAU,UAAW,MAAO;AAC/B,cAAM,wBAAwB;AAAA,UAC7B,QAAS,QAAS;AAAA,QACnB;AAGA,cAAM,yBACL,kBAAkB,SACf,sBAAuB,QAAS,GAAG,SAAS,WAC5C;AACJ,cAAM,mBACL,0BAA0B,SACvB,yBACA;AACJ,YACC,qBAAqB,UACrB,qBAAqB,MACpB;AACD;AAAA,QACD;AAEA,eAAO,GAAI,UAAW,IAAK;AAAA,UAC1B;AAAA,UACA;AAAA,QACD,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AAIA,aAAO,kDAAyB,UAAU,OAAO,sBAAuB;AAExE,4CAAkB,EAAE,IAAI,CAAE;AAE1B,SAAO;AACR;",
6
+ "names": ["globalStylesEnginePrivateApis", "blockEditorPrivateApis", "getGapCSSValue", "blockEditorStore"]
7
+ }
@@ -20,9 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // packages/block-library/src/gallery/responsive-styles.js
21
21
  var responsive_styles_exports = {};
22
22
  __export(responsive_styles_exports, {
23
- getGalleryResponsiveFlexCSS: () => getGalleryResponsiveFlexCSS,
23
+ getGalleryResponsiveCSS: () => getGalleryResponsiveCSS,
24
24
  getUpdatedGalleryStyle: () => getUpdatedGalleryStyle,
25
25
  getViewportGalleryStyle: () => getViewportGalleryStyle,
26
+ isValidGalleryAspectRatio: () => isValidGalleryAspectRatio,
26
27
  isValidGalleryColumns: () => isValidGalleryColumns
27
28
  });
28
29
  module.exports = __toCommonJS(responsive_styles_exports);
@@ -33,6 +34,10 @@ function isObject(value) {
33
34
  function isValidGalleryColumns(value) {
34
35
  return Number.isInteger(value) && value >= 1 && value <= import_constants.MAX_COLUMNS;
35
36
  }
37
+ var ASPECT_RATIO_PATTERN = /^(auto|\d+(\.\d+)?(\s*\/\s*\d+(\.\d+)?)?)$/;
38
+ function isValidGalleryAspectRatio(value) {
39
+ return typeof value === "string" && ASPECT_RATIO_PATTERN.test(value.trim());
40
+ }
36
41
  function getViewportGalleryStyle(style, viewport) {
37
42
  if (!isObject(style) || !isObject(style[viewport])) {
38
43
  return {};
@@ -75,10 +80,13 @@ function getUpdatedGalleryStyle({
75
80
  return cleanObject(nextStyle);
76
81
  }
77
82
  function getGallerySelector(selector) {
78
- return `${selector}.wp-block-gallery.has-nested-images:where(.is-layout-flex)`;
83
+ return `${selector}.wp-block-gallery.has-nested-images`;
84
+ }
85
+ function getFlexGallerySelector(selector) {
86
+ return `${getGallerySelector(selector)}:where(.is-layout-flex)`;
79
87
  }
80
88
  function getImageSelector(selector) {
81
- return `${getGallerySelector(
89
+ return `${getFlexGallerySelector(
82
90
  selector
83
91
  )} figure.wp-block-image:not(#individual-image)`;
84
92
  }
@@ -96,7 +104,17 @@ function getImageCropCSS(selector, imageCrop) {
96
104
  }
97
105
  return `${imageSelector}{align-self:auto !important;margin-top:0 !important;margin-bottom:auto !important;}${wrapperSelector}{display:block !important;}${linkSelector}{display:inline-block !important;}${mediaSelector}{width:auto !important;flex:0 1 auto !important;height:auto !important;object-fit:fill !important;}`;
98
106
  }
99
- function getGalleryResponsiveFlexCSS(selector, style, mediaQueries) {
107
+ function getAspectRatioCSS(selector, aspectRatio) {
108
+ const imageSelector = `${getGallerySelector(
109
+ selector
110
+ )} figure.wp-block-image:not(#individual-image) img`;
111
+ const ratio = aspectRatio.trim();
112
+ if (ratio === "auto") {
113
+ return `${imageSelector}{aspect-ratio:revert-layer !important;}`;
114
+ }
115
+ return `${imageSelector}{aspect-ratio:${ratio} !important;object-fit:cover !important;}`;
116
+ }
117
+ function getGalleryResponsiveCSS(selector, style, mediaQueries) {
100
118
  if (!isObject(mediaQueries)) {
101
119
  return "";
102
120
  }
@@ -112,14 +130,18 @@ function getGalleryResponsiveFlexCSS(selector, style, mediaQueries) {
112
130
  if (typeof viewportStyle.imageCrop === "boolean") {
113
131
  css += getImageCropCSS(selector, viewportStyle.imageCrop);
114
132
  }
133
+ if (isValidGalleryAspectRatio(viewportStyle.aspectRatio)) {
134
+ css += getAspectRatioCSS(selector, viewportStyle.aspectRatio);
135
+ }
115
136
  return css ? `${mediaQuery}{${css}}` : "";
116
137
  }).join("");
117
138
  }
118
139
  // Annotate the CommonJS export names for ESM import in node:
119
140
  0 && (module.exports = {
120
- getGalleryResponsiveFlexCSS,
141
+ getGalleryResponsiveCSS,
121
142
  getUpdatedGalleryStyle,
122
143
  getViewportGalleryStyle,
144
+ isValidGalleryAspectRatio,
123
145
  isValidGalleryColumns
124
146
  });
125
147
  //# sourceMappingURL=responsive-styles.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/gallery/responsive-styles.js"],
4
- "sourcesContent": ["import { MAX_COLUMNS } from './constants';\n\nfunction isObject( value ) {\n\treturn !! value && typeof value === 'object' && ! Array.isArray( value );\n}\n\nexport function isValidGalleryColumns( value ) {\n\treturn Number.isInteger( value ) && value >= 1 && value <= MAX_COLUMNS;\n}\n\n/**\n * Returns Gallery styles for a viewport.\n *\n * @param {Object} style Gallery block style attribute.\n * @param {string} viewport Viewport state.\n * @return {Object} Gallery viewport styles, or an empty object when unavailable.\n */\nexport function getViewportGalleryStyle( style, viewport ) {\n\tif ( ! isObject( style ) || ! isObject( style[ viewport ] ) ) {\n\t\treturn {};\n\t}\n\n\treturn style[ viewport ];\n}\n\nfunction cleanObject( value ) {\n\tif ( ! isObject( value ) ) {\n\t\treturn value;\n\t}\n\n\tconst entries = Object.entries( value ).filter(\n\t\t( [ , entryValue ] ) => entryValue !== undefined\n\t);\n\treturn entries.length ? Object.fromEntries( entries ) : undefined;\n}\n\n/**\n * Updates Gallery layout settings for a viewport without changing base values.\n *\n * @param {Object} options Options.\n * @param {Object} options.style Gallery block style attribute.\n * @param {string} options.viewport Selected viewport state.\n * @param {Object} options.baseSettings Gallery base layout settings.\n * @param {Object} options.settings Gallery layout settings to update.\n * @return {Object|undefined} Updated Gallery style attribute.\n */\nexport function getUpdatedGalleryStyle( {\n\tstyle,\n\tviewport,\n\tbaseSettings,\n\tsettings,\n} ) {\n\tconst currentStyle = isObject( style ) ? style : {};\n\tconst nextViewportStyle = {\n\t\t...getViewportGalleryStyle( currentStyle, viewport ),\n\t};\n\n\tObject.entries( settings ).forEach( ( [ key, value ] ) => {\n\t\tif ( value === undefined || value === baseSettings[ key ] ) {\n\t\t\tdelete nextViewportStyle[ key ];\n\t\t} else {\n\t\t\tnextViewportStyle[ key ] = value;\n\t\t}\n\t} );\n\n\tconst cleanedViewportStyle = cleanObject( nextViewportStyle );\n\tconst nextStyle = { ...currentStyle };\n\tif ( cleanedViewportStyle ) {\n\t\tnextStyle[ viewport ] = cleanedViewportStyle;\n\t} else {\n\t\tdelete nextStyle[ viewport ];\n\t}\n\n\treturn cleanObject( nextStyle );\n}\n\nfunction getGallerySelector( selector ) {\n\treturn `${ selector }.wp-block-gallery.has-nested-images:where(.is-layout-flex)`;\n}\n\nfunction getImageSelector( selector ) {\n\treturn `${ getGallerySelector(\n\t\tselector\n\t) } figure.wp-block-image:not(#individual-image)`;\n}\n\nfunction getColumnsCSS( selector, columns ) {\n\t// Match the fallback used by the Gallery's existing column-width CSS and\n\t// server-rendered responsive styles when the gap custom property is unavailable.\n\tconst width =\n\t\tcolumns === 1\n\t\t\t? '100%'\n\t\t\t: `calc((100% - (var(--wp--style--unstable-gallery-gap, 16px) * ${\n\t\t\t\t\tcolumns - 1\n\t\t\t })) / ${ columns })`;\n\n\treturn `${ getImageSelector( selector ) }{width:${ width } !important;}`;\n}\n\nfunction getImageCropCSS( selector, imageCrop ) {\n\tconst imageSelector = getImageSelector( selector );\n\tconst wrapperSelector = `${ imageSelector } > div:not(.components-drop-zone)`;\n\tconst linkSelector = `${ imageSelector } > a`;\n\tconst mediaSelector = `${ imageSelector } a,${ imageSelector } img`;\n\n\tif ( imageCrop ) {\n\t\treturn `${ imageSelector }{align-self:inherit !important;margin-bottom:0 !important;}${ wrapperSelector },${ linkSelector }{display:flex !important;}${ mediaSelector }{width:100% !important;flex:1 0 0% !important;height:100% !important;object-fit:cover !important;}`;\n\t}\n\n\treturn `${ imageSelector }{align-self:auto !important;margin-top:0 !important;margin-bottom:auto !important;}${ wrapperSelector }{display:block !important;}${ linkSelector }{display:inline-block !important;}${ mediaSelector }{width:auto !important;flex:0 1 auto !important;height:auto !important;object-fit:fill !important;}`;\n}\n\n/**\n * Generates Gallery-specific responsive Flex CSS.\n *\n * @param {string} selector Gallery block selector.\n * @param {Object} style Gallery block style attribute.\n * @param {Object} mediaQueries Map of viewport keys to media queries.\n * @return {string} Responsive Gallery CSS.\n */\nexport function getGalleryResponsiveFlexCSS( selector, style, mediaQueries ) {\n\tif ( ! isObject( mediaQueries ) ) {\n\t\treturn '';\n\t}\n\n\treturn Object.entries( mediaQueries )\n\t\t.map( ( [ viewport, mediaQuery ] ) => {\n\t\t\tif ( typeof mediaQuery !== 'string' ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst viewportStyle = getViewportGalleryStyle( style, viewport );\n\t\t\tlet css = '';\n\n\t\t\tif ( isValidGalleryColumns( viewportStyle.columns ) ) {\n\t\t\t\tcss += getColumnsCSS( selector, viewportStyle.columns );\n\t\t\t}\n\n\t\t\tif ( typeof viewportStyle.imageCrop === 'boolean' ) {\n\t\t\t\tcss += getImageCropCSS( selector, viewportStyle.imageCrop );\n\t\t\t}\n\n\t\t\treturn css ? `${ mediaQuery }{${ css }}` : '';\n\t\t} )\n\t\t.join( '' );\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { MAX_COLUMNS } from './constants';\n\nfunction isObject( value ) {\n\treturn !! value && typeof value === 'object' && ! Array.isArray( value );\n}\n\nexport function isValidGalleryColumns( value ) {\n\treturn Number.isInteger( value ) && value >= 1 && value <= MAX_COLUMNS;\n}\n\n/*\n * Aspect ratios are interpolated into a generated stylesheet instead of being\n * set as an inline style, so only the numeric forms produced by aspect ratio\n * presets (and `auto`) are accepted. A value from saved content that isn't one\n * of those is ignored rather than emitted, so it can't close the rule early and\n * inject declarations of its own. The frontend applies the same restriction in\n * `block_core_gallery_is_valid_aspect_ratio()`.\n */\nconst ASPECT_RATIO_PATTERN = /^(auto|\\d+(\\.\\d+)?(\\s*\\/\\s*\\d+(\\.\\d+)?)?)$/;\n\n/**\n * Returns whether a value can be used as a Gallery aspect ratio.\n *\n * @param {*} value Value to check.\n * @return {boolean} Whether the value is a valid aspect ratio.\n */\nexport function isValidGalleryAspectRatio( value ) {\n\treturn (\n\t\ttypeof value === 'string' && ASPECT_RATIO_PATTERN.test( value.trim() )\n\t);\n}\n\n/**\n * Returns Gallery styles for a viewport.\n *\n * @param {Object} style Gallery block style attribute.\n * @param {string} viewport Viewport state.\n * @return {Object} Gallery viewport styles, or an empty object when unavailable.\n */\nexport function getViewportGalleryStyle( style, viewport ) {\n\tif ( ! isObject( style ) || ! isObject( style[ viewport ] ) ) {\n\t\treturn {};\n\t}\n\n\treturn style[ viewport ];\n}\n\nfunction cleanObject( value ) {\n\tif ( ! isObject( value ) ) {\n\t\treturn value;\n\t}\n\n\tconst entries = Object.entries( value ).filter(\n\t\t( [ , entryValue ] ) => entryValue !== undefined\n\t);\n\treturn entries.length ? Object.fromEntries( entries ) : undefined;\n}\n\n/**\n * Updates Gallery layout settings for a viewport without changing base values.\n *\n * @param {Object} options Options.\n * @param {Object} options.style Gallery block style attribute.\n * @param {string} options.viewport Selected viewport state.\n * @param {Object} options.baseSettings Gallery base layout settings.\n * @param {Object} options.settings Gallery layout settings to update.\n * @return {Object|undefined} Updated Gallery style attribute.\n */\nexport function getUpdatedGalleryStyle( {\n\tstyle,\n\tviewport,\n\tbaseSettings,\n\tsettings,\n} ) {\n\tconst currentStyle = isObject( style ) ? style : {};\n\tconst nextViewportStyle = {\n\t\t...getViewportGalleryStyle( currentStyle, viewport ),\n\t};\n\n\tObject.entries( settings ).forEach( ( [ key, value ] ) => {\n\t\tif ( value === undefined || value === baseSettings[ key ] ) {\n\t\t\tdelete nextViewportStyle[ key ];\n\t\t} else {\n\t\t\tnextViewportStyle[ key ] = value;\n\t\t}\n\t} );\n\n\tconst cleanedViewportStyle = cleanObject( nextViewportStyle );\n\tconst nextStyle = { ...currentStyle };\n\tif ( cleanedViewportStyle ) {\n\t\tnextStyle[ viewport ] = cleanedViewportStyle;\n\t} else {\n\t\tdelete nextStyle[ viewport ];\n\t}\n\n\treturn cleanObject( nextStyle );\n}\n\nfunction getGallerySelector( selector ) {\n\treturn `${ selector }.wp-block-gallery.has-nested-images`;\n}\n\nfunction getFlexGallerySelector( selector ) {\n\treturn `${ getGallerySelector( selector ) }:where(.is-layout-flex)`;\n}\n\nfunction getImageSelector( selector ) {\n\treturn `${ getFlexGallerySelector(\n\t\tselector\n\t) } figure.wp-block-image:not(#individual-image)`;\n}\n\nfunction getColumnsCSS( selector, columns ) {\n\t// Match the fallback used by the Gallery's existing column-width CSS and\n\t// server-rendered responsive styles when the gap custom property is unavailable.\n\tconst width =\n\t\tcolumns === 1\n\t\t\t? '100%'\n\t\t\t: `calc((100% - (var(--wp--style--unstable-gallery-gap, 16px) * ${\n\t\t\t\t\tcolumns - 1\n\t\t\t\t})) / ${ columns })`;\n\n\treturn `${ getImageSelector( selector ) }{width:${ width } !important;}`;\n}\n\nfunction getImageCropCSS( selector, imageCrop ) {\n\tconst imageSelector = getImageSelector( selector );\n\tconst wrapperSelector = `${ imageSelector } > div:not(.components-drop-zone)`;\n\tconst linkSelector = `${ imageSelector } > a`;\n\tconst mediaSelector = `${ imageSelector } a,${ imageSelector } img`;\n\n\tif ( imageCrop ) {\n\t\treturn `${ imageSelector }{align-self:inherit !important;margin-bottom:0 !important;}${ wrapperSelector },${ linkSelector }{display:flex !important;}${ mediaSelector }{width:100% !important;flex:1 0 0% !important;height:100% !important;object-fit:cover !important;}`;\n\t}\n\n\treturn `${ imageSelector }{align-self:auto !important;margin-top:0 !important;margin-bottom:auto !important;}${ wrapperSelector }{display:block !important;}${ linkSelector }{display:inline-block !important;}${ mediaSelector }{width:auto !important;flex:0 1 auto !important;height:auto !important;object-fit:fill !important;}`;\n}\n\nfunction getAspectRatioCSS( selector, aspectRatio ) {\n\tconst imageSelector = `${ getGallerySelector(\n\t\tselector\n\t) } figure.wp-block-image:not(#individual-image) img`;\n\tconst ratio = aspectRatio.trim();\n\n\tif ( ratio === 'auto' ) {\n\t\t/*\n\t\t * We need an explicit value here to cancel out the base aspect ratio. `auto` — and\n\t\t * `initial`, `unset` and `revert`, which all compute to it — would\n\t\t * override the `width`/`height` presentational hint that gives a\n\t\t * lazy-loaded image its placeholder ratio, collapsing the image to zero\n\t\t * height until it loads.\n\t\t * `revert-layer` drops the declaration instead, so the image falls back\n\t\t * to that hint while loading, to its natural ratio once loaded, and to\n\t\t * any ratio a theme set in a lower cascade layer. `object-fit` is left\n\t\t * as the base set it, so a cropped Gallery still crops.\n\t\t */\n\t\treturn `${ imageSelector }{aspect-ratio:revert-layer !important;}`;\n\t}\n\n\treturn `${ imageSelector }{aspect-ratio:${ ratio } !important;object-fit:cover !important;}`;\n}\n\n/**\n * Generates Gallery-specific responsive CSS.\n *\n * @param {string} selector Gallery block selector.\n * @param {Object} style Gallery block style attribute.\n * @param {Object} mediaQueries Map of viewport keys to media queries.\n * @return {string} Responsive Gallery CSS.\n */\nexport function getGalleryResponsiveCSS( selector, style, mediaQueries ) {\n\tif ( ! isObject( mediaQueries ) ) {\n\t\treturn '';\n\t}\n\n\treturn Object.entries( mediaQueries )\n\t\t.map( ( [ viewport, mediaQuery ] ) => {\n\t\t\tif ( typeof mediaQuery !== 'string' ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst viewportStyle = getViewportGalleryStyle( style, viewport );\n\t\t\tlet css = '';\n\n\t\t\tif ( isValidGalleryColumns( viewportStyle.columns ) ) {\n\t\t\t\tcss += getColumnsCSS( selector, viewportStyle.columns );\n\t\t\t}\n\n\t\t\tif ( typeof viewportStyle.imageCrop === 'boolean' ) {\n\t\t\t\tcss += getImageCropCSS( selector, viewportStyle.imageCrop );\n\t\t\t}\n\n\t\t\tif ( isValidGalleryAspectRatio( viewportStyle.aspectRatio ) ) {\n\t\t\t\tcss += getAspectRatioCSS( selector, viewportStyle.aspectRatio );\n\t\t\t}\n\n\t\t\treturn css ? `${ mediaQuery }{${ css }}` : '';\n\t\t} )\n\t\t.join( '' );\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -44,6 +44,7 @@
44
44
  "text": true
45
45
  }
46
46
  },
47
+ "shadow": true,
47
48
  "spacing": {
48
49
  "margin": true,
49
50
  "padding": true,
@@ -63,6 +64,7 @@
63
64
  "__experimentalTextTransform": true,
64
65
  "__experimentalTextDecoration": true,
65
66
  "__experimentalWritingMode": true,
67
+ "textShadow": true,
66
68
  "fitText": true,
67
69
  "__experimentalDefaultControls": {
68
70
  "fontSize": true
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/heading/index.js"],
4
- "sourcesContent": ["import { heading as icon } from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { getBlockType, unregisterBlockVariation } from '@wordpress/blocks';\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\nimport variations from './variations';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tcontent: __( 'Code is Poetry' ),\n\t\t\tlevel: 2,\n\t\t\tstyle: {\n\t\t\t\ttypography: {\n\t\t\t\t\ttextAlign: 'center',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tconst { content, level } = attributes;\n\n\t\tconst customName = attributes?.metadata?.name;\n\t\tconst hasContent = content?.trim().length > 0;\n\n\t\t// In the list view, use the block's content as the label.\n\t\t// If the content is empty, fall back to the default label.\n\t\tif ( context === 'list-view' && ( customName || hasContent ) ) {\n\t\t\treturn customName || content;\n\t\t}\n\n\t\tif ( context === 'breadcrumb' && customName ) {\n\t\t\treturn customName;\n\t\t}\n\n\t\tif ( context === 'accessibility' ) {\n\t\t\treturn ! hasContent\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: accessibility text. %s: heading level. */\n\t\t\t\t\t\t__( 'Level %s. Empty.' ),\n\t\t\t\t\t\tlevel\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: accessibility text. 1: heading level. 2: heading content. */\n\t\t\t\t\t\t__( 'Level %1$s. %2$s' ),\n\t\t\t\t\t\tlevel,\n\t\t\t\t\t\tcontent\n\t\t\t\t );\n\t\t}\n\t},\n\ttransforms,\n\tdeprecated,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\tcontent:\n\t\t\t\t( attributes.content || '' ) +\n\t\t\t\t( attributesToMerge.content || '' ),\n\t\t};\n\t},\n\tedit,\n\tsave,\n\tvariations,\n};\n\nexport const init = () => {\n\tconst block = initBlock( { name, metadata, settings } );\n\n\t// Unregister heading level variations based on `levelOptions` attribute.\n\t// This is for backwards compatibility, as extenders can now unregister the\n\t// variation directly: `wp.blocks.unregisterBlockVariation( 'core/heading', 'h1' )`.\n\tconst levelOptions =\n\t\tgetBlockType( name )?.attributes?.levelOptions?.default;\n\tif ( levelOptions ) {\n\t\t[ 1, 2, 3, 4, 5, 6 ].forEach( ( level ) => {\n\t\t\tif ( ! levelOptions.includes( level ) ) {\n\t\t\t\tunregisterBlockVariation( name, `h${ level }` );\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn block;\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,+BAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,kBAA4B;AAC5B,oBAAuD;AACvD,wBAAsB;AACtB,wBAAuB;AACvB,kBAAiB;AACjB,mBAAqB;AACrB,kBAAiB;AACjB,wBAAuB;AACvB,wBAAuB;AAEvB,IAAM,EAAE,KAAK,IAAI,aAAAA;AAIV,IAAM,WAAW;AAAA,EACvB,mBAAAC;AAAA,EACA,SAAS;AAAA,IACR,YAAY;AAAA,MACX,aAAS,gBAAI,gBAAiB;AAAA,MAC9B,OAAO;AAAA,MACP,OAAO;AAAA,QACN,YAAY;AAAA,UACX,WAAW;AAAA,QACZ;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,oBAAqB,YAAY,EAAE,QAAQ,GAAI;AAC9C,UAAM,EAAE,SAAS,MAAM,IAAI;AAE3B,UAAM,aAAa,YAAY,UAAU;AACzC,UAAM,aAAa,SAAS,KAAK,EAAE,SAAS;AAI5C,QAAK,YAAY,gBAAiB,cAAc,aAAe;AAC9D,aAAO,cAAc;AAAA,IACtB;AAEA,QAAK,YAAY,gBAAgB,YAAa;AAC7C,aAAO;AAAA,IACR;AAEA,QAAK,YAAY,iBAAkB;AAClC,aAAO,CAAE,iBACN;AAAA;AAAA,YAEA,gBAAI,kBAAmB;AAAA,QACvB;AAAA,MACA,QACA;AAAA;AAAA,YAEA,gBAAI,kBAAmB;AAAA,QACvB;AAAA,QACA;AAAA,MACA;AAAA,IACJ;AAAA,EACD;AAAA,EACA,8BAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,MAAO,YAAY,mBAAoB;AACtC,WAAO;AAAA,MACN,UACG,WAAW,WAAW,OACtB,kBAAkB,WAAW;AAAA,IACjC;AAAA,EACD;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,8BAAAC;AACD;AAEO,IAAM,OAAO,MAAM;AACzB,QAAM,YAAQ,kBAAAC,SAAW,EAAE,MAAM,uBAAAC,SAAU,SAAS,CAAE;AAKtD,QAAM,mBACL,4BAAc,IAAK,GAAG,YAAY,cAAc;AACjD,MAAK,cAAe;AACnB,KAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,EAAE,QAAS,CAAE,UAAW;AAC1C,UAAK,CAAE,aAAa,SAAU,KAAM,GAAI;AACvC,oDAA0B,MAAM,IAAK,KAAM,EAAG;AAAA,MAC/C;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AACR;",
4
+ "sourcesContent": ["import { heading as icon } from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { getBlockType, unregisterBlockVariation } from '@wordpress/blocks';\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\nimport variations from './variations';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tcontent: __( 'Code is Poetry' ),\n\t\t\tlevel: 2,\n\t\t\tstyle: {\n\t\t\t\ttypography: {\n\t\t\t\t\ttextAlign: 'center',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tconst { content, level } = attributes;\n\n\t\tconst customName = attributes?.metadata?.name;\n\t\tconst hasContent = content?.trim().length > 0;\n\n\t\t// In the list view, use the block's content as the label.\n\t\t// If the content is empty, fall back to the default label.\n\t\tif ( context === 'list-view' && ( customName || hasContent ) ) {\n\t\t\treturn customName || content;\n\t\t}\n\n\t\tif ( context === 'breadcrumb' && customName ) {\n\t\t\treturn customName;\n\t\t}\n\n\t\tif ( context === 'accessibility' ) {\n\t\t\treturn ! hasContent\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: accessibility text. %s: heading level. */\n\t\t\t\t\t\t__( 'Level %s. Empty.' ),\n\t\t\t\t\t\tlevel\n\t\t\t\t\t)\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: accessibility text. 1: heading level. 2: heading content. */\n\t\t\t\t\t\t__( 'Level %1$s. %2$s' ),\n\t\t\t\t\t\tlevel,\n\t\t\t\t\t\tcontent\n\t\t\t\t\t);\n\t\t}\n\t},\n\ttransforms,\n\tdeprecated,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\tcontent:\n\t\t\t\t( attributes.content || '' ) +\n\t\t\t\t( attributesToMerge.content || '' ),\n\t\t};\n\t},\n\tedit,\n\tsave,\n\tvariations,\n};\n\nexport const init = () => {\n\tconst block = initBlock( { name, metadata, settings } );\n\n\t// Unregister heading level variations based on `levelOptions` attribute.\n\t// This is for backwards compatibility, as extenders can now unregister the\n\t// variation directly: `wp.blocks.unregisterBlockVariation( 'core/heading', 'h1' )`.\n\tconst levelOptions =\n\t\tgetBlockType( name )?.attributes?.levelOptions?.default;\n\tif ( levelOptions ) {\n\t\t[ 1, 2, 3, 4, 5, 6 ].forEach( ( level ) => {\n\t\t\tif ( ! levelOptions.includes( level ) ) {\n\t\t\t\tunregisterBlockVariation( name, `h${ level }` );\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn block;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,+BAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,kBAA4B;AAC5B,oBAAuD;AACvD,wBAAsB;AACtB,wBAAuB;AACvB,kBAAiB;AACjB,mBAAqB;AACrB,kBAAiB;AACjB,wBAAuB;AACvB,wBAAuB;AAEvB,IAAM,EAAE,KAAK,IAAI,aAAAA;AAIV,IAAM,WAAW;AAAA,EACvB,mBAAAC;AAAA,EACA,SAAS;AAAA,IACR,YAAY;AAAA,MACX,aAAS,gBAAI,gBAAiB;AAAA,MAC9B,OAAO;AAAA,MACP,OAAO;AAAA,QACN,YAAY;AAAA,UACX,WAAW;AAAA,QACZ;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,oBAAqB,YAAY,EAAE,QAAQ,GAAI;AAC9C,UAAM,EAAE,SAAS,MAAM,IAAI;AAE3B,UAAM,aAAa,YAAY,UAAU;AACzC,UAAM,aAAa,SAAS,KAAK,EAAE,SAAS;AAI5C,QAAK,YAAY,gBAAiB,cAAc,aAAe;AAC9D,aAAO,cAAc;AAAA,IACtB;AAEA,QAAK,YAAY,gBAAgB,YAAa;AAC7C,aAAO;AAAA,IACR;AAEA,QAAK,YAAY,iBAAkB;AAClC,aAAO,CAAE,iBACN;AAAA;AAAA,YAEA,gBAAI,kBAAmB;AAAA,QACvB;AAAA,MACD,QACC;AAAA;AAAA,YAEA,gBAAI,kBAAmB;AAAA,QACvB;AAAA,QACA;AAAA,MACD;AAAA,IACH;AAAA,EACD;AAAA,EACA,8BAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,MAAO,YAAY,mBAAoB;AACtC,WAAO;AAAA,MACN,UACG,WAAW,WAAW,OACtB,kBAAkB,WAAW;AAAA,IACjC;AAAA,EACD;AAAA,EACA,kBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,8BAAAC;AACD;AAEO,IAAM,OAAO,MAAM;AACzB,QAAM,YAAQ,kBAAAC,SAAW,EAAE,MAAM,uBAAAC,SAAU,SAAS,CAAE;AAKtD,QAAM,mBACL,4BAAc,IAAK,GAAG,YAAY,cAAc;AACjD,MAAK,cAAe;AACnB,KAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,EAAE,QAAS,CAAE,UAAW;AAC1C,UAAK,CAAE,aAAa,SAAU,KAAM,GAAI;AACvC,oDAA0B,MAAM,IAAK,KAAM,EAAG;AAAA,MAC/C;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AACR;",
6
6
  "names": ["metadata", "icon", "transforms", "deprecated", "edit", "save", "variations", "initBlock", "metadata"]
7
7
  }
@@ -153,8 +153,7 @@ function HTMLEditModal({ onRequestClose, content, onUpdate }) {
153
153
  onChange: setEditedHtml,
154
154
  placeholder: (0, import_i18n.__)("Write HTML…"),
155
155
  "aria-label": (0, import_i18n.__)("HTML"),
156
- className: "block-library-html__modal-editor",
157
- async: true
156
+ className: "block-library-html__modal-editor"
158
157
  }
159
158
  )
160
159
  }
@@ -172,8 +171,7 @@ function HTMLEditModal({ onRequestClose, content, onUpdate }) {
172
171
  onChange: setEditedCss,
173
172
  placeholder: (0, import_i18n.__)("Write CSS…"),
174
173
  "aria-label": (0, import_i18n.__)("CSS"),
175
- className: "block-library-html__modal-editor",
176
- async: true
174
+ className: "block-library-html__modal-editor"
177
175
  }
178
176
  )
179
177
  }
@@ -193,8 +191,7 @@ function HTMLEditModal({ onRequestClose, content, onUpdate }) {
193
191
  "Write JavaScript…"
194
192
  ),
195
193
  "aria-label": (0, import_i18n.__)("JavaScript"),
196
- className: "block-library-html__modal-editor",
197
- async: true
194
+ className: "block-library-html__modal-editor"
198
195
  }
199
196
  )
200
197
  }