@wordpress/block-editor 15.23.0 → 16.0.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 (684) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/build/autocompleters/block.cjs +10 -2
  3. package/build/autocompleters/block.cjs.map +2 -2
  4. package/build/components/background-image-control/index.cjs +0 -2
  5. package/build/components/background-image-control/index.cjs.map +2 -2
  6. package/build/components/block-canvas/index.cjs +6 -1
  7. package/build/components/block-canvas/index.cjs.map +2 -2
  8. package/build/components/block-controls/groups.cjs +3 -1
  9. package/build/components/block-controls/groups.cjs.map +2 -2
  10. package/build/components/block-edit/edit.cjs +10 -18
  11. package/build/components/block-edit/edit.cjs.map +2 -2
  12. package/build/components/block-inspector/edit-contents.cjs +3 -0
  13. package/build/components/block-inspector/edit-contents.cjs.map +3 -3
  14. package/build/components/block-inspector/index.cjs +2 -3
  15. package/build/components/block-inspector/index.cjs.map +2 -2
  16. package/build/components/block-list/block-invalid-warning.cjs +8 -19
  17. package/build/components/block-list/block-invalid-warning.cjs.map +2 -2
  18. package/build/components/block-list/block.cjs +9 -3
  19. package/build/components/block-list/block.cjs.map +3 -3
  20. package/build/components/block-list/index.cjs +1 -3
  21. package/build/components/block-list/index.cjs.map +2 -2
  22. package/build/components/block-list/use-block-props/index.cjs +3 -1
  23. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  24. package/build/components/block-list/use-block-props/use-focus-first-element.cjs +9 -4
  25. package/build/components/block-list/use-block-props/use-focus-first-element.cjs.map +2 -2
  26. package/build/components/block-list/use-block-props/use-focus-handler.cjs +12 -4
  27. package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +2 -2
  28. package/build/components/block-styles/use-styles-for-block.cjs +2 -1
  29. package/build/components/block-styles/use-styles-for-block.cjs.map +2 -2
  30. package/build/components/block-title/use-block-display-title.cjs +7 -2
  31. package/build/components/block-title/use-block-display-title.cjs.map +2 -2
  32. package/build/components/block-toolbar/block-toolbar-icon.cjs +10 -14
  33. package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
  34. package/build/components/block-toolbar/index.cjs +43 -24
  35. package/build/components/block-toolbar/index.cjs.map +2 -2
  36. package/build/components/block-tools/index.cjs +7 -2
  37. package/build/components/block-tools/index.cjs.map +2 -2
  38. package/build/components/block-variation-transforms/index.cjs +0 -1
  39. package/build/components/block-variation-transforms/index.cjs.map +2 -2
  40. package/build/components/block-visibility/modal.cjs +20 -6
  41. package/build/components/block-visibility/modal.cjs.map +2 -2
  42. package/build/components/block-visibility/use-block-visibility.cjs +16 -6
  43. package/build/components/block-visibility/use-block-visibility.cjs.map +3 -3
  44. package/build/components/block-visibility/utils.cjs +15 -2
  45. package/build/components/block-visibility/utils.cjs.map +3 -3
  46. package/build/components/block-visibility/viewport-menu-item.cjs +7 -1
  47. package/build/components/block-visibility/viewport-menu-item.cjs.map +2 -2
  48. package/build/components/block-visibility/viewport-toolbar.cjs +5 -0
  49. package/build/components/block-visibility/viewport-toolbar.cjs.map +2 -2
  50. package/build/components/block-visibility/viewport-visibility-info.cjs +5 -1
  51. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  52. package/build/components/child-layout-control/index.cjs +0 -6
  53. package/build/components/child-layout-control/index.cjs.map +2 -2
  54. package/build/components/colors-gradients/control.cjs +5 -5
  55. package/build/components/colors-gradients/control.cjs.map +2 -2
  56. package/build/components/date-format-picker/index.cjs +0 -1
  57. package/build/components/date-format-picker/index.cjs.map +2 -2
  58. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +1 -2
  59. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +2 -2
  60. package/build/components/dimensions-tool/scale-tool.cjs +0 -1
  61. package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
  62. package/build/components/dimensions-tool/width-height-tool.cjs +2 -4
  63. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  64. package/build/components/font-appearance-control/index.cjs +6 -25
  65. package/build/components/font-appearance-control/index.cjs.map +3 -3
  66. package/build/components/font-family/index.cjs +6 -15
  67. package/build/components/font-family/index.cjs.map +3 -3
  68. package/build/components/font-sizes/font-size-picker.cjs +1 -2
  69. package/build/components/font-sizes/font-size-picker.cjs.map +2 -2
  70. package/build/components/global-styles/border-panel.cjs +0 -1
  71. package/build/components/global-styles/border-panel.cjs.map +2 -2
  72. package/build/components/global-styles/dimensions-panel.cjs +0 -3
  73. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  74. package/build/components/global-styles/state-control-badges.cjs +39 -3
  75. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  76. package/build/components/global-styles/typography-panel.cjs +4 -11
  77. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  78. package/build/components/height-control/index.cjs +0 -2
  79. package/build/components/height-control/index.cjs.map +2 -2
  80. package/build/components/html-element-control/index.cjs +0 -1
  81. package/build/components/html-element-control/index.cjs.map +2 -2
  82. package/build/components/image-editor/index.cjs +5 -0
  83. package/build/components/image-editor/index.cjs.map +3 -3
  84. package/build/components/image-editor/zoom-dropdown.cjs +0 -1
  85. package/build/components/image-editor/zoom-dropdown.cjs.map +2 -2
  86. package/build/components/image-size-control/index.cjs +3 -7
  87. package/build/components/image-size-control/index.cjs.map +2 -2
  88. package/build/components/inner-content/index.cjs +107 -0
  89. package/build/components/inner-content/index.cjs.map +7 -0
  90. package/build/components/inserter/hooks/use-block-types-state.cjs +10 -2
  91. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  92. package/build/components/inserter/media-tab/hooks.cjs +67 -12
  93. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  94. package/build/components/inserter/media-tab/media-list.cjs +3 -1
  95. package/build/components/inserter/media-tab/media-list.cjs.map +2 -2
  96. package/build/components/inserter/media-tab/media-panel.cjs +287 -28
  97. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  98. package/build/components/inserter/media-tab/media-preview.cjs +32 -17
  99. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  100. package/build/components/inserter/media-tab/media-tab.cjs +26 -6
  101. package/build/components/inserter/media-tab/media-tab.cjs.map +2 -2
  102. package/build/components/inserter/mobile-tab-navigation.cjs +6 -1
  103. package/build/components/inserter/mobile-tab-navigation.cjs.map +2 -2
  104. package/build/components/inserter/no-results.cjs +2 -2
  105. package/build/components/inserter/no-results.cjs.map +2 -2
  106. package/build/components/inserter/preview-panel.cjs +2 -1
  107. package/build/components/inserter/preview-panel.cjs.map +2 -2
  108. package/build/components/inserter-list-item/index.cjs +8 -2
  109. package/build/components/inserter-list-item/index.cjs.map +2 -2
  110. package/build/components/keyboard-shortcuts/index.cjs +19 -11
  111. package/build/components/keyboard-shortcuts/index.cjs.map +2 -2
  112. package/build/components/letter-spacing-control/index.cjs +0 -24
  113. package/build/components/letter-spacing-control/index.cjs.map +3 -3
  114. package/build/components/line-height-control/index.cjs +6 -22
  115. package/build/components/line-height-control/index.cjs.map +3 -3
  116. package/build/components/list-view/block-select-button.cjs +90 -84
  117. package/build/components/list-view/block-select-button.cjs.map +2 -2
  118. package/build/components/list-view/block.cjs +61 -21
  119. package/build/components/list-view/block.cjs.map +2 -2
  120. package/build/components/list-view/expander.cjs +1 -1
  121. package/build/components/list-view/expander.cjs.map +2 -2
  122. package/build/components/list-view/use-list-view-client-ids.cjs +2 -2
  123. package/build/components/list-view/use-list-view-client-ids.cjs.map +2 -2
  124. package/build/components/media-placeholder/index.cjs +0 -1
  125. package/build/components/media-placeholder/index.cjs.map +2 -2
  126. package/build/components/observe-typing/index.cjs +4 -3
  127. package/build/components/observe-typing/index.cjs.map +2 -2
  128. package/build/components/preset-input-control/custom-value-controls.cjs +1 -3
  129. package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
  130. package/build/components/preset-input-control/index.cjs +1 -3
  131. package/build/components/preset-input-control/index.cjs.map +2 -2
  132. package/build/components/resolution-tool/index.cjs +1 -2
  133. package/build/components/resolution-tool/index.cjs.map +2 -2
  134. package/build/components/rich-text/event-listeners/before-input-rules.cjs +3 -4
  135. package/build/components/rich-text/event-listeners/before-input-rules.cjs.map +3 -3
  136. package/build/components/rich-text/event-listeners/delete.cjs +2 -3
  137. package/build/components/rich-text/event-listeners/delete.cjs.map +3 -3
  138. package/build/components/rich-text/event-listeners/enter.cjs +3 -2
  139. package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
  140. package/build/components/rich-text/event-listeners/input-events.cjs +3 -3
  141. package/build/components/rich-text/event-listeners/input-events.cjs.map +3 -3
  142. package/build/components/rich-text/event-listeners/input-rules.cjs +3 -4
  143. package/build/components/rich-text/event-listeners/input-rules.cjs.map +3 -3
  144. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs +3 -3
  145. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs.map +3 -3
  146. package/build/components/rich-text/event-listeners/paste-handler.cjs +2 -1
  147. package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
  148. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs +3 -3
  149. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs.map +3 -3
  150. package/build/components/rich-text/event-listeners/shortcuts.cjs +3 -3
  151. package/build/components/rich-text/event-listeners/shortcuts.cjs.map +3 -3
  152. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs +3 -3
  153. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +3 -3
  154. package/build/components/rich-text/index.cjs +66 -17
  155. package/build/components/rich-text/index.cjs.map +2 -2
  156. package/build/components/text-alignment-control/index.cjs +0 -1
  157. package/build/components/text-alignment-control/index.cjs.map +2 -2
  158. package/build/components/text-decoration-control/index.cjs +0 -1
  159. package/build/components/text-decoration-control/index.cjs.map +2 -2
  160. package/build/components/text-indent-control/index.cjs +0 -8
  161. package/build/components/text-indent-control/index.cjs.map +2 -2
  162. package/build/components/text-transform-control/index.cjs +0 -1
  163. package/build/components/text-transform-control/index.cjs.map +2 -2
  164. package/build/components/typewriter/index.cjs +129 -136
  165. package/build/components/typewriter/index.cjs.map +3 -3
  166. package/build/components/use-block-commands/index.cjs +21 -17
  167. package/build/components/use-block-commands/index.cjs.map +2 -2
  168. package/build/components/use-block-display-information/index.cjs +10 -8
  169. package/build/components/use-block-display-information/index.cjs.map +2 -2
  170. package/build/components/use-on-block-drop/index.cjs +3 -7
  171. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  172. package/build/components/writing-flow/index.cjs +12 -1
  173. package/build/components/writing-flow/index.cjs.map +3 -3
  174. package/build/components/writing-flow/use-arrow-nav.cjs +18 -5
  175. package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
  176. package/build/components/writing-flow/use-click-selection.cjs +2 -2
  177. package/build/components/writing-flow/use-click-selection.cjs.map +2 -2
  178. package/build/components/writing-flow/use-clipboard-handler.cjs +4 -1
  179. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  180. package/build/components/writing-flow/use-drag-selection.cjs +3 -8
  181. package/build/components/writing-flow/use-drag-selection.cjs.map +2 -2
  182. package/build/components/writing-flow/use-editable-root.cjs +112 -0
  183. package/build/components/writing-flow/use-editable-root.cjs.map +7 -0
  184. package/build/components/writing-flow/use-home-end.cjs +64 -0
  185. package/build/components/writing-flow/use-home-end.cjs.map +7 -0
  186. package/build/components/writing-flow/use-input.cjs +15 -5
  187. package/build/components/writing-flow/use-input.cjs.map +2 -2
  188. package/build/components/writing-flow/use-multi-selection.cjs +2 -2
  189. package/build/components/writing-flow/use-multi-selection.cjs.map +2 -2
  190. package/build/components/writing-flow/use-select-all.cjs +14 -2
  191. package/build/components/writing-flow/use-select-all.cjs.map +2 -2
  192. package/build/components/writing-flow/use-selection-observer.cjs +126 -20
  193. package/build/components/writing-flow/use-selection-observer.cjs.map +3 -3
  194. package/build/components/writing-flow/utils.cjs +39 -2
  195. package/build/components/writing-flow/utils.cjs.map +2 -2
  196. package/build/components/writing-mode-control/index.cjs +0 -1
  197. package/build/components/writing-mode-control/index.cjs.map +2 -2
  198. package/build/hooks/background.cjs +3 -2
  199. package/build/hooks/background.cjs.map +2 -2
  200. package/build/hooks/block-fields/rich-text/index.cjs +2 -3
  201. package/build/hooks/block-fields/rich-text/index.cjs.map +3 -3
  202. package/build/hooks/elements.cjs +1 -1
  203. package/build/hooks/elements.cjs.map +2 -2
  204. package/build/hooks/font-size.cjs +1 -2
  205. package/build/hooks/font-size.cjs.map +2 -2
  206. package/build/hooks/grid-visualizer.cjs +5 -3
  207. package/build/hooks/grid-visualizer.cjs.map +2 -2
  208. package/build/hooks/layout-child.cjs +22 -12
  209. package/build/hooks/layout-child.cjs.map +3 -3
  210. package/build/hooks/layout.cjs +33 -16
  211. package/build/hooks/layout.cjs.map +3 -3
  212. package/build/hooks/position.cjs +36 -16
  213. package/build/hooks/position.cjs.map +2 -2
  214. package/build/hooks/states.cjs +29 -12
  215. package/build/hooks/states.cjs.map +3 -3
  216. package/build/hooks/style.cjs +31 -9
  217. package/build/hooks/style.cjs.map +3 -3
  218. package/build/hooks/text-align.cjs +36 -6
  219. package/build/hooks/text-align.cjs.map +3 -3
  220. package/build/hooks/typography.cjs +1 -1
  221. package/build/hooks/typography.cjs.map +2 -2
  222. package/build/layouts/constrained.cjs +35 -27
  223. package/build/layouts/constrained.cjs.map +2 -2
  224. package/build/layouts/flex.cjs +27 -22
  225. package/build/layouts/flex.cjs.map +2 -2
  226. package/build/layouts/grid.cjs +51 -11
  227. package/build/layouts/grid.cjs.map +2 -2
  228. package/build/private-apis.cjs +4 -1
  229. package/build/private-apis.cjs.map +3 -3
  230. package/build/store/actions.cjs +2 -2
  231. package/build/store/actions.cjs.map +2 -2
  232. package/build/store/private-keys.cjs +3 -0
  233. package/build/store/private-keys.cjs.map +2 -2
  234. package/build/store/private-selectors.cjs +85 -6
  235. package/build/store/private-selectors.cjs.map +3 -3
  236. package/build/store/selectors.cjs +13 -0
  237. package/build/store/selectors.cjs.map +2 -2
  238. package/build/utils/block-bindings.cjs +29 -0
  239. package/build/utils/block-bindings.cjs.map +2 -2
  240. package/build/utils/dom.cjs +14 -0
  241. package/build/utils/dom.cjs.map +2 -2
  242. package/build-module/autocompleters/block.mjs +10 -2
  243. package/build-module/autocompleters/block.mjs.map +2 -2
  244. package/build-module/components/background-image-control/index.mjs +0 -2
  245. package/build-module/components/background-image-control/index.mjs.map +2 -2
  246. package/build-module/components/block-canvas/index.mjs +7 -2
  247. package/build-module/components/block-canvas/index.mjs.map +2 -2
  248. package/build-module/components/block-controls/groups.mjs +3 -1
  249. package/build-module/components/block-controls/groups.mjs.map +2 -2
  250. package/build-module/components/block-edit/edit.mjs +11 -18
  251. package/build-module/components/block-edit/edit.mjs.map +2 -2
  252. package/build-module/components/block-inspector/edit-contents.mjs +4 -1
  253. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  254. package/build-module/components/block-inspector/index.mjs +2 -3
  255. package/build-module/components/block-inspector/index.mjs.map +2 -2
  256. package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
  257. package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
  258. package/build-module/components/block-list/block.mjs +9 -3
  259. package/build-module/components/block-list/block.mjs.map +3 -3
  260. package/build-module/components/block-list/index.mjs +1 -3
  261. package/build-module/components/block-list/index.mjs.map +2 -2
  262. package/build-module/components/block-list/use-block-props/index.mjs +3 -1
  263. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  264. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs +9 -4
  265. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs.map +2 -2
  266. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +12 -4
  267. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
  268. package/build-module/components/block-styles/use-styles-for-block.mjs +2 -1
  269. package/build-module/components/block-styles/use-styles-for-block.mjs.map +2 -2
  270. package/build-module/components/block-title/use-block-display-title.mjs +7 -2
  271. package/build-module/components/block-title/use-block-display-title.mjs.map +2 -2
  272. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +10 -14
  273. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  274. package/build-module/components/block-toolbar/index.mjs +43 -24
  275. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  276. package/build-module/components/block-tools/index.mjs +7 -2
  277. package/build-module/components/block-tools/index.mjs.map +2 -2
  278. package/build-module/components/block-variation-transforms/index.mjs +0 -1
  279. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  280. package/build-module/components/block-visibility/modal.mjs +22 -10
  281. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  282. package/build-module/components/block-visibility/use-block-visibility.mjs +17 -7
  283. package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
  284. package/build-module/components/block-visibility/utils.mjs +18 -3
  285. package/build-module/components/block-visibility/utils.mjs.map +2 -2
  286. package/build-module/components/block-visibility/viewport-menu-item.mjs +7 -1
  287. package/build-module/components/block-visibility/viewport-menu-item.mjs.map +2 -2
  288. package/build-module/components/block-visibility/viewport-toolbar.mjs +5 -0
  289. package/build-module/components/block-visibility/viewport-toolbar.mjs.map +2 -2
  290. package/build-module/components/block-visibility/viewport-visibility-info.mjs +5 -1
  291. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  292. package/build-module/components/child-layout-control/index.mjs +0 -6
  293. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  294. package/build-module/components/colors-gradients/control.mjs +5 -5
  295. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  296. package/build-module/components/date-format-picker/index.mjs +0 -1
  297. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  298. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +1 -2
  299. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  300. package/build-module/components/dimensions-tool/scale-tool.mjs +0 -1
  301. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  302. package/build-module/components/dimensions-tool/width-height-tool.mjs +2 -4
  303. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  304. package/build-module/components/font-appearance-control/index.mjs +6 -15
  305. package/build-module/components/font-appearance-control/index.mjs.map +2 -2
  306. package/build-module/components/font-family/index.mjs +6 -15
  307. package/build-module/components/font-family/index.mjs.map +2 -2
  308. package/build-module/components/font-sizes/font-size-picker.mjs +1 -2
  309. package/build-module/components/font-sizes/font-size-picker.mjs.map +2 -2
  310. package/build-module/components/global-styles/border-panel.mjs +0 -1
  311. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  312. package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
  313. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  314. package/build-module/components/global-styles/state-control-badges.mjs +41 -5
  315. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  316. package/build-module/components/global-styles/typography-panel.mjs +4 -11
  317. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  318. package/build-module/components/height-control/index.mjs +0 -2
  319. package/build-module/components/height-control/index.mjs.map +2 -2
  320. package/build-module/components/html-element-control/index.mjs +0 -1
  321. package/build-module/components/html-element-control/index.mjs.map +2 -2
  322. package/build-module/components/image-editor/index.mjs +5 -0
  323. package/build-module/components/image-editor/index.mjs.map +2 -2
  324. package/build-module/components/image-editor/zoom-dropdown.mjs +0 -1
  325. package/build-module/components/image-editor/zoom-dropdown.mjs.map +2 -2
  326. package/build-module/components/image-size-control/index.mjs +3 -7
  327. package/build-module/components/image-size-control/index.mjs.map +2 -2
  328. package/build-module/components/inner-content/index.mjs +82 -0
  329. package/build-module/components/inner-content/index.mjs.map +7 -0
  330. package/build-module/components/inserter/hooks/use-block-types-state.mjs +10 -2
  331. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  332. package/build-module/components/inserter/media-tab/hooks.mjs +66 -12
  333. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  334. package/build-module/components/inserter/media-tab/media-list.mjs +3 -1
  335. package/build-module/components/inserter/media-tab/media-list.mjs.map +2 -2
  336. package/build-module/components/inserter/media-tab/media-panel.mjs +297 -32
  337. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  338. package/build-module/components/inserter/media-tab/media-preview.mjs +33 -18
  339. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  340. package/build-module/components/inserter/media-tab/media-tab.mjs +27 -7
  341. package/build-module/components/inserter/media-tab/media-tab.mjs.map +2 -2
  342. package/build-module/components/inserter/mobile-tab-navigation.mjs +6 -1
  343. package/build-module/components/inserter/mobile-tab-navigation.mjs.map +2 -2
  344. package/build-module/components/inserter/no-results.mjs +2 -2
  345. package/build-module/components/inserter/no-results.mjs.map +2 -2
  346. package/build-module/components/inserter/preview-panel.mjs +2 -1
  347. package/build-module/components/inserter/preview-panel.mjs.map +2 -2
  348. package/build-module/components/inserter-list-item/index.mjs +8 -2
  349. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  350. package/build-module/components/keyboard-shortcuts/index.mjs +19 -11
  351. package/build-module/components/keyboard-shortcuts/index.mjs.map +2 -2
  352. package/build-module/components/letter-spacing-control/index.mjs +0 -14
  353. package/build-module/components/letter-spacing-control/index.mjs.map +2 -2
  354. package/build-module/components/line-height-control/index.mjs +6 -12
  355. package/build-module/components/line-height-control/index.mjs.map +2 -2
  356. package/build-module/components/list-view/block-select-button.mjs +90 -84
  357. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  358. package/build-module/components/list-view/block.mjs +61 -21
  359. package/build-module/components/list-view/block.mjs.map +2 -2
  360. package/build-module/components/list-view/expander.mjs +1 -1
  361. package/build-module/components/list-view/expander.mjs.map +2 -2
  362. package/build-module/components/list-view/use-list-view-client-ids.mjs +2 -2
  363. package/build-module/components/list-view/use-list-view-client-ids.mjs.map +2 -2
  364. package/build-module/components/media-placeholder/index.mjs +0 -1
  365. package/build-module/components/media-placeholder/index.mjs.map +2 -2
  366. package/build-module/components/observe-typing/index.mjs +4 -3
  367. package/build-module/components/observe-typing/index.mjs.map +2 -2
  368. package/build-module/components/preset-input-control/custom-value-controls.mjs +1 -3
  369. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  370. package/build-module/components/preset-input-control/index.mjs +1 -3
  371. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  372. package/build-module/components/resolution-tool/index.mjs +1 -2
  373. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  374. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs +8 -5
  375. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
  376. package/build-module/components/rich-text/event-listeners/delete.mjs +7 -4
  377. package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
  378. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -3
  379. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  380. package/build-module/components/rich-text/event-listeners/input-events.mjs +3 -3
  381. package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
  382. package/build-module/components/rich-text/event-listeners/input-rules.mjs +8 -5
  383. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  384. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +3 -3
  385. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
  386. package/build-module/components/rich-text/event-listeners/paste-handler.mjs +8 -2
  387. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
  388. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +3 -3
  389. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
  390. package/build-module/components/rich-text/event-listeners/shortcuts.mjs +3 -3
  391. package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
  392. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +3 -3
  393. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
  394. package/build-module/components/rich-text/index.mjs +64 -13
  395. package/build-module/components/rich-text/index.mjs.map +2 -2
  396. package/build-module/components/text-alignment-control/index.mjs +0 -1
  397. package/build-module/components/text-alignment-control/index.mjs.map +2 -2
  398. package/build-module/components/text-decoration-control/index.mjs +0 -1
  399. package/build-module/components/text-decoration-control/index.mjs.map +2 -2
  400. package/build-module/components/text-indent-control/index.mjs +0 -8
  401. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  402. package/build-module/components/text-transform-control/index.mjs +0 -1
  403. package/build-module/components/text-transform-control/index.mjs.map +2 -2
  404. package/build-module/components/typewriter/index.mjs +129 -136
  405. package/build-module/components/typewriter/index.mjs.map +2 -2
  406. package/build-module/components/use-block-commands/index.mjs +21 -17
  407. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  408. package/build-module/components/use-block-display-information/index.mjs +10 -8
  409. package/build-module/components/use-block-display-information/index.mjs.map +2 -2
  410. package/build-module/components/use-on-block-drop/index.mjs +4 -7
  411. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  412. package/build-module/components/writing-flow/index.mjs +12 -1
  413. package/build-module/components/writing-flow/index.mjs.map +2 -2
  414. package/build-module/components/writing-flow/use-arrow-nav.mjs +19 -6
  415. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
  416. package/build-module/components/writing-flow/use-click-selection.mjs +2 -2
  417. package/build-module/components/writing-flow/use-click-selection.mjs.map +2 -2
  418. package/build-module/components/writing-flow/use-clipboard-handler.mjs +5 -2
  419. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  420. package/build-module/components/writing-flow/use-drag-selection.mjs +1 -6
  421. package/build-module/components/writing-flow/use-drag-selection.mjs.map +2 -2
  422. package/build-module/components/writing-flow/use-editable-root.mjs +86 -0
  423. package/build-module/components/writing-flow/use-editable-root.mjs.map +7 -0
  424. package/build-module/components/writing-flow/use-home-end.mjs +43 -0
  425. package/build-module/components/writing-flow/use-home-end.mjs.map +7 -0
  426. package/build-module/components/writing-flow/use-input.mjs +15 -5
  427. package/build-module/components/writing-flow/use-input.mjs.map +2 -2
  428. package/build-module/components/writing-flow/use-multi-selection.mjs +2 -2
  429. package/build-module/components/writing-flow/use-multi-selection.mjs.map +2 -2
  430. package/build-module/components/writing-flow/use-select-all.mjs +19 -3
  431. package/build-module/components/writing-flow/use-select-all.mjs.map +2 -2
  432. package/build-module/components/writing-flow/use-selection-observer.mjs +128 -19
  433. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  434. package/build-module/components/writing-flow/utils.mjs +35 -1
  435. package/build-module/components/writing-flow/utils.mjs.map +2 -2
  436. package/build-module/components/writing-mode-control/index.mjs +0 -1
  437. package/build-module/components/writing-mode-control/index.mjs.map +2 -2
  438. package/build-module/hooks/background.mjs +3 -2
  439. package/build-module/hooks/background.mjs.map +2 -2
  440. package/build-module/hooks/block-fields/rich-text/index.mjs +2 -6
  441. package/build-module/hooks/block-fields/rich-text/index.mjs.map +2 -2
  442. package/build-module/hooks/elements.mjs +1 -1
  443. package/build-module/hooks/elements.mjs.map +2 -2
  444. package/build-module/hooks/font-size.mjs +1 -2
  445. package/build-module/hooks/font-size.mjs.map +2 -2
  446. package/build-module/hooks/grid-visualizer.mjs +5 -3
  447. package/build-module/hooks/grid-visualizer.mjs.map +2 -2
  448. package/build-module/hooks/layout-child.mjs +22 -12
  449. package/build-module/hooks/layout-child.mjs.map +2 -2
  450. package/build-module/hooks/layout.mjs +32 -16
  451. package/build-module/hooks/layout.mjs.map +2 -2
  452. package/build-module/hooks/position.mjs +38 -18
  453. package/build-module/hooks/position.mjs.map +2 -2
  454. package/build-module/hooks/states.mjs +29 -12
  455. package/build-module/hooks/states.mjs.map +2 -2
  456. package/build-module/hooks/style.mjs +40 -11
  457. package/build-module/hooks/style.mjs.map +2 -2
  458. package/build-module/hooks/text-align.mjs +39 -10
  459. package/build-module/hooks/text-align.mjs.map +2 -2
  460. package/build-module/hooks/typography.mjs +1 -1
  461. package/build-module/hooks/typography.mjs.map +2 -2
  462. package/build-module/layouts/constrained.mjs +35 -27
  463. package/build-module/layouts/constrained.mjs.map +2 -2
  464. package/build-module/layouts/flex.mjs +27 -22
  465. package/build-module/layouts/flex.mjs.map +2 -2
  466. package/build-module/layouts/grid.mjs +52 -11
  467. package/build-module/layouts/grid.mjs.map +2 -2
  468. package/build-module/private-apis.mjs +5 -1
  469. package/build-module/private-apis.mjs.map +2 -2
  470. package/build-module/store/actions.mjs +3 -3
  471. package/build-module/store/actions.mjs.map +2 -2
  472. package/build-module/store/private-keys.mjs +2 -0
  473. package/build-module/store/private-keys.mjs.map +2 -2
  474. package/build-module/store/private-selectors.mjs +84 -6
  475. package/build-module/store/private-selectors.mjs.map +2 -2
  476. package/build-module/store/selectors.mjs +13 -0
  477. package/build-module/store/selectors.mjs.map +2 -2
  478. package/build-module/utils/block-bindings.mjs +28 -0
  479. package/build-module/utils/block-bindings.mjs.map +2 -2
  480. package/build-module/utils/dom.mjs +13 -0
  481. package/build-module/utils/dom.mjs.map +2 -2
  482. package/build-style/content-rtl.css +15 -14
  483. package/build-style/content.css +15 -14
  484. package/build-style/default-editor-styles-rtl.css +1 -1
  485. package/build-style/default-editor-styles.css +1 -1
  486. package/build-style/style-rtl.css +144 -47
  487. package/build-style/style.css +144 -47
  488. package/build-types/components/block-context/index.d.ts +7 -0
  489. package/build-types/components/block-context/index.d.ts.map +1 -1
  490. package/build-types/utils/block-bindings.d.ts +19 -0
  491. package/build-types/utils/block-bindings.d.ts.map +1 -1
  492. package/build-types/utils/dom.d.ts +11 -0
  493. package/build-types/utils/dom.d.ts.map +1 -1
  494. package/build-types/utils/get-px-from-css-unit.d.ts +2 -2
  495. package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -1
  496. package/build-types/utils/pasting.d.ts +1 -1
  497. package/build-types/utils/pasting.d.ts.map +1 -1
  498. package/package.json +46 -44
  499. package/src/autocompleters/block.js +10 -3
  500. package/src/autocompleters/test/block.js +53 -0
  501. package/src/components/background-image-control/index.js +0 -2
  502. package/src/components/block-canvas/index.js +9 -2
  503. package/src/components/block-card/style.scss +1 -1
  504. package/src/components/block-controls/groups.js +2 -0
  505. package/src/components/block-edit/edit.js +13 -31
  506. package/src/components/block-inspector/edit-contents.js +5 -1
  507. package/src/components/block-inspector/index.js +3 -2
  508. package/src/components/block-list/block-invalid-warning.js +8 -19
  509. package/src/components/block-list/block.js +6 -0
  510. package/src/components/block-list/index.js +0 -2
  511. package/src/components/block-list/use-block-props/index.js +2 -0
  512. package/src/components/block-list/use-block-props/use-focus-first-element.js +23 -4
  513. package/src/components/block-list/use-block-props/use-focus-handler.js +34 -9
  514. package/src/components/block-lock/style.scss +1 -1
  515. package/src/components/block-manager/style.scss +1 -1
  516. package/src/components/block-navigation/style.scss +1 -1
  517. package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
  518. package/src/components/block-quick-navigation/style.scss +1 -3
  519. package/src/components/block-styles/style.scss +2 -2
  520. package/src/components/block-styles/use-styles-for-block.js +1 -0
  521. package/src/components/block-title/use-block-display-title.js +7 -2
  522. package/src/components/block-toolbar/block-toolbar-icon.js +11 -16
  523. package/src/components/block-toolbar/index.js +41 -18
  524. package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
  525. package/src/components/block-tools/index.js +7 -0
  526. package/src/components/block-types-list/style.scss +0 -1
  527. package/src/components/block-variation-transforms/index.js +0 -1
  528. package/src/components/block-visibility/modal.js +24 -10
  529. package/src/components/block-visibility/style.scss +1 -1
  530. package/src/components/block-visibility/test/use-block-visibility.js +128 -35
  531. package/src/components/block-visibility/test/utils.js +11 -0
  532. package/src/components/block-visibility/use-block-visibility.js +33 -11
  533. package/src/components/block-visibility/utils.js +31 -6
  534. package/src/components/block-visibility/viewport-menu-item.js +10 -1
  535. package/src/components/block-visibility/viewport-toolbar.js +6 -0
  536. package/src/components/block-visibility/viewport-visibility-info.js +5 -1
  537. package/src/components/button-block-appender/content.scss +1 -7
  538. package/src/components/child-layout-control/index.js +0 -6
  539. package/src/components/color-palette/test/__snapshots__/control.js.snap +13 -108
  540. package/src/components/colors-gradients/control.js +4 -4
  541. package/src/components/colors-gradients/style.scss +2 -2
  542. package/src/components/date-format-picker/index.js +0 -1
  543. package/src/components/dimensions-tool/aspect-ratio-tool.js +0 -1
  544. package/src/components/dimensions-tool/scale-tool.js +0 -1
  545. package/src/components/dimensions-tool/width-height-tool.js +0 -2
  546. package/src/components/font-appearance-control/index.js +6 -19
  547. package/src/components/font-family/README.md +0 -9
  548. package/src/components/font-family/index.js +6 -19
  549. package/src/components/font-family/stories/index.story.jsx +1 -2
  550. package/src/components/font-sizes/font-size-picker.js +0 -1
  551. package/src/components/global-styles/border-panel.js +0 -1
  552. package/src/components/global-styles/dimensions-panel.js +0 -3
  553. package/src/components/global-styles/state-control-badges.js +45 -6
  554. package/src/components/global-styles/style.scss +5 -0
  555. package/src/components/global-styles/test/state-control-badges.js +65 -0
  556. package/src/components/global-styles/typography-panel.js +0 -7
  557. package/src/components/height-control/index.js +0 -2
  558. package/src/components/html-element-control/index.js +0 -1
  559. package/src/components/iframe/content.scss +3 -3
  560. package/src/components/image-editor/index.js +22 -0
  561. package/src/components/image-editor/zoom-dropdown.js +0 -1
  562. package/src/components/image-size-control/index.js +0 -4
  563. package/src/components/inner-content/index.js +119 -0
  564. package/src/components/inner-content/test/index.js +81 -0
  565. package/src/components/inserter/hooks/use-block-types-state.js +10 -2
  566. package/src/components/inserter/media-tab/hooks.js +114 -16
  567. package/src/components/inserter/media-tab/media-list.js +2 -0
  568. package/src/components/inserter/media-tab/media-panel.js +354 -19
  569. package/src/components/inserter/media-tab/media-preview.js +34 -17
  570. package/src/components/inserter/media-tab/media-tab.js +20 -2
  571. package/src/components/inserter/media-tab/test/hooks.js +267 -0
  572. package/src/components/inserter/media-tab/test/media-panel.js +127 -0
  573. package/src/components/inserter/mobile-tab-navigation.js +6 -1
  574. package/src/components/inserter/no-results.js +2 -2
  575. package/src/components/inserter/preview-panel.js +1 -0
  576. package/src/components/inserter/style.scss +115 -3
  577. package/src/components/inserter-list-item/index.js +8 -2
  578. package/src/components/inserter-list-item/style.scss +0 -15
  579. package/src/components/keyboard-shortcuts/index.js +28 -11
  580. package/src/components/letter-spacing-control/README.md +0 -8
  581. package/src/components/letter-spacing-control/index.js +5 -23
  582. package/src/components/letter-spacing-control/stories/index.story.jsx +0 -12
  583. package/src/components/line-height-control/README.md +0 -8
  584. package/src/components/line-height-control/index.js +6 -16
  585. package/src/components/line-height-control/stories/index.story.jsx +0 -1
  586. package/src/components/line-height-control/test/index.js +1 -7
  587. package/src/components/link-control/style.scss +2 -2
  588. package/src/components/link-control/test/index.js +6 -6
  589. package/src/components/link-picker/style.scss +1 -2
  590. package/src/components/link-picker/test/index.js +3 -1
  591. package/src/components/list-view/block-select-button.js +5 -1
  592. package/src/components/list-view/block.js +69 -23
  593. package/src/components/list-view/expander.js +5 -1
  594. package/src/components/list-view/style.scss +23 -5
  595. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  596. package/src/components/media-placeholder/index.js +0 -1
  597. package/src/components/multi-selection-inspector/style.scss +1 -1
  598. package/src/components/observe-typing/index.js +9 -4
  599. package/src/components/preset-input-control/custom-value-controls.js +0 -2
  600. package/src/components/preset-input-control/index.js +0 -2
  601. package/src/components/resolution-tool/index.js +0 -1
  602. package/src/components/responsive-block-control/style.scss +1 -1
  603. package/src/components/responsive-block-control/test/index.js +1 -5
  604. package/src/components/rich-text/event-listeners/before-input-rules.js +8 -5
  605. package/src/components/rich-text/event-listeners/delete.js +7 -4
  606. package/src/components/rich-text/event-listeners/enter.js +10 -4
  607. package/src/components/rich-text/event-listeners/input-events.js +4 -3
  608. package/src/components/rich-text/event-listeners/input-rules.js +8 -5
  609. package/src/components/rich-text/event-listeners/insert-replacement-text.js +4 -3
  610. package/src/components/rich-text/event-listeners/paste-handler.js +15 -3
  611. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +4 -3
  612. package/src/components/rich-text/event-listeners/shortcuts.js +4 -3
  613. package/src/components/rich-text/event-listeners/undo-automatic-change.js +4 -3
  614. package/src/components/rich-text/index.js +94 -25
  615. package/src/components/skip-to-selected-block/style.scss +1 -1
  616. package/src/components/text-alignment-control/index.js +0 -1
  617. package/src/components/text-decoration-control/index.js +0 -1
  618. package/src/components/text-indent-control/index.js +7 -16
  619. package/src/components/text-transform-control/index.js +0 -1
  620. package/src/components/typewriter/index.js +228 -224
  621. package/src/components/use-block-commands/index.js +27 -17
  622. package/src/components/use-block-display-information/index.js +9 -13
  623. package/src/components/use-block-display-information/test/index.js +47 -9
  624. package/src/components/use-on-block-drop/index.js +4 -7
  625. package/src/components/writing-flow/index.js +15 -1
  626. package/src/components/writing-flow/use-arrow-nav.js +39 -12
  627. package/src/components/writing-flow/use-click-selection.js +2 -3
  628. package/src/components/writing-flow/use-clipboard-handler.js +5 -2
  629. package/src/components/writing-flow/use-drag-selection.js +1 -14
  630. package/src/components/writing-flow/use-editable-root.js +182 -0
  631. package/src/components/writing-flow/use-home-end.js +63 -0
  632. package/src/components/writing-flow/use-input.js +25 -8
  633. package/src/components/writing-flow/use-multi-selection.js +2 -3
  634. package/src/components/writing-flow/use-select-all.js +33 -3
  635. package/src/components/writing-flow/use-selection-observer.js +197 -38
  636. package/src/components/writing-flow/utils.js +83 -0
  637. package/src/components/writing-mode-control/index.js +0 -1
  638. package/src/hooks/background.js +7 -9
  639. package/src/hooks/block-fields/link/styles.scss +1 -6
  640. package/src/hooks/block-fields/media/styles.scss +1 -6
  641. package/src/hooks/block-fields/rich-text/index.js +6 -9
  642. package/src/hooks/block-hooks.scss +15 -0
  643. package/src/hooks/elements.js +0 -1
  644. package/src/hooks/font-size.js +0 -1
  645. package/src/hooks/grid-visualizer.js +40 -36
  646. package/src/hooks/layout-child.js +19 -9
  647. package/src/hooks/layout.js +53 -35
  648. package/src/hooks/position.js +44 -23
  649. package/src/hooks/states.js +36 -13
  650. package/src/hooks/style.js +67 -17
  651. package/src/hooks/test/cross-origin-isolation.js +0 -4
  652. package/src/hooks/test/layout.js +75 -1
  653. package/src/hooks/test/style.js +29 -0
  654. package/src/hooks/test/text-align.js +34 -1
  655. package/src/hooks/text-align.js +41 -10
  656. package/src/hooks/typography.js +0 -1
  657. package/src/layouts/constrained.js +56 -29
  658. package/src/layouts/flex.js +5 -4
  659. package/src/layouts/grid.js +59 -9
  660. package/src/layouts/test/constrained.js +91 -0
  661. package/src/layouts/test/grid.js +71 -0
  662. package/src/private-apis.js +4 -0
  663. package/src/store/actions.js +43 -14
  664. package/src/store/private-keys.js +1 -0
  665. package/src/store/private-selectors.js +166 -9
  666. package/src/store/selectors.js +41 -0
  667. package/src/store/test/actions.js +1 -1
  668. package/src/store/test/private-selectors.js +533 -0
  669. package/src/store/test/reducer.js +11 -11
  670. package/src/store/test/selectors.js +133 -0
  671. package/src/style.scss +1 -0
  672. package/src/utils/block-bindings.ts +50 -0
  673. package/src/utils/dom.ts +33 -0
  674. package/src/utils/test/block-bindings.js +181 -0
  675. package/build/components/rich-text/input-event.cjs +0 -50
  676. package/build/components/rich-text/input-event.cjs.map +0 -7
  677. package/build/components/rich-text/shortcut.cjs +0 -51
  678. package/build/components/rich-text/shortcut.cjs.map +0 -7
  679. package/build-module/components/rich-text/input-event.mjs +0 -25
  680. package/build-module/components/rich-text/input-event.mjs.map +0 -7
  681. package/build-module/components/rich-text/shortcut.mjs +0 -26
  682. package/build-module/components/rich-text/shortcut.mjs.map +0 -7
  683. package/src/components/rich-text/input-event.js +0 -31
  684. package/src/components/rich-text/shortcut.js +0 -32
@@ -20,12 +20,40 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // packages/block-editor/src/utils/block-bindings.ts
21
21
  var block_bindings_exports = {};
22
22
  __export(block_bindings_exports, {
23
+ getBlockBindingsContext: () => getBlockBindingsContext,
23
24
  hasPatternOverridesDefaultBinding: () => hasPatternOverridesDefaultBinding,
24
25
  replacePatternOverridesDefaultBinding: () => replacePatternOverridesDefaultBinding
25
26
  });
26
27
  module.exports = __toCommonJS(block_bindings_exports);
27
28
  var DEFAULT_ATTRIBUTE = "__default";
28
29
  var PATTERN_OVERRIDES_SOURCE = "core/pattern-overrides";
30
+ var EMPTY_CONTEXT = {};
31
+ function getBlockBindingsContext(blockContext, blockTypeUsesContext, sources) {
32
+ let context;
33
+ if (blockTypeUsesContext) {
34
+ for (const [key, value] of Object.entries(blockContext)) {
35
+ if (blockTypeUsesContext.includes(key)) {
36
+ if (context === void 0) {
37
+ context = {};
38
+ }
39
+ context[key] = value;
40
+ }
41
+ }
42
+ }
43
+ if (sources) {
44
+ for (const source of sources) {
45
+ source?.usesContext?.forEach((key) => {
46
+ if (key in blockContext) {
47
+ if (context === void 0) {
48
+ context = {};
49
+ }
50
+ context[key] = blockContext[key];
51
+ }
52
+ });
53
+ }
54
+ }
55
+ return context ?? EMPTY_CONTEXT;
56
+ }
29
57
  function hasPatternOverridesDefaultBinding(bindings) {
30
58
  return bindings?.[DEFAULT_ATTRIBUTE]?.source === PATTERN_OVERRIDES_SOURCE;
31
59
  }
@@ -42,6 +70,7 @@ function replacePatternOverridesDefaultBinding(bindings, supportedAttributes) {
42
70
  }
43
71
  // Annotate the CommonJS export names for ESM import in node:
44
72
  0 && (module.exports = {
73
+ getBlockBindingsContext,
45
74
  hasPatternOverridesDefaultBinding,
46
75
  replacePatternOverridesDefaultBinding
47
76
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/block-bindings.ts"],
4
- "sourcesContent": ["type Binding = { source?: string };\ntype Bindings = Record< string, Binding >;\n\nconst DEFAULT_ATTRIBUTE = '__default';\nconst PATTERN_OVERRIDES_SOURCE = 'core/pattern-overrides';\n\n/**\n * Checks if the block has the `__default` binding for pattern overrides.\n *\n * @param bindings A block's bindings from the metadata attribute.\n *\n * @return Whether the block has the `__default` binding for pattern overrides.\n */\nexport function hasPatternOverridesDefaultBinding(\n\tbindings: Bindings | undefined | null\n): bindings is Bindings {\n\treturn bindings?.[ DEFAULT_ATTRIBUTE ]?.source === PATTERN_OVERRIDES_SOURCE;\n}\n\n/**\n * Returns the bindings with the `__default` binding for pattern overrides\n * replaced with the full-set of supported attributes. e.g.:\n *\n * - bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`\n * - bindings returned: `{ content: { source: 'core/pattern-overrides' } }`\n *\n * @param bindings A block's bindings from the metadata attribute.\n * @param supportedAttributes The block's attributes which are supported by block bindings.\n *\n * @return The bindings with default replaced for pattern overrides.\n */\nexport function replacePatternOverridesDefaultBinding(\n\tbindings: Bindings | undefined | null,\n\tsupportedAttributes: string[]\n) {\n\t// The `__default` binding currently only works for pattern overrides.\n\tif ( ! hasPatternOverridesDefaultBinding( bindings ) ) {\n\t\treturn bindings;\n\t}\n\n\tconst bindingsWithDefaults: Bindings = {};\n\tfor ( const attributeName of supportedAttributes ) {\n\t\t// If the block has mixed binding sources, retain any non pattern override bindings.\n\t\tconst bindingSource = bindings[ attributeName ]\n\t\t\t? bindings[ attributeName ]\n\t\t\t: { source: PATTERN_OVERRIDES_SOURCE };\n\t\tbindingsWithDefaults[ attributeName ] = bindingSource;\n\t}\n\n\treturn bindingsWithDefaults;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,IAAM,oBAAoB;AAC1B,IAAM,2BAA2B;AAS1B,SAAS,kCACf,UACuB;AACvB,SAAO,WAAY,iBAAkB,GAAG,WAAW;AACpD;AAcO,SAAS,sCACf,UACA,qBACC;AAED,MAAK,CAAE,kCAAmC,QAAS,GAAI;AACtD,WAAO;AAAA,EACR;AAEA,QAAM,uBAAiC,CAAC;AACxC,aAAY,iBAAiB,qBAAsB;AAElD,UAAM,gBAAgB,SAAU,aAAc,IAC3C,SAAU,aAAc,IACxB,EAAE,QAAQ,yBAAyB;AACtC,yBAAsB,aAAc,IAAI;AAAA,EACzC;AAEA,SAAO;AACR;",
4
+ "sourcesContent": ["type Binding = { source?: string };\ntype Bindings = Record< string, Binding >;\ntype BlockBindingsSource = { usesContext?: readonly string[] };\n\nconst DEFAULT_ATTRIBUTE = '__default';\nconst PATTERN_OVERRIDES_SOURCE = 'core/pattern-overrides';\nconst EMPTY_CONTEXT: Record< string, unknown > = {};\n\n/**\n * Assembles the context made available to a block's bindings sources: the\n * entries of the surrounding block context declared by the block type's\n * `usesContext`, plus the entries declared by the given sources' `usesContext`.\n *\n * Only entries present in the surrounding block context are copied — a\n * declared key with no provider never becomes an own (undefined-valued) key\n * of the result, so `key in context` checks stay meaningful.\n *\n * @param blockContext The surrounding block context.\n * @param blockTypeUsesContext The block type's declared context needs.\n * @param sources Block-bindings sources whose declared context to add.\n *\n * @return The context for resolving the block's bindings.\n */\nexport function getBlockBindingsContext(\n\tblockContext: Record< string, unknown >,\n\tblockTypeUsesContext: readonly string[] | undefined,\n\tsources: readonly ( BlockBindingsSource | undefined )[] | undefined\n): Record< string, unknown > {\n\tlet context: Record< string, unknown > | undefined;\n\tif ( blockTypeUsesContext ) {\n\t\tfor ( const [ key, value ] of Object.entries( blockContext ) ) {\n\t\t\tif ( blockTypeUsesContext.includes( key ) ) {\n\t\t\t\tif ( context === undefined ) {\n\t\t\t\t\tcontext = {};\n\t\t\t\t}\n\t\t\t\tcontext[ key ] = value;\n\t\t\t}\n\t\t}\n\t}\n\tif ( sources ) {\n\t\tfor ( const source of sources ) {\n\t\t\tsource?.usesContext?.forEach( ( key ) => {\n\t\t\t\tif ( key in blockContext ) {\n\t\t\t\t\tif ( context === undefined ) {\n\t\t\t\t\t\tcontext = {};\n\t\t\t\t\t}\n\t\t\t\t\tcontext[ key ] = blockContext[ key ];\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\t// A stable empty object avoids re-renders for consumers that compare the\n\t// context by reference.\n\treturn context ?? EMPTY_CONTEXT;\n}\n\n/**\n * Checks if the block has the `__default` binding for pattern overrides.\n *\n * @param bindings A block's bindings from the metadata attribute.\n *\n * @return Whether the block has the `__default` binding for pattern overrides.\n */\nexport function hasPatternOverridesDefaultBinding(\n\tbindings: Bindings | undefined | null\n): bindings is Bindings {\n\treturn bindings?.[ DEFAULT_ATTRIBUTE ]?.source === PATTERN_OVERRIDES_SOURCE;\n}\n\n/**\n * Returns the bindings with the `__default` binding for pattern overrides\n * replaced with the full-set of supported attributes. e.g.:\n *\n * - bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`\n * - bindings returned: `{ content: { source: 'core/pattern-overrides' } }`\n *\n * @param bindings A block's bindings from the metadata attribute.\n * @param supportedAttributes The block's attributes which are supported by block bindings.\n *\n * @return The bindings with default replaced for pattern overrides.\n */\nexport function replacePatternOverridesDefaultBinding(\n\tbindings: Bindings | undefined | null,\n\tsupportedAttributes: string[]\n) {\n\t// The `__default` binding currently only works for pattern overrides.\n\tif ( ! hasPatternOverridesDefaultBinding( bindings ) ) {\n\t\treturn bindings;\n\t}\n\n\tconst bindingsWithDefaults: Bindings = {};\n\tfor ( const attributeName of supportedAttributes ) {\n\t\t// If the block has mixed binding sources, retain any non pattern override bindings.\n\t\tconst bindingSource = bindings[ attributeName ]\n\t\t\t? bindings[ attributeName ]\n\t\t\t: { source: PATTERN_OVERRIDES_SOURCE };\n\t\tbindingsWithDefaults[ attributeName ] = bindingSource;\n\t}\n\n\treturn bindingsWithDefaults;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,IAAM,oBAAoB;AAC1B,IAAM,2BAA2B;AACjC,IAAM,gBAA2C,CAAC;AAiB3C,SAAS,wBACf,cACA,sBACA,SAC4B;AAC5B,MAAI;AACJ,MAAK,sBAAuB;AAC3B,eAAY,CAAE,KAAK,KAAM,KAAK,OAAO,QAAS,YAAa,GAAI;AAC9D,UAAK,qBAAqB,SAAU,GAAI,GAAI;AAC3C,YAAK,YAAY,QAAY;AAC5B,oBAAU,CAAC;AAAA,QACZ;AACA,gBAAS,GAAI,IAAI;AAAA,MAClB;AAAA,IACD;AAAA,EACD;AACA,MAAK,SAAU;AACd,eAAY,UAAU,SAAU;AAC/B,cAAQ,aAAa,QAAS,CAAE,QAAS;AACxC,YAAK,OAAO,cAAe;AAC1B,cAAK,YAAY,QAAY;AAC5B,sBAAU,CAAC;AAAA,UACZ;AACA,kBAAS,GAAI,IAAI,aAAc,GAAI;AAAA,QACpC;AAAA,MACD,CAAE;AAAA,IACH;AAAA,EACD;AAGA,SAAO,WAAW;AACnB;AASO,SAAS,kCACf,UACuB;AACvB,SAAO,WAAY,iBAAkB,GAAG,WAAW;AACpD;AAcO,SAAS,sCACf,UACA,qBACC;AAED,MAAK,CAAE,kCAAmC,QAAS,GAAI;AACtD,WAAO;AAAA,EACR;AAEA,QAAM,uBAAiC,CAAC;AACxC,aAAY,iBAAiB,qBAAsB;AAElD,UAAM,gBAAgB,SAAU,aAAc,IAC3C,SAAU,aAAc,IACxB,EAAE,QAAQ,yBAAyB;AACtC,yBAAsB,aAAc,IAAI;AAAA,EACzC;AAEA,SAAO;AACR;",
6
6
  "names": []
7
7
  }
@@ -23,6 +23,7 @@ __export(dom_exports, {
23
23
  WITH_OVERFLOW_ELEMENT_BLOCKS: () => WITH_OVERFLOW_ELEMENT_BLOCKS,
24
24
  getBlockClientId: () => getBlockClientId,
25
25
  getElementBounds: () => getElementBounds,
26
+ getSelectionEditableElement: () => getSelectionEditableElement,
26
27
  isElementVisible: () => isElementVisible,
27
28
  isInSameBlock: () => isInSameBlock,
28
29
  isInsideRootBlock: () => isInsideRootBlock,
@@ -41,6 +42,18 @@ function isInsideRootBlock(blockElement, element) {
41
42
  );
42
43
  return parentBlock === blockElement;
43
44
  }
45
+ function getSelectionEditableElement(selection, root) {
46
+ const { anchorNode, focusNode } = selection;
47
+ if (!anchorNode || !focusNode) {
48
+ return;
49
+ }
50
+ const element = anchorNode.nodeType === anchorNode.ELEMENT_NODE ? anchorNode : anchorNode.parentElement;
51
+ const editable = element?.closest('[contenteditable="true"]');
52
+ if (!editable || editable === root || !editable.contains(focusNode)) {
53
+ return;
54
+ }
55
+ return editable;
56
+ }
44
57
  function getBlockClientId(node) {
45
58
  while (node && node.nodeType !== node.ELEMENT_NODE) {
46
59
  node = node.parentNode;
@@ -129,6 +142,7 @@ function getElementBounds(element) {
129
142
  WITH_OVERFLOW_ELEMENT_BLOCKS,
130
143
  getBlockClientId,
131
144
  getElementBounds,
145
+ getSelectionEditableElement,
132
146
  isElementVisible,
133
147
  isInSameBlock,
134
148
  isInsideRootBlock,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/dom.ts"],
4
- "sourcesContent": ["const BLOCK_SELECTOR = '.block-editor-block-list__block';\nconst APPENDER_SELECTOR = '.block-list-appender';\nconst BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';\n\n/**\n * Returns true if two elements are contained within the same block.\n *\n * @param a First element.\n * @param b Second element.\n *\n * @return Whether elements are in the same block.\n */\nexport function isInSameBlock( a: Element, b: Element ) {\n\treturn a.closest( BLOCK_SELECTOR ) === b.closest( BLOCK_SELECTOR );\n}\n\n/**\n * Returns true if an element is considered part of the block and not its inner\n * blocks or appender.\n *\n * @param blockElement Block container element.\n * @param element Element.\n *\n * @return Whether an element is considered part of the block and not\n * its inner blocks or appender.\n */\nexport function isInsideRootBlock( blockElement: Element, element: Element ) {\n\tconst parentBlock = element.closest(\n\t\t[ BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS ].join( ',' )\n\t);\n\treturn parentBlock === blockElement;\n}\n\n/**\n * Finds the block client ID given any DOM node inside the block.\n *\n * @param node DOM node.\n *\n * @return Client ID or undefined if the node is not part of\n * a block.\n */\nexport function getBlockClientId( node: Node | null ) {\n\twhile ( node && node.nodeType !== node.ELEMENT_NODE ) {\n\t\tnode = node.parentNode;\n\t}\n\n\tif ( ! node ) {\n\t\treturn;\n\t}\n\n\tconst elementNode = node as Element;\n\tconst blockNode = elementNode.closest( BLOCK_SELECTOR );\n\n\tif ( ! blockNode ) {\n\t\treturn;\n\t}\n\n\treturn blockNode.id.slice( 'block-'.length );\n}\n\n/**\n * Calculates the union of two rectangles.\n *\n * @param rect1 First rectangle.\n * @param rect2 Second rectangle.\n * @return Union of the two rectangles.\n */\nexport function rectUnion( rect1: DOMRect, rect2: DOMRect ) {\n\tconst left = Math.min( rect1.left, rect2.left );\n\tconst right = Math.max( rect1.right, rect2.right );\n\tconst bottom = Math.max( rect1.bottom, rect2.bottom );\n\tconst top = Math.min( rect1.top, rect2.top );\n\n\treturn new window.DOMRectReadOnly( left, top, right - left, bottom - top );\n}\n\n/**\n * Returns whether an element is visible.\n *\n * @param element Element.\n * @return Whether the element is visible.\n */\nexport function isElementVisible( element: Element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn false;\n\t}\n\n\t// Check for <VisuallyHidden> components.\n\tif ( element.hasAttribute( 'data-visually-hidden' ) ) {\n\t\treturn false;\n\t}\n\n\tconst bounds = element.getBoundingClientRect();\n\tif ( bounds.width === 0 || bounds.height === 0 ) {\n\t\treturn false;\n\t}\n\n\t// Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.\n\tif ( element.checkVisibility ) {\n\t\treturn element.checkVisibility?.( {\n\t\t\topacityProperty: true,\n\t\t\tcontentVisibilityAuto: true,\n\t\t\tvisibilityProperty: true,\n\t\t} );\n\t}\n\n\tconst style = viewport.getComputedStyle( element );\n\n\tif (\n\t\tstyle.display === 'none' ||\n\t\tstyle.visibility === 'hidden' ||\n\t\tstyle.opacity === '0'\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Checks if the element is scrollable.\n *\n * @param element Element.\n * @return True if the element is scrollable.\n */\nfunction isScrollable( element: Element ) {\n\tconst style = window.getComputedStyle( element );\n\treturn (\n\t\tstyle.overflowX === 'auto' ||\n\t\tstyle.overflowX === 'scroll' ||\n\t\tstyle.overflowY === 'auto' ||\n\t\tstyle.overflowY === 'scroll'\n\t);\n}\n\nexport const WITH_OVERFLOW_ELEMENT_BLOCKS = [ 'core/navigation' ];\n/**\n * Returns the bounding rectangle of an element, with special handling for blocks\n * that have visible overflowing children (defined in WITH_OVERFLOW_ELEMENT_BLOCKS).\n *\n * For blocks like Navigation that can have overflowing elements (e.g. submenus),\n * this function calculates the combined bounds of both the parent and its visible\n * children. The returned rect may extend beyond the viewport.\n * The returned rect represents the full extent of the element and its visible\n * children, which may extend beyond the viewport.\n *\n * @param element Element.\n * @return Bounding client rect of the element and its visible children.\n */\nexport function getElementBounds( element: Element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\n\tif ( ! viewport ) {\n\t\treturn new window.DOMRectReadOnly();\n\t}\n\n\tlet bounds = element.getBoundingClientRect();\n\tconst dataType = element.getAttribute( 'data-type' );\n\n\t/*\n\t * For blocks with overflowing elements (like Navigation), include the bounds\n\t * of visible children that extend beyond the parent container.\n\t */\n\tif ( dataType && WITH_OVERFLOW_ELEMENT_BLOCKS.includes( dataType ) ) {\n\t\tconst stack = [ element ];\n\t\tlet currentElement;\n\n\t\twhile ( ( currentElement = stack.pop() ) ) {\n\t\t\t// Children won’t affect bounds unless the element is not scrollable.\n\t\t\tif ( ! isScrollable( currentElement ) ) {\n\t\t\t\tfor ( const child of currentElement.children ) {\n\t\t\t\t\tif ( isElementVisible( child ) ) {\n\t\t\t\t\t\tconst childBounds = child.getBoundingClientRect();\n\t\t\t\t\t\tbounds = rectUnion( bounds, childBounds );\n\t\t\t\t\t\tstack.push( child );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Take into account the outer horizontal limits of the container in which\n\t * an element is supposed to be \"visible\". For example, if an element is\n\t * positioned -10px to the left of the window x value (0), this function\n\t * discounts the negative overhang because it's not visible and therefore\n\t * not to be counted in the visibility calculations. Top and bottom values\n\t * are not accounted for to accommodate vertical scroll.\n\t */\n\tconst left = Math.max( bounds.left, 0 );\n\tconst right = Math.min( bounds.right, viewport.innerWidth );\n\tbounds = new window.DOMRectReadOnly(\n\t\tleft,\n\t\tbounds.top,\n\t\tright - left,\n\t\tbounds.height\n\t);\n\n\treturn bounds;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["const BLOCK_SELECTOR = '.block-editor-block-list__block';\nconst APPENDER_SELECTOR = '.block-list-appender';\nconst BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';\n\n/**\n * Returns true if two elements are contained within the same block.\n *\n * @param a First element.\n * @param b Second element.\n *\n * @return Whether elements are in the same block.\n */\nexport function isInSameBlock( a: Element, b: Element ) {\n\treturn a.closest( BLOCK_SELECTOR ) === b.closest( BLOCK_SELECTOR );\n}\n\n/**\n * Returns true if an element is considered part of the block and not its inner\n * blocks or appender.\n *\n * @param blockElement Block container element.\n * @param element Element.\n *\n * @return Whether an element is considered part of the block and not\n * its inner blocks or appender.\n */\nexport function isInsideRootBlock( blockElement: Element, element: Element ) {\n\tconst parentBlock = element.closest(\n\t\t[ BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS ].join( ',' )\n\t);\n\treturn parentBlock === blockElement;\n}\n\n/**\n * Returns the editable element containing the selection, if the selection is\n * fully contained within one. The root element (an editable wrapper) does not\n * count as a containing editable element.\n *\n * @param selection The selection.\n * @param root The editable wrapper element.\n *\n * @return The editable element containing the selection.\n */\nexport function getSelectionEditableElement(\n\tselection: Selection,\n\troot: Element\n) {\n\tconst { anchorNode, focusNode } = selection;\n\n\tif ( ! anchorNode || ! focusNode ) {\n\t\treturn;\n\t}\n\n\tconst element =\n\t\tanchorNode.nodeType === anchorNode.ELEMENT_NODE\n\t\t\t? ( anchorNode as Element )\n\t\t\t: anchorNode.parentElement;\n\tconst editable = element?.closest( '[contenteditable=\"true\"]' );\n\n\tif ( ! editable || editable === root || ! editable.contains( focusNode ) ) {\n\t\treturn;\n\t}\n\n\treturn editable;\n}\n\n/**\n * Finds the block client ID given any DOM node inside the block.\n *\n * @param node DOM node.\n *\n * @return Client ID or undefined if the node is not part of\n * a block.\n */\nexport function getBlockClientId( node: Node | null ) {\n\twhile ( node && node.nodeType !== node.ELEMENT_NODE ) {\n\t\tnode = node.parentNode;\n\t}\n\n\tif ( ! node ) {\n\t\treturn;\n\t}\n\n\tconst elementNode = node as Element;\n\tconst blockNode = elementNode.closest( BLOCK_SELECTOR );\n\n\tif ( ! blockNode ) {\n\t\treturn;\n\t}\n\n\treturn blockNode.id.slice( 'block-'.length );\n}\n\n/**\n * Calculates the union of two rectangles.\n *\n * @param rect1 First rectangle.\n * @param rect2 Second rectangle.\n * @return Union of the two rectangles.\n */\nexport function rectUnion( rect1: DOMRect, rect2: DOMRect ) {\n\tconst left = Math.min( rect1.left, rect2.left );\n\tconst right = Math.max( rect1.right, rect2.right );\n\tconst bottom = Math.max( rect1.bottom, rect2.bottom );\n\tconst top = Math.min( rect1.top, rect2.top );\n\n\treturn new window.DOMRectReadOnly( left, top, right - left, bottom - top );\n}\n\n/**\n * Returns whether an element is visible.\n *\n * @param element Element.\n * @return Whether the element is visible.\n */\nexport function isElementVisible( element: Element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn false;\n\t}\n\n\t// Check for <VisuallyHidden> components.\n\tif ( element.hasAttribute( 'data-visually-hidden' ) ) {\n\t\treturn false;\n\t}\n\n\tconst bounds = element.getBoundingClientRect();\n\tif ( bounds.width === 0 || bounds.height === 0 ) {\n\t\treturn false;\n\t}\n\n\t// Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.\n\tif ( element.checkVisibility ) {\n\t\treturn element.checkVisibility?.( {\n\t\t\topacityProperty: true,\n\t\t\tcontentVisibilityAuto: true,\n\t\t\tvisibilityProperty: true,\n\t\t} );\n\t}\n\n\tconst style = viewport.getComputedStyle( element );\n\n\tif (\n\t\tstyle.display === 'none' ||\n\t\tstyle.visibility === 'hidden' ||\n\t\tstyle.opacity === '0'\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Checks if the element is scrollable.\n *\n * @param element Element.\n * @return True if the element is scrollable.\n */\nfunction isScrollable( element: Element ) {\n\tconst style = window.getComputedStyle( element );\n\treturn (\n\t\tstyle.overflowX === 'auto' ||\n\t\tstyle.overflowX === 'scroll' ||\n\t\tstyle.overflowY === 'auto' ||\n\t\tstyle.overflowY === 'scroll'\n\t);\n}\n\nexport const WITH_OVERFLOW_ELEMENT_BLOCKS = [ 'core/navigation' ];\n/**\n * Returns the bounding rectangle of an element, with special handling for blocks\n * that have visible overflowing children (defined in WITH_OVERFLOW_ELEMENT_BLOCKS).\n *\n * For blocks like Navigation that can have overflowing elements (e.g. submenus),\n * this function calculates the combined bounds of both the parent and its visible\n * children. The returned rect may extend beyond the viewport.\n * The returned rect represents the full extent of the element and its visible\n * children, which may extend beyond the viewport.\n *\n * @param element Element.\n * @return Bounding client rect of the element and its visible children.\n */\nexport function getElementBounds( element: Element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\n\tif ( ! viewport ) {\n\t\treturn new window.DOMRectReadOnly();\n\t}\n\n\tlet bounds = element.getBoundingClientRect();\n\tconst dataType = element.getAttribute( 'data-type' );\n\n\t/*\n\t * For blocks with overflowing elements (like Navigation), include the bounds\n\t * of visible children that extend beyond the parent container.\n\t */\n\tif ( dataType && WITH_OVERFLOW_ELEMENT_BLOCKS.includes( dataType ) ) {\n\t\tconst stack = [ element ];\n\t\tlet currentElement;\n\n\t\twhile ( ( currentElement = stack.pop() ) ) {\n\t\t\t// Children won’t affect bounds unless the element is not scrollable.\n\t\t\tif ( ! isScrollable( currentElement ) ) {\n\t\t\t\tfor ( const child of currentElement.children ) {\n\t\t\t\t\tif ( isElementVisible( child ) ) {\n\t\t\t\t\t\tconst childBounds = child.getBoundingClientRect();\n\t\t\t\t\t\tbounds = rectUnion( bounds, childBounds );\n\t\t\t\t\t\tstack.push( child );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Take into account the outer horizontal limits of the container in which\n\t * an element is supposed to be \"visible\". For example, if an element is\n\t * positioned -10px to the left of the window x value (0), this function\n\t * discounts the negative overhang because it's not visible and therefore\n\t * not to be counted in the visibility calculations. Top and bottom values\n\t * are not accounted for to accommodate vertical scroll.\n\t */\n\tconst left = Math.max( bounds.left, 0 );\n\tconst right = Math.min( bounds.right, viewport.innerWidth );\n\tbounds = new window.DOMRectReadOnly(\n\t\tleft,\n\t\tbounds.top,\n\t\tright - left,\n\t\tbounds.height\n\t);\n\n\treturn bounds;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -100,7 +100,14 @@ function createBlockCompleter() {
100
100
  return !(/\S/.test(before) || /\S/.test(after));
101
101
  },
102
102
  getOptionCompletion(inserterItem) {
103
- const { name, initialAttributes, innerBlocks, syncStatus, blocks } = inserterItem;
103
+ const {
104
+ name,
105
+ initialAttributes,
106
+ innerBlocks,
107
+ innerContent,
108
+ syncStatus,
109
+ blocks
110
+ } = inserterItem;
104
111
  return {
105
112
  action: "replace",
106
113
  value: syncStatus === "unsynced" ? (blocks ?? []).map(
@@ -110,7 +117,8 @@ function createBlockCompleter() {
110
117
  initialAttributes,
111
118
  createBlocksFromInnerBlocksTemplate(
112
119
  innerBlocks
113
- )
120
+ ),
121
+ innerContent
114
122
  )
115
123
  };
116
124
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/autocompleters/block.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tcloneBlock,\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { searchBlockItems } from '../components/inserter/search-items';\nimport useBlockTypesState from '../components/inserter/hooks/use-block-types-state';\nimport BlockIcon from '../components/block-icon';\nimport { store as blockEditorStore } from '../store';\nimport { orderBy } from '../utils/sorting';\nimport { orderInserterBlockItems } from '../utils/order-inserter-block-items';\n\nconst noop = () => {};\nconst SHOWN_BLOCK_TYPES = 9;\n\n/**\n * Creates a blocks repeater for replacing the current block with a selected block type.\n *\n * @return {Object} A blocks completer.\n */\nfunction createBlockCompleter() {\n\treturn {\n\t\tname: 'blocks',\n\t\tclassName: 'block-editor-autocompleters__block',\n\t\ttriggerPrefix: '/',\n\n\t\tuseItems( filterValue ) {\n\t\t\tconst { rootClientId, selectedBlockId, prioritizedBlocks } =\n\t\t\t\tuseSelect( ( select ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\t\t\tgetBlock,\n\t\t\t\t\t\tgetBlockListSettings,\n\t\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\t} = select( blockEditorStore );\n\t\t\t\t\tconst { getActiveBlockVariation } = select( blocksStore );\n\t\t\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\t\t\t\tconst { name: blockName, attributes } = getBlock(\n\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t);\n\t\t\t\t\tconst activeBlockVariation = getActiveBlockVariation(\n\t\t\t\t\t\tblockName,\n\t\t\t\t\t\tattributes\n\t\t\t\t\t);\n\t\t\t\t\tconst _rootClientId = getBlockRootClientId(\n\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tselectedBlockId: activeBlockVariation\n\t\t\t\t\t\t\t? `${ blockName }/${ activeBlockVariation.name }`\n\t\t\t\t\t\t\t: blockName,\n\t\t\t\t\t\trootClientId: _rootClientId,\n\t\t\t\t\t\tprioritizedBlocks:\n\t\t\t\t\t\t\tgetBlockListSettings( _rootClientId )\n\t\t\t\t\t\t\t\t?.prioritizedInserterBlocks,\n\t\t\t\t\t};\n\t\t\t\t}, [] );\n\t\t\tconst [ items, categories, collections ] = useBlockTypesState(\n\t\t\t\trootClientId,\n\t\t\t\tnoop,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tconst filteredItems = useMemo( () => {\n\t\t\t\tconst initialFilteredItems = !! filterValue.trim()\n\t\t\t\t\t? searchBlockItems(\n\t\t\t\t\t\t\titems,\n\t\t\t\t\t\t\tcategories,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tfilterValue\n\t\t\t\t\t )\n\t\t\t\t\t: orderInserterBlockItems(\n\t\t\t\t\t\t\torderBy( items, 'frecency', 'desc' ),\n\t\t\t\t\t\t\tprioritizedBlocks\n\t\t\t\t\t );\n\n\t\t\t\treturn initialFilteredItems\n\t\t\t\t\t.filter( ( item ) => item.id !== selectedBlockId )\n\t\t\t\t\t.slice( 0, SHOWN_BLOCK_TYPES );\n\t\t\t}, [\n\t\t\t\tfilterValue,\n\t\t\t\tselectedBlockId,\n\t\t\t\titems,\n\t\t\t\tcategories,\n\t\t\t\tcollections,\n\t\t\t\tprioritizedBlocks,\n\t\t\t] );\n\n\t\t\tconst options = useMemo(\n\t\t\t\t() =>\n\t\t\t\t\tfilteredItems.map( ( blockItem ) => {\n\t\t\t\t\t\tconst { title, icon, isDisabled } = blockItem;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tkey: `block-${ blockItem.id }`,\n\t\t\t\t\t\t\tvalue: blockItem,\n\t\t\t\t\t\t\tlabel: (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<BlockIcon\n\t\t\t\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\t\t\t\tshowColors\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisDisabled,\n\t\t\t\t\t\t};\n\t\t\t\t\t} ),\n\t\t\t\t[ filteredItems ]\n\t\t\t);\n\n\t\t\treturn [ options ];\n\t\t},\n\t\tallowContext( before, after ) {\n\t\t\treturn ! ( /\\S/.test( before ) || /\\S/.test( after ) );\n\t\t},\n\t\tgetOptionCompletion( inserterItem ) {\n\t\t\tconst { name, initialAttributes, innerBlocks, syncStatus, blocks } =\n\t\t\t\tinserterItem;\n\n\t\t\treturn {\n\t\t\t\taction: 'replace',\n\t\t\t\tvalue:\n\t\t\t\t\tsyncStatus === 'unsynced'\n\t\t\t\t\t\t? ( blocks ?? [] ).map( ( block ) =>\n\t\t\t\t\t\t\t\tcloneBlock( block )\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: createBlock(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tinitialAttributes,\n\t\t\t\t\t\t\t\tcreateBlocksFromInnerBlocksTemplate(\n\t\t\t\t\t\t\t\t\tinnerBlocks\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t ),\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * Creates a blocks repeater for replacing the current block with a selected block type.\n *\n * @return {Object} A blocks completer.\n */\nexport default createBlockCompleter();\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tcloneBlock,\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { searchBlockItems } from '../components/inserter/search-items';\nimport useBlockTypesState from '../components/inserter/hooks/use-block-types-state';\nimport BlockIcon from '../components/block-icon';\nimport { store as blockEditorStore } from '../store';\nimport { orderBy } from '../utils/sorting';\nimport { orderInserterBlockItems } from '../utils/order-inserter-block-items';\n\nconst noop = () => {};\nconst SHOWN_BLOCK_TYPES = 9;\n\n/**\n * Creates a blocks repeater for replacing the current block with a selected block type.\n *\n * @return {Object} A blocks completer.\n */\nfunction createBlockCompleter() {\n\treturn {\n\t\tname: 'blocks',\n\t\tclassName: 'block-editor-autocompleters__block',\n\t\ttriggerPrefix: '/',\n\n\t\tuseItems( filterValue ) {\n\t\t\tconst { rootClientId, selectedBlockId, prioritizedBlocks } =\n\t\t\t\tuseSelect( ( select ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\t\t\tgetBlock,\n\t\t\t\t\t\tgetBlockListSettings,\n\t\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\t} = select( blockEditorStore );\n\t\t\t\t\tconst { getActiveBlockVariation } = select( blocksStore );\n\t\t\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\t\t\t\tconst { name: blockName, attributes } = getBlock(\n\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t);\n\t\t\t\t\tconst activeBlockVariation = getActiveBlockVariation(\n\t\t\t\t\t\tblockName,\n\t\t\t\t\t\tattributes\n\t\t\t\t\t);\n\t\t\t\t\tconst _rootClientId = getBlockRootClientId(\n\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tselectedBlockId: activeBlockVariation\n\t\t\t\t\t\t\t? `${ blockName }/${ activeBlockVariation.name }`\n\t\t\t\t\t\t\t: blockName,\n\t\t\t\t\t\trootClientId: _rootClientId,\n\t\t\t\t\t\tprioritizedBlocks:\n\t\t\t\t\t\t\tgetBlockListSettings( _rootClientId )\n\t\t\t\t\t\t\t\t?.prioritizedInserterBlocks,\n\t\t\t\t\t};\n\t\t\t\t}, [] );\n\t\t\tconst [ items, categories, collections ] = useBlockTypesState(\n\t\t\t\trootClientId,\n\t\t\t\tnoop,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tconst filteredItems = useMemo( () => {\n\t\t\t\tconst initialFilteredItems = !! filterValue.trim()\n\t\t\t\t\t? searchBlockItems(\n\t\t\t\t\t\t\titems,\n\t\t\t\t\t\t\tcategories,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tfilterValue\n\t\t\t\t\t )\n\t\t\t\t\t: orderInserterBlockItems(\n\t\t\t\t\t\t\torderBy( items, 'frecency', 'desc' ),\n\t\t\t\t\t\t\tprioritizedBlocks\n\t\t\t\t\t );\n\n\t\t\t\treturn initialFilteredItems\n\t\t\t\t\t.filter( ( item ) => item.id !== selectedBlockId )\n\t\t\t\t\t.slice( 0, SHOWN_BLOCK_TYPES );\n\t\t\t}, [\n\t\t\t\tfilterValue,\n\t\t\t\tselectedBlockId,\n\t\t\t\titems,\n\t\t\t\tcategories,\n\t\t\t\tcollections,\n\t\t\t\tprioritizedBlocks,\n\t\t\t] );\n\n\t\t\tconst options = useMemo(\n\t\t\t\t() =>\n\t\t\t\t\tfilteredItems.map( ( blockItem ) => {\n\t\t\t\t\t\tconst { title, icon, isDisabled } = blockItem;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tkey: `block-${ blockItem.id }`,\n\t\t\t\t\t\t\tvalue: blockItem,\n\t\t\t\t\t\t\tlabel: (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<BlockIcon\n\t\t\t\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\t\t\t\tshowColors\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisDisabled,\n\t\t\t\t\t\t};\n\t\t\t\t\t} ),\n\t\t\t\t[ filteredItems ]\n\t\t\t);\n\n\t\t\treturn [ options ];\n\t\t},\n\t\tallowContext( before, after ) {\n\t\t\treturn ! ( /\\S/.test( before ) || /\\S/.test( after ) );\n\t\t},\n\t\tgetOptionCompletion( inserterItem ) {\n\t\t\tconst {\n\t\t\t\tname,\n\t\t\t\tinitialAttributes,\n\t\t\t\tinnerBlocks,\n\t\t\t\tinnerContent,\n\t\t\t\tsyncStatus,\n\t\t\t\tblocks,\n\t\t\t} = inserterItem;\n\n\t\t\treturn {\n\t\t\t\taction: 'replace',\n\t\t\t\tvalue:\n\t\t\t\t\tsyncStatus === 'unsynced'\n\t\t\t\t\t\t? ( blocks ?? [] ).map( ( block ) =>\n\t\t\t\t\t\t\t\tcloneBlock( block )\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: createBlock(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tinitialAttributes,\n\t\t\t\t\t\t\t\tcreateBlocksFromInnerBlocksTemplate(\n\t\t\t\t\t\t\t\t\tinnerBlocks\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tinnerContent\n\t\t\t\t\t\t ),\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * Creates a blocks repeater for replacing the current block with a selected block type.\n *\n * @return {Object} A blocks completer.\n */\nexport default createBlockCompleter();\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -428,7 +428,6 @@ function BackgroundSizeControls({
428
428
  /* @__PURE__ */ jsxs(
429
429
  ToggleGroupControl,
430
430
  {
431
- size: "__unstable-large",
432
431
  label: __("Size"),
433
432
  value: currentValueForToggle,
434
433
  onChange: updateBackgroundSize,
@@ -480,7 +479,6 @@ function BackgroundSizeControls({
480
479
  "aria-label": __("Background image width"),
481
480
  onChange: updateBackgroundSize,
482
481
  value: sizeValue,
483
- size: "__unstable-large",
484
482
  __unstableInputWidth: "100px",
485
483
  min: 0,
486
484
  placeholder: __("Auto"),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/background-image-control/index.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tToggleControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalVStack as VStack,\n\tDropZone,\n\tFlexBlock,\n\tFocalPointPicker,\n\tMenuItem,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n\tDropdown,\n\tPlaceholder,\n\tSpinner,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tButton,\n} from '@wordpress/components';\nimport { VisuallyHidden } from '@wordpress/ui';\nimport { reset as resetIcon } from '@wordpress/icons';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { getFilename } from '@wordpress/url';\nimport { useRef, useState, useEffect, useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { focus } from '@wordpress/dom';\nimport { isBlobURL } from '@wordpress/blob';\nimport { getResolvedValue } from '@wordpress/global-styles-engine';\n\n/**\n * Internal dependencies\n */\nimport { hasBackgroundImageValue } from '../global-styles/background-panel';\nimport { setImmutably } from '../../utils/object';\nimport MediaReplaceFlow from '../media-replace-flow';\nimport { store as blockEditorStore } from '../../store';\n\nimport {\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n} from '../../store/private-keys';\n\nconst IMAGE_BACKGROUND_TYPE = 'image';\n\nconst BACKGROUND_POPOVER_PROPS = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n\tclassName: 'block-editor-global-styles-background-panel__popover',\n};\nconst noop = () => {};\n\n/**\n * Focuses the toggle button.\n * @param {Object} containerRef - ref object containing current element\n */\nconst focusToggleButton = ( containerRef ) => {\n\t// Use requestAnimationFrame to ensure DOM updates are complete\n\twindow.requestAnimationFrame( () => {\n\t\tconst [ toggleButton ] = focus.tabbable.find( containerRef?.current );\n\t\tif ( ! toggleButton ) {\n\t\t\treturn;\n\t\t}\n\t\t// Focus the toggle button and close the dropdown menu.\n\t\t// This ensures similar behaviour as to selecting an image, where the dropdown is\n\t\t// closed and focus is redirected to the dropdown toggle button.\n\t\ttoggleButton.focus();\n\t} );\n};\n\n/**\n * Get the help text for the background size control.\n *\n * @param {string} value backgroundSize value.\n * @return {string} Translated help text.\n */\nfunction backgroundSizeHelpText( value ) {\n\tif ( value === 'cover' || value === undefined ) {\n\t\treturn __( 'Image covers the space evenly.' );\n\t}\n\tif ( value === 'contain' ) {\n\t\treturn __( 'Image is contained without distortion.' );\n\t}\n\treturn __( 'Image has a fixed width.' );\n}\n\n/**\n * Converts decimal x and y coords from FocalPointPicker to percentage-based values\n * to use as backgroundPosition value.\n *\n * @param {{x?:number, y?:number}} value FocalPointPicker coords.\n * @return {string} \t\t\t\t backgroundPosition value.\n */\nexport const coordsToBackgroundPosition = ( value ) => {\n\tif ( ! value || ( isNaN( value.x ) && isNaN( value.y ) ) ) {\n\t\treturn undefined;\n\t}\n\n\tconst x = isNaN( value.x ) ? 0.5 : value.x;\n\tconst y = isNaN( value.y ) ? 0.5 : value.y;\n\n\treturn `${ x * 100 }% ${ y * 100 }%`;\n};\n\n/**\n * Converts backgroundPosition value to x and y coords for FocalPointPicker.\n *\n * @param {string} value backgroundPosition value.\n * @return {{x?:number, y?:number}} FocalPointPicker coords.\n */\nexport const backgroundPositionToCoords = ( value ) => {\n\tif ( ! value ) {\n\t\treturn { x: undefined, y: undefined };\n\t}\n\n\tlet [ x, y ] = value.split( ' ' ).map( ( v ) => parseFloat( v ) / 100 );\n\tx = isNaN( x ) ? undefined : x;\n\ty = isNaN( y ) ? x : y;\n\n\treturn { x, y };\n};\n\nfunction InspectorImagePreviewItem( {\n\tas = 'span',\n\timgUrl,\n\ttoggleProps = {},\n\tfilename,\n\tlabel,\n\tonToggleCallback = noop,\n} ) {\n\tconst { isOpen, ...restToggleProps } = toggleProps;\n\n\tuseEffect( () => {\n\t\tif ( typeof isOpen !== 'undefined' ) {\n\t\t\tonToggleCallback( isOpen );\n\t\t}\n\t}, [ isOpen, onToggleCallback ] );\n\n\tconst renderPreviewContent = () => {\n\t\treturn (\n\t\t\t<HStack className=\"block-editor-global-styles-background-panel__inspector-preview-inner\">\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-image-indicator\"\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\tbackgroundImage: imgUrl\n\t\t\t\t\t\t\t? `url(${ imgUrl })`\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<FlexBlock>\n\t\t\t\t\t<Truncate\n\t\t\t\t\t\tnumberOfLines={ 1 }\n\t\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-media-replace-title\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Truncate>\n\t\t\t\t\t<VisuallyHidden render={ <span /> }>\n\t\t\t\t\t\t{ imgUrl\n\t\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: file name */\n\t\t\t\t\t\t\t\t\t__( 'Background image: %s' ),\n\t\t\t\t\t\t\t\t\tfilename || label\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: __( 'No background image selected' ) }\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t</FlexBlock>\n\t\t\t</HStack>\n\t\t);\n\t};\n\n\treturn as === 'button' ? (\n\t\t<Button __next40pxDefaultSize { ...restToggleProps }>\n\t\t\t{ renderPreviewContent() }\n\t\t</Button>\n\t) : (\n\t\trenderPreviewContent()\n\t);\n}\n\nfunction BackgroundControlsPanel( {\n\tlabel,\n\tfilename,\n\turl: imgUrl,\n\tchildren,\n\tonToggle: onToggleCallback = noop,\n\thasImageValue,\n\tonReset,\n\tcontainerRef,\n} ) {\n\tif ( ! hasImageValue ) {\n\t\treturn;\n\t}\n\n\tconst imgLabel = label || getFilename( imgUrl ) || __( 'Image' );\n\n\treturn (\n\t\t<Dropdown\n\t\t\tpopoverProps={ BACKGROUND_POPOVER_PROPS }\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => {\n\t\t\t\tconst toggleProps = {\n\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\tclassName:\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__dropdown-toggle',\n\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t'aria-label': __(\n\t\t\t\t\t\t'Background size, position and repeat options.'\n\t\t\t\t\t),\n\t\t\t\t\tisOpen,\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<InspectorImagePreviewItem\n\t\t\t\t\t\t\timgUrl={ imgUrl }\n\t\t\t\t\t\t\tfilename={ filename }\n\t\t\t\t\t\t\tlabel={ imgLabel }\n\t\t\t\t\t\t\ttoggleProps={ toggleProps }\n\t\t\t\t\t\t\tas=\"button\"\n\t\t\t\t\t\t\tonToggleCallback={ onToggleCallback }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ onReset && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tlabel={ __( 'Reset' ) }\n\t\t\t\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__reset\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\ticon={ resetIcon }\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tonReset();\n\t\t\t\t\t\t\t\t\t// Close the dropdown if open.\n\t\t\t\t\t\t\t\t\tif ( isOpen ) {\n\t\t\t\t\t\t\t\t\t\tonToggle();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Focus the toggle button.\n\t\t\t\t\t\t\t\t\tfocusToggleButton( containerRef );\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</>\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t<DropdownContentWrapper\n\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__dropdown-content-wrapper\"\n\t\t\t\t\tpaddingSize=\"medium\"\n\t\t\t\t>\n\t\t\t\t\t{ children }\n\t\t\t\t</DropdownContentWrapper>\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction LoadingSpinner() {\n\treturn (\n\t\t<Placeholder className=\"block-editor-global-styles-background-panel__loading\">\n\t\t\t<Spinner />\n\t\t</Placeholder>\n\t);\n}\n\nfunction BackgroundImageControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tonRemoveImage = noop,\n\tonResetImage = noop,\n\tdisplayInPanel,\n\tdefaultValues,\n\tcontainerRef,\n} ) {\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\n\tconst { id, title, url } = style?.background?.backgroundImage || {\n\t\t...inheritedValue?.background?.backgroundImage,\n\t};\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst onUploadError = ( message ) => {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetIsUploading( false );\n\t};\n\n\tconst resetBackgroundImage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundImage' ],\n\t\t\t\tundefined\n\t\t\t)\n\t\t);\n\n\tconst onSelectMedia = ( media ) => {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tresetBackgroundImage();\n\t\t\tsetIsUploading( false );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetIsUploading( true );\n\t\t\treturn;\n\t\t}\n\n\t\t// For media selections originated from a file upload.\n\t\tif (\n\t\t\t( media.media_type &&\n\t\t\t\tmedia.media_type !== IMAGE_BACKGROUND_TYPE ) ||\n\t\t\t( ! media.media_type &&\n\t\t\t\tmedia.type &&\n\t\t\t\tmedia.type !== IMAGE_BACKGROUND_TYPE )\n\t\t) {\n\t\t\tonUploadError(\n\t\t\t\t__( 'Only images can be used as a background image.' )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst sizeValue =\n\t\t\tstyle?.background?.backgroundSize || defaultValues?.backgroundSize;\n\t\tconst positionValue = style?.background?.backgroundPosition;\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundImage: {\n\t\t\t\t\turl: media.url,\n\t\t\t\t\tid: media.id,\n\t\t\t\t\tsource: 'file',\n\t\t\t\t\ttitle: media.title || undefined,\n\t\t\t\t},\n\t\t\t\tbackgroundPosition:\n\t\t\t\t\t/*\n\t\t\t\t\t * A background image uploaded and set in the editor receives a default background position of '50% 0',\n\t\t\t\t\t * when the background image size is the equivalent of \"Tile\".\n\t\t\t\t\t * This is to increase the chance that the image's focus point is visible.\n\t\t\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t\t\t */\n\t\t\t\t\t! positionValue && ( 'auto' === sizeValue || ! sizeValue )\n\t\t\t\t\t\t? '50% 0'\n\t\t\t\t\t\t: positionValue,\n\t\t\t\tbackgroundSize: sizeValue,\n\t\t\t} )\n\t\t);\n\t\tsetIsUploading( false );\n\t\t// Close the dropdown and focus the toggle button.\n\t\tfocusToggleButton( containerRef );\n\t};\n\n\t// Drag and drop callback, restricting image to one.\n\tconst onFilesDrop = ( filesList ) => {\n\t\tgetSettings().mediaUpload( {\n\t\t\tallowedTypes: [ IMAGE_BACKGROUND_TYPE ],\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tonSelectMedia( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t\tmultiple: false,\n\t\t} );\n\t};\n\n\tconst hasValue = hasBackgroundImageValue( style );\n\n\tconst onRemove = () =>\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\tbackgroundImage: 'none',\n\t\t\t} )\n\t\t);\n\tconst canRemove = ! hasValue && hasBackgroundImageValue( inheritedValue );\n\tconst imgLabel = title || getFilename( url ) || __( 'Image' );\n\n\treturn (\n\t\t<div className=\"block-editor-global-styles-background-panel__image-tools-panel-item\">\n\t\t\t{ isUploading && <LoadingSpinner /> }\n\t\t\t<MediaReplaceFlow\n\t\t\t\tmediaId={ id }\n\t\t\t\tmediaURL={ url }\n\t\t\t\tallowedTypes={ [ IMAGE_BACKGROUND_TYPE ] }\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tonSelect={ onSelectMedia }\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tclassName: clsx( {\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__media-replace-popover':\n\t\t\t\t\t\t\tdisplayInPanel,\n\t\t\t\t\t} ),\n\t\t\t\t} }\n\t\t\t\tname={\n\t\t\t\t\t<InspectorImagePreviewItem\n\t\t\t\t\t\timgUrl={ url }\n\t\t\t\t\t\tfilename={ title }\n\t\t\t\t\t\tlabel={ imgLabel }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\trenderToggle={ ( props ) => (\n\t\t\t\t\t<Button { ...props } __next40pxDefaultSize />\n\t\t\t\t) }\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tonReset={ () => {\n\t\t\t\t\tfocusToggleButton( containerRef );\n\t\t\t\t\tonResetImage();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ canRemove && (\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tfocusToggleButton( containerRef );\n\t\t\t\t\t\t\tonRemove();\n\t\t\t\t\t\t\tonRemoveImage();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) }\n\t\t\t</MediaReplaceFlow>\n\t\t\t<DropZone\n\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\tlabel={ __( 'Drop to upload' ) }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction BackgroundSizeControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tdefaultValues,\n} ) {\n\tconst sizeValue =\n\t\tstyle?.background?.backgroundSize ||\n\t\tinheritedValue?.background?.backgroundSize;\n\tconst repeatValue =\n\t\tstyle?.background?.backgroundRepeat ||\n\t\tinheritedValue?.background?.backgroundRepeat;\n\tconst imageValue =\n\t\tstyle?.background?.backgroundImage?.url ||\n\t\tinheritedValue?.background?.backgroundImage?.url;\n\tconst isUploadedImage = style?.background?.backgroundImage?.id;\n\tconst positionValue =\n\t\tstyle?.background?.backgroundPosition ||\n\t\tinheritedValue?.background?.backgroundPosition;\n\tconst attachmentValue =\n\t\tstyle?.background?.backgroundAttachment ||\n\t\tinheritedValue?.background?.backgroundAttachment;\n\n\t/*\n\t * Set default values for uploaded images.\n\t * The default values are passed by the consumer.\n\t * Block-level controls may have different defaults to root-level controls.\n\t * A falsy value is treated by default as `auto` (Tile).\n\t */\n\tlet currentValueForToggle =\n\t\t! sizeValue && isUploadedImage\n\t\t\t? defaultValues?.backgroundSize\n\t\t\t: sizeValue || 'auto';\n\t/*\n\t * The incoming value could be a value + unit, e.g. '20px'.\n\t * In this case set the value to 'tile'.\n\t */\n\tcurrentValueForToggle = ! [ 'cover', 'contain', 'auto' ].includes(\n\t\tcurrentValueForToggle\n\t)\n\t\t? 'auto'\n\t\t: currentValueForToggle;\n\t/*\n\t * If the current value is `cover` and the repeat value is `undefined`, then\n\t * the toggle should be unchecked as the default state. Otherwise, the toggle\n\t * should reflect the current repeat value.\n\t */\n\tconst repeatCheckedValue = ! (\n\t\trepeatValue === 'no-repeat' ||\n\t\t( currentValueForToggle === 'cover' && repeatValue === undefined )\n\t);\n\n\tconst updateBackgroundSize = ( next ) => {\n\t\t// When switching to 'contain' toggle the repeat off.\n\t\tlet nextRepeat = repeatValue;\n\t\tlet nextPosition = positionValue;\n\n\t\tif ( next === 'contain' ) {\n\t\t\tnextRepeat = 'no-repeat';\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif ( next === 'cover' ) {\n\t\t\tnextRepeat = undefined;\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif (\n\t\t\t( currentValueForToggle === 'cover' ||\n\t\t\t\tcurrentValueForToggle === 'contain' ) &&\n\t\t\tnext === 'auto'\n\t\t) {\n\t\t\tnextRepeat = undefined;\n\t\t\t/*\n\t\t\t * A background image uploaded and set in the editor (an image with a record id),\n\t\t\t * receives a default background position of '50% 0',\n\t\t\t * when the toggle switches to \"Tile\". This is to increase the chance that\n\t\t\t * the image's focus point is visible.\n\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t */\n\t\t\tif ( !! style?.background?.backgroundImage?.id ) {\n\t\t\t\tnextPosition = '50% 0';\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Next will be null when the input is cleared,\n\t\t * in which case the value should be 'auto'.\n\t\t */\n\t\tif ( ! next && currentValueForToggle === 'auto' ) {\n\t\t\tnext = 'auto';\n\t\t}\n\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundPosition: nextPosition,\n\t\t\t\tbackgroundRepeat: nextRepeat,\n\t\t\t\tbackgroundSize: next,\n\t\t\t} )\n\t\t);\n\t};\n\n\tconst updateBackgroundPosition = ( next ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundPosition' ],\n\t\t\t\tcoordsToBackgroundPosition( next )\n\t\t\t)\n\t\t);\n\t};\n\n\tconst toggleIsRepeated = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundRepeat' ],\n\t\t\t\trepeatCheckedValue === true ? 'no-repeat' : 'repeat'\n\t\t\t)\n\t\t);\n\n\tconst toggleScrollWithPage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundAttachment' ],\n\t\t\t\tattachmentValue === 'fixed' ? 'scroll' : 'fixed'\n\t\t\t)\n\t\t);\n\n\t// Set a default background position for non-site-wide, uploaded images with a size of 'contain'.\n\tconst backgroundPositionValue =\n\t\t! positionValue && isUploadedImage && 'contain' === sizeValue\n\t\t\t? defaultValues?.backgroundPosition\n\t\t\t: positionValue;\n\n\treturn (\n\t\t<VStack spacing={ 3 } className=\"single-column\">\n\t\t\t<FocalPointPicker\n\t\t\t\tlabel={ __( 'Focal point' ) }\n\t\t\t\turl={ imageValue }\n\t\t\t\tvalue={ backgroundPositionToCoords( backgroundPositionValue ) }\n\t\t\t\tonChange={ updateBackgroundPosition }\n\t\t\t/>\n\t\t\t<ToggleControl\n\t\t\t\tlabel={ __( 'Fixed background' ) }\n\t\t\t\tchecked={ attachmentValue === 'fixed' }\n\t\t\t\tonChange={ toggleScrollWithPage }\n\t\t\t/>\n\t\t\t<ToggleGroupControl\n\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\tlabel={ __( 'Size' ) }\n\t\t\t\tvalue={ currentValueForToggle }\n\t\t\t\tonChange={ updateBackgroundSize }\n\t\t\t\tisBlock\n\t\t\t\thelp={ backgroundSizeHelpText(\n\t\t\t\t\tsizeValue || defaultValues?.backgroundSize\n\t\t\t\t) }\n\t\t\t>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey=\"cover\"\n\t\t\t\t\tvalue=\"cover\"\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Cover',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey=\"contain\"\n\t\t\t\t\tvalue=\"contain\"\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Contain',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey=\"tile\"\n\t\t\t\t\tvalue=\"auto\"\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Tile',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</ToggleGroupControl>\n\t\t\t<HStack justify=\"flex-start\" spacing={ 2 } as=\"span\">\n\t\t\t\t<UnitControl\n\t\t\t\t\taria-label={ __( 'Background image width' ) }\n\t\t\t\t\tonChange={ updateBackgroundSize }\n\t\t\t\t\tvalue={ sizeValue }\n\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t__unstableInputWidth=\"100px\"\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tplaceholder={ __( 'Auto' ) }\n\t\t\t\t\tdisabled={\n\t\t\t\t\t\tcurrentValueForToggle !== 'auto' ||\n\t\t\t\t\t\tcurrentValueForToggle === undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<ToggleControl\n\t\t\t\t\tlabel={ __( 'Repeat' ) }\n\t\t\t\t\tchecked={ repeatCheckedValue }\n\t\t\t\t\tonChange={ toggleIsRepeated }\n\t\t\t\t\tdisabled={ currentValueForToggle === 'cover' }\n\t\t\t\t/>\n\t\t\t</HStack>\n\t\t</VStack>\n\t);\n}\n\nexport default function BackgroundImagePanel( {\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tdefaultValues = {},\n} ) {\n\t/*\n\t * Resolve any inherited \"ref\" pointers.\n\t * Should the block editor need resolved, inherited values\n\t * across all controls, this could be abstracted into a hook,\n\t * e.g., useResolveGlobalStyle\n\t */\n\tconst { globalStyles, _links } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst _settings = getSettings();\n\t\treturn {\n\t\t\tglobalStyles: _settings[ globalStylesDataKey ],\n\t\t\t_links: _settings[ globalStylesLinksDataKey ],\n\t\t};\n\t}, [] );\n\tconst resolvedInheritedValue = useMemo( () => {\n\t\tconst resolvedValues = {\n\t\t\tbackground: {},\n\t\t};\n\n\t\tif ( ! inheritedValue?.background ) {\n\t\t\treturn inheritedValue;\n\t\t}\n\n\t\tObject.entries( inheritedValue?.background ).forEach(\n\t\t\t( [ key, backgroundValue ] ) => {\n\t\t\t\tresolvedValues.background[ key ] = getResolvedValue(\n\t\t\t\t\tbackgroundValue,\n\t\t\t\t\t{\n\t\t\t\t\t\tstyles: globalStyles,\n\t\t\t\t\t\t_links,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t\treturn resolvedValues;\n\t}, [ globalStyles, _links, inheritedValue ] );\n\n\tconst resetBackground = () =>\n\t\tonChange( setImmutably( value, [ 'background' ], {} ) );\n\n\tconst { title, url } = value?.background?.backgroundImage || {\n\t\t...resolvedInheritedValue?.background?.backgroundImage,\n\t};\n\tconst hasImageValue =\n\t\thasBackgroundImageValue( value ) ||\n\t\thasBackgroundImageValue( resolvedInheritedValue );\n\n\tconst imageValue =\n\t\tvalue?.background?.backgroundImage ||\n\t\tinheritedValue?.background?.backgroundImage;\n\n\tconst shouldShowBackgroundImageControls =\n\t\thasImageValue &&\n\t\t'none' !== imageValue &&\n\t\t( settings?.background?.backgroundSize ||\n\t\t\tsettings?.background?.backgroundPosition ||\n\t\t\tsettings?.background?.backgroundRepeat );\n\n\tconst [ isDropDownOpen, setIsDropDownOpen ] = useState( false );\n\tconst containerRef = useRef();\n\n\treturn (\n\t\t<div\n\t\t\tref={ containerRef }\n\t\t\tclassName={ clsx(\n\t\t\t\t'block-editor-global-styles-background-panel__inspector-media-replace-container',\n\t\t\t\t{\n\t\t\t\t\t'is-open': isDropDownOpen,\n\t\t\t\t}\n\t\t\t) }\n\t\t>\n\t\t\t{ shouldShowBackgroundImageControls ? (\n\t\t\t\t<BackgroundControlsPanel\n\t\t\t\t\tlabel={ title }\n\t\t\t\t\tfilename={ title }\n\t\t\t\t\turl={ url }\n\t\t\t\t\tonToggle={ setIsDropDownOpen }\n\t\t\t\t\thasImageValue={ hasImageValue }\n\t\t\t\t\tonReset={ resetBackground }\n\t\t\t\t\tcontainerRef={ containerRef }\n\t\t\t\t>\n\t\t\t\t\t<VStack spacing={ 3 } className=\"single-column\">\n\t\t\t\t\t\t<BackgroundImageControls\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tstyle={ value }\n\t\t\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\t\t\tdisplayInPanel\n\t\t\t\t\t\t\tonResetImage={ () => {\n\t\t\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\t\t\tcontainerRef={ containerRef }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BackgroundSizeControls\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tstyle={ value }\n\t\t\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</VStack>\n\t\t\t\t</BackgroundControlsPanel>\n\t\t\t) : (\n\t\t\t\t<BackgroundImageControls\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tstyle={ value }\n\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\tonResetImage={ () => {\n\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t} }\n\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t\tcontainerRef={ containerRef }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tToggleControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalVStack as VStack,\n\tDropZone,\n\tFlexBlock,\n\tFocalPointPicker,\n\tMenuItem,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n\tDropdown,\n\tPlaceholder,\n\tSpinner,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tButton,\n} from '@wordpress/components';\nimport { VisuallyHidden } from '@wordpress/ui';\nimport { reset as resetIcon } from '@wordpress/icons';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { getFilename } from '@wordpress/url';\nimport { useRef, useState, useEffect, useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { focus } from '@wordpress/dom';\nimport { isBlobURL } from '@wordpress/blob';\nimport { getResolvedValue } from '@wordpress/global-styles-engine';\n\n/**\n * Internal dependencies\n */\nimport { hasBackgroundImageValue } from '../global-styles/background-panel';\nimport { setImmutably } from '../../utils/object';\nimport MediaReplaceFlow from '../media-replace-flow';\nimport { store as blockEditorStore } from '../../store';\n\nimport {\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n} from '../../store/private-keys';\n\nconst IMAGE_BACKGROUND_TYPE = 'image';\n\nconst BACKGROUND_POPOVER_PROPS = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n\tclassName: 'block-editor-global-styles-background-panel__popover',\n};\nconst noop = () => {};\n\n/**\n * Focuses the toggle button.\n * @param {Object} containerRef - ref object containing current element\n */\nconst focusToggleButton = ( containerRef ) => {\n\t// Use requestAnimationFrame to ensure DOM updates are complete\n\twindow.requestAnimationFrame( () => {\n\t\tconst [ toggleButton ] = focus.tabbable.find( containerRef?.current );\n\t\tif ( ! toggleButton ) {\n\t\t\treturn;\n\t\t}\n\t\t// Focus the toggle button and close the dropdown menu.\n\t\t// This ensures similar behaviour as to selecting an image, where the dropdown is\n\t\t// closed and focus is redirected to the dropdown toggle button.\n\t\ttoggleButton.focus();\n\t} );\n};\n\n/**\n * Get the help text for the background size control.\n *\n * @param {string} value backgroundSize value.\n * @return {string} Translated help text.\n */\nfunction backgroundSizeHelpText( value ) {\n\tif ( value === 'cover' || value === undefined ) {\n\t\treturn __( 'Image covers the space evenly.' );\n\t}\n\tif ( value === 'contain' ) {\n\t\treturn __( 'Image is contained without distortion.' );\n\t}\n\treturn __( 'Image has a fixed width.' );\n}\n\n/**\n * Converts decimal x and y coords from FocalPointPicker to percentage-based values\n * to use as backgroundPosition value.\n *\n * @param {{x?:number, y?:number}} value FocalPointPicker coords.\n * @return {string} \t\t\t\t backgroundPosition value.\n */\nexport const coordsToBackgroundPosition = ( value ) => {\n\tif ( ! value || ( isNaN( value.x ) && isNaN( value.y ) ) ) {\n\t\treturn undefined;\n\t}\n\n\tconst x = isNaN( value.x ) ? 0.5 : value.x;\n\tconst y = isNaN( value.y ) ? 0.5 : value.y;\n\n\treturn `${ x * 100 }% ${ y * 100 }%`;\n};\n\n/**\n * Converts backgroundPosition value to x and y coords for FocalPointPicker.\n *\n * @param {string} value backgroundPosition value.\n * @return {{x?:number, y?:number}} FocalPointPicker coords.\n */\nexport const backgroundPositionToCoords = ( value ) => {\n\tif ( ! value ) {\n\t\treturn { x: undefined, y: undefined };\n\t}\n\n\tlet [ x, y ] = value.split( ' ' ).map( ( v ) => parseFloat( v ) / 100 );\n\tx = isNaN( x ) ? undefined : x;\n\ty = isNaN( y ) ? x : y;\n\n\treturn { x, y };\n};\n\nfunction InspectorImagePreviewItem( {\n\tas = 'span',\n\timgUrl,\n\ttoggleProps = {},\n\tfilename,\n\tlabel,\n\tonToggleCallback = noop,\n} ) {\n\tconst { isOpen, ...restToggleProps } = toggleProps;\n\n\tuseEffect( () => {\n\t\tif ( typeof isOpen !== 'undefined' ) {\n\t\t\tonToggleCallback( isOpen );\n\t\t}\n\t}, [ isOpen, onToggleCallback ] );\n\n\tconst renderPreviewContent = () => {\n\t\treturn (\n\t\t\t<HStack className=\"block-editor-global-styles-background-panel__inspector-preview-inner\">\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-image-indicator\"\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\tbackgroundImage: imgUrl\n\t\t\t\t\t\t\t? `url(${ imgUrl })`\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<FlexBlock>\n\t\t\t\t\t<Truncate\n\t\t\t\t\t\tnumberOfLines={ 1 }\n\t\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-media-replace-title\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Truncate>\n\t\t\t\t\t<VisuallyHidden render={ <span /> }>\n\t\t\t\t\t\t{ imgUrl\n\t\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: file name */\n\t\t\t\t\t\t\t\t\t__( 'Background image: %s' ),\n\t\t\t\t\t\t\t\t\tfilename || label\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: __( 'No background image selected' ) }\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t</FlexBlock>\n\t\t\t</HStack>\n\t\t);\n\t};\n\n\treturn as === 'button' ? (\n\t\t<Button __next40pxDefaultSize { ...restToggleProps }>\n\t\t\t{ renderPreviewContent() }\n\t\t</Button>\n\t) : (\n\t\trenderPreviewContent()\n\t);\n}\n\nfunction BackgroundControlsPanel( {\n\tlabel,\n\tfilename,\n\turl: imgUrl,\n\tchildren,\n\tonToggle: onToggleCallback = noop,\n\thasImageValue,\n\tonReset,\n\tcontainerRef,\n} ) {\n\tif ( ! hasImageValue ) {\n\t\treturn;\n\t}\n\n\tconst imgLabel = label || getFilename( imgUrl ) || __( 'Image' );\n\n\treturn (\n\t\t<Dropdown\n\t\t\tpopoverProps={ BACKGROUND_POPOVER_PROPS }\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => {\n\t\t\t\tconst toggleProps = {\n\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\tclassName:\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__dropdown-toggle',\n\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t'aria-label': __(\n\t\t\t\t\t\t'Background size, position and repeat options.'\n\t\t\t\t\t),\n\t\t\t\t\tisOpen,\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<InspectorImagePreviewItem\n\t\t\t\t\t\t\timgUrl={ imgUrl }\n\t\t\t\t\t\t\tfilename={ filename }\n\t\t\t\t\t\t\tlabel={ imgLabel }\n\t\t\t\t\t\t\ttoggleProps={ toggleProps }\n\t\t\t\t\t\t\tas=\"button\"\n\t\t\t\t\t\t\tonToggleCallback={ onToggleCallback }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ onReset && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tlabel={ __( 'Reset' ) }\n\t\t\t\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__reset\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\ticon={ resetIcon }\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tonReset();\n\t\t\t\t\t\t\t\t\t// Close the dropdown if open.\n\t\t\t\t\t\t\t\t\tif ( isOpen ) {\n\t\t\t\t\t\t\t\t\t\tonToggle();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Focus the toggle button.\n\t\t\t\t\t\t\t\t\tfocusToggleButton( containerRef );\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</>\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t<DropdownContentWrapper\n\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__dropdown-content-wrapper\"\n\t\t\t\t\tpaddingSize=\"medium\"\n\t\t\t\t>\n\t\t\t\t\t{ children }\n\t\t\t\t</DropdownContentWrapper>\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction LoadingSpinner() {\n\treturn (\n\t\t<Placeholder className=\"block-editor-global-styles-background-panel__loading\">\n\t\t\t<Spinner />\n\t\t</Placeholder>\n\t);\n}\n\nfunction BackgroundImageControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tonRemoveImage = noop,\n\tonResetImage = noop,\n\tdisplayInPanel,\n\tdefaultValues,\n\tcontainerRef,\n} ) {\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\n\tconst { id, title, url } = style?.background?.backgroundImage || {\n\t\t...inheritedValue?.background?.backgroundImage,\n\t};\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst onUploadError = ( message ) => {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetIsUploading( false );\n\t};\n\n\tconst resetBackgroundImage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundImage' ],\n\t\t\t\tundefined\n\t\t\t)\n\t\t);\n\n\tconst onSelectMedia = ( media ) => {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tresetBackgroundImage();\n\t\t\tsetIsUploading( false );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetIsUploading( true );\n\t\t\treturn;\n\t\t}\n\n\t\t// For media selections originated from a file upload.\n\t\tif (\n\t\t\t( media.media_type &&\n\t\t\t\tmedia.media_type !== IMAGE_BACKGROUND_TYPE ) ||\n\t\t\t( ! media.media_type &&\n\t\t\t\tmedia.type &&\n\t\t\t\tmedia.type !== IMAGE_BACKGROUND_TYPE )\n\t\t) {\n\t\t\tonUploadError(\n\t\t\t\t__( 'Only images can be used as a background image.' )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst sizeValue =\n\t\t\tstyle?.background?.backgroundSize || defaultValues?.backgroundSize;\n\t\tconst positionValue = style?.background?.backgroundPosition;\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundImage: {\n\t\t\t\t\turl: media.url,\n\t\t\t\t\tid: media.id,\n\t\t\t\t\tsource: 'file',\n\t\t\t\t\ttitle: media.title || undefined,\n\t\t\t\t},\n\t\t\t\tbackgroundPosition:\n\t\t\t\t\t/*\n\t\t\t\t\t * A background image uploaded and set in the editor receives a default background position of '50% 0',\n\t\t\t\t\t * when the background image size is the equivalent of \"Tile\".\n\t\t\t\t\t * This is to increase the chance that the image's focus point is visible.\n\t\t\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t\t\t */\n\t\t\t\t\t! positionValue && ( 'auto' === sizeValue || ! sizeValue )\n\t\t\t\t\t\t? '50% 0'\n\t\t\t\t\t\t: positionValue,\n\t\t\t\tbackgroundSize: sizeValue,\n\t\t\t} )\n\t\t);\n\t\tsetIsUploading( false );\n\t\t// Close the dropdown and focus the toggle button.\n\t\tfocusToggleButton( containerRef );\n\t};\n\n\t// Drag and drop callback, restricting image to one.\n\tconst onFilesDrop = ( filesList ) => {\n\t\tgetSettings().mediaUpload( {\n\t\t\tallowedTypes: [ IMAGE_BACKGROUND_TYPE ],\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tonSelectMedia( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t\tmultiple: false,\n\t\t} );\n\t};\n\n\tconst hasValue = hasBackgroundImageValue( style );\n\n\tconst onRemove = () =>\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\tbackgroundImage: 'none',\n\t\t\t} )\n\t\t);\n\tconst canRemove = ! hasValue && hasBackgroundImageValue( inheritedValue );\n\tconst imgLabel = title || getFilename( url ) || __( 'Image' );\n\n\treturn (\n\t\t<div className=\"block-editor-global-styles-background-panel__image-tools-panel-item\">\n\t\t\t{ isUploading && <LoadingSpinner /> }\n\t\t\t<MediaReplaceFlow\n\t\t\t\tmediaId={ id }\n\t\t\t\tmediaURL={ url }\n\t\t\t\tallowedTypes={ [ IMAGE_BACKGROUND_TYPE ] }\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tonSelect={ onSelectMedia }\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tclassName: clsx( {\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__media-replace-popover':\n\t\t\t\t\t\t\tdisplayInPanel,\n\t\t\t\t\t} ),\n\t\t\t\t} }\n\t\t\t\tname={\n\t\t\t\t\t<InspectorImagePreviewItem\n\t\t\t\t\t\timgUrl={ url }\n\t\t\t\t\t\tfilename={ title }\n\t\t\t\t\t\tlabel={ imgLabel }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\trenderToggle={ ( props ) => (\n\t\t\t\t\t<Button { ...props } __next40pxDefaultSize />\n\t\t\t\t) }\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tonReset={ () => {\n\t\t\t\t\tfocusToggleButton( containerRef );\n\t\t\t\t\tonResetImage();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ canRemove && (\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tfocusToggleButton( containerRef );\n\t\t\t\t\t\t\tonRemove();\n\t\t\t\t\t\t\tonRemoveImage();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) }\n\t\t\t</MediaReplaceFlow>\n\t\t\t<DropZone\n\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\tlabel={ __( 'Drop to upload' ) }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction BackgroundSizeControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tdefaultValues,\n} ) {\n\tconst sizeValue =\n\t\tstyle?.background?.backgroundSize ||\n\t\tinheritedValue?.background?.backgroundSize;\n\tconst repeatValue =\n\t\tstyle?.background?.backgroundRepeat ||\n\t\tinheritedValue?.background?.backgroundRepeat;\n\tconst imageValue =\n\t\tstyle?.background?.backgroundImage?.url ||\n\t\tinheritedValue?.background?.backgroundImage?.url;\n\tconst isUploadedImage = style?.background?.backgroundImage?.id;\n\tconst positionValue =\n\t\tstyle?.background?.backgroundPosition ||\n\t\tinheritedValue?.background?.backgroundPosition;\n\tconst attachmentValue =\n\t\tstyle?.background?.backgroundAttachment ||\n\t\tinheritedValue?.background?.backgroundAttachment;\n\n\t/*\n\t * Set default values for uploaded images.\n\t * The default values are passed by the consumer.\n\t * Block-level controls may have different defaults to root-level controls.\n\t * A falsy value is treated by default as `auto` (Tile).\n\t */\n\tlet currentValueForToggle =\n\t\t! sizeValue && isUploadedImage\n\t\t\t? defaultValues?.backgroundSize\n\t\t\t: sizeValue || 'auto';\n\t/*\n\t * The incoming value could be a value + unit, e.g. '20px'.\n\t * In this case set the value to 'tile'.\n\t */\n\tcurrentValueForToggle = ! [ 'cover', 'contain', 'auto' ].includes(\n\t\tcurrentValueForToggle\n\t)\n\t\t? 'auto'\n\t\t: currentValueForToggle;\n\t/*\n\t * If the current value is `cover` and the repeat value is `undefined`, then\n\t * the toggle should be unchecked as the default state. Otherwise, the toggle\n\t * should reflect the current repeat value.\n\t */\n\tconst repeatCheckedValue = ! (\n\t\trepeatValue === 'no-repeat' ||\n\t\t( currentValueForToggle === 'cover' && repeatValue === undefined )\n\t);\n\n\tconst updateBackgroundSize = ( next ) => {\n\t\t// When switching to 'contain' toggle the repeat off.\n\t\tlet nextRepeat = repeatValue;\n\t\tlet nextPosition = positionValue;\n\n\t\tif ( next === 'contain' ) {\n\t\t\tnextRepeat = 'no-repeat';\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif ( next === 'cover' ) {\n\t\t\tnextRepeat = undefined;\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif (\n\t\t\t( currentValueForToggle === 'cover' ||\n\t\t\t\tcurrentValueForToggle === 'contain' ) &&\n\t\t\tnext === 'auto'\n\t\t) {\n\t\t\tnextRepeat = undefined;\n\t\t\t/*\n\t\t\t * A background image uploaded and set in the editor (an image with a record id),\n\t\t\t * receives a default background position of '50% 0',\n\t\t\t * when the toggle switches to \"Tile\". This is to increase the chance that\n\t\t\t * the image's focus point is visible.\n\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t */\n\t\t\tif ( !! style?.background?.backgroundImage?.id ) {\n\t\t\t\tnextPosition = '50% 0';\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Next will be null when the input is cleared,\n\t\t * in which case the value should be 'auto'.\n\t\t */\n\t\tif ( ! next && currentValueForToggle === 'auto' ) {\n\t\t\tnext = 'auto';\n\t\t}\n\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundPosition: nextPosition,\n\t\t\t\tbackgroundRepeat: nextRepeat,\n\t\t\t\tbackgroundSize: next,\n\t\t\t} )\n\t\t);\n\t};\n\n\tconst updateBackgroundPosition = ( next ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundPosition' ],\n\t\t\t\tcoordsToBackgroundPosition( next )\n\t\t\t)\n\t\t);\n\t};\n\n\tconst toggleIsRepeated = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundRepeat' ],\n\t\t\t\trepeatCheckedValue === true ? 'no-repeat' : 'repeat'\n\t\t\t)\n\t\t);\n\n\tconst toggleScrollWithPage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundAttachment' ],\n\t\t\t\tattachmentValue === 'fixed' ? 'scroll' : 'fixed'\n\t\t\t)\n\t\t);\n\n\t// Set a default background position for non-site-wide, uploaded images with a size of 'contain'.\n\tconst backgroundPositionValue =\n\t\t! positionValue && isUploadedImage && 'contain' === sizeValue\n\t\t\t? defaultValues?.backgroundPosition\n\t\t\t: positionValue;\n\n\treturn (\n\t\t<VStack spacing={ 3 } className=\"single-column\">\n\t\t\t<FocalPointPicker\n\t\t\t\tlabel={ __( 'Focal point' ) }\n\t\t\t\turl={ imageValue }\n\t\t\t\tvalue={ backgroundPositionToCoords( backgroundPositionValue ) }\n\t\t\t\tonChange={ updateBackgroundPosition }\n\t\t\t/>\n\t\t\t<ToggleControl\n\t\t\t\tlabel={ __( 'Fixed background' ) }\n\t\t\t\tchecked={ attachmentValue === 'fixed' }\n\t\t\t\tonChange={ toggleScrollWithPage }\n\t\t\t/>\n\t\t\t<ToggleGroupControl\n\t\t\t\tlabel={ __( 'Size' ) }\n\t\t\t\tvalue={ currentValueForToggle }\n\t\t\t\tonChange={ updateBackgroundSize }\n\t\t\t\tisBlock\n\t\t\t\thelp={ backgroundSizeHelpText(\n\t\t\t\t\tsizeValue || defaultValues?.backgroundSize\n\t\t\t\t) }\n\t\t\t>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey=\"cover\"\n\t\t\t\t\tvalue=\"cover\"\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Cover',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey=\"contain\"\n\t\t\t\t\tvalue=\"contain\"\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Contain',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey=\"tile\"\n\t\t\t\t\tvalue=\"auto\"\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Tile',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</ToggleGroupControl>\n\t\t\t<HStack justify=\"flex-start\" spacing={ 2 } as=\"span\">\n\t\t\t\t<UnitControl\n\t\t\t\t\taria-label={ __( 'Background image width' ) }\n\t\t\t\t\tonChange={ updateBackgroundSize }\n\t\t\t\t\tvalue={ sizeValue }\n\t\t\t\t\t__unstableInputWidth=\"100px\"\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tplaceholder={ __( 'Auto' ) }\n\t\t\t\t\tdisabled={\n\t\t\t\t\t\tcurrentValueForToggle !== 'auto' ||\n\t\t\t\t\t\tcurrentValueForToggle === undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<ToggleControl\n\t\t\t\t\tlabel={ __( 'Repeat' ) }\n\t\t\t\t\tchecked={ repeatCheckedValue }\n\t\t\t\t\tonChange={ toggleIsRepeated }\n\t\t\t\t\tdisabled={ currentValueForToggle === 'cover' }\n\t\t\t\t/>\n\t\t\t</HStack>\n\t\t</VStack>\n\t);\n}\n\nexport default function BackgroundImagePanel( {\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tdefaultValues = {},\n} ) {\n\t/*\n\t * Resolve any inherited \"ref\" pointers.\n\t * Should the block editor need resolved, inherited values\n\t * across all controls, this could be abstracted into a hook,\n\t * e.g., useResolveGlobalStyle\n\t */\n\tconst { globalStyles, _links } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst _settings = getSettings();\n\t\treturn {\n\t\t\tglobalStyles: _settings[ globalStylesDataKey ],\n\t\t\t_links: _settings[ globalStylesLinksDataKey ],\n\t\t};\n\t}, [] );\n\tconst resolvedInheritedValue = useMemo( () => {\n\t\tconst resolvedValues = {\n\t\t\tbackground: {},\n\t\t};\n\n\t\tif ( ! inheritedValue?.background ) {\n\t\t\treturn inheritedValue;\n\t\t}\n\n\t\tObject.entries( inheritedValue?.background ).forEach(\n\t\t\t( [ key, backgroundValue ] ) => {\n\t\t\t\tresolvedValues.background[ key ] = getResolvedValue(\n\t\t\t\t\tbackgroundValue,\n\t\t\t\t\t{\n\t\t\t\t\t\tstyles: globalStyles,\n\t\t\t\t\t\t_links,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t\treturn resolvedValues;\n\t}, [ globalStyles, _links, inheritedValue ] );\n\n\tconst resetBackground = () =>\n\t\tonChange( setImmutably( value, [ 'background' ], {} ) );\n\n\tconst { title, url } = value?.background?.backgroundImage || {\n\t\t...resolvedInheritedValue?.background?.backgroundImage,\n\t};\n\tconst hasImageValue =\n\t\thasBackgroundImageValue( value ) ||\n\t\thasBackgroundImageValue( resolvedInheritedValue );\n\n\tconst imageValue =\n\t\tvalue?.background?.backgroundImage ||\n\t\tinheritedValue?.background?.backgroundImage;\n\n\tconst shouldShowBackgroundImageControls =\n\t\thasImageValue &&\n\t\t'none' !== imageValue &&\n\t\t( settings?.background?.backgroundSize ||\n\t\t\tsettings?.background?.backgroundPosition ||\n\t\t\tsettings?.background?.backgroundRepeat );\n\n\tconst [ isDropDownOpen, setIsDropDownOpen ] = useState( false );\n\tconst containerRef = useRef();\n\n\treturn (\n\t\t<div\n\t\t\tref={ containerRef }\n\t\t\tclassName={ clsx(\n\t\t\t\t'block-editor-global-styles-background-panel__inspector-media-replace-container',\n\t\t\t\t{\n\t\t\t\t\t'is-open': isDropDownOpen,\n\t\t\t\t}\n\t\t\t) }\n\t\t>\n\t\t\t{ shouldShowBackgroundImageControls ? (\n\t\t\t\t<BackgroundControlsPanel\n\t\t\t\t\tlabel={ title }\n\t\t\t\t\tfilename={ title }\n\t\t\t\t\turl={ url }\n\t\t\t\t\tonToggle={ setIsDropDownOpen }\n\t\t\t\t\thasImageValue={ hasImageValue }\n\t\t\t\t\tonReset={ resetBackground }\n\t\t\t\t\tcontainerRef={ containerRef }\n\t\t\t\t>\n\t\t\t\t\t<VStack spacing={ 3 } className=\"single-column\">\n\t\t\t\t\t\t<BackgroundImageControls\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tstyle={ value }\n\t\t\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\t\t\tdisplayInPanel\n\t\t\t\t\t\t\tonResetImage={ () => {\n\t\t\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\t\t\tcontainerRef={ containerRef }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BackgroundSizeControls\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tstyle={ value }\n\t\t\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</VStack>\n\t\t\t\t</BackgroundControlsPanel>\n\t\t\t) : (\n\t\t\t\t<BackgroundImageControls\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tstyle={ value }\n\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\tonResetImage={ () => {\n\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t} }\n\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t\tcontainerRef={ containerRef }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -8,7 +8,7 @@ import BlockTools from "../block-tools/index.mjs";
8
8
  import EditorStyles from "../editor-styles/index.mjs";
9
9
  import Iframe from "../iframe/index.mjs";
10
10
  import WritingFlow from "../writing-flow/index.mjs";
11
- import { useMouseMoveTypingReset } from "../observe-typing/index.mjs";
11
+ import { useMouseMoveTypingReset, useTypingObserver } from "../observe-typing/index.mjs";
12
12
  import { useBlockSelectionClearer } from "../block-selection-clearer/index.mjs";
13
13
  import { useBlockCommands } from "../use-block-commands/index.mjs";
14
14
  import { store as blockEditorStore } from "../../store/index.mjs";
@@ -49,7 +49,12 @@ function ExperimentalBlockCanvas({
49
49
  const resetTypingRef = useMouseMoveTypingReset();
50
50
  const clearerRef = useBlockSelectionClearer();
51
51
  const localRef = useRef();
52
- const contentRef = useMergeRefs([contentRefProp, clearerRef, localRef]);
52
+ const contentRef = useMergeRefs([
53
+ contentRefProp,
54
+ clearerRef,
55
+ localRef,
56
+ useTypingObserver()
57
+ ]);
53
58
  const zoomLevel = useSelect(
54
59
  (select) => unlock(select(blockEditorStore)).getZoomLevel(),
55
60
  []
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-canvas/index.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useMergeRefs, useViewportMatch } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { createSlotFill } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockList from '../block-list';\nimport BlockTools from '../block-tools';\nimport EditorStyles from '../editor-styles';\nimport Iframe from '../iframe';\nimport WritingFlow from '../writing-flow';\nimport { useMouseMoveTypingReset } from '../observe-typing';\nimport { useBlockSelectionClearer } from '../block-selection-clearer';\nimport { useBlockCommands } from '../use-block-commands';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport const BlockCanvasCover = createSlotFill( Symbol( 'BlockCanvasCover' ) );\n\nfunction BlockCanvasCoverWrapper( { children } ) {\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-canvas-cover\"\n\t\t\tstyle={ {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%',\n\t\t\t\tpointerEvents: 'none',\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\n// EditorStyles is a memoized component, so avoid passing a new\n// object reference on each render.\nconst EDITOR_STYLE_TRANSFORM_OPTIONS = {\n\t// Don't transform selectors that already specify `.editor-styles-wrapper`.\n\tignoredSelectors: [ /\\.editor-styles-wrapper/gi ],\n};\n\nexport function ExperimentalBlockCanvas( {\n\tshouldIframe = true,\n\theight = '300px',\n\tchildren = <BlockList />,\n\tstyles,\n\tcontentRef: contentRefProp,\n\tiframeProps,\n} ) {\n\tuseBlockCommands();\n\tconst isTabletViewport = useViewportMatch( 'medium', '<' );\n\tconst resetTypingRef = useMouseMoveTypingReset();\n\tconst clearerRef = useBlockSelectionClearer();\n\tconst localRef = useRef();\n\tconst contentRef = useMergeRefs( [ contentRefProp, clearerRef, localRef ] );\n\tconst zoomLevel = useSelect(\n\t\t( select ) => unlock( select( blockEditorStore ) ).getZoomLevel(),\n\t\t[]\n\t);\n\tconst zoomOutIframeProps =\n\t\tzoomLevel !== 100 && ! isTabletViewport\n\t\t\t? {\n\t\t\t\t\tscale: zoomLevel,\n\t\t\t\t\tframeSize: '40px',\n\t\t\t }\n\t\t\t: {};\n\n\tif ( ! shouldIframe ) {\n\t\treturn (\n\t\t\t<BlockTools\n\t\t\t\t__unstableContentRef={ localRef }\n\t\t\t\tstyle={ { height, display: 'flex' } }\n\t\t\t>\n\t\t\t\t<BlockCanvasCover.Slot fillProps={ { containerRef: localRef } }>\n\t\t\t\t\t{ ( covers ) =>\n\t\t\t\t\t\tcovers.map( ( cover, index ) => (\n\t\t\t\t\t\t\t<BlockCanvasCoverWrapper key={ index }>\n\t\t\t\t\t\t\t\t{ cover }\n\t\t\t\t\t\t\t</BlockCanvasCoverWrapper>\n\t\t\t\t\t\t) )\n\t\t\t\t\t}\n\t\t\t\t</BlockCanvasCover.Slot>\n\t\t\t\t<EditorStyles\n\t\t\t\t\tstyles={ styles }\n\t\t\t\t\tscope=\":where(.editor-styles-wrapper)\"\n\t\t\t\t\ttransformOptions={ EDITOR_STYLE_TRANSFORM_OPTIONS }\n\t\t\t\t/>\n\t\t\t\t<WritingFlow\n\t\t\t\t\tref={ contentRef }\n\t\t\t\t\tclassName=\"editor-styles-wrapper\"\n\t\t\t\t\ttabIndex={ -1 }\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ children }\n\t\t\t\t</WritingFlow>\n\t\t\t</BlockTools>\n\t\t);\n\t}\n\n\treturn (\n\t\t<BlockTools\n\t\t\t__unstableContentRef={ localRef }\n\t\t\tstyle={ { height, display: 'flex' } }\n\t\t>\n\t\t\t<Iframe\n\t\t\t\t{ ...iframeProps }\n\t\t\t\t{ ...zoomOutIframeProps }\n\t\t\t\tref={ resetTypingRef }\n\t\t\t\tcontentRef={ contentRef }\n\t\t\t\tstyle={ {\n\t\t\t\t\t...iframeProps?.style,\n\t\t\t\t} }\n\t\t\t\tname=\"editor-canvas\"\n\t\t\t>\n\t\t\t\t<BlockCanvasCover.Slot fillProps={ { containerRef: localRef } }>\n\t\t\t\t\t{ ( covers ) =>\n\t\t\t\t\t\tcovers.map( ( cover, index ) => (\n\t\t\t\t\t\t\t<BlockCanvasCoverWrapper key={ index }>\n\t\t\t\t\t\t\t\t{ cover }\n\t\t\t\t\t\t\t</BlockCanvasCoverWrapper>\n\t\t\t\t\t\t) )\n\t\t\t\t\t}\n\t\t\t\t</BlockCanvasCover.Slot>\n\t\t\t\t<EditorStyles styles={ styles } />\n\t\t\t\t{ children }\n\t\t\t</Iframe>\n\t\t</BlockTools>\n\t);\n}\n\n/**\n * BlockCanvas component is a component used to display the canvas of the block editor.\n * What we call the canvas is an iframe containing the block list that you can manipulate.\n * The component is also responsible of wiring up all the necessary hooks to enable\n * the keyboard navigation across blocks in the editor and inject content styles into the iframe.\n *\n * @example\n *\n * ```jsx\n * function MyBlockEditor() {\n * const [ blocks, updateBlocks ] = useState([]);\n * return (\n * <BlockEditorProvider\n * value={ blocks }\n * onInput={ updateBlocks }\n * onChange={ persistBlocks }\n * >\n * <BlockCanvas height=\"400px\" />\n * </BlockEditorProvider>\n * );\n * }\n * ```\n *\n * @param {Object} props Component props.\n * @param {string} props.height Canvas height, defaults to 300px.\n * @param {Array} props.styles Content styles to inject into the iframe.\n * @param {Element} props.children Content of the canvas, defaults to the BlockList component.\n * @return {Element} Block Breadcrumb.\n */\nfunction BlockCanvas( { children, height, styles } ) {\n\treturn (\n\t\t<ExperimentalBlockCanvas height={ height } styles={ styles }>\n\t\t\t{ children }\n\t\t</ExperimentalBlockCanvas>\n\t);\n}\n\nexport default BlockCanvas;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useMergeRefs, useViewportMatch } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { createSlotFill } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockList from '../block-list';\nimport BlockTools from '../block-tools';\nimport EditorStyles from '../editor-styles';\nimport Iframe from '../iframe';\nimport WritingFlow from '../writing-flow';\nimport { useMouseMoveTypingReset, useTypingObserver } from '../observe-typing';\nimport { useBlockSelectionClearer } from '../block-selection-clearer';\nimport { useBlockCommands } from '../use-block-commands';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport const BlockCanvasCover = createSlotFill( Symbol( 'BlockCanvasCover' ) );\n\nfunction BlockCanvasCoverWrapper( { children } ) {\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-canvas-cover\"\n\t\t\tstyle={ {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%',\n\t\t\t\tpointerEvents: 'none',\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\n// EditorStyles is a memoized component, so avoid passing a new\n// object reference on each render.\nconst EDITOR_STYLE_TRANSFORM_OPTIONS = {\n\t// Don't transform selectors that already specify `.editor-styles-wrapper`.\n\tignoredSelectors: [ /\\.editor-styles-wrapper/gi ],\n};\n\nexport function ExperimentalBlockCanvas( {\n\tshouldIframe = true,\n\theight = '300px',\n\tchildren = <BlockList />,\n\tstyles,\n\tcontentRef: contentRefProp,\n\tiframeProps,\n} ) {\n\tuseBlockCommands();\n\tconst isTabletViewport = useViewportMatch( 'medium', '<' );\n\tconst resetTypingRef = useMouseMoveTypingReset();\n\tconst clearerRef = useBlockSelectionClearer();\n\tconst localRef = useRef();\n\t// Attached to the same node as the writing flow ref: the iframe body,\n\t// or the WritingFlow element when the canvas is not iframed.\n\tconst contentRef = useMergeRefs( [\n\t\tcontentRefProp,\n\t\tclearerRef,\n\t\tlocalRef,\n\t\tuseTypingObserver(),\n\t] );\n\tconst zoomLevel = useSelect(\n\t\t( select ) => unlock( select( blockEditorStore ) ).getZoomLevel(),\n\t\t[]\n\t);\n\tconst zoomOutIframeProps =\n\t\tzoomLevel !== 100 && ! isTabletViewport\n\t\t\t? {\n\t\t\t\t\tscale: zoomLevel,\n\t\t\t\t\tframeSize: '40px',\n\t\t\t }\n\t\t\t: {};\n\n\tif ( ! shouldIframe ) {\n\t\treturn (\n\t\t\t<BlockTools\n\t\t\t\t__unstableContentRef={ localRef }\n\t\t\t\tstyle={ { height, display: 'flex' } }\n\t\t\t>\n\t\t\t\t<BlockCanvasCover.Slot fillProps={ { containerRef: localRef } }>\n\t\t\t\t\t{ ( covers ) =>\n\t\t\t\t\t\tcovers.map( ( cover, index ) => (\n\t\t\t\t\t\t\t<BlockCanvasCoverWrapper key={ index }>\n\t\t\t\t\t\t\t\t{ cover }\n\t\t\t\t\t\t\t</BlockCanvasCoverWrapper>\n\t\t\t\t\t\t) )\n\t\t\t\t\t}\n\t\t\t\t</BlockCanvasCover.Slot>\n\t\t\t\t<EditorStyles\n\t\t\t\t\tstyles={ styles }\n\t\t\t\t\tscope=\":where(.editor-styles-wrapper)\"\n\t\t\t\t\ttransformOptions={ EDITOR_STYLE_TRANSFORM_OPTIONS }\n\t\t\t\t/>\n\t\t\t\t<WritingFlow\n\t\t\t\t\tref={ contentRef }\n\t\t\t\t\tclassName=\"editor-styles-wrapper\"\n\t\t\t\t\ttabIndex={ -1 }\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ children }\n\t\t\t\t</WritingFlow>\n\t\t\t</BlockTools>\n\t\t);\n\t}\n\n\treturn (\n\t\t<BlockTools\n\t\t\t__unstableContentRef={ localRef }\n\t\t\tstyle={ { height, display: 'flex' } }\n\t\t>\n\t\t\t<Iframe\n\t\t\t\t{ ...iframeProps }\n\t\t\t\t{ ...zoomOutIframeProps }\n\t\t\t\tref={ resetTypingRef }\n\t\t\t\tcontentRef={ contentRef }\n\t\t\t\tstyle={ {\n\t\t\t\t\t...iframeProps?.style,\n\t\t\t\t} }\n\t\t\t\tname=\"editor-canvas\"\n\t\t\t>\n\t\t\t\t<BlockCanvasCover.Slot fillProps={ { containerRef: localRef } }>\n\t\t\t\t\t{ ( covers ) =>\n\t\t\t\t\t\tcovers.map( ( cover, index ) => (\n\t\t\t\t\t\t\t<BlockCanvasCoverWrapper key={ index }>\n\t\t\t\t\t\t\t\t{ cover }\n\t\t\t\t\t\t\t</BlockCanvasCoverWrapper>\n\t\t\t\t\t\t) )\n\t\t\t\t\t}\n\t\t\t\t</BlockCanvasCover.Slot>\n\t\t\t\t<EditorStyles styles={ styles } />\n\t\t\t\t{ children }\n\t\t\t</Iframe>\n\t\t</BlockTools>\n\t);\n}\n\n/**\n * BlockCanvas component is a component used to display the canvas of the block editor.\n * What we call the canvas is an iframe containing the block list that you can manipulate.\n * The component is also responsible of wiring up all the necessary hooks to enable\n * the keyboard navigation across blocks in the editor and inject content styles into the iframe.\n *\n * @example\n *\n * ```jsx\n * function MyBlockEditor() {\n * const [ blocks, updateBlocks ] = useState([]);\n * return (\n * <BlockEditorProvider\n * value={ blocks }\n * onInput={ updateBlocks }\n * onChange={ persistBlocks }\n * >\n * <BlockCanvas height=\"400px\" />\n * </BlockEditorProvider>\n * );\n * }\n * ```\n *\n * @param {Object} props Component props.\n * @param {string} props.height Canvas height, defaults to 300px.\n * @param {Array} props.styles Content styles to inject into the iframe.\n * @param {Element} props.children Content of the canvas, defaults to the BlockList component.\n * @return {Element} Block Breadcrumb.\n */\nfunction BlockCanvas( { children, height, styles } ) {\n\treturn (\n\t\t<ExperimentalBlockCanvas height={ height } styles={ styles }>\n\t\t\t{ children }\n\t\t</ExperimentalBlockCanvas>\n\t);\n}\n\nexport default BlockCanvas;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -5,12 +5,14 @@ var BlockControlsBlock = createSlotFill("BlockControlsBlock");
5
5
  var BlockControlsInline = createSlotFill("BlockFormatControls");
6
6
  var BlockControlsOther = createSlotFill("BlockControlsOther");
7
7
  var BlockControlsParent = createSlotFill("BlockControlsParent");
8
+ var BlockControlsStyleState = createSlotFill("BlockControlsStyleState");
8
9
  var groups = {
9
10
  default: BlockControlsDefault,
10
11
  block: BlockControlsBlock,
11
12
  inline: BlockControlsInline,
12
13
  other: BlockControlsOther,
13
- parent: BlockControlsParent
14
+ parent: BlockControlsParent,
15
+ "style-state": BlockControlsStyleState
14
16
  };
15
17
  var groups_default = groups;
16
18
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-controls/groups.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst BlockControlsDefault = createSlotFill( 'BlockControls' );\nconst BlockControlsBlock = createSlotFill( 'BlockControlsBlock' );\nconst BlockControlsInline = createSlotFill( 'BlockFormatControls' );\nconst BlockControlsOther = createSlotFill( 'BlockControlsOther' );\nconst BlockControlsParent = createSlotFill( 'BlockControlsParent' );\n\nconst groups = {\n\tdefault: BlockControlsDefault,\n\tblock: BlockControlsBlock,\n\tinline: BlockControlsInline,\n\tother: BlockControlsOther,\n\tparent: BlockControlsParent,\n};\n\nexport default groups;\n"],
5
- "mappings": ";AAGA,SAAS,sBAAsB;AAE/B,IAAM,uBAAuB,eAAgB,eAAgB;AAC7D,IAAM,qBAAqB,eAAgB,oBAAqB;AAChE,IAAM,sBAAsB,eAAgB,qBAAsB;AAClE,IAAM,qBAAqB,eAAgB,oBAAqB;AAChE,IAAM,sBAAsB,eAAgB,qBAAsB;AAElE,IAAM,SAAS;AAAA,EACd,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AACT;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst BlockControlsDefault = createSlotFill( 'BlockControls' );\nconst BlockControlsBlock = createSlotFill( 'BlockControlsBlock' );\nconst BlockControlsInline = createSlotFill( 'BlockFormatControls' );\nconst BlockControlsOther = createSlotFill( 'BlockControlsOther' );\nconst BlockControlsParent = createSlotFill( 'BlockControlsParent' );\nconst BlockControlsStyleState = createSlotFill( 'BlockControlsStyleState' );\n\nconst groups = {\n\tdefault: BlockControlsDefault,\n\tblock: BlockControlsBlock,\n\tinline: BlockControlsInline,\n\tother: BlockControlsOther,\n\tparent: BlockControlsParent,\n\t'style-state': BlockControlsStyleState,\n};\n\nexport default groups;\n"],
5
+ "mappings": ";AAGA,SAAS,sBAAsB;AAE/B,IAAM,uBAAuB,eAAgB,eAAgB;AAC7D,IAAM,qBAAqB,eAAgB,oBAAqB;AAChE,IAAM,sBAAsB,eAAgB,qBAAsB;AAClE,IAAM,qBAAqB,eAAgB,oBAAqB;AAChE,IAAM,sBAAsB,eAAgB,qBAAsB;AAClE,IAAM,0BAA0B,eAAgB,yBAA0B;AAE1E,IAAM,SAAS;AAAA,EACd,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AAChB;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -12,13 +12,13 @@ import { useCallback, useContext, useMemo } from "@wordpress/element";
12
12
  import BlockContext from "../block-context/index.mjs";
13
13
  import isURLLike from "../link-control/is-url-like.mjs";
14
14
  import {
15
+ getBlockBindingsContext,
15
16
  hasPatternOverridesDefaultBinding,
16
17
  replacePatternOverridesDefaultBinding
17
18
  } from "../../utils/block-bindings.mjs";
18
19
  import { unlock } from "../../lock-unlock.mjs";
19
20
  import { PrivateBlockContext } from "../block-list/private-block-context.mjs";
20
21
  import { jsx } from "react/jsx-runtime";
21
- var DEFAULT_BLOCK_CONTEXT = {};
22
22
  var Edit = (props) => {
23
23
  const { name } = props;
24
24
  const blockType = getBlockType(name);
@@ -40,28 +40,21 @@ var EditWithGeneratedProps = (props) => {
40
40
  );
41
41
  const { bindableAttributes } = useContext(PrivateBlockContext);
42
42
  const { blockBindings, context, hasPatternOverrides } = useMemo(() => {
43
- const computedContext = blockType?.usesContext ? Object.fromEntries(
44
- Object.entries(blockContext).filter(
45
- ([key]) => blockType.usesContext.includes(key)
46
- )
47
- ) : DEFAULT_BLOCK_CONTEXT;
48
- if (attributes?.metadata?.bindings) {
49
- Object.values(attributes?.metadata?.bindings || {}).forEach(
50
- (binding) => {
51
- registeredSources[binding?.source]?.usesContext?.forEach(
52
- (key) => {
53
- computedContext[key] = blockContext[key];
54
- }
55
- );
56
- }
57
- );
58
- }
59
43
  return {
60
44
  blockBindings: replacePatternOverridesDefaultBinding(
61
45
  attributes?.metadata?.bindings,
62
46
  bindableAttributes
63
47
  ),
64
- context: computedContext,
48
+ // Assign context values using the block type's declared context
49
+ // needs, plus the context requested by the block's bindings
50
+ // sources.
51
+ context: getBlockBindingsContext(
52
+ blockContext,
53
+ blockType?.usesContext,
54
+ attributes?.metadata?.bindings ? Object.values(attributes.metadata.bindings).map(
55
+ (binding) => registeredSources[binding?.source]
56
+ ) : void 0
57
+ ),
65
58
  hasPatternOverrides: hasPatternOverridesDefaultBinding(
66
59
  attributes?.metadata?.bindings
67
60
  )