@wordpress/components 21.3.0 → 22.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. package/CHANGELOG.md +65 -1
  2. package/build/angle-picker-control/index.js +1 -1
  3. package/build/angle-picker-control/index.js.map +1 -1
  4. package/build/autocomplete/autocompleter-ui.js +28 -2
  5. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  6. package/build/border-box-control/border-box-control/component.js +63 -15
  7. package/build/border-box-control/border-box-control/component.js.map +1 -1
  8. package/build/border-box-control/border-box-control/hook.js +7 -3
  9. package/build/border-box-control/border-box-control/hook.js.map +1 -1
  10. package/build/border-box-control/border-box-control-linked-button/hook.js +3 -3
  11. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  12. package/build/border-box-control/border-box-control-split-controls/component.js +3 -3
  13. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  14. package/build/border-box-control/border-box-control-split-controls/hook.js +8 -11
  15. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  16. package/build/border-box-control/border-box-control-visualizer/hook.js +3 -7
  17. package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
  18. package/build/border-box-control/styles.js +34 -34
  19. package/build/border-box-control/styles.js.map +1 -1
  20. package/build/border-control/border-control/component.js +5 -4
  21. package/build/border-control/border-control/component.js.map +1 -1
  22. package/build/border-control/border-control/hook.js +12 -5
  23. package/build/border-control/border-control/hook.js.map +1 -1
  24. package/build/border-control/border-control-dropdown/hook.js +5 -5
  25. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  26. package/build/border-control/styles.js +19 -34
  27. package/build/border-control/styles.js.map +1 -1
  28. package/build/box-control/index.js +6 -2
  29. package/build/box-control/index.js.map +1 -1
  30. package/build/circular-option-picker/index.js +14 -14
  31. package/build/circular-option-picker/index.js.map +1 -1
  32. package/build/color-palette/index.js +83 -30
  33. package/build/color-palette/index.js.map +1 -1
  34. package/build/color-palette/styles.js +3 -3
  35. package/build/color-palette/styles.js.map +1 -1
  36. package/build/color-palette/types.js +6 -0
  37. package/build/color-palette/types.js.map +1 -0
  38. package/build/color-picker/input-with-slider.js +1 -1
  39. package/build/color-picker/input-with-slider.js.map +1 -1
  40. package/build/custom-gradient-picker/gradient-bar/index.js +1 -3
  41. package/build/custom-gradient-picker/gradient-bar/index.js.map +1 -1
  42. package/build/custom-select-control/index.js +8 -4
  43. package/build/custom-select-control/index.js.map +1 -1
  44. package/build/date-time/date-time/index.js +2 -0
  45. package/build/date-time/date-time/index.js.map +1 -1
  46. package/build/date-time/time/index.js +4 -4
  47. package/build/date-time/time/index.js.map +1 -1
  48. package/build/disabled/index.js +8 -1
  49. package/build/disabled/index.js.map +1 -1
  50. package/build/external-link/index.js +13 -2
  51. package/build/external-link/index.js.map +1 -1
  52. package/build/focusable-iframe/index.js +0 -1
  53. package/build/focusable-iframe/index.js.map +1 -1
  54. package/build/font-size-picker/index.js +61 -48
  55. package/build/font-size-picker/index.js.map +1 -1
  56. package/build/font-size-picker/utils.js +0 -21
  57. package/build/font-size-picker/utils.js.map +1 -1
  58. package/build/form-file-upload/index.js.map +1 -1
  59. package/build/higher-order/with-filters/index.js +1 -7
  60. package/build/higher-order/with-filters/index.js.map +1 -1
  61. package/build/index.js +7 -1
  62. package/build/index.js.map +1 -1
  63. package/build/input-control/index.js +2 -0
  64. package/build/input-control/index.js.map +1 -1
  65. package/build/input-control/input-base.js +1 -1
  66. package/build/input-control/input-base.js.map +1 -1
  67. package/build/input-control/styles/input-control-styles.js +21 -21
  68. package/build/input-control/styles/input-control-styles.js.map +1 -1
  69. package/build/isolated-event-container/index.js +5 -9
  70. package/build/isolated-event-container/index.js.map +1 -1
  71. package/build/item-group/styles.js +10 -10
  72. package/build/item-group/styles.js.map +1 -1
  73. package/build/navigator/navigator-screen/component.js +20 -14
  74. package/build/navigator/navigator-screen/component.js.map +1 -1
  75. package/build/number-control/index.js +82 -22
  76. package/build/number-control/index.js.map +1 -1
  77. package/build/number-control/styles/number-control-styles.js +36 -6
  78. package/build/number-control/styles/number-control-styles.js.map +1 -1
  79. package/build/popover/index.js +15 -29
  80. package/build/popover/index.js.map +1 -1
  81. package/build/radio-group/index.js +7 -1
  82. package/build/radio-group/index.js.map +1 -1
  83. package/build/{radio → radio-group/radio}/index.js +7 -1
  84. package/build/radio-group/radio/index.js.map +1 -0
  85. package/build/{radio-context → radio-group/radio-context}/index.js +0 -0
  86. package/build/radio-group/radio-context/index.js.map +1 -0
  87. package/build/slot-fill/bubbles-virtually/fill.js +9 -5
  88. package/build/slot-fill/bubbles-virtually/fill.js.map +1 -1
  89. package/build/slot-fill/bubbles-virtually/slot.js +13 -8
  90. package/build/slot-fill/bubbles-virtually/slot.js.map +1 -1
  91. package/build/slot-fill/bubbles-virtually/use-slot.js +15 -9
  92. package/build/slot-fill/bubbles-virtually/use-slot.js.map +1 -1
  93. package/build/slot-fill/fill.js +12 -4
  94. package/build/slot-fill/fill.js.map +1 -1
  95. package/build/slot-fill/use-slot.js +3 -1
  96. package/build/slot-fill/use-slot.js.map +1 -1
  97. package/build/snackbar/index.js +1 -1
  98. package/build/snackbar/index.js.map +1 -1
  99. package/build/tab-panel/index.js +2 -6
  100. package/build/tab-panel/index.js.map +1 -1
  101. package/build/text-control/index.js +0 -2
  102. package/build/text-control/index.js.map +1 -1
  103. package/build/toggle-control/index.js +15 -3
  104. package/build/toggle-control/index.js.map +1 -1
  105. package/build/toggle-group-control/toggle-group-control/as-button-group.js +90 -0
  106. package/build/toggle-group-control/toggle-group-control/as-button-group.js.map +1 -0
  107. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +90 -0
  108. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -0
  109. package/build/toggle-group-control/toggle-group-control/component.js +21 -50
  110. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  111. package/build/toggle-group-control/toggle-group-control/styles.js +8 -8
  112. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  113. package/build/toggle-group-control/toggle-group-control-option-base/component.js +39 -17
  114. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  115. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +23 -23
  116. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  117. package/build/toolbar-dropdown-menu/index.js +1 -1
  118. package/build/toolbar-dropdown-menu/index.js.map +1 -1
  119. package/build/ui/context/context-system-provider.js +9 -22
  120. package/build/ui/context/context-system-provider.js.map +1 -1
  121. package/build/unit-control/index.js +7 -9
  122. package/build/unit-control/index.js.map +1 -1
  123. package/build/unit-control/styles/unit-control-styles.js +15 -25
  124. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  125. package/build/utils/config-values.js +0 -1
  126. package/build/utils/config-values.js.map +1 -1
  127. package/build/utils/hooks/use-update-effect.js +5 -1
  128. package/build/utils/hooks/use-update-effect.js.map +1 -1
  129. package/build-module/angle-picker-control/index.js +1 -1
  130. package/build-module/angle-picker-control/index.js.map +1 -1
  131. package/build-module/autocomplete/autocompleter-ui.js +29 -3
  132. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  133. package/build-module/border-box-control/border-box-control/component.js +61 -13
  134. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  135. package/build-module/border-box-control/border-box-control/hook.js +7 -3
  136. package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
  137. package/build-module/border-box-control/border-box-control-linked-button/hook.js +3 -3
  138. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  139. package/build-module/border-box-control/border-box-control-split-controls/component.js +3 -3
  140. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  141. package/build-module/border-box-control/border-box-control-split-controls/hook.js +9 -10
  142. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  143. package/build-module/border-box-control/border-box-control-visualizer/hook.js +4 -6
  144. package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
  145. package/build-module/border-box-control/styles.js +26 -28
  146. package/build-module/border-box-control/styles.js.map +1 -1
  147. package/build-module/border-control/border-control/component.js +5 -4
  148. package/build-module/border-control/border-control/component.js.map +1 -1
  149. package/build-module/border-control/border-control/hook.js +12 -5
  150. package/build-module/border-control/border-control/hook.js.map +1 -1
  151. package/build-module/border-control/border-control-dropdown/hook.js +5 -5
  152. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  153. package/build-module/border-control/styles.js +20 -36
  154. package/build-module/border-control/styles.js.map +1 -1
  155. package/build-module/box-control/index.js +6 -2
  156. package/build-module/box-control/index.js.map +1 -1
  157. package/build-module/circular-option-picker/index.js +14 -14
  158. package/build-module/circular-option-picker/index.js.map +1 -1
  159. package/build-module/color-palette/index.js +81 -28
  160. package/build-module/color-palette/index.js.map +1 -1
  161. package/build-module/color-palette/styles.js +3 -3
  162. package/build-module/color-palette/styles.js.map +1 -1
  163. package/build-module/color-palette/types.js +2 -0
  164. package/build-module/color-palette/types.js.map +1 -0
  165. package/build-module/color-picker/input-with-slider.js +1 -1
  166. package/build-module/color-picker/input-with-slider.js.map +1 -1
  167. package/build-module/custom-gradient-picker/gradient-bar/index.js +1 -2
  168. package/build-module/custom-gradient-picker/gradient-bar/index.js.map +1 -1
  169. package/build-module/custom-select-control/index.js +8 -4
  170. package/build-module/custom-select-control/index.js.map +1 -1
  171. package/build-module/date-time/date-time/index.js +2 -0
  172. package/build-module/date-time/date-time/index.js.map +1 -1
  173. package/build-module/date-time/time/index.js +4 -4
  174. package/build-module/date-time/time/index.js.map +1 -1
  175. package/build-module/disabled/index.js +8 -1
  176. package/build-module/disabled/index.js.map +1 -1
  177. package/build-module/external-link/index.js +13 -2
  178. package/build-module/external-link/index.js.map +1 -1
  179. package/build-module/focusable-iframe/index.js +0 -1
  180. package/build-module/focusable-iframe/index.js.map +1 -1
  181. package/build-module/font-size-picker/index.js +65 -50
  182. package/build-module/font-size-picker/index.js.map +1 -1
  183. package/build-module/font-size-picker/utils.js +0 -19
  184. package/build-module/font-size-picker/utils.js.map +1 -1
  185. package/build-module/form-file-upload/index.js.map +1 -1
  186. package/build-module/higher-order/with-filters/index.js +1 -6
  187. package/build-module/higher-order/with-filters/index.js.map +1 -1
  188. package/build-module/index.js +2 -2
  189. package/build-module/index.js.map +1 -1
  190. package/build-module/input-control/index.js +2 -0
  191. package/build-module/input-control/index.js.map +1 -1
  192. package/build-module/input-control/input-base.js +1 -1
  193. package/build-module/input-control/input-base.js.map +1 -1
  194. package/build-module/input-control/styles/input-control-styles.js +21 -21
  195. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  196. package/build-module/isolated-event-container/index.js +7 -9
  197. package/build-module/isolated-event-container/index.js.map +1 -1
  198. package/build-module/item-group/styles.js +10 -10
  199. package/build-module/item-group/styles.js.map +1 -1
  200. package/build-module/navigator/navigator-screen/component.js +20 -4
  201. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  202. package/build-module/number-control/index.js +81 -26
  203. package/build-module/number-control/index.js.map +1 -1
  204. package/build-module/number-control/styles/number-control-styles.js +30 -4
  205. package/build-module/number-control/styles/number-control-styles.js.map +1 -1
  206. package/build-module/popover/index.js +15 -29
  207. package/build-module/popover/index.js.map +1 -1
  208. package/build-module/radio-group/index.js +6 -1
  209. package/build-module/radio-group/index.js.map +1 -1
  210. package/build-module/{radio → radio-group/radio}/index.js +6 -1
  211. package/build-module/radio-group/radio/index.js.map +1 -0
  212. package/build-module/{radio-context → radio-group/radio-context}/index.js +0 -0
  213. package/build-module/radio-group/radio-context/index.js.map +1 -0
  214. package/build-module/slot-fill/bubbles-virtually/fill.js +9 -5
  215. package/build-module/slot-fill/bubbles-virtually/fill.js.map +1 -1
  216. package/build-module/slot-fill/bubbles-virtually/slot.js +13 -8
  217. package/build-module/slot-fill/bubbles-virtually/slot.js.map +1 -1
  218. package/build-module/slot-fill/bubbles-virtually/use-slot.js +15 -9
  219. package/build-module/slot-fill/bubbles-virtually/use-slot.js.map +1 -1
  220. package/build-module/slot-fill/fill.js +12 -4
  221. package/build-module/slot-fill/fill.js.map +1 -1
  222. package/build-module/slot-fill/use-slot.js +3 -1
  223. package/build-module/slot-fill/use-slot.js.map +1 -1
  224. package/build-module/snackbar/index.js +1 -1
  225. package/build-module/snackbar/index.js.map +1 -1
  226. package/build-module/tab-panel/index.js +2 -6
  227. package/build-module/tab-panel/index.js.map +1 -1
  228. package/build-module/text-control/index.js +0 -2
  229. package/build-module/text-control/index.js.map +1 -1
  230. package/build-module/toggle-control/index.js +15 -3
  231. package/build-module/toggle-control/index.js.map +1 -1
  232. package/build-module/toggle-group-control/toggle-group-control/as-button-group.js +76 -0
  233. package/build-module/toggle-group-control/toggle-group-control/as-button-group.js.map +1 -0
  234. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +75 -0
  235. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -0
  236. package/build-module/toggle-group-control/toggle-group-control/component.js +19 -49
  237. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  238. package/build-module/toggle-group-control/toggle-group-control/styles.js +7 -6
  239. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  240. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +39 -17
  241. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  242. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +21 -18
  243. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  244. package/build-module/toolbar-dropdown-menu/index.js +1 -1
  245. package/build-module/toolbar-dropdown-menu/index.js.map +1 -1
  246. package/build-module/ui/context/context-system-provider.js +6 -20
  247. package/build-module/ui/context/context-system-provider.js.map +1 -1
  248. package/build-module/unit-control/index.js +8 -10
  249. package/build-module/unit-control/index.js.map +1 -1
  250. package/build-module/unit-control/styles/unit-control-styles.js +8 -24
  251. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  252. package/build-module/utils/config-values.js +0 -1
  253. package/build-module/utils/config-values.js.map +1 -1
  254. package/build-module/utils/hooks/use-update-effect.js +5 -1
  255. package/build-module/utils/hooks/use-update-effect.js.map +1 -1
  256. package/build-style/style-rtl.css +21 -41
  257. package/build-style/style.css +19 -39
  258. package/build-types/base-field/hook.d.ts +11 -11
  259. package/build-types/border-box-control/border-box-control/component.d.ts +53 -4
  260. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  261. package/build-types/border-box-control/border-box-control/hook.d.ts +13 -12
  262. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  263. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +12 -12
  264. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -1
  265. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +1 -1
  266. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
  267. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +12 -12
  268. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  269. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +12 -12
  270. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -1
  271. package/build-types/border-box-control/stories/index.d.ts +17 -0
  272. package/build-types/border-box-control/stories/index.d.ts.map +1 -0
  273. package/build-types/border-box-control/styles.d.ts +7 -6
  274. package/build-types/border-box-control/styles.d.ts.map +1 -1
  275. package/build-types/border-box-control/types.d.ts +12 -16
  276. package/build-types/border-box-control/types.d.ts.map +1 -1
  277. package/build-types/border-control/border-control/component.d.ts +1 -1
  278. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  279. package/build-types/border-control/border-control/hook.d.ts +13 -13
  280. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  281. package/build-types/border-control/border-control-dropdown/component.d.ts +1 -1
  282. package/build-types/border-control/border-control-dropdown/hook.d.ts +11 -11
  283. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  284. package/build-types/border-control/border-control-style-picker/hook.d.ts +11 -11
  285. package/build-types/border-control/stories/index.d.ts +6 -6
  286. package/build-types/border-control/stories/index.d.ts.map +1 -1
  287. package/build-types/border-control/styles.d.ts +3 -3
  288. package/build-types/border-control/styles.d.ts.map +1 -1
  289. package/build-types/border-control/types.d.ts +7 -9
  290. package/build-types/border-control/types.d.ts.map +1 -1
  291. package/build-types/card/card/hook.d.ts +12 -12
  292. package/build-types/card/card-body/hook.d.ts +12 -12
  293. package/build-types/card/card-divider/hook.d.ts +13 -13
  294. package/build-types/card/card-footer/hook.d.ts +12 -12
  295. package/build-types/card/card-header/hook.d.ts +12 -12
  296. package/build-types/card/card-media/hook.d.ts +12 -12
  297. package/build-types/card/stories/index.d.ts.map +1 -1
  298. package/build-types/circular-option-picker/index.d.ts +4 -24
  299. package/build-types/circular-option-picker/index.d.ts.map +1 -1
  300. package/build-types/color-palette/index.d.ts +33 -18
  301. package/build-types/color-palette/index.d.ts.map +1 -1
  302. package/build-types/color-palette/stories/index.d.ts +21 -0
  303. package/build-types/color-palette/stories/index.d.ts.map +1 -0
  304. package/build-types/color-palette/styles.d.ts +3 -2
  305. package/build-types/color-palette/styles.d.ts.map +1 -1
  306. package/build-types/color-palette/test/index.d.ts +2 -0
  307. package/build-types/color-palette/test/index.d.ts.map +1 -0
  308. package/build-types/color-palette/types.d.ts +86 -0
  309. package/build-types/color-palette/types.d.ts.map +1 -0
  310. package/build-types/color-picker/styles.d.ts +5 -4
  311. package/build-types/color-picker/styles.d.ts.map +1 -1
  312. package/build-types/confirm-dialog/component.d.ts +4 -4
  313. package/build-types/custom-select-control/index.d.ts +1 -12
  314. package/build-types/custom-select-control/index.d.ts.map +1 -1
  315. package/build-types/custom-select-control/styles.d.ts +3 -1
  316. package/build-types/custom-select-control/styles.d.ts.map +1 -1
  317. package/build-types/date-time/date/styles.d.ts +3 -3
  318. package/build-types/date-time/date-time/index.d.ts +2 -0
  319. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  320. package/build-types/date-time/date-time/styles.d.ts +3 -3
  321. package/build-types/date-time/stories/date-time.d.ts.map +1 -1
  322. package/build-types/date-time/time/styles.d.ts +8 -4
  323. package/build-types/date-time/time/styles.d.ts.map +1 -1
  324. package/build-types/disabled/index.d.ts +8 -1
  325. package/build-types/disabled/index.d.ts.map +1 -1
  326. package/build-types/elevation/hook.d.ts +12 -12
  327. package/build-types/external-link/index.d.ts.map +1 -1
  328. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  329. package/build-types/external-link/test/index.d.ts +2 -0
  330. package/build-types/external-link/test/index.d.ts.map +1 -0
  331. package/build-types/flex/flex/hook.d.ts +12 -12
  332. package/build-types/flex/flex-block/hook.d.ts +12 -12
  333. package/build-types/flex/flex-item/hook.d.ts +12 -12
  334. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -2
  335. package/build-types/focal-point-picker/styles/focal-point-style.d.ts +3 -3
  336. package/build-types/focusable-iframe/index.d.ts.map +1 -1
  337. package/build-types/font-size-picker/index.d.ts.map +1 -1
  338. package/build-types/font-size-picker/types.d.ts +1 -1
  339. package/build-types/font-size-picker/utils.d.ts +0 -8
  340. package/build-types/font-size-picker/utils.d.ts.map +1 -1
  341. package/build-types/form-file-upload/index.d.ts.map +1 -1
  342. package/build-types/form-file-upload/types.d.ts +5 -4
  343. package/build-types/form-file-upload/types.d.ts.map +1 -1
  344. package/build-types/grid/hook.d.ts +12 -12
  345. package/build-types/h-stack/component.d.ts +1 -1
  346. package/build-types/h-stack/hook.d.ts +12 -12
  347. package/build-types/heading/hook.d.ts +12 -12
  348. package/build-types/input-control/index.d.ts +1 -1
  349. package/build-types/input-control/index.d.ts.map +1 -1
  350. package/build-types/input-control/input-base.d.ts +5 -2
  351. package/build-types/input-control/input-base.d.ts.map +1 -1
  352. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  353. package/build-types/input-control/types.d.ts +3 -8
  354. package/build-types/input-control/types.d.ts.map +1 -1
  355. package/build-types/input-control/utils.d.ts +1 -1
  356. package/build-types/isolated-event-container/index.d.ts +3 -2
  357. package/build-types/isolated-event-container/index.d.ts.map +1 -1
  358. package/build-types/item-group/item/hook.d.ts +13 -13
  359. package/build-types/item-group/item-group/hook.d.ts +13 -13
  360. package/build-types/navigator/navigator-back-button/hook.d.ts +13 -13
  361. package/build-types/navigator/navigator-button/hook.d.ts +13 -13
  362. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  363. package/build-types/number-control/index.d.ts +2 -4
  364. package/build-types/number-control/index.d.ts.map +1 -1
  365. package/build-types/number-control/styles/number-control-styles.d.ts +5 -0
  366. package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
  367. package/build-types/number-control/types.d.ts +12 -0
  368. package/build-types/number-control/types.d.ts.map +1 -1
  369. package/build-types/popover/index.d.ts +1 -1
  370. package/build-types/popover/index.d.ts.map +1 -1
  371. package/build-types/popover/stories/e2e/index.d.ts +1 -1
  372. package/build-types/popover/stories/index.d.ts +2 -0
  373. package/build-types/popover/stories/index.d.ts.map +1 -1
  374. package/build-types/popover/types.d.ts +18 -14
  375. package/build-types/popover/types.d.ts.map +1 -1
  376. package/build-types/radio-group/index.d.ts +10 -0
  377. package/build-types/radio-group/index.d.ts.map +1 -0
  378. package/build-types/radio-group/radio/index.d.ts +7 -0
  379. package/build-types/radio-group/radio/index.d.ts.map +1 -0
  380. package/build-types/{radio-context → radio-group/radio-context}/index.d.ts +0 -0
  381. package/build-types/radio-group/radio-context/index.d.ts.map +1 -0
  382. package/build-types/range-control/index.d.ts +1 -1
  383. package/build-types/range-control/styles/range-control-styles.d.ts +2 -1
  384. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  385. package/build-types/resizable-box/index.d.ts +1 -1
  386. package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
  387. package/build-types/resizable-box/resize-tooltip/label.d.ts +1 -1
  388. package/build-types/scrollable/hook.d.ts +12 -12
  389. package/build-types/search-control/index.d.ts +2 -2
  390. package/build-types/search-control/stories/index.d.ts +4 -4
  391. package/build-types/select-control/stories/index.d.ts.map +1 -1
  392. package/build-types/slot-fill/bubbles-virtually/use-slot.d.ts.map +1 -1
  393. package/build-types/slot-fill/fill.d.ts.map +1 -1
  394. package/build-types/slot-fill/use-slot.d.ts.map +1 -1
  395. package/build-types/spacer/hook.d.ts +12 -12
  396. package/build-types/spinner/index.d.ts +1 -1
  397. package/build-types/surface/hook.d.ts +12 -12
  398. package/build-types/tab-panel/index.d.ts.map +1 -1
  399. package/build-types/text/hook.d.ts +12 -12
  400. package/build-types/text-control/index.d.ts +2 -4
  401. package/build-types/text-control/index.d.ts.map +1 -1
  402. package/build-types/text-control/stories/index.d.ts.map +1 -1
  403. package/build-types/toggle-control/index.d.ts.map +1 -1
  404. package/build-types/toggle-control/types.d.ts +2 -1
  405. package/build-types/toggle-control/types.d.ts.map +1 -1
  406. package/build-types/toggle-group-control/stories/index.d.ts +2 -2
  407. package/build-types/toggle-group-control/stories/index.d.ts.map +1 -1
  408. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +6 -0
  409. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts.map +1 -0
  410. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +6 -0
  411. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -0
  412. package/build-types/toggle-group-control/toggle-group-control/component.d.ts +2 -2
  413. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  414. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +2 -2
  415. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  416. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  417. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +4 -7
  418. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  419. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  420. package/build-types/toggle-group-control/types.d.ts +19 -14
  421. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  422. package/build-types/tools-panel/tools-panel/hook.d.ts +12 -12
  423. package/build-types/tools-panel/tools-panel-header/hook.d.ts +12 -12
  424. package/build-types/tools-panel/tools-panel-item/hook.d.ts +12 -12
  425. package/build-types/truncate/hook.d.ts +12 -12
  426. package/build-types/ui/context/context-system-provider.d.ts.map +1 -1
  427. package/build-types/ui/control-group/hook.d.ts +12 -12
  428. package/build-types/ui/control-label/component.d.ts +1 -1
  429. package/build-types/ui/control-label/hook.d.ts +12 -12
  430. package/build-types/ui/form-group/form-group.d.ts +4 -4
  431. package/build-types/ui/form-group/use-form-group.d.ts +28 -28
  432. package/build-types/unit-control/index.d.ts +2 -2
  433. package/build-types/unit-control/index.d.ts.map +1 -1
  434. package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -5
  435. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  436. package/build-types/unit-control/types.d.ts +3 -3
  437. package/build-types/unit-control/types.d.ts.map +1 -1
  438. package/build-types/utils/config-values.d.ts +0 -1
  439. package/build-types/utils/hooks/use-update-effect.d.ts.map +1 -1
  440. package/build-types/utils/types.d.ts +0 -14
  441. package/build-types/utils/types.d.ts.map +1 -1
  442. package/build-types/v-stack/component.d.ts +2 -2
  443. package/build-types/v-stack/hook.d.ts +12 -12
  444. package/build-types/v-stack/stories/index.d.ts +2 -2
  445. package/package.json +17 -17
  446. package/src/angle-picker-control/index.js +1 -1
  447. package/src/angle-picker-control/stories/index.js +3 -0
  448. package/src/autocomplete/autocompleter-ui.js +29 -2
  449. package/src/autocomplete/test/index.js +89 -0
  450. package/src/border-box-control/border-box-control/README.md +8 -0
  451. package/src/border-box-control/border-box-control/component.tsx +64 -13
  452. package/src/border-box-control/border-box-control/hook.ts +7 -2
  453. package/src/border-box-control/border-box-control-linked-button/hook.ts +3 -6
  454. package/src/border-box-control/border-box-control-split-controls/component.tsx +3 -6
  455. package/src/border-box-control/border-box-control-split-controls/hook.ts +11 -14
  456. package/src/border-box-control/border-box-control-visualizer/hook.ts +4 -7
  457. package/src/border-box-control/stories/index.tsx +90 -0
  458. package/src/border-box-control/styles.ts +28 -22
  459. package/src/border-box-control/test/index.js +287 -122
  460. package/src/border-box-control/types.ts +12 -16
  461. package/src/border-control/border-control/README.md +8 -0
  462. package/src/border-control/border-control/component.tsx +4 -3
  463. package/src/border-control/border-control/hook.ts +10 -6
  464. package/src/border-control/border-control-dropdown/hook.ts +5 -7
  465. package/src/border-control/stories/index.tsx +12 -14
  466. package/src/border-control/styles.ts +20 -23
  467. package/src/border-control/test/index.js +139 -96
  468. package/src/border-control/types.ts +7 -9
  469. package/src/box-control/README.md +14 -0
  470. package/src/box-control/index.js +4 -0
  471. package/src/box-control/stories/index.js +8 -27
  472. package/src/button/README.md +2 -15
  473. package/src/button/stories/index.js +109 -178
  474. package/src/button/style.scss +17 -54
  475. package/src/card/stories/index.tsx +27 -31
  476. package/src/card/test/__snapshots__/index.tsx.snap +36 -35
  477. package/src/card/test/index.tsx +2 -6
  478. package/src/circular-option-picker/index.js +14 -20
  479. package/src/color-palette/README.md +51 -49
  480. package/src/color-palette/{index.js → index.tsx} +132 -51
  481. package/src/color-palette/stories/{index.js → index.tsx} +38 -27
  482. package/src/color-palette/style.scss +2 -2
  483. package/src/color-palette/{styles.js → styles.ts} +0 -0
  484. package/src/color-palette/test/__snapshots__/{index.js.snap → index.tsx.snap} +0 -0
  485. package/src/color-palette/test/{index.js → index.tsx} +1 -1
  486. package/src/color-palette/types.ts +93 -0
  487. package/src/color-picker/input-with-slider.tsx +1 -1
  488. package/src/custom-gradient-picker/gradient-bar/index.js +1 -3
  489. package/src/custom-select-control/README.md +14 -0
  490. package/src/custom-select-control/index.js +22 -15
  491. package/src/date-time/date-time/index.tsx +2 -0
  492. package/src/date-time/stories/date-time.tsx +4 -0
  493. package/src/date-time/time/index.tsx +4 -4
  494. package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -0
  495. package/src/disabled/README.md +2 -0
  496. package/src/disabled/index.tsx +8 -1
  497. package/src/disabled/test/index.tsx +0 -5
  498. package/src/external-link/index.tsx +14 -6
  499. package/src/external-link/test/index.tsx +106 -0
  500. package/src/focusable-iframe/index.js +0 -1
  501. package/src/font-size-picker/README.md +3 -3
  502. package/src/font-size-picker/index.tsx +152 -142
  503. package/src/font-size-picker/test/index.tsx +447 -174
  504. package/src/font-size-picker/test/utils.ts +1 -45
  505. package/src/font-size-picker/types.ts +1 -1
  506. package/src/font-size-picker/utils.ts +0 -22
  507. package/src/form-file-upload/README.md +1 -3
  508. package/src/form-file-upload/index.tsx +1 -0
  509. package/src/form-file-upload/types.ts +5 -4
  510. package/src/form-toggle/test/__snapshots__/index.tsx.snap +15 -13
  511. package/src/form-toggle/test/index.tsx +1 -1
  512. package/src/h-stack/test/__snapshots__/index.tsx.snap +36 -30
  513. package/src/h-stack/test/index.tsx +3 -3
  514. package/src/higher-order/with-filters/index.js +4 -9
  515. package/src/index.js +2 -1
  516. package/src/input-control/index.tsx +2 -0
  517. package/src/input-control/input-base.tsx +3 -3
  518. package/src/input-control/styles/input-control-styles.tsx +1 -0
  519. package/src/input-control/types.ts +4 -11
  520. package/src/isolated-event-container/index.tsx +32 -0
  521. package/src/item-group/styles.ts +1 -1
  522. package/src/item-group/test/__snapshots__/index.js.snap +90 -85
  523. package/src/item-group/test/index.js +7 -17
  524. package/src/navigator/navigator-screen/component.tsx +20 -3
  525. package/src/number-control/README.md +9 -4
  526. package/src/number-control/index.tsx +100 -33
  527. package/src/number-control/styles/number-control-styles.js +26 -1
  528. package/src/number-control/test/index.js +50 -0
  529. package/src/number-control/types.ts +12 -0
  530. package/src/popover/README.md +12 -7
  531. package/src/popover/index.tsx +20 -30
  532. package/src/popover/stories/index.tsx +29 -1
  533. package/src/popover/style.scss +9 -0
  534. package/src/popover/types.ts +18 -15
  535. package/src/radio-group/README.md +4 -0
  536. package/src/radio-group/index.js +6 -1
  537. package/src/{radio → radio-group/radio}/index.js +6 -1
  538. package/src/{radio-context → radio-group/radio-context}/index.js +0 -0
  539. package/src/radio-group/stories/index.js +11 -2
  540. package/src/sandbox/test/index.js +2 -2
  541. package/src/select-control/stories/index.tsx +9 -4
  542. package/src/slot-fill/bubbles-virtually/fill.js +5 -5
  543. package/src/slot-fill/bubbles-virtually/slot.js +10 -8
  544. package/src/slot-fill/bubbles-virtually/use-slot.js +15 -9
  545. package/src/slot-fill/fill.js +12 -2
  546. package/src/slot-fill/use-slot.js +3 -0
  547. package/src/snackbar/index.js +1 -1
  548. package/src/surface/test/__snapshots__/index.tsx.snap +58 -46
  549. package/src/surface/test/index.tsx +6 -16
  550. package/src/tab-panel/index.tsx +2 -3
  551. package/src/tab-panel/test/index.tsx +78 -1
  552. package/src/text/test/__snapshots__/index.tsx.snap +19 -15
  553. package/src/text/test/index.tsx +2 -2
  554. package/src/text-control/index.tsx +0 -2
  555. package/src/text-control/stories/index.tsx +5 -6
  556. package/src/toggle-control/README.md +6 -4
  557. package/src/toggle-control/index.tsx +13 -2
  558. package/src/toggle-control/types.ts +2 -4
  559. package/src/toggle-group-control/stories/index.tsx +4 -4
  560. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +219 -160
  561. package/src/toggle-group-control/test/index.tsx +129 -2
  562. package/src/toggle-group-control/toggle-group-control/as-button-group.tsx +103 -0
  563. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +99 -0
  564. package/src/toggle-group-control/toggle-group-control/component.tsx +29 -74
  565. package/src/toggle-group-control/toggle-group-control/styles.ts +12 -10
  566. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +49 -25
  567. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +39 -19
  568. package/src/toggle-group-control/types.ts +75 -63
  569. package/src/toolbar-dropdown-menu/index.js +1 -1
  570. package/src/tools-panel/stories/index.js +0 -1
  571. package/src/tools-panel/stories/tools-panel-with-item-group-slot.js +0 -1
  572. package/src/tree-grid/test/__snapshots__/cell.js.snap +20 -18
  573. package/src/tree-grid/test/__snapshots__/roving-tab-index.js.snap +3 -1
  574. package/src/tree-grid/test/__snapshots__/row.js.snap +33 -29
  575. package/src/tree-grid/test/cell.js +1 -1
  576. package/src/tree-grid/test/roving-tab-index.js +1 -1
  577. package/src/tree-grid/test/row.js +2 -2
  578. package/src/ui/context/context-system-provider.js +5 -18
  579. package/src/ui/context/test/__snapshots__/context-system-provider.js.snap +23 -17
  580. package/src/ui/context/test/context-system-provider.js +3 -3
  581. package/src/ui/control-group/test/__snapshots__/index.js.snap +18 -16
  582. package/src/ui/control-group/test/index.js +1 -1
  583. package/src/ui/control-label/test/__snapshots__/index.js.snap +27 -21
  584. package/src/ui/control-label/test/index.js +3 -3
  585. package/src/ui/form-group/test/__snapshots__/index.js.snap +34 -30
  586. package/src/ui/form-group/test/index.js +2 -2
  587. package/src/ui/shortcut/test/__snapshots__/index.js.snap +1 -1
  588. package/src/ui/shortcut/test/index.js +1 -1
  589. package/src/ui/spinner/test/__snapshots__/index.js.snap +75 -73
  590. package/src/ui/spinner/test/index.js +3 -7
  591. package/src/unit-control/index.tsx +29 -30
  592. package/src/unit-control/styles/unit-control-styles.ts +6 -12
  593. package/src/unit-control/test/utils.ts +43 -0
  594. package/src/unit-control/types.ts +5 -6
  595. package/src/utils/config-values.js +0 -1
  596. package/src/utils/hooks/use-update-effect.js +5 -1
  597. package/src/utils/types.ts +0 -15
  598. package/src/v-stack/test/__snapshots__/index.tsx.snap +36 -30
  599. package/src/v-stack/test/index.tsx +3 -3
  600. package/src/view/test/__snapshots__/index.js.snap +34 -24
  601. package/src/view/test/index.js +5 -5
  602. package/tsconfig.json +0 -2
  603. package/tsconfig.tsbuildinfo +1 -1
  604. package/build/radio/index.js.map +0 -1
  605. package/build/radio-context/index.js.map +0 -1
  606. package/build-module/radio/index.js.map +0 -1
  607. package/build-module/radio-context/index.js.map +0 -1
  608. package/build-types/radio-context/index.d.ts.map +0 -1
  609. package/src/border-box-control/stories/index.js +0 -106
  610. package/src/form-file-upload/stories/index.js +0 -51
  611. package/src/isolated-event-container/index.js +0 -28
  612. package/src/radio/stories/index.js +0 -20
@@ -7,7 +7,7 @@ import { map } from 'lodash';
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
- import { useLayoutEffect } from '@wordpress/element';
10
+ import { useLayoutEffect, useRef, useEffect } from '@wordpress/element';
11
11
  import { useAnchor } from '@wordpress/rich-text';
12
12
 
13
13
  /**
@@ -31,6 +31,7 @@ export function getAutoCompleterUI( autocompleter ) {
31
31
  onChangeOptions,
32
32
  onSelect,
33
33
  onReset,
34
+ reset,
34
35
  value,
35
36
  contentRef,
36
37
  } ) {
@@ -40,6 +41,10 @@ export function getAutoCompleterUI( autocompleter ) {
40
41
  value,
41
42
  } );
42
43
 
44
+ const popoverRef = useRef();
45
+
46
+ useOnClickOutside( popoverRef, reset );
47
+
43
48
  useLayoutEffect( () => {
44
49
  onChangeOptions( items );
45
50
  // Temporarily disabling exhaustive-deps to avoid introducing unexpected side effecst.
@@ -55,9 +60,10 @@ export function getAutoCompleterUI( autocompleter ) {
55
60
  <Popover
56
61
  focusOnMount={ false }
57
62
  onClose={ onReset }
58
- position="top right"
63
+ placement="top-start"
59
64
  className="components-autocomplete__popover"
60
65
  anchor={ popoverAnchor }
66
+ ref={ popoverRef }
61
67
  >
62
68
  <div
63
69
  id={ listBoxId }
@@ -90,3 +96,24 @@ export function getAutoCompleterUI( autocompleter ) {
90
96
 
91
97
  return AutocompleterUI;
92
98
  }
99
+
100
+ function useOnClickOutside( ref, handler ) {
101
+ useEffect( () => {
102
+ const listener = ( event ) => {
103
+ // Do nothing if clicking ref's element or descendent elements, or if the ref is not referencing an element
104
+ if ( ! ref.current || ref.current.contains( event.target ) ) {
105
+ return;
106
+ }
107
+ handler( event );
108
+ };
109
+ document.addEventListener( 'mousedown', listener );
110
+ document.addEventListener( 'touchstart', listener );
111
+ return () => {
112
+ document.removeEventListener( 'mousedown', listener );
113
+ document.removeEventListener( 'touchstart', listener );
114
+ };
115
+ // Disable reason: `ref` is a ref object and should not be included in a
116
+ // hook's dependency list.
117
+ // eslint-disable-next-line react-hooks/exhaustive-deps
118
+ }, [ handler ] );
119
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useRef } from '@wordpress/element';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import { getAutoCompleterUI } from '../autocompleter-ui';
16
+
17
+ describe( 'AutocompleterUI', () => {
18
+ describe( 'click outside behavior', () => {
19
+ it( 'should call reset function when a click on another element occurs', async () => {
20
+ const user = userEvent.setup( {
21
+ advanceTimers: jest.advanceTimersByTime,
22
+ } );
23
+
24
+ const resetSpy = jest.fn();
25
+
26
+ const autocompleter = {
27
+ name: 'fruit',
28
+ // The prefix that triggers this completer
29
+ triggerPrefix: '~',
30
+ // Mock useItems function to return a autocomplete item.
31
+ useItems: () => {
32
+ return [
33
+ [
34
+ {
35
+ isDisabled: false,
36
+ key: 'Apple',
37
+ value: 'Apple',
38
+ label: (
39
+ <span>
40
+ <span className="icon">🍎</span>
41
+ { 'Apple' }
42
+ </span>
43
+ ),
44
+ },
45
+ ],
46
+ ];
47
+ },
48
+ };
49
+
50
+ const AutocompleterUI = getAutoCompleterUI( autocompleter );
51
+
52
+ const OtherElement = <div>Other Element</div>;
53
+
54
+ const Container = () => {
55
+ const contentRef = useRef();
56
+
57
+ return (
58
+ <div>
59
+ <AutocompleterUI
60
+ className={ 'test' }
61
+ filterValue={ '~' }
62
+ instanceId={ '1' }
63
+ listBoxId={ '1' }
64
+ selectedIndex={ 0 }
65
+ onChangeOptions={ () => {} }
66
+ onSelect={ () => {} }
67
+ value={ { visual: '🍎', name: 'Apple', id: 1 } }
68
+ contentRef={ contentRef }
69
+ reset={ resetSpy }
70
+ />
71
+ { OtherElement }
72
+ </div>
73
+ );
74
+ };
75
+
76
+ render( <Container /> );
77
+
78
+ // Click on autocompleter.
79
+ await user.click( screen.getByText( 'Apple' ) );
80
+
81
+ expect( resetSpy ).toHaveBeenCalledTimes( 0 );
82
+
83
+ // Click on other element out side of the tree.
84
+ await user.click( screen.getByText( 'Other Element' ) );
85
+
86
+ expect( resetSpy ).toHaveBeenCalledTimes( 1 );
87
+ } );
88
+ } );
89
+ } );
@@ -138,6 +138,14 @@ Works in conjunctions with `popoverPlacement` and allows leaving a space between
138
138
 
139
139
  - Required: No
140
140
 
141
+ ### `size`: `string`
142
+
143
+ Size of the control.
144
+
145
+ - Required: No
146
+ - Default: `default`
147
+ - Allowed values: `default`, `__unstable-large`
148
+
141
149
  ### `value`: `Object`
142
150
 
143
151
  An object representing the current border configuration.
@@ -11,7 +11,6 @@ import { useMergeRefs } from '@wordpress/compose';
11
11
  import BorderBoxControlLinkedButton from '../border-box-control-linked-button';
12
12
  import BorderBoxControlSplitControls from '../border-box-control-split-controls';
13
13
  import { BorderControl } from '../../border-control';
14
- import { HStack } from '../../h-stack';
15
14
  import { StyledLabel } from '../../base-control/styles/base-control-styles';
16
15
  import { View } from '../../view';
17
16
  import { VisuallyHidden } from '../../visually-hidden';
@@ -38,8 +37,8 @@ const BorderLabel = ( props: LabelProps ) => {
38
37
  );
39
38
  };
40
39
 
41
- const BorderBoxControl = (
42
- props: WordPressComponentProps< BorderBoxControlProps, 'div' >,
40
+ const UnconnectedBorderBoxControl = (
41
+ props: WordPressComponentProps< BorderBoxControlProps, 'div', false >,
43
42
  forwardedRef: React.ForwardedRef< any >
44
43
  ) => {
45
44
  const {
@@ -59,11 +58,12 @@ const BorderBoxControl = (
59
58
  onSplitChange,
60
59
  popoverPlacement,
61
60
  popoverOffset,
61
+ size = 'default',
62
62
  splitValue,
63
63
  toggleLinked,
64
+ wrapperClassName,
64
65
  __experimentalHasMultipleOrigins,
65
66
  __experimentalIsRenderedInSidebar,
66
- __next36pxDefaultSize = false,
67
67
  ...otherProps
68
68
  } = useBorderBoxControl( props );
69
69
 
@@ -96,7 +96,7 @@ const BorderBoxControl = (
96
96
  label={ label }
97
97
  hideLabelFromVision={ hideLabelFromVision }
98
98
  />
99
- <HStack alignment={ 'start' } expanded={ true } spacing={ 0 }>
99
+ <View className={ wrapperClassName }>
100
100
  { isLinked ? (
101
101
  <BorderControl
102
102
  className={ linkedControlClassName }
@@ -113,14 +113,16 @@ const BorderBoxControl = (
113
113
  shouldSanitizeBorder={ false } // This component will handle that.
114
114
  value={ linkedValue }
115
115
  withSlider={ true }
116
- width={ '110px' }
116
+ width={
117
+ size === '__unstable-large' ? '116px' : '110px'
118
+ }
117
119
  __experimentalHasMultipleOrigins={
118
120
  __experimentalHasMultipleOrigins
119
121
  }
120
122
  __experimentalIsRenderedInSidebar={
121
123
  __experimentalIsRenderedInSidebar
122
124
  }
123
- __next36pxDefaultSize={ __next36pxDefaultSize }
125
+ size={ size }
124
126
  />
125
127
  ) : (
126
128
  <BorderBoxControlSplitControls
@@ -138,22 +140,71 @@ const BorderBoxControl = (
138
140
  __experimentalIsRenderedInSidebar={
139
141
  __experimentalIsRenderedInSidebar
140
142
  }
141
- __next36pxDefaultSize={ __next36pxDefaultSize }
143
+ size={ size }
142
144
  />
143
145
  ) }
144
146
  <BorderBoxControlLinkedButton
145
147
  onClick={ toggleLinked }
146
148
  isLinked={ isLinked }
147
- __next36pxDefaultSize={ __next36pxDefaultSize }
149
+ size={ size }
148
150
  />
149
- </HStack>
151
+ </View>
150
152
  </View>
151
153
  );
152
154
  };
153
155
 
154
- const ConnectedBorderBoxControl = contextConnect(
155
- BorderBoxControl,
156
+ /**
157
+ * The `BorderBoxControl` effectively has two view states. The first, a "linked"
158
+ * view, allows configuration of a flat border via a single `BorderControl`.
159
+ * The second, a "split" view, contains a `BorderControl` for each side
160
+ * as well as a visualizer for the currently selected borders. Each view also
161
+ * contains a button to toggle between the two.
162
+ *
163
+ * When switching from the "split" view to "linked", if the individual side
164
+ * borders are not consistent, the "linked" view will display any border
165
+ * properties selections that are consistent while showing a mixed state for
166
+ * those that aren't. For example, if all borders had the same color and style
167
+ * but different widths, then the border dropdown in the "linked" view's
168
+ * `BorderControl` would show that consistent color and style but the "linked"
169
+ * view's width input would show "Mixed" placeholder text.
170
+ *
171
+ * ```jsx
172
+ * import { __experimentalBorderBoxControl as BorderBoxControl } from '@wordpress/components';
173
+ * import { __ } from '@wordpress/i18n';
174
+ *
175
+ * const colors = [
176
+ * { name: 'Blue 20', color: '#72aee6' },
177
+ * // ...
178
+ * ];
179
+ *
180
+ * const MyBorderBoxControl = () => {
181
+ * const defaultBorder = {
182
+ * color: '#72aee6',
183
+ * style: 'dashed',
184
+ * width: '1px',
185
+ * };
186
+ * const [ borders, setBorders ] = useState( {
187
+ * top: defaultBorder,
188
+ * right: defaultBorder,
189
+ * bottom: defaultBorder,
190
+ * left: defaultBorder,
191
+ * } );
192
+ * const onChange = ( newBorders ) => setBorders( newBorders );
193
+ *
194
+ * return (
195
+ * <BorderBoxControl
196
+ * colors={ colors }
197
+ * label={ __( 'Borders' ) }
198
+ * onChange={ onChange }
199
+ * value={ borders }
200
+ * />
201
+ * );
202
+ * };
203
+ * ```
204
+ */
205
+ export const BorderBoxControl = contextConnect(
206
+ UnconnectedBorderBoxControl,
156
207
  'BorderBoxControl'
157
208
  );
158
209
 
159
- export default ConnectedBorderBoxControl;
210
+ export default BorderBoxControl;
@@ -100,11 +100,15 @@ export function useBorderBoxControl(
100
100
 
101
101
  const cx = useCx();
102
102
  const classes = useMemo( () => {
103
- return cx( styles.BorderBoxControl, className );
103
+ return cx( styles.borderBoxControl, className );
104
104
  }, [ cx, className ] );
105
105
 
106
106
  const linkedControlClassName = useMemo( () => {
107
- return cx( styles.LinkedBorderControl );
107
+ return cx( styles.linkedBorderControl() );
108
+ }, [ cx ] );
109
+
110
+ const wrapperClassName = useMemo( () => {
111
+ return cx( styles.wrapper );
108
112
  }, [ cx ] );
109
113
 
110
114
  return {
@@ -119,5 +123,6 @@ export function useBorderBoxControl(
119
123
  toggleLinked,
120
124
  linkedValue,
121
125
  splitValue,
126
+ wrapperClassName,
122
127
  };
123
128
  }
@@ -17,18 +17,15 @@ export function useBorderBoxControlLinkedButton(
17
17
  ) {
18
18
  const {
19
19
  className,
20
- __next36pxDefaultSize = false,
20
+ size = 'default',
21
21
  ...otherProps
22
22
  } = useContextSystem( props, 'BorderBoxControlLinkedButton' );
23
23
 
24
24
  // Generate class names.
25
25
  const cx = useCx();
26
26
  const classes = useMemo( () => {
27
- return cx(
28
- styles.BorderBoxControlLinkedButton( __next36pxDefaultSize ),
29
- className
30
- );
31
- }, [ className, cx, __next36pxDefaultSize ] );
27
+ return cx( styles.borderBoxControlLinkedButton( size ), className );
28
+ }, [ className, cx, size ] );
32
29
 
33
30
  return { ...otherProps, className: classes };
34
31
  }
@@ -31,10 +31,10 @@ const BorderBoxControlSplitControls = (
31
31
  popoverPlacement,
32
32
  popoverOffset,
33
33
  rightAlignedClassName,
34
+ size = 'default',
34
35
  value,
35
36
  __experimentalHasMultipleOrigins,
36
37
  __experimentalIsRenderedInSidebar,
37
- __next36pxDefaultSize,
38
38
  ...otherProps
39
39
  } = useBorderBoxControlSplitControls( props );
40
40
 
@@ -67,17 +67,14 @@ const BorderBoxControlSplitControls = (
67
67
  isCompact: true,
68
68
  __experimentalHasMultipleOrigins,
69
69
  __experimentalIsRenderedInSidebar,
70
- __next36pxDefaultSize,
70
+ size,
71
71
  };
72
72
 
73
73
  const mergedRef = useMergeRefs( [ setPopoverAnchor, forwardedRef ] );
74
74
 
75
75
  return (
76
76
  <Grid { ...otherProps } ref={ mergedRef } gap={ 4 }>
77
- <BorderBoxControlVisualizer
78
- value={ value }
79
- __next36pxDefaultSize={ __next36pxDefaultSize }
80
- />
77
+ <BorderBoxControlVisualizer value={ value } size={ size } />
81
78
  <BorderControl
82
79
  className={ centeredClassName }
83
80
  hideLabelFromVision={ true }
@@ -8,41 +8,38 @@ import { useMemo } from '@wordpress/element';
8
8
  */
9
9
  import * as styles from '../styles';
10
10
  import { useContextSystem, WordPressComponentProps } from '../../ui/context';
11
- import { useCx, rtl } from '../../utils/';
11
+ import { useCx } from '../../utils/';
12
12
 
13
13
  import type { SplitControlsProps } from '../types';
14
14
 
15
15
  export function useBorderBoxControlSplitControls(
16
16
  props: WordPressComponentProps< SplitControlsProps, 'div' >
17
17
  ) {
18
- const { className, ...otherProps } = useContextSystem(
19
- props,
20
- 'BorderBoxControlSplitControls'
21
- );
18
+ const {
19
+ className,
20
+ size = 'default',
21
+ ...otherProps
22
+ } = useContextSystem( props, 'BorderBoxControlSplitControls' );
22
23
 
23
24
  // Generate class names.
24
25
  const cx = useCx();
25
- const rtlWatchResult = rtl.watch();
26
26
  const classes = useMemo( () => {
27
- return cx( styles.borderBoxControlSplitControls(), className );
28
- // rtlWatchResult is needed to refresh styles when the writing direction changes
29
- // eslint-disable-next-line react-hooks/exhaustive-deps
30
- }, [ cx, className, rtlWatchResult ] );
27
+ return cx( styles.borderBoxControlSplitControls( size ), className );
28
+ }, [ cx, className, size ] );
31
29
 
32
30
  const centeredClassName = useMemo( () => {
33
- return cx( styles.CenteredBorderControl, className );
31
+ return cx( styles.centeredBorderControl, className );
34
32
  }, [ cx, className ] );
35
33
 
36
34
  const rightAlignedClassName = useMemo( () => {
37
35
  return cx( styles.rightBorderControl(), className );
38
- // rtlWatchResult is needed to refresh styles when the writing direction changes
39
- // eslint-disable-next-line react-hooks/exhaustive-deps
40
- }, [ cx, className, rtlWatchResult ] );
36
+ }, [ cx, className ] );
41
37
 
42
38
  return {
43
39
  ...otherProps,
44
40
  centeredClassName,
45
41
  className: classes,
46
42
  rightAlignedClassName,
43
+ size,
47
44
  };
48
45
  }
@@ -8,7 +8,7 @@ import { useMemo } from '@wordpress/element';
8
8
  */
9
9
  import * as styles from '../styles';
10
10
  import { useContextSystem, WordPressComponentProps } from '../../ui/context';
11
- import { useCx, rtl } from '../../utils';
11
+ import { useCx } from '../../utils';
12
12
 
13
13
  import type { VisualizerProps } from '../types';
14
14
 
@@ -18,21 +18,18 @@ export function useBorderBoxControlVisualizer(
18
18
  const {
19
19
  className,
20
20
  value,
21
- __next36pxDefaultSize = false,
21
+ size = 'default',
22
22
  ...otherProps
23
23
  } = useContextSystem( props, 'BorderBoxControlVisualizer' );
24
24
 
25
25
  // Generate class names.
26
26
  const cx = useCx();
27
- const rtlWatchResult = rtl.watch();
28
27
  const classes = useMemo( () => {
29
28
  return cx(
30
- styles.borderBoxControlVisualizer( value, __next36pxDefaultSize ),
29
+ styles.borderBoxControlVisualizer( value, size ),
31
30
  className
32
31
  );
33
- // rtlWatchResult is needed to refresh styles when the writing direction changes
34
- // eslint-disable-next-line react-hooks/exhaustive-deps
35
- }, [ cx, className, value, __next36pxDefaultSize, rtlWatchResult ] );
32
+ }, [ cx, className, value, size ] );
36
33
 
37
34
  return { ...otherProps, className: classes, value };
38
35
  }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+ import type { ComponentProps } from 'react';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useState } from '@wordpress/element';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import Button from '../../button';
16
+ import Popover from '../../popover';
17
+ import { BorderBoxControl } from '../';
18
+ import { Provider as SlotFillProvider } from '../../slot-fill';
19
+
20
+ const meta: ComponentMeta< typeof BorderBoxControl > = {
21
+ title: 'Components (Experimental)/BorderBoxControl',
22
+ component: BorderBoxControl,
23
+ argTypes: {
24
+ onChange: { action: 'onChange' },
25
+ value: { control: { type: null } },
26
+ },
27
+ parameters: {
28
+ controls: { expanded: true },
29
+ docs: { source: { state: 'open' } },
30
+ },
31
+ };
32
+ export default meta;
33
+
34
+ // Available border colors.
35
+ const colors = [
36
+ { name: 'Blue 20', color: '#72aee6' },
37
+ { name: 'Blue 40', color: '#3582c4' },
38
+ { name: 'Red 40', color: '#e65054' },
39
+ { name: 'Red 70', color: '#8a2424' },
40
+ { name: 'Yellow 10', color: '#f2d675' },
41
+ { name: 'Yellow 40', color: '#bd8600' },
42
+ ];
43
+
44
+ const Template: ComponentStory< typeof BorderBoxControl > = ( props ) => {
45
+ const { onChange, ...otherProps } = props;
46
+ const [ borders, setBorders ] = useState< typeof props[ 'value' ] >();
47
+
48
+ const onChangeMerged: ComponentProps<
49
+ typeof BorderBoxControl
50
+ >[ 'onChange' ] = ( newBorders ) => {
51
+ setBorders( newBorders );
52
+ onChange( newBorders );
53
+ };
54
+
55
+ return (
56
+ <SlotFillProvider>
57
+ <BorderBoxControl
58
+ { ...otherProps }
59
+ onChange={ onChangeMerged }
60
+ value={ borders }
61
+ />
62
+ <hr
63
+ style={ {
64
+ marginTop: '100px',
65
+ borderColor: '#ddd',
66
+ borderStyle: 'solid',
67
+ borderBottom: 'none',
68
+ } }
69
+ />
70
+ <p style={ { color: '#aaa', fontSize: '0.9em' } }>
71
+ The BorderBoxControl is intended to be used within a component
72
+ that will provide reset controls. The button below is only for
73
+ convenience.
74
+ </p>
75
+ <Button
76
+ variant="primary"
77
+ onClick={ () => onChangeMerged( undefined ) }
78
+ >
79
+ Reset
80
+ </Button>
81
+ { /* @ts-expect-error Ignore until Popover.Slot is converted to TS */ }
82
+ <Popover.Slot />
83
+ </SlotFillProvider>
84
+ );
85
+ };
86
+ export const Default = Template.bind( {} );
87
+ Default.args = {
88
+ colors,
89
+ label: 'Borders',
90
+ };
@@ -7,29 +7,33 @@ import { css } from '@emotion/react';
7
7
  * Internal dependencies
8
8
  */
9
9
  import { COLORS, CONFIG, rtl } from '../utils';
10
- import { space } from '../ui/utils/space';
11
10
 
12
11
  import type { Border } from '../border-control/types';
13
12
  import type { Borders } from './types';
14
13
 
15
- export const BorderBoxControl = css``;
14
+ export const borderBoxControl = css``;
16
15
 
17
- export const LinkedBorderControl = css`
16
+ export const linkedBorderControl = () => css`
18
17
  flex: 1;
18
+ ${ rtl( { marginRight: '24px' } )() }
19
19
  `;
20
20
 
21
- export const BorderBoxControlLinkedButton = (
22
- __next36pxDefaultSize?: boolean
21
+ export const wrapper = css`
22
+ position: relative;
23
+ `;
24
+
25
+ export const borderBoxControlLinkedButton = (
26
+ size?: 'default' | '__unstable-large'
23
27
  ) => {
24
28
  return css`
25
- flex: 0;
26
- flex-basis: 24px;
29
+ position: absolute;
30
+ top: ${ size === '__unstable-large' ? '8px' : '3px' };
31
+ ${ rtl( { right: 0 } )() }
27
32
  line-height: 0;
28
- margin-top: ${ __next36pxDefaultSize ? '6px' : '3px' };
29
33
  `;
30
34
  };
31
35
 
32
- const BorderBoxStyleWithFallback = ( border?: Border ) => {
36
+ const borderBoxStyleWithFallback = ( border?: Border ) => {
33
37
  const {
34
38
  color = COLORS.gray[ 200 ],
35
39
  style = 'solid',
@@ -46,36 +50,38 @@ const BorderBoxStyleWithFallback = ( border?: Border ) => {
46
50
 
47
51
  export const borderBoxControlVisualizer = (
48
52
  borders?: Borders,
49
- __next36pxDefaultSize?: boolean
53
+ size?: 'default' | '__unstable-large'
50
54
  ) => {
51
55
  return css`
52
56
  position: absolute;
53
- top: ${ __next36pxDefaultSize ? '18px' : '15px' };
54
- right: 30px;
55
- bottom: ${ __next36pxDefaultSize ? '18px' : '15px' };
56
- left: 30px;
57
- border-top: ${ BorderBoxStyleWithFallback( borders?.top ) };
58
- border-bottom: ${ BorderBoxStyleWithFallback( borders?.bottom ) };
57
+ top: ${ size === '__unstable-large' ? '20px' : '15px' };
58
+ right: ${ size === '__unstable-large' ? '39px' : '29px' };
59
+ bottom: ${ size === '__unstable-large' ? '20px' : '15px' };
60
+ left: ${ size === '__unstable-large' ? '39px' : '29px' };
61
+ border-top: ${ borderBoxStyleWithFallback( borders?.top ) };
62
+ border-bottom: ${ borderBoxStyleWithFallback( borders?.bottom ) };
59
63
  ${ rtl( {
60
- borderLeft: BorderBoxStyleWithFallback( borders?.left ),
64
+ borderLeft: borderBoxStyleWithFallback( borders?.left ),
61
65
  } )() }
62
66
  ${ rtl( {
63
- borderRight: BorderBoxStyleWithFallback( borders?.right ),
67
+ borderRight: borderBoxStyleWithFallback( borders?.right ),
64
68
  } )() }
65
69
  `;
66
70
  };
67
71
 
68
- export const borderBoxControlSplitControls = () => css`
72
+ export const borderBoxControlSplitControls = (
73
+ size?: 'default' | '__unstable-large'
74
+ ) => css`
69
75
  position: relative;
70
76
  flex: 1;
71
- ${ rtl( { marginRight: space( 3 ) }, { marginLeft: space( 3 ) } )() }
77
+ width: ${ size === '__unstable-large' ? undefined : '80%' };
72
78
  `;
73
79
 
74
- export const CenteredBorderControl = css`
80
+ export const centeredBorderControl = css`
75
81
  grid-column: span 2;
76
82
  margin: 0 auto;
77
83
  `;
78
84
 
79
85
  export const rightBorderControl = () => css`
80
- ${ rtl( { marginLeft: 'auto' }, { marginRight: 'auto' } )() }
86
+ ${ rtl( { marginLeft: 'auto' } )() }
81
87
  `;