@wordpress/block-editor 17.1.0 → 17.2.1-next.v.202609171837.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +214 -214
  3. package/build/autocompleters/block.cjs.map +2 -2
  4. package/build/components/alignment-control/ui.cjs.map +2 -2
  5. package/build/components/background-image-control/index.cjs +1 -1
  6. package/build/components/background-image-control/index.cjs.map +2 -2
  7. package/build/components/block-alignment-control/ui.cjs +21 -7
  8. package/build/components/block-alignment-control/ui.cjs.map +3 -3
  9. package/build/components/block-alignment-control/use-available-alignments.cjs +60 -13
  10. package/build/components/block-alignment-control/use-available-alignments.cjs.map +2 -2
  11. package/build/components/block-allowed-blocks/allowed-blocks-control.cjs.map +2 -2
  12. package/build/components/block-bindings/attribute-control.cjs +30 -30
  13. package/build/components/block-bindings/attribute-control.cjs.map +3 -3
  14. package/build/components/block-bindings/source-fields-list.cjs +27 -32
  15. package/build/components/block-bindings/source-fields-list.cjs.map +3 -3
  16. package/build/components/block-canvas/index.cjs.map +2 -2
  17. package/build/components/block-card/index.cjs +1 -2
  18. package/build/components/block-card/index.cjs.map +3 -3
  19. package/build/components/block-edit/edit.cjs.map +2 -2
  20. package/build/components/block-heading-level-dropdown/index.cjs.map +2 -2
  21. package/build/components/block-icon/index.cjs.map +2 -2
  22. package/build/components/block-inspector/edit-contents.cjs.map +2 -2
  23. package/build/components/block-inspector/index.cjs +27 -8
  24. package/build/components/block-inspector/index.cjs.map +3 -3
  25. package/build/components/block-keyboard-shortcuts/index.cjs.map +2 -2
  26. package/build/components/block-list/block-html.cjs +1 -12
  27. package/build/components/block-list/block-html.cjs.map +3 -3
  28. package/build/components/block-list/block.cjs +2 -4
  29. package/build/components/block-list/block.cjs.map +2 -2
  30. package/build/components/block-list/layout.cjs +1 -1
  31. package/build/components/block-list/layout.cjs.map +2 -2
  32. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  33. package/build/components/block-lock/modal.cjs +1 -3
  34. package/build/components/block-lock/modal.cjs.map +2 -2
  35. package/build/components/block-parent-selector/index.cjs +8 -5
  36. package/build/components/block-parent-selector/index.cjs.map +2 -2
  37. package/build/components/block-popover/index.cjs.map +2 -2
  38. package/build/components/block-rename/modal.cjs.map +2 -2
  39. package/build/components/block-settings-menu/block-settings-dropdown.cjs.map +2 -2
  40. package/build/components/block-styles/utils.cjs.map +2 -2
  41. package/build/components/block-switcher/index.cjs.map +2 -2
  42. package/build/components/block-toolbar/edit-section-button.cjs.map +2 -2
  43. package/build/components/block-toolbar/index.cjs +6 -4
  44. package/build/components/block-toolbar/index.cjs.map +2 -2
  45. package/build/components/block-toolbar/switch-section-style.cjs.map +2 -2
  46. package/build/components/block-variation-transforms/index.cjs +28 -18
  47. package/build/components/block-variation-transforms/index.cjs.map +3 -3
  48. package/build/components/block-visibility/modal.cjs.map +2 -2
  49. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  50. package/build/components/border-radius-control/index.cjs.map +2 -2
  51. package/build/components/color-palette/with-color-context.cjs.map +2 -2
  52. package/build/components/colors/with-colors.cjs.map +2 -2
  53. package/build/components/colors-gradients/control.cjs.map +2 -2
  54. package/build/components/contrast-checker/index.cjs.map +2 -2
  55. package/build/components/date-format-picker/index.cjs.map +2 -2
  56. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +3 -3
  57. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  58. package/build/components/font-sizes/with-font-sizes.cjs.map +2 -2
  59. package/build/components/global-styles/background-panel.cjs +1 -1
  60. package/build/components/global-styles/background-panel.cjs.map +2 -2
  61. package/build/components/global-styles/border-panel.cjs +1 -1
  62. package/build/components/global-styles/border-panel.cjs.map +2 -2
  63. package/build/components/global-styles/color-gradient-dropdown-item.cjs +1 -1
  64. package/build/components/global-styles/color-gradient-dropdown-item.cjs.map +2 -2
  65. package/build/components/global-styles/color-panel.cjs +1 -1
  66. package/build/components/global-styles/color-panel.cjs.map +2 -2
  67. package/build/components/global-styles/dimensions-panel.cjs +1 -1
  68. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  69. package/build/components/global-styles/filters-panel.cjs +1 -1
  70. package/build/components/global-styles/filters-panel.cjs.map +2 -2
  71. package/build/components/global-styles/hooks.cjs +1 -0
  72. package/build/components/global-styles/hooks.cjs.map +2 -2
  73. package/build/components/global-styles/inheritance/index.cjs +3 -3
  74. package/build/components/global-styles/inheritance/index.cjs.map +2 -2
  75. package/build/components/global-styles/inherited-value-context.cjs +0 -5
  76. package/build/components/global-styles/inherited-value-context.cjs.map +2 -2
  77. package/build/components/global-styles/state-control-badges.cjs +0 -1
  78. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  79. package/build/components/global-styles/state-control.cjs +6 -4
  80. package/build/components/global-styles/state-control.cjs.map +2 -2
  81. package/build/components/global-styles/text-shadow-panel.cjs +254 -0
  82. package/build/components/global-styles/text-shadow-panel.cjs.map +7 -0
  83. package/build/components/global-styles/typography-panel.cjs +46 -5
  84. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  85. package/build/components/global-styles/typography-utils.cjs.map +2 -2
  86. package/build/components/global-styles/utils.cjs.map +2 -2
  87. package/build/components/html-element-control/index.cjs.map +3 -3
  88. package/build/components/iframe/index.cjs.map +2 -2
  89. package/build/components/iframe/use-scale-canvas.cjs.map +2 -2
  90. package/build/components/image-size-control/index.cjs.map +3 -3
  91. package/build/components/inner-blocks/index.cjs +6 -1
  92. package/build/components/inner-blocks/index.cjs.map +2 -2
  93. package/build/components/inner-content/index.cjs.map +2 -2
  94. package/build/components/inserter/block-patterns-tab/use-pattern-categories.cjs +4 -23
  95. package/build/components/inserter/block-patterns-tab/use-pattern-categories.cjs.map +2 -2
  96. package/build/components/inserter/block-patterns-tab/utils.cjs +26 -0
  97. package/build/components/inserter/block-patterns-tab/utils.cjs.map +2 -2
  98. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  99. package/build/components/inserter/hooks/use-insertion-point.cjs.map +2 -2
  100. package/build/components/inserter/hooks/use-patterns-state.cjs.map +2 -2
  101. package/build/components/inserter/media-tab/media-panel.cjs.map +2 -2
  102. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  103. package/build/components/inserter-list-item/index.cjs.map +2 -2
  104. package/build/components/inspector-controls/list-view-content-popover.cjs.map +2 -2
  105. package/build/components/link-control/search-results.cjs.map +2 -2
  106. package/build/components/link-control/use-search-handler.cjs +3 -0
  107. package/build/components/link-control/use-search-handler.cjs.map +2 -2
  108. package/build/components/list-view/branch.cjs.map +2 -2
  109. package/build/components/list-view/drop-indicator.cjs.map +2 -2
  110. package/build/components/list-view/index.cjs.map +2 -2
  111. package/build/components/list-view/use-list-view-drop-zone.cjs.map +2 -2
  112. package/build/components/list-view/utils.cjs.map +2 -2
  113. package/build/components/media-replace-flow/index.cjs +4 -1
  114. package/build/components/media-replace-flow/index.cjs.map +2 -2
  115. package/build/components/plain-text/index.cjs +1 -2
  116. package/build/components/plain-text/index.cjs.map +3 -3
  117. package/build/components/preset-input-control/index.cjs.map +2 -2
  118. package/build/components/provider/index.cjs +3 -1
  119. package/build/components/provider/index.cjs.map +2 -2
  120. package/build/components/provider/use-block-sync.cjs.map +2 -2
  121. package/build/components/publish-date-time-picker/index.cjs.map +2 -2
  122. package/build/components/resizable-box-popover/index.cjs +1 -1
  123. package/build/components/resizable-box-popover/index.cjs.map +1 -1
  124. package/build/components/resolution-tool/index.cjs.map +3 -3
  125. package/build/components/rich-text/event-listeners/enter.cjs +8 -22
  126. package/build/components/rich-text/event-listeners/enter.cjs.map +2 -2
  127. package/build/components/rich-text/format-edit.cjs.map +2 -2
  128. package/build/components/rich-text/index.cjs +20 -0
  129. package/build/components/rich-text/index.cjs.map +2 -2
  130. package/build/components/rich-text/multiline.cjs +10 -2
  131. package/build/components/rich-text/multiline.cjs.map +2 -2
  132. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.cjs.map +2 -2
  133. package/build/components/typewriter/index.cjs.map +2 -2
  134. package/build/components/use-block-commands/index.cjs.map +2 -2
  135. package/build/components/writing-flow/index.cjs +3 -0
  136. package/build/components/writing-flow/index.cjs.map +2 -2
  137. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  138. package/build/components/writing-flow/use-selection-observer.cjs +5 -3
  139. package/build/components/writing-flow/use-selection-observer.cjs.map +2 -2
  140. package/build/hooks/align.cjs +3 -5
  141. package/build/hooks/align.cjs.map +2 -2
  142. package/build/hooks/background.cjs.map +2 -2
  143. package/build/hooks/block-bindings.cjs.map +2 -2
  144. package/build/hooks/border.cjs.map +2 -2
  145. package/build/hooks/contrast-checker.cjs.map +2 -2
  146. package/build/hooks/dimensions.cjs.map +2 -2
  147. package/build/hooks/duotone.cjs.map +2 -2
  148. package/build/hooks/elements.cjs.map +2 -2
  149. package/build/hooks/fit-text.cjs.map +2 -2
  150. package/build/hooks/gap.cjs +2 -1
  151. package/build/hooks/gap.cjs.map +3 -3
  152. package/build/hooks/index.cjs +4 -2
  153. package/build/hooks/index.cjs.map +3 -3
  154. package/build/hooks/layout-child.cjs.map +2 -2
  155. package/build/hooks/layout.cjs +15 -14
  156. package/build/hooks/layout.cjs.map +3 -3
  157. package/build/hooks/position.cjs +3 -31
  158. package/build/hooks/position.cjs.map +2 -2
  159. package/build/hooks/states.cjs +3 -2
  160. package/build/hooks/states.cjs.map +2 -2
  161. package/build/hooks/text-shadow.cjs +100 -0
  162. package/build/hooks/text-shadow.cjs.map +7 -0
  163. package/build/hooks/typography.cjs +30 -6
  164. package/build/hooks/typography.cjs.map +2 -2
  165. package/build/hooks/utils.cjs +24 -2
  166. package/build/hooks/utils.cjs.map +2 -2
  167. package/build/layouts/grid.cjs.map +2 -2
  168. package/build/layouts/utils.cjs +7 -2
  169. package/build/layouts/utils.cjs.map +2 -2
  170. package/build/private-apis.cjs +9 -6
  171. package/build/private-apis.cjs.map +2 -2
  172. package/build/store/actions.cjs +26 -4
  173. package/build/store/actions.cjs.map +3 -3
  174. package/build/store/private-selectors.cjs.map +2 -2
  175. package/build/store/reducer.cjs.map +2 -2
  176. package/build/store/selectors.cjs.map +2 -2
  177. package/build/utils/get-font-styles-and-weights.cjs.map +2 -2
  178. package/build/utils/transform-styles/index.cjs.map +1 -1
  179. package/build-module/autocompleters/block.mjs.map +2 -2
  180. package/build-module/components/alignment-control/ui.mjs.map +2 -2
  181. package/build-module/components/background-image-control/index.mjs +2 -2
  182. package/build-module/components/background-image-control/index.mjs.map +2 -2
  183. package/build-module/components/block-alignment-control/ui.mjs +21 -7
  184. package/build-module/components/block-alignment-control/ui.mjs.map +2 -2
  185. package/build-module/components/block-alignment-control/use-available-alignments.mjs +56 -13
  186. package/build-module/components/block-alignment-control/use-available-alignments.mjs.map +2 -2
  187. package/build-module/components/block-allowed-blocks/allowed-blocks-control.mjs.map +2 -2
  188. package/build-module/components/block-bindings/attribute-control.mjs +31 -32
  189. package/build-module/components/block-bindings/attribute-control.mjs.map +2 -2
  190. package/build-module/components/block-bindings/source-fields-list.mjs +25 -30
  191. package/build-module/components/block-bindings/source-fields-list.mjs.map +2 -2
  192. package/build-module/components/block-canvas/index.mjs.map +2 -2
  193. package/build-module/components/block-card/index.mjs +3 -8
  194. package/build-module/components/block-card/index.mjs.map +2 -2
  195. package/build-module/components/block-edit/edit.mjs.map +2 -2
  196. package/build-module/components/block-heading-level-dropdown/index.mjs.map +2 -2
  197. package/build-module/components/block-icon/index.mjs.map +2 -2
  198. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  199. package/build-module/components/block-inspector/index.mjs +29 -10
  200. package/build-module/components/block-inspector/index.mjs.map +2 -2
  201. package/build-module/components/block-keyboard-shortcuts/index.mjs.map +2 -2
  202. package/build-module/components/block-list/block-html.mjs +1 -2
  203. package/build-module/components/block-list/block-html.mjs.map +2 -2
  204. package/build-module/components/block-list/block.mjs +2 -4
  205. package/build-module/components/block-list/block.mjs.map +2 -2
  206. package/build-module/components/block-list/layout.mjs +1 -1
  207. package/build-module/components/block-list/layout.mjs.map +2 -2
  208. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  209. package/build-module/components/block-lock/modal.mjs +1 -3
  210. package/build-module/components/block-lock/modal.mjs.map +2 -2
  211. package/build-module/components/block-parent-selector/index.mjs +8 -5
  212. package/build-module/components/block-parent-selector/index.mjs.map +2 -2
  213. package/build-module/components/block-popover/index.mjs.map +2 -2
  214. package/build-module/components/block-rename/modal.mjs.map +2 -2
  215. package/build-module/components/block-settings-menu/block-settings-dropdown.mjs.map +2 -2
  216. package/build-module/components/block-styles/utils.mjs.map +2 -2
  217. package/build-module/components/block-switcher/index.mjs.map +2 -2
  218. package/build-module/components/block-toolbar/edit-section-button.mjs.map +2 -2
  219. package/build-module/components/block-toolbar/index.mjs +6 -4
  220. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  221. package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
  222. package/build-module/components/block-variation-transforms/index.mjs +30 -21
  223. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  224. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  225. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  226. package/build-module/components/border-radius-control/index.mjs.map +2 -2
  227. package/build-module/components/color-palette/with-color-context.mjs.map +2 -2
  228. package/build-module/components/colors/with-colors.mjs.map +2 -2
  229. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  230. package/build-module/components/contrast-checker/index.mjs.map +2 -2
  231. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  232. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +2 -2
  233. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  234. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  235. package/build-module/components/font-sizes/with-font-sizes.mjs.map +2 -2
  236. package/build-module/components/global-styles/background-panel.mjs +2 -2
  237. package/build-module/components/global-styles/background-panel.mjs.map +2 -2
  238. package/build-module/components/global-styles/border-panel.mjs +2 -2
  239. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  240. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs +2 -2
  241. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs.map +2 -2
  242. package/build-module/components/global-styles/color-panel.mjs +2 -2
  243. package/build-module/components/global-styles/color-panel.mjs.map +2 -2
  244. package/build-module/components/global-styles/dimensions-panel.mjs +2 -2
  245. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  246. package/build-module/components/global-styles/filters-panel.mjs +2 -2
  247. package/build-module/components/global-styles/filters-panel.mjs.map +2 -2
  248. package/build-module/components/global-styles/hooks.mjs +1 -0
  249. package/build-module/components/global-styles/hooks.mjs.map +2 -2
  250. package/build-module/components/global-styles/inheritance/index.mjs +2 -2
  251. package/build-module/components/global-styles/inheritance/index.mjs.map +2 -2
  252. package/build-module/components/global-styles/inherited-value-context.mjs +0 -5
  253. package/build-module/components/global-styles/inherited-value-context.mjs.map +2 -2
  254. package/build-module/components/global-styles/state-control-badges.mjs +0 -1
  255. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  256. package/build-module/components/global-styles/state-control.mjs +6 -4
  257. package/build-module/components/global-styles/state-control.mjs.map +2 -2
  258. package/build-module/components/global-styles/text-shadow-panel.mjs +224 -0
  259. package/build-module/components/global-styles/text-shadow-panel.mjs.map +7 -0
  260. package/build-module/components/global-styles/typography-panel.mjs +47 -6
  261. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  262. package/build-module/components/global-styles/typography-utils.mjs.map +2 -2
  263. package/build-module/components/global-styles/utils.mjs.map +2 -2
  264. package/build-module/components/html-element-control/index.mjs +2 -2
  265. package/build-module/components/html-element-control/index.mjs.map +2 -2
  266. package/build-module/components/iframe/index.mjs.map +2 -2
  267. package/build-module/components/iframe/use-scale-canvas.mjs.map +2 -2
  268. package/build-module/components/image-size-control/index.mjs +2 -2
  269. package/build-module/components/image-size-control/index.mjs.map +2 -2
  270. package/build-module/components/inner-blocks/index.mjs +6 -1
  271. package/build-module/components/inner-blocks/index.mjs.map +2 -2
  272. package/build-module/components/inner-content/index.mjs.map +2 -2
  273. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.mjs +6 -24
  274. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.mjs.map +2 -2
  275. package/build-module/components/inserter/block-patterns-tab/utils.mjs +25 -0
  276. package/build-module/components/inserter/block-patterns-tab/utils.mjs.map +2 -2
  277. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  278. package/build-module/components/inserter/hooks/use-insertion-point.mjs.map +2 -2
  279. package/build-module/components/inserter/hooks/use-patterns-state.mjs.map +2 -2
  280. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  281. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  282. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  283. package/build-module/components/inspector-controls/list-view-content-popover.mjs.map +2 -2
  284. package/build-module/components/link-control/search-results.mjs.map +2 -2
  285. package/build-module/components/link-control/use-search-handler.mjs +3 -0
  286. package/build-module/components/link-control/use-search-handler.mjs.map +2 -2
  287. package/build-module/components/list-view/branch.mjs.map +2 -2
  288. package/build-module/components/list-view/drop-indicator.mjs.map +2 -2
  289. package/build-module/components/list-view/index.mjs.map +2 -2
  290. package/build-module/components/list-view/use-list-view-drop-zone.mjs.map +2 -2
  291. package/build-module/components/list-view/utils.mjs.map +2 -2
  292. package/build-module/components/media-replace-flow/index.mjs +4 -1
  293. package/build-module/components/media-replace-flow/index.mjs.map +2 -2
  294. package/build-module/components/plain-text/index.mjs +1 -2
  295. package/build-module/components/plain-text/index.mjs.map +2 -2
  296. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  297. package/build-module/components/provider/index.mjs +3 -1
  298. package/build-module/components/provider/index.mjs.map +2 -2
  299. package/build-module/components/provider/use-block-sync.mjs.map +2 -2
  300. package/build-module/components/publish-date-time-picker/index.mjs.map +2 -2
  301. package/build-module/components/resizable-box-popover/index.mjs +1 -1
  302. package/build-module/components/resizable-box-popover/index.mjs.map +1 -1
  303. package/build-module/components/resolution-tool/index.mjs +2 -2
  304. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  305. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -22
  306. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  307. package/build-module/components/rich-text/format-edit.mjs.map +2 -2
  308. package/build-module/components/rich-text/index.mjs +21 -0
  309. package/build-module/components/rich-text/index.mjs.map +2 -2
  310. package/build-module/components/rich-text/multiline.mjs +11 -3
  311. package/build-module/components/rich-text/multiline.mjs.map +2 -2
  312. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.mjs.map +2 -2
  313. package/build-module/components/typewriter/index.mjs.map +2 -2
  314. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  315. package/build-module/components/writing-flow/index.mjs +3 -0
  316. package/build-module/components/writing-flow/index.mjs.map +2 -2
  317. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  318. package/build-module/components/writing-flow/use-selection-observer.mjs +5 -3
  319. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  320. package/build-module/hooks/align.mjs +6 -6
  321. package/build-module/hooks/align.mjs.map +2 -2
  322. package/build-module/hooks/background.mjs.map +2 -2
  323. package/build-module/hooks/block-bindings.mjs.map +2 -2
  324. package/build-module/hooks/border.mjs.map +2 -2
  325. package/build-module/hooks/contrast-checker.mjs.map +2 -2
  326. package/build-module/hooks/dimensions.mjs.map +2 -2
  327. package/build-module/hooks/duotone.mjs.map +2 -2
  328. package/build-module/hooks/elements.mjs.map +2 -2
  329. package/build-module/hooks/fit-text.mjs.map +2 -2
  330. package/build-module/hooks/gap.mjs +2 -1
  331. package/build-module/hooks/gap.mjs.map +2 -2
  332. package/build-module/hooks/index.mjs +4 -2
  333. package/build-module/hooks/index.mjs.map +2 -2
  334. package/build-module/hooks/layout-child.mjs.map +2 -2
  335. package/build-module/hooks/layout.mjs +6 -5
  336. package/build-module/hooks/layout.mjs.map +2 -2
  337. package/build-module/hooks/position.mjs +5 -33
  338. package/build-module/hooks/position.mjs.map +2 -2
  339. package/build-module/hooks/states.mjs +3 -2
  340. package/build-module/hooks/states.mjs.map +2 -2
  341. package/build-module/hooks/text-shadow.mjs +65 -0
  342. package/build-module/hooks/text-shadow.mjs.map +7 -0
  343. package/build-module/hooks/typography.mjs +30 -6
  344. package/build-module/hooks/typography.mjs.map +2 -2
  345. package/build-module/hooks/utils.mjs +24 -2
  346. package/build-module/hooks/utils.mjs.map +2 -2
  347. package/build-module/layouts/grid.mjs.map +2 -2
  348. package/build-module/layouts/utils.mjs +5 -1
  349. package/build-module/layouts/utils.mjs.map +2 -2
  350. package/build-module/private-apis.mjs +6 -2
  351. package/build-module/private-apis.mjs.map +2 -2
  352. package/build-module/store/actions.mjs +28 -5
  353. package/build-module/store/actions.mjs.map +3 -3
  354. package/build-module/store/private-selectors.mjs.map +2 -2
  355. package/build-module/store/reducer.mjs.map +2 -2
  356. package/build-module/store/selectors.mjs.map +2 -2
  357. package/build-module/utils/get-font-styles-and-weights.mjs.map +2 -2
  358. package/build-module/utils/transform-styles/index.mjs.map +1 -1
  359. package/build-style/content-rtl.css +7 -2
  360. package/build-style/content.css +7 -2
  361. package/build-style/style-rtl.css +90 -25
  362. package/build-style/style.css +92 -25
  363. package/package.json +42 -43
  364. package/src/autocompleters/block.jsx +4 -4
  365. package/src/components/alignment-control/ui.jsx +1 -1
  366. package/src/components/background-image-control/index.jsx +3 -3
  367. package/src/components/block-alignment-control/test/index.jsdom.test.jsx +267 -0
  368. package/src/components/block-alignment-control/ui.jsx +47 -9
  369. package/src/components/block-alignment-control/use-available-alignments.js +106 -20
  370. package/src/components/block-allowed-blocks/allowed-blocks-control.jsx +1 -1
  371. package/src/components/block-bindings/attribute-control.jsx +27 -29
  372. package/src/components/block-bindings/source-fields-list.jsx +22 -32
  373. package/src/components/block-bindings/test/attribute-control.jsdom.test.jsx +115 -0
  374. package/src/components/block-canvas/index.jsx +1 -1
  375. package/src/components/block-card/index.jsx +5 -11
  376. package/src/components/block-card/style.scss +1 -0
  377. package/src/components/block-edit/edit.jsx +1 -1
  378. package/src/components/block-heading-level-dropdown/index.jsx +1 -1
  379. package/src/components/block-icon/index.jsx +1 -1
  380. package/src/components/block-icon/test/index.browser.test.jsx +74 -0
  381. package/src/components/block-inspector/edit-contents.jsx +2 -2
  382. package/src/components/block-inspector/index.jsx +46 -15
  383. package/src/components/block-inspector/style.scss +16 -0
  384. package/src/components/block-keyboard-shortcuts/index.jsx +2 -2
  385. package/src/components/block-list/block-html.jsx +2 -3
  386. package/src/components/block-list/block.jsx +7 -5
  387. package/src/components/block-list/content.scss +3 -2
  388. package/src/components/block-list/layout.jsx +4 -1
  389. package/src/components/block-list/test/layout.jsdom.test.js +40 -0
  390. package/src/components/block-list/use-block-props/index.js +1 -1
  391. package/src/components/block-lock/modal.jsx +2 -3
  392. package/src/components/block-lock/style.scss +1 -1
  393. package/src/components/block-mover/style.scss +0 -13
  394. package/src/components/block-parent-selector/index.jsx +12 -6
  395. package/src/components/block-patterns-list/style.scss +1 -1
  396. package/src/components/block-popover/index.jsx +1 -1
  397. package/src/components/block-rename/modal.jsx +3 -3
  398. package/src/components/block-settings-menu/block-settings-dropdown.jsx +1 -1
  399. package/src/components/block-styles/utils.js +1 -1
  400. package/src/components/block-switcher/index.jsx +3 -3
  401. package/src/components/block-toolbar/edit-section-button.jsx +2 -2
  402. package/src/components/block-toolbar/index.jsx +8 -4
  403. package/src/components/block-toolbar/switch-section-style.jsx +1 -1
  404. package/src/components/block-variation-transforms/index.jsx +24 -23
  405. package/src/components/block-variation-transforms/test/index.jsdom.test.jsx +93 -0
  406. package/src/components/block-visibility/modal.jsx +7 -7
  407. package/src/components/block-visibility/style.scss +1 -1
  408. package/src/components/block-visibility/viewport-visibility-info.jsx +5 -7
  409. package/src/components/border-radius-control/index.jsx +2 -2
  410. package/src/components/border-radius-control/test/index.jsdom.test.jsx +0 -22
  411. package/src/components/border-radius-control/test/select.browser.test.js +30 -0
  412. package/src/components/color-palette/with-color-context.jsx +1 -1
  413. package/src/components/colors/with-colors.jsx +1 -1
  414. package/src/components/colors-gradients/control.jsx +2 -2
  415. package/src/components/colors-gradients/test/{control.jsdom.test.jsx → control.browser.test.jsx} +6 -9
  416. package/src/components/contrast-checker/index.jsx +2 -2
  417. package/src/components/date-format-picker/index.jsx +2 -2
  418. package/src/components/dimensions-tool/aspect-ratio-tool.jsx +4 -4
  419. package/src/components/dimensions-tool/test/index.jsdom.test.jsx +17 -11
  420. package/src/components/dimensions-tool/width-height-tool.jsx +2 -2
  421. package/src/components/font-sizes/with-font-sizes.jsx +2 -3
  422. package/src/components/global-styles/background-panel.jsx +2 -2
  423. package/src/components/global-styles/border-panel.jsx +2 -2
  424. package/src/components/global-styles/color-gradient-dropdown-item.jsx +3 -3
  425. package/src/components/global-styles/color-panel.jsx +3 -3
  426. package/src/components/global-styles/dimensions-panel.jsx +6 -6
  427. package/src/components/global-styles/filters-panel.jsx +2 -2
  428. package/src/components/global-styles/hooks.js +1 -0
  429. package/src/components/global-styles/inheritance/index.jsx +9 -6
  430. package/src/components/global-styles/inheritance/test/{index.jsdom.test.jsx → index.browser.test.jsx} +34 -28
  431. package/src/components/global-styles/inherited-value-context.js +1 -9
  432. package/src/components/global-styles/state-control-badges.jsx +0 -1
  433. package/src/components/global-styles/state-control.jsx +12 -3
  434. package/src/components/global-styles/style.scss +68 -0
  435. package/src/components/global-styles/test/{color-panel.jsdom.test.jsx → color-panel.browser.test.jsx} +53 -54
  436. package/src/components/global-styles/test/inherited-value-context-core.jsdom.test.js +17 -26
  437. package/src/components/global-styles/test/{typography-panel-core.jsdom.test.jsx → typography-panel-core.browser.test.jsx} +84 -39
  438. package/src/components/global-styles/test/{typography-panel.jsdom.test.jsx → typography-panel.browser.test.jsx} +80 -122
  439. package/src/components/global-styles/text-shadow-panel.tsx +257 -0
  440. package/src/components/global-styles/typography-panel.jsx +52 -13
  441. package/src/components/global-styles/typography-utils.js +2 -2
  442. package/src/components/global-styles/utils.js +1 -1
  443. package/src/components/html-element-control/index.jsx +2 -2
  444. package/src/components/iframe/index.jsx +1 -1
  445. package/src/components/iframe/use-scale-canvas.js +1 -1
  446. package/src/components/image-size-control/index.jsx +2 -2
  447. package/src/components/inner-blocks/index.jsx +9 -1
  448. package/src/components/inner-content/index.jsx +1 -1
  449. package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +7 -33
  450. package/src/components/inserter/block-patterns-tab/utils.js +44 -0
  451. package/src/components/inserter/hooks/use-block-types-state.js +2 -2
  452. package/src/components/inserter/hooks/use-insertion-point.js +1 -1
  453. package/src/components/inserter/hooks/use-patterns-state.js +1 -1
  454. package/src/components/inserter/media-tab/media-panel.jsx +9 -9
  455. package/src/components/inserter/media-tab/media-preview.jsx +1 -1
  456. package/src/components/inserter-list-item/index.jsx +1 -1
  457. package/src/components/inserter-list-item/style.scss +2 -2
  458. package/src/components/inspector-controls/list-view-content-popover.jsx +1 -1
  459. package/src/components/link-control/search-results.jsx +1 -1
  460. package/src/components/link-control/style.scss +1 -1
  461. package/src/components/link-control/test/index.jsdom.test.jsx +38 -110
  462. package/src/components/link-control/test/keyboard-selection.browser.test.js +110 -0
  463. package/src/components/link-control/use-search-handler.js +8 -3
  464. package/src/components/list-view/branch.jsx +1 -1
  465. package/src/components/list-view/drop-indicator.jsx +3 -3
  466. package/src/components/list-view/index.jsx +1 -1
  467. package/src/components/list-view/style.scss +1 -9
  468. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  469. package/src/components/list-view/utils.js +1 -1
  470. package/src/components/media-replace-flow/index.jsx +4 -1
  471. package/src/components/navigable-toolbar/test/index.browser.test.js +6 -7
  472. package/src/components/plain-text/README.md +3 -2
  473. package/src/components/plain-text/content.scss +0 -1
  474. package/src/components/plain-text/index.jsx +2 -3
  475. package/src/components/plain-text/style.scss +4 -0
  476. package/src/components/preset-input-control/index.jsx +2 -2
  477. package/src/components/preset-input-control/test/index.jsdom.test.jsx +0 -56
  478. package/src/components/preset-input-control/test/interaction.browser.test.js +63 -0
  479. package/src/components/provider/index.jsx +5 -3
  480. package/src/components/provider/use-block-sync.js +5 -5
  481. package/src/components/publish-date-time-picker/index.jsx +1 -1
  482. package/src/components/resizable-box-popover/index.jsx +1 -1
  483. package/src/components/resolution-tool/index.jsx +2 -2
  484. package/src/components/responsive-block-control/style.scss +1 -2
  485. package/src/components/responsive-block-control/test/index.jsdom.test.jsx +2 -2
  486. package/src/components/rich-text/event-listeners/enter.js +16 -23
  487. package/src/components/rich-text/format-edit.jsx +1 -1
  488. package/src/components/rich-text/index.jsx +39 -2
  489. package/src/components/rich-text/multiline.jsx +11 -3
  490. package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  491. package/src/components/spacing-sizes-control/test/index.jsdom.test.jsx +0 -21
  492. package/src/components/spacing-sizes-control/test/select.browser.test.js +58 -0
  493. package/src/components/typewriter/index.jsx +1 -1
  494. package/src/components/url-input/test/fixtures/validated-input-control-deprecation.js +1 -1
  495. package/src/components/use-block-commands/index.js +1 -1
  496. package/src/components/use-block-drop-zone/test/index.js +2 -2
  497. package/src/components/writing-flow/index.jsx +8 -0
  498. package/src/components/writing-flow/use-clipboard-handler.js +1 -1
  499. package/src/components/writing-flow/use-selection-observer.js +15 -6
  500. package/src/content.scss +1 -0
  501. package/src/hooks/align.jsx +22 -6
  502. package/src/hooks/background.jsx +1 -1
  503. package/src/hooks/block-bindings.jsx +1 -1
  504. package/src/hooks/block-hooks.scss +0 -6
  505. package/src/hooks/border.jsx +2 -2
  506. package/src/hooks/contrast-checker.js +1 -1
  507. package/src/hooks/dimensions.jsx +2 -2
  508. package/src/hooks/duotone.jsx +3 -3
  509. package/src/hooks/elements.jsx +3 -3
  510. package/src/hooks/fit-text.jsx +1 -1
  511. package/src/hooks/gap.js +2 -4
  512. package/src/hooks/index.js +3 -1
  513. package/src/hooks/layout-child.jsx +3 -4
  514. package/src/hooks/layout.jsx +17 -18
  515. package/src/hooks/position.jsx +5 -36
  516. package/src/hooks/states.jsx +6 -2
  517. package/src/hooks/test/layout.jsdom.test.js +44 -1
  518. package/src/hooks/text-shadow.ts +105 -0
  519. package/src/hooks/typography.jsx +58 -30
  520. package/src/hooks/utils.jsx +23 -1
  521. package/src/layouts/grid.jsx +2 -2
  522. package/src/layouts/test/flex.jsdom.test.jsx +4 -3
  523. package/src/layouts/test/utils.js +48 -1
  524. package/src/layouts/utils.js +19 -0
  525. package/src/private-apis.js +4 -0
  526. package/src/store/actions.js +50 -10
  527. package/src/store/private-selectors.js +5 -5
  528. package/src/store/reducer.js +6 -6
  529. package/src/store/selectors.js +3 -3
  530. package/src/store/test/actions.jsdom.test.js +60 -0
  531. package/src/style.scss +1 -0
  532. package/src/utils/get-font-styles-and-weights.ts +1 -1
  533. package/src/utils/transform-styles/index.ts +1 -1
  534. package/build/hooks/cross-origin-isolation.cjs +0 -56
  535. package/build/hooks/cross-origin-isolation.cjs.map +0 -7
  536. package/build-module/hooks/cross-origin-isolation.mjs +0 -54
  537. package/build-module/hooks/cross-origin-isolation.mjs.map +0 -7
  538. package/src/components/block-icon/test/__snapshots__/index.jsdom.test.jsx.snap +0 -27
  539. package/src/components/block-icon/test/index.jsdom.test.jsx +0 -67
  540. package/src/hooks/cross-origin-isolation.js +0 -73
  541. package/src/hooks/test/cross-origin-isolation.jsdom.test.js +0 -173
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/writing-flow/use-selection-observer.js"],
4
- "sourcesContent": ["import { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\nimport {\n\tcreate,\n\tprivateApis as richTextPrivateApis,\n} from '@wordpress/rich-text';\nimport { isSelectionForward } from '@wordpress/dom';\nimport { store as blockEditorStore } from '../../store';\nimport { getBlockClientId } from '../../utils/dom';\nimport { setContentEditableWrapper } from './utils';\nimport { unlock } from '../../lock-unlock';\n\nconst { ownsSelection } = unlock( richTextPrivateApis );\n\n/**\n * Extract the selection start node from the selection. When the anchor node is\n * not a text node, the selection offset is the index of a child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionStartNode( selection ) {\n\tconst { anchorNode, anchorOffset } = selection;\n\n\tif ( anchorNode.nodeType === anchorNode.TEXT_NODE ) {\n\t\treturn anchorNode;\n\t}\n\n\tif ( anchorOffset === 0 ) {\n\t\treturn anchorNode;\n\t}\n\n\treturn anchorNode.childNodes[ anchorOffset - 1 ];\n}\n\n/**\n * Extract the selection end node from the selection. When the focus node is not\n * a text node, the selection offset is the index of a child node. The selection\n * reaches up to but excluding that child node.\n *\n * @param {Selection} selection The selection.\n * @param {boolean} isTripleClick Whether the selection comes from a triple\n * click.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionEndNode( selection, isTripleClick ) {\n\tconst { focusNode, focusOffset } = selection;\n\n\tif ( focusNode.nodeType === focusNode.TEXT_NODE ) {\n\t\treturn focusNode;\n\t}\n\n\tif ( focusOffset === focusNode.childNodes.length ) {\n\t\treturn focusNode;\n\t}\n\n\t// A triple click selects the paragraph, but the browser extends the\n\t// forward selection into the next element at an offset of 0. This may\n\t// trigger multi selection even though the selection does not visually end\n\t// in the next block. Keyboard selections that legitimately extend to the\n\t// same boundary (e.g. Shift+ArrowDown into a focusable block, where the\n\t// browser reports the boundary at the element instead of its first text\n\t// position) must not be corrected, so only do this for triple clicks.\n\tif (\n\t\tfocusOffset === 0 &&\n\t\tisSelectionForward( selection ) &&\n\t\tisTripleClick\n\t) {\n\t\treturn focusNode.previousSibling ?? focusNode.parentElement;\n\t}\n\n\treturn focusNode.childNodes[ focusOffset ];\n}\n\nfunction findDepth( a, b ) {\n\tlet depth = 0;\n\n\twhile ( a[ depth ] === b[ depth ] ) {\n\t\tdepth++;\n\t}\n\n\treturn depth;\n}\n\nfunction getRichTextElement( node ) {\n\tconst element =\n\t\tnode.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n\treturn element?.closest( '[data-wp-block-attribute-key]' );\n}\n\n/**\n * Sets a multi-selection based on the native selection across blocks.\n */\nexport default function useSelectionObserver() {\n\tconst {\n\t\tmultiSelect,\n\t\tselectBlock,\n\t\tselectionChange,\n\t\tstartMultiSelect,\n\t\tstopMultiSelect,\n\t} = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockParents,\n\t\tgetBlockSelectionStart,\n\t\tisMultiSelecting,\n\t\tgetSelectionStart,\n\t\tgetSelectionEnd,\n\t\tgetSelectedBlockClientId,\n\t\tcanHostEditableRoot,\n\t} = unlock( useSelect( blockEditorStore ) );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tlet isTripleClick = false;\n\n\t\t\tfunction onMouseDown( event ) {\n\t\t\t\tisTripleClick = event.detail === 3;\n\t\t\t\t// A shift+click makes a multi-selection: mark the gesture as\n\t\t\t\t// in progress so the clicked block's focus handler does not\n\t\t\t\t// select it (collapsing the native range being made), and so\n\t\t\t\t// use-multi-selection does not clear the native selection.\n\t\t\t\t// The selection is built on mouseup.\n\t\t\t\tif ( event.shiftKey ) {\n\t\t\t\t\tstartMultiSelect();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onKeyDown() {\n\t\t\t\tisTripleClick = false;\n\t\t\t}\n\n\t\t\tfunction onSelectionChange( event ) {\n\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\tif ( ! selection.rangeCount ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst startNode = extractSelectionStartNode( selection );\n\t\t\t\tconst endNode = extractSelectionEndNode(\n\t\t\t\t\tselection,\n\t\t\t\t\tisTripleClick\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\t! node.contains( startNode ) ||\n\t\t\t\t\t! node.contains( endNode )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If selection is collapsed and we haven't used `shift+click`,\n\t\t\t\t// end multi selection and disable the contentEditable wrapper.\n\t\t\t\t// We have to check about `shift+click` case because elements\n\t\t\t\t// that don't support text selection might be involved, and we might\n\t\t\t\t// update the clientIds to multi-select blocks.\n\t\t\t\t// For now we check if the event is a `mouse` event.\n\t\t\t\tconst isClickShift = event.shiftKey && event.type === 'mouseup';\n\t\t\t\tif ( selection.isCollapsed && ! isClickShift ) {\n\t\t\t\t\tconst collapsedClientId = getBlockClientId( startNode );\n\n\t\t\t\t\t// If the block supports an editable root, keep (or make)\n\t\t\t\t\t// the wrapper contentEditable so the native selection can\n\t\t\t\t\t// extend across blocks. The wrapper holds focus, so rich\n\t\t\t\t\t// text instances don't sync the selection; do it here.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! isMultiSelecting() &&\n\t\t\t\t\t\tcollapsedClientId &&\n\t\t\t\t\t\t// Only keep the wrapper editable when the collapsed\n\t\t\t\t\t\t// selection is in the block that is actually selected.\n\t\t\t\t\t\t// A stale native selection may linger in a previously\n\t\t\t\t\t\t// selected editable root block (e.g. Firefox does not\n\t\t\t\t\t\t// always move it), which must not re-enable the wrapper\n\t\t\t\t\t\t// after another block has been selected.\n\t\t\t\t\t\tcollapsedClientId === getSelectedBlockClientId() &&\n\t\t\t\t\t\tcanHostEditableRoot( collapsedClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetContentEditableWrapper( node, true );\n\n\t\t\t\t\t\t// While the wrapper is editable it must hold focus: a\n\t\t\t\t\t\t// nested editable element cannot retain it (the first\n\t\t\t\t\t\t// DOM mutation moves focus to the host, inconsistently\n\t\t\t\t\t\t// across browsers). Don't steal focus from UI elements\n\t\t\t\t\t\t// (e.g. buttons) or editables outside the block (e.g.\n\t\t\t\t\t\t// the post title). The rich text instance owning the\n\t\t\t\t\t\t// selection syncs it to the store itself.\n\t\t\t\t\t\tconst { activeElement } = ownerDocument;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tactiveElement !== node &&\n\t\t\t\t\t\t\tactiveElement?.isContentEditable &&\n\t\t\t\t\t\t\tnode.contains( activeElement ) &&\n\t\t\t\t\t\t\tgetBlockClientId( activeElement ) ===\n\t\t\t\t\t\t\t\tcollapsedClientId\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnode.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.contentEditable === 'true' &&\n\t\t\t\t\t\t! isMultiSelecting()\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\t\tlet element =\n\t\t\t\t\t\t\tstartNode.nodeType === startNode.ELEMENT_NODE\n\t\t\t\t\t\t\t\t? startNode\n\t\t\t\t\t\t\t\t: startNode.parentElement;\n\t\t\t\t\t\telement = element?.closest( '[contenteditable]' );\n\t\t\t\t\t\telement?.focus();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet startClientId = getBlockClientId( startNode );\n\t\t\t\tlet endClientId = getBlockClientId( endNode );\n\n\t\t\t\t// If the selection has changed and we had pressed `shift+click`,\n\t\t\t\t// we need to check if in an element that doesn't support\n\t\t\t\t// text selection has been clicked.\n\t\t\t\tif ( isClickShift ) {\n\t\t\t\t\tconst selectedClientId = getBlockSelectionStart();\n\t\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\t\t\t\t\t// `endClientId` is not defined if we end the selection by clicking a non-selectable block.\n\t\t\t\t\t// We need to check if there was already a selection with a non-selectable focusNode.\n\t\t\t\t\tconst focusNodeIsNonSelectable =\n\t\t\t\t\t\tclickedClientId !== endClientId;\n\t\t\t\t\tif (\n\t\t\t\t\t\t( startClientId === endClientId &&\n\t\t\t\t\t\t\tselection.isCollapsed ) ||\n\t\t\t\t\t\t! endClientId ||\n\t\t\t\t\t\tfocusNodeIsNonSelectable\n\t\t\t\t\t) {\n\t\t\t\t\t\tendClientId = clickedClientId;\n\t\t\t\t\t}\n\t\t\t\t\t// Handle the case when we have a non-selectable block\n\t\t\t\t\t// selected and click another one.\n\t\t\t\t\tif ( startClientId !== selectedClientId ) {\n\t\t\t\t\t\tstartClientId = selectedClientId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If the selection did not involve a block, return.\n\t\t\t\tif (\n\t\t\t\t\tstartClientId === undefined &&\n\t\t\t\t\tendClientId === undefined\n\t\t\t\t) {\n\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// On mouseup, if the native selection is within one block\n\t\t\t\t// but the click target is a different block, bail out\n\t\t\t\t// and let the clicked block's focus handler manage\n\t\t\t\t// selection.\n\t\t\t\tif (\n\t\t\t\t\tevent.type === 'mouseup' &&\n\t\t\t\t\t! event.shiftKey &&\n\t\t\t\t\t! isMultiSelecting() &&\n\t\t\t\t\tstartClientId === endClientId\n\t\t\t\t) {\n\t\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\t\t\t\t\tif (\n\t\t\t\t\t\tclickedClientId &&\n\t\t\t\t\t\tclickedClientId !== startClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\tselection.removeAllRanges();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst isSingularSelection = startClientId === endClientId;\n\t\t\t\tif ( isSingularSelection ) {\n\t\t\t\t\tif ( ! isMultiSelecting() ) {\n\t\t\t\t\t\t// If the selection is not collapsed and falls\n\t\t\t\t\t\t// within a RichText that doesn't have focus\n\t\t\t\t\t\t// (e.g. the user started dragging from the block\n\t\t\t\t\t\t// wrapper padding), dispatch a full\n\t\t\t\t\t\t// selectionChange so the format toolbar appears.\n\t\t\t\t\t\tconst richTextElement =\n\t\t\t\t\t\t\t! selection.isCollapsed &&\n\t\t\t\t\t\t\t( getRichTextElement( startNode ) ||\n\t\t\t\t\t\t\t\tgetRichTextElement( endNode ) );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\trichTextElement &&\n\t\t\t\t\t\t\t// The rich text instance syncs the selection\n\t\t\t\t\t\t\t// itself when its element is editable and owns the\n\t\t\t\t\t\t\t// selection (also through a focused editing host).\n\t\t\t\t\t\t\t// It may be temporarily non-editable while a drag\n\t\t\t\t\t\t\t// that started outside it is in progress (see\n\t\t\t\t\t\t\t// rich-text's preventFocusCapture).\n\t\t\t\t\t\t\t( richTextElement.contentEditable !== 'true' ||\n\t\t\t\t\t\t\t\t( ownerDocument.activeElement !==\n\t\t\t\t\t\t\t\t\trichTextElement &&\n\t\t\t\t\t\t\t\t\t! ownsSelection( richTextElement ) ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\t\tconst richTextData = create( {\n\t\t\t\t\t\t\t\telement: richTextElement,\n\t\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tconst selectionUpdate = {\n\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\t\trichTextElement.dataset\n\t\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\t\toffset: richTextData.start ?? 0,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\t\trichTextElement.dataset\n\t\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\t\t// Clamp the end offset to the element. A\n\t\t\t\t\t\t\t\t\t// forward selection can overshoot past the\n\t\t\t\t\t\t\t\t\t// rich text (e.g. a triple click extends\n\t\t\t\t\t\t\t\t\t// into the next block at offset 0), leaving\n\t\t\t\t\t\t\t\t\t// `end` undefined; that means the selection\n\t\t\t\t\t\t\t\t\t// reaches through the end of this element's\n\t\t\t\t\t\t\t\t\t// content.\n\t\t\t\t\t\t\t\t\toffset:\n\t\t\t\t\t\t\t\t\t\trichTextData.end ??\n\t\t\t\t\t\t\t\t\t\trichTextData.text.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst { start, end } = selectionUpdate;\n\t\t\t\t\t\t\tconst selectionStart = getSelectionStart();\n\t\t\t\t\t\t\tconst selectionEnd = getSelectionEnd();\n\n\t\t\t\t\t\t\t// Skip the dispatch when the store already holds\n\t\t\t\t\t\t\t// the same selection.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tselectionStart.clientId !== start.clientId ||\n\t\t\t\t\t\t\t\tselectionEnd.clientId !== end.clientId ||\n\t\t\t\t\t\t\t\tselectionStart.attributeKey !==\n\t\t\t\t\t\t\t\t\tstart.attributeKey ||\n\t\t\t\t\t\t\t\tselectionStart.offset !== start.offset ||\n\t\t\t\t\t\t\t\tselectionEnd.offset !== end.offset\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tselectionChange( selectionUpdate );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tselectBlock( startClientId );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, startClientId );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst startPath = [\n\t\t\t\t\t\t...getBlockParents( startClientId ),\n\t\t\t\t\t\tstartClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst endPath = [\n\t\t\t\t\t\t...getBlockParents( endClientId ),\n\t\t\t\t\t\tendClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst depth = findDepth( startPath, endPath );\n\n\t\t\t\t\t// If one path ends before they diverge, one block\n\t\t\t\t\t// contains the other, so there are no sibling blocks\n\t\t\t\t\t// to promote the selection to. Record the selection as\n\t\t\t\t\t// is: it resolves to the outer block, which is treated\n\t\t\t\t\t// as fully selected. See `getSelectionNestingAncestor`\n\t\t\t\t\t// in the store.\n\t\t\t\t\tconst isAncestorDescendant =\n\t\t\t\t\t\tdepth >= startPath.length || depth >= endPath.length;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! isAncestorDescendant &&\n\t\t\t\t\t\t( startPath[ depth ] !== startClientId ||\n\t\t\t\t\t\t\tendPath[ depth ] !== endClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tmultiSelect( startPath[ depth ], endPath[ depth ] );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst richTextElementStart =\n\t\t\t\t\t\tgetRichTextElement( startNode );\n\t\t\t\t\tconst richTextElementEnd = getRichTextElement( endNode );\n\n\t\t\t\t\tif ( richTextElementStart && richTextElementEnd ) {\n\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\tconst richTextDataStart = create( {\n\t\t\t\t\t\t\telement: richTextElementStart,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tconst richTextDataEnd = create( {\n\t\t\t\t\t\t\telement: richTextElementEnd,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tconst startOffset =\n\t\t\t\t\t\t\trichTextDataStart.start ?? richTextDataStart.end;\n\t\t\t\t\t\tconst endOffset =\n\t\t\t\t\t\t\trichTextDataEnd.start ?? richTextDataEnd.end;\n\t\t\t\t\t\tselectionChange( {\n\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementStart.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: startOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tclientId: endClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementEnd.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: endOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, endClientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Native `selectionchange` events are asynchronous: a clipboard\n\t\t\t// event may fire before the store has been updated with a cross\n\t\t\t// block selection that was just made. Sync it before the clipboard\n\t\t\t// handlers (bubble phase) read the store.\n\t\t\tfunction ensureMultiBlockSelectionSync( event ) {\n\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\tif ( ! selection.rangeCount || selection.isCollapsed ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Only a selection across different blocks needs to be synced\n\t\t\t\t// here; rich text owns selections within a single block.\n\t\t\t\tconst startClientId = getBlockClientId(\n\t\t\t\t\textractSelectionStartNode( selection )\n\t\t\t\t);\n\t\t\t\tconst endClientId = getBlockClientId(\n\t\t\t\t\textractSelectionEndNode( selection, isTripleClick )\n\t\t\t\t);\n\n\t\t\t\tif ( startClientId !== endClientId ) {\n\t\t\t\t\tonSelectionChange( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'selectionchange',\n\t\t\t\tonSelectionChange\n\t\t\t);\n\t\t\tfunction onMouseUp( event ) {\n\t\t\t\tonSelectionChange( event );\n\t\t\t\tstopMultiSelect();\n\t\t\t}\n\n\t\t\tdefaultView.addEventListener( 'mouseup', onMouseUp );\n\t\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'copy',\n\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'cut',\n\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'paste',\n\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tonSelectionChange\n\t\t\t\t);\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onMouseUp );\n\t\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'copy',\n\t\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'cut',\n\t\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'paste',\n\t\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t};\n\t\t},\n\t\t[ multiSelect, selectBlock, selectionChange, getBlockParents ]\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\nimport {\n\tcreate,\n\tprivateApis as richTextPrivateApis,\n} from '@wordpress/rich-text';\nimport { isSelectionForward } from '@wordpress/dom';\nimport { store as blockEditorStore } from '../../store';\nimport { getBlockClientId } from '../../utils/dom';\nimport { setContentEditableWrapper } from './utils';\nimport { unlock } from '../../lock-unlock';\n\nconst { ownsSelection } = unlock( richTextPrivateApis );\n\n/**\n * Extract the selection start node from the selection. When the anchor node is\n * not a text node, the selection offset is the index of a child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionStartNode( selection ) {\n\tconst { anchorNode, anchorOffset } = selection;\n\n\tif ( anchorNode.nodeType === anchorNode.TEXT_NODE ) {\n\t\treturn anchorNode;\n\t}\n\n\tif ( anchorOffset === 0 ) {\n\t\treturn anchorNode;\n\t}\n\n\treturn anchorNode.childNodes[ anchorOffset - 1 ];\n}\n\n/**\n * Extract the selection end node from the selection. When the focus node is not\n * a text node, the selection offset is the index of a child node. The selection\n * reaches up to but excluding that child node.\n *\n * @param {Selection} selection The selection.\n * @param {boolean} isTripleClick Whether the selection comes from a triple\n * click.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionEndNode( selection, isTripleClick ) {\n\tconst { focusNode, focusOffset } = selection;\n\n\tif ( focusNode.nodeType === focusNode.TEXT_NODE ) {\n\t\treturn focusNode;\n\t}\n\n\tif ( focusOffset === focusNode.childNodes.length ) {\n\t\treturn focusNode;\n\t}\n\n\t// A triple click selects the paragraph, but the browser extends the\n\t// forward selection into the next element at an offset of 0. This may\n\t// trigger multi selection even though the selection does not visually end\n\t// in the next block. Keyboard selections that legitimately extend to the\n\t// same boundary (e.g. Shift+ArrowDown into a focusable block, where the\n\t// browser reports the boundary at the element instead of its first text\n\t// position) must not be corrected, so only do this for triple clicks.\n\tif (\n\t\tfocusOffset === 0 &&\n\t\tisSelectionForward( selection ) &&\n\t\tisTripleClick\n\t) {\n\t\treturn focusNode.previousSibling ?? focusNode.parentElement;\n\t}\n\n\treturn focusNode.childNodes[ focusOffset ];\n}\n\nfunction findDepth( a, b ) {\n\tlet depth = 0;\n\n\twhile ( a[ depth ] === b[ depth ] ) {\n\t\tdepth++;\n\t}\n\n\treturn depth;\n}\n\nfunction getRichTextElement( node ) {\n\tconst element =\n\t\tnode.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n\treturn element?.closest( '[data-wp-block-attribute-key]' );\n}\n\n/**\n * Sets a multi-selection based on the native selection across blocks.\n */\nexport default function useSelectionObserver() {\n\tconst {\n\t\tmultiSelect,\n\t\tselectBlock,\n\t\tselectionChange,\n\t\tstartMultiSelect,\n\t\tstopMultiSelect,\n\t} = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockParents,\n\t\tgetBlockSelectionStart,\n\t\tisMultiSelecting,\n\t\tgetSelectionStart,\n\t\tgetSelectionEnd,\n\t\tgetSelectedBlockClientId,\n\t\tcanHostEditableRoot,\n\t} = unlock( useSelect( blockEditorStore ) );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tlet isTripleClick = false;\n\n\t\t\tfunction onMouseDown( event ) {\n\t\t\t\tisTripleClick = event.detail === 3;\n\t\t\t\t// A shift+click makes a multi-selection: mark the gesture as\n\t\t\t\t// in progress so the clicked block's focus handler does not\n\t\t\t\t// select it (collapsing the native range being made), and so\n\t\t\t\t// use-multi-selection does not clear the native selection.\n\t\t\t\t// The selection is built on mouseup.\n\t\t\t\tif ( event.shiftKey ) {\n\t\t\t\t\tstartMultiSelect();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onKeyDown() {\n\t\t\t\tisTripleClick = false;\n\t\t\t}\n\n\t\t\tfunction onSelectionChange( event ) {\n\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\tif ( ! selection.rangeCount ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst startNode = extractSelectionStartNode( selection );\n\t\t\t\tconst endNode = extractSelectionEndNode(\n\t\t\t\t\tselection,\n\t\t\t\t\tisTripleClick\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\t! node.contains( startNode ) ||\n\t\t\t\t\t! node.contains( endNode )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If selection is collapsed and we haven't used `shift+click`,\n\t\t\t\t// end multi selection and disable the contentEditable wrapper.\n\t\t\t\t// We have to check about `shift+click` case because elements\n\t\t\t\t// that don't support text selection might be involved, and we might\n\t\t\t\t// update the clientIds to multi-select blocks.\n\t\t\t\t// For now we check if the event is a `mouse` event.\n\t\t\t\tconst isClickShift = event.shiftKey && event.type === 'mouseup';\n\t\t\t\tif ( selection.isCollapsed && ! isClickShift ) {\n\t\t\t\t\tconst collapsedClientId = getBlockClientId( startNode );\n\n\t\t\t\t\t// If the block supports an editable root, keep (or make)\n\t\t\t\t\t// the wrapper contentEditable so the native selection can\n\t\t\t\t\t// extend across blocks. The wrapper holds focus, so rich\n\t\t\t\t\t// text instances don't sync the selection; do it here.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! isMultiSelecting() &&\n\t\t\t\t\t\tcollapsedClientId &&\n\t\t\t\t\t\t// Only keep the wrapper editable when the collapsed\n\t\t\t\t\t\t// selection is in the block that is actually selected.\n\t\t\t\t\t\t// A stale native selection may linger in a previously\n\t\t\t\t\t\t// selected editable root block (e.g. Firefox does not\n\t\t\t\t\t\t// always move it), which must not re-enable the wrapper\n\t\t\t\t\t\t// after another block has been selected.\n\t\t\t\t\t\tcollapsedClientId === getSelectedBlockClientId() &&\n\t\t\t\t\t\tcanHostEditableRoot( collapsedClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetContentEditableWrapper( node, true );\n\n\t\t\t\t\t\t// While the wrapper is editable it must hold focus: a\n\t\t\t\t\t\t// nested editable element cannot retain it (the first\n\t\t\t\t\t\t// DOM mutation moves focus to the host, inconsistently\n\t\t\t\t\t\t// across browsers). Don't steal focus from UI elements\n\t\t\t\t\t\t// (e.g. buttons) or editables outside the block (e.g.\n\t\t\t\t\t\t// the post title). The rich text instance owning the\n\t\t\t\t\t\t// selection syncs it to the store itself.\n\t\t\t\t\t\tconst { activeElement } = ownerDocument;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tactiveElement !== node &&\n\t\t\t\t\t\t\tactiveElement?.isContentEditable &&\n\t\t\t\t\t\t\tnode.contains( activeElement ) &&\n\t\t\t\t\t\t\tgetBlockClientId( activeElement ) ===\n\t\t\t\t\t\t\t\tcollapsedClientId\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnode.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.contentEditable === 'true' &&\n\t\t\t\t\t\t! isMultiSelecting()\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\t\t// Only return focus to the field if the wrapper had\n\t\t\t\t\t\t// it. If Escape moved focus to the canvas stop in the\n\t\t\t\t\t\t// parent document, the wrapper is only the stale\n\t\t\t\t\t\t// active element and focus must not come back.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\townerDocument.activeElement === node &&\n\t\t\t\t\t\t\townerDocument.hasFocus()\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tlet element =\n\t\t\t\t\t\t\t\tstartNode.nodeType === startNode.ELEMENT_NODE\n\t\t\t\t\t\t\t\t\t? startNode\n\t\t\t\t\t\t\t\t\t: startNode.parentElement;\n\t\t\t\t\t\t\telement = element?.closest( '[contenteditable]' );\n\t\t\t\t\t\t\telement?.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet startClientId = getBlockClientId( startNode );\n\t\t\t\tlet endClientId = getBlockClientId( endNode );\n\n\t\t\t\t// If the selection has changed and we had pressed `shift+click`,\n\t\t\t\t// we need to check if in an element that doesn't support\n\t\t\t\t// text selection has been clicked.\n\t\t\t\tif ( isClickShift ) {\n\t\t\t\t\tconst selectedClientId = getBlockSelectionStart();\n\t\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\t\t\t\t\t// `endClientId` is not defined if we end the selection by clicking a non-selectable block.\n\t\t\t\t\t// We need to check if there was already a selection with a non-selectable focusNode.\n\t\t\t\t\tconst focusNodeIsNonSelectable =\n\t\t\t\t\t\tclickedClientId !== endClientId;\n\t\t\t\t\tif (\n\t\t\t\t\t\t( startClientId === endClientId &&\n\t\t\t\t\t\t\tselection.isCollapsed ) ||\n\t\t\t\t\t\t! endClientId ||\n\t\t\t\t\t\tfocusNodeIsNonSelectable\n\t\t\t\t\t) {\n\t\t\t\t\t\tendClientId = clickedClientId;\n\t\t\t\t\t}\n\t\t\t\t\t// Handle the case when we have a non-selectable block\n\t\t\t\t\t// selected and click another one.\n\t\t\t\t\tif ( startClientId !== selectedClientId ) {\n\t\t\t\t\t\tstartClientId = selectedClientId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If the selection did not involve a block, return.\n\t\t\t\tif (\n\t\t\t\t\tstartClientId === undefined &&\n\t\t\t\t\tendClientId === undefined\n\t\t\t\t) {\n\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// On mouseup, if the native selection is within one block\n\t\t\t\t// but the click target is a different block, bail out\n\t\t\t\t// and let the clicked block's focus handler manage\n\t\t\t\t// selection.\n\t\t\t\tif (\n\t\t\t\t\tevent.type === 'mouseup' &&\n\t\t\t\t\t! event.shiftKey &&\n\t\t\t\t\t! isMultiSelecting() &&\n\t\t\t\t\tstartClientId === endClientId\n\t\t\t\t) {\n\t\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\t\t\t\t\tif (\n\t\t\t\t\t\tclickedClientId &&\n\t\t\t\t\t\tclickedClientId !== startClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\tselection.removeAllRanges();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst isSingularSelection = startClientId === endClientId;\n\t\t\t\tif ( isSingularSelection ) {\n\t\t\t\t\tif ( ! isMultiSelecting() ) {\n\t\t\t\t\t\t// If the selection is not collapsed and falls\n\t\t\t\t\t\t// within a RichText that doesn't have focus\n\t\t\t\t\t\t// (e.g. the user started dragging from the block\n\t\t\t\t\t\t// wrapper padding), dispatch a full\n\t\t\t\t\t\t// selectionChange so the format toolbar appears.\n\t\t\t\t\t\tconst richTextElement =\n\t\t\t\t\t\t\t! selection.isCollapsed &&\n\t\t\t\t\t\t\t( getRichTextElement( startNode ) ||\n\t\t\t\t\t\t\t\tgetRichTextElement( endNode ) );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\trichTextElement &&\n\t\t\t\t\t\t\t// The rich text instance syncs the selection\n\t\t\t\t\t\t\t// itself when its element is editable and owns the\n\t\t\t\t\t\t\t// selection (also through a focused editing host).\n\t\t\t\t\t\t\t// It may be temporarily non-editable while a drag\n\t\t\t\t\t\t\t// that started outside it is in progress (see\n\t\t\t\t\t\t\t// rich-text's preventFocusCapture).\n\t\t\t\t\t\t\t( richTextElement.contentEditable !== 'true' ||\n\t\t\t\t\t\t\t\t( ownerDocument.activeElement !==\n\t\t\t\t\t\t\t\t\trichTextElement &&\n\t\t\t\t\t\t\t\t\t! ownsSelection( richTextElement ) ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\t\tconst richTextData = create( {\n\t\t\t\t\t\t\t\telement: richTextElement,\n\t\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tconst selectionUpdate = {\n\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\t\trichTextElement.dataset\n\t\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\t\toffset: richTextData.start ?? 0,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\t\trichTextElement.dataset\n\t\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\t\t// Clamp the end offset to the element. A\n\t\t\t\t\t\t\t\t\t// forward selection can overshoot past the\n\t\t\t\t\t\t\t\t\t// rich text (e.g. a triple click extends\n\t\t\t\t\t\t\t\t\t// into the next block at offset 0), leaving\n\t\t\t\t\t\t\t\t\t// `end` undefined; that means the selection\n\t\t\t\t\t\t\t\t\t// reaches through the end of this element's\n\t\t\t\t\t\t\t\t\t// content.\n\t\t\t\t\t\t\t\t\toffset:\n\t\t\t\t\t\t\t\t\t\trichTextData.end ??\n\t\t\t\t\t\t\t\t\t\trichTextData.text.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst { start, end } = selectionUpdate;\n\t\t\t\t\t\t\tconst selectionStart = getSelectionStart();\n\t\t\t\t\t\t\tconst selectionEnd = getSelectionEnd();\n\n\t\t\t\t\t\t\t// Skip the dispatch when the store already holds\n\t\t\t\t\t\t\t// the same selection.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tselectionStart.clientId !== start.clientId ||\n\t\t\t\t\t\t\t\tselectionEnd.clientId !== end.clientId ||\n\t\t\t\t\t\t\t\tselectionStart.attributeKey !==\n\t\t\t\t\t\t\t\t\tstart.attributeKey ||\n\t\t\t\t\t\t\t\tselectionStart.offset !== start.offset ||\n\t\t\t\t\t\t\t\tselectionEnd.offset !== end.offset\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tselectionChange( selectionUpdate );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tselectBlock( startClientId );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, startClientId );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst startPath = [\n\t\t\t\t\t\t...getBlockParents( startClientId ),\n\t\t\t\t\t\tstartClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst endPath = [\n\t\t\t\t\t\t...getBlockParents( endClientId ),\n\t\t\t\t\t\tendClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst depth = findDepth( startPath, endPath );\n\n\t\t\t\t\t// If one path ends before they diverge, one block\n\t\t\t\t\t// contains the other, so there are no sibling blocks\n\t\t\t\t\t// to promote the selection to. Record the selection as\n\t\t\t\t\t// is: it resolves to the outer block, which is treated\n\t\t\t\t\t// as fully selected. See `getSelectionNestingAncestor`\n\t\t\t\t\t// in the store.\n\t\t\t\t\tconst isAncestorDescendant =\n\t\t\t\t\t\tdepth >= startPath.length || depth >= endPath.length;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! isAncestorDescendant &&\n\t\t\t\t\t\t( startPath[ depth ] !== startClientId ||\n\t\t\t\t\t\t\tendPath[ depth ] !== endClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tmultiSelect( startPath[ depth ], endPath[ depth ] );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst richTextElementStart =\n\t\t\t\t\t\tgetRichTextElement( startNode );\n\t\t\t\t\tconst richTextElementEnd = getRichTextElement( endNode );\n\n\t\t\t\t\tif ( richTextElementStart && richTextElementEnd ) {\n\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\tconst richTextDataStart = create( {\n\t\t\t\t\t\t\telement: richTextElementStart,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tconst richTextDataEnd = create( {\n\t\t\t\t\t\t\telement: richTextElementEnd,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tconst startOffset =\n\t\t\t\t\t\t\trichTextDataStart.start ?? richTextDataStart.end;\n\t\t\t\t\t\tconst endOffset =\n\t\t\t\t\t\t\trichTextDataEnd.start ?? richTextDataEnd.end;\n\t\t\t\t\t\tselectionChange( {\n\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementStart.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: startOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tclientId: endClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementEnd.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: endOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, endClientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Native `selectionchange` events are asynchronous: a clipboard\n\t\t\t// event may fire before the store has been updated with a cross\n\t\t\t// block selection that was just made. Sync it before the clipboard\n\t\t\t// handlers (bubble phase) read the store.\n\t\t\tfunction ensureMultiBlockSelectionSync( event ) {\n\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\tif ( ! selection.rangeCount || selection.isCollapsed ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Only a selection across different blocks needs to be synced\n\t\t\t\t// here; rich text owns selections within a single block.\n\t\t\t\tconst startClientId = getBlockClientId(\n\t\t\t\t\textractSelectionStartNode( selection )\n\t\t\t\t);\n\t\t\t\tconst endClientId = getBlockClientId(\n\t\t\t\t\textractSelectionEndNode( selection, isTripleClick )\n\t\t\t\t);\n\n\t\t\t\tif ( startClientId !== endClientId ) {\n\t\t\t\t\tonSelectionChange( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'selectionchange',\n\t\t\t\tonSelectionChange\n\t\t\t);\n\t\t\tfunction onMouseUp( event ) {\n\t\t\t\tonSelectionChange( event );\n\t\t\t\tstopMultiSelect();\n\t\t\t}\n\n\t\t\tdefaultView.addEventListener( 'mouseup', onMouseUp );\n\t\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'copy',\n\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'cut',\n\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'paste',\n\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tonSelectionChange\n\t\t\t\t);\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onMouseUp );\n\t\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'copy',\n\t\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'cut',\n\t\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'paste',\n\t\t\t\t\tensureMultiBlockSelectionSync,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t};\n\t\t},\n\t\t[ multiSelect, selectBlock, selectionChange, getBlockParents ]\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_dom", "richTextPrivateApis", "blockEditorStore"]
7
7
  }
@@ -89,11 +89,9 @@ function BlockEditAlignmentToolbarControlsPure({
89
89
  (0, import_blocks.getBlockSupport)(blockName, "align"),
90
90
  (0, import_blocks.hasBlockSupport)(blockName, "alignWide", true)
91
91
  );
92
- const validAlignments = (0, import_use_available_alignments.default)(
93
- blockAllowedAlignments
94
- ).map(({ name }) => name);
92
+ const { enabled, unavailable } = (0, import_use_available_alignments.useAlignmentMenu)(blockAllowedAlignments);
95
93
  const blockEditingMode = (0, import_block_editing_mode.useBlockEditingMode)();
96
- if (!validAlignments.length || blockEditingMode !== "default") {
94
+ if (!enabled.length && !unavailable.length || blockEditingMode !== "default") {
97
95
  return null;
98
96
  }
99
97
  const updateAlignment = (nextAlign) => {
@@ -111,7 +109,7 @@ function BlockEditAlignmentToolbarControlsPure({
111
109
  {
112
110
  value: align,
113
111
  onChange: updateAlignment,
114
- controls: validAlignments
112
+ controls: blockAllowedAlignments
115
113
  }
116
114
  ) });
117
115
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/align.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\tgetBlockType,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { BlockControls, BlockAlignmentControl } from '../components';\nimport useAvailableAlignments from '../components/block-alignment-control/use-available-alignments';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * An array which includes all possible valid alignments,\n * used to validate if an alignment is valid or not.\n *\n * @constant\n * @type {string[]}\n */\nconst ALL_ALIGNMENTS = [ 'left', 'center', 'right', 'wide', 'full' ];\n\n/**\n * An array which includes all wide alignments.\n * In order for this alignments to be valid they need to be supported by the block,\n * and by the theme.\n *\n * @constant\n * @type {string[]}\n */\nconst WIDE_ALIGNMENTS = [ 'wide', 'full' ];\n\n/**\n * Returns the valid alignments.\n * Takes into consideration the aligns supported by a block, if the block supports wide controls or not and if theme supports wide controls or not.\n * Exported just for testing purposes, not exported outside the module.\n *\n * @param {?boolean|string[]} blockAlign Aligns supported by the block.\n * @param {?boolean} hasWideBlockSupport True if block supports wide alignments. And False otherwise.\n * @param {?boolean} hasWideEnabled True if theme supports wide alignments. And False otherwise.\n *\n * @return {string[]} Valid alignments.\n */\nexport function getValidAlignments(\n\tblockAlign,\n\thasWideBlockSupport = true,\n\thasWideEnabled = true\n) {\n\tlet validAlignments;\n\tif ( Array.isArray( blockAlign ) ) {\n\t\tvalidAlignments = ALL_ALIGNMENTS.filter( ( value ) =>\n\t\t\tblockAlign.includes( value )\n\t\t);\n\t} else if ( blockAlign === true ) {\n\t\t// `true` includes all alignments...\n\t\tvalidAlignments = [ ...ALL_ALIGNMENTS ];\n\t} else {\n\t\tvalidAlignments = [];\n\t}\n\n\tif (\n\t\t! hasWideEnabled ||\n\t\t( blockAlign === true && ! hasWideBlockSupport )\n\t) {\n\t\treturn validAlignments.filter(\n\t\t\t( alignment ) => ! WIDE_ALIGNMENTS.includes( alignment )\n\t\t);\n\t}\n\n\treturn validAlignments;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `align`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( 'type' in ( settings.attributes?.align ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, 'align' ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\talign: {\n\t\t\t\ttype: 'string',\n\t\t\t\t// Allow for '' since it is used by the `updateAlignment` function\n\t\t\t\t// in toolbar controls for special cases with defined default values.\n\t\t\t\tenum: [ ...ALL_ALIGNMENTS, '' ],\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockEditAlignmentToolbarControlsPure( {\n\tname: blockName,\n\talign,\n\tsetAttributes,\n} ) {\n\t// Compute the block valid alignments by taking into account,\n\t// if the theme supports wide alignments or not and the layout's\n\t// available alignments. We do that for conditionally rendering\n\t// Slot.\n\tconst blockAllowedAlignments = getValidAlignments(\n\t\tgetBlockSupport( blockName, 'align' ),\n\t\thasBlockSupport( blockName, 'alignWide', true )\n\t);\n\n\tconst validAlignments = useAvailableAlignments(\n\t\tblockAllowedAlignments\n\t).map( ( { name } ) => name );\n\tconst blockEditingMode = useBlockEditingMode();\n\tif ( ! validAlignments.length || blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst updateAlignment = ( nextAlign ) => {\n\t\tif ( ! nextAlign ) {\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst blockDefaultAlign = blockType?.attributes?.align?.default;\n\t\t\tif ( blockDefaultAlign ) {\n\t\t\t\tnextAlign = '';\n\t\t\t}\n\t\t}\n\t\tsetAttributes( { align: nextAlign } );\n\t};\n\n\treturn (\n\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t<BlockAlignmentControl\n\t\t\t\tvalue={ align }\n\t\t\t\tonChange={ updateAlignment }\n\t\t\t\tcontrols={ validAlignments }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: BlockEditAlignmentToolbarControlsPure,\n\tuseBlockProps,\n\taddSaveProps: addAssignedAlign,\n\tattributeKeys: [ 'align' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'align', false );\n\t},\n};\n\nfunction useBlockProps( { name, align } ) {\n\tconst blockAllowedAlignments = getValidAlignments(\n\t\tgetBlockSupport( name, 'align' ),\n\t\thasBlockSupport( name, 'alignWide', true )\n\t);\n\tconst validAlignments = useAvailableAlignments( blockAllowedAlignments );\n\n\tif ( validAlignments.some( ( alignment ) => alignment.name === align ) ) {\n\t\treturn { 'data-align': align };\n\t}\n\n\treturn {};\n}\n\n/**\n * Override props assigned to save component to inject alignment class name if\n * block supports it.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addAssignedAlign( props, blockType, attributes ) {\n\tconst { align } = attributes;\n\tconst blockAlign = getBlockSupport( blockType, 'align' );\n\tconst hasWideBlockSupport = hasBlockSupport( blockType, 'alignWide', true );\n\n\t// Compute valid alignments without taking into account if\n\t// the theme supports wide alignments or not.\n\t// This way changing themes does not impact the block save.\n\tconst isAlignValid = getValidAlignments(\n\t\tblockAlign,\n\t\thasWideBlockSupport\n\t).includes( align );\n\tif ( isAlignValid ) {\n\t\tprops.className = clsx( `align${ align }`, props.className );\n\t}\n\n\treturn props;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/align/addAttribute',\n\taddAttribute\n);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\tgetBlockType,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { BlockControls, BlockAlignmentControl } from '../components';\nimport useAvailableAlignments, {\n\tuseAlignmentMenu,\n} from '../components/block-alignment-control/use-available-alignments';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * An array which includes all possible valid alignments,\n * used to validate if an alignment is valid or not.\n *\n * @constant\n * @type {string[]}\n */\nconst ALL_ALIGNMENTS = [ 'left', 'center', 'right', 'wide', 'full' ];\n\n/**\n * An array which includes all wide alignments.\n * In order for this alignments to be valid they need to be supported by the block,\n * and by the theme.\n *\n * @constant\n * @type {string[]}\n */\nconst WIDE_ALIGNMENTS = [ 'wide', 'full' ];\n\n/**\n * Returns the valid alignments.\n * Takes into consideration the aligns supported by a block, if the block supports wide controls or not and if theme supports wide controls or not.\n * Exported just for testing purposes, not exported outside the module.\n *\n * @param {?boolean|string[]} blockAlign Aligns supported by the block.\n * @param {?boolean} hasWideBlockSupport True if block supports wide alignments. And False otherwise.\n * @param {?boolean} hasWideEnabled True if theme supports wide alignments. And False otherwise.\n *\n * @return {string[]} Valid alignments.\n */\nexport function getValidAlignments(\n\tblockAlign,\n\thasWideBlockSupport = true,\n\thasWideEnabled = true\n) {\n\tlet validAlignments;\n\tif ( Array.isArray( blockAlign ) ) {\n\t\tvalidAlignments = ALL_ALIGNMENTS.filter( ( value ) =>\n\t\t\tblockAlign.includes( value )\n\t\t);\n\t} else if ( blockAlign === true ) {\n\t\t// `true` includes all alignments...\n\t\tvalidAlignments = [ ...ALL_ALIGNMENTS ];\n\t} else {\n\t\tvalidAlignments = [];\n\t}\n\n\tif (\n\t\t! hasWideEnabled ||\n\t\t( blockAlign === true && ! hasWideBlockSupport )\n\t) {\n\t\treturn validAlignments.filter(\n\t\t\t( alignment ) => ! WIDE_ALIGNMENTS.includes( alignment )\n\t\t);\n\t}\n\n\treturn validAlignments;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `align`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( 'type' in ( settings.attributes?.align ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, 'align' ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\talign: {\n\t\t\t\ttype: 'string',\n\t\t\t\t// Allow for '' since it is used by the `updateAlignment` function\n\t\t\t\t// in toolbar controls for special cases with defined default values.\n\t\t\t\tenum: [ ...ALL_ALIGNMENTS, '' ],\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockEditAlignmentToolbarControlsPure( {\n\tname: blockName,\n\talign,\n\tsetAttributes,\n} ) {\n\t// Compute the block valid alignments by taking into account,\n\t// if the theme supports wide alignments or not and the layout's\n\t// available alignments. We do that for conditionally rendering\n\t// Slot.\n\tconst blockAllowedAlignments = getValidAlignments(\n\t\tgetBlockSupport( blockName, 'align' ),\n\t\thasBlockSupport( blockName, 'alignWide', true )\n\t);\n\n\tconst { enabled, unavailable } = useAlignmentMenu( blockAllowedAlignments );\n\tconst blockEditingMode = useBlockEditingMode();\n\t/*\n\t * Render whenever there is something to say, which includes having only\n\t * unavailable alignments to report: a Group supports nothing but wide and\n\t * full, so in a layout offering neither the control would otherwise vanish\n\t * from the block most likely to want them.\n\t */\n\tif (\n\t\t( ! enabled.length && ! unavailable.length ) ||\n\t\tblockEditingMode !== 'default'\n\t) {\n\t\treturn null;\n\t}\n\n\tconst updateAlignment = ( nextAlign ) => {\n\t\tif ( ! nextAlign ) {\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst blockDefaultAlign = blockType?.attributes?.align?.default;\n\t\t\tif ( blockDefaultAlign ) {\n\t\t\t\tnextAlign = '';\n\t\t\t}\n\t\t}\n\t\tsetAttributes( { align: nextAlign } );\n\t};\n\n\treturn (\n\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t<BlockAlignmentControl\n\t\t\t\tvalue={ align }\n\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t/*\n\t\t\t\t * Pass the alignments the block itself supports rather than the\n\t\t\t\t * ones the current layout leaves available. The control filters\n\t\t\t\t * them again, but keeping the unfiltered list lets it tell the\n\t\t\t\t * difference between an alignment this block never had and one a\n\t\t\t\t * parent layout has taken away.\n\t\t\t\t */\n\t\t\t\tcontrols={ blockAllowedAlignments }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: BlockEditAlignmentToolbarControlsPure,\n\tuseBlockProps,\n\taddSaveProps: addAssignedAlign,\n\tattributeKeys: [ 'align' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'align', false );\n\t},\n};\n\nfunction useBlockProps( { name, align } ) {\n\tconst blockAllowedAlignments = getValidAlignments(\n\t\tgetBlockSupport( name, 'align' ),\n\t\thasBlockSupport( name, 'alignWide', true )\n\t);\n\tconst validAlignments = useAvailableAlignments( blockAllowedAlignments );\n\n\tif ( validAlignments.some( ( alignment ) => alignment.name === align ) ) {\n\t\treturn { 'data-align': align };\n\t}\n\n\treturn {};\n}\n\n/**\n * Override props assigned to save component to inject alignment class name if\n * block supports it.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addAssignedAlign( props, blockType, attributes ) {\n\tconst { align } = attributes;\n\tconst blockAlign = getBlockSupport( blockType, 'align' );\n\tconst hasWideBlockSupport = hasBlockSupport( blockType, 'alignWide', true );\n\n\t// Compute valid alignments without taking into account if\n\t// the theme supports wide alignments or not.\n\t// This way changing themes does not impact the block save.\n\tconst isAlignValid = getValidAlignments(\n\t\tblockAlign,\n\t\thasWideBlockSupport\n\t).includes( align );\n\tif ( isAlignValid ) {\n\t\tprops.className = clsx( `align${ align }`, props.className );\n\t}\n\n\treturn props;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/align/addAttribute',\n\taddAttribute\n);\n"],
5
+ "mappings": "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",
6
6
  "names": ["useAvailableAlignments", "clsx"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/background.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport InspectorControls from '../components/inspector-controls';\nimport { cleanEmptyObject } from './utils';\nimport { extractPresetSlug } from '../utils/color-values';\nimport { store as blockEditorStore } from '../store';\nimport useBlockColorContrastWarning from './contrast-checker';\nimport {\n\tdefault as StylesBackgroundPanel,\n\tuseHasBackgroundPanel,\n\thasBackgroundImageValue,\n\thasBackgroundGradientValue,\n} from '../components/global-styles/background-panel';\nimport {\n\tgetStyleForState,\n\tisDefaultBlockStyleState,\n\tsetStyleForState,\n\tuseBlockStyleState,\n} from './block-style-state';\nimport { useResolvedStyle } from '../components/global-styles/inherited-value-context';\n\nexport const BACKGROUND_SUPPORT_KEY = 'background';\n\n// Initial control values.\nexport const BACKGROUND_BLOCK_DEFAULT_VALUES = {\n\tbackgroundSize: 'cover',\n\tbackgroundPosition: '50% 50%', // used only when backgroundSize is 'contain'.\n};\n\n/**\n * Determine whether there is block support for background.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBackgroundSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, BACKGROUND_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn (\n\t\t\t!! support?.backgroundImage ||\n\t\t\t!! support?.backgroundSize ||\n\t\t\t!! support?.backgroundRepeat ||\n\t\t\t!! support?.gradient\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport function setBackgroundStyleDefaults( backgroundStyle ) {\n\tif ( ! backgroundStyle || ! backgroundStyle?.backgroundImage?.url ) {\n\t\treturn;\n\t}\n\n\tlet backgroundStylesWithDefaults;\n\n\t// Set block background defaults.\n\tif ( ! backgroundStyle?.backgroundSize ) {\n\t\tbackgroundStylesWithDefaults = {\n\t\t\tbackgroundSize: BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundSize,\n\t\t};\n\t}\n\n\tif (\n\t\t'contain' === backgroundStyle?.backgroundSize &&\n\t\t! backgroundStyle?.backgroundPosition\n\t) {\n\t\tbackgroundStylesWithDefaults = {\n\t\t\tbackgroundPosition:\n\t\t\t\tBACKGROUND_BLOCK_DEFAULT_VALUES.backgroundPosition,\n\t\t};\n\t}\n\treturn backgroundStylesWithDefaults;\n}\n\nfunction useBlockProps( { name, style } ) {\n\tif (\n\t\t! hasBackgroundSupport( name ) ||\n\t\t! style?.background?.backgroundImage\n\t) {\n\t\treturn;\n\t}\n\n\tconst backgroundStyles = setBackgroundStyleDefaults( style?.background );\n\n\tif ( ! backgroundStyles ) {\n\t\treturn;\n\t}\n\n\treturn {\n\t\tstyle: {\n\t\t\t...backgroundStyles,\n\t\t},\n\t};\n}\n\n/**\n * Generates a CSS class name if an background image is set.\n *\n * @param {Object} style A block's style attribute.\n *\n * @return {string} CSS class name.\n */\nexport function getBackgroundImageClasses( style ) {\n\treturn hasBackgroundImageValue( style ) ||\n\t\thasBackgroundGradientValue( style )\n\t\t? 'has-background'\n\t\t: '';\n}\n\n// Clears every control the Background panel owns: the background image,\n// background color, and the gradient. The Background panel owns the gradient\n// control for both the newer `background.gradient` support and the legacy\n// `color.gradient` path, so \"Reset all\" clears the legacy value too,\n// regardless of which path stored it.\nexport function backgroundResetAllFilter( attributes ) {\n\tconst updatedClassName = attributes.className?.includes( 'has-background' )\n\t\t? attributes.className\n\t\t\t\t.split( ' ' )\n\t\t\t\t.filter( ( c ) => c !== 'has-background' )\n\t\t\t\t.join( ' ' ) || undefined\n\t\t: attributes.className;\n\treturn {\n\t\t...attributes,\n\t\tclassName: updatedClassName,\n\t\tbackgroundColor: undefined,\n\t\tgradient: undefined,\n\t\tstyle: cleanEmptyObject( {\n\t\t\t...attributes.style,\n\t\t\tbackground: undefined,\n\t\t\tcolor: {\n\t\t\t\t...attributes.style?.color,\n\t\t\t\tbackground: undefined,\n\t\t\t\tgradient: undefined,\n\t\t\t},\n\t\t} ),\n\t};\n}\n\nfunction BackgroundInspectorControl( { children } ) {\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"background\"\n\t\t\tresetAllFilter={ backgroundResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function BackgroundImagePanel( {\n\tclientId,\n\tname,\n\tsetAttributes,\n\tsettings,\n\t// Allows rendering outside the `background` inspector group (e.g. section\n\t// blocks direct-render this panel because their support fills are gated\n\t// off by editing mode). Defaults to the slot-based wrapper.\n\tasWrapper,\n} ) {\n\tconst selectedState = useBlockStyleState();\n\tconst { style, className, backgroundColor, gradient } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes } = select( blockEditorStore );\n\t\t\tconst blockAttributes = getBlockAttributes( clientId );\n\t\t\treturn {\n\t\t\t\tstyle: blockAttributes?.style,\n\t\t\t\tclassName: blockAttributes?.className,\n\t\t\t\tbackgroundColor: blockAttributes?.backgroundColor,\n\t\t\t\tgradient: blockAttributes?.gradient,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { value: inheritedValue } = useResolvedStyle(\n\t\tname,\n\t\tclassName,\n\t\tselectedState\n\t);\n\n\tconst backgroundGradientSupported =\n\t\thasBackgroundSupport( name, 'gradient' ) &&\n\t\t!! settings?.background?.gradient;\n\n\tconst colorSupport = getBlockSupport( name, 'color' );\n\tconst hasColorBackgroundSupport =\n\t\tcolorSupport && colorSupport.background !== false;\n\tconst hasColorGradientSupport = !! colorSupport?.gradients;\n\n\tconst isStateSelected = ! isDefaultBlockStyleState( selectedState );\n\n\t// Fold the backgroundColor / gradient attribute slugs back into the style\n\t// object the panel consumes. When background.gradient is supported but not\n\t// yet explicitly set, fall back to color.gradient for display.\n\tconst styleValue = {\n\t\t...style,\n\t\tcolor: {\n\t\t\t...style?.color,\n\t\t\tbackground: backgroundColor\n\t\t\t\t? 'var:preset|color|' + backgroundColor\n\t\t\t\t: style?.color?.background,\n\t\t\tgradient:\n\t\t\t\t! backgroundGradientSupported && gradient\n\t\t\t\t\t? 'var:preset|gradient|' + gradient\n\t\t\t\t\t: style?.color?.gradient,\n\t\t},\n\t\t...( backgroundGradientSupported && {\n\t\t\tbackground: {\n\t\t\t\t...style?.background,\n\t\t\t\tgradient: gradient\n\t\t\t\t\t? 'var:preset|gradient|' + gradient\n\t\t\t\t\t: style?.background?.gradient ?? style?.color?.gradient,\n\t\t\t},\n\t\t} ),\n\t};\n\tconst value = isStateSelected\n\t\t? getStyleForState( style, selectedState )\n\t\t: styleValue;\n\n\t// Skipped for gradients, which can't be reliably evaluated for contrast.\n\tconst enableContrastChecking =\n\t\t! value?.color?.gradient &&\n\t\t! value?.background?.gradient &&\n\t\t!! value?.color?.background &&\n\t\t( settings?.color?.text || settings?.color?.link ) &&\n\t\tfalse !== getBlockSupport( name, [ 'color', 'enableContrastChecker' ] );\n\n\tconst contrastWarning = useBlockColorContrastWarning( {\n\t\tclientId,\n\t\tname,\n\t\tenabled: !! enableContrastChecking,\n\t\tmessageOverride: __(\n\t\t\t'This color combination has poor contrast. Consider increasing contrast between background and foreground.'\n\t\t),\n\t} );\n\n\tif (\n\t\t! useHasBackgroundPanel( settings ) ||\n\t\t( ! hasBackgroundSupport( name ) &&\n\t\t\t! hasColorBackgroundSupport &&\n\t\t\t! hasColorGradientSupport )\n\t) {\n\t\treturn null;\n\t}\n\n\tconst onChange = ( newStyle ) => {\n\t\tif ( isStateSelected ) {\n\t\t\tsetAttributes( {\n\t\t\t\tstyle: setStyleForState( style, selectedState, newStyle ),\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\t// Extract background color slug from style.color.background.\n\t\tconst newBackgroundColorValue = newStyle?.color?.background;\n\t\tconst newBackgroundColorSlug = extractPresetSlug(\n\t\t\tnewBackgroundColorValue,\n\t\t\t'color'\n\t\t);\n\n\t\t// Extract gradient slug — prefer the new background.gradient path\n\t\t// when backgroundGradientSupported, fall back to color.gradient.\n\t\tconst newGradientValue = backgroundGradientSupported\n\t\t\t? newStyle?.background?.gradient\n\t\t\t: newStyle?.color?.gradient;\n\t\tconst newGradientSlug = extractPresetSlug(\n\t\t\tnewGradientValue,\n\t\t\t'gradient'\n\t\t);\n\t\tconst cleanedColorGradient = newGradientSlug\n\t\t\t? undefined\n\t\t\t: newStyle?.color?.gradient;\n\n\t\t// Drop slug-resolved values so they aren't persisted inline alongside\n\t\t// the attribute slugs.\n\t\tconst cleanedStyle = {\n\t\t\t...newStyle,\n\t\t\tcolor: {\n\t\t\t\t...newStyle?.color,\n\t\t\t\tbackground: newBackgroundColorSlug\n\t\t\t\t\t? undefined\n\t\t\t\t\t: newBackgroundColorValue,\n\t\t\t\tgradient: backgroundGradientSupported\n\t\t\t\t\t? undefined\n\t\t\t\t\t: cleanedColorGradient,\n\t\t\t},\n\t\t};\n\t\tif ( backgroundGradientSupported ) {\n\t\t\t// Background gradients are kept whole in `style.background.gradient`\n\t\t\t// rather than extracted to the legacy `gradient` attribute.\n\t\t\tcleanedStyle.background = {\n\t\t\t\t...cleanedStyle.background,\n\t\t\t\tgradient: newStyle?.background?.gradient,\n\t\t\t};\n\t\t}\n\n\t\tconst isMigrating =\n\t\t\tbackgroundGradientSupported && !! style?.color?.gradient;\n\t\tconst newAttributes = {\n\t\t\tstyle: cleanEmptyObject( cleanedStyle ),\n\t\t\tbackgroundColor: newBackgroundColorSlug,\n\t\t\t// The legacy `gradient` attribute is only used when the block does\n\t\t\t// not support `background.gradient`; otherwise the gradient is\n\t\t\t// stored in `style.background.gradient` above.\n\t\t\tgradient: backgroundGradientSupported ? undefined : newGradientSlug,\n\t\t};\n\n\t\t// When migrating from color.gradient to background.gradient, preserve\n\t\t// the has-background class so existing styles relying on it (e.g.\n\t\t// theme padding) are not silently broken. Only add the class when a\n\t\t// gradient value is being set — not when it is being cleared/reset.\n\t\t// Conversely, if the gradient is cleared and has-background was added\n\t\t// during a previous migration, remove it so it does not linger.\n\t\tconst hasNewGradient = !! newGradientSlug || !! newGradientValue;\n\t\tif ( isMigrating && hasNewGradient ) {\n\t\t\tnewAttributes.className = clsx( className, 'has-background' );\n\t\t} else if (\n\t\t\t! hasNewGradient &&\n\t\t\tclassName?.includes( 'has-background' )\n\t\t) {\n\t\t\tnewAttributes.className =\n\t\t\t\tclassName\n\t\t\t\t\t.split( ' ' )\n\t\t\t\t\t.filter( ( c ) => c !== 'has-background' )\n\t\t\t\t\t.join( ' ' ) || undefined;\n\t\t}\n\n\t\tsetAttributes( newAttributes );\n\t};\n\n\tconst updatedSettings = {\n\t\t...settings,\n\t\tbackground: {\n\t\t\t...settings.background,\n\t\t\tbackgroundSize:\n\t\t\t\tsettings?.background?.backgroundSize &&\n\t\t\t\thasBackgroundSupport( name, 'backgroundSize' ),\n\t\t},\n\t};\n\n\tconst backgroundDefaultControls = getBlockSupport( name, [\n\t\tBACKGROUND_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst colorDefaultControls = getBlockSupport( name, [\n\t\t'color',\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultControls = {\n\t\t...backgroundDefaultControls,\n\t\tbackgroundColor: colorDefaultControls?.background,\n\t\t// Mirror the old combined control: show the gradient item by default\n\t\t// when background color was shown by default.\n\t\tgradient:\n\t\t\tbackgroundDefaultControls?.gradient ??\n\t\t\tcolorDefaultControls?.background,\n\t};\n\n\tconst Wrapper = asWrapper || BackgroundInspectorControl;\n\n\treturn (\n\t\t<StylesBackgroundPanel\n\t\t\tas={ Wrapper }\n\t\t\tpanelId={ clientId }\n\t\t\tdefaultValues={ BACKGROUND_BLOCK_DEFAULT_VALUES }\n\t\t\tsettings={ updatedSettings }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t\tvalue={\n\t\t\t\tisStateSelected\n\t\t\t\t\t? getStyleForState( style, selectedState )\n\t\t\t\t\t: styleValue\n\t\t\t}\n\t\t\tcontrastWarning={ contrastWarning }\n\t\t\tinheritedValue={ inheritedValue }\n\t\t/>\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport: hasBackgroundSupport,\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport InspectorControls from '../components/inspector-controls';\nimport { cleanEmptyObject } from './utils';\nimport { extractPresetSlug } from '../utils/color-values';\nimport { store as blockEditorStore } from '../store';\nimport useBlockColorContrastWarning from './contrast-checker';\nimport {\n\tdefault as StylesBackgroundPanel,\n\tuseHasBackgroundPanel,\n\thasBackgroundImageValue,\n\thasBackgroundGradientValue,\n} from '../components/global-styles/background-panel';\nimport {\n\tgetStyleForState,\n\tisDefaultBlockStyleState,\n\tsetStyleForState,\n\tuseBlockStyleState,\n} from './block-style-state';\nimport { useResolvedStyle } from '../components/global-styles/inherited-value-context';\n\nexport const BACKGROUND_SUPPORT_KEY = 'background';\n\n// Initial control values.\nexport const BACKGROUND_BLOCK_DEFAULT_VALUES = {\n\tbackgroundSize: 'cover',\n\tbackgroundPosition: '50% 50%', // used only when backgroundSize is 'contain'.\n};\n\n/**\n * Determine whether there is block support for background.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBackgroundSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, BACKGROUND_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn (\n\t\t\t!! support?.backgroundImage ||\n\t\t\t!! support?.backgroundSize ||\n\t\t\t!! support?.backgroundRepeat ||\n\t\t\t!! support?.gradient\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport function setBackgroundStyleDefaults( backgroundStyle ) {\n\tif ( ! backgroundStyle || ! backgroundStyle?.backgroundImage?.url ) {\n\t\treturn;\n\t}\n\n\tlet backgroundStylesWithDefaults;\n\n\t// Set block background defaults.\n\tif ( ! backgroundStyle?.backgroundSize ) {\n\t\tbackgroundStylesWithDefaults = {\n\t\t\tbackgroundSize: BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundSize,\n\t\t};\n\t}\n\n\tif (\n\t\t'contain' === backgroundStyle?.backgroundSize &&\n\t\t! backgroundStyle?.backgroundPosition\n\t) {\n\t\tbackgroundStylesWithDefaults = {\n\t\t\tbackgroundPosition:\n\t\t\t\tBACKGROUND_BLOCK_DEFAULT_VALUES.backgroundPosition,\n\t\t};\n\t}\n\treturn backgroundStylesWithDefaults;\n}\n\nfunction useBlockProps( { name, style } ) {\n\tif (\n\t\t! hasBackgroundSupport( name ) ||\n\t\t! style?.background?.backgroundImage\n\t) {\n\t\treturn;\n\t}\n\n\tconst backgroundStyles = setBackgroundStyleDefaults( style?.background );\n\n\tif ( ! backgroundStyles ) {\n\t\treturn;\n\t}\n\n\treturn {\n\t\tstyle: {\n\t\t\t...backgroundStyles,\n\t\t},\n\t};\n}\n\n/**\n * Generates a CSS class name if an background image is set.\n *\n * @param {Object} style A block's style attribute.\n *\n * @return {string} CSS class name.\n */\nexport function getBackgroundImageClasses( style ) {\n\treturn hasBackgroundImageValue( style ) ||\n\t\thasBackgroundGradientValue( style )\n\t\t? 'has-background'\n\t\t: '';\n}\n\n// Clears every control the Background panel owns: the background image,\n// background color, and the gradient. The Background panel owns the gradient\n// control for both the newer `background.gradient` support and the legacy\n// `color.gradient` path, so \"Reset all\" clears the legacy value too,\n// regardless of which path stored it.\nexport function backgroundResetAllFilter( attributes ) {\n\tconst updatedClassName = attributes.className?.includes( 'has-background' )\n\t\t? attributes.className\n\t\t\t\t.split( ' ' )\n\t\t\t\t.filter( ( c ) => c !== 'has-background' )\n\t\t\t\t.join( ' ' ) || undefined\n\t\t: attributes.className;\n\treturn {\n\t\t...attributes,\n\t\tclassName: updatedClassName,\n\t\tbackgroundColor: undefined,\n\t\tgradient: undefined,\n\t\tstyle: cleanEmptyObject( {\n\t\t\t...attributes.style,\n\t\t\tbackground: undefined,\n\t\t\tcolor: {\n\t\t\t\t...attributes.style?.color,\n\t\t\t\tbackground: undefined,\n\t\t\t\tgradient: undefined,\n\t\t\t},\n\t\t} ),\n\t};\n}\n\nfunction BackgroundInspectorControl( { children } ) {\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"background\"\n\t\t\tresetAllFilter={ backgroundResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function BackgroundImagePanel( {\n\tclientId,\n\tname,\n\tsetAttributes,\n\tsettings,\n\t// Allows rendering outside the `background` inspector group (e.g. section\n\t// blocks direct-render this panel because their support fills are gated\n\t// off by editing mode). Defaults to the slot-based wrapper.\n\tasWrapper,\n} ) {\n\tconst selectedState = useBlockStyleState();\n\tconst { style, className, backgroundColor, gradient } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes } = select( blockEditorStore );\n\t\t\tconst blockAttributes = getBlockAttributes( clientId );\n\t\t\treturn {\n\t\t\t\tstyle: blockAttributes?.style,\n\t\t\t\tclassName: blockAttributes?.className,\n\t\t\t\tbackgroundColor: blockAttributes?.backgroundColor,\n\t\t\t\tgradient: blockAttributes?.gradient,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { value: inheritedValue } = useResolvedStyle(\n\t\tname,\n\t\tclassName,\n\t\tselectedState\n\t);\n\n\tconst backgroundGradientSupported =\n\t\thasBackgroundSupport( name, 'gradient' ) &&\n\t\t!! settings?.background?.gradient;\n\n\tconst colorSupport = getBlockSupport( name, 'color' );\n\tconst hasColorBackgroundSupport =\n\t\tcolorSupport && colorSupport.background !== false;\n\tconst hasColorGradientSupport = !! colorSupport?.gradients;\n\n\tconst isStateSelected = ! isDefaultBlockStyleState( selectedState );\n\n\t// Fold the backgroundColor / gradient attribute slugs back into the style\n\t// object the panel consumes. When background.gradient is supported but not\n\t// yet explicitly set, fall back to color.gradient for display.\n\tconst styleValue = {\n\t\t...style,\n\t\tcolor: {\n\t\t\t...style?.color,\n\t\t\tbackground: backgroundColor\n\t\t\t\t? 'var:preset|color|' + backgroundColor\n\t\t\t\t: style?.color?.background,\n\t\t\tgradient:\n\t\t\t\t! backgroundGradientSupported && gradient\n\t\t\t\t\t? 'var:preset|gradient|' + gradient\n\t\t\t\t\t: style?.color?.gradient,\n\t\t},\n\t\t...( backgroundGradientSupported && {\n\t\t\tbackground: {\n\t\t\t\t...style?.background,\n\t\t\t\tgradient: gradient\n\t\t\t\t\t? 'var:preset|gradient|' + gradient\n\t\t\t\t\t: ( style?.background?.gradient ?? style?.color?.gradient ),\n\t\t\t},\n\t\t} ),\n\t};\n\tconst value = isStateSelected\n\t\t? getStyleForState( style, selectedState )\n\t\t: styleValue;\n\n\t// Skipped for gradients, which can't be reliably evaluated for contrast.\n\tconst enableContrastChecking =\n\t\t! value?.color?.gradient &&\n\t\t! value?.background?.gradient &&\n\t\t!! value?.color?.background &&\n\t\t( settings?.color?.text || settings?.color?.link ) &&\n\t\tfalse !== getBlockSupport( name, [ 'color', 'enableContrastChecker' ] );\n\n\tconst contrastWarning = useBlockColorContrastWarning( {\n\t\tclientId,\n\t\tname,\n\t\tenabled: !! enableContrastChecking,\n\t\tmessageOverride: __(\n\t\t\t'This color combination has poor contrast. Consider increasing contrast between background and foreground.'\n\t\t),\n\t} );\n\n\tif (\n\t\t! useHasBackgroundPanel( settings ) ||\n\t\t( ! hasBackgroundSupport( name ) &&\n\t\t\t! hasColorBackgroundSupport &&\n\t\t\t! hasColorGradientSupport )\n\t) {\n\t\treturn null;\n\t}\n\n\tconst onChange = ( newStyle ) => {\n\t\tif ( isStateSelected ) {\n\t\t\tsetAttributes( {\n\t\t\t\tstyle: setStyleForState( style, selectedState, newStyle ),\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\t// Extract background color slug from style.color.background.\n\t\tconst newBackgroundColorValue = newStyle?.color?.background;\n\t\tconst newBackgroundColorSlug = extractPresetSlug(\n\t\t\tnewBackgroundColorValue,\n\t\t\t'color'\n\t\t);\n\n\t\t// Extract gradient slug — prefer the new background.gradient path\n\t\t// when backgroundGradientSupported, fall back to color.gradient.\n\t\tconst newGradientValue = backgroundGradientSupported\n\t\t\t? newStyle?.background?.gradient\n\t\t\t: newStyle?.color?.gradient;\n\t\tconst newGradientSlug = extractPresetSlug(\n\t\t\tnewGradientValue,\n\t\t\t'gradient'\n\t\t);\n\t\tconst cleanedColorGradient = newGradientSlug\n\t\t\t? undefined\n\t\t\t: newStyle?.color?.gradient;\n\n\t\t// Drop slug-resolved values so they aren't persisted inline alongside\n\t\t// the attribute slugs.\n\t\tconst cleanedStyle = {\n\t\t\t...newStyle,\n\t\t\tcolor: {\n\t\t\t\t...newStyle?.color,\n\t\t\t\tbackground: newBackgroundColorSlug\n\t\t\t\t\t? undefined\n\t\t\t\t\t: newBackgroundColorValue,\n\t\t\t\tgradient: backgroundGradientSupported\n\t\t\t\t\t? undefined\n\t\t\t\t\t: cleanedColorGradient,\n\t\t\t},\n\t\t};\n\t\tif ( backgroundGradientSupported ) {\n\t\t\t// Background gradients are kept whole in `style.background.gradient`\n\t\t\t// rather than extracted to the legacy `gradient` attribute.\n\t\t\tcleanedStyle.background = {\n\t\t\t\t...cleanedStyle.background,\n\t\t\t\tgradient: newStyle?.background?.gradient,\n\t\t\t};\n\t\t}\n\n\t\tconst isMigrating =\n\t\t\tbackgroundGradientSupported && !! style?.color?.gradient;\n\t\tconst newAttributes = {\n\t\t\tstyle: cleanEmptyObject( cleanedStyle ),\n\t\t\tbackgroundColor: newBackgroundColorSlug,\n\t\t\t// The legacy `gradient` attribute is only used when the block does\n\t\t\t// not support `background.gradient`; otherwise the gradient is\n\t\t\t// stored in `style.background.gradient` above.\n\t\t\tgradient: backgroundGradientSupported ? undefined : newGradientSlug,\n\t\t};\n\n\t\t// When migrating from color.gradient to background.gradient, preserve\n\t\t// the has-background class so existing styles relying on it (e.g.\n\t\t// theme padding) are not silently broken. Only add the class when a\n\t\t// gradient value is being set — not when it is being cleared/reset.\n\t\t// Conversely, if the gradient is cleared and has-background was added\n\t\t// during a previous migration, remove it so it does not linger.\n\t\tconst hasNewGradient = !! newGradientSlug || !! newGradientValue;\n\t\tif ( isMigrating && hasNewGradient ) {\n\t\t\tnewAttributes.className = clsx( className, 'has-background' );\n\t\t} else if (\n\t\t\t! hasNewGradient &&\n\t\t\tclassName?.includes( 'has-background' )\n\t\t) {\n\t\t\tnewAttributes.className =\n\t\t\t\tclassName\n\t\t\t\t\t.split( ' ' )\n\t\t\t\t\t.filter( ( c ) => c !== 'has-background' )\n\t\t\t\t\t.join( ' ' ) || undefined;\n\t\t}\n\n\t\tsetAttributes( newAttributes );\n\t};\n\n\tconst updatedSettings = {\n\t\t...settings,\n\t\tbackground: {\n\t\t\t...settings.background,\n\t\t\tbackgroundSize:\n\t\t\t\tsettings?.background?.backgroundSize &&\n\t\t\t\thasBackgroundSupport( name, 'backgroundSize' ),\n\t\t},\n\t};\n\n\tconst backgroundDefaultControls = getBlockSupport( name, [\n\t\tBACKGROUND_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst colorDefaultControls = getBlockSupport( name, [\n\t\t'color',\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultControls = {\n\t\t...backgroundDefaultControls,\n\t\tbackgroundColor: colorDefaultControls?.background,\n\t\t// Mirror the old combined control: show the gradient item by default\n\t\t// when background color was shown by default.\n\t\tgradient:\n\t\t\tbackgroundDefaultControls?.gradient ??\n\t\t\tcolorDefaultControls?.background,\n\t};\n\n\tconst Wrapper = asWrapper || BackgroundInspectorControl;\n\n\treturn (\n\t\t<StylesBackgroundPanel\n\t\t\tas={ Wrapper }\n\t\t\tpanelId={ clientId }\n\t\t\tdefaultValues={ BACKGROUND_BLOCK_DEFAULT_VALUES }\n\t\t\tsettings={ updatedSettings }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t\tvalue={\n\t\t\t\tisStateSelected\n\t\t\t\t\t? getStyleForState( style, selectedState )\n\t\t\t\t\t: styleValue\n\t\t\t}\n\t\t\tcontrastWarning={ contrastWarning }\n\t\t\tinheritedValue={ inheritedValue }\n\t\t/>\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport: hasBackgroundSupport,\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["InspectorControls", "blockEditorStore", "useBlockColorContrastWarning", "clsx", "StylesBackgroundPanel"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/block-bindings.jsx"],
4
- "sourcesContent": ["import { __ } from '@wordpress/i18n';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalText as WCText,\n\t__experimentalToolsPanel as ToolsPanel,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useContext } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tBlockBindingsAttributeControl,\n\tuseBlockBindingsUtils,\n} from '../components/block-bindings';\nimport { unlock } from '../lock-unlock';\nimport InspectorControls from '../components/inspector-controls';\nimport BlockContext from '../components/block-context';\nimport { store as blockEditorStore } from '../store';\n\nconst useToolsPanelDropdownMenuProps = () => {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n};\n\nexport const BlockBindingsPanel = ( { name: blockName, metadata } ) => {\n\tconst blockContext = useContext( BlockContext );\n\tconst { removeAllBlockBindings } = useBlockBindingsUtils();\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tconst { bindableAttributes, hasCompatibleFields } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalBlockBindingsSupportedAttributes } =\n\t\t\t\tselect( blockEditorStore ).getSettings();\n\t\t\tconst {\n\t\t\t\tgetAllBlockBindingsSources,\n\t\t\t\tgetBlockBindingsSourceFieldsList,\n\t\t\t} = unlock( select( blocksStore ) );\n\n\t\t\treturn {\n\t\t\t\tbindableAttributes:\n\t\t\t\t\t__experimentalBlockBindingsSupportedAttributes?.[\n\t\t\t\t\t\tblockName\n\t\t\t\t\t],\n\t\t\t\thasCompatibleFields: Object.values(\n\t\t\t\t\tgetAllBlockBindingsSources()\n\t\t\t\t).some(\n\t\t\t\t\t( source ) =>\n\t\t\t\t\t\tgetBlockBindingsSourceFieldsList( source, blockContext )\n\t\t\t\t\t\t\t?.length > 0\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ blockName, blockContext ]\n\t);\n\n\t// Return early if there are no bindable attributes.\n\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst { bindings } = metadata || {};\n\n\tif ( bindings === undefined && ! hasCompatibleFields ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<InspectorControls group=\"bindings\">\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Attributes' ) }\n\t\t\t\tresetAll={ () => {\n\t\t\t\t\tremoveAllBlockBindings();\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\tclassName=\"block-editor-bindings__panel\"\n\t\t\t>\n\t\t\t\t<ItemGroup isBordered isSeparated>\n\t\t\t\t\t{ bindableAttributes.map( ( attribute ) => (\n\t\t\t\t\t\t<BlockBindingsAttributeControl\n\t\t\t\t\t\t\tkey={ attribute }\n\t\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\t\tblockName={ blockName }\n\t\t\t\t\t\t\tbinding={ bindings?.[ attribute ] }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) ) }\n\t\t\t\t</ItemGroup>\n\t\t\t\t{ /*\n\t\t\t\t\tUse a div element to make the ToolsPanelHiddenInnerWrapper\n\t\t\t\t\ttoggle the visibility of this help text automatically.\n\t\t\t\t*/ }\n\t\t\t\t<WCText as=\"div\" variant=\"muted\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Attributes connected to custom fields or other dynamic data.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t</WCText>\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n};\n\nexport default {\n\tedit: BlockBindingsPanel,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport( name ) {\n\t\treturn ! [\n\t\t\t'core/post-date',\n\t\t\t'core/navigation-link',\n\t\t\t'core/navigation-submenu',\n\t\t].includes( name );\n\t},\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAmB;AACnB,oBAAqC;AACrC,wBAIO;AACP,kBAA0B;AAC1B,qBAA2B;AAC3B,qBAAiC;AACjC,4BAGO;AACP,yBAAuB;AACvB,gCAA8B;AAC9B,2BAAyB;AACzB,mBAA0C;AA2DvC;AAzDH,IAAM,iCAAiC,MAAM;AAC5C,QAAM,eAAW,iCAAkB,UAAU,GAAI;AACjD,SAAO,CAAE,WACN;AAAA,IACA,cAAc;AAAA,MACb,WAAW;AAAA;AAAA,MAEX,QAAQ;AAAA,IACT;AAAA,EACA,IACA,CAAC;AACL;AAEO,IAAM,qBAAqB,CAAE,EAAE,MAAM,WAAW,SAAS,MAAO;AACtE,QAAM,mBAAe,2BAAY,qBAAAA,OAAa;AAC9C,QAAM,EAAE,uBAAuB,QAAI,6CAAsB;AACzD,QAAM,oBAAoB,+BAA+B;AAEzD,QAAM,EAAE,oBAAoB,oBAAoB,QAAI;AAAA,IACnD,CAAE,WAAY;AACb,YAAM,EAAE,+CAA+C,IACtD,OAAQ,aAAAC,KAAiB,EAAE,YAAY;AACxC,YAAM;AAAA,QACL;AAAA,QACA;AAAA,MACD,QAAI,2BAAQ,OAAQ,cAAAC,KAAY,CAAE;AAElC,aAAO;AAAA,QACN,oBACC,iDACC,SACD;AAAA,QACD,qBAAqB,OAAO;AAAA,UAC3B,2BAA2B;AAAA,QAC5B,EAAE;AAAA,UACD,CAAE,WACD,iCAAkC,QAAQ,YAAa,GACpD,SAAS;AAAA,QACd;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,WAAW,YAAa;AAAA,EAC3B;AAGA,MAAK,CAAE,sBAAsB,mBAAmB,WAAW,GAAI;AAC9D,WAAO;AAAA,EACR;AAEA,QAAM,EAAE,SAAS,IAAI,YAAY,CAAC;AAElC,MAAK,aAAa,UAAa,CAAE,qBAAsB;AACtD,WAAO;AAAA,EACR;AAEA,SACC,4CAAC,0BAAAC,SAAA,EAAkB,OAAM,YACxB;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACA,WAAQ,gBAAI,YAAa;AAAA,MACzB,UAAW,MAAM;AAChB,+BAAuB;AAAA,MACxB;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MAEV;AAAA,oDAAC,kBAAAC,yBAAA,EAAU,YAAU,MAAC,aAAW,MAC9B,6BAAmB,IAAK,CAAE,cAC3B;AAAA,UAAC;AAAA;AAAA,YAEA;AAAA,YACA;AAAA,YACA,SAAU,WAAY,SAAU;AAAA;AAAA,UAH1B;AAAA,QAIP,CACC,GACH;AAAA,QAKA,4CAAC,kBAAAC,oBAAA,EAAO,IAAG,OAAM,SAAQ,SACxB,sDAAC,OACE;AAAA,UACD;AAAA,QACD,GACD,GACD;AAAA;AAAA;AAAA,EACD,GACD;AAEF;AAEA,IAAO,yBAAQ;AAAA,EACd,MAAM;AAAA,EACN,eAAe,CAAE,UAAW;AAAA,EAC5B,WAAY,MAAO;AAClB,WAAO,CAAE;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,SAAU,IAAK;AAAA,EAClB;AACD;",
4
+ "sourcesContent": ["import { __ } from '@wordpress/i18n';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalText as WCText,\n\t__experimentalToolsPanel as ToolsPanel,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useContext } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tBlockBindingsAttributeControl,\n\tuseBlockBindingsUtils,\n} from '../components/block-bindings';\nimport { unlock } from '../lock-unlock';\nimport InspectorControls from '../components/inspector-controls';\nimport BlockContext from '../components/block-context';\nimport { store as blockEditorStore } from '../store';\n\nconst useToolsPanelDropdownMenuProps = () => {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t\t}\n\t\t: {};\n};\n\nexport const BlockBindingsPanel = ( { name: blockName, metadata } ) => {\n\tconst blockContext = useContext( BlockContext );\n\tconst { removeAllBlockBindings } = useBlockBindingsUtils();\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tconst { bindableAttributes, hasCompatibleFields } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalBlockBindingsSupportedAttributes } =\n\t\t\t\tselect( blockEditorStore ).getSettings();\n\t\t\tconst {\n\t\t\t\tgetAllBlockBindingsSources,\n\t\t\t\tgetBlockBindingsSourceFieldsList,\n\t\t\t} = unlock( select( blocksStore ) );\n\n\t\t\treturn {\n\t\t\t\tbindableAttributes:\n\t\t\t\t\t__experimentalBlockBindingsSupportedAttributes?.[\n\t\t\t\t\t\tblockName\n\t\t\t\t\t],\n\t\t\t\thasCompatibleFields: Object.values(\n\t\t\t\t\tgetAllBlockBindingsSources()\n\t\t\t\t).some(\n\t\t\t\t\t( source ) =>\n\t\t\t\t\t\tgetBlockBindingsSourceFieldsList( source, blockContext )\n\t\t\t\t\t\t\t?.length > 0\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ blockName, blockContext ]\n\t);\n\n\t// Return early if there are no bindable attributes.\n\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst { bindings } = metadata || {};\n\n\tif ( bindings === undefined && ! hasCompatibleFields ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<InspectorControls group=\"bindings\">\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Attributes' ) }\n\t\t\t\tresetAll={ () => {\n\t\t\t\t\tremoveAllBlockBindings();\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\tclassName=\"block-editor-bindings__panel\"\n\t\t\t>\n\t\t\t\t<ItemGroup isBordered isSeparated>\n\t\t\t\t\t{ bindableAttributes.map( ( attribute ) => (\n\t\t\t\t\t\t<BlockBindingsAttributeControl\n\t\t\t\t\t\t\tkey={ attribute }\n\t\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\t\tblockName={ blockName }\n\t\t\t\t\t\t\tbinding={ bindings?.[ attribute ] }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) ) }\n\t\t\t\t</ItemGroup>\n\t\t\t\t{ /*\n\t\t\t\t\tUse a div element to make the ToolsPanelHiddenInnerWrapper\n\t\t\t\t\ttoggle the visibility of this help text automatically.\n\t\t\t\t*/ }\n\t\t\t\t<WCText as=\"div\" variant=\"muted\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Attributes connected to custom fields or other dynamic data.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t</WCText>\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n};\n\nexport default {\n\tedit: BlockBindingsPanel,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport( name ) {\n\t\treturn ! [\n\t\t\t'core/post-date',\n\t\t\t'core/navigation-link',\n\t\t\t'core/navigation-submenu',\n\t\t].includes( name );\n\t},\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAmB;AACnB,oBAAqC;AACrC,wBAIO;AACP,kBAA0B;AAC1B,qBAA2B;AAC3B,qBAAiC;AACjC,4BAGO;AACP,yBAAuB;AACvB,gCAA8B;AAC9B,2BAAyB;AACzB,mBAA0C;AA2DvC;AAzDH,IAAM,iCAAiC,MAAM;AAC5C,QAAM,eAAW,iCAAkB,UAAU,GAAI;AACjD,SAAO,CAAE,WACN;AAAA,IACA,cAAc;AAAA,MACb,WAAW;AAAA;AAAA,MAEX,QAAQ;AAAA,IACT;AAAA,EACD,IACC,CAAC;AACL;AAEO,IAAM,qBAAqB,CAAE,EAAE,MAAM,WAAW,SAAS,MAAO;AACtE,QAAM,mBAAe,2BAAY,qBAAAA,OAAa;AAC9C,QAAM,EAAE,uBAAuB,QAAI,6CAAsB;AACzD,QAAM,oBAAoB,+BAA+B;AAEzD,QAAM,EAAE,oBAAoB,oBAAoB,QAAI;AAAA,IACnD,CAAE,WAAY;AACb,YAAM,EAAE,+CAA+C,IACtD,OAAQ,aAAAC,KAAiB,EAAE,YAAY;AACxC,YAAM;AAAA,QACL;AAAA,QACA;AAAA,MACD,QAAI,2BAAQ,OAAQ,cAAAC,KAAY,CAAE;AAElC,aAAO;AAAA,QACN,oBACC,iDACC,SACD;AAAA,QACD,qBAAqB,OAAO;AAAA,UAC3B,2BAA2B;AAAA,QAC5B,EAAE;AAAA,UACD,CAAE,WACD,iCAAkC,QAAQ,YAAa,GACpD,SAAS;AAAA,QACd;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,WAAW,YAAa;AAAA,EAC3B;AAGA,MAAK,CAAE,sBAAsB,mBAAmB,WAAW,GAAI;AAC9D,WAAO;AAAA,EACR;AAEA,QAAM,EAAE,SAAS,IAAI,YAAY,CAAC;AAElC,MAAK,aAAa,UAAa,CAAE,qBAAsB;AACtD,WAAO;AAAA,EACR;AAEA,SACC,4CAAC,0BAAAC,SAAA,EAAkB,OAAM,YACxB;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACA,WAAQ,gBAAI,YAAa;AAAA,MACzB,UAAW,MAAM;AAChB,+BAAuB;AAAA,MACxB;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MAEV;AAAA,oDAAC,kBAAAC,yBAAA,EAAU,YAAU,MAAC,aAAW,MAC9B,6BAAmB,IAAK,CAAE,cAC3B;AAAA,UAAC;AAAA;AAAA,YAEA;AAAA,YACA;AAAA,YACA,SAAU,WAAY,SAAU;AAAA;AAAA,UAH1B;AAAA,QAIP,CACC,GACH;AAAA,QAKA,4CAAC,kBAAAC,oBAAA,EAAO,IAAG,OAAM,SAAQ,SACxB,sDAAC,OACE;AAAA,UACD;AAAA,QACD,GACD,GACD;AAAA;AAAA;AAAA,EACD,GACD;AAEF;AAEA,IAAO,yBAAQ;AAAA,EACd,MAAM;AAAA,EACN,eAAe,CAAE,UAAW;AAAA,EAC5B,WAAY,MAAO;AAClB,WAAO,CAAE;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,SAAU,IAAK;AAAA,EAClB;AACD;",
6
6
  "names": ["BlockContext", "blockEditorStore", "blocksStore", "InspectorControls", "ToolsPanel", "ItemGroup", "WCText"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/border.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { hasBlockSupport, getBlockSupport } from '@wordpress/blocks';\nimport { __experimentalHasSplitBorders as hasSplitBorders } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport { useSelect } from '@wordpress/data';\nimport { getColorClassName } from '../components/colors';\nimport InspectorControls from '../components/inspector-controls';\nimport useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';\nimport { cleanEmptyObject, shouldSkipSerialization } from './utils';\nimport {\n\tuseHasBorderPanel,\n\tBorderPanel as StylesBorderPanel,\n} from '../components/global-styles';\nimport { useResolvedStyle } from '../components/global-styles/inherited-value-context';\nimport { store as blockEditorStore } from '../store';\nimport {\n\tgetStyleForState,\n\tisDefaultBlockStyleState,\n\tsetStyleForState,\n\tuseBlockStyleState,\n} from './block-style-state';\n\nexport const BORDER_SUPPORT_KEY = '__experimentalBorder';\nexport const SHADOW_SUPPORT_KEY = 'shadow';\n\nconst getColorByProperty = ( colors, property, value ) => {\n\tlet matchedColor;\n\n\tcolors.some( ( origin ) =>\n\t\torigin.colors.some( ( color ) => {\n\t\t\tif ( color[ property ] === value ) {\n\t\t\t\tmatchedColor = color;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t} )\n\t);\n\n\treturn matchedColor;\n};\n\nexport const getMultiOriginColor = ( { colors, namedColor, customColor } ) => {\n\t// Search each origin (default, theme, or user) for matching color by name.\n\tif ( namedColor ) {\n\t\tconst colorObject = getColorByProperty( colors, 'slug', namedColor );\n\t\tif ( colorObject ) {\n\t\t\treturn colorObject;\n\t\t}\n\t}\n\n\t// Skip if no custom color or matching named color.\n\tif ( ! customColor ) {\n\t\treturn { color: undefined };\n\t}\n\n\t// Attempt to find color via custom color value or build new object.\n\tconst colorObject = getColorByProperty( colors, 'color', customColor );\n\treturn colorObject ? colorObject : { color: customColor };\n};\n\nfunction getColorSlugFromVariable( value ) {\n\tconst namedColor = /var:preset\\|color\\|(.+)/.exec( value );\n\tif ( namedColor && namedColor[ 1 ] ) {\n\t\treturn namedColor[ 1 ];\n\t}\n\treturn null;\n}\n\nfunction styleToAttributes( style ) {\n\tif ( hasSplitBorders( style?.border ) ) {\n\t\treturn {\n\t\t\tstyle,\n\t\t\tborderColor: undefined,\n\t\t};\n\t}\n\n\tconst borderColorValue = style?.border?.color;\n\tconst borderColorSlug = borderColorValue?.startsWith( 'var:preset|color|' )\n\t\t? borderColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst updatedStyle = { ...style };\n\tupdatedStyle.border = {\n\t\t...updatedStyle.border,\n\t\tcolor: borderColorSlug ? undefined : borderColorValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tborderColor: borderColorSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\tif ( hasSplitBorders( attributes.style?.border ) ) {\n\t\treturn attributes.style;\n\t}\n\treturn {\n\t\t...attributes.style,\n\t\tborder: {\n\t\t\t...attributes.style?.border,\n\t\t\tcolor: attributes.borderColor\n\t\t\t\t? 'var:preset|color|' + attributes.borderColor\n\t\t\t\t: attributes.style?.border?.color,\n\t\t},\n\t};\n}\n\nfunction BordersInspectorControl( { label, children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"border\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t\tlabel={ label }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function BorderPanel( { clientId, name, setAttributes, settings } ) {\n\tconst selectedState = useBlockStyleState();\n\tconst isEnabled = useHasBorderPanel( settings );\n\tconst { style, borderColor, className } = useSelect(\n\t\t( select ) => {\n\t\t\t// Early return to avoid subscription when disabled\n\t\t\tif ( ! isEnabled ) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\tconst {\n\t\t\t\tstyle: _style,\n\t\t\t\tborderColor: _borderColor,\n\t\t\t\tclassName: _className,\n\t\t\t} = select( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\t\treturn {\n\t\t\t\tstyle: _style,\n\t\t\t\tborderColor: _borderColor,\n\t\t\t\tclassName: _className,\n\t\t\t};\n\t\t},\n\t\t[ clientId, isEnabled ]\n\t);\n\n\tconst { value: inheritedValue } = useResolvedStyle(\n\t\tname,\n\t\tclassName,\n\t\tselectedState\n\t);\n\n\tconst isStateSelected = ! isDefaultBlockStyleState( selectedState );\n\n\tconst value = useMemo( () => {\n\t\tif ( isStateSelected ) {\n\t\t\treturn getStyleForState( style, selectedState );\n\t\t}\n\t\treturn attributesToStyle( { style, borderColor } );\n\t}, [ isStateSelected, selectedState, style, borderColor ] );\n\n\tconst onChange = isStateSelected\n\t\t? ( newStyle ) => {\n\t\t\t\tsetAttributes( {\n\t\t\t\t\tstyle: setStyleForState( style, selectedState, newStyle ),\n\t\t\t\t} );\n\t\t }\n\t\t: ( newStyle ) => {\n\t\t\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t\t };\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = {\n\t\t...getBlockSupport( name, [\n\t\t\tBORDER_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t\t...getBlockSupport( name, [\n\t\t\tSHADOW_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t};\n\n\treturn (\n\t\t<StylesBorderPanel\n\t\t\tas={ BordersInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tsettings={ settings }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t\tinheritedValue={ inheritedValue }\n\t\t/>\n\t);\n}\n\n/**\n * Determine whether there is block support for border properties.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Border feature to check support for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBorderSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, BORDER_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.color ||\n\t\t\tsupport?.radius ||\n\t\t\tsupport?.width ||\n\t\t\tsupport?.style\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\n/**\n * Determine whether there is block support for shadow properties.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasShadowSupport( blockName ) {\n\treturn hasBlockSupport( blockName, SHADOW_SUPPORT_KEY );\n}\n\n/**\n * Returns a new style object where the specified border attribute has been\n * removed.\n *\n * @param {Object} style Styles from block attributes.\n * @param {string} attribute The border style attribute to clear.\n *\n * @return {Object} Style object with the specified attribute removed.\n */\nexport function removeBorderAttribute( style, attribute ) {\n\treturn cleanEmptyObject( {\n\t\t...style,\n\t\tborder: {\n\t\t\t...style?.border,\n\t\t\t[ attribute ]: undefined,\n\t\t},\n\t} );\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * `borderColor` if needed.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Updated block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBorderSupport( settings, 'color' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify default value if needed.\n\tif ( settings.attributes.borderColor ) {\n\t\treturn settings;\n\t}\n\n\t// Add new borderColor attribute to block settings.\n\treturn {\n\t\t...settings,\n\t\tattributes: {\n\t\t\t...settings.attributes,\n\t\t\tborderColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * Override props assigned to save component to inject border color.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type definition.\n * @param {Object} attributes Block's attributes.\n *\n * @return {Object} Filtered props to apply to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif (\n\t\t! hasBorderSupport( blockNameOrType, 'color' ) ||\n\t\tshouldSkipSerialization( blockNameOrType, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn props;\n\t}\n\n\tconst borderClasses = getBorderClasses( attributes );\n\tconst newClassName = clsx( props.className, borderClasses );\n\n\t// If we are clearing the last of the previous classes in `className`\n\t// set it to `undefined` to avoid rendering empty DOM attributes.\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Generates a CSS class name consisting of all the applicable border color\n * classes given the current block attributes.\n *\n * @param {Object} attributes Block's attributes.\n *\n * @return {string} CSS class name.\n */\nexport function getBorderClasses( attributes ) {\n\tconst { borderColor, style } = attributes;\n\tconst borderColorClass = getColorClassName( 'border-color', borderColor );\n\n\treturn clsx( {\n\t\t'has-border-color': borderColor || style?.border?.color,\n\t\t[ borderColorClass ]: !! borderColorClass,\n\t} );\n}\n\nfunction useBlockProps( { name, borderColor, style } ) {\n\tconst { colors } = useMultipleOriginColorsAndGradients();\n\n\tif (\n\t\t! hasBorderSupport( name, 'color' ) ||\n\t\tshouldSkipSerialization( name, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst { color: borderColorValue } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: borderColor,\n\t} );\n\tconst { color: borderTopColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.top?.color ),\n\t} );\n\tconst { color: borderRightColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.right?.color ),\n\t} );\n\n\tconst { color: borderBottomColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.bottom?.color ),\n\t} );\n\tconst { color: borderLeftColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.left?.color ),\n\t} );\n\n\tconst extraStyles = {\n\t\tborderTopColor: borderTopColor || borderColorValue,\n\t\tborderRightColor: borderRightColor || borderColorValue,\n\t\tborderBottomColor: borderBottomColor || borderColorValue,\n\t\tborderLeftColor: borderLeftColor || borderColorValue,\n\t};\n\n\treturn addSaveProps(\n\t\t{ style: cleanEmptyObject( extraStyles ) || {} },\n\t\tname,\n\t\t{ borderColor, style }\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'borderColor', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBorderSupport( name, 'color' );\n\t},\n};\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/border/addAttributes',\n\taddAttributes\n);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { hasBlockSupport, getBlockSupport } from '@wordpress/blocks';\nimport { __experimentalHasSplitBorders as hasSplitBorders } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport { useSelect } from '@wordpress/data';\nimport { getColorClassName } from '../components/colors';\nimport InspectorControls from '../components/inspector-controls';\nimport useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';\nimport { cleanEmptyObject, shouldSkipSerialization } from './utils';\nimport {\n\tuseHasBorderPanel,\n\tBorderPanel as StylesBorderPanel,\n} from '../components/global-styles';\nimport { useResolvedStyle } from '../components/global-styles/inherited-value-context';\nimport { store as blockEditorStore } from '../store';\nimport {\n\tgetStyleForState,\n\tisDefaultBlockStyleState,\n\tsetStyleForState,\n\tuseBlockStyleState,\n} from './block-style-state';\n\nexport const BORDER_SUPPORT_KEY = '__experimentalBorder';\nexport const SHADOW_SUPPORT_KEY = 'shadow';\n\nconst getColorByProperty = ( colors, property, value ) => {\n\tlet matchedColor;\n\n\tcolors.some( ( origin ) =>\n\t\torigin.colors.some( ( color ) => {\n\t\t\tif ( color[ property ] === value ) {\n\t\t\t\tmatchedColor = color;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t} )\n\t);\n\n\treturn matchedColor;\n};\n\nexport const getMultiOriginColor = ( { colors, namedColor, customColor } ) => {\n\t// Search each origin (default, theme, or user) for matching color by name.\n\tif ( namedColor ) {\n\t\tconst colorObject = getColorByProperty( colors, 'slug', namedColor );\n\t\tif ( colorObject ) {\n\t\t\treturn colorObject;\n\t\t}\n\t}\n\n\t// Skip if no custom color or matching named color.\n\tif ( ! customColor ) {\n\t\treturn { color: undefined };\n\t}\n\n\t// Attempt to find color via custom color value or build new object.\n\tconst colorObject = getColorByProperty( colors, 'color', customColor );\n\treturn colorObject ? colorObject : { color: customColor };\n};\n\nfunction getColorSlugFromVariable( value ) {\n\tconst namedColor = /var:preset\\|color\\|(.+)/.exec( value );\n\tif ( namedColor && namedColor[ 1 ] ) {\n\t\treturn namedColor[ 1 ];\n\t}\n\treturn null;\n}\n\nfunction styleToAttributes( style ) {\n\tif ( hasSplitBorders( style?.border ) ) {\n\t\treturn {\n\t\t\tstyle,\n\t\t\tborderColor: undefined,\n\t\t};\n\t}\n\n\tconst borderColorValue = style?.border?.color;\n\tconst borderColorSlug = borderColorValue?.startsWith( 'var:preset|color|' )\n\t\t? borderColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst updatedStyle = { ...style };\n\tupdatedStyle.border = {\n\t\t...updatedStyle.border,\n\t\tcolor: borderColorSlug ? undefined : borderColorValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tborderColor: borderColorSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\tif ( hasSplitBorders( attributes.style?.border ) ) {\n\t\treturn attributes.style;\n\t}\n\treturn {\n\t\t...attributes.style,\n\t\tborder: {\n\t\t\t...attributes.style?.border,\n\t\t\tcolor: attributes.borderColor\n\t\t\t\t? 'var:preset|color|' + attributes.borderColor\n\t\t\t\t: attributes.style?.border?.color,\n\t\t},\n\t};\n}\n\nfunction BordersInspectorControl( { label, children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"border\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t\tlabel={ label }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function BorderPanel( { clientId, name, setAttributes, settings } ) {\n\tconst selectedState = useBlockStyleState();\n\tconst isEnabled = useHasBorderPanel( settings );\n\tconst { style, borderColor, className } = useSelect(\n\t\t( select ) => {\n\t\t\t// Early return to avoid subscription when disabled\n\t\t\tif ( ! isEnabled ) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\tconst {\n\t\t\t\tstyle: _style,\n\t\t\t\tborderColor: _borderColor,\n\t\t\t\tclassName: _className,\n\t\t\t} = select( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\t\treturn {\n\t\t\t\tstyle: _style,\n\t\t\t\tborderColor: _borderColor,\n\t\t\t\tclassName: _className,\n\t\t\t};\n\t\t},\n\t\t[ clientId, isEnabled ]\n\t);\n\n\tconst { value: inheritedValue } = useResolvedStyle(\n\t\tname,\n\t\tclassName,\n\t\tselectedState\n\t);\n\n\tconst isStateSelected = ! isDefaultBlockStyleState( selectedState );\n\n\tconst value = useMemo( () => {\n\t\tif ( isStateSelected ) {\n\t\t\treturn getStyleForState( style, selectedState );\n\t\t}\n\t\treturn attributesToStyle( { style, borderColor } );\n\t}, [ isStateSelected, selectedState, style, borderColor ] );\n\n\tconst onChange = isStateSelected\n\t\t? ( newStyle ) => {\n\t\t\t\tsetAttributes( {\n\t\t\t\t\tstyle: setStyleForState( style, selectedState, newStyle ),\n\t\t\t\t} );\n\t\t\t}\n\t\t: ( newStyle ) => {\n\t\t\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t\t\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = {\n\t\t...getBlockSupport( name, [\n\t\t\tBORDER_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t\t...getBlockSupport( name, [\n\t\t\tSHADOW_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t};\n\n\treturn (\n\t\t<StylesBorderPanel\n\t\t\tas={ BordersInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tsettings={ settings }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t\tinheritedValue={ inheritedValue }\n\t\t/>\n\t);\n}\n\n/**\n * Determine whether there is block support for border properties.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Border feature to check support for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBorderSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, BORDER_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.color ||\n\t\t\tsupport?.radius ||\n\t\t\tsupport?.width ||\n\t\t\tsupport?.style\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\n/**\n * Determine whether there is block support for shadow properties.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasShadowSupport( blockName ) {\n\treturn hasBlockSupport( blockName, SHADOW_SUPPORT_KEY );\n}\n\n/**\n * Returns a new style object where the specified border attribute has been\n * removed.\n *\n * @param {Object} style Styles from block attributes.\n * @param {string} attribute The border style attribute to clear.\n *\n * @return {Object} Style object with the specified attribute removed.\n */\nexport function removeBorderAttribute( style, attribute ) {\n\treturn cleanEmptyObject( {\n\t\t...style,\n\t\tborder: {\n\t\t\t...style?.border,\n\t\t\t[ attribute ]: undefined,\n\t\t},\n\t} );\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * `borderColor` if needed.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Updated block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBorderSupport( settings, 'color' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify default value if needed.\n\tif ( settings.attributes.borderColor ) {\n\t\treturn settings;\n\t}\n\n\t// Add new borderColor attribute to block settings.\n\treturn {\n\t\t...settings,\n\t\tattributes: {\n\t\t\t...settings.attributes,\n\t\t\tborderColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * Override props assigned to save component to inject border color.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type definition.\n * @param {Object} attributes Block's attributes.\n *\n * @return {Object} Filtered props to apply to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif (\n\t\t! hasBorderSupport( blockNameOrType, 'color' ) ||\n\t\tshouldSkipSerialization( blockNameOrType, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn props;\n\t}\n\n\tconst borderClasses = getBorderClasses( attributes );\n\tconst newClassName = clsx( props.className, borderClasses );\n\n\t// If we are clearing the last of the previous classes in `className`\n\t// set it to `undefined` to avoid rendering empty DOM attributes.\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Generates a CSS class name consisting of all the applicable border color\n * classes given the current block attributes.\n *\n * @param {Object} attributes Block's attributes.\n *\n * @return {string} CSS class name.\n */\nexport function getBorderClasses( attributes ) {\n\tconst { borderColor, style } = attributes;\n\tconst borderColorClass = getColorClassName( 'border-color', borderColor );\n\n\treturn clsx( {\n\t\t'has-border-color': borderColor || style?.border?.color,\n\t\t[ borderColorClass ]: !! borderColorClass,\n\t} );\n}\n\nfunction useBlockProps( { name, borderColor, style } ) {\n\tconst { colors } = useMultipleOriginColorsAndGradients();\n\n\tif (\n\t\t! hasBorderSupport( name, 'color' ) ||\n\t\tshouldSkipSerialization( name, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst { color: borderColorValue } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: borderColor,\n\t} );\n\tconst { color: borderTopColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.top?.color ),\n\t} );\n\tconst { color: borderRightColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.right?.color ),\n\t} );\n\n\tconst { color: borderBottomColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.bottom?.color ),\n\t} );\n\tconst { color: borderLeftColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.left?.color ),\n\t} );\n\n\tconst extraStyles = {\n\t\tborderTopColor: borderTopColor || borderColorValue,\n\t\tborderRightColor: borderRightColor || borderColorValue,\n\t\tborderBottomColor: borderBottomColor || borderColorValue,\n\t\tborderLeftColor: borderLeftColor || borderColorValue,\n\t};\n\n\treturn addSaveProps(\n\t\t{ style: cleanEmptyObject( extraStyles ) || {} },\n\t\tname,\n\t\t{ borderColor, style }\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'borderColor', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBorderSupport( name, 'color' );\n\t},\n};\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/border/addAttributes',\n\taddAttributes\n);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,oBAAiD;AACjD,wBAAiE;AACjE,qBAAqC;AACrC,mBAA0B;AAC1B,kBAA0B;AAC1B,oBAAkC;AAClC,gCAA8B;AAC9B,sDAAgD;AAChD,mBAA0D;AAC1D,2BAGO;AACP,qCAAiC;AACjC,mBAA0C;AAC1C,+BAKO;AAqGL;AAnGK,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAElC,IAAM,qBAAqB,CAAE,QAAQ,UAAU,UAAW;AACzD,MAAI;AAEJ,SAAO;AAAA,IAAM,CAAE,WACd,OAAO,OAAO,KAAM,CAAE,UAAW;AAChC,UAAK,MAAO,QAAS,MAAM,OAAQ;AAClC,uBAAe;AACf,eAAO;AAAA,MACR;AAEA,aAAO;AAAA,IACR,CAAE;AAAA,EACH;AAEA,SAAO;AACR;AAEO,IAAM,sBAAsB,CAAE,EAAE,QAAQ,YAAY,YAAY,MAAO;AAE7E,MAAK,YAAa;AACjB,UAAMA,eAAc,mBAAoB,QAAQ,QAAQ,UAAW;AACnE,QAAKA,cAAc;AAClB,aAAOA;AAAA,IACR;AAAA,EACD;AAGA,MAAK,CAAE,aAAc;AACpB,WAAO,EAAE,OAAO,OAAU;AAAA,EAC3B;AAGA,QAAM,cAAc,mBAAoB,QAAQ,SAAS,WAAY;AACrE,SAAO,cAAc,cAAc,EAAE,OAAO,YAAY;AACzD;AAEA,SAAS,yBAA0B,OAAQ;AAC1C,QAAM,aAAa,0BAA0B,KAAM,KAAM;AACzD,MAAK,cAAc,WAAY,CAAE,GAAI;AACpC,WAAO,WAAY,CAAE;AAAA,EACtB;AACA,SAAO;AACR;AAEA,SAAS,kBAAmB,OAAQ;AACnC,UAAK,kBAAAC,+BAAiB,OAAO,MAAO,GAAI;AACvC,WAAO;AAAA,MACN;AAAA,MACA,aAAa;AAAA,IACd;AAAA,EACD;AAEA,QAAM,mBAAmB,OAAO,QAAQ;AACxC,QAAM,kBAAkB,kBAAkB,WAAY,mBAAoB,IACvE,iBAAiB,UAAW,oBAAoB,MAAO,IACvD;AACH,QAAM,eAAe,EAAE,GAAG,MAAM;AAChC,eAAa,SAAS;AAAA,IACrB,GAAG,aAAa;AAAA,IAChB,OAAO,kBAAkB,SAAY;AAAA,EACtC;AACA,SAAO;AAAA,IACN,WAAO,+BAAkB,YAAa;AAAA,IACtC,aAAa;AAAA,EACd;AACD;AAEA,SAAS,kBAAmB,YAAa;AACxC,UAAK,kBAAAA,+BAAiB,WAAW,OAAO,MAAO,GAAI;AAClD,WAAO,WAAW;AAAA,EACnB;AACA,SAAO;AAAA,IACN,GAAG,WAAW;AAAA,IACd,QAAQ;AAAA,MACP,GAAG,WAAW,OAAO;AAAA,MACrB,OAAO,WAAW,cACf,sBAAsB,WAAW,cACjC,WAAW,OAAO,QAAQ;AAAA,IAC9B;AAAA,EACD;AACD;AAEA,SAAS,wBAAyB,EAAE,OAAO,UAAU,eAAe,GAAI;AACvE,QAAM,+BAA2B;AAAA,IAChC,CAAE,eAAgB;AACjB,YAAM,gBAAgB,kBAAmB,UAAW;AACpD,YAAM,eAAe,eAAgB,aAAc;AACnD,aAAO;AAAA,QACN,GAAG;AAAA,QACH,GAAG,kBAAmB,YAAa;AAAA,MACpC;AAAA,IACD;AAAA,IACA,CAAE,cAAe;AAAA,EAClB;AAEA,SACC;AAAA,IAAC,0BAAAC;AAAA,IAAA;AAAA,MACA,OAAM;AAAA,MACN,gBAAiB;AAAA,MACjB;AAAA,MAEE;AAAA;AAAA,EACH;AAEF;AAEO,SAAS,YAAa,EAAE,UAAU,MAAM,eAAe,SAAS,GAAI;AAC1E,QAAM,oBAAgB,6CAAmB;AACzC,QAAM,gBAAY,wCAAmB,QAAS;AAC9C,QAAM,EAAE,OAAO,aAAa,UAAU,QAAI;AAAA,IACzC,CAAE,WAAY;AAEb,UAAK,CAAE,WAAY;AAClB,eAAO,CAAC;AAAA,MACT;AACA,YAAM;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,QACb,WAAW;AAAA,MACZ,IAAI,OAAQ,aAAAC,KAAiB,EAAE,mBAAoB,QAAS,KAAK,CAAC;AAClE,aAAO;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,QACb,WAAW;AAAA,MACZ;AAAA,IACD;AAAA,IACA,CAAE,UAAU,SAAU;AAAA,EACvB;AAEA,QAAM,EAAE,OAAO,eAAe,QAAI;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,QAAM,kBAAkB,KAAE,mDAA0B,aAAc;AAElE,QAAM,YAAQ,wBAAS,MAAM;AAC5B,QAAK,iBAAkB;AACtB,iBAAO,2CAAkB,OAAO,aAAc;AAAA,IAC/C;AACA,WAAO,kBAAmB,EAAE,OAAO,YAAY,CAAE;AAAA,EAClD,GAAG,CAAE,iBAAiB,eAAe,OAAO,WAAY,CAAE;AAE1D,QAAM,WAAW,kBACd,CAAE,aAAc;AAChB,kBAAe;AAAA,MACd,WAAO,2CAAkB,OAAO,eAAe,QAAS;AAAA,IACzD,CAAE;AAAA,EACH,IACC,CAAE,aAAc;AAChB,kBAAe,kBAAmB,QAAS,CAAE;AAAA,EAC9C;AAEF,MAAK,CAAE,WAAY;AAClB,WAAO;AAAA,EACR;AAEA,QAAM,kBAAkB;AAAA,IACvB,OAAG,+BAAiB,MAAM;AAAA,MACzB;AAAA,MACA;AAAA,IACD,CAAE;AAAA,IACF,OAAG,+BAAiB,MAAM;AAAA,MACzB;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SACC;AAAA,IAAC,qBAAAC;AAAA,IAAA;AAAA,MACA,IAAK;AAAA,MACL,SAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACD;AAEF;AAUO,SAAS,iBAAkB,WAAW,UAAU,OAAQ;AAC9D,QAAM,cAAU,+BAAiB,WAAW,kBAAmB;AAE/D,MAAK,YAAY,MAAO;AACvB,WAAO;AAAA,EACR;AAEA,MAAK,YAAY,OAAQ;AACxB,WAAO,CAAC,EACP,SAAS,SACT,SAAS,UACT,SAAS,SACT,SAAS;AAAA,EAEX;AAEA,SAAO,CAAC,CAAE,UAAW,OAAQ;AAC9B;AASO,SAAS,iBAAkB,WAAY;AAC7C,aAAO,+BAAiB,WAAW,kBAAmB;AACvD;AAWO,SAAS,sBAAuB,OAAO,WAAY;AACzD,aAAO,+BAAkB;AAAA,IACxB,GAAG;AAAA,IACH,QAAQ;AAAA,MACP,GAAG,OAAO;AAAA,MACV,CAAE,SAAU,GAAG;AAAA,IAChB;AAAA,EACD,CAAE;AACH;AAUA,SAAS,cAAe,UAAW;AAClC,MAAK,CAAE,iBAAkB,UAAU,OAAQ,GAAI;AAC9C,WAAO;AAAA,EACR;AAGA,MAAK,SAAS,WAAW,aAAc;AACtC,WAAO;AAAA,EACR;AAGA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,YAAY;AAAA,MACX,GAAG,SAAS;AAAA,MACZ,aAAa;AAAA,QACZ,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD;AAWA,SAAS,aAAc,OAAO,iBAAiB,YAAa;AAC3D,MACC,CAAE,iBAAkB,iBAAiB,OAAQ,SAC7C,sCAAyB,iBAAiB,oBAAoB,OAAQ,GACrE;AACD,WAAO;AAAA,EACR;AAEA,QAAM,gBAAgB,iBAAkB,UAAW;AACnD,QAAM,mBAAe,YAAAC,SAAM,MAAM,WAAW,aAAc;AAI1D,QAAM,YAAY,eAAe,eAAe;AAEhD,SAAO;AACR;AAUO,SAAS,iBAAkB,YAAa;AAC9C,QAAM,EAAE,aAAa,MAAM,IAAI;AAC/B,QAAM,uBAAmB,iCAAmB,gBAAgB,WAAY;AAExE,aAAO,YAAAA,SAAM;AAAA,IACZ,oBAAoB,eAAe,OAAO,QAAQ;AAAA,IAClD,CAAE,gBAAiB,GAAG,CAAC,CAAE;AAAA,EAC1B,CAAE;AACH;AAEA,SAAS,cAAe,EAAE,MAAM,aAAa,MAAM,GAAI;AACtD,QAAM,EAAE,OAAO,QAAI,gDAAAC,SAAoC;AAEvD,MACC,CAAE,iBAAkB,MAAM,OAAQ,SAClC,sCAAyB,MAAM,oBAAoB,OAAQ,GAC1D;AACD,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,EAAE,OAAO,iBAAiB,IAAI,oBAAqB;AAAA,IACxD;AAAA,IACA,YAAY;AAAA,EACb,CAAE;AACF,QAAM,EAAE,OAAO,eAAe,IAAI,oBAAqB;AAAA,IACtD;AAAA,IACA,YAAY,yBAA0B,OAAO,QAAQ,KAAK,KAAM;AAAA,EACjE,CAAE;AACF,QAAM,EAAE,OAAO,iBAAiB,IAAI,oBAAqB;AAAA,IACxD;AAAA,IACA,YAAY,yBAA0B,OAAO,QAAQ,OAAO,KAAM;AAAA,EACnE,CAAE;AAEF,QAAM,EAAE,OAAO,kBAAkB,IAAI,oBAAqB;AAAA,IACzD;AAAA,IACA,YAAY,yBAA0B,OAAO,QAAQ,QAAQ,KAAM;AAAA,EACpE,CAAE;AACF,QAAM,EAAE,OAAO,gBAAgB,IAAI,oBAAqB;AAAA,IACvD;AAAA,IACA,YAAY,yBAA0B,OAAO,QAAQ,MAAM,KAAM;AAAA,EAClE,CAAE;AAEF,QAAM,cAAc;AAAA,IACnB,gBAAgB,kBAAkB;AAAA,IAClC,kBAAkB,oBAAoB;AAAA,IACtC,mBAAmB,qBAAqB;AAAA,IACxC,iBAAiB,mBAAmB;AAAA,EACrC;AAEA,SAAO;AAAA,IACN,EAAE,WAAO,+BAAkB,WAAY,KAAK,CAAC,EAAE;AAAA,IAC/C;AAAA,IACA,EAAE,aAAa,MAAM;AAAA,EACtB;AACD;AAEA,IAAO,iBAAQ;AAAA,EACd;AAAA,EACA;AAAA,EACA,eAAe,CAAE,eAAe,OAAQ;AAAA,EACxC,WAAY,MAAO;AAClB,WAAO,iBAAkB,MAAM,OAAQ;AAAA,EACxC;AACD;AAAA,IAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;",
6
6
  "names": ["colorObject", "hasSplitBorders", "InspectorControls", "blockEditorStore", "StylesBorderPanel", "clsx", "useMultipleOriginColorsAndGradients"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/contrast-checker.js"],
4
- "sourcesContent": ["import { useEffect, useLayoutEffect, useReducer } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { getBlockSelector } from '@wordpress/global-styles-engine';\nimport { speak } from '@wordpress/a11y';\nimport { getContrastWarning } from '../components/contrast-checker';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nfunction getComputedValue( node, property ) {\n\treturn node.ownerDocument.defaultView\n\t\t.getComputedStyle( node )\n\t\t.getPropertyValue( property );\n}\n\nfunction getBlockElementColors( blockEl, blockType ) {\n\tif ( ! blockEl || ! blockType ) {\n\t\treturn {};\n\t}\n\n\t// Get color-specific selectors.\n\tconst textSelector = getBlockSelector( blockType, 'color.text', {\n\t\tfallback: true,\n\t} );\n\tconst backgroundSelector = getBlockSelector(\n\t\tblockType,\n\t\t'color.background',\n\t\t{ fallback: true }\n\t);\n\n\t// Find target elements - querySelector handles all the complexity\n\tconst textElement = blockEl.querySelector( textSelector ) || blockEl;\n\tconst backgroundElement =\n\t\tblockEl.querySelector( backgroundSelector ) || blockEl;\n\tconst linkElement = blockEl.querySelector( 'a' );\n\n\t// Get computed colors from the appropriate elements\n\tconst textColor = getComputedValue( textElement, 'color' );\n\tconst linkColor =\n\t\tlinkElement && linkElement.textContent\n\t\t\t? getComputedValue( linkElement, 'color' )\n\t\t\t: undefined;\n\n\tlet backgroundColorNode = backgroundElement;\n\tlet backgroundColor = getComputedValue(\n\t\tbackgroundColorNode,\n\t\t'background-color'\n\t);\n\twhile (\n\t\tbackgroundColor === 'rgba(0, 0, 0, 0)' &&\n\t\tbackgroundColorNode.parentNode &&\n\t\tbackgroundColorNode.parentNode.nodeType ===\n\t\t\tbackgroundColorNode.parentNode.ELEMENT_NODE\n\t) {\n\t\tbackgroundColorNode = backgroundColorNode.parentNode;\n\t\tbackgroundColor = getComputedValue(\n\t\t\tbackgroundColorNode,\n\t\t\t'background-color'\n\t\t);\n\t}\n\n\treturn {\n\t\ttextColor,\n\t\tbackgroundColor,\n\t\tlinkColor,\n\t};\n}\n\nfunction reducer( prevColors, newColors ) {\n\tconst hasChanged = Object.keys( newColors ).some(\n\t\t( key ) => prevColors[ key ] !== newColors[ key ]\n\t);\n\n\t// Do not re-render if the colors have not changed.\n\treturn hasChanged ? newColors : prevColors;\n}\n\n/**\n * Returns a contrast warning message for a block's computed colors, or\n * `undefined` when contrast is sufficient or checking is disabled.\n *\n * Colors are read from the rendered block element so that inherited values\n * (e.g. from Global Styles or ancestor blocks) are taken into account.\n *\n * @param {Object} props\n * @param {string} props.clientId Block client ID.\n * @param {string} props.name Block name.\n * @param {boolean} [props.enabled] Whether contrast checking is active.\n * @param {boolean} [props.checkTextColor] Whether to evaluate the text/background pair.\n * @param {boolean} [props.checkLinkColor] Whether to evaluate the link/background pair.\n * @param {string} [props.messageOverride] Caller-provided copy used in place of the generic guidance.\n *\n * @return {?string} The warning message, if any.\n */\nexport default function useBlockColorContrastWarning( {\n\tclientId,\n\tname,\n\tenabled = true,\n\tcheckTextColor = true,\n\tcheckLinkColor = true,\n\tmessageOverride,\n} ) {\n\tconst blockEl = useBlockElement( clientId );\n\tconst [ colors, setColors ] = useReducer( reducer, {} );\n\n\tconst blockType = useSelect(\n\t\t( select ) => {\n\t\t\treturn name && enabled\n\t\t\t\t? select( blocksStore ).getBlockType( name )\n\t\t\t\t: undefined;\n\t\t},\n\t\t[ name, enabled ]\n\t);\n\n\t// There are so many things that can change the color of a block\n\t// So we perform this check on every render.\n\tuseLayoutEffect( () => {\n\t\tif ( ! enabled || ! blockEl || ! blockType ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Combine `useLayoutEffect` and two rAF calls to ensure that values are read\n\t\t// after the current paint but before the next paint.\n\t\twindow.requestAnimationFrame( () =>\n\t\t\twindow.requestAnimationFrame( () =>\n\t\t\t\tsetColors( getBlockElementColors( blockEl, blockType ) )\n\t\t\t)\n\t\t);\n\t} );\n\n\t// Runs in its own effect with dependencies so the observer is only\n\t// recreated when the block element or block type changes.\n\tuseLayoutEffect( () => {\n\t\tif ( ! enabled || ! blockEl || ! blockType ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new window.MutationObserver( () => {\n\t\t\tsetColors( getBlockElementColors( blockEl, blockType ) );\n\t\t} );\n\n\t\tobserver.observe( blockEl, {\n\t\t\tattributes: true,\n\t\t\tattributeFilter: [ 'class', 'style' ],\n\t\t\tsubtree: true,\n\t\t} );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ enabled, blockEl, blockType ] );\n\n\tconst warning = enabled\n\t\t? getContrastWarning( {\n\t\t\t\tbackgroundColor: colors.backgroundColor,\n\t\t\t\ttextColor: checkTextColor ? colors.textColor : undefined,\n\t\t\t\tlinkColor: checkLinkColor ? colors.linkColor : undefined,\n\t\t\t\tmessageOverride,\n\t\t\t\tenableAlphaChecker: true,\n\t\t } )\n\t\t: null;\n\n\t// The popover Notice that displays this warning is muted\n\t// (`spokenMessage={ null }`), so this hook is the single source of the\n\t// spoken announcement. Announce only when the warning message itself\n\t// appears or changes; keying off `speakMessage` rather than the raw\n\t// computed `colors` avoids re-announcing the same warning when colors\n\t// recompute without changing the outcome.\n\tconst speakMessage = warning?.speakMessage;\n\tuseEffect( () => {\n\t\tif ( speakMessage ) {\n\t\t\tspeak( speakMessage );\n\t\t}\n\t}, [ speakMessage ] );\n\n\treturn warning?.message;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useEffect, useLayoutEffect, useReducer } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { getBlockSelector } from '@wordpress/global-styles-engine';\nimport { speak } from '@wordpress/a11y';\nimport { getContrastWarning } from '../components/contrast-checker';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nfunction getComputedValue( node, property ) {\n\treturn node.ownerDocument.defaultView\n\t\t.getComputedStyle( node )\n\t\t.getPropertyValue( property );\n}\n\nfunction getBlockElementColors( blockEl, blockType ) {\n\tif ( ! blockEl || ! blockType ) {\n\t\treturn {};\n\t}\n\n\t// Get color-specific selectors.\n\tconst textSelector = getBlockSelector( blockType, 'color.text', {\n\t\tfallback: true,\n\t} );\n\tconst backgroundSelector = getBlockSelector(\n\t\tblockType,\n\t\t'color.background',\n\t\t{ fallback: true }\n\t);\n\n\t// Find target elements - querySelector handles all the complexity\n\tconst textElement = blockEl.querySelector( textSelector ) || blockEl;\n\tconst backgroundElement =\n\t\tblockEl.querySelector( backgroundSelector ) || blockEl;\n\tconst linkElement = blockEl.querySelector( 'a' );\n\n\t// Get computed colors from the appropriate elements\n\tconst textColor = getComputedValue( textElement, 'color' );\n\tconst linkColor =\n\t\tlinkElement && linkElement.textContent\n\t\t\t? getComputedValue( linkElement, 'color' )\n\t\t\t: undefined;\n\n\tlet backgroundColorNode = backgroundElement;\n\tlet backgroundColor = getComputedValue(\n\t\tbackgroundColorNode,\n\t\t'background-color'\n\t);\n\twhile (\n\t\tbackgroundColor === 'rgba(0, 0, 0, 0)' &&\n\t\tbackgroundColorNode.parentNode &&\n\t\tbackgroundColorNode.parentNode.nodeType ===\n\t\t\tbackgroundColorNode.parentNode.ELEMENT_NODE\n\t) {\n\t\tbackgroundColorNode = backgroundColorNode.parentNode;\n\t\tbackgroundColor = getComputedValue(\n\t\t\tbackgroundColorNode,\n\t\t\t'background-color'\n\t\t);\n\t}\n\n\treturn {\n\t\ttextColor,\n\t\tbackgroundColor,\n\t\tlinkColor,\n\t};\n}\n\nfunction reducer( prevColors, newColors ) {\n\tconst hasChanged = Object.keys( newColors ).some(\n\t\t( key ) => prevColors[ key ] !== newColors[ key ]\n\t);\n\n\t// Do not re-render if the colors have not changed.\n\treturn hasChanged ? newColors : prevColors;\n}\n\n/**\n * Returns a contrast warning message for a block's computed colors, or\n * `undefined` when contrast is sufficient or checking is disabled.\n *\n * Colors are read from the rendered block element so that inherited values\n * (e.g. from Global Styles or ancestor blocks) are taken into account.\n *\n * @param {Object} props\n * @param {string} props.clientId Block client ID.\n * @param {string} props.name Block name.\n * @param {boolean} [props.enabled] Whether contrast checking is active.\n * @param {boolean} [props.checkTextColor] Whether to evaluate the text/background pair.\n * @param {boolean} [props.checkLinkColor] Whether to evaluate the link/background pair.\n * @param {string} [props.messageOverride] Caller-provided copy used in place of the generic guidance.\n *\n * @return {?string} The warning message, if any.\n */\nexport default function useBlockColorContrastWarning( {\n\tclientId,\n\tname,\n\tenabled = true,\n\tcheckTextColor = true,\n\tcheckLinkColor = true,\n\tmessageOverride,\n} ) {\n\tconst blockEl = useBlockElement( clientId );\n\tconst [ colors, setColors ] = useReducer( reducer, {} );\n\n\tconst blockType = useSelect(\n\t\t( select ) => {\n\t\t\treturn name && enabled\n\t\t\t\t? select( blocksStore ).getBlockType( name )\n\t\t\t\t: undefined;\n\t\t},\n\t\t[ name, enabled ]\n\t);\n\n\t// There are so many things that can change the color of a block\n\t// So we perform this check on every render.\n\tuseLayoutEffect( () => {\n\t\tif ( ! enabled || ! blockEl || ! blockType ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Combine `useLayoutEffect` and two rAF calls to ensure that values are read\n\t\t// after the current paint but before the next paint.\n\t\twindow.requestAnimationFrame( () =>\n\t\t\twindow.requestAnimationFrame( () =>\n\t\t\t\tsetColors( getBlockElementColors( blockEl, blockType ) )\n\t\t\t)\n\t\t);\n\t} );\n\n\t// Runs in its own effect with dependencies so the observer is only\n\t// recreated when the block element or block type changes.\n\tuseLayoutEffect( () => {\n\t\tif ( ! enabled || ! blockEl || ! blockType ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new window.MutationObserver( () => {\n\t\t\tsetColors( getBlockElementColors( blockEl, blockType ) );\n\t\t} );\n\n\t\tobserver.observe( blockEl, {\n\t\t\tattributes: true,\n\t\t\tattributeFilter: [ 'class', 'style' ],\n\t\t\tsubtree: true,\n\t\t} );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ enabled, blockEl, blockType ] );\n\n\tconst warning = enabled\n\t\t? getContrastWarning( {\n\t\t\t\tbackgroundColor: colors.backgroundColor,\n\t\t\t\ttextColor: checkTextColor ? colors.textColor : undefined,\n\t\t\t\tlinkColor: checkLinkColor ? colors.linkColor : undefined,\n\t\t\t\tmessageOverride,\n\t\t\t\tenableAlphaChecker: true,\n\t\t\t} )\n\t\t: null;\n\n\t// The popover Notice that displays this warning is muted\n\t// (`spokenMessage={ null }`), so this hook is the single source of the\n\t// spoken announcement. Announce only when the warning message itself\n\t// appears or changes; keying off `speakMessage` rather than the raw\n\t// computed `colors` avoids re-announcing the same warning when colors\n\t// recompute without changing the outcome.\n\tconst speakMessage = warning?.speakMessage;\n\tuseEffect( () => {\n\t\tif ( speakMessage ) {\n\t\t\tspeak( speakMessage );\n\t\t}\n\t}, [ speakMessage ] );\n\n\treturn warning?.message;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["blocksStore"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/dimensions.jsx"],
4
- "sourcesContent": ["import clsx from 'clsx';\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tDimensionsPanel as StylesDimensionsPanel,\n\tuseHasDimensionsPanel,\n} from '../components/global-styles';\nimport { useResolvedStyle } from '../components/global-styles/inherited-value-context';\nimport { MarginVisualizer, PaddingVisualizer } from './spacing-visualizer';\nimport { store as blockEditorStore } from '../store';\nimport { unlock } from '../lock-unlock';\nimport { cleanEmptyObject, shouldSkipSerialization } from './utils';\nimport {\n\tgetStyleForState,\n\tisDefaultBlockStyleState,\n\tsetStyleForState,\n\tuseBlockStyleState,\n} from './block-style-state';\nimport { isAxialBlockGapAllowed } from './gap';\n\nexport const DIMENSIONS_SUPPORT_KEY = 'dimensions';\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\nfunction useVisualizer() {\n\tconst [ property, setProperty ] = useState( false );\n\tconst { hideBlockInterface, showBlockInterface } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tuseEffect( () => {\n\t\tif ( ! property ) {\n\t\t\tshowBlockInterface();\n\t\t} else {\n\t\t\thideBlockInterface();\n\t\t}\n\t}, [ property, showBlockInterface, hideBlockInterface ] );\n\n\treturn [ property, setProperty ];\n}\n\nfunction DimensionsInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributes.style;\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\tstyle: updatedStyle,\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"dimensions\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function DimensionsPanel( { clientId, name, setAttributes, settings } ) {\n\tconst selectedState = useBlockStyleState();\n\tconst isStateSelected = ! isDefaultBlockStyleState( selectedState );\n\tconst isEnabled = useHasDimensionsPanel( settings, selectedState );\n\tconst { style, className, layout } = useSelect(\n\t\t( select ) => {\n\t\t\t// Early return to avoid subscription when disabled\n\t\t\tif ( ! isEnabled ) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\tconst attributes =\n\t\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\t\treturn {\n\t\t\t\tstyle: attributes.style,\n\t\t\t\tclassName: attributes.className,\n\t\t\t\tlayout: attributes.layout,\n\t\t\t};\n\t\t},\n\t\t[ clientId, isEnabled ]\n\t);\n\n\tconst { value: inheritedValue } = useResolvedStyle(\n\t\tname,\n\t\tclassName,\n\t\tselectedState\n\t);\n\n\tconst [ visualizedProperty, setVisualizedProperty ] = useVisualizer();\n\tconst value = isStateSelected\n\t\t? getStyleForState( style, selectedState )\n\t\t: style;\n\tconst onChange = isStateSelected\n\t\t? ( newStyle ) => {\n\t\t\t\tsetAttributes( {\n\t\t\t\t\tstyle: setStyleForState( style, selectedState, newStyle ),\n\t\t\t\t} );\n\t\t }\n\t\t: ( newStyle ) => {\n\t\t\t\tsetAttributes( {\n\t\t\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t\t\t} );\n\t\t };\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultDimensionsControls = getBlockSupport( name, [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultSpacingControls = getBlockSupport( name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst { default: defaultLayout } = getBlockSupport( name, 'layout' ) || {};\n\tconst defaultControls = {\n\t\t// In the block inspector, minHeight and minWidth should not\n\t\t// be shown by default unless the block explicitly opts in.\n\t\tminHeight: false,\n\t\tminWidth: false,\n\t\t...defaultDimensionsControls,\n\t\t...defaultSpacingControls,\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<StylesDimensionsPanel\n\t\t\t\tas={ DimensionsInspectorControl }\n\t\t\t\tpanelId={ clientId }\n\t\t\t\tsettings={ settings }\n\t\t\t\tallowAxialBlockGap={ isAxialBlockGapAllowed(\n\t\t\t\t\tlayout,\n\t\t\t\t\tdefaultLayout\n\t\t\t\t) }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tdefaultControls={ defaultControls }\n\t\t\t\tstyleState={ selectedState }\n\t\t\t\tonVisualize={\n\t\t\t\t\tisStateSelected ? undefined : setVisualizedProperty\n\t\t\t\t}\n\t\t\t\tinheritedValue={ inheritedValue }\n\t\t\t/>\n\t\t\t{ ! isStateSelected &&\n\t\t\t\t!! settings?.spacing?.padding &&\n\t\t\t\tvisualizedProperty === 'padding' && (\n\t\t\t\t\t<PaddingVisualizer\n\t\t\t\t\t\tforceShow={ visualizedProperty === 'padding' }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t{ ! isStateSelected &&\n\t\t\t\t!! settings?.spacing?.margin &&\n\t\t\t\tvisualizedProperty === 'margin' && (\n\t\t\t\t\t<MarginVisualizer\n\t\t\t\t\t\tforceShow={ visualizedProperty === 'margin' }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n\n/**\n * Determine whether there is block support for dimensions.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, DIMENSIONS_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.aspectRatio ||\n\t\t\t!! support?.height ||\n\t\t\t!! support?.minHeight ||\n\t\t\t!! support?.width ||\n\t\t\t!! support?.minWidth\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport function isExplicitAspectRatio( aspectRatio ) {\n\tif ( ! aspectRatio ) {\n\t\treturn false;\n\t}\n\n\treturn `${ aspectRatio }`.trim().toLowerCase() !== 'auto';\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'height', 'minHeight', 'width', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasDimensionsSupport( name );\n\t},\n};\n\nfunction useBlockProps( { name, height, minHeight, style } ) {\n\tif (\n\t\t! hasDimensionsSupport( name, 'aspectRatio' ) ||\n\t\tshouldSkipSerialization( name, DIMENSIONS_SUPPORT_KEY, 'aspectRatio' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst hasExplicitAspectRatio = isExplicitAspectRatio(\n\t\tstyle?.dimensions?.aspectRatio\n\t);\n\tconst className = clsx( {\n\t\t'has-aspect-ratio': hasExplicitAspectRatio,\n\t} );\n\n\t// Allow dimensions-based inline style overrides to override any global styles rules that\n\t// might be set for the block, and therefore affect the display of the aspect ratio.\n\tconst inlineStyleOverrides = {};\n\n\t// Apply rules to unset incompatible styles.\n\t// Note that an explicit `aspectRatio` will win out if both an aspect ratio and height-related properties are set.\n\t// This is because the aspect ratio is a newer block support, so (in theory) any aspect ratio\n\t// that is set should be intentional and should override any existing height properties. The Cover block\n\t// and dimensions controls have logic that will manually clear the aspect ratio if height properties\n\t// are set.\n\tif ( hasExplicitAspectRatio ) {\n\t\t// To ensure the aspect ratio does not get overridden by `minHeight` or `height` unset any existing rule.\n\t\tinlineStyleOverrides.minHeight = 'unset';\n\t\tinlineStyleOverrides.height = 'unset';\n\t} else if (\n\t\tminHeight ||\n\t\tstyle?.dimensions?.minHeight ||\n\t\theight ||\n\t\tstyle?.dimensions?.height\n\t) {\n\t\t// To ensure height properties do not get overridden by `aspectRatio` unset any existing rule.\n\t\tinlineStyleOverrides.aspectRatio = 'unset';\n\t}\n\n\treturn { className, style: inlineStyleOverrides };\n}\n\n/**\n * @deprecated\n */\nexport function useCustomSides() {\n\tdeprecated( 'wp.blockEditor.__experimentalUseCustomSides', {\n\t\tsince: '6.3',\n\t\tversion: '6.4',\n\t} );\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import clsx from 'clsx';\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tDimensionsPanel as StylesDimensionsPanel,\n\tuseHasDimensionsPanel,\n} from '../components/global-styles';\nimport { useResolvedStyle } from '../components/global-styles/inherited-value-context';\nimport { MarginVisualizer, PaddingVisualizer } from './spacing-visualizer';\nimport { store as blockEditorStore } from '../store';\nimport { unlock } from '../lock-unlock';\nimport { cleanEmptyObject, shouldSkipSerialization } from './utils';\nimport {\n\tgetStyleForState,\n\tisDefaultBlockStyleState,\n\tsetStyleForState,\n\tuseBlockStyleState,\n} from './block-style-state';\nimport { isAxialBlockGapAllowed } from './gap';\n\nexport const DIMENSIONS_SUPPORT_KEY = 'dimensions';\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\nfunction useVisualizer() {\n\tconst [ property, setProperty ] = useState( false );\n\tconst { hideBlockInterface, showBlockInterface } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tuseEffect( () => {\n\t\tif ( ! property ) {\n\t\t\tshowBlockInterface();\n\t\t} else {\n\t\t\thideBlockInterface();\n\t\t}\n\t}, [ property, showBlockInterface, hideBlockInterface ] );\n\n\treturn [ property, setProperty ];\n}\n\nfunction DimensionsInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributes.style;\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\tstyle: updatedStyle,\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"dimensions\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function DimensionsPanel( { clientId, name, setAttributes, settings } ) {\n\tconst selectedState = useBlockStyleState();\n\tconst isStateSelected = ! isDefaultBlockStyleState( selectedState );\n\tconst isEnabled = useHasDimensionsPanel( settings, selectedState );\n\tconst { style, className, layout } = useSelect(\n\t\t( select ) => {\n\t\t\t// Early return to avoid subscription when disabled\n\t\t\tif ( ! isEnabled ) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\tconst attributes =\n\t\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\t\treturn {\n\t\t\t\tstyle: attributes.style,\n\t\t\t\tclassName: attributes.className,\n\t\t\t\tlayout: attributes.layout,\n\t\t\t};\n\t\t},\n\t\t[ clientId, isEnabled ]\n\t);\n\n\tconst { value: inheritedValue } = useResolvedStyle(\n\t\tname,\n\t\tclassName,\n\t\tselectedState\n\t);\n\n\tconst [ visualizedProperty, setVisualizedProperty ] = useVisualizer();\n\tconst value = isStateSelected\n\t\t? getStyleForState( style, selectedState )\n\t\t: style;\n\tconst onChange = isStateSelected\n\t\t? ( newStyle ) => {\n\t\t\t\tsetAttributes( {\n\t\t\t\t\tstyle: setStyleForState( style, selectedState, newStyle ),\n\t\t\t\t} );\n\t\t\t}\n\t\t: ( newStyle ) => {\n\t\t\t\tsetAttributes( {\n\t\t\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t\t\t} );\n\t\t\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultDimensionsControls = getBlockSupport( name, [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultSpacingControls = getBlockSupport( name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst { default: defaultLayout } = getBlockSupport( name, 'layout' ) || {};\n\tconst defaultControls = {\n\t\t// In the block inspector, minHeight and minWidth should not\n\t\t// be shown by default unless the block explicitly opts in.\n\t\tminHeight: false,\n\t\tminWidth: false,\n\t\t...defaultDimensionsControls,\n\t\t...defaultSpacingControls,\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<StylesDimensionsPanel\n\t\t\t\tas={ DimensionsInspectorControl }\n\t\t\t\tpanelId={ clientId }\n\t\t\t\tsettings={ settings }\n\t\t\t\tallowAxialBlockGap={ isAxialBlockGapAllowed(\n\t\t\t\t\tlayout,\n\t\t\t\t\tdefaultLayout\n\t\t\t\t) }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tdefaultControls={ defaultControls }\n\t\t\t\tstyleState={ selectedState }\n\t\t\t\tonVisualize={\n\t\t\t\t\tisStateSelected ? undefined : setVisualizedProperty\n\t\t\t\t}\n\t\t\t\tinheritedValue={ inheritedValue }\n\t\t\t/>\n\t\t\t{ ! isStateSelected &&\n\t\t\t\t!! settings?.spacing?.padding &&\n\t\t\t\tvisualizedProperty === 'padding' && (\n\t\t\t\t\t<PaddingVisualizer\n\t\t\t\t\t\tforceShow={ visualizedProperty === 'padding' }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t{ ! isStateSelected &&\n\t\t\t\t!! settings?.spacing?.margin &&\n\t\t\t\tvisualizedProperty === 'margin' && (\n\t\t\t\t\t<MarginVisualizer\n\t\t\t\t\t\tforceShow={ visualizedProperty === 'margin' }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n\n/**\n * Determine whether there is block support for dimensions.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, DIMENSIONS_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.aspectRatio ||\n\t\t\t!! support?.height ||\n\t\t\t!! support?.minHeight ||\n\t\t\t!! support?.width ||\n\t\t\t!! support?.minWidth\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport function isExplicitAspectRatio( aspectRatio ) {\n\tif ( ! aspectRatio ) {\n\t\treturn false;\n\t}\n\n\treturn `${ aspectRatio }`.trim().toLowerCase() !== 'auto';\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'height', 'minHeight', 'width', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasDimensionsSupport( name );\n\t},\n};\n\nfunction useBlockProps( { name, height, minHeight, style } ) {\n\tif (\n\t\t! hasDimensionsSupport( name, 'aspectRatio' ) ||\n\t\tshouldSkipSerialization( name, DIMENSIONS_SUPPORT_KEY, 'aspectRatio' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst hasExplicitAspectRatio = isExplicitAspectRatio(\n\t\tstyle?.dimensions?.aspectRatio\n\t);\n\tconst className = clsx( {\n\t\t'has-aspect-ratio': hasExplicitAspectRatio,\n\t} );\n\n\t// Allow dimensions-based inline style overrides to override any global styles rules that\n\t// might be set for the block, and therefore affect the display of the aspect ratio.\n\tconst inlineStyleOverrides = {};\n\n\t// Apply rules to unset incompatible styles.\n\t// Note that an explicit `aspectRatio` will win out if both an aspect ratio and height-related properties are set.\n\t// This is because the aspect ratio is a newer block support, so (in theory) any aspect ratio\n\t// that is set should be intentional and should override any existing height properties. The Cover block\n\t// and dimensions controls have logic that will manually clear the aspect ratio if height properties\n\t// are set.\n\tif ( hasExplicitAspectRatio ) {\n\t\t// To ensure the aspect ratio does not get overridden by `minHeight` or `height` unset any existing rule.\n\t\tinlineStyleOverrides.minHeight = 'unset';\n\t\tinlineStyleOverrides.height = 'unset';\n\t} else if (\n\t\tminHeight ||\n\t\tstyle?.dimensions?.minHeight ||\n\t\theight ||\n\t\tstyle?.dimensions?.height\n\t) {\n\t\t// To ensure height properties do not get overridden by `aspectRatio` unset any existing rule.\n\t\tinlineStyleOverrides.aspectRatio = 'unset';\n\t}\n\n\treturn { className, style: inlineStyleOverrides };\n}\n\n/**\n * @deprecated\n */\nexport function useCustomSides() {\n\tdeprecated( 'wp.blockEditor.__experimentalUseCustomSides', {\n\t\tsince: '6.3',\n\t\tversion: '6.4',\n\t} );\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["blockEditorStore", "InspectorControls", "StylesDimensionsPanel", "clsx", "deprecated"]
7
7
  }