@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
@@ -16,13 +16,14 @@ import Button from '../button';
16
16
  import Dropdown from '../dropdown';
17
17
  import Tooltip from '../tooltip';
18
18
 
19
- function Option( {
20
- className,
21
- isSelected,
22
- selectedIconProps,
23
- tooltipText,
24
- ...additionalProps
25
- } ) {
19
+ function Option( props ) {
20
+ const {
21
+ className,
22
+ isSelected,
23
+ selectedIconProps,
24
+ tooltipText,
25
+ ...additionalProps
26
+ } = props;
26
27
  const optionButton = (
27
28
  <Button
28
29
  isPressed={ isSelected }
@@ -52,12 +53,8 @@ function Option( {
52
53
  );
53
54
  }
54
55
 
55
- function DropdownLinkAction( {
56
- buttonProps,
57
- className,
58
- dropdownProps,
59
- linkText,
60
- } ) {
56
+ function DropdownLinkAction( props ) {
57
+ const { buttonProps, className, dropdownProps, linkText } = props;
61
58
  return (
62
59
  <Dropdown
63
60
  className={ classnames(
@@ -80,7 +77,8 @@ function DropdownLinkAction( {
80
77
  );
81
78
  }
82
79
 
83
- function ButtonAction( { className, children, ...additionalProps } ) {
80
+ function ButtonAction( props ) {
81
+ const { className, children, ...additionalProps } = props;
84
82
  return (
85
83
  <Button
86
84
  className={ classnames(
@@ -95,12 +93,8 @@ function ButtonAction( { className, children, ...additionalProps } ) {
95
93
  );
96
94
  }
97
95
 
98
- export default function CircularOptionPicker( {
99
- actions,
100
- className,
101
- options,
102
- children,
103
- } ) {
96
+ export default function CircularOptionPicker( props ) {
97
+ const { actions, className, options, children } = props;
104
98
  return (
105
99
  <div
106
100
  className={ classnames(
@@ -1,54 +1,6 @@
1
1
  # ColorPalette
2
2
 
3
- ## Props
4
-
5
- The component accepts the following props.
6
-
7
- { colors, disableCustomColors = false, value, onChange, className, clearable = true }
8
-
9
- ### colors
10
-
11
- Array with the colors to be shown.
12
-
13
- - Type: `Array`
14
- - Required: Yes
15
-
16
- ### disableCustomColors
17
-
18
- Whether to allow custom color or not.
19
-
20
- - Type: `Boolean`
21
- - Required: No
22
- - Default: false
23
-
24
- ### value
25
-
26
- currently active value
27
-
28
- - Type: `String`
29
- - Required: No
30
-
31
- ### onChange
32
-
33
- Callback called when a color is selected.
34
-
35
- - Type: `Function`
36
- - Required: Yes
37
-
38
- ### className
39
-
40
- classes to be applied to the container.
41
-
42
- - Type: `String`
43
- - Required: No
44
-
45
- ### clearable
46
-
47
- Whether the palette should have a clearing button or not.
48
-
49
- - Type: `Boolean`
50
- - Required: No
51
- - Default: true
3
+ `ColorPalette` allows the user to pick a color from a list of pre-defined color entries.
52
4
 
53
5
  ## Usage
54
6
 
@@ -79,3 +31,53 @@ If you're using this component outside the editor, you can
79
31
  for the `ColorPalette`'s color swatches, by rendering your `ColorPalette` with a
80
32
  `Popover.Slot` further up the element tree and within a
81
33
  `SlotFillProvider` overall.
34
+
35
+ ## Props
36
+
37
+ The component accepts the following props.
38
+
39
+ ### `colors`: `( PaletteObject | ColorObject )[]`
40
+
41
+ Array with the colors to be shown. When displaying multiple color palettes to choose from, the format of the array changes from an array of colors objects, to an array of color palettes.
42
+
43
+ - Required: No
44
+ - Default: `[]`
45
+
46
+ ### `disableCustomColors`: `boolean`
47
+
48
+ Whether to allow the user to pick a custom color on top of the predefined choices (defined via the `colors` prop).
49
+
50
+ - Required: No
51
+ - Default: `false`
52
+
53
+ ### `enableAlpha`: `boolean`
54
+
55
+ Whether the color picker should display the alpha channel both in the bottom inputs as well as in the color picker itself.
56
+
57
+ - Required: No
58
+ - Default: `false`
59
+
60
+ ### `value`: `string`
61
+
62
+ currently active value
63
+
64
+ - Required: No
65
+
66
+ ### `onChange`: `OnColorChange`
67
+
68
+ Callback called when a color is selected.
69
+
70
+ - Required: Yes
71
+
72
+ ### `className`: `string`
73
+
74
+ classes to be applied to the container.
75
+
76
+ - Required: No
77
+
78
+ ### `clearable`: `boolean`
79
+
80
+ Whether the palette should have a clearing button.
81
+
82
+ - Required: No
83
+ - Default: `true`
@@ -1,7 +1,7 @@
1
- // @ts-nocheck
2
1
  /**
3
2
  * External dependencies
4
3
  */
4
+ import type { ForwardedRef } from 'react';
5
5
  import { colord, extend } from 'colord';
6
6
  import namesPlugin from 'colord/plugins/names';
7
7
  import a11yPlugin from 'colord/plugins/a11y';
@@ -10,7 +10,7 @@ import a11yPlugin from 'colord/plugins/a11y';
10
10
  * WordPress dependencies
11
11
  */
12
12
  import { __, sprintf } from '@wordpress/i18n';
13
- import { useCallback, useMemo } from '@wordpress/element';
13
+ import { useCallback, useMemo, forwardRef } from '@wordpress/element';
14
14
 
15
15
  /**
16
16
  * Internal dependencies
@@ -23,6 +23,15 @@ import { Flex, FlexItem } from '../flex';
23
23
  import { Truncate } from '../truncate';
24
24
  import { ColorHeading } from './styles';
25
25
  import DropdownContentWrapper from '../dropdown/dropdown-content-wrapper';
26
+ import type {
27
+ ColorObject,
28
+ ColorPaletteProps,
29
+ CustomColorPickerDropdownProps,
30
+ MultiplePalettesProps,
31
+ PaletteObject,
32
+ SinglePaletteProps,
33
+ } from './types';
34
+ import type { WordPressComponentProps } from '../ui/context';
26
35
 
27
36
  extend( [ namesPlugin, a11yPlugin ] );
28
37
 
@@ -33,7 +42,7 @@ function SinglePalette( {
33
42
  onChange,
34
43
  value,
35
44
  actions,
36
- } ) {
45
+ }: SinglePaletteProps ) {
37
46
  const colorOptions = useMemo( () => {
38
47
  return colors.map( ( { color, name }, index ) => {
39
48
  const colordColor = colord( color );
@@ -74,6 +83,11 @@ function SinglePalette( {
74
83
  );
75
84
  } );
76
85
  }, [ colors, value, onChange, clearColor ] );
86
+
87
+ if ( colors.length === 0 ) {
88
+ return null;
89
+ }
90
+
77
91
  return (
78
92
  <CircularOptionPicker
79
93
  className={ className }
@@ -90,7 +104,11 @@ function MultiplePalettes( {
90
104
  onChange,
91
105
  value,
92
106
  actions,
93
- } ) {
107
+ }: MultiplePalettesProps ) {
108
+ if ( colors.length === 0 ) {
109
+ return null;
110
+ }
111
+
94
112
  return (
95
113
  <VStack spacing={ 3 } className={ className }>
96
114
  { colors.map( ( { name, colors: colorPalette }, index ) => {
@@ -117,7 +135,7 @@ export function CustomColorPickerDropdown( {
117
135
  isRenderedInSidebar,
118
136
  popoverProps: receivedPopoverProps,
119
137
  ...props
120
- } ) {
138
+ }: CustomColorPickerDropdownProps ) {
121
139
  const popoverProps = useMemo(
122
140
  () => ( {
123
141
  shift: true,
@@ -148,9 +166,9 @@ export function CustomColorPickerDropdown( {
148
166
  }
149
167
 
150
168
  export const extractColorNameFromCurrentValue = (
151
- currentValue,
152
- colors = [],
153
- showMultiplePalettes = false
169
+ currentValue?: ColorPaletteProps[ 'value' ],
170
+ colors: ColorPaletteProps[ 'colors' ] = [],
171
+ showMultiplePalettes: ColorPaletteProps[ '__experimentalHasMultipleOrigins' ] = false
154
172
  ) => {
155
173
  if ( ! currentValue ) {
156
174
  return '';
@@ -162,7 +180,10 @@ export const extractColorNameFromCurrentValue = (
162
180
  : colord( currentValue ).toHex();
163
181
 
164
182
  // Normalize format of `colors` to simplify the following loop
165
- const colorPalettes = showMultiplePalettes ? colors : [ { colors } ];
183
+ type normalizedPaletteObject = { colors: ColorObject[] };
184
+ const colorPalettes: normalizedPaletteObject[] = showMultiplePalettes
185
+ ? ( colors as PaletteObject[] )
186
+ : [ { colors: colors as ColorObject[] } ];
166
187
  for ( const { colors: paletteColors } of colorPalettes ) {
167
188
  for ( const { name: colorName, color: colorValue } of paletteColors ) {
168
189
  const normalizedColorValue = currentValueIsCssVariable
@@ -179,28 +200,62 @@ export const extractColorNameFromCurrentValue = (
179
200
  return __( 'Custom' );
180
201
  };
181
202
 
182
- export const showTransparentBackground = ( currentValue ) => {
203
+ export const showTransparentBackground = ( currentValue?: string ) => {
183
204
  if ( typeof currentValue === 'undefined' ) {
184
205
  return true;
185
206
  }
186
207
  return colord( currentValue ).alpha() === 0;
187
208
  };
188
209
 
189
- export default function ColorPalette( {
190
- clearable = true,
191
- className,
192
- colors,
193
- disableCustomColors = false,
194
- enableAlpha,
195
- onChange,
196
- value,
197
- __experimentalHasMultipleOrigins = false,
198
- __experimentalIsRenderedInSidebar = false,
199
- } ) {
210
+ const areColorsMultiplePalette = (
211
+ colors: NonNullable< ColorPaletteProps[ 'colors' ] >
212
+ ): colors is PaletteObject[] => {
213
+ return colors.every( ( colorObj ) =>
214
+ Array.isArray( ( colorObj as PaletteObject ).colors )
215
+ );
216
+ };
217
+
218
+ function UnforwardedColorPalette(
219
+ props: WordPressComponentProps< ColorPaletteProps, 'div' >,
220
+ forwardedRef: ForwardedRef< any >
221
+ ) {
222
+ const {
223
+ clearable = true,
224
+ colors = [],
225
+ disableCustomColors = false,
226
+ enableAlpha,
227
+ onChange,
228
+ value,
229
+ __experimentalHasMultipleOrigins = false,
230
+ __experimentalIsRenderedInSidebar = false,
231
+ ...otherProps
232
+ } = props;
200
233
  const clearColor = useCallback( () => onChange( undefined ), [ onChange ] );
201
- const showMultiplePalettes =
202
- __experimentalHasMultipleOrigins && colors?.length;
203
- const Component = showMultiplePalettes ? MultiplePalettes : SinglePalette;
234
+
235
+ const buttonLabelName = useMemo(
236
+ () =>
237
+ extractColorNameFromCurrentValue(
238
+ value,
239
+ colors,
240
+ __experimentalHasMultipleOrigins
241
+ ),
242
+ [ value, colors, __experimentalHasMultipleOrigins ]
243
+ );
244
+
245
+ // Make sure that the `colors` array has a format (single/multiple) that is
246
+ // compatible with the `__experimentalHasMultipleOrigins` flag. This is true
247
+ // when __experimentalHasMultipleOrigins and areColorsMultiplePalette() are
248
+ // either both `true` or both `false`.
249
+ if (
250
+ colors.length > 0 &&
251
+ __experimentalHasMultipleOrigins !== areColorsMultiplePalette( colors )
252
+ ) {
253
+ // eslint-disable-next-line no-console
254
+ console.warn(
255
+ 'wp.components.ColorPalette: please specify a format for the `colors` prop that is compatible with the `__experimentalHasMultipleOrigins` prop.'
256
+ );
257
+ return null;
258
+ }
204
259
 
205
260
  const renderCustomColorPicker = () => (
206
261
  <DropdownContentWrapper paddingSize="none">
@@ -212,20 +267,11 @@ export default function ColorPalette( {
212
267
  </DropdownContentWrapper>
213
268
  );
214
269
 
215
- const colordColor = colord( value );
270
+ const colordColor = colord( value ?? '' );
216
271
 
217
272
  const valueWithoutLeadingHash = value?.startsWith( '#' )
218
273
  ? value.substring( 1 )
219
274
  : value ?? '';
220
- const buttonLabelName = useMemo(
221
- () =>
222
- extractColorNameFromCurrentValue(
223
- value,
224
- colors,
225
- showMultiplePalettes
226
- ),
227
- [ value, colors, showMultiplePalettes ]
228
- );
229
275
 
230
276
  const customColorAccessibleLabel = !! valueWithoutLeadingHash
231
277
  ? sprintf(
@@ -238,8 +284,20 @@ export default function ColorPalette( {
238
284
  )
239
285
  : __( 'Custom color picker.' );
240
286
 
287
+ const paletteCommonProps = {
288
+ clearable,
289
+ clearColor,
290
+ onChange,
291
+ value,
292
+ actions: !! clearable && (
293
+ <CircularOptionPicker.ButtonAction onClick={ clearColor }>
294
+ { __( 'Clear' ) }
295
+ </CircularOptionPicker.ButtonAction>
296
+ ),
297
+ };
298
+
241
299
  return (
242
- <VStack spacing={ 3 } className={ className }>
300
+ <VStack spacing={ 3 } ref={ forwardedRef } { ...otherProps }>
243
301
  { ! disableCustomColors && (
244
302
  <CustomColorPickerDropdown
245
303
  isRenderedInSidebar={ __experimentalIsRenderedInSidebar }
@@ -284,22 +342,45 @@ export default function ColorPalette( {
284
342
  ) }
285
343
  />
286
344
  ) }
287
- <Component
288
- clearable={ clearable }
289
- clearColor={ clearColor }
290
- colors={ colors }
291
- onChange={ onChange }
292
- value={ value }
293
- actions={
294
- !! clearable && (
295
- <CircularOptionPicker.ButtonAction
296
- onClick={ clearColor }
297
- >
298
- { __( 'Clear' ) }
299
- </CircularOptionPicker.ButtonAction>
300
- )
301
- }
302
- />
345
+ { __experimentalHasMultipleOrigins ? (
346
+ <MultiplePalettes
347
+ { ...paletteCommonProps }
348
+ colors={ colors as PaletteObject[] }
349
+ />
350
+ ) : (
351
+ <SinglePalette
352
+ { ...paletteCommonProps }
353
+ colors={ colors as ColorObject[] }
354
+ />
355
+ ) }
303
356
  </VStack>
304
357
  );
305
358
  }
359
+
360
+ /**
361
+ * Allows the user to pick a color from a list of pre-defined color entries.
362
+ *
363
+ * ```jsx
364
+ * import { ColorPalette } from '@wordpress/components';
365
+ * import { useState } from '@wordpress/element';
366
+ *
367
+ * const MyColorPalette = () => {
368
+ * const [ color, setColor ] = useState ( '#f00' )
369
+ * const colors = [
370
+ * { name: 'red', color: '#f00' },
371
+ * { name: 'white', color: '#fff' },
372
+ * { name: 'blue', color: '#00f' },
373
+ * ];
374
+ * return (
375
+ * <ColorPalette
376
+ * colors={ colors }
377
+ * value={ color }
378
+ * onChange={ ( color ) => setColor( color ) }
379
+ * />
380
+ * );
381
+ * } );
382
+ * ```
383
+ */
384
+ export const ColorPalette = forwardRef( UnforwardedColorPalette );
385
+
386
+ export default ColorPalette;
@@ -1,3 +1,9 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { CSSProperties } from 'react';
5
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
6
+
1
7
  /**
2
8
  * WordPress dependencies
3
9
  */
@@ -6,34 +12,25 @@ import { useState } from '@wordpress/element';
6
12
  /**
7
13
  * Internal dependencies
8
14
  */
9
- import ColorPalette from '../';
15
+ import ColorPalette from '..';
10
16
  import Popover from '../../popover';
11
17
  import { Provider as SlotFillProvider } from '../../slot-fill';
18
+ import type { ColorObject, PaletteObject } from '../types';
12
19
 
13
- const meta = {
20
+ const meta: ComponentMeta< typeof ColorPalette > = {
14
21
  title: 'Components/ColorPalette',
15
22
  component: ColorPalette,
16
23
  argTypes: {
24
+ // Removing the control because setting this prop without changing the
25
+ // format of the `colors` prop can break the component.
17
26
  __experimentalHasMultipleOrigins: {
18
27
  control: {
19
28
  type: null,
20
29
  },
21
30
  },
22
- __experimentalIsRenderedInSidebar: {
23
- control: {
24
- type: 'boolean',
25
- },
26
- },
27
- clearable: {
28
- control: {
29
- type: 'boolean',
30
- },
31
- },
32
- disableCustomColors: {
33
- control: {
34
- type: 'boolean',
35
- },
36
- },
31
+ as: { control: { type: null } },
32
+ onChange: { action: 'onChange', control: { type: null } },
33
+ value: { control: { type: null } },
37
34
  },
38
35
  parameters: {
39
36
  controls: { expanded: true },
@@ -42,14 +39,26 @@ const meta = {
42
39
  };
43
40
  export default meta;
44
41
 
45
- const Template = ( args ) => {
42
+ const Template: ComponentStory< typeof ColorPalette > = ( {
43
+ onChange,
44
+ ...args
45
+ } ) => {
46
46
  const firstColor =
47
- args.colors[ 0 ].color || args.colors[ 0 ].colors[ 0 ].color;
48
- const [ color, setColor ] = useState( firstColor );
47
+ ( args.colors as ColorObject[] )[ 0 ].color ||
48
+ ( args.colors as PaletteObject[] )[ 0 ].colors[ 0 ].color;
49
+ const [ color, setColor ] = useState< string | undefined >( firstColor );
49
50
 
50
51
  return (
51
52
  <SlotFillProvider>
52
- <ColorPalette { ...args } value={ color } onChange={ setColor } />
53
+ <ColorPalette
54
+ { ...args }
55
+ value={ color }
56
+ onChange={ ( newColor ) => {
57
+ setColor( newColor );
58
+ onChange?.( newColor );
59
+ } }
60
+ />
61
+ { /* @ts-expect-error The 'Slot' component hasn't been typed yet. */ }
53
62
  <Popover.Slot />
54
63
  </SlotFillProvider>
55
64
  );
@@ -92,14 +101,16 @@ MultipleOrigins.args = {
92
101
  ],
93
102
  };
94
103
 
95
- export const CSSVariables = ( args ) => {
104
+ export const CSSVariables: ComponentStory< typeof ColorPalette > = ( args ) => {
96
105
  return (
97
106
  <div
98
- style={ {
99
- '--red': '#f00',
100
- '--yellow': '#ff0',
101
- '--blue': '#00f',
102
- } }
107
+ style={
108
+ {
109
+ '--red': '#f00',
110
+ '--yellow': '#ff0',
111
+ '--blue': '#00f',
112
+ } as CSSProperties
113
+ }
103
114
  >
104
115
  <Template { ...args } />
105
116
  </div>
@@ -14,9 +14,9 @@
14
14
  background-image:
15
15
  repeating-linear-gradient(45deg, $gray-200 25%, transparent 25%, transparent 75%, $gray-200 75%, $gray-200),
16
16
  repeating-linear-gradient(45deg, $gray-200 25%, transparent 25%, transparent 75%, $gray-200 75%, $gray-200);
17
- background-position: 0 0, 25px 25px;
17
+ background-position: 0 0, 24px 24px;
18
18
  /*rtl:end:ignore*/
19
- background-size: calc(2 * 25px) calc(2 * 25px);
19
+ background-size: calc(2 * 24px) calc(2 * 24px);
20
20
  box-sizing: border-box;
21
21
  color: $white;
22
22
  cursor: pointer;
File without changes
@@ -7,7 +7,7 @@ import userEvent from '@testing-library/user-event';
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
10
- import ColorPalette from '../';
10
+ import ColorPalette from '..';
11
11
 
12
12
  describe( 'ColorPalette', () => {
13
13
  const colors = [
@@ -0,0 +1,93 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { CSSProperties, MouseEventHandler, ReactNode } from 'react';
5
+
6
+ type OnColorChange = ( newColor?: string ) => void;
7
+
8
+ export type ColorObject = {
9
+ name: string;
10
+ color: NonNullable< CSSProperties[ 'color' ] >;
11
+ };
12
+
13
+ export type PaletteObject = {
14
+ name: string;
15
+ colors: ColorObject[];
16
+ };
17
+
18
+ type PaletteProps = {
19
+ className?: string;
20
+ clearColor: () => void;
21
+ onChange: OnColorChange;
22
+ value?: string;
23
+ actions?: ReactNode;
24
+ };
25
+
26
+ export type SinglePaletteProps = PaletteProps & {
27
+ colors: ColorObject[];
28
+ };
29
+
30
+ export type MultiplePalettesProps = PaletteProps & {
31
+ colors: PaletteObject[];
32
+ };
33
+
34
+ // TODO: should extend `Dropdown`'s props once it gets refactored to TypeScript
35
+ export type CustomColorPickerDropdownProps = {
36
+ isRenderedInSidebar: boolean;
37
+ renderContent: () => ReactNode;
38
+ popoverProps?: string[];
39
+ renderToggle: ( props: {
40
+ isOpen: boolean;
41
+ onToggle: MouseEventHandler< HTMLButtonElement >;
42
+ } ) => ReactNode;
43
+ };
44
+
45
+ export type ColorPaletteProps = {
46
+ /**
47
+ * Whether the palette should have a clearing button.
48
+ *
49
+ * @default true
50
+ */
51
+ clearable?: boolean;
52
+ /**
53
+ * Array with the colors to be shown. When displaying multiple color palettes
54
+ * to choose from, the format of the array changes from an array of colors
55
+ * objects, to an array of color palettes.
56
+ *
57
+ * @default []
58
+ */
59
+ colors?: ( PaletteObject | ColorObject )[];
60
+ /**
61
+ * Whether to allow the user to pick a custom color on top of the predefined
62
+ * choices (defined via the `colors` prop).
63
+ *
64
+ * @default false
65
+ */
66
+ disableCustomColors?: boolean;
67
+ /**
68
+ * Whether the color picker should display the alpha channel
69
+ * both in the bottom inputs as well as in the color picker itself.
70
+ */
71
+ enableAlpha?: boolean;
72
+ /**
73
+ * Callback called when a color is selected.
74
+ */
75
+ onChange: OnColorChange;
76
+ /**
77
+ * Currently active value.
78
+ */
79
+ value?: string;
80
+ /**
81
+ * Whether the colors prop is an array of color palettes,
82
+ * rather than an array of color objects.
83
+ *
84
+ * @default false
85
+ */
86
+ __experimentalHasMultipleOrigins?: boolean;
87
+ /**
88
+ * Whether this is rendered in the sidebar.
89
+ *
90
+ * @default false
91
+ */
92
+ __experimentalIsRenderedInSidebar?: boolean;
93
+ };
@@ -45,7 +45,7 @@ export const InputWithSlider = ( {
45
45
  { abbreviation }
46
46
  </Spacer>
47
47
  }
48
- hideHTMLArrows
48
+ spinControls="none"
49
49
  size="__unstable-large"
50
50
  />
51
51
  <RangeControl