@wordpress/components 19.7.0 → 19.9.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 (504) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/README.md +38 -0
  3. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +11 -11
  4. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  5. package/build/base-control/index.js +35 -31
  6. package/build/base-control/index.js.map +1 -1
  7. package/build/base-control/styles/base-control-styles.js +18 -18
  8. package/build/base-control/styles/base-control-styles.js.map +1 -1
  9. package/build/base-control/types.js +6 -0
  10. package/build/base-control/types.js.map +1 -0
  11. package/build/border-box-control/border-box-control/component.js +124 -0
  12. package/build/border-box-control/border-box-control/component.js.map +1 -0
  13. package/build/border-box-control/border-box-control/hook.js +113 -0
  14. package/build/border-box-control/border-box-control/hook.js.map +1 -0
  15. package/build/border-box-control/border-box-control/index.js +24 -0
  16. package/build/border-box-control/border-box-control/index.js.map +1 -0
  17. package/build/border-box-control/border-box-control-linked-button/component.js +59 -0
  18. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -0
  19. package/build/border-box-control/border-box-control-linked-button/hook.js +41 -0
  20. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
  21. package/build/border-box-control/border-box-control-linked-button/index.js +16 -0
  22. package/build/border-box-control/border-box-control-linked-button/index.js.map +1 -0
  23. package/build/border-box-control/border-box-control-split-controls/component.js +93 -0
  24. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -0
  25. package/build/border-box-control/border-box-control-split-controls/hook.js +45 -0
  26. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
  27. package/build/border-box-control/border-box-control-split-controls/index.js +16 -0
  28. package/build/border-box-control/border-box-control-split-controls/index.js.map +1 -0
  29. package/build/border-box-control/border-box-control-visualizer/component.js +40 -0
  30. package/build/border-box-control/border-box-control-visualizer/component.js.map +1 -0
  31. package/build/border-box-control/border-box-control-visualizer/hook.js +43 -0
  32. package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
  33. package/build/border-box-control/border-box-control-visualizer/index.js +16 -0
  34. package/build/border-box-control/border-box-control-visualizer/index.js.map +1 -0
  35. package/build/border-box-control/index.js +44 -0
  36. package/build/border-box-control/index.js.map +1 -0
  37. package/build/border-box-control/styles.js +76 -0
  38. package/build/border-box-control/styles.js.map +1 -0
  39. package/build/border-box-control/types.js +6 -0
  40. package/build/border-box-control/types.js.map +1 -0
  41. package/build/border-box-control/utils.js +161 -0
  42. package/build/border-box-control/utils.js.map +1 -0
  43. package/build/border-control/border-control/component.js +119 -0
  44. package/build/border-control/border-control/component.js.map +1 -0
  45. package/build/border-control/border-control/hook.js +130 -0
  46. package/build/border-control/border-control/hook.js.map +1 -0
  47. package/build/border-control/border-control/index.js +24 -0
  48. package/build/border-control/border-control/index.js.map +1 -0
  49. package/build/border-control/border-control-dropdown/component.js +196 -0
  50. package/build/border-control/border-control-dropdown/component.js.map +1 -0
  51. package/build/border-control/border-control-dropdown/hook.js +105 -0
  52. package/build/border-control/border-control-dropdown/hook.js.map +1 -0
  53. package/build/border-control/border-control-dropdown/index.js +16 -0
  54. package/build/border-control/border-control-dropdown/index.js.map +1 -0
  55. package/build/border-control/border-control-style-picker/component.js +101 -0
  56. package/build/border-control/border-control-style-picker/component.js.map +1 -0
  57. package/build/border-control/border-control-style-picker/hook.js +45 -0
  58. package/build/border-control/border-control-style-picker/hook.js.map +1 -0
  59. package/build/border-control/border-control-style-picker/index.js +16 -0
  60. package/build/border-control/border-control-style-picker/index.js.map +1 -0
  61. package/build/border-control/index.js +24 -0
  62. package/build/border-control/index.js.map +1 -0
  63. package/build/border-control/styles.js +125 -0
  64. package/build/border-control/styles.js.map +1 -0
  65. package/build/border-control/types.js +6 -0
  66. package/build/border-control/types.js.map +1 -0
  67. package/build/card/styles.js +22 -17
  68. package/build/card/styles.js.map +1 -1
  69. package/build/custom-select-control/index.js +4 -1
  70. package/build/custom-select-control/index.js.map +1 -1
  71. package/build/guide/index.js +14 -8
  72. package/build/guide/index.js.map +1 -1
  73. package/build/heading/hook.js +1 -1
  74. package/build/heading/hook.js.map +1 -1
  75. package/build/index.js +40 -0
  76. package/build/index.js.map +1 -1
  77. package/build/input-control/index.js +26 -4
  78. package/build/input-control/index.js.map +1 -1
  79. package/build/input-control/styles/input-control-styles.js +25 -25
  80. package/build/input-control/styles/input-control-styles.js.map +1 -1
  81. package/build/item-group/styles.js +14 -14
  82. package/build/item-group/styles.js.map +1 -1
  83. package/build/mobile/picker/index.android.js +0 -3
  84. package/build/mobile/picker/index.android.js.map +1 -1
  85. package/build/navigation/styles/navigation-styles.js +12 -12
  86. package/build/navigation/styles/navigation-styles.js.map +1 -1
  87. package/build/notice/index.native.js +44 -40
  88. package/build/notice/index.native.js.map +1 -1
  89. package/build/notice/list.native.js +27 -45
  90. package/build/notice/list.native.js.map +1 -1
  91. package/build/palette-edit/index.js +2 -1
  92. package/build/palette-edit/index.js.map +1 -1
  93. package/build/sandbox/index.js +2 -2
  94. package/build/sandbox/index.js.map +1 -1
  95. package/build/select-control/styles/select-control-styles.js +5 -5
  96. package/build/select-control/styles/select-control-styles.js.map +1 -1
  97. package/build/surface/styles.js +8 -8
  98. package/build/surface/styles.js.map +1 -1
  99. package/build/text/hook.js +5 -5
  100. package/build/text/hook.js.map +1 -1
  101. package/build/text/styles/text-mixins.native.js +1 -1
  102. package/build/text/styles/text-mixins.native.js.map +1 -1
  103. package/build/text/styles.js +7 -7
  104. package/build/text/styles.js.map +1 -1
  105. package/build/toggle-group-control/index.js +8 -0
  106. package/build/toggle-group-control/index.js.map +1 -1
  107. package/build/toggle-group-control/toggle-group-control/component.js +10 -1
  108. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  109. package/build/toggle-group-control/toggle-group-control/styles.js +14 -3
  110. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  111. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +90 -0
  112. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
  113. package/build/toggle-group-control/toggle-group-control-option/component.js +9 -87
  114. package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  115. package/build/toggle-group-control/toggle-group-control-option-base/component.js +127 -0
  116. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
  117. package/build/toggle-group-control/toggle-group-control-option-base/index.js +16 -0
  118. package/build/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
  119. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +66 -0
  120. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
  121. package/build/toggle-group-control/toggle-group-control-option-icon/component.js +55 -0
  122. package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
  123. package/build/toggle-group-control/toggle-group-control-option-icon/index.js +16 -0
  124. package/build/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
  125. package/build/toolbar-dropdown-menu/index.js +1 -1
  126. package/build/toolbar-dropdown-menu/index.js.map +1 -1
  127. package/build/ui/spinner/component.js +1 -1
  128. package/build/ui/spinner/component.js.map +1 -1
  129. package/build/unit-control/index.js +7 -2
  130. package/build/unit-control/index.js.map +1 -1
  131. package/build/utils/colors-values.js +14 -27
  132. package/build/utils/colors-values.js.map +1 -1
  133. package/build/utils/config-values.js +9 -4
  134. package/build/utils/config-values.js.map +1 -1
  135. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +11 -11
  136. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  137. package/build-module/base-control/index.js +33 -34
  138. package/build-module/base-control/index.js.map +1 -1
  139. package/build-module/base-control/styles/base-control-styles.js +18 -18
  140. package/build-module/base-control/styles/base-control-styles.js.map +1 -1
  141. package/build-module/base-control/types.js +2 -0
  142. package/build-module/base-control/types.js.map +1 -0
  143. package/build-module/border-box-control/border-box-control/component.js +104 -0
  144. package/build-module/border-box-control/border-box-control/component.js.map +1 -0
  145. package/build-module/border-box-control/border-box-control/hook.js +97 -0
  146. package/build-module/border-box-control/border-box-control/hook.js.map +1 -0
  147. package/build-module/border-box-control/border-box-control/index.js +3 -0
  148. package/build-module/border-box-control/border-box-control/index.js.map +1 -0
  149. package/build-module/border-box-control/border-box-control-linked-button/component.js +42 -0
  150. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -0
  151. package/build-module/border-box-control/border-box-control-linked-button/hook.js +26 -0
  152. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
  153. package/build-module/border-box-control/border-box-control-linked-button/index.js +2 -0
  154. package/build-module/border-box-control/border-box-control-linked-button/index.js.map +1 -0
  155. package/build-module/border-box-control/border-box-control-split-controls/component.js +77 -0
  156. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -0
  157. package/build-module/border-box-control/border-box-control-split-controls/hook.js +30 -0
  158. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
  159. package/build-module/border-box-control/border-box-control-split-controls/index.js +2 -0
  160. package/build-module/border-box-control/border-box-control-split-controls/index.js.map +1 -0
  161. package/build-module/border-box-control/border-box-control-visualizer/component.js +27 -0
  162. package/build-module/border-box-control/border-box-control-visualizer/component.js.map +1 -0
  163. package/build-module/border-box-control/border-box-control-visualizer/hook.js +28 -0
  164. package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
  165. package/build-module/border-box-control/border-box-control-visualizer/index.js +2 -0
  166. package/build-module/border-box-control/border-box-control-visualizer/index.js.map +1 -0
  167. package/build-module/border-box-control/index.js +4 -0
  168. package/build-module/border-box-control/index.js.map +1 -0
  169. package/build-module/border-box-control/styles.js +66 -0
  170. package/build-module/border-box-control/styles.js.map +1 -0
  171. package/build-module/border-box-control/types.js +2 -0
  172. package/build-module/border-box-control/types.js.map +1 -0
  173. package/build-module/border-box-control/utils.js +127 -0
  174. package/build-module/border-box-control/utils.js.map +1 -0
  175. package/build-module/border-control/border-control/component.js +100 -0
  176. package/build-module/border-control/border-control/component.js.map +1 -0
  177. package/build-module/border-control/border-control/hook.js +115 -0
  178. package/build-module/border-control/border-control/hook.js.map +1 -0
  179. package/build-module/border-control/border-control/index.js +3 -0
  180. package/build-module/border-control/border-control/index.js.map +1 -0
  181. package/build-module/border-control/border-control-dropdown/component.js +174 -0
  182. package/build-module/border-control/border-control-dropdown/component.js.map +1 -0
  183. package/build-module/border-control/border-control-dropdown/hook.js +89 -0
  184. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -0
  185. package/build-module/border-control/border-control-dropdown/index.js +2 -0
  186. package/build-module/border-control/border-control-dropdown/index.js.map +1 -0
  187. package/build-module/border-control/border-control-style-picker/component.js +81 -0
  188. package/build-module/border-control/border-control-style-picker/component.js.map +1 -0
  189. package/build-module/border-control/border-control-style-picker/hook.js +30 -0
  190. package/build-module/border-control/border-control-style-picker/hook.js.map +1 -0
  191. package/build-module/border-control/border-control-style-picker/index.js +2 -0
  192. package/build-module/border-control/border-control-style-picker/index.js.map +1 -0
  193. package/build-module/border-control/index.js +3 -0
  194. package/build-module/border-control/index.js.map +1 -0
  195. package/build-module/border-control/styles.js +90 -0
  196. package/build-module/border-control/styles.js.map +1 -0
  197. package/build-module/border-control/types.js +2 -0
  198. package/build-module/border-control/types.js.map +1 -0
  199. package/build-module/card/styles.js +23 -18
  200. package/build-module/card/styles.js.map +1 -1
  201. package/build-module/custom-select-control/index.js +4 -1
  202. package/build-module/custom-select-control/index.js.map +1 -1
  203. package/build-module/guide/index.js +14 -8
  204. package/build-module/guide/index.js.map +1 -1
  205. package/build-module/heading/hook.js +1 -1
  206. package/build-module/heading/hook.js.map +1 -1
  207. package/build-module/index.js +3 -1
  208. package/build-module/index.js.map +1 -1
  209. package/build-module/input-control/index.js +23 -3
  210. package/build-module/input-control/index.js.map +1 -1
  211. package/build-module/input-control/styles/input-control-styles.js +25 -25
  212. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  213. package/build-module/item-group/styles.js +14 -14
  214. package/build-module/item-group/styles.js.map +1 -1
  215. package/build-module/mobile/picker/index.android.js +0 -3
  216. package/build-module/mobile/picker/index.android.js.map +1 -1
  217. package/build-module/navigation/styles/navigation-styles.js +13 -13
  218. package/build-module/navigation/styles/navigation-styles.js.map +1 -1
  219. package/build-module/notice/index.native.js +45 -41
  220. package/build-module/notice/index.native.js.map +1 -1
  221. package/build-module/notice/list.native.js +28 -46
  222. package/build-module/notice/list.native.js.map +1 -1
  223. package/build-module/palette-edit/index.js +3 -2
  224. package/build-module/palette-edit/index.js.map +1 -1
  225. package/build-module/sandbox/index.js +2 -2
  226. package/build-module/sandbox/index.js.map +1 -1
  227. package/build-module/select-control/styles/select-control-styles.js +5 -5
  228. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  229. package/build-module/surface/styles.js +8 -8
  230. package/build-module/surface/styles.js.map +1 -1
  231. package/build-module/text/hook.js +5 -5
  232. package/build-module/text/hook.js.map +1 -1
  233. package/build-module/text/styles/text-mixins.native.js +2 -2
  234. package/build-module/text/styles/text-mixins.native.js.map +1 -1
  235. package/build-module/text/styles.js +7 -7
  236. package/build-module/text/styles.js.map +1 -1
  237. package/build-module/toggle-group-control/index.js +1 -0
  238. package/build-module/toggle-group-control/index.js.map +1 -1
  239. package/build-module/toggle-group-control/toggle-group-control/component.js +8 -1
  240. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  241. package/build-module/toggle-group-control/toggle-group-control/styles.js +11 -3
  242. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  243. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +86 -0
  244. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
  245. package/build-module/toggle-group-control/toggle-group-control-option/component.js +9 -76
  246. package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  247. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +105 -0
  248. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
  249. package/build-module/toggle-group-control/toggle-group-control-option-base/index.js +2 -0
  250. package/build-module/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
  251. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +55 -0
  252. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
  253. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +50 -0
  254. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
  255. package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js +2 -0
  256. package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
  257. package/build-module/toolbar-dropdown-menu/index.js +1 -1
  258. package/build-module/toolbar-dropdown-menu/index.js.map +1 -1
  259. package/build-module/ui/spinner/component.js +1 -1
  260. package/build-module/ui/spinner/component.js.map +1 -1
  261. package/build-module/unit-control/index.js +7 -2
  262. package/build-module/unit-control/index.js.map +1 -1
  263. package/build-module/utils/colors-values.js +24 -26
  264. package/build-module/utils/colors-values.js.map +1 -1
  265. package/build-module/utils/config-values.js +8 -4
  266. package/build-module/utils/config-values.js.map +1 -1
  267. package/build-style/style-rtl.css +21 -4
  268. package/build-style/style.css +21 -4
  269. package/build-types/base-control/index.d.ts +35 -76
  270. package/build-types/base-control/index.d.ts.map +1 -1
  271. package/build-types/base-control/stories/index.d.ts +25 -0
  272. package/build-types/base-control/stories/index.d.ts.map +1 -0
  273. package/build-types/base-control/styles/base-control-styles.d.ts +6 -5
  274. package/build-types/base-control/styles/base-control-styles.d.ts.map +1 -1
  275. package/build-types/base-control/types.d.ts +41 -0
  276. package/build-types/base-control/types.d.ts.map +1 -0
  277. package/build-types/border-box-control/border-box-control/component.d.ts +4 -0
  278. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -0
  279. package/build-types/border-box-control/border-box-control/hook.d.ts +282 -0
  280. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -0
  281. package/build-types/border-box-control/border-box-control/index.d.ts +3 -0
  282. package/build-types/border-box-control/border-box-control/index.d.ts.map +1 -0
  283. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +4 -0
  284. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -0
  285. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +266 -0
  286. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -0
  287. package/build-types/border-box-control/border-box-control-linked-button/index.d.ts +2 -0
  288. package/build-types/border-box-control/border-box-control-linked-button/index.d.ts.map +1 -0
  289. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +4 -0
  290. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -0
  291. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +274 -0
  292. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -0
  293. package/build-types/border-box-control/border-box-control-split-controls/index.d.ts +2 -0
  294. package/build-types/border-box-control/border-box-control-split-controls/index.d.ts.map +1 -0
  295. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts +4 -0
  296. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -0
  297. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +266 -0
  298. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -0
  299. package/build-types/border-box-control/border-box-control-visualizer/index.d.ts +2 -0
  300. package/build-types/border-box-control/border-box-control-visualizer/index.d.ts.map +1 -0
  301. package/build-types/border-box-control/index.d.ts +4 -0
  302. package/build-types/border-box-control/index.d.ts.map +1 -0
  303. package/build-types/border-box-control/styles.d.ts +8 -0
  304. package/build-types/border-box-control/styles.d.ts.map +1 -0
  305. package/build-types/border-box-control/types.d.ts +91 -0
  306. package/build-types/border-box-control/types.d.ts.map +1 -0
  307. package/build-types/border-box-control/utils.d.ts +24 -0
  308. package/build-types/border-box-control/utils.d.ts.map +1 -0
  309. package/build-types/border-control/border-control/component.d.ts +4 -0
  310. package/build-types/border-control/border-control/component.d.ts.map +1 -0
  311. package/build-types/border-control/border-control/hook.d.ts +285 -0
  312. package/build-types/border-control/border-control/hook.d.ts.map +1 -0
  313. package/build-types/border-control/border-control/index.d.ts +3 -0
  314. package/build-types/border-control/border-control/index.d.ts.map +1 -0
  315. package/build-types/border-control/border-control-dropdown/component.d.ts +4 -0
  316. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -0
  317. package/build-types/border-control/border-control-dropdown/hook.d.ts +280 -0
  318. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -0
  319. package/build-types/border-control/border-control-dropdown/index.d.ts +2 -0
  320. package/build-types/border-control/border-control-dropdown/index.d.ts.map +1 -0
  321. package/build-types/border-control/border-control-style-picker/component.d.ts +4 -0
  322. package/build-types/border-control/border-control-style-picker/component.d.ts.map +1 -0
  323. package/build-types/border-control/border-control-style-picker/hook.d.ts +269 -0
  324. package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -0
  325. package/build-types/border-control/border-control-style-picker/index.d.ts +2 -0
  326. package/build-types/border-control/border-control-style-picker/index.d.ts.map +1 -0
  327. package/build-types/border-control/index.d.ts +3 -0
  328. package/build-types/border-control/index.d.ts.map +1 -0
  329. package/build-types/border-control/styles.d.ts +18 -0
  330. package/build-types/border-control/styles.d.ts.map +1 -0
  331. package/build-types/border-control/types.d.ts +163 -0
  332. package/build-types/border-control/types.d.ts.map +1 -0
  333. package/build-types/card/styles.d.ts.map +1 -1
  334. package/build-types/color-indicator/index.d.ts +7 -0
  335. package/build-types/color-indicator/index.d.ts.map +1 -0
  336. package/build-types/color-picker/styles.d.ts +1 -1
  337. package/build-types/input-control/index.d.ts +22 -3
  338. package/build-types/input-control/index.d.ts.map +1 -1
  339. package/build-types/input-control/input-field.d.ts +1 -1
  340. package/build-types/input-control/input-field.d.ts.map +1 -1
  341. package/build-types/input-control/stories/index.d.ts +17 -0
  342. package/build-types/input-control/stories/index.d.ts.map +1 -0
  343. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  344. package/build-types/input-control/types.d.ts +73 -3
  345. package/build-types/input-control/types.d.ts.map +1 -1
  346. package/build-types/item-group/styles.d.ts.map +1 -1
  347. package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
  348. package/build-types/text/test/index.d.ts +2 -0
  349. package/build-types/text/test/index.d.ts.map +1 -0
  350. package/build-types/toggle-group-control/index.d.ts +1 -0
  351. package/build-types/toggle-group-control/index.d.ts.map +1 -1
  352. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  353. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +5 -0
  354. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  355. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts +9 -0
  356. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -0
  357. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -2
  358. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
  359. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +25 -0
  360. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -0
  361. package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts +2 -0
  362. package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts.map +1 -0
  363. package/build-types/toggle-group-control/{toggle-group-control-option → toggle-group-control-option-base}/styles.d.ts +0 -0
  364. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -0
  365. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +37 -0
  366. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -0
  367. package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts +2 -0
  368. package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts.map +1 -0
  369. package/build-types/toggle-group-control/types.d.ts +24 -8
  370. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  371. package/build-types/ui/form-group/form-group.d.ts +2 -2
  372. package/build-types/unit-control/index.d.ts +6 -2
  373. package/build-types/unit-control/index.d.ts.map +1 -1
  374. package/build-types/unit-control/types.d.ts +5 -1
  375. package/build-types/unit-control/types.d.ts.map +1 -1
  376. package/build-types/utils/colors-values.d.ts +68 -148
  377. package/build-types/utils/colors-values.d.ts.map +1 -1
  378. package/build-types/utils/config-values.d.ts +71 -71
  379. package/build-types/utils/config-values.d.ts.map +1 -1
  380. package/package.json +17 -17
  381. package/src/alignment-matrix-control/styles/alignment-matrix-control-styles.js +5 -3
  382. package/src/animate/README.md +1 -1
  383. package/src/base-control/README.md +11 -11
  384. package/src/base-control/index.tsx +124 -0
  385. package/src/base-control/stories/index.tsx +80 -0
  386. package/src/base-control/styles/{base-control-styles.js → base-control-styles.ts} +0 -0
  387. package/src/base-control/types.ts +42 -0
  388. package/src/border-box-control/border-box-control/README.md +178 -0
  389. package/src/border-box-control/border-box-control/component.tsx +123 -0
  390. package/src/border-box-control/border-box-control/hook.ts +119 -0
  391. package/src/border-box-control/border-box-control/index.ts +2 -0
  392. package/src/border-box-control/border-box-control-linked-button/component.tsx +50 -0
  393. package/src/border-box-control/border-box-control-linked-button/hook.ts +30 -0
  394. package/src/border-box-control/border-box-control-linked-button/index.ts +1 -0
  395. package/src/border-box-control/border-box-control-split-controls/component.tsx +90 -0
  396. package/src/border-box-control/border-box-control-split-controls/hook.ts +34 -0
  397. package/src/border-box-control/border-box-control-split-controls/index.ts +1 -0
  398. package/src/border-box-control/border-box-control-visualizer/component.tsx +28 -0
  399. package/src/border-box-control/border-box-control-visualizer/hook.ts +30 -0
  400. package/src/border-box-control/border-box-control-visualizer/index.ts +1 -0
  401. package/src/border-box-control/index.ts +3 -0
  402. package/src/border-box-control/stories/index.js +104 -0
  403. package/src/border-box-control/styles.ts +69 -0
  404. package/src/border-box-control/test/index.js +354 -0
  405. package/src/border-box-control/test/utils.js +305 -0
  406. package/src/border-box-control/types.ts +98 -0
  407. package/src/border-box-control/utils.ts +151 -0
  408. package/src/border-control/border-control/README.md +181 -0
  409. package/src/border-control/border-control/component.tsx +112 -0
  410. package/src/border-control/border-control/hook.ts +145 -0
  411. package/src/border-control/border-control/index.ts +2 -0
  412. package/src/border-control/border-control-dropdown/component.tsx +252 -0
  413. package/src/border-control/border-control-dropdown/hook.ts +98 -0
  414. package/src/border-control/border-control-dropdown/index.ts +1 -0
  415. package/src/border-control/border-control-style-picker/component.tsx +89 -0
  416. package/src/border-control/border-control-style-picker/hook.ts +34 -0
  417. package/src/border-control/border-control-style-picker/index.ts +1 -0
  418. package/src/border-control/index.ts +2 -0
  419. package/src/border-control/stories/index.js +118 -0
  420. package/src/border-control/styles.ts +190 -0
  421. package/src/border-control/test/index.js +436 -0
  422. package/src/border-control/types.ts +173 -0
  423. package/src/card/styles.js +11 -5
  424. package/src/card/test/__snapshots__/index.js.snap +83 -66
  425. package/src/card/test/index.js +7 -5
  426. package/src/color-palette/README.md +6 -0
  427. package/src/color-palette/stories/index.js +8 -1
  428. package/src/custom-select-control/index.js +7 -1
  429. package/src/custom-select-control/style.scss +5 -1
  430. package/src/disabled/README.md +7 -10
  431. package/src/flyout/test/__snapshots__/index.js.snap +7 -7
  432. package/src/form-toggle/README.md +1 -1
  433. package/src/guide/index.js +12 -13
  434. package/src/guide/style.scss +0 -4
  435. package/src/heading/hook.ts +1 -1
  436. package/src/heading/test/__snapshots__/index.js.snap +3 -3
  437. package/src/index.js +8 -0
  438. package/src/input-control/README.md +2 -2
  439. package/src/input-control/index.tsx +22 -3
  440. package/src/input-control/stories/index.tsx +63 -0
  441. package/src/input-control/styles/input-control-styles.tsx +1 -2
  442. package/src/input-control/types.ts +73 -2
  443. package/src/item-group/styles.ts +1 -0
  444. package/src/item-group/test/__snapshots__/index.js.snap +11 -10
  445. package/src/mobile/picker/index.android.js +0 -1
  446. package/src/navigation/styles/navigation-styles.js +5 -5
  447. package/src/notice/index.native.js +44 -54
  448. package/src/notice/list.native.js +27 -51
  449. package/src/notice/style.native.scss +1 -0
  450. package/src/palette-edit/index.js +8 -2
  451. package/src/query-controls/README.md +2 -2
  452. package/src/sandbox/index.js +2 -2
  453. package/src/select-control/styles/select-control-styles.ts +1 -1
  454. package/src/surface/styles.js +1 -1
  455. package/src/surface/test/__snapshots__/index.js.snap +11 -11
  456. package/src/text/hook.js +1 -1
  457. package/src/text/styles/text-mixins.native.js +2 -2
  458. package/src/text/styles.js +1 -1
  459. package/src/text/test/__snapshots__/{index.js.snap → index.tsx.snap} +16 -0
  460. package/src/text/test/{index.js → index.tsx} +12 -6
  461. package/src/toggle-group-control/index.ts +1 -0
  462. package/src/toggle-group-control/stories/index.js +37 -7
  463. package/src/toggle-group-control/test/__snapshots__/index.js.snap +269 -5
  464. package/src/toggle-group-control/test/index.js +43 -10
  465. package/src/toggle-group-control/toggle-group-control/component.tsx +10 -0
  466. package/src/toggle-group-control/toggle-group-control/styles.ts +14 -0
  467. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +86 -0
  468. package/src/toggle-group-control/toggle-group-control-option/README.md +8 -5
  469. package/src/toggle-group-control/toggle-group-control-option/component.tsx +18 -94
  470. package/src/toggle-group-control/toggle-group-control-option-base/README.md +27 -0
  471. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +129 -0
  472. package/src/toggle-group-control/toggle-group-control-option-base/index.ts +1 -0
  473. package/src/toggle-group-control/{toggle-group-control-option → toggle-group-control-option-base}/styles.ts +4 -1
  474. package/src/toggle-group-control/toggle-group-control-option-icon/README.md +56 -0
  475. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +56 -0
  476. package/src/toggle-group-control/toggle-group-control-option-icon/index.ts +1 -0
  477. package/src/toggle-group-control/types.ts +33 -8
  478. package/src/toolbar-dropdown-menu/index.js +1 -1
  479. package/src/toolbar-group/style.scss +20 -0
  480. package/src/tools-panel/test/__snapshots__/index.js.snap +9 -9
  481. package/src/ui/spinner/component.js +1 -1
  482. package/src/ui/spinner/test/__snapshots__/index.js.snap +3 -3
  483. package/src/unit-control/README.md +6 -0
  484. package/src/unit-control/index.tsx +6 -1
  485. package/src/unit-control/test/index.js +120 -0
  486. package/src/unit-control/types.ts +5 -1
  487. package/src/utils/colors-values.js +22 -25
  488. package/src/utils/config-values.js +9 -4
  489. package/tsconfig.json +11 -2
  490. package/tsconfig.tsbuildinfo +1 -1
  491. package/build/guide/finish-button.js +0 -44
  492. package/build/guide/finish-button.js.map +0 -1
  493. package/build/toggle-group-control/toggle-group-control-option/styles.js +0 -66
  494. package/build/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
  495. package/build-module/guide/finish-button.js +0 -34
  496. package/build-module/guide/finish-button.js.map +0 -1
  497. package/build-module/toggle-group-control/toggle-group-control-option/styles.js +0 -55
  498. package/build-module/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
  499. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts.map +0 -1
  500. package/src/base-control/index.js +0 -118
  501. package/src/base-control/stories/index.js +0 -81
  502. package/src/guide/finish-button.js +0 -26
  503. package/src/guide/test/finish-button.js +0 -49
  504. package/src/input-control/stories/index.js +0 -71
@@ -1,14 +1,15 @@
1
1
  # BaseControl
2
2
 
3
- BaseControl component is used to generate labels and help text for components handling user inputs.
3
+ `BaseControl` is a component used to generate labels and help text for components handling user inputs.
4
4
 
5
5
  ## Usage
6
6
 
7
- Render a BaseControl for a textarea input:
7
+ Render a `BaseControl` for a textarea input:
8
8
 
9
9
  ```jsx
10
10
  import { BaseControl } from '@wordpress/components';
11
11
 
12
+ // The `id` prop is necessary to accessibly associate the label with the textarea
12
13
  const MyBaseControl = () => (
13
14
  <BaseControl id="textarea-1" label="Text" help="Enter some text" __nextHasNoMarginBottom={ true }>
14
15
  <textarea id="textarea-1" />
@@ -22,10 +23,10 @@ The component accepts the following props:
22
23
 
23
24
  ### id
24
25
 
25
- The id of the element to which labels and help text are being generated. That element should be passed as a child.
26
+ The HTML `id` of the element (passed in as a child to `BaseControl`) to which labels and help text are being generated. This is necessary to accessibly associate the label with that element.
26
27
 
27
28
  - Type: `String`
28
- - Required: Yes
29
+ - Required: No
29
30
 
30
31
  ### label
31
32
 
@@ -50,8 +51,7 @@ If this property is added, a help text will be generated using help property as
50
51
 
51
52
  ### className
52
53
 
53
- The class that will be added with "components-base-control" to the classes of the wrapper div.
54
- If no className is passed only components-base-control is used.
54
+ Any other classes to add to the wrapper div.
55
55
 
56
56
  - Type: `String`
57
57
  - Required: No
@@ -73,8 +73,9 @@ Start opting into the new margin-free styles that will become the default in a f
73
73
 
74
74
  ## BaseControl.VisualLabel
75
75
 
76
- `BaseControl.VisualLabel` component is used to render a purely visual label inside a `BaseControl` component.
77
- It should only be used in cases where the children being rendered inside BaseControl are already properly labeled, e.g., a button, but we want an additional visual label for that section equivalent to the labels BaseControl would otherwise use if the label prop was passed.
76
+ `BaseControl.VisualLabel` is used to render a purely visual label inside a `BaseControl` component.
77
+
78
+ It should only be used in cases where the children being rendered inside BaseControl are already accessibly labeled, e.g., a button, but we want an additional visual label for that section equivalent to the labels `BaseControl` would otherwise use if the `label` prop was passed.
78
79
 
79
80
  ## Usage
80
81
 
@@ -82,7 +83,7 @@ It should only be used in cases where the children being rendered inside BaseCon
82
83
  import { BaseControl } from '@wordpress/components';
83
84
 
84
85
  const MyBaseControl = () => (
85
- <BaseControl help="Pressing the Select an author button will open a modal that allows an advanced mechanism for author selection">
86
+ <BaseControl help="This button is already accessibly labeled.">
86
87
  <BaseControl.VisualLabel>Author</BaseControl.VisualLabel>
87
88
  <Button>Select an author</Button>
88
89
  </BaseControl>
@@ -93,8 +94,7 @@ const MyBaseControl = () => (
93
94
 
94
95
  #### className
95
96
 
96
- The class that will be added with `components-base-control__label` to the classes of the wrapper div.
97
- If no className is passed only `components-base-control__label` is used.
97
+ Any other classes to add to the wrapper div.
98
98
 
99
99
  - Type: `String`
100
100
  - Required: No
@@ -0,0 +1,124 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+ import type { FunctionComponent } from 'react';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { VisuallyHidden } from '../visually-hidden';
11
+ import type { BaseControlProps, BaseControlVisualLabelProps } from './types';
12
+ import {
13
+ Wrapper,
14
+ StyledField,
15
+ StyledLabel,
16
+ StyledHelp,
17
+ StyledVisualLabel,
18
+ } from './styles/base-control-styles';
19
+
20
+ /**
21
+ * `BaseControl` is a component used to generate labels and help text for components handling user inputs.
22
+ *
23
+ * @example
24
+ * // Render a `BaseControl` for a textarea input
25
+ * import { BaseControl } from '@wordpress/components';
26
+ *
27
+ * // The `id` prop is necessary to accessibly associate the label with the textarea
28
+ * const MyBaseControl = () => (
29
+ * <BaseControl id="textarea-1" label="Text" help="Enter some text" __nextHasNoMarginBottom={ true }>
30
+ * <textarea id="textarea-1" />
31
+ * </BaseControl>
32
+ * );
33
+ */
34
+ export const BaseControl = ( {
35
+ __nextHasNoMarginBottom = false,
36
+ id,
37
+ label,
38
+ hideLabelFromVision = false,
39
+ help,
40
+ className,
41
+ children,
42
+ }: BaseControlProps ) => {
43
+ return (
44
+ <Wrapper
45
+ className={ classnames( 'components-base-control', className ) }
46
+ >
47
+ <StyledField
48
+ className="components-base-control__field"
49
+ // TODO: Official deprecation for this should start after all internal usages have been migrated
50
+ __nextHasNoMarginBottom={ __nextHasNoMarginBottom }
51
+ >
52
+ { label &&
53
+ id &&
54
+ ( hideLabelFromVision ? (
55
+ <VisuallyHidden as="label" htmlFor={ id }>
56
+ { label }
57
+ </VisuallyHidden>
58
+ ) : (
59
+ <StyledLabel
60
+ className="components-base-control__label"
61
+ htmlFor={ id }
62
+ >
63
+ { label }
64
+ </StyledLabel>
65
+ ) ) }
66
+ { label &&
67
+ ! id &&
68
+ ( hideLabelFromVision ? (
69
+ <VisuallyHidden as="label">{ label }</VisuallyHidden>
70
+ ) : (
71
+ <BaseControl.VisualLabel>
72
+ { label }
73
+ </BaseControl.VisualLabel>
74
+ ) ) }
75
+ { children }
76
+ </StyledField>
77
+ { !! help && (
78
+ <StyledHelp
79
+ id={ id ? id + '__help' : undefined }
80
+ className="components-base-control__help"
81
+ __nextHasNoMarginBottom={ __nextHasNoMarginBottom }
82
+ >
83
+ { help }
84
+ </StyledHelp>
85
+ ) }
86
+ </Wrapper>
87
+ );
88
+ };
89
+
90
+ /**
91
+ * `BaseControl.VisualLabel` is used to render a purely visual label inside a `BaseControl` component.
92
+ *
93
+ * It should only be used in cases where the children being rendered inside `BaseControl` are already accessibly labeled,
94
+ * e.g., a button, but we want an additional visual label for that section equivalent to the labels `BaseControl` would
95
+ * otherwise use if the `label` prop was passed.
96
+ *
97
+ * @example
98
+ * import { BaseControl } from '@wordpress/components';
99
+ *
100
+ * const MyBaseControl = () => (
101
+ * <BaseControl help="This button is already accessibly labeled.">
102
+ * <BaseControl.VisualLabel>Author</BaseControl.VisualLabel>
103
+ * <Button>Select an author</Button>
104
+ * </BaseControl>
105
+ * );
106
+ */
107
+ export const VisualLabel: FunctionComponent< BaseControlVisualLabelProps > = ( {
108
+ className,
109
+ children,
110
+ } ) => {
111
+ return (
112
+ <StyledVisualLabel
113
+ className={ classnames(
114
+ 'components-base-control__label',
115
+ className
116
+ ) }
117
+ >
118
+ { children }
119
+ </StyledVisualLabel>
120
+ );
121
+ };
122
+ BaseControl.VisualLabel = VisualLabel;
123
+
124
+ export default BaseControl;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import BaseControl from '..';
10
+ import Button from '../../button';
11
+
12
+ const meta: ComponentMeta< typeof BaseControl > = {
13
+ title: 'Components/BaseControl',
14
+ component: BaseControl,
15
+ argTypes: {
16
+ children: { control: { type: null } },
17
+ help: { control: { type: 'text' } },
18
+ label: { control: { type: 'text' } },
19
+ },
20
+ parameters: {
21
+ controls: { expanded: true },
22
+ docs: { source: { state: 'open' } },
23
+ },
24
+ };
25
+ export default meta;
26
+
27
+ const BaseControlWithTextarea: ComponentStory< typeof BaseControl > = ( {
28
+ id,
29
+ ...props
30
+ } ) => {
31
+ return (
32
+ <BaseControl id={ id } { ...props }>
33
+ <textarea style={ { display: 'block' } } id={ id } />
34
+ </BaseControl>
35
+ );
36
+ };
37
+
38
+ export const Default: ComponentStory<
39
+ typeof BaseControl
40
+ > = BaseControlWithTextarea.bind( {} );
41
+ Default.args = {
42
+ __nextHasNoMarginBottom: true,
43
+ id: 'textarea-default-1',
44
+ label: 'Label text',
45
+ };
46
+
47
+ export const WithHelpText = BaseControlWithTextarea.bind( {} );
48
+ WithHelpText.args = {
49
+ ...Default.args,
50
+ id: 'textarea-with-help-text-1',
51
+ help: 'Help text adds more explanation.',
52
+ };
53
+
54
+ /**
55
+ * `BaseControl.VisualLabel` is used to render a purely visual label inside a `BaseControl` component.
56
+ *
57
+ * It should only be used in cases where the children being rendered inside `BaseControl` are already accessibly labeled,
58
+ * e.g., a button, but we want an additional visual label for that section equivalent to the labels `BaseControl` would
59
+ * otherwise use if the `label` prop was passed.
60
+ */
61
+ export const WithVisualLabel: ComponentStory< typeof BaseControl > = (
62
+ props
63
+ ) => {
64
+ BaseControl.VisualLabel.displayName = 'BaseControl.VisualLabel';
65
+
66
+ return (
67
+ <BaseControl { ...props }>
68
+ <BaseControl.VisualLabel>Visual label</BaseControl.VisualLabel>
69
+ <div>
70
+ <Button variant="secondary">Select an author</Button>
71
+ </div>
72
+ </BaseControl>
73
+ );
74
+ };
75
+ WithVisualLabel.args = {
76
+ ...Default.args,
77
+ help: 'This button is already accessibly labeled.',
78
+ id: undefined,
79
+ label: undefined,
80
+ };
@@ -0,0 +1,42 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ReactNode } from 'react';
5
+
6
+ export type BaseControlProps = {
7
+ /**
8
+ * Start opting into the new margin-free styles that will become the default in a future version.
9
+ *
10
+ * @default false
11
+ */
12
+ __nextHasNoMarginBottom?: boolean;
13
+ /**
14
+ * The HTML `id` of the element (passed in as a child to `BaseControl`) to which labels and help text are being generated.
15
+ * This is necessary to accessibly associate the label with that element.
16
+ */
17
+ id?: string;
18
+ /**
19
+ * If this property is added, a help text will be generated using help property as the content.
20
+ */
21
+ help?: ReactNode;
22
+ /**
23
+ * If this property is added, a label will be generated using label property as the content.
24
+ */
25
+ label?: ReactNode;
26
+ /**
27
+ * If true, the label will only be visible to screen readers.
28
+ *
29
+ * @default false
30
+ */
31
+ hideLabelFromVision?: boolean;
32
+ className?: string;
33
+ /**
34
+ * The content to be displayed within the `BaseControl`.
35
+ */
36
+ children: ReactNode;
37
+ };
38
+
39
+ export type BaseControlVisualLabelProps = {
40
+ className?: string;
41
+ children: ReactNode;
42
+ };
@@ -0,0 +1,178 @@
1
+ # BorderBoxControl
2
+
3
+ <div class="callout callout-alert">
4
+ This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
5
+ </div>
6
+ <br />
7
+
8
+ This component provides users with the ability to configure a single "flat"
9
+ border or separate borders per side.
10
+
11
+ ## Development guidelines
12
+
13
+ The `BorderBoxControl` effectively has two view states. The first, a "linked"
14
+ view, allows configuration of a flat border via a single `BorderControl`.
15
+ The second, a "split" view, contains a `BorderControl` for each side
16
+ as well as a visualizer for the currently selected borders. Each view also
17
+ contains a button to toggle between the two.
18
+
19
+ When switching from the "split" view to "linked", if the individual side
20
+ borders are not consistent, the "linked" view will display any border properties
21
+ selections that are consistent while showing a mixed state for those that
22
+ aren't. For example, if all borders had the same color and style but different
23
+ widths, then the border dropdown in the "linked" view's `BorderControl` would
24
+ show that consistent color and style but the "linked" view's width input would
25
+ show "Mixed" placeholder text.
26
+
27
+ ## Usage
28
+
29
+ ```jsx
30
+ import { __experimentalBorderBoxControl as BorderBoxControl } from '@wordpress/components';
31
+ import { __ } from '@wordpress/i18n';
32
+
33
+ const colors = [
34
+ { name: 'Blue 20', color: '#72aee6' },
35
+ // ...
36
+ ];
37
+
38
+ const MyBorderBoxControl = () => {
39
+ const defaultBorder = {
40
+ color: '#72aee6',
41
+ style: 'dashed',
42
+ width: '1px',
43
+ };
44
+ const [ borders, setBorders ] = useState( {
45
+ top: defaultBorder,
46
+ right: defaultBorder,
47
+ bottom: defaultBorder,
48
+ left: defaultBorder,
49
+ } );
50
+ const onChange = ( newBorders ) => setBorders( newBorders );
51
+
52
+ return (
53
+ <BorderBoxControl
54
+ colors={ colors }
55
+ label={ __( 'Borders' ) }
56
+ onChange={ onChange }
57
+ value={ borders }
58
+ />
59
+ );
60
+ };
61
+ ```
62
+
63
+ If you're using this component outside the editor, you can
64
+ [ensure `Tooltip` positioning](/packages/components/README.md#popovers-and-tooltips)
65
+ for the `BorderBoxControl`'s color and style options, by rendering your
66
+ `BorderBoxControl` with a `Popover.Slot` further up the element tree and within
67
+ a `SlotFillProvider` overall.
68
+
69
+ ## Props
70
+
71
+ ### `colors`: `Array`
72
+
73
+ An array of color definitions. This may also be a multi-dimensional array where
74
+ colors are organized by multiple origins.
75
+
76
+ Each color may be an object containing a `name` and `color` value.
77
+
78
+ - Required: No
79
+
80
+ ### `disableCustomColors`: `boolean`
81
+
82
+ This toggles the ability to choose custom colors.
83
+
84
+ - Required: No
85
+
86
+ ### `enableAlpha`: `boolean`
87
+
88
+ This controls whether the alpha channel will be offered when selecting
89
+ custom colors.
90
+
91
+ - Required: No
92
+
93
+ ### `enableStyle`: `boolean`
94
+
95
+ This controls whether to support border style selections.
96
+
97
+ - Required: No
98
+ - Default: `true`
99
+
100
+ ### `hideLabelFromVision`: `boolean`
101
+
102
+ Provides control over whether the label will only be visible to screen readers.
103
+
104
+ - Required: No
105
+
106
+ ### `label`: `string`
107
+
108
+ If provided, a label will be generated using this as the content.
109
+
110
+ _Whether it is visible only to screen readers is controlled via
111
+ `hideLabelFromVision`._
112
+
113
+ - Required: No
114
+
115
+ ### `onChange`: `( value?: Object ) => void`
116
+
117
+ A callback function invoked when any border value is changed. The value received
118
+ may be a "flat" border object, one that has properties defining individual side
119
+ borders, or `undefined`.
120
+
121
+ _Note: The will be `undefined` if a user clears all borders._
122
+
123
+ - Required: Yes
124
+
125
+ ### `popoverClassNames`: `Object`
126
+
127
+ An object defining CSS classnames for all the inner `BorderControl` popover
128
+ content.
129
+
130
+ Example:
131
+ ```js
132
+ {
133
+ linked: 'linked-border-popover-content',
134
+ top: 'top-border-popover-content',
135
+ right: 'right-border-popover-content',
136
+ bottom: 'bottom-border-popover-content',
137
+ left: 'left-border-popover-content',
138
+ }
139
+ ```
140
+
141
+ By default, popovers are displayed relative to the button that initiated the popover. By supplying classnames for each individual popover, it is possible to add styling rules to align the popover positions to an unrelated design element, for example, the sidebar inspector in the block editor.
142
+
143
+ - Required: No
144
+
145
+ ### `value`: `Object`
146
+
147
+ An object representing the current border configuration.
148
+
149
+ This may be a "flat" border where the object has `color`, `style`, and `width`
150
+ properties or a "split" border which defines the previous properties but for
151
+ each side; `top`, `right`, `bottom`, and `left`.
152
+
153
+ Examples:
154
+ ```js
155
+ const flatBorder = { color: '#72aee6', style: 'solid', width: '1px' };
156
+ const splitBorders = {
157
+ top: { color: '#72aee6', style: 'solid', width: '1px' },
158
+ right: { color: '#e65054', style: 'dashed', width: '2px' },
159
+ bottom: { color: '#68de7c', style: 'solid', width: '1px' },
160
+ left: { color: '#f2d675', style: 'dotted', width: '1em' },
161
+ };
162
+ ```
163
+
164
+ - Required: No
165
+
166
+ ### `__experimentalHasMultipleOrigins`: `boolean`
167
+
168
+ This is passed on to the color related sub-components which need to be made
169
+ aware of whether the colors prop contains multiple origins.
170
+
171
+ - Required: No
172
+
173
+ ### `__experimentalIsRenderedInSidebar`: `boolean`
174
+
175
+ This is passed on to the color related sub-components so they may render more
176
+ effectively when used within a sidebar.
177
+
178
+ - Required: No
@@ -0,0 +1,123 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import BorderBoxControlLinkedButton from '../border-box-control-linked-button';
10
+ import BorderBoxControlSplitControls from '../border-box-control-split-controls';
11
+ import { BorderControl } from '../../border-control';
12
+ import { HStack } from '../../h-stack';
13
+ import { StyledLabel } from '../../base-control/styles/base-control-styles';
14
+ import { View } from '../../view';
15
+ import { VisuallyHidden } from '../../visually-hidden';
16
+ import { contextConnect, WordPressComponentProps } from '../../ui/context';
17
+ import { useBorderBoxControl } from './hook';
18
+
19
+ import type { BorderBoxControlProps } from '../types';
20
+ import type { LabelProps } from '../../border-control/types';
21
+
22
+ const BorderLabel = ( props: LabelProps ) => {
23
+ const { label, hideLabelFromVision } = props;
24
+
25
+ if ( ! label ) {
26
+ return null;
27
+ }
28
+
29
+ return hideLabelFromVision ? (
30
+ <VisuallyHidden as="label">{ label }</VisuallyHidden>
31
+ ) : (
32
+ <StyledLabel>{ label }</StyledLabel>
33
+ );
34
+ };
35
+
36
+ const BorderBoxControl = (
37
+ props: WordPressComponentProps< BorderBoxControlProps, 'div' >,
38
+ forwardedRef: React.ForwardedRef< any >
39
+ ) => {
40
+ const {
41
+ className,
42
+ colors,
43
+ disableCustomColors,
44
+ enableAlpha,
45
+ enableStyle,
46
+ hasMixedBorders,
47
+ hideLabelFromVision,
48
+ isLinked,
49
+ label,
50
+ linkedControlClassName,
51
+ linkedValue,
52
+ onLinkedChange,
53
+ onSplitChange,
54
+ popoverClassNames,
55
+ splitValue,
56
+ toggleLinked,
57
+ __experimentalHasMultipleOrigins,
58
+ __experimentalIsRenderedInSidebar,
59
+ ...otherProps
60
+ } = useBorderBoxControl( props );
61
+
62
+ return (
63
+ <View className={ className } { ...otherProps } ref={ forwardedRef }>
64
+ <BorderLabel
65
+ label={ label }
66
+ hideLabelFromVision={ hideLabelFromVision }
67
+ />
68
+ <HStack alignment={ 'start' } expanded={ true } spacing={ 0 }>
69
+ { isLinked ? (
70
+ <BorderControl
71
+ className={ linkedControlClassName }
72
+ colors={ colors }
73
+ disableCustomColors={ disableCustomColors }
74
+ enableAlpha={ enableAlpha }
75
+ enableStyle={ enableStyle }
76
+ onChange={ onLinkedChange }
77
+ placeholder={
78
+ hasMixedBorders ? __( 'Mixed' ) : undefined
79
+ }
80
+ popoverContentClassName={ popoverClassNames?.linked }
81
+ shouldSanitizeBorder={ false } // This component will handle that.
82
+ value={ linkedValue }
83
+ withSlider={ true }
84
+ width={ '110px' }
85
+ __experimentalHasMultipleOrigins={
86
+ __experimentalHasMultipleOrigins
87
+ }
88
+ __experimentalIsRenderedInSidebar={
89
+ __experimentalIsRenderedInSidebar
90
+ }
91
+ />
92
+ ) : (
93
+ <BorderBoxControlSplitControls
94
+ colors={ colors }
95
+ disableCustomColors={ disableCustomColors }
96
+ enableAlpha={ enableAlpha }
97
+ enableStyle={ enableStyle }
98
+ onChange={ onSplitChange }
99
+ popoverClassNames={ popoverClassNames }
100
+ value={ splitValue }
101
+ __experimentalHasMultipleOrigins={
102
+ __experimentalHasMultipleOrigins
103
+ }
104
+ __experimentalIsRenderedInSidebar={
105
+ __experimentalIsRenderedInSidebar
106
+ }
107
+ />
108
+ ) }
109
+ <BorderBoxControlLinkedButton
110
+ onClick={ toggleLinked }
111
+ isLinked={ isLinked }
112
+ />
113
+ </HStack>
114
+ </View>
115
+ );
116
+ };
117
+
118
+ const ConnectedBorderBoxControl = contextConnect(
119
+ BorderBoxControl,
120
+ 'BorderBoxControl'
121
+ );
122
+
123
+ export default ConnectedBorderBoxControl;