@wordpress/block-editor 9.5.0 → 9.7.1-next.d6164808d3.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 (548) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-alignment-control/use-available-alignments.js +1 -1
  3. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  4. package/build/components/block-edit-visually-button/index.js +46 -0
  5. package/build/components/block-edit-visually-button/index.js.map +1 -0
  6. package/build/components/block-list/block.js +12 -2
  7. package/build/components/block-list/block.js.map +1 -1
  8. package/build/components/block-list/index.native.js +1 -1
  9. package/build/components/block-list/index.native.js.map +1 -1
  10. package/build/components/block-lock/modal.js +2 -2
  11. package/build/components/block-lock/modal.js.map +1 -1
  12. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  13. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  14. package/build/components/block-mover/mover-description.js +95 -32
  15. package/build/components/block-mover/mover-description.js.map +1 -1
  16. package/build/components/block-popover/inbetween.js +5 -3
  17. package/build/components/block-popover/inbetween.js.map +1 -1
  18. package/build/components/block-settings-menu/index.js +2 -6
  19. package/build/components/block-settings-menu/index.js.map +1 -1
  20. package/build/components/block-settings-menu-controls/index.js +1 -1
  21. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  22. package/build/components/block-styles/index.js +3 -6
  23. package/build/components/block-styles/index.js.map +1 -1
  24. package/build/components/block-styles/preview.native.js +1 -3
  25. package/build/components/block-styles/preview.native.js.map +1 -1
  26. package/build/components/block-switcher/index.js +10 -16
  27. package/build/components/block-switcher/index.js.map +1 -1
  28. package/build/components/block-toolbar/index.js +5 -1
  29. package/build/components/block-toolbar/index.js.map +1 -1
  30. package/build/components/block-tools/block-selection-button.js +1 -7
  31. package/build/components/block-tools/block-selection-button.js.map +1 -1
  32. package/build/components/block-tools/index.js +4 -1
  33. package/build/components/block-tools/index.js.map +1 -1
  34. package/build/components/block-types-list/index.js +1 -1
  35. package/build/components/block-types-list/index.js.map +1 -1
  36. package/build/components/block-types-list/index.native.js +65 -23
  37. package/build/components/block-types-list/index.native.js.map +1 -1
  38. package/build/components/border-radius-control/all-input-control.js +31 -3
  39. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  40. package/build/components/border-radius-control/index.js +23 -7
  41. package/build/components/border-radius-control/index.js.map +1 -1
  42. package/build/components/border-radius-control/input-controls.js +21 -6
  43. package/build/components/border-radius-control/input-controls.js.map +1 -1
  44. package/build/components/border-radius-control/utils.js +13 -16
  45. package/build/components/border-radius-control/utils.js.map +1 -1
  46. package/build/components/colors/utils.js +6 -2
  47. package/build/components/colors/utils.js.map +1 -1
  48. package/build/components/colors/with-colors.js +17 -4
  49. package/build/components/colors/with-colors.js.map +1 -1
  50. package/build/components/colors-gradients/control.js +8 -4
  51. package/build/components/colors-gradients/control.js.map +1 -1
  52. package/build/components/colors-gradients/dropdown.js +9 -3
  53. package/build/components/colors-gradients/dropdown.js.map +1 -1
  54. package/build/components/copy-handler/index.js +6 -0
  55. package/build/components/copy-handler/index.js.map +1 -1
  56. package/build/components/date-format-picker/index.js +2 -7
  57. package/build/components/date-format-picker/index.js.map +1 -1
  58. package/build/components/duotone/components.js +5 -5
  59. package/build/components/duotone/components.js.map +1 -1
  60. package/build/components/font-appearance-control/index.js +10 -4
  61. package/build/components/font-appearance-control/index.js.map +1 -1
  62. package/build/components/font-family/index.js +1 -1
  63. package/build/components/font-family/index.js.map +1 -1
  64. package/build/components/font-sizes/with-font-sizes.js +17 -4
  65. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  66. package/build/components/image-editor/cropper.js +4 -3
  67. package/build/components/image-editor/cropper.js.map +1 -1
  68. package/build/components/image-editor/index.js +3 -1
  69. package/build/components/image-editor/index.js.map +1 -1
  70. package/build/components/image-size-control/index.js +3 -1
  71. package/build/components/image-size-control/index.js.map +1 -1
  72. package/build/components/index.js +22 -6
  73. package/build/components/index.js.map +1 -1
  74. package/build/components/index.native.js +11 -4
  75. package/build/components/index.native.js.map +1 -1
  76. package/build/components/inserter/block-types-tab.native.js +30 -16
  77. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  78. package/build/components/inserter/index.native.js +8 -3
  79. package/build/components/inserter/index.native.js.map +1 -1
  80. package/build/components/inserter/preview-panel.js +8 -8
  81. package/build/components/inserter/preview-panel.js.map +1 -1
  82. package/build/components/inserter/reusable-blocks-tab.native.js +5 -1
  83. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  84. package/build/components/inserter/search-items.js +22 -4
  85. package/build/components/inserter/search-items.js.map +1 -1
  86. package/build/components/inserter/search-results.native.js +5 -2
  87. package/build/components/inserter/search-results.native.js.map +1 -1
  88. package/build/components/inserter/utils.native.js +21 -0
  89. package/build/components/inserter/utils.native.js.map +1 -1
  90. package/build/components/inserter-list-item/index.js +7 -20
  91. package/build/components/inserter-list-item/index.js.map +1 -1
  92. package/build/components/letter-spacing-control/index.js +6 -3
  93. package/build/components/letter-spacing-control/index.js.map +1 -1
  94. package/build/components/line-height-control/index.js +6 -3
  95. package/build/components/line-height-control/index.js.map +1 -1
  96. package/build/components/link-control/is-url-like.js +1 -7
  97. package/build/components/link-control/is-url-like.js.map +1 -1
  98. package/build/components/link-control/link-preview.js +0 -1
  99. package/build/components/link-control/link-preview.js.map +1 -1
  100. package/build/components/link-control/use-search-handler.js +1 -7
  101. package/build/components/link-control/use-search-handler.js.map +1 -1
  102. package/build/components/list-view/block-select-button.js +5 -2
  103. package/build/components/list-view/block-select-button.js.map +1 -1
  104. package/build/components/list-view/branch.js +1 -7
  105. package/build/components/list-view/branch.js.map +1 -1
  106. package/build/components/list-view/expander.js +3 -1
  107. package/build/components/list-view/expander.js.map +1 -1
  108. package/build/components/list-view/use-block-selection.js +1 -7
  109. package/build/components/list-view/use-block-selection.js.map +1 -1
  110. package/build/components/media-upload/index.native.js +8 -3
  111. package/build/components/media-upload/index.native.js.map +1 -1
  112. package/build/components/observe-typing/index.js +22 -8
  113. package/build/components/observe-typing/index.js.map +1 -1
  114. package/build/components/preview-options/index.js +2 -2
  115. package/build/components/preview-options/index.js.map +1 -1
  116. package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
  117. package/build/components/recursion-provider/index.js.map +1 -0
  118. package/build/components/rich-text/format-toolbar-container.js +61 -12
  119. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  120. package/build/components/rich-text/index.js +8 -2
  121. package/build/components/rich-text/index.js.map +1 -1
  122. package/build/components/rich-text/index.native.js +3 -1
  123. package/build/components/rich-text/index.native.js.map +1 -1
  124. package/build/components/rich-text/use-before-input-rules.js +110 -0
  125. package/build/components/rich-text/use-before-input-rules.js.map +1 -0
  126. package/build/components/rich-text/use-enter.js +0 -4
  127. package/build/components/rich-text/use-enter.js.map +1 -1
  128. package/build/components/rich-text/use-format-types.js +39 -22
  129. package/build/components/rich-text/use-format-types.js.map +1 -1
  130. package/build/components/spacing-sizes-control/all-input-control.js +53 -0
  131. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -0
  132. package/build/components/spacing-sizes-control/axial-input-controls.js +69 -0
  133. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  134. package/build/components/spacing-sizes-control/index.js +100 -0
  135. package/build/components/spacing-sizes-control/index.js.map +1 -0
  136. package/build/components/spacing-sizes-control/input-controls.js +52 -0
  137. package/build/components/spacing-sizes-control/input-controls.js.map +1 -0
  138. package/build/components/spacing-sizes-control/linked-button.js +38 -0
  139. package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
  140. package/build/components/spacing-sizes-control/spacing-input-control.js +208 -0
  141. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  142. package/build/components/spacing-sizes-control/utils.js +202 -0
  143. package/build/components/spacing-sizes-control/utils.js.map +1 -0
  144. package/build/components/text-decoration-control/index.js +3 -1
  145. package/build/components/text-decoration-control/index.js.map +1 -1
  146. package/build/components/text-transform-control/index.js +3 -1
  147. package/build/components/text-transform-control/index.js.map +1 -1
  148. package/build/components/url-input/index.js +1 -1
  149. package/build/components/url-input/index.js.map +1 -1
  150. package/build/components/url-popover/image-url-input-ui.js +4 -1
  151. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  152. package/build/components/writing-flow/use-arrow-nav.js +4 -25
  153. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  154. package/build/components/writing-flow/use-drag-selection.js +9 -2
  155. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  156. package/build/components/writing-flow/use-multi-selection.js +4 -2
  157. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  158. package/build/components/writing-flow/use-select-all.js +3 -1
  159. package/build/components/writing-flow/use-select-all.js.map +1 -1
  160. package/build/components/writing-flow/use-selection-observer.js +10 -2
  161. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  162. package/build/components/writing-flow/use-tab-nav.js +1 -1
  163. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  164. package/build/hooks/border-radius.js +2 -7
  165. package/build/hooks/border-radius.js.map +1 -1
  166. package/build/hooks/border.js +2 -2
  167. package/build/hooks/border.js.map +1 -1
  168. package/build/hooks/color.js +4 -1
  169. package/build/hooks/color.js.map +1 -1
  170. package/build/hooks/dimensions.js +15 -0
  171. package/build/hooks/dimensions.js.map +1 -1
  172. package/build/hooks/duotone.js +4 -4
  173. package/build/hooks/duotone.js.map +1 -1
  174. package/build/hooks/gap.js +6 -4
  175. package/build/hooks/gap.js.map +1 -1
  176. package/build/hooks/generated-class-name.js +1 -7
  177. package/build/hooks/generated-class-name.js.map +1 -1
  178. package/build/hooks/layout.js +42 -15
  179. package/build/hooks/layout.js.map +1 -1
  180. package/build/hooks/margin.js +28 -12
  181. package/build/hooks/margin.js.map +1 -1
  182. package/build/hooks/padding.js +19 -8
  183. package/build/hooks/padding.js.map +1 -1
  184. package/build/hooks/style.js +40 -76
  185. package/build/hooks/style.js.map +1 -1
  186. package/build/layouts/constrained.js +215 -0
  187. package/build/layouts/constrained.js.map +1 -0
  188. package/build/layouts/flex.js +1 -1
  189. package/build/layouts/flex.js.map +1 -1
  190. package/build/layouts/flow.js +6 -145
  191. package/build/layouts/flow.js.map +1 -1
  192. package/build/layouts/index.js +3 -1
  193. package/build/layouts/index.js.map +1 -1
  194. package/build/layouts/utils.js +43 -0
  195. package/build/layouts/utils.js.map +1 -1
  196. package/build/store/actions.js +25 -3
  197. package/build/store/actions.js.map +1 -1
  198. package/build/store/selectors.js +4 -6
  199. package/build/store/selectors.js.map +1 -1
  200. package/build/utils/block-variation-transforms.js +15 -9
  201. package/build/utils/block-variation-transforms.js.map +1 -1
  202. package/build/utils/pasting.js +9 -1
  203. package/build/utils/pasting.js.map +1 -1
  204. package/build-module/components/block-alignment-control/use-available-alignments.js +1 -1
  205. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  206. package/build-module/components/block-edit-visually-button/index.js +35 -0
  207. package/build-module/components/block-edit-visually-button/index.js.map +1 -0
  208. package/build-module/components/block-list/block.js +13 -3
  209. package/build-module/components/block-list/block.js.map +1 -1
  210. package/build-module/components/block-list/index.native.js +1 -1
  211. package/build-module/components/block-list/index.native.js.map +1 -1
  212. package/build-module/components/block-lock/modal.js +2 -2
  213. package/build-module/components/block-lock/modal.js.map +1 -1
  214. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +2 -2
  215. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  216. package/build-module/components/block-mover/mover-description.js +97 -33
  217. package/build-module/components/block-mover/mover-description.js.map +1 -1
  218. package/build-module/components/block-popover/inbetween.js +5 -3
  219. package/build-module/components/block-popover/inbetween.js.map +1 -1
  220. package/build-module/components/block-settings-menu/index.js +3 -6
  221. package/build-module/components/block-settings-menu/index.js.map +1 -1
  222. package/build-module/components/block-settings-menu-controls/index.js +2 -2
  223. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  224. package/build-module/components/block-styles/index.js +4 -7
  225. package/build-module/components/block-styles/index.js.map +1 -1
  226. package/build-module/components/block-styles/preview.native.js +2 -3
  227. package/build-module/components/block-styles/preview.native.js.map +1 -1
  228. package/build-module/components/block-switcher/index.js +10 -16
  229. package/build-module/components/block-switcher/index.js.map +1 -1
  230. package/build-module/components/block-toolbar/index.js +4 -1
  231. package/build-module/components/block-toolbar/index.js.map +1 -1
  232. package/build-module/components/block-tools/block-selection-button.js +1 -7
  233. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  234. package/build-module/components/block-tools/index.js +4 -1
  235. package/build-module/components/block-tools/index.js.map +1 -1
  236. package/build-module/components/block-types-list/index.js +1 -1
  237. package/build-module/components/block-types-list/index.js.map +1 -1
  238. package/build-module/components/block-types-list/index.native.js +67 -25
  239. package/build-module/components/block-types-list/index.native.js.map +1 -1
  240. package/build-module/components/border-radius-control/all-input-control.js +32 -4
  241. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  242. package/build-module/components/border-radius-control/index.js +24 -8
  243. package/build-module/components/border-radius-control/index.js.map +1 -1
  244. package/build-module/components/border-radius-control/input-controls.js +22 -7
  245. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  246. package/build-module/components/border-radius-control/utils.js +13 -16
  247. package/build-module/components/border-radius-control/utils.js.map +1 -1
  248. package/build-module/components/colors/utils.js +7 -3
  249. package/build-module/components/colors/utils.js.map +1 -1
  250. package/build-module/components/colors/with-colors.js +16 -3
  251. package/build-module/components/colors/with-colors.js.map +1 -1
  252. package/build-module/components/colors-gradients/control.js +8 -4
  253. package/build-module/components/colors-gradients/control.js.map +1 -1
  254. package/build-module/components/colors-gradients/dropdown.js +10 -4
  255. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  256. package/build-module/components/copy-handler/index.js +7 -1
  257. package/build-module/components/copy-handler/index.js.map +1 -1
  258. package/build-module/components/date-format-picker/index.js +2 -6
  259. package/build-module/components/date-format-picker/index.js.map +1 -1
  260. package/build-module/components/duotone/components.js +5 -5
  261. package/build-module/components/duotone/components.js.map +1 -1
  262. package/build-module/components/font-appearance-control/index.js +7 -4
  263. package/build-module/components/font-appearance-control/index.js.map +1 -1
  264. package/build-module/components/font-family/index.js +1 -1
  265. package/build-module/components/font-family/index.js.map +1 -1
  266. package/build-module/components/font-sizes/with-font-sizes.js +16 -3
  267. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  268. package/build-module/components/image-editor/cropper.js +4 -3
  269. package/build-module/components/image-editor/cropper.js.map +1 -1
  270. package/build-module/components/image-editor/index.js +3 -1
  271. package/build-module/components/image-editor/index.js.map +1 -1
  272. package/build-module/components/image-size-control/index.js +3 -1
  273. package/build-module/components/image-size-control/index.js.map +1 -1
  274. package/build-module/components/index.js +2 -1
  275. package/build-module/components/index.js.map +1 -1
  276. package/build-module/components/index.native.js +1 -1
  277. package/build-module/components/index.native.js.map +1 -1
  278. package/build-module/components/inserter/block-types-tab.native.js +31 -15
  279. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  280. package/build-module/components/inserter/index.native.js +9 -2
  281. package/build-module/components/inserter/index.native.js.map +1 -1
  282. package/build-module/components/inserter/preview-panel.js +9 -9
  283. package/build-module/components/inserter/preview-panel.js.map +1 -1
  284. package/build-module/components/inserter/reusable-blocks-tab.native.js +6 -2
  285. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  286. package/build-module/components/inserter/search-items.js +19 -5
  287. package/build-module/components/inserter/search-items.js.map +1 -1
  288. package/build-module/components/inserter/search-results.native.js +6 -3
  289. package/build-module/components/inserter/search-results.native.js.map +1 -1
  290. package/build-module/components/inserter/utils.native.js +19 -0
  291. package/build-module/components/inserter/utils.native.js.map +1 -1
  292. package/build-module/components/inserter-list-item/index.js +5 -18
  293. package/build-module/components/inserter-list-item/index.js.map +1 -1
  294. package/build-module/components/letter-spacing-control/index.js +5 -3
  295. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  296. package/build-module/components/line-height-control/index.js +5 -3
  297. package/build-module/components/line-height-control/index.js.map +1 -1
  298. package/build-module/components/link-control/is-url-like.js +1 -6
  299. package/build-module/components/link-control/is-url-like.js.map +1 -1
  300. package/build-module/components/link-control/link-preview.js +0 -1
  301. package/build-module/components/link-control/link-preview.js.map +1 -1
  302. package/build-module/components/link-control/use-search-handler.js +1 -6
  303. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  304. package/build-module/components/list-view/block-select-button.js +5 -2
  305. package/build-module/components/list-view/block-select-button.js.map +1 -1
  306. package/build-module/components/list-view/branch.js +1 -6
  307. package/build-module/components/list-view/branch.js.map +1 -1
  308. package/build-module/components/list-view/expander.js +3 -2
  309. package/build-module/components/list-view/expander.js.map +1 -1
  310. package/build-module/components/list-view/use-block-selection.js +1 -6
  311. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  312. package/build-module/components/media-upload/index.native.js +9 -2
  313. package/build-module/components/media-upload/index.native.js.map +1 -1
  314. package/build-module/components/observe-typing/index.js +22 -8
  315. package/build-module/components/observe-typing/index.js.map +1 -1
  316. package/build-module/components/preview-options/index.js +2 -2
  317. package/build-module/components/preview-options/index.js.map +1 -1
  318. package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
  319. package/build-module/components/recursion-provider/index.js.map +1 -0
  320. package/build-module/components/rich-text/format-toolbar-container.js +58 -12
  321. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  322. package/build-module/components/rich-text/index.js +7 -2
  323. package/build-module/components/rich-text/index.js.map +1 -1
  324. package/build-module/components/rich-text/index.native.js +3 -1
  325. package/build-module/components/rich-text/index.native.js.map +1 -1
  326. package/build-module/components/rich-text/use-before-input-rules.js +96 -0
  327. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
  328. package/build-module/components/rich-text/use-enter.js +0 -4
  329. package/build-module/components/rich-text/use-enter.js.map +1 -1
  330. package/build-module/components/rich-text/use-format-types.js +39 -22
  331. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  332. package/build-module/components/spacing-sizes-control/all-input-control.js +41 -0
  333. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -0
  334. package/build-module/components/spacing-sizes-control/axial-input-controls.js +57 -0
  335. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  336. package/build-module/components/spacing-sizes-control/index.js +83 -0
  337. package/build-module/components/spacing-sizes-control/index.js.map +1 -0
  338. package/build-module/components/spacing-sizes-control/input-controls.js +41 -0
  339. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -0
  340. package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
  341. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
  342. package/build-module/components/spacing-sizes-control/spacing-input-control.js +192 -0
  343. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  344. package/build-module/components/spacing-sizes-control/utils.js +174 -0
  345. package/build-module/components/spacing-sizes-control/utils.js.map +1 -0
  346. package/build-module/components/text-decoration-control/index.js +4 -2
  347. package/build-module/components/text-decoration-control/index.js.map +1 -1
  348. package/build-module/components/text-transform-control/index.js +4 -2
  349. package/build-module/components/text-transform-control/index.js.map +1 -1
  350. package/build-module/components/url-input/index.js +1 -1
  351. package/build-module/components/url-input/index.js.map +1 -1
  352. package/build-module/components/url-popover/image-url-input-ui.js +4 -1
  353. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  354. package/build-module/components/writing-flow/use-arrow-nav.js +5 -26
  355. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  356. package/build-module/components/writing-flow/use-drag-selection.js +9 -2
  357. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  358. package/build-module/components/writing-flow/use-multi-selection.js +4 -2
  359. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  360. package/build-module/components/writing-flow/use-select-all.js +3 -1
  361. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  362. package/build-module/components/writing-flow/use-selection-observer.js +10 -2
  363. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  364. package/build-module/components/writing-flow/use-tab-nav.js +1 -1
  365. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  366. package/build-module/hooks/border-radius.js +2 -7
  367. package/build-module/hooks/border-radius.js.map +1 -1
  368. package/build-module/hooks/border.js +2 -2
  369. package/build-module/hooks/border.js.map +1 -1
  370. package/build-module/hooks/color.js +4 -1
  371. package/build-module/hooks/color.js.map +1 -1
  372. package/build-module/hooks/dimensions.js +13 -0
  373. package/build-module/hooks/dimensions.js.map +1 -1
  374. package/build-module/hooks/duotone.js +4 -4
  375. package/build-module/hooks/duotone.js.map +1 -1
  376. package/build-module/hooks/gap.js +3 -2
  377. package/build-module/hooks/gap.js.map +1 -1
  378. package/build-module/hooks/generated-class-name.js +1 -6
  379. package/build-module/hooks/generated-class-name.js.map +1 -1
  380. package/build-module/hooks/layout.js +42 -15
  381. package/build-module/hooks/layout.js.map +1 -1
  382. package/build-module/hooks/margin.js +26 -12
  383. package/build-module/hooks/margin.js.map +1 -1
  384. package/build-module/hooks/padding.js +17 -8
  385. package/build-module/hooks/padding.js.map +1 -1
  386. package/build-module/hooks/style.js +44 -81
  387. package/build-module/hooks/style.js.map +1 -1
  388. package/build-module/layouts/constrained.js +197 -0
  389. package/build-module/layouts/constrained.js.map +1 -0
  390. package/build-module/layouts/flex.js +1 -1
  391. package/build-module/layouts/flex.js.map +1 -1
  392. package/build-module/layouts/flow.js +7 -140
  393. package/build-module/layouts/flow.js.map +1 -1
  394. package/build-module/layouts/index.js +2 -1
  395. package/build-module/layouts/index.js.map +1 -1
  396. package/build-module/layouts/utils.js +40 -0
  397. package/build-module/layouts/utils.js.map +1 -1
  398. package/build-module/store/actions.js +25 -3
  399. package/build-module/store/actions.js.map +1 -1
  400. package/build-module/store/selectors.js +5 -7
  401. package/build-module/store/selectors.js.map +1 -1
  402. package/build-module/utils/block-variation-transforms.js +14 -7
  403. package/build-module/utils/block-variation-transforms.js.map +1 -1
  404. package/build-module/utils/pasting.js +9 -1
  405. package/build-module/utils/pasting.js.map +1 -1
  406. package/build-style/style-rtl.css +154 -27
  407. package/build-style/style.css +154 -27
  408. package/package.json +30 -28
  409. package/src/components/block-alignment-control/use-available-alignments.js +1 -1
  410. package/src/components/block-edit-visually-button/index.js +39 -0
  411. package/src/components/block-list/block.js +13 -2
  412. package/src/components/block-list/index.native.js +1 -1
  413. package/src/components/block-lock/modal.js +5 -5
  414. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  415. package/src/components/block-mover/mover-description.js +131 -48
  416. package/src/components/block-mover/test/mover-description.js +55 -3
  417. package/src/components/block-popover/inbetween.js +5 -1
  418. package/src/components/block-popover/style.scss +25 -2
  419. package/src/components/block-settings-menu/index.js +11 -15
  420. package/src/components/block-settings-menu-controls/index.js +2 -2
  421. package/src/components/block-styles/index.js +4 -7
  422. package/src/components/block-styles/preview.native.js +2 -2
  423. package/src/components/block-styles/style.scss +10 -0
  424. package/src/components/block-switcher/index.js +9 -13
  425. package/src/components/block-switcher/test/index.js +1 -0
  426. package/src/components/block-toolbar/index.js +2 -0
  427. package/src/components/block-tools/block-selection-button.js +0 -5
  428. package/src/components/block-tools/index.js +4 -1
  429. package/src/components/block-types-list/index.js +1 -1
  430. package/src/components/block-types-list/index.native.js +76 -24
  431. package/src/components/block-types-list/style.native.scss +18 -0
  432. package/src/components/border-radius-control/all-input-control.js +41 -4
  433. package/src/components/border-radius-control/index.js +29 -6
  434. package/src/components/border-radius-control/input-controls.js +40 -13
  435. package/src/components/border-radius-control/test/utils.js +22 -60
  436. package/src/components/border-radius-control/utils.js +12 -16
  437. package/src/components/color-palette/test/__snapshots__/control.js.snap +91 -79
  438. package/src/components/colors/test/__snapshots__/with-colors.js.snap +1 -1
  439. package/src/components/colors/test/with-colors.js +1 -1
  440. package/src/components/colors/utils.js +5 -2
  441. package/src/components/colors/with-colors.js +11 -1
  442. package/src/components/colors-gradients/control.js +13 -8
  443. package/src/components/colors-gradients/dropdown.js +14 -3
  444. package/src/components/colors-gradients/style.scss +33 -12
  445. package/src/components/colors-gradients/test/control.js +3 -3
  446. package/src/components/copy-handler/index.js +18 -0
  447. package/src/components/date-format-picker/index.js +12 -14
  448. package/src/components/date-format-picker/style.scss +0 -4
  449. package/src/components/duotone/components.js +5 -5
  450. package/src/components/duotone-control/style.scss +0 -4
  451. package/src/components/font-appearance-control/index.js +3 -0
  452. package/src/components/font-appearance-control/style.scss +0 -2
  453. package/src/components/font-family/index.js +1 -1
  454. package/src/components/font-sizes/with-font-sizes.js +11 -1
  455. package/src/components/image-editor/cropper.js +9 -3
  456. package/src/components/image-editor/index.js +2 -0
  457. package/src/components/image-size-control/README.md +7 -0
  458. package/src/components/image-size-control/index.js +2 -0
  459. package/src/components/index.js +5 -1
  460. package/src/components/index.native.js +4 -1
  461. package/src/components/inserter/block-types-tab.native.js +42 -21
  462. package/src/components/inserter/index.native.js +7 -2
  463. package/src/components/inserter/preview-panel.js +6 -14
  464. package/src/components/inserter/reusable-blocks-tab.native.js +4 -2
  465. package/src/components/inserter/search-items.js +17 -5
  466. package/src/components/inserter/search-results.native.js +4 -2
  467. package/src/components/inserter/test/block-types-tab.native.js +2 -0
  468. package/src/components/inserter/test/utils.native.js +37 -0
  469. package/src/components/inserter/utils.native.js +11 -0
  470. package/src/components/inserter-list-item/index.js +5 -18
  471. package/src/components/letter-spacing-control/index.js +2 -0
  472. package/src/components/line-height-control/index.js +2 -0
  473. package/src/components/link-control/is-url-like.js +1 -6
  474. package/src/components/link-control/link-preview.js +0 -1
  475. package/src/components/link-control/test/index.js +540 -893
  476. package/src/components/link-control/use-search-handler.js +1 -6
  477. package/src/components/list-view/block-select-button.js +7 -2
  478. package/src/components/list-view/branch.js +1 -6
  479. package/src/components/list-view/expander.js +4 -2
  480. package/src/components/list-view/style.scss +11 -4
  481. package/src/components/list-view/use-block-selection.js +2 -8
  482. package/src/components/media-replace-flow/style.scss +1 -0
  483. package/src/components/media-upload/index.native.js +7 -3
  484. package/src/components/observe-typing/index.js +17 -14
  485. package/src/components/preview-options/index.js +2 -2
  486. package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
  487. package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
  488. package/src/components/rich-text/README.md +13 -1
  489. package/src/components/rich-text/format-toolbar-container.js +63 -14
  490. package/src/components/rich-text/index.js +3 -0
  491. package/src/components/rich-text/index.native.js +2 -0
  492. package/src/components/rich-text/use-before-input-rules.js +91 -0
  493. package/src/components/rich-text/use-enter.js +0 -3
  494. package/src/components/rich-text/use-format-types.js +38 -17
  495. package/src/components/spacing-sizes-control/all-input-control.js +40 -0
  496. package/src/components/spacing-sizes-control/axial-input-controls.js +62 -0
  497. package/src/components/spacing-sizes-control/index.js +91 -0
  498. package/src/components/spacing-sizes-control/input-controls.js +46 -0
  499. package/src/components/spacing-sizes-control/linked-button.js +25 -0
  500. package/src/components/spacing-sizes-control/spacing-input-control.js +280 -0
  501. package/src/components/spacing-sizes-control/style.scss +122 -0
  502. package/src/components/spacing-sizes-control/test/utils.js +156 -0
  503. package/src/components/spacing-sizes-control/utils.js +195 -0
  504. package/src/components/text-decoration-control/index.js +4 -2
  505. package/src/components/text-transform-control/index.js +4 -2
  506. package/src/components/url-input/index.js +1 -1
  507. package/src/components/url-input/style.scss +2 -2
  508. package/src/components/url-popover/image-url-input-ui.js +3 -0
  509. package/src/components/url-popover/style.scss +0 -3
  510. package/src/components/writing-flow/use-arrow-nav.js +4 -33
  511. package/src/components/writing-flow/use-drag-selection.js +7 -1
  512. package/src/components/writing-flow/use-multi-selection.js +4 -1
  513. package/src/components/writing-flow/use-select-all.js +2 -1
  514. package/src/components/writing-flow/use-selection-observer.js +10 -2
  515. package/src/components/writing-flow/use-tab-nav.js +1 -1
  516. package/src/hooks/border-radius.js +2 -6
  517. package/src/hooks/border.js +2 -2
  518. package/src/hooks/color.js +13 -3
  519. package/src/hooks/dimensions.js +15 -0
  520. package/src/hooks/duotone.js +4 -4
  521. package/src/hooks/gap.js +7 -2
  522. package/src/hooks/generated-class-name.js +6 -9
  523. package/src/hooks/layout.js +66 -18
  524. package/src/hooks/margin.js +49 -17
  525. package/src/hooks/padding.js +41 -14
  526. package/src/hooks/style.js +42 -86
  527. package/src/hooks/test/gap.js +22 -0
  528. package/src/hooks/typography.scss +0 -1
  529. package/src/layouts/constrained.js +217 -0
  530. package/src/layouts/flex.js +1 -1
  531. package/src/layouts/flow.js +6 -151
  532. package/src/layouts/index.js +2 -1
  533. package/src/layouts/test/constrained.js +21 -0
  534. package/src/layouts/utils.js +34 -0
  535. package/src/store/actions.js +32 -4
  536. package/src/store/selectors.js +5 -4
  537. package/src/style.scss +1 -0
  538. package/src/utils/block-variation-transforms.js +13 -6
  539. package/src/utils/pasting.js +10 -1
  540. package/src/utils/test/block-variation-transforms.js +24 -0
  541. package/src/utils/test/pasting.js +10 -0
  542. package/build/components/block-settings-menu/block-edit-visually-button.js +0 -70
  543. package/build/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  544. package/build/components/use-no-recursive-renders/index.js.map +0 -1
  545. package/build-module/components/block-settings-menu/block-edit-visually-button.js +0 -56
  546. package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  547. package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
  548. package/src/components/block-settings-menu/block-edit-visually-button.js +0 -52
@@ -0,0 +1,57 @@
1
+ import { createElement, Fragment } from "@wordpress/element";
2
+
3
+ /**
4
+ * Internal dependencies
5
+ */
6
+ import SpacingInputControl from './spacing-input-control';
7
+ import { LABELS } from './utils';
8
+ const groupedSides = ['vertical', 'horizontal'];
9
+ export default function AxialInputControls(_ref) {
10
+ let {
11
+ onChange,
12
+ values,
13
+ sides,
14
+ spacingSizes,
15
+ type,
16
+ minimumCustomValue
17
+ } = _ref;
18
+
19
+ const createHandleOnChange = side => next => {
20
+ if (!onChange) {
21
+ return;
22
+ }
23
+
24
+ const nextValues = { ...values
25
+ };
26
+
27
+ if (side === 'vertical') {
28
+ nextValues.top = next;
29
+ nextValues.bottom = next;
30
+ }
31
+
32
+ if (side === 'horizontal') {
33
+ nextValues.left = next;
34
+ nextValues.right = next;
35
+ }
36
+
37
+ onChange(nextValues);
38
+ }; // Filter sides if custom configuration provided, maintaining default order.
39
+
40
+
41
+ const filteredSides = sides !== null && sides !== void 0 && sides.length ? groupedSides.filter(side => sides.includes(side)) : groupedSides;
42
+ return createElement(Fragment, null, filteredSides.map(side => {
43
+ const axisValue = side === 'vertical' ? values.top : values.left;
44
+ return createElement(SpacingInputControl, {
45
+ value: axisValue,
46
+ onChange: createHandleOnChange(side),
47
+ label: LABELS[side],
48
+ key: `spacing-sizes-control-${side}`,
49
+ withInputField: false,
50
+ side: side,
51
+ spacingSizes: spacingSizes,
52
+ type: type,
53
+ minimumCustomValue: minimumCustomValue
54
+ });
55
+ }));
56
+ }
57
+ //# sourceMappingURL=axial-input-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/axial-input-controls.js"],"names":["SpacingInputControl","LABELS","groupedSides","AxialInputControls","onChange","values","sides","spacingSizes","type","minimumCustomValue","createHandleOnChange","side","next","nextValues","top","bottom","left","right","filteredSides","length","filter","includes","map","axisValue"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,mBAAP,MAAgC,yBAAhC;AACA,SAASC,MAAT,QAAuB,SAAvB;AAEA,MAAMC,YAAY,GAAG,CAAE,UAAF,EAAc,YAAd,CAArB;AAEA,eAAe,SAASC,kBAAT,OAOX;AAAA,MAPwC;AAC3CC,IAAAA,QAD2C;AAE3CC,IAAAA,MAF2C;AAG3CC,IAAAA,KAH2C;AAI3CC,IAAAA,YAJ2C;AAK3CC,IAAAA,IAL2C;AAM3CC,IAAAA;AAN2C,GAOxC;;AACH,QAAMC,oBAAoB,GAAKC,IAAF,IAAcC,IAAF,IAAY;AACpD,QAAK,CAAER,QAAP,EAAkB;AACjB;AACA;;AACD,UAAMS,UAAU,GAAG,EAAE,GAAGR;AAAL,KAAnB;;AAEA,QAAKM,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;;AAEDR,IAAAA,QAAQ,CAAES,UAAF,CAAR;AACA,GAjBD,CADG,CAoBH;;;AACA,QAAMK,aAAa,GAAGZ,KAAK,SAAL,IAAAA,KAAK,WAAL,IAAAA,KAAK,CAAEa,MAAP,GACnBjB,YAAY,CAACkB,MAAb,CAAuBT,IAAF,IAAYL,KAAK,CAACe,QAAN,CAAgBV,IAAhB,CAAjC,CADmB,GAEnBT,YAFH;AAIA,SACC,8BACGgB,aAAa,CAACI,GAAd,CAAqBX,IAAF,IAAY;AAChC,UAAMY,SAAS,GACdZ,IAAI,KAAK,UAAT,GAAsBN,MAAM,CAACS,GAA7B,GAAmCT,MAAM,CAACW,IAD3C;AAEA,WACC,cAAC,mBAAD;AACC,MAAA,KAAK,EAAGO,SADT;AAEC,MAAA,QAAQ,EAAGb,oBAAoB,CAAEC,IAAF,CAFhC;AAGC,MAAA,KAAK,EAAGV,MAAM,CAAEU,IAAF,CAHf;AAIC,MAAA,GAAG,EAAI,yBAAyBA,IAAM,EAJvC;AAKC,MAAA,cAAc,EAAG,KALlB;AAMC,MAAA,IAAI,EAAGA,IANR;AAOC,MAAA,YAAY,EAAGJ,YAPhB;AAQC,MAAA,IAAI,EAAGC,IARR;AASC,MAAA,kBAAkB,EAAGC;AATtB,MADD;AAaA,GAhBC,CADH,CADD;AAqBA","sourcesContent":["/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport { LABELS } from './utils';\n\nconst groupedSides = [ 'vertical', 'horizontal' ];\n\nexport default function AxialInputControls( {\n\tonChange,\n\tvalues,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tminimumCustomValue,\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 ) => sides.includes( 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\tvalue={ axisValue }\n\t\t\t\t\t\tonChange={ createHandleOnChange( side ) }\n\t\t\t\t\t\tlabel={ LABELS[ side ] }\n\t\t\t\t\t\tkey={ `spacing-sizes-control-${ side }` }\n\t\t\t\t\t\twithInputField={ false }\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\tminimumCustomValue={ minimumCustomValue }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n"]}
@@ -0,0 +1,83 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import { createElement } from "@wordpress/element";
3
+
4
+ /**
5
+ * WordPress dependencies
6
+ */
7
+ import { useState } from '@wordpress/element';
8
+ import { __ } from '@wordpress/i18n';
9
+ import { __experimentalText as Text } from '@wordpress/components';
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+
14
+ import AllInputControl from './all-input-control';
15
+ import InputControls from './input-controls';
16
+ import AxialInputControls from './axial-input-controls';
17
+ import LinkedButton from './linked-button';
18
+ import { DEFAULT_VALUES, isValuesMixed, isValuesDefined } from './utils';
19
+ import useSetting from '../use-setting';
20
+ export default function SpacingSizesControl(_ref) {
21
+ let {
22
+ inputProps,
23
+ onChange,
24
+ label = __('Spacing Control'),
25
+ values,
26
+ sides,
27
+ splitOnAxis = false,
28
+ useSelect,
29
+ minimumCustomValue = 0
30
+ } = _ref;
31
+ const spacingSizes = [{
32
+ name: 0,
33
+ slug: '0',
34
+ size: 0
35
+ }, ...(useSetting('spacing.spacingSizes') || [])];
36
+
37
+ if (spacingSizes.length > 8) {
38
+ spacingSizes.unshift({
39
+ name: __('Default'),
40
+ slug: 'default',
41
+ size: undefined
42
+ });
43
+ }
44
+
45
+ const inputValues = values || DEFAULT_VALUES;
46
+ const hasInitialValue = isValuesDefined(values);
47
+ const hasOneSide = (sides === null || sides === void 0 ? void 0 : sides.length) === 1;
48
+ const [isLinked, setIsLinked] = useState(!hasInitialValue || !isValuesMixed(inputValues, sides) || hasOneSide);
49
+
50
+ const toggleLinked = () => {
51
+ setIsLinked(!isLinked);
52
+ };
53
+
54
+ const handleOnChange = nextValue => {
55
+ const newValues = { ...values,
56
+ ...nextValue
57
+ };
58
+ onChange(newValues);
59
+ };
60
+
61
+ const inputControlProps = { ...inputProps,
62
+ onChange: handleOnChange,
63
+ isLinked,
64
+ sides,
65
+ values: inputValues,
66
+ spacingSizes,
67
+ useSelect,
68
+ type: label,
69
+ minimumCustomValue
70
+ };
71
+ return createElement("fieldset", {
72
+ role: "region",
73
+ className: "component-spacing-sizes-control"
74
+ }, createElement(Text, {
75
+ as: "legend"
76
+ }, label), !hasOneSide && createElement(LinkedButton, {
77
+ onClick: toggleLinked,
78
+ isLinked: isLinked
79
+ }), isLinked && createElement(AllInputControl, _extends({
80
+ "aria-label": label
81
+ }, inputControlProps)), !isLinked && splitOnAxis && createElement(AxialInputControls, inputControlProps), !isLinked && !splitOnAxis && createElement(InputControls, inputControlProps));
82
+ }
83
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/index.js"],"names":["useState","__","__experimentalText","Text","AllInputControl","InputControls","AxialInputControls","LinkedButton","DEFAULT_VALUES","isValuesMixed","isValuesDefined","useSetting","SpacingSizesControl","inputProps","onChange","label","values","sides","splitOnAxis","useSelect","minimumCustomValue","spacingSizes","name","slug","size","length","unshift","undefined","inputValues","hasInitialValue","hasOneSide","isLinked","setIsLinked","toggleLinked","handleOnChange","nextValue","newValues","inputControlProps","type"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { __experimentalText as Text } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport AllInputControl from './all-input-control';\nimport InputControls from './input-controls';\nimport AxialInputControls from './axial-input-controls';\nimport LinkedButton from './linked-button';\nimport { DEFAULT_VALUES, isValuesMixed, isValuesDefined } from './utils';\nimport useSetting from '../use-setting';\n\nexport default function SpacingSizesControl( {\n\tinputProps,\n\tonChange,\n\tlabel = __( 'Spacing Control' ),\n\tvalues,\n\tsides,\n\tsplitOnAxis = false,\n\tuseSelect,\n\tminimumCustomValue = 0,\n} ) {\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\tconst inputValues = values || DEFAULT_VALUES;\n\tconst hasInitialValue = isValuesDefined( values );\n\tconst hasOneSide = sides?.length === 1;\n\n\tconst [ isLinked, setIsLinked ] = useState(\n\t\t! hasInitialValue || ! isValuesMixed( inputValues, sides ) || hasOneSide\n\t);\n\n\tconst toggleLinked = () => {\n\t\tsetIsLinked( ! isLinked );\n\t};\n\n\tconst handleOnChange = ( nextValue ) => {\n\t\tconst newValues = { ...values, ...nextValue };\n\t\tonChange( newValues );\n\t};\n\n\tconst inputControlProps = {\n\t\t...inputProps,\n\t\tonChange: handleOnChange,\n\t\tisLinked,\n\t\tsides,\n\t\tvalues: inputValues,\n\t\tspacingSizes,\n\t\tuseSelect,\n\t\ttype: label,\n\t\tminimumCustomValue,\n\t};\n\n\treturn (\n\t\t<fieldset role=\"region\" className=\"component-spacing-sizes-control\">\n\t\t\t<Text as=\"legend\">{ label }</Text>\n\t\t\t{ ! hasOneSide && (\n\t\t\t\t<LinkedButton onClick={ toggleLinked } isLinked={ isLinked } />\n\t\t\t) }\n\t\t\t{ isLinked && (\n\t\t\t\t<AllInputControl\n\t\t\t\t\taria-label={ label }\n\t\t\t\t\t{ ...inputControlProps }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ ! isLinked && splitOnAxis && (\n\t\t\t\t<AxialInputControls { ...inputControlProps } />\n\t\t\t) }\n\t\t\t{ ! isLinked && ! splitOnAxis && (\n\t\t\t\t<InputControls { ...inputControlProps } />\n\t\t\t) }\n\t\t</fieldset>\n\t);\n}\n"]}
@@ -0,0 +1,41 @@
1
+ import { createElement, Fragment } from "@wordpress/element";
2
+
3
+ /**
4
+ * Internal dependencies
5
+ */
6
+ import SpacingInputControl from './spacing-input-control';
7
+ import { ALL_SIDES, LABELS } from './utils';
8
+ export default function BoxInputControls(_ref) {
9
+ let {
10
+ values,
11
+ sides,
12
+ onChange,
13
+ spacingSizes,
14
+ type,
15
+ minimumCustomValue
16
+ } = _ref;
17
+ // Filter sides if custom configuration provided, maintaining default order.
18
+ const filteredSides = sides !== null && sides !== void 0 && sides.length ? ALL_SIDES.filter(side => sides.includes(side)) : ALL_SIDES;
19
+
20
+ const createHandleOnChange = side => next => {
21
+ const nextValues = { ...values
22
+ };
23
+ nextValues[side] = next;
24
+ onChange(nextValues);
25
+ };
26
+
27
+ return createElement(Fragment, null, filteredSides.map(side => {
28
+ return createElement(SpacingInputControl, {
29
+ value: values[side],
30
+ label: LABELS[side],
31
+ key: `spacing-sizes-control-${side}`,
32
+ withInputField: false,
33
+ side: side,
34
+ onChange: createHandleOnChange(side),
35
+ spacingSizes: spacingSizes,
36
+ type: type,
37
+ minimumCustomValue: minimumCustomValue
38
+ });
39
+ }));
40
+ }
41
+ //# sourceMappingURL=input-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/input-controls.js"],"names":["SpacingInputControl","ALL_SIDES","LABELS","BoxInputControls","values","sides","onChange","spacingSizes","type","minimumCustomValue","filteredSides","length","filter","side","includes","createHandleOnChange","next","nextValues","map"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,mBAAP,MAAgC,yBAAhC;AACA,SAASC,SAAT,EAAoBC,MAApB,QAAkC,SAAlC;AAEA,eAAe,SAASC,gBAAT,OAOX;AAAA,MAPsC;AACzCC,IAAAA,MADyC;AAEzCC,IAAAA,KAFyC;AAGzCC,IAAAA,QAHyC;AAIzCC,IAAAA,YAJyC;AAKzCC,IAAAA,IALyC;AAMzCC,IAAAA;AANyC,GAOtC;AACH;AACA,QAAMC,aAAa,GAAGL,KAAK,SAAL,IAAAA,KAAK,WAAL,IAAAA,KAAK,CAAEM,MAAP,GACnBV,SAAS,CAACW,MAAV,CAAoBC,IAAF,IAAYR,KAAK,CAACS,QAAN,CAAgBD,IAAhB,CAA9B,CADmB,GAEnBZ,SAFH;;AAIA,QAAMc,oBAAoB,GAAKF,IAAF,IAAcG,IAAF,IAAY;AACpD,UAAMC,UAAU,GAAG,EAAE,GAAGb;AAAL,KAAnB;AACAa,IAAAA,UAAU,CAAEJ,IAAF,CAAV,GAAqBG,IAArB;AAEAV,IAAAA,QAAQ,CAAEW,UAAF,CAAR;AACA,GALD;;AAOA,SACC,8BACGP,aAAa,CAACQ,GAAd,CAAqBL,IAAF,IAAY;AAChC,WACC,cAAC,mBAAD;AACC,MAAA,KAAK,EAAGT,MAAM,CAAES,IAAF,CADf;AAEC,MAAA,KAAK,EAAGX,MAAM,CAAEW,IAAF,CAFf;AAGC,MAAA,GAAG,EAAI,yBAAyBA,IAAM,EAHvC;AAIC,MAAA,cAAc,EAAG,KAJlB;AAKC,MAAA,IAAI,EAAGA,IALR;AAMC,MAAA,QAAQ,EAAGE,oBAAoB,CAAEF,IAAF,CANhC;AAOC,MAAA,YAAY,EAAGN,YAPhB;AAQC,MAAA,IAAI,EAAGC,IARR;AASC,MAAA,kBAAkB,EAAGC;AATtB,MADD;AAaA,GAdC,CADH,CADD;AAmBA","sourcesContent":["/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport { ALL_SIDES, LABELS } from './utils';\n\nexport default function BoxInputControls( {\n\tvalues,\n\tsides,\n\tonChange,\n\tspacingSizes,\n\ttype,\n\tminimumCustomValue,\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\tvalue={ values[ side ] }\n\t\t\t\t\t\tlabel={ LABELS[ side ] }\n\t\t\t\t\t\tkey={ `spacing-sizes-control-${ side }` }\n\t\t\t\t\t\twithInputField={ false }\n\t\t\t\t\t\tside={ side }\n\t\t\t\t\t\tonChange={ createHandleOnChange( side ) }\n\t\t\t\t\t\tspacingSizes={ spacingSizes }\n\t\t\t\t\t\ttype={ type }\n\t\t\t\t\t\tminimumCustomValue={ minimumCustomValue }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import { createElement } from "@wordpress/element";
2
+
3
+ /**
4
+ * WordPress dependencies
5
+ */
6
+ import { link, linkOff } from '@wordpress/icons';
7
+ import { __ } from '@wordpress/i18n';
8
+ import { Button, Tooltip } from '@wordpress/components';
9
+ export default function LinkedButton(_ref) {
10
+ let {
11
+ isLinked,
12
+ onClick
13
+ } = _ref;
14
+ const label = isLinked ? __('Unlink Sides') : __('Link Sides');
15
+ return createElement(Tooltip, {
16
+ text: label
17
+ }, createElement("span", {
18
+ className: "component-spacing-sizes-control__linked-button"
19
+ }, createElement(Button, {
20
+ variant: isLinked ? 'primary' : 'secondary',
21
+ isSmall: true,
22
+ icon: isLinked ? link : linkOff,
23
+ iconSize: 16,
24
+ "aria-label": label,
25
+ onClick: onClick
26
+ })));
27
+ }
28
+ //# sourceMappingURL=linked-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/linked-button.js"],"names":["link","linkOff","__","Button","Tooltip","LinkedButton","isLinked","onClick","label"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,IAAT,EAAeC,OAAf,QAA8B,kBAA9B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,MAAT,EAAiBC,OAAjB,QAAgC,uBAAhC;AAEA,eAAe,SAASC,YAAT,OAA+C;AAAA,MAAxB;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAwB;AAC7D,QAAMC,KAAK,GAAGF,QAAQ,GAAGJ,EAAE,CAAE,cAAF,CAAL,GAA0BA,EAAE,CAAE,YAAF,CAAlD;AAEA,SACC,cAAC,OAAD;AAAS,IAAA,IAAI,EAAGM;AAAhB,KACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACC,cAAC,MAAD;AACC,IAAA,OAAO,EAAGF,QAAQ,GAAG,SAAH,GAAe,WADlC;AAEC,IAAA,OAAO,MAFR;AAGC,IAAA,IAAI,EAAGA,QAAQ,GAAGN,IAAH,GAAUC,OAH1B;AAIC,IAAA,QAAQ,EAAG,EAJZ;AAKC,kBAAaO,KALd;AAMC,IAAA,OAAO,EAAGD;AANX,IADD,CADD,CADD;AAcA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { link, linkOff } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\nimport { Button, Tooltip } from '@wordpress/components';\n\nexport default function LinkedButton( { isLinked, onClick } ) {\n\tconst label = isLinked ? __( 'Unlink Sides' ) : __( 'Link Sides' );\n\n\treturn (\n\t\t<Tooltip text={ label }>\n\t\t\t<span className=\"component-spacing-sizes-control__linked-button\">\n\t\t\t\t<Button\n\t\t\t\t\tvariant={ isLinked ? 'primary' : 'secondary' }\n\t\t\t\t\tisSmall\n\t\t\t\t\ticon={ isLinked ? link : linkOff }\n\t\t\t\t\ticonSize={ 16 }\n\t\t\t\t\taria-label={ label }\n\t\t\t\t\tonClick={ onClick }\n\t\t\t\t/>\n\t\t\t</span>\n\t\t</Tooltip>\n\t);\n}\n"]}
@@ -0,0 +1,192 @@
1
+ import { createElement, Fragment } from "@wordpress/element";
2
+
3
+ /**
4
+ * External dependencies
5
+ */
6
+ import classnames from 'classnames';
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+
11
+ import { useState, useMemo } from '@wordpress/element';
12
+ import { useSelect } from '@wordpress/data';
13
+ import { Button, RangeControl, CustomSelectControl, __experimentalUnitControl as UnitControl, __experimentalHStack as HStack, __experimentalText as Text, __experimentalUseCustomUnits as useCustomUnits, __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue } from '@wordpress/components';
14
+ import { __, sprintf } from '@wordpress/i18n';
15
+ import { settings } from '@wordpress/icons';
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+
20
+ import useSetting from '../use-setting';
21
+ import { store as blockEditorStore } from '../../store';
22
+ import { LABELS, getSliderValueFromPreset, getCustomValueFromPreset, isValueSpacingPreset } from './utils';
23
+ export default function SpacingInputControl(_ref) {
24
+ var _spacingSizes$current;
25
+
26
+ let {
27
+ spacingSizes,
28
+ value,
29
+ side,
30
+ onChange,
31
+ isMixed = false,
32
+ type,
33
+ minimumCustomValue
34
+ } = _ref;
35
+ let selectListSizes = spacingSizes;
36
+ const showRangeControl = spacingSizes.length <= 8;
37
+ const disableCustomSpacingSizes = useSelect(select => {
38
+ const editorSettings = select(blockEditorStore).getSettings();
39
+ return editorSettings === null || editorSettings === void 0 ? void 0 : editorSettings.disableCustomSpacingSizes;
40
+ });
41
+ const [showCustomValueControl, setShowCustomValueControl] = useState(!disableCustomSpacingSizes && value !== undefined && !isValueSpacingPreset(value));
42
+ const units = useCustomUnits({
43
+ availableUnits: useSetting('spacing.units') || ['px', 'em', 'rem']
44
+ });
45
+ let currentValue = null;
46
+ const showCustomValueInSelectList = !showRangeControl && !showCustomValueControl && value !== undefined && (!isValueSpacingPreset(value) || isValueSpacingPreset(value) && isMixed);
47
+
48
+ if (showCustomValueInSelectList) {
49
+ selectListSizes = [...spacingSizes, {
50
+ name: !isMixed ? // translators: A custom measurement, eg. a number followed by a unit like 12px.
51
+ sprintf(__('Custom (%s)'), value) : __('Mixed'),
52
+ slug: 'custom',
53
+ size: value
54
+ }];
55
+ currentValue = selectListSizes.length - 1;
56
+ } else if (!isMixed) {
57
+ currentValue = !showCustomValueControl ? getSliderValueFromPreset(value, spacingSizes) : getCustomValueFromPreset(value, spacingSizes);
58
+ }
59
+
60
+ const selectedUnit = useMemo(() => parseQuantityAndUnitFromRawValue(currentValue), [currentValue])[1] || units[0].value;
61
+
62
+ const setInitialValue = () => {
63
+ if (value === undefined) {
64
+ onChange('0');
65
+ }
66
+ };
67
+
68
+ const customTooltipContent = newValue => {
69
+ var _spacingSizes$newValu;
70
+
71
+ return value === undefined ? undefined : (_spacingSizes$newValu = spacingSizes[newValue]) === null || _spacingSizes$newValu === void 0 ? void 0 : _spacingSizes$newValu.name;
72
+ };
73
+
74
+ const customRangeValue = parseInt(currentValue, 10);
75
+
76
+ const getNewCustomValue = newSize => {
77
+ const isNumeric = !isNaN(parseFloat(newSize));
78
+ const nextValue = isNumeric ? newSize : undefined;
79
+ return nextValue;
80
+ };
81
+
82
+ const getNewPresetValue = (newSize, controlType) => {
83
+ var _spacingSizes$newSize;
84
+
85
+ const size = parseInt(newSize, 10);
86
+
87
+ if (controlType === 'selectList') {
88
+ if (size === 0) {
89
+ return undefined;
90
+ }
91
+
92
+ if (size === 1) {
93
+ return '0';
94
+ }
95
+ } else if (size === 0) {
96
+ return '0';
97
+ }
98
+
99
+ return `var:preset|spacing|${(_spacingSizes$newSize = spacingSizes[newSize]) === null || _spacingSizes$newSize === void 0 ? void 0 : _spacingSizes$newSize.slug}`;
100
+ };
101
+
102
+ const handleCustomValueSliderChange = next => {
103
+ onChange([next, selectedUnit].join(''));
104
+ };
105
+
106
+ const allPlaceholder = isMixed ? __('Mixed') : null;
107
+ const currentValueHint = !isMixed ? customTooltipContent(currentValue) : __('Mixed');
108
+ const options = selectListSizes.map((size, index) => ({
109
+ key: index,
110
+ name: size.name
111
+ }));
112
+ const marks = spacingSizes.map((newValue, index) => ({
113
+ value: index,
114
+ label: undefined
115
+ }));
116
+ const ariaLabel = sprintf( // translators: 1: The side of the block being modified (top, bottom, left, etc.). 2. Type of spacing being modified (Padding, margin, etc)
117
+ __('%1$s %2$s'), LABELS[side], type === null || type === void 0 ? void 0 : type.toLowerCase());
118
+ const showHint = showRangeControl && !showCustomValueControl && currentValueHint !== undefined;
119
+ return createElement(Fragment, null, side !== 'all' && createElement(HStack, {
120
+ className: "components-spacing-sizes-control__side-labels"
121
+ }, createElement(Text, {
122
+ className: "components-spacing-sizes-control__side-label"
123
+ }, LABELS[side]), showHint && createElement(Text, {
124
+ className: "components-spacing-sizes-control__hint-single"
125
+ }, currentValueHint)), side === 'all' && showHint && createElement(Text, {
126
+ className: "components-spacing-sizes-control__hint-all"
127
+ }, currentValueHint), !disableCustomSpacingSizes && createElement(Button, {
128
+ label: showCustomValueControl ? __('Use size preset') : __('Set custom size'),
129
+ icon: settings,
130
+ onClick: () => {
131
+ setShowCustomValueControl(!showCustomValueControl);
132
+ },
133
+ isPressed: showCustomValueControl,
134
+ isSmall: true,
135
+ className: classnames({
136
+ 'components-spacing-sizes-control__custom-toggle-all': side === 'all',
137
+ 'components-spacing-sizes-control__custom-toggle-single': side !== 'all'
138
+ }),
139
+ iconSize: 24
140
+ }), showCustomValueControl && createElement(Fragment, null, createElement(UnitControl, {
141
+ onChange: newSize => onChange(getNewCustomValue(newSize)),
142
+ value: currentValue,
143
+ units: units,
144
+ min: minimumCustomValue,
145
+ placeholder: allPlaceholder,
146
+ disableUnits: isMixed,
147
+ label: ariaLabel,
148
+ hideLabelFromVision: true,
149
+ className: "components-spacing-sizes-control__custom-value-input"
150
+ }), createElement(RangeControl, {
151
+ value: customRangeValue,
152
+ min: 0,
153
+ max: 100,
154
+ withInputField: false,
155
+ onChange: handleCustomValueSliderChange,
156
+ className: "components-spacing-sizes-control__custom-value-range"
157
+ })), showRangeControl && !showCustomValueControl && createElement(RangeControl, {
158
+ className: "components-spacing-sizes-control__range-control",
159
+ value: currentValue,
160
+ onChange: newSize => onChange(getNewPresetValue(newSize)),
161
+ onMouseDown: event => {
162
+ var _event$nativeEvent;
163
+
164
+ // If mouse down is near start of range set initial value to 0, which
165
+ // prevents the user have to drag right then left to get 0 setting.
166
+ if ((event === null || event === void 0 ? void 0 : (_event$nativeEvent = event.nativeEvent) === null || _event$nativeEvent === void 0 ? void 0 : _event$nativeEvent.offsetX) < 35) {
167
+ setInitialValue();
168
+ }
169
+ },
170
+ withInputField: false,
171
+ "aria-valuenow": currentValue,
172
+ "aria-valuetext": (_spacingSizes$current = spacingSizes[currentValue]) === null || _spacingSizes$current === void 0 ? void 0 : _spacingSizes$current.name,
173
+ renderTooltipContent: customTooltipContent,
174
+ min: 0,
175
+ max: spacingSizes.length - 1,
176
+ marks: marks,
177
+ label: ariaLabel,
178
+ hideLabelFromVision: true
179
+ }), !showRangeControl && !showCustomValueControl && createElement(CustomSelectControl, {
180
+ className: "components-spacing-sizes-control__custom-select-control",
181
+ value: options.find(option => option.key === currentValue) || '' // passing undefined here causes a downshift controlled/uncontrolled warning
182
+ ,
183
+ onChange: selection => {
184
+ onChange(getNewPresetValue(selection.selectedItem.key, 'selectList'));
185
+ },
186
+ options: options,
187
+ label: ariaLabel,
188
+ hideLabelFromVision: true,
189
+ __nextUnconstrainedWidth: true
190
+ }));
191
+ }
192
+ //# sourceMappingURL=spacing-input-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/spacing-sizes-control/spacing-input-control.js"],"names":["classnames","useState","useMemo","useSelect","Button","RangeControl","CustomSelectControl","__experimentalUnitControl","UnitControl","__experimentalHStack","HStack","__experimentalText","Text","__experimentalUseCustomUnits","useCustomUnits","__experimentalParseQuantityAndUnitFromRawValue","parseQuantityAndUnitFromRawValue","__","sprintf","settings","useSetting","store","blockEditorStore","LABELS","getSliderValueFromPreset","getCustomValueFromPreset","isValueSpacingPreset","SpacingInputControl","spacingSizes","value","side","onChange","isMixed","type","minimumCustomValue","selectListSizes","showRangeControl","length","disableCustomSpacingSizes","select","editorSettings","getSettings","showCustomValueControl","setShowCustomValueControl","undefined","units","availableUnits","currentValue","showCustomValueInSelectList","name","slug","size","selectedUnit","setInitialValue","customTooltipContent","newValue","customRangeValue","parseInt","getNewCustomValue","newSize","isNumeric","isNaN","parseFloat","nextValue","getNewPresetValue","controlType","handleCustomValueSliderChange","next","join","allPlaceholder","currentValueHint","options","map","index","key","marks","label","ariaLabel","toLowerCase","showHint","event","nativeEvent","offsetX","find","option","selection","selectedItem"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tButton,\n\tRangeControl,\n\tCustomSelectControl,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalHStack as HStack,\n\t__experimentalText as Text,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { settings } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport useSetting from '../use-setting';\nimport { store as blockEditorStore } from '../../store';\nimport {\n\tLABELS,\n\tgetSliderValueFromPreset,\n\tgetCustomValueFromPreset,\n\tisValueSpacingPreset,\n} from './utils';\n\nexport default function SpacingInputControl( {\n\tspacingSizes,\n\tvalue,\n\tside,\n\tonChange,\n\tisMixed = false,\n\ttype,\n\tminimumCustomValue,\n} ) {\n\tlet selectListSizes = spacingSizes;\n\tconst showRangeControl = spacingSizes.length <= 8;\n\n\tconst disableCustomSpacingSizes = useSelect( ( select ) => {\n\t\tconst editorSettings = select( blockEditorStore ).getSettings();\n\t\treturn editorSettings?.disableCustomSpacingSizes;\n\t} );\n\n\tconst [ showCustomValueControl, setShowCustomValueControl ] = useState(\n\t\t! disableCustomSpacingSizes &&\n\t\t\tvalue !== undefined &&\n\t\t\t! isValueSpacingPreset( value )\n\t);\n\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: useSetting( 'spacing.units' ) || [ 'px', 'em', 'rem' ],\n\t} );\n\n\tlet currentValue = null;\n\n\tconst showCustomValueInSelectList =\n\t\t! showRangeControl &&\n\t\t! showCustomValueControl &&\n\t\tvalue !== undefined &&\n\t\t( ! isValueSpacingPreset( value ) ||\n\t\t\t( isValueSpacingPreset( value ) && isMixed ) );\n\n\tif ( showCustomValueInSelectList ) {\n\t\tselectListSizes = [\n\t\t\t...spacingSizes,\n\t\t\t{\n\t\t\t\tname: ! isMixed\n\t\t\t\t\t? // translators: A custom measurement, eg. a number followed by a unit like 12px.\n\t\t\t\t\t sprintf( __( 'Custom (%s)' ), value )\n\t\t\t\t\t: __( 'Mixed' ),\n\t\t\t\tslug: 'custom',\n\t\t\t\tsize: value,\n\t\t\t},\n\t\t];\n\t\tcurrentValue = selectListSizes.length - 1;\n\t} else if ( ! isMixed ) {\n\t\tcurrentValue = ! showCustomValueControl\n\t\t\t? getSliderValueFromPreset( value, spacingSizes )\n\t\t\t: getCustomValueFromPreset( value, spacingSizes );\n\t}\n\n\tconst selectedUnit =\n\t\tuseMemo(\n\t\t\t() => parseQuantityAndUnitFromRawValue( currentValue ),\n\t\t\t[ currentValue ]\n\t\t)[ 1 ] || units[ 0 ].value;\n\n\tconst setInitialValue = () => {\n\t\tif ( value === undefined ) {\n\t\t\tonChange( '0' );\n\t\t}\n\t};\n\n\tconst customTooltipContent = ( newValue ) =>\n\t\tvalue === undefined ? undefined : spacingSizes[ newValue ]?.name;\n\n\tconst customRangeValue = parseInt( currentValue, 10 );\n\n\tconst getNewCustomValue = ( newSize ) => {\n\t\tconst isNumeric = ! isNaN( parseFloat( newSize ) );\n\t\tconst nextValue = isNumeric ? newSize : undefined;\n\t\treturn nextValue;\n\t};\n\n\tconst getNewPresetValue = ( newSize, controlType ) => {\n\t\tconst size = parseInt( newSize, 10 );\n\n\t\tif ( controlType === 'selectList' ) {\n\t\t\tif ( size === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif ( size === 1 ) {\n\t\t\t\treturn '0';\n\t\t\t}\n\t\t} else if ( size === 0 ) {\n\t\t\treturn '0';\n\t\t}\n\t\treturn `var:preset|spacing|${ spacingSizes[ newSize ]?.slug }`;\n\t};\n\n\tconst handleCustomValueSliderChange = ( next ) => {\n\t\tonChange( [ next, selectedUnit ].join( '' ) );\n\t};\n\n\tconst allPlaceholder = isMixed ? __( 'Mixed' ) : null;\n\n\tconst currentValueHint = ! isMixed\n\t\t? customTooltipContent( currentValue )\n\t\t: __( 'Mixed' );\n\n\tconst options = selectListSizes.map( ( size, index ) => ( {\n\t\tkey: index,\n\t\tname: size.name,\n\t} ) );\n\n\tconst marks = spacingSizes.map( ( newValue, index ) => ( {\n\t\tvalue: index,\n\t\tlabel: undefined,\n\t} ) );\n\n\tconst ariaLabel = sprintf(\n\t\t// translators: 1: The side of the block being modified (top, bottom, left, etc.). 2. Type of spacing being modified (Padding, margin, etc)\n\t\t__( '%1$s %2$s' ),\n\t\tLABELS[ side ],\n\t\ttype?.toLowerCase()\n\t);\n\n\tconst showHint =\n\t\tshowRangeControl &&\n\t\t! showCustomValueControl &&\n\t\tcurrentValueHint !== undefined;\n\n\treturn (\n\t\t<>\n\t\t\t{ side !== 'all' && (\n\t\t\t\t<HStack className=\"components-spacing-sizes-control__side-labels\">\n\t\t\t\t\t<Text className=\"components-spacing-sizes-control__side-label\">\n\t\t\t\t\t\t{ LABELS[ side ] }\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t{ showHint && (\n\t\t\t\t\t\t<Text className=\"components-spacing-sizes-control__hint-single\">\n\t\t\t\t\t\t\t{ currentValueHint }\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) }\n\t\t\t\t</HStack>\n\t\t\t) }\n\t\t\t{ side === 'all' && showHint && (\n\t\t\t\t<Text className=\"components-spacing-sizes-control__hint-all\">\n\t\t\t\t\t{ currentValueHint }\n\t\t\t\t</Text>\n\t\t\t) }\n\n\t\t\t{ ! disableCustomSpacingSizes && (\n\t\t\t\t<Button\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tshowCustomValueControl\n\t\t\t\t\t\t\t? __( 'Use size preset' )\n\t\t\t\t\t\t\t: __( 'Set custom size' )\n\t\t\t\t\t}\n\t\t\t\t\ticon={ settings }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tsetShowCustomValueControl( ! showCustomValueControl );\n\t\t\t\t\t} }\n\t\t\t\t\tisPressed={ showCustomValueControl }\n\t\t\t\t\tisSmall\n\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t'components-spacing-sizes-control__custom-toggle-all':\n\t\t\t\t\t\t\tside === 'all',\n\t\t\t\t\t\t'components-spacing-sizes-control__custom-toggle-single':\n\t\t\t\t\t\t\tside !== 'all',\n\t\t\t\t\t} ) }\n\t\t\t\t\ticonSize={ 24 }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ showCustomValueControl && (\n\t\t\t\t<>\n\t\t\t\t\t<UnitControl\n\t\t\t\t\t\tonChange={ ( newSize ) =>\n\t\t\t\t\t\t\tonChange( getNewCustomValue( newSize ) )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={ currentValue }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tmin={ minimumCustomValue }\n\t\t\t\t\t\tplaceholder={ allPlaceholder }\n\t\t\t\t\t\tdisableUnits={ isMixed }\n\t\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\t\thideLabelFromVision={ true }\n\t\t\t\t\t\tclassName=\"components-spacing-sizes-control__custom-value-input\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\tvalue={ customRangeValue }\n\t\t\t\t\t\tmin={ 0 }\n\t\t\t\t\t\tmax={ 100 }\n\t\t\t\t\t\twithInputField={ false }\n\t\t\t\t\t\tonChange={ handleCustomValueSliderChange }\n\t\t\t\t\t\tclassName=\"components-spacing-sizes-control__custom-value-range\"\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t{ showRangeControl && ! showCustomValueControl && (\n\t\t\t\t<RangeControl\n\t\t\t\t\tclassName=\"components-spacing-sizes-control__range-control\"\n\t\t\t\t\tvalue={ currentValue }\n\t\t\t\t\tonChange={ ( newSize ) =>\n\t\t\t\t\t\tonChange( getNewPresetValue( newSize ) )\n\t\t\t\t\t}\n\t\t\t\t\tonMouseDown={ ( event ) => {\n\t\t\t\t\t\t// If mouse down is near start of range set initial value to 0, which\n\t\t\t\t\t\t// prevents the user have to drag right then left to get 0 setting.\n\t\t\t\t\t\tif ( event?.nativeEvent?.offsetX < 35 ) {\n\t\t\t\t\t\t\tsetInitialValue();\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\twithInputField={ false }\n\t\t\t\t\taria-valuenow={ currentValue }\n\t\t\t\t\taria-valuetext={ spacingSizes[ currentValue ]?.name }\n\t\t\t\t\trenderTooltipContent={ customTooltipContent }\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tmax={ spacingSizes.length - 1 }\n\t\t\t\t\tmarks={ marks }\n\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\thideLabelFromVision={ true }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! showRangeControl && ! showCustomValueControl && (\n\t\t\t\t<CustomSelectControl\n\t\t\t\t\tclassName=\"components-spacing-sizes-control__custom-select-control\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\toptions.find(\n\t\t\t\t\t\t\t( option ) => option.key === currentValue\n\t\t\t\t\t\t) || '' // passing undefined here causes a downshift controlled/uncontrolled warning\n\t\t\t\t\t}\n\t\t\t\t\tonChange={ ( selection ) => {\n\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\tgetNewPresetValue(\n\t\t\t\t\t\t\t\tselection.selectedItem.key,\n\t\t\t\t\t\t\t\t'selectList'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t\toptions={ options }\n\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\thideLabelFromVision={ true }\n\t\t\t\t\t__nextUnconstrainedWidth={ true }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { isEmpty } from 'lodash';
5
+ /**
6
+ * WordPress dependencies
7
+ */
8
+
9
+ import { __ } from '@wordpress/i18n';
10
+ /**
11
+ * Checks is given value is a spacing preset.
12
+ *
13
+ * @param {string} value Value to check
14
+ *
15
+ * @return {boolean} Return true if value is string in format var:preset|spacing|.
16
+ */
17
+
18
+ export function isValueSpacingPreset(value) {
19
+ if (!(value !== null && value !== void 0 && value.includes)) {
20
+ return false;
21
+ }
22
+
23
+ return value === '0' || value.includes('var:preset|spacing|');
24
+ }
25
+ /**
26
+ * Converts a spacing preset into a custom value.
27
+ *
28
+ * @param {string} value Value to convert
29
+ * @param {Array} spacingSizes Array of the current spacing preset objects
30
+ *
31
+ * @return {string} Mapping of the spacing preset to its equivalent custom value.
32
+ */
33
+
34
+ export function getCustomValueFromPreset(value, spacingSizes) {
35
+ if (!isValueSpacingPreset(value)) {
36
+ return value;
37
+ }
38
+
39
+ const slug = getSpacingPresetSlug(value);
40
+ const spacingSize = spacingSizes.find(size => String(size.slug) === slug);
41
+ return spacingSize === null || spacingSize === void 0 ? void 0 : spacingSize.size;
42
+ }
43
+ /**
44
+ * Converts a spacing preset into a custom value.
45
+ *
46
+ * @param {string} value Value to convert.
47
+ *
48
+ * @return {string} CSS var string for given spacing preset value.
49
+ */
50
+
51
+ export function getSpacingPresetCssVar(value) {
52
+ if (!value) {
53
+ return;
54
+ }
55
+
56
+ const slug = value.match(/var:preset\|spacing\|(.+)/);
57
+
58
+ if (!slug) {
59
+ return value;
60
+ }
61
+
62
+ return `var(--wp--preset--spacing--${slug[1]})`;
63
+ }
64
+ /**
65
+ * Returns the slug section of the given spacing preset string.
66
+ *
67
+ * @param {string} value Value to extract slug from.
68
+ *
69
+ * @return {number} The int value of the slug from given spacing preset.
70
+ */
71
+
72
+ export function getSpacingPresetSlug(value) {
73
+ if (!value) {
74
+ return;
75
+ }
76
+
77
+ if (value === '0' || value === 'default') {
78
+ return value;
79
+ }
80
+
81
+ const slug = value.match(/var:preset\|spacing\|(.+)/);
82
+ return slug ? slug[1] : undefined;
83
+ }
84
+ /**
85
+ * Converts spacing preset value into a Range component value .
86
+ *
87
+ * @param {string} presetValue Value to convert to Range value.
88
+ * @param {Array} spacingSizes Array of current spacing preset value objects.
89
+ *
90
+ * @return {number} The int value for use in Range control.
91
+ */
92
+
93
+ export function getSliderValueFromPreset(presetValue, spacingSizes) {
94
+ if (presetValue === undefined) {
95
+ return 0;
96
+ }
97
+
98
+ const slug = parseFloat(presetValue, 10) === 0 ? '0' : getSpacingPresetSlug(presetValue);
99
+ const sliderValue = spacingSizes.findIndex(spacingSize => {
100
+ return String(spacingSize.slug) === slug;
101
+ }); // Returning NaN rather than undefined as undefined makes range control thumb sit in center
102
+
103
+ return sliderValue !== -1 ? sliderValue : NaN;
104
+ }
105
+ export const LABELS = {
106
+ all: __('All sides'),
107
+ top: __('Top'),
108
+ bottom: __('Bottom'),
109
+ left: __('Left'),
110
+ right: __('Right'),
111
+ mixed: __('Mixed'),
112
+ vertical: __('Vertical'),
113
+ horizontal: __('Horizontal')
114
+ };
115
+ export const DEFAULT_VALUES = {
116
+ top: undefined,
117
+ right: undefined,
118
+ bottom: undefined,
119
+ left: undefined
120
+ };
121
+ export const ALL_SIDES = ['top', 'right', 'bottom', 'left'];
122
+ /**
123
+ * Gets an items with the most occurrence within an array
124
+ * https://stackoverflow.com/a/20762713
125
+ *
126
+ * @param {Array<any>} arr Array of items to check.
127
+ * @return {any} The item with the most occurrences.
128
+ */
129
+
130
+ function mode(arr) {
131
+ return arr.sort((a, b) => arr.filter(v => v === a).length - arr.filter(v => v === b).length).pop();
132
+ }
133
+ /**
134
+ * Gets the 'all' input value from values data.
135
+ *
136
+ * @param {Object} values Box spacing values
137
+ *
138
+ * @return {string} The most common value from all sides of box.
139
+ */
140
+
141
+
142
+ export function getAllRawValue() {
143
+ let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
144
+ return mode(Object.values(values));
145
+ }
146
+ /**
147
+ * Checks to determine if values are mixed.
148
+ *
149
+ * @param {Object} values Box values.
150
+ * @param {Array} sides Sides that values relate to.
151
+ *
152
+ * @return {boolean} Whether values are mixed.
153
+ */
154
+
155
+ export function isValuesMixed() {
156
+ let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
157
+ let sides = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ALL_SIDES;
158
+ return Object.values(values).length >= 1 && Object.values(values).length < sides.length || new Set(Object.values(values)).size > 1;
159
+ }
160
+ /**
161
+ * Checks to determine if values are defined.
162
+ *
163
+ * @param {Object} values Box values.
164
+ *
165
+ * @return {boolean} Whether values are defined.
166
+ */
167
+
168
+ export function isValuesDefined(values) {
169
+ return values !== undefined && !isEmpty(Object.values(values).filter( // Switching units when input is empty causes values only
170
+ // containing units. This gives false positive on mixed values
171
+ // unless filtered.
172
+ value => !!value && /\d/.test(value)));
173
+ }
174
+ //# sourceMappingURL=utils.js.map