@wordpress/block-editor 12.5.0 → 12.7.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 (442) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +2 -6
  3. package/build/autocompleters/block.js +6 -2
  4. package/build/autocompleters/block.js.map +1 -1
  5. package/build/components/block-draggable/index.js +6 -3
  6. package/build/components/block-draggable/index.js.map +1 -1
  7. package/build/components/block-draggable/index.native.js +2 -2
  8. package/build/components/block-draggable/index.native.js.map +1 -1
  9. package/build/components/block-edit/edit.js +25 -13
  10. package/build/components/block-edit/edit.js.map +1 -1
  11. package/build/components/block-editing-mode/index.js +1 -1
  12. package/build/components/block-editing-mode/index.js.map +1 -1
  13. package/build/components/block-list/block-outline.native.js +14 -18
  14. package/build/components/block-list/block-outline.native.js.map +1 -1
  15. package/build/components/block-list/block.js +4 -2
  16. package/build/components/block-list/block.js.map +1 -1
  17. package/build/components/block-list/block.native.js +21 -42
  18. package/build/components/block-list/block.native.js.map +1 -1
  19. package/build/components/block-list/index.js +2 -4
  20. package/build/components/block-list/index.js.map +1 -1
  21. package/build/components/block-mover/index.native.js +1 -1
  22. package/build/components/block-mover/index.native.js.map +1 -1
  23. package/build/components/block-parent-selector/index.js +6 -21
  24. package/build/components/block-parent-selector/index.js.map +1 -1
  25. package/build/components/block-preview/auto.js +6 -1
  26. package/build/components/block-preview/auto.js.map +1 -1
  27. package/build/components/block-removal-warning-modal/index.js +1 -4
  28. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  29. package/build/components/block-settings/button.native.js +2 -2
  30. package/build/components/block-settings/button.native.js.map +1 -1
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +3 -17
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +7 -5
  34. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -0
  35. package/build/components/block-toolbar/index.js +4 -33
  36. package/build/components/block-toolbar/index.js.map +1 -1
  37. package/build/components/block-toolbar/index.native.js +62 -3
  38. package/build/components/block-toolbar/index.native.js.map +1 -1
  39. package/build/components/block-toolbar/utils.js +56 -51
  40. package/build/components/block-toolbar/utils.js.map +1 -1
  41. package/build/components/block-tools/block-contextual-toolbar.js +4 -2
  42. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  43. package/build/components/block-variation-picker/index.native.js +10 -20
  44. package/build/components/block-variation-picker/index.native.js.map +1 -1
  45. package/build/components/colors-gradients/control.js +4 -2
  46. package/build/components/colors-gradients/control.js.map +1 -1
  47. package/build/components/editor-styles/index.js +2 -2
  48. package/build/components/editor-styles/index.js.map +1 -1
  49. package/build/components/font-sizes/fluid-utils.js +11 -11
  50. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  51. package/build/components/global-styles/behaviors-panel.js +66 -0
  52. package/build/components/global-styles/behaviors-panel.js.map +1 -0
  53. package/build/components/global-styles/color-panel.js +21 -15
  54. package/build/components/global-styles/color-panel.js.map +1 -1
  55. package/build/components/global-styles/dimensions-panel.js +13 -2
  56. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  57. package/build/components/global-styles/get-block-css-selector.js +4 -8
  58. package/build/components/global-styles/get-block-css-selector.js.map +1 -1
  59. package/build/components/global-styles/hooks.js +131 -27
  60. package/build/components/global-styles/hooks.js.map +1 -1
  61. package/build/components/global-styles/index.js +20 -0
  62. package/build/components/global-styles/index.js.map +1 -1
  63. package/build/components/global-styles/typography-panel.js +18 -3
  64. package/build/components/global-styles/typography-panel.js.map +1 -1
  65. package/build/components/global-styles/typography-utils.js +4 -4
  66. package/build/components/global-styles/typography-utils.js.map +1 -1
  67. package/build/components/global-styles/use-global-styles-output.js +12 -18
  68. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  69. package/build/components/global-styles/utils.js +7 -7
  70. package/build/components/global-styles/utils.js.map +1 -1
  71. package/build/components/iframe/index.js +36 -48
  72. package/build/components/iframe/index.js.map +1 -1
  73. package/build/components/iframe/use-compatibility-styles.js +5 -0
  74. package/build/components/iframe/use-compatibility-styles.js.map +1 -1
  75. package/build/components/index.js +1 -10
  76. package/build/components/index.js.map +1 -1
  77. package/build/components/inner-blocks/index.js +3 -1
  78. package/build/components/inner-blocks/index.js.map +1 -1
  79. package/build/components/inner-blocks/index.native.js +3 -1
  80. package/build/components/inner-blocks/index.native.js.map +1 -1
  81. package/build/components/inner-blocks/use-nested-settings-update.js +33 -7
  82. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  83. package/build/components/inserter/hooks/use-block-types-state.js +6 -2
  84. package/build/components/inserter/hooks/use-block-types-state.js.map +1 -1
  85. package/build/components/inserter/hooks/use-debounced-input.js +5 -7
  86. package/build/components/inserter/hooks/use-debounced-input.js.map +1 -1
  87. package/build/components/inserter/hooks/use-patterns-state.js +3 -2
  88. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  89. package/build/components/inserter/index.js +2 -4
  90. package/build/components/inserter/index.js.map +1 -1
  91. package/build/components/inserter/index.native.js +21 -32
  92. package/build/components/inserter/index.native.js.map +1 -1
  93. package/build/components/inserter/reusable-block-rename-hint.js +23 -3
  94. package/build/components/inserter/reusable-block-rename-hint.js.map +1 -1
  95. package/build/components/inserter/reusable-blocks-tab.js +3 -2
  96. package/build/components/inserter/reusable-blocks-tab.js.map +1 -1
  97. package/build/components/inserter-list-item/index.js +1 -1
  98. package/build/components/inserter-list-item/index.js.map +1 -1
  99. package/build/components/link-control/index.js +51 -7
  100. package/build/components/link-control/index.js.map +1 -1
  101. package/build/components/link-control/link-preview.js +3 -3
  102. package/build/components/link-control/link-preview.js.map +1 -1
  103. package/build/components/link-control/search-item.js +1 -1
  104. package/build/components/link-control/search-item.js.map +1 -1
  105. package/build/components/list-view/use-list-view-client-ids.js +2 -2
  106. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  107. package/build/components/list-view/use-list-view-drop-zone.js +6 -1
  108. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  109. package/build/components/media-placeholder/index.native.js +65 -31
  110. package/build/components/media-placeholder/index.native.js.map +1 -1
  111. package/build/components/media-replace-flow/index.native.js +15 -3
  112. package/build/components/media-replace-flow/index.native.js.map +1 -1
  113. package/build/components/preview-options/index.js +2 -2
  114. package/build/components/preview-options/index.js.map +1 -1
  115. package/build/components/rich-text/content.js +0 -36
  116. package/build/components/rich-text/content.js.map +1 -1
  117. package/build/components/rich-text/format-edit.js +57 -28
  118. package/build/components/rich-text/format-edit.js.map +1 -1
  119. package/build/components/rich-text/get-rich-text-values.js +111 -0
  120. package/build/components/rich-text/get-rich-text-values.js.map +1 -0
  121. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  122. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  123. package/build/components/spacing-sizes-control/input-controls/axial.js +6 -2
  124. package/build/components/spacing-sizes-control/input-controls/axial.js.map +1 -1
  125. package/build/components/spacing-sizes-control/input-controls/separated.js +5 -1
  126. package/build/components/spacing-sizes-control/input-controls/separated.js.map +1 -1
  127. package/build/components/spacing-sizes-control/input-controls/single.js +5 -1
  128. package/build/components/spacing-sizes-control/input-controls/single.js.map +1 -1
  129. package/build/components/spacing-sizes-control/utils.js +2 -2
  130. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  131. package/build/components/use-block-display-information/index.js +7 -3
  132. package/build/components/use-block-display-information/index.js.map +1 -1
  133. package/build/components/use-block-drop-zone/index.native.js +49 -8
  134. package/build/components/use-block-drop-zone/index.native.js.map +1 -1
  135. package/build/components/use-setting/index.js +5 -9
  136. package/build/components/use-setting/index.js.map +1 -1
  137. package/build/hooks/behaviors.js +5 -12
  138. package/build/hooks/behaviors.js.map +1 -1
  139. package/build/hooks/border.js +2 -1
  140. package/build/hooks/border.js.map +1 -1
  141. package/build/hooks/margin.js +1 -1
  142. package/build/hooks/margin.js.map +1 -1
  143. package/build/hooks/padding.js +1 -1
  144. package/build/hooks/padding.js.map +1 -1
  145. package/build/hooks/style.js +11 -2
  146. package/build/hooks/style.js.map +1 -1
  147. package/build/hooks/utils.js +1 -7
  148. package/build/hooks/utils.js.map +1 -1
  149. package/build/private-apis.js +10 -3
  150. package/build/private-apis.js.map +1 -1
  151. package/build/store/actions.js +3 -4
  152. package/build/store/actions.js.map +1 -1
  153. package/build/store/private-selectors.js +5 -6
  154. package/build/store/private-selectors.js.map +1 -1
  155. package/build/store/reducer.js +0 -1
  156. package/build/store/reducer.js.map +1 -1
  157. package/build/store/selectors.js +23 -79
  158. package/build/store/selectors.js.map +1 -1
  159. package/build/utils/object.js +38 -2
  160. package/build/utils/object.js.map +1 -1
  161. package/build-module/autocompleters/block.js +7 -3
  162. package/build-module/autocompleters/block.js.map +1 -1
  163. package/build-module/components/block-draggable/index.js +6 -3
  164. package/build-module/components/block-draggable/index.js.map +1 -1
  165. package/build-module/components/block-draggable/index.native.js +2 -2
  166. package/build-module/components/block-draggable/index.native.js.map +1 -1
  167. package/build-module/components/block-edit/edit.js +27 -10
  168. package/build-module/components/block-edit/edit.js.map +1 -1
  169. package/build-module/components/block-editing-mode/index.js +1 -1
  170. package/build-module/components/block-editing-mode/index.js.map +1 -1
  171. package/build-module/components/block-list/block-outline.native.js +14 -18
  172. package/build-module/components/block-list/block-outline.native.js.map +1 -1
  173. package/build-module/components/block-list/block.js +4 -2
  174. package/build-module/components/block-list/block.js.map +1 -1
  175. package/build-module/components/block-list/block.native.js +24 -43
  176. package/build-module/components/block-list/block.native.js.map +1 -1
  177. package/build-module/components/block-list/index.js +2 -3
  178. package/build-module/components/block-list/index.js.map +1 -1
  179. package/build-module/components/block-mover/index.native.js +3 -3
  180. package/build-module/components/block-mover/index.native.js.map +1 -1
  181. package/build-module/components/block-parent-selector/index.js +7 -22
  182. package/build-module/components/block-parent-selector/index.js.map +1 -1
  183. package/build-module/components/block-preview/auto.js +6 -1
  184. package/build-module/components/block-preview/auto.js.map +1 -1
  185. package/build-module/components/block-removal-warning-modal/index.js +1 -4
  186. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  187. package/build-module/components/block-settings/button.native.js +3 -3
  188. package/build-module/components/block-settings/button.native.js.map +1 -1
  189. package/build-module/components/block-settings-menu/block-settings-dropdown.js +4 -18
  190. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  191. package/build-module/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +9 -7
  192. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -0
  193. package/build-module/components/block-toolbar/index.js +6 -35
  194. package/build-module/components/block-toolbar/index.js.map +1 -1
  195. package/build-module/components/block-toolbar/index.native.js +60 -4
  196. package/build-module/components/block-toolbar/index.native.js.map +1 -1
  197. package/build-module/components/block-toolbar/utils.js +54 -49
  198. package/build-module/components/block-toolbar/utils.js.map +1 -1
  199. package/build-module/components/block-tools/block-contextual-toolbar.js +4 -2
  200. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  201. package/build-module/components/block-variation-picker/index.native.js +13 -23
  202. package/build-module/components/block-variation-picker/index.native.js.map +1 -1
  203. package/build-module/components/colors-gradients/control.js +3 -2
  204. package/build-module/components/colors-gradients/control.js.map +1 -1
  205. package/build-module/components/editor-styles/index.js +2 -2
  206. package/build-module/components/editor-styles/index.js.map +1 -1
  207. package/build-module/components/font-sizes/fluid-utils.js +11 -11
  208. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  209. package/build-module/components/global-styles/behaviors-panel.js +57 -0
  210. package/build-module/components/global-styles/behaviors-panel.js.map +1 -0
  211. package/build-module/components/global-styles/color-panel.js +21 -15
  212. package/build-module/components/global-styles/color-panel.js.map +1 -1
  213. package/build-module/components/global-styles/dimensions-panel.js +13 -2
  214. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  215. package/build-module/components/global-styles/get-block-css-selector.js +4 -8
  216. package/build-module/components/global-styles/get-block-css-selector.js.map +1 -1
  217. package/build-module/components/global-styles/hooks.js +127 -27
  218. package/build-module/components/global-styles/hooks.js.map +1 -1
  219. package/build-module/components/global-styles/index.js +2 -1
  220. package/build-module/components/global-styles/index.js.map +1 -1
  221. package/build-module/components/global-styles/typography-panel.js +18 -3
  222. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  223. package/build-module/components/global-styles/typography-utils.js +4 -4
  224. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  225. package/build-module/components/global-styles/use-global-styles-output.js +13 -18
  226. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  227. package/build-module/components/global-styles/utils.js +6 -6
  228. package/build-module/components/global-styles/utils.js.map +1 -1
  229. package/build-module/components/iframe/index.js +37 -49
  230. package/build-module/components/iframe/index.js.map +1 -1
  231. package/build-module/components/iframe/use-compatibility-styles.js +5 -0
  232. package/build-module/components/iframe/use-compatibility-styles.js.map +1 -1
  233. package/build-module/components/index.js +0 -5
  234. package/build-module/components/index.js.map +1 -1
  235. package/build-module/components/inner-blocks/index.js +3 -1
  236. package/build-module/components/inner-blocks/index.js.map +1 -1
  237. package/build-module/components/inner-blocks/index.native.js +3 -1
  238. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  239. package/build-module/components/inner-blocks/use-nested-settings-update.js +30 -7
  240. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  241. package/build-module/components/inserter/hooks/use-block-types-state.js +7 -3
  242. package/build-module/components/inserter/hooks/use-block-types-state.js.map +1 -1
  243. package/build-module/components/inserter/hooks/use-debounced-input.js +5 -7
  244. package/build-module/components/inserter/hooks/use-debounced-input.js.map +1 -1
  245. package/build-module/components/inserter/hooks/use-patterns-state.js +3 -2
  246. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  247. package/build-module/components/inserter/index.js +2 -4
  248. package/build-module/components/inserter/index.js.map +1 -1
  249. package/build-module/components/inserter/index.native.js +22 -33
  250. package/build-module/components/inserter/index.native.js.map +1 -1
  251. package/build-module/components/inserter/reusable-block-rename-hint.js +22 -3
  252. package/build-module/components/inserter/reusable-block-rename-hint.js.map +1 -1
  253. package/build-module/components/inserter/reusable-blocks-tab.js +3 -2
  254. package/build-module/components/inserter/reusable-blocks-tab.js.map +1 -1
  255. package/build-module/components/inserter-list-item/index.js +1 -1
  256. package/build-module/components/inserter-list-item/index.js.map +1 -1
  257. package/build-module/components/link-control/index.js +49 -7
  258. package/build-module/components/link-control/index.js.map +1 -1
  259. package/build-module/components/link-control/link-preview.js +3 -3
  260. package/build-module/components/link-control/link-preview.js.map +1 -1
  261. package/build-module/components/link-control/search-item.js +1 -1
  262. package/build-module/components/link-control/search-item.js.map +1 -1
  263. package/build-module/components/list-view/use-list-view-client-ids.js +2 -2
  264. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  265. package/build-module/components/list-view/use-list-view-drop-zone.js +6 -1
  266. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  267. package/build-module/components/media-placeholder/index.native.js +66 -33
  268. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  269. package/build-module/components/media-replace-flow/index.native.js +15 -3
  270. package/build-module/components/media-replace-flow/index.native.js.map +1 -1
  271. package/build-module/components/preview-options/index.js +2 -2
  272. package/build-module/components/preview-options/index.js.map +1 -1
  273. package/build-module/components/rich-text/content.js +1 -36
  274. package/build-module/components/rich-text/content.js.map +1 -1
  275. package/build-module/components/rich-text/format-edit.js +51 -26
  276. package/build-module/components/rich-text/format-edit.js.map +1 -1
  277. package/build-module/components/rich-text/get-rich-text-values.js +100 -0
  278. package/build-module/components/rich-text/get-rich-text-values.js.map +1 -0
  279. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  280. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  281. package/build-module/components/spacing-sizes-control/input-controls/axial.js +7 -3
  282. package/build-module/components/spacing-sizes-control/input-controls/axial.js.map +1 -1
  283. package/build-module/components/spacing-sizes-control/input-controls/separated.js +6 -2
  284. package/build-module/components/spacing-sizes-control/input-controls/separated.js.map +1 -1
  285. package/build-module/components/spacing-sizes-control/input-controls/single.js +6 -2
  286. package/build-module/components/spacing-sizes-control/input-controls/single.js.map +1 -1
  287. package/build-module/components/spacing-sizes-control/utils.js +2 -2
  288. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  289. package/build-module/components/use-block-display-information/index.js +7 -3
  290. package/build-module/components/use-block-display-information/index.js.map +1 -1
  291. package/build-module/components/use-block-drop-zone/index.native.js +50 -8
  292. package/build-module/components/use-block-drop-zone/index.native.js.map +1 -1
  293. package/build-module/components/use-setting/index.js +5 -9
  294. package/build-module/components/use-setting/index.js.map +1 -1
  295. package/build-module/hooks/behaviors.js +5 -12
  296. package/build-module/hooks/behaviors.js.map +1 -1
  297. package/build-module/hooks/border.js +2 -1
  298. package/build-module/hooks/border.js.map +1 -1
  299. package/build-module/hooks/margin.js +1 -1
  300. package/build-module/hooks/margin.js.map +1 -1
  301. package/build-module/hooks/padding.js +1 -1
  302. package/build-module/hooks/padding.js.map +1 -1
  303. package/build-module/hooks/style.js +11 -2
  304. package/build-module/hooks/style.js.map +1 -1
  305. package/build-module/hooks/utils.js +2 -7
  306. package/build-module/hooks/utils.js.map +1 -1
  307. package/build-module/private-apis.js +7 -2
  308. package/build-module/private-apis.js.map +1 -1
  309. package/build-module/store/actions.js +4 -5
  310. package/build-module/store/actions.js.map +1 -1
  311. package/build-module/store/private-selectors.js +3 -3
  312. package/build-module/store/private-selectors.js.map +1 -1
  313. package/build-module/store/reducer.js +0 -1
  314. package/build-module/store/reducer.js.map +1 -1
  315. package/build-module/store/selectors.js +20 -75
  316. package/build-module/store/selectors.js.map +1 -1
  317. package/build-module/utils/object.js +34 -2
  318. package/build-module/utils/object.js.map +1 -1
  319. package/build-style/content-rtl.css +2 -1
  320. package/build-style/content.css +2 -1
  321. package/build-style/style-rtl.css +25 -6
  322. package/build-style/style.css +25 -6
  323. package/package.json +32 -32
  324. package/src/autocompleters/block.js +21 -6
  325. package/src/components/block-controls/README.md +89 -0
  326. package/src/components/block-draggable/index.js +13 -4
  327. package/src/components/block-draggable/index.native.js +7 -3
  328. package/src/components/block-draggable/test/index.native.js +2 -57
  329. package/src/components/block-edit/edit.js +26 -9
  330. package/src/components/block-edit/test/edit.js +1 -1
  331. package/src/components/block-editing-mode/index.js +1 -1
  332. package/src/components/block-list/block-outline.native.js +26 -25
  333. package/src/components/block-list/block.js +6 -1
  334. package/src/components/block-list/block.native.js +24 -38
  335. package/src/components/block-list/block.native.scss +18 -40
  336. package/src/components/block-list/index.js +3 -6
  337. package/src/components/block-list/style.native.scss +3 -3
  338. package/src/components/block-list/test/block-invalid-warning.native.js +8 -1
  339. package/src/components/block-mover/index.native.js +3 -3
  340. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +40 -6
  341. package/src/components/block-parent-selector/index.js +30 -42
  342. package/src/components/block-preview/auto.js +8 -1
  343. package/src/components/block-preview/style.scss +2 -1
  344. package/src/components/block-removal-warning-modal/index.js +0 -3
  345. package/src/components/block-settings/button.native.js +12 -6
  346. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -13
  347. package/src/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +15 -10
  348. package/src/components/block-toolbar/index.js +36 -64
  349. package/src/components/block-toolbar/index.native.js +86 -6
  350. package/src/components/{block-mobile-toolbar/test/block-actions-menu.native.js → block-toolbar/test/block-toolbar-menu.native.js} +20 -54
  351. package/src/components/block-toolbar/test/index.native.js +42 -0
  352. package/src/components/block-toolbar/utils.js +57 -45
  353. package/src/components/block-tools/block-contextual-toolbar.js +43 -35
  354. package/src/components/block-tools/style.scss +17 -5
  355. package/src/components/block-variation-picker/index.native.js +52 -72
  356. package/src/components/button-block-appender/styles.native.scss +2 -2
  357. package/src/components/caption/README.md +49 -0
  358. package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
  359. package/src/components/colors-gradients/control.js +3 -2
  360. package/src/components/editor-styles/index.js +2 -2
  361. package/src/components/font-sizes/fluid-utils.js +17 -17
  362. package/src/components/font-sizes/test/fluid-utils.js +6 -6
  363. package/src/components/global-styles/behaviors-panel.js +71 -0
  364. package/src/components/global-styles/color-panel.js +23 -16
  365. package/src/components/global-styles/dimensions-panel.js +8 -2
  366. package/src/components/global-styles/get-block-css-selector.js +5 -9
  367. package/src/components/global-styles/hooks.js +134 -31
  368. package/src/components/global-styles/index.js +3 -0
  369. package/src/components/global-styles/test/typography-utils.js +6 -6
  370. package/src/components/global-styles/typography-panel.js +17 -5
  371. package/src/components/global-styles/typography-utils.js +4 -4
  372. package/src/components/global-styles/use-global-styles-output.js +36 -18
  373. package/src/components/global-styles/utils.js +17 -7
  374. package/src/components/iframe/index.js +30 -56
  375. package/src/components/iframe/use-compatibility-styles.js +5 -0
  376. package/src/components/index.js +0 -5
  377. package/src/components/inner-blocks/README.md +10 -0
  378. package/src/components/inner-blocks/index.js +4 -0
  379. package/src/components/inner-blocks/index.native.js +4 -0
  380. package/src/components/inner-blocks/use-nested-settings-update.js +32 -5
  381. package/src/components/inserter/hooks/use-block-types-state.js +15 -6
  382. package/src/components/inserter/hooks/use-debounced-input.js +8 -7
  383. package/src/components/inserter/hooks/use-patterns-state.js +2 -1
  384. package/src/components/inserter/index.js +2 -3
  385. package/src/components/inserter/index.native.js +17 -36
  386. package/src/components/inserter/reusable-block-rename-hint.js +18 -1
  387. package/src/components/inserter/reusable-blocks-tab.js +4 -1
  388. package/src/components/inserter/style.native.scss +10 -15
  389. package/src/components/inserter-list-item/index.js +3 -1
  390. package/src/components/link-control/README.md +12 -3
  391. package/src/components/link-control/index.js +47 -7
  392. package/src/components/link-control/link-preview.js +6 -4
  393. package/src/components/link-control/search-item.js +1 -1
  394. package/src/components/link-control/style.scss +11 -3
  395. package/src/components/link-control/test/index.js +28 -1
  396. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  397. package/src/components/list-view/use-list-view-drop-zone.js +5 -1
  398. package/src/components/media-placeholder/index.native.js +108 -59
  399. package/src/components/media-placeholder/styles.native.scss +59 -24
  400. package/src/components/media-replace-flow/index.native.js +12 -3
  401. package/src/components/media-upload/test/index.native.js +1 -0
  402. package/src/components/preview-options/README.md +18 -17
  403. package/src/components/preview-options/index.js +2 -2
  404. package/src/components/rich-text/content.js +1 -46
  405. package/src/components/rich-text/format-edit.js +62 -38
  406. package/src/components/rich-text/get-rich-text-values.js +99 -0
  407. package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  408. package/src/components/spacing-sizes-control/input-controls/axial.js +17 -2
  409. package/src/components/spacing-sizes-control/input-controls/separated.js +17 -2
  410. package/src/components/spacing-sizes-control/input-controls/single.js +12 -2
  411. package/src/components/spacing-sizes-control/test/utils.js +9 -1
  412. package/src/components/spacing-sizes-control/utils.js +2 -2
  413. package/src/components/text-transform-control/README.md +44 -0
  414. package/src/components/use-block-display-information/index.js +12 -5
  415. package/src/components/use-block-drop-zone/index.native.js +65 -28
  416. package/src/components/use-setting/index.js +8 -8
  417. package/src/hooks/behaviors.js +10 -16
  418. package/src/hooks/border.js +2 -1
  419. package/src/hooks/margin.js +4 -1
  420. package/src/hooks/padding.js +4 -1
  421. package/src/hooks/style.js +7 -3
  422. package/src/hooks/utils.js +5 -7
  423. package/src/private-apis.js +9 -1
  424. package/src/store/actions.js +23 -30
  425. package/src/store/private-selectors.js +3 -6
  426. package/src/store/reducer.js +0 -1
  427. package/src/store/selectors.js +36 -85
  428. package/src/store/test/actions.js +3 -0
  429. package/src/store/test/private-selectors.js +5 -5
  430. package/src/store/test/reducer.js +14 -7
  431. package/src/store/test/selectors.js +8 -7
  432. package/src/utils/object.js +32 -2
  433. package/src/utils/test/object.js +36 -0
  434. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +0 -1
  435. package/build/components/block-mobile-toolbar/index.native.js +0 -135
  436. package/build/components/block-mobile-toolbar/index.native.js.map +0 -1
  437. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +0 -1
  438. package/build-module/components/block-mobile-toolbar/index.native.js +0 -116
  439. package/build-module/components/block-mobile-toolbar/index.native.js.map +0 -1
  440. package/src/components/block-mobile-toolbar/index.native.js +0 -127
  441. package/src/components/block-mobile-toolbar/style.native.scss +0 -16
  442. /package/src/components/{block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap → block-toolbar/test/__snapshots__/block-toolbar-menu.native.js.snap} +0 -0
@@ -1,49 +1,78 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports.default = FormatEdit;
9
+ exports.usesContextKey = void 0;
7
10
 
8
11
  var _element = require("@wordpress/element");
9
12
 
10
13
  var _richText = require("@wordpress/rich-text");
11
14
 
15
+ var _blockContext = _interopRequireDefault(require("../block-context"));
16
+
12
17
  /**
13
18
  * WordPress dependencies
14
19
  */
15
- function FormatEdit({
16
- formatTypes,
20
+
21
+ /**
22
+ * Internal dependencies
23
+ */
24
+ const DEFAULT_BLOCK_CONTEXT = {};
25
+ const usesContextKey = Symbol('usesContext');
26
+ exports.usesContextKey = usesContextKey;
27
+
28
+ function Edit({
17
29
  onChange,
18
30
  onFocus,
19
31
  value,
20
- forwardedRef
32
+ forwardedRef,
33
+ settings
21
34
  }) {
22
- return formatTypes.map(settings => {
23
- const {
24
- name,
25
- edit: Edit
26
- } = settings;
27
-
28
- if (!Edit) {
29
- return null;
30
- }
31
-
32
- const activeFormat = (0, _richText.getActiveFormat)(value, name);
33
- const isActive = activeFormat !== undefined;
34
- const activeObject = (0, _richText.getActiveObject)(value);
35
- const isObjectActive = activeObject !== undefined && activeObject.type === name;
36
- return (0, _element.createElement)(Edit, {
37
- key: name,
38
- isActive: isActive,
39
- activeAttributes: isActive ? activeFormat.attributes || {} : {},
40
- isObjectActive: isObjectActive,
41
- activeObjectAttributes: isObjectActive ? activeObject.attributes || {} : {},
42
- value: value,
43
- onChange: onChange,
44
- onFocus: onFocus,
45
- contentRef: forwardedRef
46
- });
35
+ const {
36
+ name,
37
+ edit: EditFunction,
38
+ [usesContextKey]: usesContext
39
+ } = settings;
40
+ const blockContext = (0, _element.useContext)(_blockContext.default); // Assign context values using the block type's declared context needs.
41
+
42
+ const context = (0, _element.useMemo)(() => {
43
+ return usesContext ? Object.fromEntries(Object.entries(blockContext).filter(([key]) => usesContext.includes(key))) : DEFAULT_BLOCK_CONTEXT;
44
+ }, [usesContext, blockContext]);
45
+
46
+ if (!EditFunction) {
47
+ return null;
48
+ }
49
+
50
+ const activeFormat = (0, _richText.getActiveFormat)(value, name);
51
+ const isActive = activeFormat !== undefined;
52
+ const activeObject = (0, _richText.getActiveObject)(value);
53
+ const isObjectActive = activeObject !== undefined && activeObject.type === name;
54
+ return (0, _element.createElement)(EditFunction, {
55
+ key: name,
56
+ isActive: isActive,
57
+ activeAttributes: isActive ? activeFormat.attributes || {} : {},
58
+ isObjectActive: isObjectActive,
59
+ activeObjectAttributes: isObjectActive ? activeObject.attributes || {} : {},
60
+ value: value,
61
+ onChange: onChange,
62
+ onFocus: onFocus,
63
+ contentRef: forwardedRef,
64
+ context: context
47
65
  });
48
66
  }
67
+
68
+ function FormatEdit({
69
+ formatTypes,
70
+ ...props
71
+ }) {
72
+ return formatTypes.map(settings => (0, _element.createElement)(Edit, {
73
+ settings: settings,
74
+ ...props,
75
+ key: settings.name
76
+ }));
77
+ }
49
78
  //# sourceMappingURL=format-edit.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/format-edit.js"],"names":["FormatEdit","formatTypes","onChange","onFocus","value","forwardedRef","map","settings","name","edit","Edit","activeFormat","isActive","undefined","activeObject","isObjectActive","type","attributes"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;AAGe,SAASA,UAAT,CAAqB;AACnCC,EAAAA,WADmC;AAEnCC,EAAAA,QAFmC;AAGnCC,EAAAA,OAHmC;AAInCC,EAAAA,KAJmC;AAKnCC,EAAAA;AALmC,CAArB,EAMX;AACH,SAAOJ,WAAW,CAACK,GAAZ,CAAmBC,QAAF,IAAgB;AACvC,UAAM;AAAEC,MAAAA,IAAF;AAAQC,MAAAA,IAAI,EAAEC;AAAd,QAAuBH,QAA7B;;AAEA,QAAK,CAAEG,IAAP,EAAc;AACb,aAAO,IAAP;AACA;;AAED,UAAMC,YAAY,GAAG,+BAAiBP,KAAjB,EAAwBI,IAAxB,CAArB;AACA,UAAMI,QAAQ,GAAGD,YAAY,KAAKE,SAAlC;AACA,UAAMC,YAAY,GAAG,+BAAiBV,KAAjB,CAArB;AACA,UAAMW,cAAc,GACnBD,YAAY,KAAKD,SAAjB,IAA8BC,YAAY,CAACE,IAAb,KAAsBR,IADrD;AAGA,WACC,4BAAC,IAAD;AACC,MAAA,GAAG,EAAGA,IADP;AAEC,MAAA,QAAQ,EAAGI,QAFZ;AAGC,MAAA,gBAAgB,EACfA,QAAQ,GAAGD,YAAY,CAACM,UAAb,IAA2B,EAA9B,GAAmC,EAJ7C;AAMC,MAAA,cAAc,EAAGF,cANlB;AAOC,MAAA,sBAAsB,EACrBA,cAAc,GAAGD,YAAY,CAACG,UAAb,IAA2B,EAA9B,GAAmC,EARnD;AAUC,MAAA,KAAK,EAAGb,KAVT;AAWC,MAAA,QAAQ,EAAGF,QAXZ;AAYC,MAAA,OAAO,EAAGC,OAZX;AAaC,MAAA,UAAU,EAAGE;AAbd,MADD;AAiBA,GA9BM,CAAP;AA+BA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getActiveFormat, getActiveObject } from '@wordpress/rich-text';\n\nexport default function FormatEdit( {\n\tformatTypes,\n\tonChange,\n\tonFocus,\n\tvalue,\n\tforwardedRef,\n} ) {\n\treturn formatTypes.map( ( settings ) => {\n\t\tconst { name, edit: Edit } = settings;\n\n\t\tif ( ! Edit ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst activeFormat = getActiveFormat( value, name );\n\t\tconst isActive = activeFormat !== undefined;\n\t\tconst activeObject = getActiveObject( value );\n\t\tconst isObjectActive =\n\t\t\tactiveObject !== undefined && activeObject.type === name;\n\n\t\treturn (\n\t\t\t<Edit\n\t\t\t\tkey={ name }\n\t\t\t\tisActive={ isActive }\n\t\t\t\tactiveAttributes={\n\t\t\t\t\tisActive ? activeFormat.attributes || {} : {}\n\t\t\t\t}\n\t\t\t\tisObjectActive={ isObjectActive }\n\t\t\t\tactiveObjectAttributes={\n\t\t\t\t\tisObjectActive ? activeObject.attributes || {} : {}\n\t\t\t\t}\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonFocus={ onFocus }\n\t\t\t\tcontentRef={ forwardedRef }\n\t\t\t/>\n\t\t);\n\t} );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/format-edit.js"],"names":["DEFAULT_BLOCK_CONTEXT","usesContextKey","Symbol","Edit","onChange","onFocus","value","forwardedRef","settings","name","edit","EditFunction","usesContext","blockContext","BlockContext","context","Object","fromEntries","entries","filter","key","includes","activeFormat","isActive","undefined","activeObject","isObjectActive","type","attributes","FormatEdit","formatTypes","props","map"],"mappings":";;;;;;;;;;AAIA;;AADA;;AAMA;;AATA;AACA;AACA;;AAIA;AACA;AACA;AAGA,MAAMA,qBAAqB,GAAG,EAA9B;AAEO,MAAMC,cAAc,GAAGC,MAAM,CAAE,aAAF,CAA7B;;;AAEP,SAASC,IAAT,CAAe;AAAEC,EAAAA,QAAF;AAAYC,EAAAA,OAAZ;AAAqBC,EAAAA,KAArB;AAA4BC,EAAAA,YAA5B;AAA0CC,EAAAA;AAA1C,CAAf,EAAsE;AACrE,QAAM;AACLC,IAAAA,IADK;AAELC,IAAAA,IAAI,EAAEC,YAFD;AAGL,KAAEV,cAAF,GAAoBW;AAHf,MAIFJ,QAJJ;AAMA,QAAMK,YAAY,GAAG,yBAAYC,qBAAZ,CAArB,CAPqE,CASrE;;AACA,QAAMC,OAAO,GAAG,sBAAS,MAAM;AAC9B,WAAOH,WAAW,GACfI,MAAM,CAACC,WAAP,CACAD,MAAM,CAACE,OAAP,CAAgBL,YAAhB,EAA+BM,MAA/B,CAAuC,CAAE,CAAEC,GAAF,CAAF,KACtCR,WAAW,CAACS,QAAZ,CAAsBD,GAAtB,CADD,CADA,CADe,GAMfpB,qBANH;AAOA,GARe,EAQb,CAAEY,WAAF,EAAeC,YAAf,CARa,CAAhB;;AAUA,MAAK,CAAEF,YAAP,EAAsB;AACrB,WAAO,IAAP;AACA;;AAED,QAAMW,YAAY,GAAG,+BAAiBhB,KAAjB,EAAwBG,IAAxB,CAArB;AACA,QAAMc,QAAQ,GAAGD,YAAY,KAAKE,SAAlC;AACA,QAAMC,YAAY,GAAG,+BAAiBnB,KAAjB,CAArB;AACA,QAAMoB,cAAc,GACnBD,YAAY,KAAKD,SAAjB,IAA8BC,YAAY,CAACE,IAAb,KAAsBlB,IADrD;AAGA,SACC,4BAAC,YAAD;AACC,IAAA,GAAG,EAAGA,IADP;AAEC,IAAA,QAAQ,EAAGc,QAFZ;AAGC,IAAA,gBAAgB,EAAGA,QAAQ,GAAGD,YAAY,CAACM,UAAb,IAA2B,EAA9B,GAAmC,EAH/D;AAIC,IAAA,cAAc,EAAGF,cAJlB;AAKC,IAAA,sBAAsB,EACrBA,cAAc,GAAGD,YAAY,CAACG,UAAb,IAA2B,EAA9B,GAAmC,EANnD;AAQC,IAAA,KAAK,EAAGtB,KART;AASC,IAAA,QAAQ,EAAGF,QATZ;AAUC,IAAA,OAAO,EAAGC,OAVX;AAWC,IAAA,UAAU,EAAGE,YAXd;AAYC,IAAA,OAAO,EAAGQ;AAZX,IADD;AAgBA;;AAEc,SAASc,UAAT,CAAqB;AAAEC,EAAAA,WAAF;AAAe,KAAGC;AAAlB,CAArB,EAAiD;AAC/D,SAAOD,WAAW,CAACE,GAAZ,CAAmBxB,QAAF,IACvB,4BAAC,IAAD;AAAM,IAAA,QAAQ,EAAGA,QAAjB;AAAA,OAAiCuB,KAAjC;AAAyC,IAAA,GAAG,EAAGvB,QAAQ,CAACC;AAAxD,IADM,CAAP;AAGA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getActiveFormat, getActiveObject } from '@wordpress/rich-text';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\n\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nexport const usesContextKey = Symbol( 'usesContext' );\n\nfunction Edit( { onChange, onFocus, value, forwardedRef, settings } ) {\n\tconst {\n\t\tname,\n\t\tedit: EditFunction,\n\t\t[ usesContextKey ]: usesContext,\n\t} = settings;\n\n\tconst blockContext = useContext( BlockContext );\n\n\t// Assign context values using the block type's declared context needs.\n\tconst context = useMemo( () => {\n\t\treturn usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tusesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t}, [ usesContext, blockContext ] );\n\n\tif ( ! EditFunction ) {\n\t\treturn null;\n\t}\n\n\tconst activeFormat = getActiveFormat( value, name );\n\tconst isActive = activeFormat !== undefined;\n\tconst activeObject = getActiveObject( value );\n\tconst isObjectActive =\n\t\tactiveObject !== undefined && activeObject.type === name;\n\n\treturn (\n\t\t<EditFunction\n\t\t\tkey={ name }\n\t\t\tisActive={ isActive }\n\t\t\tactiveAttributes={ isActive ? activeFormat.attributes || {} : {} }\n\t\t\tisObjectActive={ isObjectActive }\n\t\t\tactiveObjectAttributes={\n\t\t\t\tisObjectActive ? activeObject.attributes || {} : {}\n\t\t\t}\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tonFocus={ onFocus }\n\t\t\tcontentRef={ forwardedRef }\n\t\t\tcontext={ context }\n\t\t/>\n\t);\n}\n\nexport default function FormatEdit( { formatTypes, ...props } ) {\n\treturn formatTypes.map( ( settings ) => (\n\t\t<Edit settings={ settings } { ...props } key={ settings.name } />\n\t) );\n}\n"]}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getRichTextValues = getRichTextValues;
9
+
10
+ var _element = require("@wordpress/element");
11
+
12
+ var _blocks = require("@wordpress/blocks");
13
+
14
+ var _innerBlocks = _interopRequireDefault(require("../inner-blocks"));
15
+
16
+ var _content = require("./content");
17
+
18
+ /**
19
+ * WordPress dependencies
20
+ */
21
+
22
+ /**
23
+ * Internal dependencies
24
+ */
25
+
26
+ /*
27
+ * This function is similar to `@wordpress/element`'s `renderToString` function,
28
+ * except that it does not render the elements to a string, but instead collects
29
+ * the values of all rich text `Content` elements.
30
+ */
31
+ function addValuesForElement(element, values, innerBlocks) {
32
+ if (null === element || undefined === element || false === element) {
33
+ return;
34
+ }
35
+
36
+ if (Array.isArray(element)) {
37
+ return addValuesForElements(element, values, innerBlocks);
38
+ }
39
+
40
+ switch (typeof element) {
41
+ case 'string':
42
+ case 'number':
43
+ return;
44
+ }
45
+
46
+ const {
47
+ type,
48
+ props
49
+ } = element;
50
+
51
+ switch (type) {
52
+ case _element.StrictMode:
53
+ case _element.Fragment:
54
+ return addValuesForElements(props.children, values, innerBlocks);
55
+
56
+ case _element.RawHTML:
57
+ return;
58
+
59
+ case _innerBlocks.default.Content:
60
+ return addValuesForBlocks(values, innerBlocks);
61
+
62
+ case _content.Content:
63
+ values.push(props.value);
64
+ return;
65
+ }
66
+
67
+ switch (typeof type) {
68
+ case 'string':
69
+ if (typeof props.children !== 'undefined') {
70
+ return addValuesForElements(props.children, values, innerBlocks);
71
+ }
72
+
73
+ return;
74
+
75
+ case 'function':
76
+ const el = type.prototype && typeof type.prototype.render === 'function' ? new type(props).render() : type(props);
77
+ return addValuesForElement(el, values, innerBlocks);
78
+ }
79
+ }
80
+
81
+ function addValuesForElements(children, ...args) {
82
+ children = Array.isArray(children) ? children : [children];
83
+
84
+ for (let i = 0; i < children.length; i++) {
85
+ addValuesForElement(children[i], ...args);
86
+ }
87
+ }
88
+
89
+ function addValuesForBlocks(values, blocks) {
90
+ for (let i = 0; i < blocks.length; i++) {
91
+ const {
92
+ name,
93
+ attributes,
94
+ innerBlocks
95
+ } = blocks[i];
96
+ const saveElement = (0, _blocks.getSaveElement)(name, attributes, // Instead of letting save elements use `useInnerBlocksProps.save`,
97
+ // force them to use InnerBlocks.Content instead so we can intercept
98
+ // a single component.
99
+ (0, _element.createElement)(_innerBlocks.default.Content, null));
100
+ addValuesForElement(saveElement, values, innerBlocks);
101
+ }
102
+ }
103
+
104
+ function getRichTextValues(blocks = []) {
105
+ _blocks.__unstableGetBlockProps.skipFilters = true;
106
+ const values = [];
107
+ addValuesForBlocks(values, blocks);
108
+ _blocks.__unstableGetBlockProps.skipFilters = false;
109
+ return values;
110
+ }
111
+ //# sourceMappingURL=get-rich-text-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/get-rich-text-values.js"],"names":["addValuesForElement","element","values","innerBlocks","undefined","Array","isArray","addValuesForElements","type","props","StrictMode","Fragment","children","RawHTML","InnerBlocks","Content","addValuesForBlocks","push","value","el","prototype","render","args","i","length","blocks","name","attributes","saveElement","getRichTextValues","getBlockProps","skipFilters"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { RawHTML, StrictMode, Fragment } from '@wordpress/element';\nimport {\n\tgetSaveElement,\n\t__unstableGetBlockProps as getBlockProps,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport InnerBlocks from '../inner-blocks';\nimport { Content } from './content';\n\n/*\n * This function is similar to `@wordpress/element`'s `renderToString` function,\n * except that it does not render the elements to a string, but instead collects\n * the values of all rich text `Content` elements.\n */\nfunction addValuesForElement( element, values, innerBlocks ) {\n\tif ( null === element || undefined === element || false === element ) {\n\t\treturn;\n\t}\n\n\tif ( Array.isArray( element ) ) {\n\t\treturn addValuesForElements( element, values, innerBlocks );\n\t}\n\n\tswitch ( typeof element ) {\n\t\tcase 'string':\n\t\tcase 'number':\n\t\t\treturn;\n\t}\n\n\tconst { type, props } = element;\n\n\tswitch ( type ) {\n\t\tcase StrictMode:\n\t\tcase Fragment:\n\t\t\treturn addValuesForElements( props.children, values, innerBlocks );\n\t\tcase RawHTML:\n\t\t\treturn;\n\t\tcase InnerBlocks.Content:\n\t\t\treturn addValuesForBlocks( values, innerBlocks );\n\t\tcase Content:\n\t\t\tvalues.push( props.value );\n\t\t\treturn;\n\t}\n\n\tswitch ( typeof type ) {\n\t\tcase 'string':\n\t\t\tif ( typeof props.children !== 'undefined' ) {\n\t\t\t\treturn addValuesForElements(\n\t\t\t\t\tprops.children,\n\t\t\t\t\tvalues,\n\t\t\t\t\tinnerBlocks\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\tcase 'function':\n\t\t\tconst el =\n\t\t\t\ttype.prototype && typeof type.prototype.render === 'function'\n\t\t\t\t\t? new type( props ).render()\n\t\t\t\t\t: type( props );\n\t\t\treturn addValuesForElement( el, values, innerBlocks );\n\t}\n}\n\nfunction addValuesForElements( children, ...args ) {\n\tchildren = Array.isArray( children ) ? children : [ children ];\n\n\tfor ( let i = 0; i < children.length; i++ ) {\n\t\taddValuesForElement( children[ i ], ...args );\n\t}\n}\n\nfunction addValuesForBlocks( values, blocks ) {\n\tfor ( let i = 0; i < blocks.length; i++ ) {\n\t\tconst { name, attributes, innerBlocks } = blocks[ i ];\n\t\tconst saveElement = getSaveElement(\n\t\t\tname,\n\t\t\tattributes,\n\t\t\t// Instead of letting save elements use `useInnerBlocksProps.save`,\n\t\t\t// force them to use InnerBlocks.Content instead so we can intercept\n\t\t\t// a single component.\n\t\t\t<InnerBlocks.Content />\n\t\t);\n\t\taddValuesForElement( saveElement, values, innerBlocks );\n\t}\n}\n\nexport function getRichTextValues( blocks = [] ) {\n\tgetBlockProps.skipFilters = true;\n\tconst values = [];\n\taddValuesForBlocks( values, blocks );\n\tgetBlockProps.skipFilters = false;\n\treturn values;\n}\n"]}
@@ -22,7 +22,7 @@ function useSpacingSizes() {
22
22
  const spacingSizes = [{
23
23
  name: 0,
24
24
  slug: '0',
25
- side: 0
25
+ size: 0
26
26
  }, ...((0, _useSetting.default)('spacing.spacingSizes') || [])];
27
27
 
28
28
  if (spacingSizes.length > 8) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js"],"names":["useSpacingSizes","spacingSizes","name","slug","side","length","unshift","size","undefined"],"mappings":";;;;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;AAGe,SAASA,eAAT,GAA2B;AACzC,QAAMC,YAAY,GAAG,CACpB;AAAEC,IAAAA,IAAI,EAAE,CAAR;AAAWC,IAAAA,IAAI,EAAE,GAAjB;AAAsBC,IAAAA,IAAI,EAAE;AAA5B,GADoB,EAEpB,IAAK,yBAAY,sBAAZ,KAAwC,EAA7C,CAFoB,CAArB;;AAKA,MAAKH,YAAY,CAACI,MAAb,GAAsB,CAA3B,EAA+B;AAC9BJ,IAAAA,YAAY,CAACK,OAAb,CAAsB;AACrBJ,MAAAA,IAAI,EAAE,cAAI,SAAJ,CADe;AAErBC,MAAAA,IAAI,EAAE,SAFe;AAGrBI,MAAAA,IAAI,EAAEC;AAHe,KAAtB;AAKA;;AAED,SAAOP,YAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport useSetting from '../../use-setting';\n\nexport default function useSpacingSizes() {\n\tconst spacingSizes = [\n\t\t{ name: 0, slug: '0', side: 0 },\n\t\t...( useSetting( 'spacing.spacingSizes' ) || [] ),\n\t];\n\n\tif ( spacingSizes.length > 8 ) {\n\t\tspacingSizes.unshift( {\n\t\t\tname: __( 'Default' ),\n\t\t\tslug: 'default',\n\t\t\tsize: undefined,\n\t\t} );\n\t}\n\n\treturn spacingSizes;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js"],"names":["useSpacingSizes","spacingSizes","name","slug","size","length","unshift","undefined"],"mappings":";;;;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;AAGe,SAASA,eAAT,GAA2B;AACzC,QAAMC,YAAY,GAAG,CACpB;AAAEC,IAAAA,IAAI,EAAE,CAAR;AAAWC,IAAAA,IAAI,EAAE,GAAjB;AAAsBC,IAAAA,IAAI,EAAE;AAA5B,GADoB,EAEpB,IAAK,yBAAY,sBAAZ,KAAwC,EAA7C,CAFoB,CAArB;;AAKA,MAAKH,YAAY,CAACI,MAAb,GAAsB,CAA3B,EAA+B;AAC9BJ,IAAAA,YAAY,CAACK,OAAb,CAAsB;AACrBJ,MAAAA,IAAI,EAAE,cAAI,SAAJ,CADe;AAErBC,MAAAA,IAAI,EAAE,SAFe;AAGrBC,MAAAA,IAAI,EAAEG;AAHe,KAAtB;AAKA;;AAED,SAAON,YAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport useSetting from '../../use-setting';\n\nexport default function useSpacingSizes() {\n\tconst spacingSizes = [\n\t\t{ name: 0, slug: '0', size: 0 },\n\t\t...( useSetting( 'spacing.spacingSizes' ) || [] ),\n\t];\n\n\tif ( spacingSizes.length > 8 ) {\n\t\tspacingSizes.unshift( {\n\t\t\tname: __( 'Default' ),\n\t\t\tslug: 'default',\n\t\t\tsize: undefined,\n\t\t} );\n\t}\n\n\treturn spacingSizes;\n}\n"]}
@@ -31,9 +31,13 @@ function AxialInputControls({
31
31
  const createHandleOnChange = side => next => {
32
32
  if (!onChange) {
33
33
  return;
34
- }
34
+ } // Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.
35
+
35
36
 
36
- const nextValues = { ...values
37
+ const nextValues = { ...Object.keys(values).reduce((acc, key) => {
38
+ acc[key] = (0, _utils.getPresetValueFromCustomValue)(values[key], spacingSizes);
39
+ return acc;
40
+ }, {})
37
41
  };
38
42
 
39
43
  if (side === 'vertical') {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/input-controls/axial.js"],"names":["groupedSides","AxialInputControls","minimumCustomValue","onChange","onMouseOut","onMouseOver","sides","spacingSizes","type","values","createHandleOnChange","side","next","nextValues","top","bottom","left","right","filteredSides","length","filter","map","axisValue","ICONS","LABELS"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;AAIA,MAAMA,YAAY,GAAG,CAAE,UAAF,EAAc,YAAd,CAArB;;AAEe,SAASC,kBAAT,CAA6B;AAC3CC,EAAAA,kBAD2C;AAE3CC,EAAAA,QAF2C;AAG3CC,EAAAA,UAH2C;AAI3CC,EAAAA,WAJ2C;AAK3CC,EAAAA,KAL2C;AAM3CC,EAAAA,YAN2C;AAO3CC,EAAAA,IAP2C;AAQ3CC,EAAAA;AAR2C,CAA7B,EASX;AACH,QAAMC,oBAAoB,GAAKC,IAAF,IAAcC,IAAF,IAAY;AACpD,QAAK,CAAET,QAAP,EAAkB;AACjB;AACA;;AACD,UAAMU,UAAU,GAAG,EAAE,GAAGJ;AAAL,KAAnB;;AAEA,QAAKE,IAAI,KAAK,UAAd,EAA2B;AAC1BE,MAAAA,UAAU,CAACC,GAAX,GAAiBF,IAAjB;AACAC,MAAAA,UAAU,CAACE,MAAX,GAAoBH,IAApB;AACA;;AAED,QAAKD,IAAI,KAAK,YAAd,EAA6B;AAC5BE,MAAAA,UAAU,CAACG,IAAX,GAAkBJ,IAAlB;AACAC,MAAAA,UAAU,CAACI,KAAX,GAAmBL,IAAnB;AACA;;AAEDT,IAAAA,QAAQ,CAAEU,UAAF,CAAR;AACA,GAjBD,CADG,CAoBH;;;AACA,QAAMK,aAAa,GAAGZ,KAAK,EAAEa,MAAP,GACnBnB,YAAY,CAACoB,MAAb,CAAuBT,IAAF,IAAY,2BAAgBL,KAAhB,EAAuBK,IAAvB,CAAjC,CADmB,GAEnBX,YAFH;AAIA,SACC,qDACGkB,aAAa,CAACG,GAAd,CAAqBV,IAAF,IAAY;AAChC,UAAMW,SAAS,GACdX,IAAI,KAAK,UAAT,GAAsBF,MAAM,CAACK,GAA7B,GAAmCL,MAAM,CAACO,IAD3C;AAEA,WACC,4BAAC,4BAAD;AACC,MAAA,GAAG,EAAI,yBAAyBL,IAAM,EADvC;AAEC,MAAA,IAAI,EAAGY,aAAOZ,IAAP,CAFR;AAGC,MAAA,KAAK,EAAGa,cAAQb,IAAR,CAHT;AAIC,MAAA,kBAAkB,EAAGT,kBAJtB;AAKC,MAAA,QAAQ,EAAGQ,oBAAoB,CAAEC,IAAF,CALhC;AAMC,MAAA,UAAU,EAAGP,UANd;AAOC,MAAA,WAAW,EAAGC,WAPf;AAQC,MAAA,IAAI,EAAGM,IARR;AASC,MAAA,YAAY,EAAGJ,YAThB;AAUC,MAAA,IAAI,EAAGC,IAVR;AAWC,MAAA,KAAK,EAAGc,SAXT;AAYC,MAAA,cAAc,EAAG;AAZlB,MADD;AAgBA,GAnBC,CADH,CADD;AAwBA","sourcesContent":["/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport { LABELS, ICONS, hasAxisSupport } from '../utils';\n\nconst groupedSides = [ 'vertical', 'horizontal' ];\n\nexport default function AxialInputControls( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\tconst createHandleOnChange = ( side ) => ( next ) => {\n\t\tif ( ! onChange ) {\n\t\t\treturn;\n\t\t}\n\t\tconst nextValues = { ...values };\n\n\t\tif ( side === 'vertical' ) {\n\t\t\tnextValues.top = next;\n\t\t\tnextValues.bottom = next;\n\t\t}\n\n\t\tif ( side === 'horizontal' ) {\n\t\t\tnextValues.left = next;\n\t\t\tnextValues.right = next;\n\t\t}\n\n\t\tonChange( nextValues );\n\t};\n\n\t// Filter sides if custom configuration provided, maintaining default order.\n\tconst filteredSides = sides?.length\n\t\t? groupedSides.filter( ( side ) => hasAxisSupport( sides, side ) )\n\t\t: groupedSides;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredSides.map( ( side ) => {\n\t\t\t\tconst axisValue =\n\t\t\t\t\tside === 'vertical' ? values.top : values.left;\n\t\t\t\treturn (\n\t\t\t\t\t<SpacingInputControl\n\t\t\t\t\t\tkey={ `spacing-sizes-control-${ side }` }\n\t\t\t\t\t\ticon={ ICONS[ side ] }\n\t\t\t\t\t\tlabel={ LABELS[ side ] }\n\t\t\t\t\t\tminimumCustomValue={ minimumCustomValue }\n\t\t\t\t\t\tonChange={ createHandleOnChange( side ) }\n\t\t\t\t\t\tonMouseOut={ onMouseOut }\n\t\t\t\t\t\tonMouseOver={ onMouseOver }\n\t\t\t\t\t\tside={ side }\n\t\t\t\t\t\tspacingSizes={ spacingSizes }\n\t\t\t\t\t\ttype={ type }\n\t\t\t\t\t\tvalue={ axisValue }\n\t\t\t\t\t\twithInputField={ false }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/input-controls/axial.js"],"names":["groupedSides","AxialInputControls","minimumCustomValue","onChange","onMouseOut","onMouseOver","sides","spacingSizes","type","values","createHandleOnChange","side","next","nextValues","Object","keys","reduce","acc","key","top","bottom","left","right","filteredSides","length","filter","map","axisValue","ICONS","LABELS"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;AASA,MAAMA,YAAY,GAAG,CAAE,UAAF,EAAc,YAAd,CAArB;;AAEe,SAASC,kBAAT,CAA6B;AAC3CC,EAAAA,kBAD2C;AAE3CC,EAAAA,QAF2C;AAG3CC,EAAAA,UAH2C;AAI3CC,EAAAA,WAJ2C;AAK3CC,EAAAA,KAL2C;AAM3CC,EAAAA,YAN2C;AAO3CC,EAAAA,IAP2C;AAQ3CC,EAAAA;AAR2C,CAA7B,EASX;AACH,QAAMC,oBAAoB,GAAKC,IAAF,IAAcC,IAAF,IAAY;AACpD,QAAK,CAAET,QAAP,EAAkB;AACjB;AACA,KAHmD,CAKpD;;;AACA,UAAMU,UAAU,GAAG,EAClB,GAAGC,MAAM,CAACC,IAAP,CAAaN,MAAb,EAAsBO,MAAtB,CAA8B,CAAEC,GAAF,EAAOC,GAAP,KAAgB;AAChDD,QAAAA,GAAG,CAAEC,GAAF,CAAH,GAAa,0CACZT,MAAM,CAAES,GAAF,CADM,EAEZX,YAFY,CAAb;AAIA,eAAOU,GAAP;AACA,OANE,EAMA,EANA;AADe,KAAnB;;AAUA,QAAKN,IAAI,KAAK,UAAd,EAA2B;AAC1BE,MAAAA,UAAU,CAACM,GAAX,GAAiBP,IAAjB;AACAC,MAAAA,UAAU,CAACO,MAAX,GAAoBR,IAApB;AACA;;AAED,QAAKD,IAAI,KAAK,YAAd,EAA6B;AAC5BE,MAAAA,UAAU,CAACQ,IAAX,GAAkBT,IAAlB;AACAC,MAAAA,UAAU,CAACS,KAAX,GAAmBV,IAAnB;AACA;;AAEDT,IAAAA,QAAQ,CAAEU,UAAF,CAAR;AACA,GA3BD,CADG,CA8BH;;;AACA,QAAMU,aAAa,GAAGjB,KAAK,EAAEkB,MAAP,GACnBxB,YAAY,CAACyB,MAAb,CAAuBd,IAAF,IAAY,2BAAgBL,KAAhB,EAAuBK,IAAvB,CAAjC,CADmB,GAEnBX,YAFH;AAIA,SACC,qDACGuB,aAAa,CAACG,GAAd,CAAqBf,IAAF,IAAY;AAChC,UAAMgB,SAAS,GACdhB,IAAI,KAAK,UAAT,GAAsBF,MAAM,CAACU,GAA7B,GAAmCV,MAAM,CAACY,IAD3C;AAEA,WACC,4BAAC,4BAAD;AACC,MAAA,GAAG,EAAI,yBAAyBV,IAAM,EADvC;AAEC,MAAA,IAAI,EAAGiB,aAAOjB,IAAP,CAFR;AAGC,MAAA,KAAK,EAAGkB,cAAQlB,IAAR,CAHT;AAIC,MAAA,kBAAkB,EAAGT,kBAJtB;AAKC,MAAA,QAAQ,EAAGQ,oBAAoB,CAAEC,IAAF,CALhC;AAMC,MAAA,UAAU,EAAGP,UANd;AAOC,MAAA,WAAW,EAAGC,WAPf;AAQC,MAAA,IAAI,EAAGM,IARR;AASC,MAAA,YAAY,EAAGJ,YAThB;AAUC,MAAA,IAAI,EAAGC,IAVR;AAWC,MAAA,KAAK,EAAGmB,SAXT;AAYC,MAAA,cAAc,EAAG;AAZlB,MADD;AAgBA,GAnBC,CADH,CADD;AAwBA","sourcesContent":["/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport {\n\tLABELS,\n\tICONS,\n\tgetPresetValueFromCustomValue,\n\thasAxisSupport,\n} from '../utils';\n\nconst groupedSides = [ 'vertical', 'horizontal' ];\n\nexport default function AxialInputControls( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\tconst createHandleOnChange = ( side ) => ( next ) => {\n\t\tif ( ! onChange ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tif ( side === 'vertical' ) {\n\t\t\tnextValues.top = next;\n\t\t\tnextValues.bottom = next;\n\t\t}\n\n\t\tif ( side === 'horizontal' ) {\n\t\t\tnextValues.left = next;\n\t\t\tnextValues.right = next;\n\t\t}\n\n\t\tonChange( nextValues );\n\t};\n\n\t// Filter sides if custom configuration provided, maintaining default order.\n\tconst filteredSides = sides?.length\n\t\t? groupedSides.filter( ( side ) => hasAxisSupport( sides, side ) )\n\t\t: groupedSides;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredSides.map( ( side ) => {\n\t\t\t\tconst axisValue =\n\t\t\t\t\tside === 'vertical' ? values.top : values.left;\n\t\t\t\treturn (\n\t\t\t\t\t<SpacingInputControl\n\t\t\t\t\t\tkey={ `spacing-sizes-control-${ side }` }\n\t\t\t\t\t\ticon={ ICONS[ side ] }\n\t\t\t\t\t\tlabel={ LABELS[ side ] }\n\t\t\t\t\t\tminimumCustomValue={ minimumCustomValue }\n\t\t\t\t\t\tonChange={ createHandleOnChange( side ) }\n\t\t\t\t\t\tonMouseOut={ onMouseOut }\n\t\t\t\t\t\tonMouseOver={ onMouseOver }\n\t\t\t\t\t\tside={ side }\n\t\t\t\t\t\tspacingSizes={ spacingSizes }\n\t\t\t\t\t\ttype={ type }\n\t\t\t\t\t\tvalue={ axisValue }\n\t\t\t\t\t\twithInputField={ false }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n"]}
@@ -30,7 +30,11 @@ function SeparatedInputControls({
30
30
  const filteredSides = sides?.length ? _utils.ALL_SIDES.filter(side => sides.includes(side)) : _utils.ALL_SIDES;
31
31
 
32
32
  const createHandleOnChange = side => next => {
33
- const nextValues = { ...values
33
+ // Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.
34
+ const nextValues = { ...Object.keys(values).reduce((acc, key) => {
35
+ acc[key] = (0, _utils.getPresetValueFromCustomValue)(values[key], spacingSizes);
36
+ return acc;
37
+ }, {})
34
38
  };
35
39
  nextValues[side] = next;
36
40
  onChange(nextValues);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/input-controls/separated.js"],"names":["SeparatedInputControls","minimumCustomValue","onChange","onMouseOut","onMouseOver","sides","spacingSizes","type","values","filteredSides","length","ALL_SIDES","filter","side","includes","createHandleOnChange","next","nextValues","map","ICONS","LABELS"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;AAIe,SAASA,sBAAT,CAAiC;AAC/CC,EAAAA,kBAD+C;AAE/CC,EAAAA,QAF+C;AAG/CC,EAAAA,UAH+C;AAI/CC,EAAAA,WAJ+C;AAK/CC,EAAAA,KAL+C;AAM/CC,EAAAA,YAN+C;AAO/CC,EAAAA,IAP+C;AAQ/CC,EAAAA;AAR+C,CAAjC,EASX;AACH;AACA,QAAMC,aAAa,GAAGJ,KAAK,EAAEK,MAAP,GACnBC,iBAAUC,MAAV,CAAoBC,IAAF,IAAYR,KAAK,CAACS,QAAN,CAAgBD,IAAhB,CAA9B,CADmB,GAEnBF,gBAFH;;AAIA,QAAMI,oBAAoB,GAAKF,IAAF,IAAcG,IAAF,IAAY;AACpD,UAAMC,UAAU,GAAG,EAAE,GAAGT;AAAL,KAAnB;AACAS,IAAAA,UAAU,CAAEJ,IAAF,CAAV,GAAqBG,IAArB;AAEAd,IAAAA,QAAQ,CAAEe,UAAF,CAAR;AACA,GALD;;AAOA,SACC,qDACGR,aAAa,CAACS,GAAd,CAAqBL,IAAF,IAAY;AAChC,WACC,4BAAC,4BAAD;AACC,MAAA,GAAG,EAAI,yBAAyBA,IAAM,EADvC;AAEC,MAAA,IAAI,EAAGM,aAAON,IAAP,CAFR;AAGC,MAAA,KAAK,EAAGO,cAAQP,IAAR,CAHT;AAIC,MAAA,kBAAkB,EAAGZ,kBAJtB;AAKC,MAAA,QAAQ,EAAGc,oBAAoB,CAAEF,IAAF,CALhC;AAMC,MAAA,UAAU,EAAGV,UANd;AAOC,MAAA,WAAW,EAAGC,WAPf;AAQC,MAAA,IAAI,EAAGS,IARR;AASC,MAAA,YAAY,EAAGP,YAThB;AAUC,MAAA,IAAI,EAAGC,IAVR;AAWC,MAAA,KAAK,EAAGC,MAAM,CAAEK,IAAF,CAXf;AAYC,MAAA,cAAc,EAAG;AAZlB,MADD;AAgBA,GAjBC,CADH,CADD;AAsBA","sourcesContent":["/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport { ALL_SIDES, LABELS, ICONS } from '../utils';\n\nexport default function SeparatedInputControls( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\t// Filter sides if custom configuration provided, maintaining default order.\n\tconst filteredSides = sides?.length\n\t\t? ALL_SIDES.filter( ( side ) => sides.includes( side ) )\n\t\t: ALL_SIDES;\n\n\tconst createHandleOnChange = ( side ) => ( next ) => {\n\t\tconst nextValues = { ...values };\n\t\tnextValues[ side ] = next;\n\n\t\tonChange( nextValues );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredSides.map( ( side ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<SpacingInputControl\n\t\t\t\t\t\tkey={ `spacing-sizes-control-${ side }` }\n\t\t\t\t\t\ticon={ ICONS[ side ] }\n\t\t\t\t\t\tlabel={ LABELS[ side ] }\n\t\t\t\t\t\tminimumCustomValue={ minimumCustomValue }\n\t\t\t\t\t\tonChange={ createHandleOnChange( side ) }\n\t\t\t\t\t\tonMouseOut={ onMouseOut }\n\t\t\t\t\t\tonMouseOver={ onMouseOver }\n\t\t\t\t\t\tside={ side }\n\t\t\t\t\t\tspacingSizes={ spacingSizes }\n\t\t\t\t\t\ttype={ type }\n\t\t\t\t\t\tvalue={ values[ side ] }\n\t\t\t\t\t\twithInputField={ false }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/input-controls/separated.js"],"names":["SeparatedInputControls","minimumCustomValue","onChange","onMouseOut","onMouseOver","sides","spacingSizes","type","values","filteredSides","length","ALL_SIDES","filter","side","includes","createHandleOnChange","next","nextValues","Object","keys","reduce","acc","key","map","ICONS","LABELS"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;AASe,SAASA,sBAAT,CAAiC;AAC/CC,EAAAA,kBAD+C;AAE/CC,EAAAA,QAF+C;AAG/CC,EAAAA,UAH+C;AAI/CC,EAAAA,WAJ+C;AAK/CC,EAAAA,KAL+C;AAM/CC,EAAAA,YAN+C;AAO/CC,EAAAA,IAP+C;AAQ/CC,EAAAA;AAR+C,CAAjC,EASX;AACH;AACA,QAAMC,aAAa,GAAGJ,KAAK,EAAEK,MAAP,GACnBC,iBAAUC,MAAV,CAAoBC,IAAF,IAAYR,KAAK,CAACS,QAAN,CAAgBD,IAAhB,CAA9B,CADmB,GAEnBF,gBAFH;;AAIA,QAAMI,oBAAoB,GAAKF,IAAF,IAAcG,IAAF,IAAY;AACpD;AACA,UAAMC,UAAU,GAAG,EAClB,GAAGC,MAAM,CAACC,IAAP,CAAaX,MAAb,EAAsBY,MAAtB,CAA8B,CAAEC,GAAF,EAAOC,GAAP,KAAgB;AAChDD,QAAAA,GAAG,CAAEC,GAAF,CAAH,GAAa,0CACZd,MAAM,CAAEc,GAAF,CADM,EAEZhB,YAFY,CAAb;AAIA,eAAOe,GAAP;AACA,OANE,EAMA,EANA;AADe,KAAnB;AAUAJ,IAAAA,UAAU,CAAEJ,IAAF,CAAV,GAAqBG,IAArB;AAEAd,IAAAA,QAAQ,CAAEe,UAAF,CAAR;AACA,GAfD;;AAiBA,SACC,qDACGR,aAAa,CAACc,GAAd,CAAqBV,IAAF,IAAY;AAChC,WACC,4BAAC,4BAAD;AACC,MAAA,GAAG,EAAI,yBAAyBA,IAAM,EADvC;AAEC,MAAA,IAAI,EAAGW,aAAOX,IAAP,CAFR;AAGC,MAAA,KAAK,EAAGY,cAAQZ,IAAR,CAHT;AAIC,MAAA,kBAAkB,EAAGZ,kBAJtB;AAKC,MAAA,QAAQ,EAAGc,oBAAoB,CAAEF,IAAF,CALhC;AAMC,MAAA,UAAU,EAAGV,UANd;AAOC,MAAA,WAAW,EAAGC,WAPf;AAQC,MAAA,IAAI,EAAGS,IARR;AASC,MAAA,YAAY,EAAGP,YAThB;AAUC,MAAA,IAAI,EAAGC,IAVR;AAWC,MAAA,KAAK,EAAGC,MAAM,CAAEK,IAAF,CAXf;AAYC,MAAA,cAAc,EAAG;AAZlB,MADD;AAgBA,GAjBC,CADH,CADD;AAsBA","sourcesContent":["/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport {\n\tALL_SIDES,\n\tLABELS,\n\tICONS,\n\tgetPresetValueFromCustomValue,\n} from '../utils';\n\nexport default function SeparatedInputControls( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\t// Filter sides if custom configuration provided, maintaining default order.\n\tconst filteredSides = sides?.length\n\t\t? ALL_SIDES.filter( ( side ) => sides.includes( side ) )\n\t\t: ALL_SIDES;\n\n\tconst createHandleOnChange = ( side ) => ( next ) => {\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tnextValues[ side ] = next;\n\n\t\tonChange( nextValues );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredSides.map( ( side ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<SpacingInputControl\n\t\t\t\t\t\tkey={ `spacing-sizes-control-${ side }` }\n\t\t\t\t\t\ticon={ ICONS[ side ] }\n\t\t\t\t\t\tlabel={ LABELS[ side ] }\n\t\t\t\t\t\tminimumCustomValue={ minimumCustomValue }\n\t\t\t\t\t\tonChange={ createHandleOnChange( side ) }\n\t\t\t\t\t\tonMouseOut={ onMouseOut }\n\t\t\t\t\t\tonMouseOver={ onMouseOver }\n\t\t\t\t\t\tside={ side }\n\t\t\t\t\t\tspacingSizes={ spacingSizes }\n\t\t\t\t\t\ttype={ type }\n\t\t\t\t\t\tvalue={ values[ side ] }\n\t\t\t\t\t\twithInputField={ false }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n"]}
@@ -28,7 +28,11 @@ function SingleInputControl({
28
28
  values
29
29
  }) {
30
30
  const createHandleOnChange = currentSide => next => {
31
- const nextValues = { ...values
31
+ // Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.
32
+ const nextValues = { ...Object.keys(values).reduce((acc, key) => {
33
+ acc[key] = (0, _utils.getPresetValueFromCustomValue)(values[key], spacingSizes);
34
+ return acc;
35
+ }, {})
32
36
  };
33
37
  nextValues[currentSide] = next;
34
38
  onChange(nextValues);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/input-controls/single.js"],"names":["SingleInputControl","minimumCustomValue","onChange","onMouseOut","onMouseOver","showSideInLabel","side","spacingSizes","type","values","createHandleOnChange","currentSide","next","nextValues","LABELS"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;AAIe,SAASA,kBAAT,CAA6B;AAC3CC,EAAAA,kBAD2C;AAE3CC,EAAAA,QAF2C;AAG3CC,EAAAA,UAH2C;AAI3CC,EAAAA,WAJ2C;AAK3CC,EAAAA,eAL2C;AAM3CC,EAAAA,IAN2C;AAO3CC,EAAAA,YAP2C;AAQ3CC,EAAAA,IAR2C;AAS3CC,EAAAA;AAT2C,CAA7B,EAUX;AACH,QAAMC,oBAAoB,GAAKC,WAAF,IAAqBC,IAAF,IAAY;AAC3D,UAAMC,UAAU,GAAG,EAAE,GAAGJ;AAAL,KAAnB;AACAI,IAAAA,UAAU,CAAEF,WAAF,CAAV,GAA4BC,IAA5B;AAEAV,IAAAA,QAAQ,CAAEW,UAAF,CAAR;AACA,GALD;;AAOA,SACC,4BAAC,4BAAD;AACC,IAAA,KAAK,EAAGC,cAAQR,IAAR,CADT;AAEC,IAAA,kBAAkB,EAAGL,kBAFtB;AAGC,IAAA,QAAQ,EAAGS,oBAAoB,CAAEJ,IAAF,CAHhC;AAIC,IAAA,UAAU,EAAGH,UAJd;AAKC,IAAA,WAAW,EAAGC,WALf;AAMC,IAAA,eAAe,EAAGC,eANnB;AAOC,IAAA,IAAI,EAAGC,IAPR;AAQC,IAAA,YAAY,EAAGC,YARhB;AASC,IAAA,IAAI,EAAGC,IATR;AAUC,IAAA,KAAK,EAAGC,MAAM,CAAEH,IAAF,CAVf;AAWC,IAAA,cAAc,EAAG;AAXlB,IADD;AAeA","sourcesContent":["/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport { LABELS } from '../utils';\n\nexport default function SingleInputControl( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tshowSideInLabel,\n\tside,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\tconst createHandleOnChange = ( currentSide ) => ( next ) => {\n\t\tconst nextValues = { ...values };\n\t\tnextValues[ currentSide ] = next;\n\n\t\tonChange( nextValues );\n\t};\n\n\treturn (\n\t\t<SpacingInputControl\n\t\t\tlabel={ LABELS[ side ] }\n\t\t\tminimumCustomValue={ minimumCustomValue }\n\t\t\tonChange={ createHandleOnChange( side ) }\n\t\t\tonMouseOut={ onMouseOut }\n\t\t\tonMouseOver={ onMouseOver }\n\t\t\tshowSideInLabel={ showSideInLabel }\n\t\t\tside={ side }\n\t\t\tspacingSizes={ spacingSizes }\n\t\t\ttype={ type }\n\t\t\tvalue={ values[ side ] }\n\t\t\twithInputField={ false }\n\t\t/>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/input-controls/single.js"],"names":["SingleInputControl","minimumCustomValue","onChange","onMouseOut","onMouseOver","showSideInLabel","side","spacingSizes","type","values","createHandleOnChange","currentSide","next","nextValues","Object","keys","reduce","acc","key","LABELS"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;AAIe,SAASA,kBAAT,CAA6B;AAC3CC,EAAAA,kBAD2C;AAE3CC,EAAAA,QAF2C;AAG3CC,EAAAA,UAH2C;AAI3CC,EAAAA,WAJ2C;AAK3CC,EAAAA,eAL2C;AAM3CC,EAAAA,IAN2C;AAO3CC,EAAAA,YAP2C;AAQ3CC,EAAAA,IAR2C;AAS3CC,EAAAA;AAT2C,CAA7B,EAUX;AACH,QAAMC,oBAAoB,GAAKC,WAAF,IAAqBC,IAAF,IAAY;AAC3D;AACA,UAAMC,UAAU,GAAG,EAClB,GAAGC,MAAM,CAACC,IAAP,CAAaN,MAAb,EAAsBO,MAAtB,CAA8B,CAAEC,GAAF,EAAOC,GAAP,KAAgB;AAChDD,QAAAA,GAAG,CAAEC,GAAF,CAAH,GAAa,0CACZT,MAAM,CAAES,GAAF,CADM,EAEZX,YAFY,CAAb;AAIA,eAAOU,GAAP;AACA,OANE,EAMA,EANA;AADe,KAAnB;AAUAJ,IAAAA,UAAU,CAAEF,WAAF,CAAV,GAA4BC,IAA5B;AAEAV,IAAAA,QAAQ,CAAEW,UAAF,CAAR;AACA,GAfD;;AAiBA,SACC,4BAAC,4BAAD;AACC,IAAA,KAAK,EAAGM,cAAQb,IAAR,CADT;AAEC,IAAA,kBAAkB,EAAGL,kBAFtB;AAGC,IAAA,QAAQ,EAAGS,oBAAoB,CAAEJ,IAAF,CAHhC;AAIC,IAAA,UAAU,EAAGH,UAJd;AAKC,IAAA,WAAW,EAAGC,WALf;AAMC,IAAA,eAAe,EAAGC,eANnB;AAOC,IAAA,IAAI,EAAGC,IAPR;AAQC,IAAA,YAAY,EAAGC,YARhB;AASC,IAAA,IAAI,EAAGC,IATR;AAUC,IAAA,KAAK,EAAGC,MAAM,CAAEH,IAAF,CAVf;AAWC,IAAA,cAAc,EAAG;AAXlB,IADD;AAeA","sourcesContent":["/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport { LABELS, getPresetValueFromCustomValue } from '../utils';\n\nexport default function SingleInputControl( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tshowSideInLabel,\n\tside,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\tconst createHandleOnChange = ( currentSide ) => ( next ) => {\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tnextValues[ currentSide ] = next;\n\n\t\tonChange( nextValues );\n\t};\n\n\treturn (\n\t\t<SpacingInputControl\n\t\t\tlabel={ LABELS[ side ] }\n\t\t\tminimumCustomValue={ minimumCustomValue }\n\t\t\tonChange={ createHandleOnChange( side ) }\n\t\t\tonMouseOut={ onMouseOut }\n\t\t\tonMouseOver={ onMouseOver }\n\t\t\tshowSideInLabel={ showSideInLabel }\n\t\t\tside={ side }\n\t\t\tspacingSizes={ spacingSizes }\n\t\t\ttype={ type }\n\t\t\tvalue={ values[ side ] }\n\t\t\twithInputField={ false }\n\t\t/>\n\t);\n}\n"]}
@@ -115,8 +115,8 @@ function getCustomValueFromPreset(value, spacingSizes) {
115
115
 
116
116
 
117
117
  function getPresetValueFromCustomValue(value, spacingSizes) {
118
- // Return value as-is if it is already a preset;
119
- if (isValueSpacingPreset(value)) {
118
+ // Return value as-is if it is undefined or is already a preset, or '0';
119
+ if (!value || isValueSpacingPreset(value) || value === '0') {
120
120
  return value;
121
121
  }
122
122
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/utils.js"],"names":["ALL_SIDES","DEFAULT_VALUES","top","undefined","right","bottom","left","ICONS","custom","sidesAll","axial","sidesAxial","horizontal","sidesHorizontal","vertical","sidesVertical","sidesTop","sidesRight","sidesBottom","sidesLeft","LABELS","default","mixed","VIEWS","isValueSpacingPreset","value","includes","getCustomValueFromPreset","spacingSizes","slug","getSpacingPresetSlug","spacingSize","find","size","String","getPresetValueFromCustomValue","spacingMatch","getSpacingPresetCssVar","match","getSliderValueFromPreset","presetValue","parseFloat","sliderValue","findIndex","NaN","mode","arr","sort","a","b","filter","v","length","pop","getAllRawValue","values","Object","isValuesMixed","sides","Set","isValuesDefined","hasAxisSupport","axis","hasHorizontalSupport","hasVerticalSupport","getSupportedMenuItems","menuItems","label","icon","numberOfIndividualSides","forEach","side","hasBalancedSidesSupport","counts","getInitialView","sideValues","Boolean","hasMatchingAxialValues","hasNoValuesAndBalancedSides","entries","some","key"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;AAaO,MAAMA,SAAS,GAAG,CAAE,KAAF,EAAS,OAAT,EAAkB,QAAlB,EAA4B,MAA5B,CAAlB;;AAEA,MAAMC,cAAc,GAAG;AAC7BC,EAAAA,GAAG,EAAEC,SADwB;AAE7BC,EAAAA,KAAK,EAAED,SAFsB;AAG7BE,EAAAA,MAAM,EAAEF,SAHqB;AAI7BG,EAAAA,IAAI,EAAEH;AAJuB,CAAvB;;AAOA,MAAMI,KAAK,GAAG;AACpBC,EAAAA,MAAM,EAAEC,eADY;AAEpBC,EAAAA,KAAK,EAAEC,iBAFa;AAGpBC,EAAAA,UAAU,EAAEC,sBAHQ;AAIpBC,EAAAA,QAAQ,EAAEC,oBAJU;AAKpBb,EAAAA,GAAG,EAAEc,eALe;AAMpBZ,EAAAA,KAAK,EAAEa,iBANa;AAOpBZ,EAAAA,MAAM,EAAEa,kBAPY;AAQpBZ,EAAAA,IAAI,EAAEa;AARc,CAAd;;AAWA,MAAMC,MAAM,GAAG;AACrBC,EAAAA,OAAO,EAAE,cAAI,iBAAJ,CADY;AAErBnB,EAAAA,GAAG,EAAE,cAAI,KAAJ,CAFgB;AAGrBG,EAAAA,MAAM,EAAE,cAAI,QAAJ,CAHa;AAIrBC,EAAAA,IAAI,EAAE,cAAI,MAAJ,CAJe;AAKrBF,EAAAA,KAAK,EAAE,cAAI,OAAJ,CALc;AAMrBkB,EAAAA,KAAK,EAAE,cAAI,OAAJ,CANc;AAOrBR,EAAAA,QAAQ,EAAE,cAAI,UAAJ,CAPW;AAQrBF,EAAAA,UAAU,EAAE,cAAI,YAAJ,CARS;AASrBF,EAAAA,KAAK,EAAE,cAAI,uBAAJ,CATc;AAUrBF,EAAAA,MAAM,EAAE,cAAI,QAAJ;AAVa,CAAf;;AAaA,MAAMe,KAAK,GAAG;AACpBb,EAAAA,KAAK,EAAE,OADa;AAEpBR,EAAAA,GAAG,EAAE,KAFe;AAGpBE,EAAAA,KAAK,EAAE,OAHa;AAIpBC,EAAAA,MAAM,EAAE,QAJY;AAKpBC,EAAAA,IAAI,EAAE,MALc;AAMpBE,EAAAA,MAAM,EAAE;AANY,CAAd;AASP;AACA;AACA;AACA;AACA;AACA;AACA;;;;AACO,SAASgB,oBAAT,CAA+BC,KAA/B,EAAuC;AAC7C,MAAK,CAAEA,KAAK,EAAEC,QAAd,EAAyB;AACxB,WAAO,KAAP;AACA;;AACD,SAAOD,KAAK,KAAK,GAAV,IAAiBA,KAAK,CAACC,QAAN,CAAgB,qBAAhB,CAAxB;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,wBAAT,CAAmCF,KAAnC,EAA0CG,YAA1C,EAAyD;AAC/D,MAAK,CAAEJ,oBAAoB,CAAEC,KAAF,CAA3B,EAAuC;AACtC,WAAOA,KAAP;AACA;;AAED,QAAMI,IAAI,GAAGC,oBAAoB,CAAEL,KAAF,CAAjC;AACA,QAAMM,WAAW,GAAGH,YAAY,CAACI,IAAb,CACjBC,IAAF,IAAYC,MAAM,CAAED,IAAI,CAACJ,IAAP,CAAN,KAAwBA,IADjB,CAApB;AAIA,SAAOE,WAAW,EAAEE,IAApB;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASE,6BAAT,CAAwCV,KAAxC,EAA+CG,YAA/C,EAA8D;AACpE;AACA,MAAKJ,oBAAoB,CAAEC,KAAF,CAAzB,EAAqC;AACpC,WAAOA,KAAP;AACA;;AAED,QAAMW,YAAY,GAAGR,YAAY,CAACI,IAAb,CAClBC,IAAF,IAAYC,MAAM,CAAED,IAAI,CAACA,IAAP,CAAN,KAAwBC,MAAM,CAAET,KAAF,CADtB,CAArB;;AAIA,MAAKW,YAAY,EAAEP,IAAnB,EAA0B;AACzB,WAAQ,sBAAsBO,YAAY,CAACP,IAAM,EAAjD;AACA;;AAED,SAAOJ,KAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASY,sBAAT,CAAiCZ,KAAjC,EAAyC;AAC/C,MAAK,CAAEA,KAAP,EAAe;AACd;AACA;;AAED,QAAMI,IAAI,GAAGJ,KAAK,CAACa,KAAN,CAAa,2BAAb,CAAb;;AAEA,MAAK,CAAET,IAAP,EAAc;AACb,WAAOJ,KAAP;AACA;;AAED,SAAQ,8BAA8BI,IAAI,CAAE,CAAF,CAAO,GAAjD;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,oBAAT,CAA+BL,KAA/B,EAAuC;AAC7C,MAAK,CAAEA,KAAP,EAAe;AACd;AACA;;AAED,MAAKA,KAAK,KAAK,GAAV,IAAiBA,KAAK,KAAK,SAAhC,EAA4C;AAC3C,WAAOA,KAAP;AACA;;AAED,QAAMI,IAAI,GAAGJ,KAAK,CAACa,KAAN,CAAa,2BAAb,CAAb;AAEA,SAAOT,IAAI,GAAGA,IAAI,CAAE,CAAF,CAAP,GAAe1B,SAA1B;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASoC,wBAAT,CAAmCC,WAAnC,EAAgDZ,YAAhD,EAA+D;AACrE,MAAKY,WAAW,KAAKrC,SAArB,EAAiC;AAChC,WAAO,CAAP;AACA;;AACD,QAAM0B,IAAI,GACTY,UAAU,CAAED,WAAF,EAAe,EAAf,CAAV,KAAkC,CAAlC,GACG,GADH,GAEGV,oBAAoB,CAAEU,WAAF,CAHxB;AAIA,QAAME,WAAW,GAAGd,YAAY,CAACe,SAAb,CAA0BZ,WAAF,IAAmB;AAC9D,WAAOG,MAAM,CAAEH,WAAW,CAACF,IAAd,CAAN,KAA+BA,IAAtC;AACA,GAFmB,CAApB,CARqE,CAYrE;;AACA,SAAOa,WAAW,KAAK,CAAC,CAAjB,GAAqBA,WAArB,GAAmCE,GAA1C;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,IAAT,CAAeC,GAAf,EAAqB;AACpB,SAAOA,GAAG,CACRC,IADK,CAEL,CAAEC,CAAF,EAAKC,CAAL,KACCH,GAAG,CAACI,MAAJ,CAAcC,CAAF,IAASA,CAAC,KAAKH,CAA3B,EAA+BI,MAA/B,GACAN,GAAG,CAACI,MAAJ,CAAcC,CAAF,IAASA,CAAC,KAAKF,CAA3B,EAA+BG,MAJ3B,EAMLC,GANK,EAAP;AAOA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,cAAT,CAAyBC,MAAM,GAAG,EAAlC,EAAuC;AAC7C,SAAOV,IAAI,CAAEW,MAAM,CAACD,MAAP,CAAeA,MAAf,CAAF,CAAX;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASE,aAAT,CAAwBF,MAAM,GAAG,EAAjC,EAAqCG,KAAK,GAAG1D,SAA7C,EAAyD;AAC/D,SACGwD,MAAM,CAACD,MAAP,CAAeA,MAAf,EAAwBH,MAAxB,IAAkC,CAAlC,IACDI,MAAM,CAACD,MAAP,CAAeA,MAAf,EAAwBH,MAAxB,GAAiCM,KAAK,CAACN,MADxC,IAEA,IAAIO,GAAJ,CAASH,MAAM,CAACD,MAAP,CAAeA,MAAf,CAAT,EAAmCtB,IAAnC,GAA0C,CAH3C;AAKA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAS2B,eAAT,CAA0BL,MAA1B,EAAmC;AACzC,MAAKA,MAAM,KAAKpD,SAAX,IAAwBoD,MAAM,KAAK,IAAxC,EAA+C;AAC9C,WAAO,KAAP;AACA;;AACD,SAAOC,MAAM,CAACD,MAAP,CAAeA,MAAf,EAAwBL,MAAxB,CAAkCzB,KAAF,IAAa,CAAC,CAAEA,KAAhD,EAAwD2B,MAAxD,GAAiE,CAAxE;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASS,cAAT,CAAyBH,KAAzB,EAAgCI,IAAhC,EAAuC;AAC7C,MAAK,CAAEJ,KAAF,IAAW,CAAEA,KAAK,CAACN,MAAxB,EAAiC;AAChC,WAAO,KAAP;AACA;;AAED,QAAMW,oBAAoB,GACzBL,KAAK,CAAChC,QAAN,CAAgB,YAAhB,KACEgC,KAAK,CAAChC,QAAN,CAAgB,MAAhB,KAA4BgC,KAAK,CAAChC,QAAN,CAAgB,OAAhB,CAF/B;AAIA,QAAMsC,kBAAkB,GACvBN,KAAK,CAAChC,QAAN,CAAgB,UAAhB,KACEgC,KAAK,CAAChC,QAAN,CAAgB,KAAhB,KAA2BgC,KAAK,CAAChC,QAAN,CAAgB,QAAhB,CAF9B;;AAIA,MAAKoC,IAAI,KAAK,YAAd,EAA6B;AAC5B,WAAOC,oBAAP;AACA;;AAED,MAAKD,IAAI,KAAK,UAAd,EAA2B;AAC1B,WAAOE,kBAAP;AACA;;AAED,SAAOD,oBAAoB,IAAIC,kBAA/B;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,qBAAT,CAAgCP,KAAhC,EAAwC;AAC9C,MAAK,CAAEA,KAAF,IAAW,CAAEA,KAAK,CAACN,MAAxB,EAAiC;AAChC,WAAO,EAAP;AACA;;AAED,QAAMc,SAAS,GAAG,EAAlB,CAL8C,CAO9C;;AACA,QAAMH,oBAAoB,GAAGF,cAAc,CAAEH,KAAF,EAAS,YAAT,CAA3C;AACA,QAAMM,kBAAkB,GAAGH,cAAc,CAAEH,KAAF,EAAS,UAAT,CAAzC;;AAEA,MAAKK,oBAAoB,IAAIC,kBAA7B,EAAkD;AACjDE,IAAAA,SAAS,CAACxD,KAAV,GAAkB;AAAEyD,MAAAA,KAAK,EAAE/C,MAAM,CAACV,KAAhB;AAAuB0D,MAAAA,IAAI,EAAE7D,KAAK,CAACG;AAAnC,KAAlB;AACA,GAFD,MAEO,IAAKqD,oBAAL,EAA4B;AAClCG,IAAAA,SAAS,CAACxD,KAAV,GAAkB;AAAEyD,MAAAA,KAAK,EAAE/C,MAAM,CAACR,UAAhB;AAA4BwD,MAAAA,IAAI,EAAE7D,KAAK,CAACK;AAAxC,KAAlB;AACA,GAFM,MAEA,IAAKoD,kBAAL,EAA0B;AAChCE,IAAAA,SAAS,CAACxD,KAAV,GAAkB;AAAEyD,MAAAA,KAAK,EAAE/C,MAAM,CAACN,QAAhB;AAA0BsD,MAAAA,IAAI,EAAE7D,KAAK,CAACO;AAAtC,KAAlB;AACA,GAjB6C,CAmB9C;AACA;;;AACA,MAAIuD,uBAAuB,GAAG,CAA9B;AAEArE,EAAAA,SAAS,CAACsE,OAAV,CAAqBC,IAAF,IAAY;AAC9B,QAAKb,KAAK,CAAChC,QAAN,CAAgB6C,IAAhB,CAAL,EAA8B;AAC7BF,MAAAA,uBAAuB,IAAI,CAA3B;AACAH,MAAAA,SAAS,CAAEK,IAAF,CAAT,GAAoB;AACnBJ,QAAAA,KAAK,EAAE/C,MAAM,CAAEmD,IAAF,CADM;AAEnBH,QAAAA,IAAI,EAAE7D,KAAK,CAAEgE,IAAF;AAFQ,OAApB;AAIA;AACD,GARD,EAvB8C,CAiC9C;;AACA,MAAKF,uBAAuB,GAAG,CAA/B,EAAmC;AAClCH,IAAAA,SAAS,CAAC1D,MAAV,GAAmB;AAAE2D,MAAAA,KAAK,EAAE/C,MAAM,CAACZ,MAAhB;AAAwB4D,MAAAA,IAAI,EAAE7D,KAAK,CAACC;AAApC,KAAnB;AACA;;AAED,SAAO0D,SAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASM,uBAAT,CAAkCd,KAAK,GAAG,EAA1C,EAA+C;AACrD,QAAMe,MAAM,GAAG;AAAEvE,IAAAA,GAAG,EAAE,CAAP;AAAUE,IAAAA,KAAK,EAAE,CAAjB;AAAoBC,IAAAA,MAAM,EAAE,CAA5B;AAA+BC,IAAAA,IAAI,EAAE;AAArC,GAAf;AACAoD,EAAAA,KAAK,CAACY,OAAN,CAAiBC,IAAF,IAAcE,MAAM,CAAEF,IAAF,CAAN,IAAkB,CAA/C;AAEA,SACC,CAAEE,MAAM,CAACvE,GAAP,GAAauE,MAAM,CAACpE,MAAtB,IAAiC,CAAjC,KAAuC,CAAvC,IACA,CAAEoE,MAAM,CAACnE,IAAP,GAAcmE,MAAM,CAACrE,KAAvB,IAAiC,CAAjC,KAAuC,CAFxC;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASsE,cAAT,CAAyBnB,MAAM,GAAG,EAAlC,EAAsCG,KAAtC,EAA8C;AACpD,QAAM;AAAExD,IAAAA,GAAF;AAAOE,IAAAA,KAAP;AAAcC,IAAAA,MAAd;AAAsBC,IAAAA;AAAtB,MAA+BiD,MAArC;AACA,QAAMoB,UAAU,GAAG,CAAEzE,GAAF,EAAOE,KAAP,EAAcC,MAAd,EAAsBC,IAAtB,EAA6B4C,MAA7B,CAAqC0B,OAArC,CAAnB,CAFoD,CAIpD;AACA;AACA;AACA;;AACA,QAAMC,sBAAsB,GAC3B3E,GAAG,KAAKG,MAAR,IAAkBC,IAAI,KAAKF,KAA3B,KAAsC,CAAC,CAAEF,GAAH,IAAU,CAAC,CAAEI,IAAnD,CADD;AAEA,QAAMwE,2BAA2B,GAChC,CAAEH,UAAU,CAACvB,MAAb,IAAuBoB,uBAAuB,CAAEd,KAAF,CAD/C;;AAGA,MACCG,cAAc,CAAEH,KAAF,CAAd,KACEmB,sBAAsB,IAAIC,2BAD5B,CADD,EAGE;AACD,WAAOvD,KAAK,CAACb,KAAb;AACA,GAlBmD,CAoBpD;AACA;;;AACA,MAAKiE,UAAU,CAACvB,MAAX,KAAsB,CAA3B,EAA+B;AAC9B,QAAImB,IAAJ;AAEAf,IAAAA,MAAM,CAACuB,OAAP,CAAgBxB,MAAhB,EAAyByB,IAAzB,CAA+B,CAAE,CAAEC,GAAF,EAAOxD,KAAP,CAAF,KAAsB;AACpD8C,MAAAA,IAAI,GAAGU,GAAP;AACA,aAAOxD,KAAK,KAAKtB,SAAjB;AACA,KAHD;AAKA,WAAOoE,IAAP;AACA,GA/BmD,CAiCpD;;;AACA,MAAKb,KAAK,EAAEN,MAAP,KAAkB,CAAlB,IAAuB,CAAEuB,UAAU,CAACvB,MAAzC,EAAkD;AACjD,WAAOM,KAAK,CAAE,CAAF,CAAZ;AACA,GApCmD,CAsCpD;;;AACA,SAAOnC,KAAK,CAACf,MAAb;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tsidesAll,\n\tsidesAxial,\n\tsidesBottom,\n\tsidesHorizontal,\n\tsidesLeft,\n\tsidesRight,\n\tsidesTop,\n\tsidesVertical,\n} from '@wordpress/icons';\n\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\n\nexport const DEFAULT_VALUES = {\n\ttop: undefined,\n\tright: undefined,\n\tbottom: undefined,\n\tleft: undefined,\n};\n\nexport const ICONS = {\n\tcustom: sidesAll,\n\taxial: sidesAxial,\n\thorizontal: sidesHorizontal,\n\tvertical: sidesVertical,\n\ttop: sidesTop,\n\tright: sidesRight,\n\tbottom: sidesBottom,\n\tleft: sidesLeft,\n};\n\nexport const LABELS = {\n\tdefault: __( 'Spacing control' ),\n\ttop: __( 'Top' ),\n\tbottom: __( 'Bottom' ),\n\tleft: __( 'Left' ),\n\tright: __( 'Right' ),\n\tmixed: __( 'Mixed' ),\n\tvertical: __( 'Vertical' ),\n\thorizontal: __( 'Horizontal' ),\n\taxial: __( 'Horizontal & vertical' ),\n\tcustom: __( 'Custom' ),\n};\n\nexport const VIEWS = {\n\taxial: 'axial',\n\ttop: 'top',\n\tright: 'right',\n\tbottom: 'bottom',\n\tleft: 'left',\n\tcustom: 'custom',\n};\n\n/**\n * Checks is given value is a spacing preset.\n *\n * @param {string} value Value to check\n *\n * @return {boolean} Return true if value is string in format var:preset|spacing|.\n */\nexport function isValueSpacingPreset( value ) {\n\tif ( ! value?.includes ) {\n\t\treturn false;\n\t}\n\treturn value === '0' || value.includes( 'var:preset|spacing|' );\n}\n\n/**\n * Converts a spacing preset into a custom value.\n *\n * @param {string} value Value to convert\n * @param {Array} spacingSizes Array of the current spacing preset objects\n *\n * @return {string} Mapping of the spacing preset to its equivalent custom value.\n */\nexport function getCustomValueFromPreset( value, spacingSizes ) {\n\tif ( ! isValueSpacingPreset( value ) ) {\n\t\treturn value;\n\t}\n\n\tconst slug = getSpacingPresetSlug( value );\n\tconst spacingSize = spacingSizes.find(\n\t\t( size ) => String( size.slug ) === slug\n\t);\n\n\treturn spacingSize?.size;\n}\n\n/**\n * Converts a custom value to preset value if one can be found.\n *\n * Returns value as-is if no match is found.\n *\n * @param {string} value Value to convert\n * @param {Array} spacingSizes Array of the current spacing preset objects\n *\n * @return {string} The preset value if it can be found.\n */\nexport function getPresetValueFromCustomValue( value, spacingSizes ) {\n\t// Return value as-is if it is already a preset;\n\tif ( isValueSpacingPreset( value ) ) {\n\t\treturn value;\n\t}\n\n\tconst spacingMatch = spacingSizes.find(\n\t\t( size ) => String( size.size ) === String( value )\n\t);\n\n\tif ( spacingMatch?.slug ) {\n\t\treturn `var:preset|spacing|${ spacingMatch.slug }`;\n\t}\n\n\treturn value;\n}\n\n/**\n * Converts a spacing preset into a custom value.\n *\n * @param {string} value Value to convert.\n *\n * @return {string | undefined} CSS var string for given spacing preset value.\n */\nexport function getSpacingPresetCssVar( value ) {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\tconst slug = value.match( /var:preset\\|spacing\\|(.+)/ );\n\n\tif ( ! slug ) {\n\t\treturn value;\n\t}\n\n\treturn `var(--wp--preset--spacing--${ slug[ 1 ] })`;\n}\n\n/**\n * Returns the slug section of the given spacing preset string.\n *\n * @param {string} value Value to extract slug from.\n *\n * @return {string|undefined} The int value of the slug from given spacing preset.\n */\nexport function getSpacingPresetSlug( value ) {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\tif ( value === '0' || value === 'default' ) {\n\t\treturn value;\n\t}\n\n\tconst slug = value.match( /var:preset\\|spacing\\|(.+)/ );\n\n\treturn slug ? slug[ 1 ] : undefined;\n}\n\n/**\n * Converts spacing preset value into a Range component value .\n *\n * @param {string} presetValue Value to convert to Range value.\n * @param {Array} spacingSizes Array of current spacing preset value objects.\n *\n * @return {number} The int value for use in Range control.\n */\nexport function getSliderValueFromPreset( presetValue, spacingSizes ) {\n\tif ( presetValue === undefined ) {\n\t\treturn 0;\n\t}\n\tconst slug =\n\t\tparseFloat( presetValue, 10 ) === 0\n\t\t\t? '0'\n\t\t\t: getSpacingPresetSlug( presetValue );\n\tconst sliderValue = spacingSizes.findIndex( ( spacingSize ) => {\n\t\treturn String( spacingSize.slug ) === slug;\n\t} );\n\n\t// Returning NaN rather than undefined as undefined makes range control thumb sit in center\n\treturn sliderValue !== -1 ? sliderValue : NaN;\n}\n\n/**\n * Gets an items with the most occurrence within an array\n * https://stackoverflow.com/a/20762713\n *\n * @param {Array<any>} arr Array of items to check.\n * @return {any} The item with the most occurrences.\n */\nfunction mode( arr ) {\n\treturn arr\n\t\t.sort(\n\t\t\t( a, b ) =>\n\t\t\t\tarr.filter( ( v ) => v === a ).length -\n\t\t\t\tarr.filter( ( v ) => v === b ).length\n\t\t)\n\t\t.pop();\n}\n\n/**\n * Gets the 'all' input value from values data.\n *\n * @param {Object} values Box spacing values\n *\n * @return {string} The most common value from all sides of box.\n */\nexport function getAllRawValue( values = {} ) {\n\treturn mode( Object.values( values ) );\n}\n\n/**\n * Checks to determine if values are mixed.\n *\n * @param {Object} values Box values.\n * @param {Array} sides Sides that values relate to.\n *\n * @return {boolean} Whether values are mixed.\n */\nexport function isValuesMixed( values = {}, sides = ALL_SIDES ) {\n\treturn (\n\t\t( Object.values( values ).length >= 1 &&\n\t\t\tObject.values( values ).length < sides.length ) ||\n\t\tnew Set( Object.values( values ) ).size > 1\n\t);\n}\n\n/**\n * Checks to determine if values are defined.\n *\n * @param {Object} values Box values.\n *\n * @return {boolean} Whether values are defined.\n */\nexport function isValuesDefined( values ) {\n\tif ( values === undefined || values === null ) {\n\t\treturn false;\n\t}\n\treturn Object.values( values ).filter( ( value ) => !! value ).length > 0;\n}\n\n/**\n * Determines whether a particular axis has support. If no axis is\n * specified, this function checks if either axis is supported.\n *\n * @param {Array} sides Supported sides.\n * @param {string} axis Which axis to check.\n *\n * @return {boolean} Whether there is support for the specified axis or both axes.\n */\nexport function hasAxisSupport( sides, axis ) {\n\tif ( ! sides || ! sides.length ) {\n\t\treturn false;\n\t}\n\n\tconst hasHorizontalSupport =\n\t\tsides.includes( 'horizontal' ) ||\n\t\t( sides.includes( 'left' ) && sides.includes( 'right' ) );\n\n\tconst hasVerticalSupport =\n\t\tsides.includes( 'vertical' ) ||\n\t\t( sides.includes( 'top' ) && sides.includes( 'bottom' ) );\n\n\tif ( axis === 'horizontal' ) {\n\t\treturn hasHorizontalSupport;\n\t}\n\n\tif ( axis === 'vertical' ) {\n\t\treturn hasVerticalSupport;\n\t}\n\n\treturn hasHorizontalSupport || hasVerticalSupport;\n}\n\n/**\n * Determines which menu options should be included in the SidePicker.\n *\n * @param {Array} sides Supported sides.\n *\n * @return {Object} Menu options with each option containing label & icon.\n */\nexport function getSupportedMenuItems( sides ) {\n\tif ( ! sides || ! sides.length ) {\n\t\treturn {};\n\t}\n\n\tconst menuItems = {};\n\n\t// Determine the primary \"side\" menu options.\n\tconst hasHorizontalSupport = hasAxisSupport( sides, 'horizontal' );\n\tconst hasVerticalSupport = hasAxisSupport( sides, 'vertical' );\n\n\tif ( hasHorizontalSupport && hasVerticalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.axial, icon: ICONS.axial };\n\t} else if ( hasHorizontalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.horizontal, icon: ICONS.horizontal };\n\t} else if ( hasVerticalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.vertical, icon: ICONS.vertical };\n\t}\n\n\t// Track whether we have any individual sides so we can omit the custom\n\t// option if required.\n\tlet numberOfIndividualSides = 0;\n\n\tALL_SIDES.forEach( ( side ) => {\n\t\tif ( sides.includes( side ) ) {\n\t\t\tnumberOfIndividualSides += 1;\n\t\t\tmenuItems[ side ] = {\n\t\t\t\tlabel: LABELS[ side ],\n\t\t\t\ticon: ICONS[ side ],\n\t\t\t};\n\t\t}\n\t} );\n\n\t// Add custom item if there are enough sides to warrant a separated view.\n\tif ( numberOfIndividualSides > 1 ) {\n\t\tmenuItems.custom = { label: LABELS.custom, icon: ICONS.custom };\n\t}\n\n\treturn menuItems;\n}\n\n/**\n * Checks if the supported sides are balanced for each axis.\n * - Horizontal - both left and right sides are supported.\n * - Vertical - both top and bottom are supported.\n *\n * @param {Array} sides The supported sides which may be axes as well.\n *\n * @return {boolean} Whether or not the supported sides are balanced.\n */\nexport function hasBalancedSidesSupport( sides = [] ) {\n\tconst counts = { top: 0, right: 0, bottom: 0, left: 0 };\n\tsides.forEach( ( side ) => ( counts[ side ] += 1 ) );\n\n\treturn (\n\t\t( counts.top + counts.bottom ) % 2 === 0 &&\n\t\t( counts.left + counts.right ) % 2 === 0\n\t);\n}\n\n/**\n * Determines which view the SpacingSizesControl should default to on its\n * first render; Axial, Custom, or Single side.\n *\n * @param {Object} values Current side values.\n * @param {Array} sides Supported sides.\n *\n * @return {string} View to display.\n */\nexport function getInitialView( values = {}, sides ) {\n\tconst { top, right, bottom, left } = values;\n\tconst sideValues = [ top, right, bottom, left ].filter( Boolean );\n\n\t// Axial ( Horizontal & vertical ).\n\t// - Has axial side support\n\t// - Has axial side values which match\n\t// - Has no values and the supported sides are balanced\n\tconst hasMatchingAxialValues =\n\t\ttop === bottom && left === right && ( !! top || !! left );\n\tconst hasNoValuesAndBalancedSides =\n\t\t! sideValues.length && hasBalancedSidesSupport( sides );\n\n\tif (\n\t\thasAxisSupport( sides ) &&\n\t\t( hasMatchingAxialValues || hasNoValuesAndBalancedSides )\n\t) {\n\t\treturn VIEWS.axial;\n\t}\n\n\t// Single side.\n\t// - Ensure the side returned is the first side that has a value.\n\tif ( sideValues.length === 1 ) {\n\t\tlet side;\n\n\t\tObject.entries( values ).some( ( [ key, value ] ) => {\n\t\t\tside = key;\n\t\t\treturn value !== undefined;\n\t\t} );\n\n\t\treturn side;\n\t}\n\n\t// Only single side supported and no value defined.\n\tif ( sides?.length === 1 && ! sideValues.length ) {\n\t\treturn sides[ 0 ];\n\t}\n\n\t// Default to the Custom (separated sides) view.\n\treturn VIEWS.custom;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/utils.js"],"names":["ALL_SIDES","DEFAULT_VALUES","top","undefined","right","bottom","left","ICONS","custom","sidesAll","axial","sidesAxial","horizontal","sidesHorizontal","vertical","sidesVertical","sidesTop","sidesRight","sidesBottom","sidesLeft","LABELS","default","mixed","VIEWS","isValueSpacingPreset","value","includes","getCustomValueFromPreset","spacingSizes","slug","getSpacingPresetSlug","spacingSize","find","size","String","getPresetValueFromCustomValue","spacingMatch","getSpacingPresetCssVar","match","getSliderValueFromPreset","presetValue","parseFloat","sliderValue","findIndex","NaN","mode","arr","sort","a","b","filter","v","length","pop","getAllRawValue","values","Object","isValuesMixed","sides","Set","isValuesDefined","hasAxisSupport","axis","hasHorizontalSupport","hasVerticalSupport","getSupportedMenuItems","menuItems","label","icon","numberOfIndividualSides","forEach","side","hasBalancedSidesSupport","counts","getInitialView","sideValues","Boolean","hasMatchingAxialValues","hasNoValuesAndBalancedSides","entries","some","key"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tsidesAll,\n\tsidesAxial,\n\tsidesBottom,\n\tsidesHorizontal,\n\tsidesLeft,\n\tsidesRight,\n\tsidesTop,\n\tsidesVertical,\n} from '@wordpress/icons';\n\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\n\nexport const DEFAULT_VALUES = {\n\ttop: undefined,\n\tright: undefined,\n\tbottom: undefined,\n\tleft: undefined,\n};\n\nexport const ICONS = {\n\tcustom: sidesAll,\n\taxial: sidesAxial,\n\thorizontal: sidesHorizontal,\n\tvertical: sidesVertical,\n\ttop: sidesTop,\n\tright: sidesRight,\n\tbottom: sidesBottom,\n\tleft: sidesLeft,\n};\n\nexport const LABELS = {\n\tdefault: __( 'Spacing control' ),\n\ttop: __( 'Top' ),\n\tbottom: __( 'Bottom' ),\n\tleft: __( 'Left' ),\n\tright: __( 'Right' ),\n\tmixed: __( 'Mixed' ),\n\tvertical: __( 'Vertical' ),\n\thorizontal: __( 'Horizontal' ),\n\taxial: __( 'Horizontal & vertical' ),\n\tcustom: __( 'Custom' ),\n};\n\nexport const VIEWS = {\n\taxial: 'axial',\n\ttop: 'top',\n\tright: 'right',\n\tbottom: 'bottom',\n\tleft: 'left',\n\tcustom: 'custom',\n};\n\n/**\n * Checks is given value is a spacing preset.\n *\n * @param {string} value Value to check\n *\n * @return {boolean} Return true if value is string in format var:preset|spacing|.\n */\nexport function isValueSpacingPreset( value ) {\n\tif ( ! value?.includes ) {\n\t\treturn false;\n\t}\n\treturn value === '0' || value.includes( 'var:preset|spacing|' );\n}\n\n/**\n * Converts a spacing preset into a custom value.\n *\n * @param {string} value Value to convert\n * @param {Array} spacingSizes Array of the current spacing preset objects\n *\n * @return {string} Mapping of the spacing preset to its equivalent custom value.\n */\nexport function getCustomValueFromPreset( value, spacingSizes ) {\n\tif ( ! isValueSpacingPreset( value ) ) {\n\t\treturn value;\n\t}\n\n\tconst slug = getSpacingPresetSlug( value );\n\tconst spacingSize = spacingSizes.find(\n\t\t( size ) => String( size.slug ) === slug\n\t);\n\n\treturn spacingSize?.size;\n}\n\n/**\n * Converts a custom value to preset value if one can be found.\n *\n * Returns value as-is if no match is found.\n *\n * @param {string} value Value to convert\n * @param {Array} spacingSizes Array of the current spacing preset objects\n *\n * @return {string} The preset value if it can be found.\n */\nexport function getPresetValueFromCustomValue( value, spacingSizes ) {\n\t// Return value as-is if it is undefined or is already a preset, or '0';\n\tif ( ! value || isValueSpacingPreset( value ) || value === '0' ) {\n\t\treturn value;\n\t}\n\n\tconst spacingMatch = spacingSizes.find(\n\t\t( size ) => String( size.size ) === String( value )\n\t);\n\n\tif ( spacingMatch?.slug ) {\n\t\treturn `var:preset|spacing|${ spacingMatch.slug }`;\n\t}\n\n\treturn value;\n}\n\n/**\n * Converts a spacing preset into a custom value.\n *\n * @param {string} value Value to convert.\n *\n * @return {string | undefined} CSS var string for given spacing preset value.\n */\nexport function getSpacingPresetCssVar( value ) {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\tconst slug = value.match( /var:preset\\|spacing\\|(.+)/ );\n\n\tif ( ! slug ) {\n\t\treturn value;\n\t}\n\n\treturn `var(--wp--preset--spacing--${ slug[ 1 ] })`;\n}\n\n/**\n * Returns the slug section of the given spacing preset string.\n *\n * @param {string} value Value to extract slug from.\n *\n * @return {string|undefined} The int value of the slug from given spacing preset.\n */\nexport function getSpacingPresetSlug( value ) {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\tif ( value === '0' || value === 'default' ) {\n\t\treturn value;\n\t}\n\n\tconst slug = value.match( /var:preset\\|spacing\\|(.+)/ );\n\n\treturn slug ? slug[ 1 ] : undefined;\n}\n\n/**\n * Converts spacing preset value into a Range component value .\n *\n * @param {string} presetValue Value to convert to Range value.\n * @param {Array} spacingSizes Array of current spacing preset value objects.\n *\n * @return {number} The int value for use in Range control.\n */\nexport function getSliderValueFromPreset( presetValue, spacingSizes ) {\n\tif ( presetValue === undefined ) {\n\t\treturn 0;\n\t}\n\tconst slug =\n\t\tparseFloat( presetValue, 10 ) === 0\n\t\t\t? '0'\n\t\t\t: getSpacingPresetSlug( presetValue );\n\tconst sliderValue = spacingSizes.findIndex( ( spacingSize ) => {\n\t\treturn String( spacingSize.slug ) === slug;\n\t} );\n\n\t// Returning NaN rather than undefined as undefined makes range control thumb sit in center\n\treturn sliderValue !== -1 ? sliderValue : NaN;\n}\n\n/**\n * Gets an items with the most occurrence within an array\n * https://stackoverflow.com/a/20762713\n *\n * @param {Array<any>} arr Array of items to check.\n * @return {any} The item with the most occurrences.\n */\nfunction mode( arr ) {\n\treturn arr\n\t\t.sort(\n\t\t\t( a, b ) =>\n\t\t\t\tarr.filter( ( v ) => v === a ).length -\n\t\t\t\tarr.filter( ( v ) => v === b ).length\n\t\t)\n\t\t.pop();\n}\n\n/**\n * Gets the 'all' input value from values data.\n *\n * @param {Object} values Box spacing values\n *\n * @return {string} The most common value from all sides of box.\n */\nexport function getAllRawValue( values = {} ) {\n\treturn mode( Object.values( values ) );\n}\n\n/**\n * Checks to determine if values are mixed.\n *\n * @param {Object} values Box values.\n * @param {Array} sides Sides that values relate to.\n *\n * @return {boolean} Whether values are mixed.\n */\nexport function isValuesMixed( values = {}, sides = ALL_SIDES ) {\n\treturn (\n\t\t( Object.values( values ).length >= 1 &&\n\t\t\tObject.values( values ).length < sides.length ) ||\n\t\tnew Set( Object.values( values ) ).size > 1\n\t);\n}\n\n/**\n * Checks to determine if values are defined.\n *\n * @param {Object} values Box values.\n *\n * @return {boolean} Whether values are defined.\n */\nexport function isValuesDefined( values ) {\n\tif ( values === undefined || values === null ) {\n\t\treturn false;\n\t}\n\treturn Object.values( values ).filter( ( value ) => !! value ).length > 0;\n}\n\n/**\n * Determines whether a particular axis has support. If no axis is\n * specified, this function checks if either axis is supported.\n *\n * @param {Array} sides Supported sides.\n * @param {string} axis Which axis to check.\n *\n * @return {boolean} Whether there is support for the specified axis or both axes.\n */\nexport function hasAxisSupport( sides, axis ) {\n\tif ( ! sides || ! sides.length ) {\n\t\treturn false;\n\t}\n\n\tconst hasHorizontalSupport =\n\t\tsides.includes( 'horizontal' ) ||\n\t\t( sides.includes( 'left' ) && sides.includes( 'right' ) );\n\n\tconst hasVerticalSupport =\n\t\tsides.includes( 'vertical' ) ||\n\t\t( sides.includes( 'top' ) && sides.includes( 'bottom' ) );\n\n\tif ( axis === 'horizontal' ) {\n\t\treturn hasHorizontalSupport;\n\t}\n\n\tif ( axis === 'vertical' ) {\n\t\treturn hasVerticalSupport;\n\t}\n\n\treturn hasHorizontalSupport || hasVerticalSupport;\n}\n\n/**\n * Determines which menu options should be included in the SidePicker.\n *\n * @param {Array} sides Supported sides.\n *\n * @return {Object} Menu options with each option containing label & icon.\n */\nexport function getSupportedMenuItems( sides ) {\n\tif ( ! sides || ! sides.length ) {\n\t\treturn {};\n\t}\n\n\tconst menuItems = {};\n\n\t// Determine the primary \"side\" menu options.\n\tconst hasHorizontalSupport = hasAxisSupport( sides, 'horizontal' );\n\tconst hasVerticalSupport = hasAxisSupport( sides, 'vertical' );\n\n\tif ( hasHorizontalSupport && hasVerticalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.axial, icon: ICONS.axial };\n\t} else if ( hasHorizontalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.horizontal, icon: ICONS.horizontal };\n\t} else if ( hasVerticalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.vertical, icon: ICONS.vertical };\n\t}\n\n\t// Track whether we have any individual sides so we can omit the custom\n\t// option if required.\n\tlet numberOfIndividualSides = 0;\n\n\tALL_SIDES.forEach( ( side ) => {\n\t\tif ( sides.includes( side ) ) {\n\t\t\tnumberOfIndividualSides += 1;\n\t\t\tmenuItems[ side ] = {\n\t\t\t\tlabel: LABELS[ side ],\n\t\t\t\ticon: ICONS[ side ],\n\t\t\t};\n\t\t}\n\t} );\n\n\t// Add custom item if there are enough sides to warrant a separated view.\n\tif ( numberOfIndividualSides > 1 ) {\n\t\tmenuItems.custom = { label: LABELS.custom, icon: ICONS.custom };\n\t}\n\n\treturn menuItems;\n}\n\n/**\n * Checks if the supported sides are balanced for each axis.\n * - Horizontal - both left and right sides are supported.\n * - Vertical - both top and bottom are supported.\n *\n * @param {Array} sides The supported sides which may be axes as well.\n *\n * @return {boolean} Whether or not the supported sides are balanced.\n */\nexport function hasBalancedSidesSupport( sides = [] ) {\n\tconst counts = { top: 0, right: 0, bottom: 0, left: 0 };\n\tsides.forEach( ( side ) => ( counts[ side ] += 1 ) );\n\n\treturn (\n\t\t( counts.top + counts.bottom ) % 2 === 0 &&\n\t\t( counts.left + counts.right ) % 2 === 0\n\t);\n}\n\n/**\n * Determines which view the SpacingSizesControl should default to on its\n * first render; Axial, Custom, or Single side.\n *\n * @param {Object} values Current side values.\n * @param {Array} sides Supported sides.\n *\n * @return {string} View to display.\n */\nexport function getInitialView( values = {}, sides ) {\n\tconst { top, right, bottom, left } = values;\n\tconst sideValues = [ top, right, bottom, left ].filter( Boolean );\n\n\t// Axial ( Horizontal & vertical ).\n\t// - Has axial side support\n\t// - Has axial side values which match\n\t// - Has no values and the supported sides are balanced\n\tconst hasMatchingAxialValues =\n\t\ttop === bottom && left === right && ( !! top || !! left );\n\tconst hasNoValuesAndBalancedSides =\n\t\t! sideValues.length && hasBalancedSidesSupport( sides );\n\n\tif (\n\t\thasAxisSupport( sides ) &&\n\t\t( hasMatchingAxialValues || hasNoValuesAndBalancedSides )\n\t) {\n\t\treturn VIEWS.axial;\n\t}\n\n\t// Single side.\n\t// - Ensure the side returned is the first side that has a value.\n\tif ( sideValues.length === 1 ) {\n\t\tlet side;\n\n\t\tObject.entries( values ).some( ( [ key, value ] ) => {\n\t\t\tside = key;\n\t\t\treturn value !== undefined;\n\t\t} );\n\n\t\treturn side;\n\t}\n\n\t// Only single side supported and no value defined.\n\tif ( sides?.length === 1 && ! sideValues.length ) {\n\t\treturn sides[ 0 ];\n\t}\n\n\t// Default to the Custom (separated sides) view.\n\treturn VIEWS.custom;\n}\n"]}
@@ -75,7 +75,8 @@ function useBlockDisplayInformation(clientId) {
75
75
  if (!clientId) return null;
76
76
  const {
77
77
  getBlockName,
78
- getBlockAttributes
78
+ getBlockAttributes,
79
+ __experimentalGetReusableBlockTitle
79
80
  } = select(_store.store);
80
81
  const {
81
82
  getBlockType,
@@ -86,11 +87,14 @@ function useBlockDisplayInformation(clientId) {
86
87
  if (!blockType) return null;
87
88
  const attributes = getBlockAttributes(clientId);
88
89
  const match = getActiveBlockVariation(blockName, attributes);
89
- const isSynced = (0, _blocks.isReusableBlock)(blockType) || (0, _blocks.isTemplatePart)(blockType);
90
+ const isReusable = (0, _blocks.isReusableBlock)(blockType);
91
+ const resusableTitle = isReusable ? __experimentalGetReusableBlockTitle(attributes.ref) : undefined;
92
+ const title = resusableTitle || blockType.title;
93
+ const isSynced = isReusable || (0, _blocks.isTemplatePart)(blockType);
90
94
  const positionLabel = getPositionTypeLabel(attributes);
91
95
  const blockTypeInfo = {
92
96
  isSynced,
93
- title: blockType.title,
97
+ title,
94
98
  icon: blockType.icon,
95
99
  description: blockType.description,
96
100
  anchor: attributes?.anchor,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/use-block-display-information/index.js"],"names":["getPositionTypeLabel","attributes","positionType","style","position","type","useBlockDisplayInformation","clientId","select","getBlockName","getBlockAttributes","blockEditorStore","getBlockType","getActiveBlockVariation","blocksStore","blockName","blockType","match","isSynced","positionLabel","blockTypeInfo","title","icon","description","anchor"],"mappings":";;;;;;;AAGA;;AACA;;AAKA;;AAKA;;AAdA;AACA;AACA;;AASA;AACA;AACA;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,oBAAT,CAA+BC,UAA/B,EAA4C;AAC3C,QAAMC,YAAY,GAAGD,UAAU,EAAEE,KAAZ,EAAmBC,QAAnB,EAA6BC,IAAlD;;AAEA,MAAKH,YAAY,KAAK,QAAtB,EAAiC;AAChC,WAAO,cAAI,QAAJ,CAAP;AACA;;AAED,MAAKA,YAAY,KAAK,OAAtB,EAAgC;AAC/B,WAAO,cAAI,OAAJ,CAAP;AACA;;AAED,SAAO,IAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEe,SAASI,0BAAT,CAAqCC,QAArC,EAAgD;AAC9D,SAAO,qBACJC,MAAF,IAAc;AACb,QAAK,CAAED,QAAP,EAAkB,OAAO,IAAP;AAClB,UAAM;AAAEE,MAAAA,YAAF;AAAgBC,MAAAA;AAAhB,QACLF,MAAM,CAAEG,YAAF,CADP;AAEA,UAAM;AAAEC,MAAAA,YAAF;AAAgBC,MAAAA;AAAhB,QACLL,MAAM,CAAEM,aAAF,CADP;AAEA,UAAMC,SAAS,GAAGN,YAAY,CAAEF,QAAF,CAA9B;AACA,UAAMS,SAAS,GAAGJ,YAAY,CAAEG,SAAF,CAA9B;AACA,QAAK,CAAEC,SAAP,EAAmB,OAAO,IAAP;AACnB,UAAMf,UAAU,GAAGS,kBAAkB,CAAEH,QAAF,CAArC;AACA,UAAMU,KAAK,GAAGJ,uBAAuB,CAAEE,SAAF,EAAad,UAAb,CAArC;AACA,UAAMiB,QAAQ,GACb,6BAAiBF,SAAjB,KAAgC,4BAAgBA,SAAhB,CADjC;AAEA,UAAMG,aAAa,GAAGnB,oBAAoB,CAAEC,UAAF,CAA1C;AACA,UAAMmB,aAAa,GAAG;AACrBF,MAAAA,QADqB;AAErBG,MAAAA,KAAK,EAAEL,SAAS,CAACK,KAFI;AAGrBC,MAAAA,IAAI,EAAEN,SAAS,CAACM,IAHK;AAIrBC,MAAAA,WAAW,EAAEP,SAAS,CAACO,WAJF;AAKrBC,MAAAA,MAAM,EAAEvB,UAAU,EAAEuB,MALC;AAMrBL,MAAAA,aANqB;AAOrBjB,MAAAA,YAAY,EAAED,UAAU,EAAEE,KAAZ,EAAmBC,QAAnB,EAA6BC;AAPtB,KAAtB;AASA,QAAK,CAAEY,KAAP,EAAe,OAAOG,aAAP;AAEf,WAAO;AACNF,MAAAA,QADM;AAENG,MAAAA,KAAK,EAAEJ,KAAK,CAACI,KAAN,IAAeL,SAAS,CAACK,KAF1B;AAGNC,MAAAA,IAAI,EAAEL,KAAK,CAACK,IAAN,IAAcN,SAAS,CAACM,IAHxB;AAINC,MAAAA,WAAW,EAAEN,KAAK,CAACM,WAAN,IAAqBP,SAAS,CAACO,WAJtC;AAKNC,MAAAA,MAAM,EAAEvB,UAAU,EAAEuB,MALd;AAMNL,MAAAA,aANM;AAONjB,MAAAA,YAAY,EAAED,UAAU,EAAEE,KAAZ,EAAmBC,QAAnB,EAA6BC;AAPrC,KAAP;AASA,GAnCK,EAoCN,CAAEE,QAAF,CApCM,CAAP;AAsCA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tstore as blocksStore,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('@wordpress/blocks').WPIcon} WPIcon */\n\n/**\n * Contains basic block's information for display reasons.\n *\n * @typedef {Object} WPBlockDisplayInformation\n *\n * @property {boolean} isSynced True if is a reusable block or template part\n * @property {string} title Human-readable block type label.\n * @property {WPIcon} icon Block type icon.\n * @property {string} description A detailed block type description.\n * @property {string} anchor HTML anchor.\n */\n\n/**\n * Get the display label for a block's position type.\n *\n * @param {Object} attributes Block attributes.\n * @return {string} The position type label.\n */\nfunction getPositionTypeLabel( attributes ) {\n\tconst positionType = attributes?.style?.position?.type;\n\n\tif ( positionType === 'sticky' ) {\n\t\treturn __( 'Sticky' );\n\t}\n\n\tif ( positionType === 'fixed' ) {\n\t\treturn __( 'Fixed' );\n\t}\n\n\treturn null;\n}\n\n/**\n * Hook used to try to find a matching block variation and return\n * the appropriate information for display reasons. In order to\n * to try to find a match we need to things:\n * 1. Block's client id to extract it's current attributes.\n * 2. A block variation should have set `isActive` prop to a proper function.\n *\n * If for any reason a block variation match cannot be found,\n * the returned information come from the Block Type.\n * If no blockType is found with the provided clientId, returns null.\n *\n * @param {string} clientId Block's client id.\n * @return {?WPBlockDisplayInformation} Block's display information, or `null` when the block or its type not found.\n */\n\nexport default function useBlockDisplayInformation( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! clientId ) return null;\n\t\t\tconst { getBlockName, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tif ( ! blockType ) return null;\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isSynced =\n\t\t\t\tisReusableBlock( blockType ) || isTemplatePart( blockType );\n\t\t\tconst positionLabel = getPositionTypeLabel( attributes );\n\t\t\tconst blockTypeInfo = {\n\t\t\t\tisSynced,\n\t\t\t\ttitle: blockType.title,\n\t\t\t\ticon: blockType.icon,\n\t\t\t\tdescription: blockType.description,\n\t\t\t\tanchor: attributes?.anchor,\n\t\t\t\tpositionLabel,\n\t\t\t\tpositionType: attributes?.style?.position?.type,\n\t\t\t};\n\t\t\tif ( ! match ) return blockTypeInfo;\n\n\t\t\treturn {\n\t\t\t\tisSynced,\n\t\t\t\ttitle: match.title || blockType.title,\n\t\t\t\ticon: match.icon || blockType.icon,\n\t\t\t\tdescription: match.description || blockType.description,\n\t\t\t\tanchor: attributes?.anchor,\n\t\t\t\tpositionLabel,\n\t\t\t\tpositionType: attributes?.style?.position?.type,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/use-block-display-information/index.js"],"names":["getPositionTypeLabel","attributes","positionType","style","position","type","useBlockDisplayInformation","clientId","select","getBlockName","getBlockAttributes","__experimentalGetReusableBlockTitle","blockEditorStore","getBlockType","getActiveBlockVariation","blocksStore","blockName","blockType","match","isReusable","resusableTitle","ref","undefined","title","isSynced","positionLabel","blockTypeInfo","icon","description","anchor"],"mappings":";;;;;;;AAGA;;AACA;;AAKA;;AAKA;;AAdA;AACA;AACA;;AASA;AACA;AACA;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,oBAAT,CAA+BC,UAA/B,EAA4C;AAC3C,QAAMC,YAAY,GAAGD,UAAU,EAAEE,KAAZ,EAAmBC,QAAnB,EAA6BC,IAAlD;;AAEA,MAAKH,YAAY,KAAK,QAAtB,EAAiC;AAChC,WAAO,cAAI,QAAJ,CAAP;AACA;;AAED,MAAKA,YAAY,KAAK,OAAtB,EAAgC;AAC/B,WAAO,cAAI,OAAJ,CAAP;AACA;;AAED,SAAO,IAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEe,SAASI,0BAAT,CAAqCC,QAArC,EAAgD;AAC9D,SAAO,qBACJC,MAAF,IAAc;AACb,QAAK,CAAED,QAAP,EAAkB,OAAO,IAAP;AAClB,UAAM;AACLE,MAAAA,YADK;AAELC,MAAAA,kBAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAEI,YAAF,CAJV;AAKA,UAAM;AAAEC,MAAAA,YAAF;AAAgBC,MAAAA;AAAhB,QACLN,MAAM,CAAEO,aAAF,CADP;AAEA,UAAMC,SAAS,GAAGP,YAAY,CAAEF,QAAF,CAA9B;AACA,UAAMU,SAAS,GAAGJ,YAAY,CAAEG,SAAF,CAA9B;AACA,QAAK,CAAEC,SAAP,EAAmB,OAAO,IAAP;AACnB,UAAMhB,UAAU,GAAGS,kBAAkB,CAAEH,QAAF,CAArC;AACA,UAAMW,KAAK,GAAGJ,uBAAuB,CAAEE,SAAF,EAAaf,UAAb,CAArC;AACA,UAAMkB,UAAU,GAAG,6BAAiBF,SAAjB,CAAnB;AACA,UAAMG,cAAc,GAAGD,UAAU,GAC9BR,mCAAmC,CAAEV,UAAU,CAACoB,GAAb,CADL,GAE9BC,SAFH;AAGA,UAAMC,KAAK,GAAGH,cAAc,IAAIH,SAAS,CAACM,KAA1C;AACA,UAAMC,QAAQ,GAAGL,UAAU,IAAI,4BAAgBF,SAAhB,CAA/B;AACA,UAAMQ,aAAa,GAAGzB,oBAAoB,CAAEC,UAAF,CAA1C;AACA,UAAMyB,aAAa,GAAG;AACrBF,MAAAA,QADqB;AAErBD,MAAAA,KAFqB;AAGrBI,MAAAA,IAAI,EAAEV,SAAS,CAACU,IAHK;AAIrBC,MAAAA,WAAW,EAAEX,SAAS,CAACW,WAJF;AAKrBC,MAAAA,MAAM,EAAE5B,UAAU,EAAE4B,MALC;AAMrBJ,MAAAA,aANqB;AAOrBvB,MAAAA,YAAY,EAAED,UAAU,EAAEE,KAAZ,EAAmBC,QAAnB,EAA6BC;AAPtB,KAAtB;AASA,QAAK,CAAEa,KAAP,EAAe,OAAOQ,aAAP;AAEf,WAAO;AACNF,MAAAA,QADM;AAEND,MAAAA,KAAK,EAAEL,KAAK,CAACK,KAAN,IAAeN,SAAS,CAACM,KAF1B;AAGNI,MAAAA,IAAI,EAAET,KAAK,CAACS,IAAN,IAAcV,SAAS,CAACU,IAHxB;AAINC,MAAAA,WAAW,EAAEV,KAAK,CAACU,WAAN,IAAqBX,SAAS,CAACW,WAJtC;AAKNC,MAAAA,MAAM,EAAE5B,UAAU,EAAE4B,MALd;AAMNJ,MAAAA,aANM;AAONvB,MAAAA,YAAY,EAAED,UAAU,EAAEE,KAAZ,EAAmBC,QAAnB,EAA6BC;AAPrC,KAAP;AASA,GA1CK,EA2CN,CAAEE,QAAF,CA3CM,CAAP;AA6CA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tstore as blocksStore,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('@wordpress/blocks').WPIcon} WPIcon */\n\n/**\n * Contains basic block's information for display reasons.\n *\n * @typedef {Object} WPBlockDisplayInformation\n *\n * @property {boolean} isSynced True if is a reusable block or template part\n * @property {string} title Human-readable block type label.\n * @property {WPIcon} icon Block type icon.\n * @property {string} description A detailed block type description.\n * @property {string} anchor HTML anchor.\n */\n\n/**\n * Get the display label for a block's position type.\n *\n * @param {Object} attributes Block attributes.\n * @return {string} The position type label.\n */\nfunction getPositionTypeLabel( attributes ) {\n\tconst positionType = attributes?.style?.position?.type;\n\n\tif ( positionType === 'sticky' ) {\n\t\treturn __( 'Sticky' );\n\t}\n\n\tif ( positionType === 'fixed' ) {\n\t\treturn __( 'Fixed' );\n\t}\n\n\treturn null;\n}\n\n/**\n * Hook used to try to find a matching block variation and return\n * the appropriate information for display reasons. In order to\n * to try to find a match we need to things:\n * 1. Block's client id to extract it's current attributes.\n * 2. A block variation should have set `isActive` prop to a proper function.\n *\n * If for any reason a block variation match cannot be found,\n * the returned information come from the Block Type.\n * If no blockType is found with the provided clientId, returns null.\n *\n * @param {string} clientId Block's client id.\n * @return {?WPBlockDisplayInformation} Block's display information, or `null` when the block or its type not found.\n */\n\nexport default function useBlockDisplayInformation( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! clientId ) return null;\n\t\t\tconst {\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\t__experimentalGetReusableBlockTitle,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tif ( ! blockType ) return null;\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isReusable = isReusableBlock( blockType );\n\t\t\tconst resusableTitle = isReusable\n\t\t\t\t? __experimentalGetReusableBlockTitle( attributes.ref )\n\t\t\t\t: undefined;\n\t\t\tconst title = resusableTitle || blockType.title;\n\t\t\tconst isSynced = isReusable || isTemplatePart( blockType );\n\t\t\tconst positionLabel = getPositionTypeLabel( attributes );\n\t\t\tconst blockTypeInfo = {\n\t\t\t\tisSynced,\n\t\t\t\ttitle,\n\t\t\t\ticon: blockType.icon,\n\t\t\t\tdescription: blockType.description,\n\t\t\t\tanchor: attributes?.anchor,\n\t\t\t\tpositionLabel,\n\t\t\t\tpositionType: attributes?.style?.position?.type,\n\t\t\t};\n\t\t\tif ( ! match ) return blockTypeInfo;\n\n\t\t\treturn {\n\t\t\t\tisSynced,\n\t\t\t\ttitle: match.title || blockType.title,\n\t\t\t\ticon: match.icon || blockType.icon,\n\t\t\t\tdescription: match.description || blockType.description,\n\t\t\t\tanchor: attributes?.anchor,\n\t\t\t\tpositionLabel,\n\t\t\t\tpositionType: attributes?.style?.position?.type,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n"]}