@wordpress/components 22.1.0 → 23.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 (530) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/build/alignment-matrix-control/cell.js.map +1 -1
  3. package/build/alignment-matrix-control/icon.js +4 -2
  4. package/build/alignment-matrix-control/icon.js.map +1 -1
  5. package/build/alignment-matrix-control/index.js +25 -1
  6. package/build/alignment-matrix-control/index.js.map +1 -1
  7. package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
  8. package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
  9. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
  10. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  11. package/build/alignment-matrix-control/types.js +6 -0
  12. package/build/alignment-matrix-control/types.js.map +1 -0
  13. package/build/alignment-matrix-control/utils.js +9 -8
  14. package/build/alignment-matrix-control/utils.js.map +1 -1
  15. package/build/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
  16. package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  17. package/build/autocomplete/index.js +38 -9
  18. package/build/autocomplete/index.js.map +1 -1
  19. package/build/base-control/hooks.js +52 -0
  20. package/build/base-control/hooks.js.map +1 -0
  21. package/build/base-control/index.js +24 -7
  22. package/build/base-control/index.js.map +1 -1
  23. package/build/base-field/hook.js +0 -14
  24. package/build/base-field/hook.js.map +1 -1
  25. package/build/base-field/index.js.map +1 -1
  26. package/build/base-field/styles.js +5 -5
  27. package/build/base-field/styles.js.map +1 -1
  28. package/build/base-field/types.js +6 -0
  29. package/build/base-field/types.js.map +1 -0
  30. package/build/border-control/border-control/component.js +1 -0
  31. package/build/border-control/border-control/component.js.map +1 -1
  32. package/build/border-control/styles.js +16 -16
  33. package/build/border-control/styles.js.map +1 -1
  34. package/build/box-control/linked-button.js +3 -4
  35. package/build/box-control/linked-button.js.map +1 -1
  36. package/build/color-palette/index.js +2 -7
  37. package/build/color-palette/index.js.map +1 -1
  38. package/build/color-picker/input-with-slider.js +1 -0
  39. package/build/color-picker/input-with-slider.js.map +1 -1
  40. package/build/color-picker/styles.js +8 -8
  41. package/build/color-picker/styles.js.map +1 -1
  42. package/build/custom-select-control/index.js +14 -2
  43. package/build/custom-select-control/index.js.map +1 -1
  44. package/build/dashicon/index.js +1 -4
  45. package/build/dashicon/index.js.map +1 -1
  46. package/build/date-time/date-time/index.js +4 -4
  47. package/build/date-time/date-time/index.js.map +1 -1
  48. package/build/duotone-picker/duotone-picker.js +2 -2
  49. package/build/duotone-picker/duotone-picker.js.map +1 -1
  50. package/build/gradient-picker/index.js +3 -9
  51. package/build/gradient-picker/index.js.map +1 -1
  52. package/build/higher-order/with-fallback-styles/index.js +2 -2
  53. package/build/higher-order/with-fallback-styles/index.js.map +1 -1
  54. package/build/index.js +13 -1
  55. package/build/index.js.map +1 -1
  56. package/build/input-control/index.js +17 -5
  57. package/build/input-control/index.js.map +1 -1
  58. package/build/input-control/input-base.js +2 -0
  59. package/build/input-control/input-base.js.map +1 -1
  60. package/build/mobile/bottom-sheet/cell.native.js +1 -1
  61. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  62. package/build/mobile/bottom-sheet/switch-cell.native.js +1 -3
  63. package/build/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  64. package/build/mobile/global-styles-context/index.native.js +8 -8
  65. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  66. package/build/mobile/keyboard-aware-flat-list/index.ios.js +4 -2
  67. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  68. package/build/modal/index.js +8 -0
  69. package/build/modal/index.js.map +1 -1
  70. package/build/navigator/navigator-provider/component.js +12 -8
  71. package/build/navigator/navigator-provider/component.js.map +1 -1
  72. package/build/number-control/styles/number-control-styles.js +8 -8
  73. package/build/number-control/styles/number-control-styles.js.map +1 -1
  74. package/build/palette-edit/index.js +72 -33
  75. package/build/palette-edit/index.js.map +1 -1
  76. package/build/popover/index.js +10 -2
  77. package/build/popover/index.js.map +1 -1
  78. package/build/query-controls/index.js +1 -0
  79. package/build/query-controls/index.js.map +1 -1
  80. package/build/snackbar/index.js +35 -24
  81. package/build/snackbar/index.js.map +1 -1
  82. package/build/snackbar/list.js +14 -19
  83. package/build/snackbar/list.js.map +1 -1
  84. package/build/snackbar/types.js +6 -0
  85. package/build/snackbar/types.js.map +1 -0
  86. package/build/tab-panel/index.js +10 -5
  87. package/build/tab-panel/index.js.map +1 -1
  88. package/build/theme/color-algorithms.js +118 -0
  89. package/build/theme/color-algorithms.js.map +1 -0
  90. package/build/theme/index.js +21 -18
  91. package/build/theme/index.js.map +1 -1
  92. package/build/theme/styles.js +10 -7
  93. package/build/theme/styles.js.map +1 -1
  94. package/build/toggle-control/index.js +5 -2
  95. package/build/toggle-control/index.js.map +1 -1
  96. package/build/ui/context/context-system-provider.js +3 -1
  97. package/build/ui/context/context-system-provider.js.map +1 -1
  98. package/build/unit-control/index.js +5 -2
  99. package/build/unit-control/index.js.map +1 -1
  100. package/build/utils/colors-values.js +1 -1
  101. package/build/utils/colors-values.js.map +1 -1
  102. package/build/utils/config-values.js +0 -2
  103. package/build/utils/config-values.js.map +1 -1
  104. package/build/utils/hooks/use-controlled-value.js.map +1 -1
  105. package/build-module/alignment-matrix-control/cell.js.map +1 -1
  106. package/build-module/alignment-matrix-control/icon.js +4 -2
  107. package/build-module/alignment-matrix-control/icon.js.map +1 -1
  108. package/build-module/alignment-matrix-control/index.js +23 -1
  109. package/build-module/alignment-matrix-control/index.js.map +1 -1
  110. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
  111. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
  112. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
  113. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  114. package/build-module/alignment-matrix-control/types.js +2 -0
  115. package/build-module/alignment-matrix-control/types.js.map +1 -0
  116. package/build-module/alignment-matrix-control/utils.js +13 -8
  117. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  118. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
  119. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  120. package/build-module/autocomplete/index.js +38 -9
  121. package/build-module/autocomplete/index.js.map +1 -1
  122. package/build-module/base-control/hooks.js +41 -0
  123. package/build-module/base-control/hooks.js.map +1 -0
  124. package/build-module/base-control/index.js +18 -8
  125. package/build-module/base-control/index.js.map +1 -1
  126. package/build-module/base-field/hook.js +0 -14
  127. package/build-module/base-field/hook.js.map +1 -1
  128. package/build-module/base-field/index.js.map +1 -1
  129. package/build-module/base-field/styles.js +5 -5
  130. package/build-module/base-field/styles.js.map +1 -1
  131. package/build-module/base-field/types.js +2 -0
  132. package/build-module/base-field/types.js.map +1 -0
  133. package/build-module/border-control/border-control/component.js +1 -0
  134. package/build-module/border-control/border-control/component.js.map +1 -1
  135. package/build-module/border-control/styles.js +17 -17
  136. package/build-module/border-control/styles.js.map +1 -1
  137. package/build-module/box-control/linked-button.js +3 -4
  138. package/build-module/box-control/linked-button.js.map +1 -1
  139. package/build-module/color-palette/index.js +2 -7
  140. package/build-module/color-palette/index.js.map +1 -1
  141. package/build-module/color-picker/input-with-slider.js +1 -0
  142. package/build-module/color-picker/input-with-slider.js.map +1 -1
  143. package/build-module/color-picker/styles.js +8 -8
  144. package/build-module/color-picker/styles.js.map +1 -1
  145. package/build-module/custom-select-control/index.js +14 -2
  146. package/build-module/custom-select-control/index.js.map +1 -1
  147. package/build-module/dashicon/index.js +1 -4
  148. package/build-module/dashicon/index.js.map +1 -1
  149. package/build-module/date-time/date-time/index.js +4 -4
  150. package/build-module/date-time/date-time/index.js.map +1 -1
  151. package/build-module/duotone-picker/duotone-picker.js +2 -2
  152. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  153. package/build-module/gradient-picker/index.js +3 -8
  154. package/build-module/gradient-picker/index.js.map +1 -1
  155. package/build-module/higher-order/with-fallback-styles/index.js +2 -2
  156. package/build-module/higher-order/with-fallback-styles/index.js.map +1 -1
  157. package/build-module/index.js +2 -2
  158. package/build-module/index.js.map +1 -1
  159. package/build-module/input-control/index.js +16 -5
  160. package/build-module/input-control/index.js.map +1 -1
  161. package/build-module/input-control/input-base.js +2 -0
  162. package/build-module/input-control/input-base.js.map +1 -1
  163. package/build-module/mobile/bottom-sheet/cell.native.js +1 -1
  164. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  165. package/build-module/mobile/bottom-sheet/switch-cell.native.js +1 -2
  166. package/build-module/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  167. package/build-module/mobile/global-styles-context/index.native.js +8 -7
  168. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  169. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
  170. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  171. package/build-module/modal/index.js +8 -0
  172. package/build-module/modal/index.js.map +1 -1
  173. package/build-module/navigator/navigator-provider/component.js +12 -8
  174. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  175. package/build-module/number-control/styles/number-control-styles.js +8 -10
  176. package/build-module/number-control/styles/number-control-styles.js.map +1 -1
  177. package/build-module/palette-edit/index.js +73 -34
  178. package/build-module/palette-edit/index.js.map +1 -1
  179. package/build-module/popover/index.js +10 -2
  180. package/build-module/popover/index.js.map +1 -1
  181. package/build-module/query-controls/index.js +1 -0
  182. package/build-module/query-controls/index.js.map +1 -1
  183. package/build-module/snackbar/index.js +33 -23
  184. package/build-module/snackbar/index.js.map +1 -1
  185. package/build-module/snackbar/list.js +14 -22
  186. package/build-module/snackbar/list.js.map +1 -1
  187. package/build-module/snackbar/types.js +2 -0
  188. package/build-module/snackbar/types.js.map +1 -0
  189. package/build-module/tab-panel/index.js +10 -5
  190. package/build-module/tab-panel/index.js.map +1 -1
  191. package/build-module/theme/color-algorithms.js +105 -0
  192. package/build-module/theme/color-algorithms.js.map +1 -0
  193. package/build-module/theme/index.js +21 -17
  194. package/build-module/theme/index.js.map +1 -1
  195. package/build-module/theme/styles.js +8 -6
  196. package/build-module/theme/styles.js.map +1 -1
  197. package/build-module/toggle-control/index.js +4 -2
  198. package/build-module/toggle-control/index.js.map +1 -1
  199. package/build-module/ui/context/context-system-provider.js +3 -2
  200. package/build-module/ui/context/context-system-provider.js.map +1 -1
  201. package/build-module/unit-control/index.js +5 -2
  202. package/build-module/unit-control/index.js.map +1 -1
  203. package/build-module/utils/colors-values.js +1 -1
  204. package/build-module/utils/colors-values.js.map +1 -1
  205. package/build-module/utils/config-values.js +0 -2
  206. package/build-module/utils/config-values.js.map +1 -1
  207. package/build-module/utils/hooks/use-controlled-value.js.map +1 -1
  208. package/build-style/style-rtl.css +92 -75
  209. package/build-style/style.css +92 -75
  210. package/build-types/alignment-matrix-control/cell.d.ts +5 -0
  211. package/build-types/alignment-matrix-control/cell.d.ts.map +1 -0
  212. package/build-types/alignment-matrix-control/icon.d.ts +6 -0
  213. package/build-types/alignment-matrix-control/icon.d.ts.map +1 -0
  214. package/build-types/alignment-matrix-control/index.d.ts +30 -0
  215. package/build-types/alignment-matrix-control/index.d.ts.map +1 -0
  216. package/build-types/alignment-matrix-control/stories/index.d.ts +14 -0
  217. package/build-types/alignment-matrix-control/stories/index.d.ts.map +1 -0
  218. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
  219. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
  220. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
  221. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
  222. package/build-types/alignment-matrix-control/test/index.d.ts +2 -0
  223. package/build-types/alignment-matrix-control/test/index.d.ts.map +1 -0
  224. package/build-types/alignment-matrix-control/types.d.ts +39 -0
  225. package/build-types/alignment-matrix-control/types.d.ts.map +1 -0
  226. package/build-types/alignment-matrix-control/utils.d.ts +33 -0
  227. package/build-types/alignment-matrix-control/utils.d.ts.map +1 -0
  228. package/build-types/base-control/hooks.d.ts +23 -0
  229. package/build-types/base-control/hooks.d.ts.map +1 -0
  230. package/build-types/base-control/index.d.ts +17 -7
  231. package/build-types/base-control/index.d.ts.map +1 -1
  232. package/build-types/base-control/stories/index.d.ts.map +1 -1
  233. package/build-types/base-control/test/index.d.ts +2 -0
  234. package/build-types/base-control/test/index.d.ts.map +1 -0
  235. package/build-types/base-control/types.d.ts +8 -2
  236. package/build-types/base-control/types.d.ts.map +1 -1
  237. package/build-types/base-field/hook.d.ts +7 -31
  238. package/build-types/base-field/hook.d.ts.map +1 -1
  239. package/build-types/base-field/index.d.ts +1 -1
  240. package/build-types/base-field/index.d.ts.map +1 -1
  241. package/build-types/base-field/styles.d.ts +5 -5
  242. package/build-types/base-field/styles.d.ts.map +1 -1
  243. package/build-types/base-field/test/index.d.ts +2 -0
  244. package/build-types/base-field/test/index.d.ts.map +1 -0
  245. package/build-types/base-field/types.d.ts +29 -0
  246. package/build-types/base-field/types.d.ts.map +1 -0
  247. package/build-types/border-box-control/border-box-control/hook.d.ts +2 -2
  248. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +2 -2
  249. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -2
  250. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
  251. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  252. package/build-types/border-control/border-control/hook.d.ts +2 -2
  253. package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -2
  254. package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
  255. package/build-types/border-control/styles.d.ts.map +1 -1
  256. package/build-types/card/card/hook.d.ts +2 -2
  257. package/build-types/card/card-body/hook.d.ts +2 -2
  258. package/build-types/card/card-divider/hook.d.ts +2 -2
  259. package/build-types/card/card-footer/hook.d.ts +2 -2
  260. package/build-types/card/card-header/hook.d.ts +2 -2
  261. package/build-types/card/card-media/hook.d.ts +2 -2
  262. package/build-types/color-palette/index.d.ts +2 -2
  263. package/build-types/color-palette/index.d.ts.map +1 -1
  264. package/build-types/color-palette/stories/index.d.ts +6 -7
  265. package/build-types/color-palette/stories/index.d.ts.map +1 -1
  266. package/build-types/color-palette/styles.d.ts +1 -1
  267. package/build-types/color-palette/types.d.ts +1 -1
  268. package/build-types/color-palette/types.d.ts.map +1 -1
  269. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  270. package/build-types/color-picker/styles.d.ts +5 -5
  271. package/build-types/color-picker/styles.d.ts.map +1 -1
  272. package/build-types/custom-select-control/index.d.ts.map +1 -1
  273. package/build-types/dashicon/index.d.ts +6 -20
  274. package/build-types/dashicon/index.d.ts.map +1 -1
  275. package/build-types/dashicon/types.d.ts +14 -0
  276. package/build-types/dashicon/types.d.ts.map +1 -1
  277. package/build-types/date-time/date/styles.d.ts +3 -3
  278. package/build-types/date-time/date-time/styles.d.ts +3 -3
  279. package/build-types/date-time/time/styles.d.ts +8 -8
  280. package/build-types/elevation/hook.d.ts +2 -2
  281. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  282. package/build-types/flex/flex/hook.d.ts +2 -2
  283. package/build-types/flex/flex-block/hook.d.ts +2 -2
  284. package/build-types/flex/flex-item/hook.d.ts +2 -2
  285. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -5
  286. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
  287. package/build-types/grid/hook.d.ts +2 -2
  288. package/build-types/h-stack/component.d.ts +1 -1
  289. package/build-types/h-stack/hook.d.ts +2 -2
  290. package/build-types/heading/hook.d.ts +2 -2
  291. package/build-types/input-control/index.d.ts +1 -1
  292. package/build-types/input-control/index.d.ts.map +1 -1
  293. package/build-types/input-control/input-base.d.ts.map +1 -1
  294. package/build-types/input-control/stories/index.d.ts +1 -0
  295. package/build-types/input-control/stories/index.d.ts.map +1 -1
  296. package/build-types/input-control/types.d.ts +2 -1
  297. package/build-types/input-control/types.d.ts.map +1 -1
  298. package/build-types/item-group/item/hook.d.ts +2 -2
  299. package/build-types/item-group/item-group/hook.d.ts +2 -2
  300. package/build-types/modal/index.d.ts.map +1 -1
  301. package/build-types/modal/stories/index.d.ts.map +1 -1
  302. package/build-types/navigator/navigator-back-button/hook.d.ts +3 -3
  303. package/build-types/navigator/navigator-button/hook.d.ts +3 -3
  304. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  305. package/build-types/number-control/index.d.ts +2 -2
  306. package/build-types/number-control/index.d.ts.map +1 -1
  307. package/build-types/number-control/stories/index.d.ts +25 -0
  308. package/build-types/number-control/stories/index.d.ts.map +1 -0
  309. package/build-types/number-control/styles/number-control-styles.d.ts +6 -6
  310. package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
  311. package/build-types/number-control/test/index.d.ts +2 -0
  312. package/build-types/number-control/test/index.d.ts.map +1 -0
  313. package/build-types/popover/index.d.ts +1 -1
  314. package/build-types/popover/index.d.ts.map +1 -1
  315. package/build-types/popover/stories/e2e/index.d.ts +1 -1
  316. package/build-types/range-control/index.d.ts +1 -1
  317. package/build-types/range-control/styles/range-control-styles.d.ts +2 -2
  318. package/build-types/resizable-box/resize-tooltip/index.d.ts +15 -19
  319. package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
  320. package/build-types/resizable-box/resize-tooltip/label.d.ts +4 -3
  321. package/build-types/resizable-box/resize-tooltip/label.d.ts.map +1 -1
  322. package/build-types/scrollable/hook.d.ts +2 -2
  323. package/build-types/search-control/index.d.ts +1 -1
  324. package/build-types/search-control/stories/index.d.ts +2 -2
  325. package/build-types/snackbar/index.d.ts +19 -0
  326. package/build-types/snackbar/index.d.ts.map +1 -0
  327. package/build-types/snackbar/list.d.ts +18 -0
  328. package/build-types/snackbar/list.d.ts.map +1 -0
  329. package/build-types/snackbar/stories/index.d.ts +16 -0
  330. package/build-types/snackbar/stories/index.d.ts.map +1 -0
  331. package/build-types/snackbar/stories/list.d.ts +12 -0
  332. package/build-types/snackbar/stories/list.d.ts.map +1 -0
  333. package/build-types/snackbar/types.d.ts +111 -0
  334. package/build-types/snackbar/types.d.ts.map +1 -0
  335. package/build-types/spacer/hook.d.ts +2 -2
  336. package/build-types/spinner/index.d.ts +1 -1
  337. package/build-types/surface/hook.d.ts +2 -2
  338. package/build-types/tab-panel/index.d.ts +1 -1
  339. package/build-types/tab-panel/index.d.ts.map +1 -1
  340. package/build-types/tab-panel/types.d.ts +19 -1
  341. package/build-types/tab-panel/types.d.ts.map +1 -1
  342. package/build-types/text/hook.d.ts +2 -2
  343. package/build-types/text-control/index.d.ts +2 -2
  344. package/build-types/text-control/stories/index.d.ts.map +1 -1
  345. package/build-types/text-control/types.d.ts +1 -5
  346. package/build-types/text-control/types.d.ts.map +1 -1
  347. package/build-types/theme/color-algorithms.d.ts +20 -0
  348. package/build-types/theme/color-algorithms.d.ts.map +1 -0
  349. package/build-types/theme/index.d.ts +1 -1
  350. package/build-types/theme/index.d.ts.map +1 -1
  351. package/build-types/theme/stories/index.d.ts +4 -0
  352. package/build-types/theme/stories/index.d.ts.map +1 -1
  353. package/build-types/theme/styles.d.ts +3 -2
  354. package/build-types/theme/styles.d.ts.map +1 -1
  355. package/build-types/theme/test/color-algorithms.d.ts +2 -0
  356. package/build-types/theme/test/color-algorithms.d.ts.map +1 -0
  357. package/build-types/theme/types.d.ts +41 -3
  358. package/build-types/theme/types.d.ts.map +1 -1
  359. package/build-types/toggle-control/index.d.ts.map +1 -1
  360. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -2
  361. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -2
  362. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
  363. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  364. package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
  365. package/build-types/tools-panel/tools-panel-header/hook.d.ts +2 -2
  366. package/build-types/tools-panel/tools-panel-item/hook.d.ts +2 -2
  367. package/build-types/truncate/hook.d.ts +2 -2
  368. package/build-types/ui/context/context-system-provider.d.ts.map +1 -1
  369. package/build-types/ui/control-group/hook.d.ts +2 -2
  370. package/build-types/ui/control-label/hook.d.ts +2 -2
  371. package/build-types/ui/form-group/form-group.d.ts +2 -2
  372. package/build-types/ui/form-group/use-form-group.d.ts +5 -5
  373. package/build-types/unit-control/index.d.ts +2 -1
  374. package/build-types/unit-control/index.d.ts.map +1 -1
  375. package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -2
  376. package/build-types/unit-control/types.d.ts +4 -0
  377. package/build-types/unit-control/types.d.ts.map +1 -1
  378. package/build-types/utils/config-values.d.ts +0 -2
  379. package/build-types/utils/hooks/use-controlled-value.d.ts +2 -1
  380. package/build-types/utils/hooks/use-controlled-value.d.ts.map +1 -1
  381. package/build-types/v-stack/component.d.ts +2 -2
  382. package/build-types/v-stack/hook.d.ts +2 -2
  383. package/build-types/v-stack/stories/index.d.ts +2 -2
  384. package/package.json +21 -20
  385. package/src/alignment-matrix-control/README.md +7 -7
  386. package/src/alignment-matrix-control/{cell.js → cell.tsx} +7 -1
  387. package/src/alignment-matrix-control/{icon.js → icon.tsx} +6 -3
  388. package/src/alignment-matrix-control/{index.js → index.tsx} +31 -4
  389. package/src/alignment-matrix-control/stories/{index.js → index.tsx} +17 -9
  390. package/src/alignment-matrix-control/styles/{alignment-matrix-control-icon-styles.js → alignment-matrix-control-icon-styles.ts} +11 -3
  391. package/src/alignment-matrix-control/styles/{alignment-matrix-control-styles.js → alignment-matrix-control-styles.ts} +13 -3
  392. package/src/alignment-matrix-control/test/{index.js → index.tsx} +5 -5
  393. package/src/alignment-matrix-control/types.ts +54 -0
  394. package/src/alignment-matrix-control/{utils.js → utils.tsx} +24 -14
  395. package/src/angle-picker-control/styles/angle-picker-control-styles.js +4 -0
  396. package/src/autocomplete/index.js +43 -12
  397. package/src/base-control/README.md +21 -12
  398. package/src/base-control/hooks.ts +45 -0
  399. package/src/base-control/index.tsx +18 -7
  400. package/src/base-control/stories/index.tsx +8 -10
  401. package/src/base-control/test/index.tsx +52 -0
  402. package/src/base-control/types.ts +8 -2
  403. package/src/base-field/README.md +21 -22
  404. package/src/base-field/{hook.js → hook.ts} +5 -15
  405. package/src/base-field/{index.js → index.ts} +0 -0
  406. package/src/base-field/{styles.js → styles.ts} +2 -2
  407. package/src/base-field/test/__snapshots__/{index.js.snap → index.tsx.snap} +4 -4
  408. package/src/base-field/test/{index.js → index.tsx} +10 -5
  409. package/src/base-field/types.ts +29 -0
  410. package/src/border-box-control/border-box-control/README.md +1 -0
  411. package/src/border-box-control/test/index.js +3 -1
  412. package/src/border-control/border-control/component.tsx +1 -0
  413. package/src/border-control/styles.ts +1 -10
  414. package/src/box-control/linked-button.js +8 -11
  415. package/src/box-control/test/index.js +206 -135
  416. package/src/button/stories/index.js +30 -0
  417. package/src/button/style.scss +17 -14
  418. package/src/button/test/index.js +32 -15
  419. package/src/card/test/index.tsx +32 -20
  420. package/src/circular-option-picker/style.scss +1 -0
  421. package/src/color-palette/index.tsx +4 -6
  422. package/src/color-palette/stories/index.tsx +1 -5
  423. package/src/color-palette/test/__snapshots__/index.tsx.snap +4 -4
  424. package/src/color-palette/test/index.tsx +84 -36
  425. package/src/color-palette/types.ts +1 -1
  426. package/src/color-picker/README.md +1 -0
  427. package/src/color-picker/input-with-slider.tsx +1 -0
  428. package/src/color-picker/styles.ts +0 -4
  429. package/src/confirm-dialog/README.md +3 -2
  430. package/src/custom-select-control/README.md +14 -0
  431. package/src/custom-select-control/index.js +14 -2
  432. package/src/dashicon/{index.js → index.tsx} +10 -4
  433. package/src/dashicon/types.ts +17 -0
  434. package/src/date-time/date-time/index.tsx +2 -2
  435. package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -8
  436. package/src/disabled/test/index.tsx +21 -11
  437. package/src/dropdown/test/index.js +39 -49
  438. package/src/dropdown-menu/test/index.js +18 -12
  439. package/src/duotone-picker/duotone-picker.js +2 -2
  440. package/src/focal-point-picker/test/media.js +26 -21
  441. package/src/form-token-field/style.scss +1 -1
  442. package/src/gradient-picker/index.js +5 -8
  443. package/src/grid/test/grid.tsx +31 -31
  444. package/src/higher-order/navigate-regions/style.scss +2 -22
  445. package/src/higher-order/with-fallback-styles/index.js +4 -2
  446. package/src/higher-order/with-filters/test/index.js +94 -101
  447. package/src/higher-order/with-focus-return/test/index.js +1 -4
  448. package/src/index.js +2 -2
  449. package/src/input-control/index.tsx +42 -28
  450. package/src/input-control/input-base.tsx +8 -1
  451. package/src/input-control/stories/index.tsx +6 -0
  452. package/src/input-control/test/index.js +18 -0
  453. package/src/input-control/types.ts +2 -0
  454. package/src/mobile/bottom-sheet/cell.native.js +1 -1
  455. package/src/mobile/bottom-sheet/switch-cell.native.js +2 -2
  456. package/src/mobile/global-styles-context/index.native.js +9 -11
  457. package/src/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
  458. package/src/mobile/link-settings/test/edit.native.js +68 -124
  459. package/src/modal/index.tsx +11 -0
  460. package/src/modal/stories/index.tsx +3 -0
  461. package/src/modal/test/index.tsx +15 -0
  462. package/src/navigation/stories/index.js +6 -6
  463. package/src/navigation/stories/{controlled-state.js → utils/controlled-state.js} +3 -3
  464. package/src/navigation/stories/{default.js → utils/default.js} +3 -3
  465. package/src/navigation/stories/{group.js → utils/group.js} +4 -4
  466. package/src/navigation/stories/{hide-if-empty.js → utils/hide-if-empty.js} +3 -3
  467. package/src/navigation/stories/{more-examples.js → utils/more-examples.js} +4 -4
  468. package/src/navigation/stories/{search.js → utils/search.js} +5 -5
  469. package/src/navigator/navigator-provider/component.tsx +13 -10
  470. package/src/notice/test/list.js +8 -5
  471. package/src/number-control/stories/{index.js → index.tsx} +24 -7
  472. package/src/number-control/styles/{number-control-styles.js → number-control-styles.ts} +5 -3
  473. package/src/number-control/test/index.tsx +600 -0
  474. package/src/palette-edit/index.js +88 -39
  475. package/src/palette-edit/test/index.js +25 -1
  476. package/src/popover/index.tsx +10 -2
  477. package/src/popover/style.scss +12 -11
  478. package/src/popover/test/index.tsx +25 -15
  479. package/src/query-controls/index.js +1 -0
  480. package/src/range-control/test/index.tsx +57 -60
  481. package/src/resizable-box/style.scss +1 -0
  482. package/src/sandbox/test/index.js +13 -11
  483. package/src/search-control/style.scss +4 -0
  484. package/src/snackbar/README.md +63 -8
  485. package/src/snackbar/{index.js → index.tsx} +46 -28
  486. package/src/snackbar/{list.js → list.tsx} +20 -21
  487. package/src/snackbar/stories/index.tsx +96 -0
  488. package/src/snackbar/stories/list.tsx +98 -0
  489. package/src/snackbar/types.ts +116 -0
  490. package/src/tab-panel/README.md +9 -0
  491. package/src/tab-panel/index.tsx +14 -3
  492. package/src/tab-panel/style.scss +46 -34
  493. package/src/tab-panel/test/index.tsx +111 -0
  494. package/src/tab-panel/types.ts +20 -1
  495. package/src/text/test/__snapshots__/index.tsx.snap +1 -0
  496. package/src/text/test/index.tsx +98 -46
  497. package/src/text-control/stories/index.tsx +0 -1
  498. package/src/text-control/types.ts +1 -6
  499. package/src/theme/README.md +32 -2
  500. package/src/theme/color-algorithms.ts +138 -0
  501. package/src/theme/index.tsx +23 -16
  502. package/src/theme/stories/index.tsx +67 -0
  503. package/src/theme/styles.ts +22 -17
  504. package/src/theme/test/color-algorithms.ts +100 -0
  505. package/src/theme/test/index.tsx +68 -35
  506. package/src/theme/types.ts +43 -3
  507. package/src/toggle-control/index.tsx +4 -2
  508. package/src/toggle-group-control/test/index.tsx +13 -2
  509. package/src/toolbar-group/test/index.js +8 -6
  510. package/src/tools-panel/stories/index.js +1 -1
  511. package/src/tools-panel/stories/{tools-panel-with-item-group-slot.js → utils/tools-panel-with-item-group-slot.js} +14 -11
  512. package/src/tools-panel/test/index.js +20 -14
  513. package/src/tooltip/README.md +7 -0
  514. package/src/tooltip/style.scss +2 -2
  515. package/src/tooltip/test/index.js +109 -18
  516. package/src/ui/context/context-system-provider.js +3 -2
  517. package/src/ui/context/test/context-system-provider.js +5 -4
  518. package/src/ui/control-label/test/index.js +3 -5
  519. package/src/unit-control/README.md +9 -1
  520. package/src/unit-control/index.tsx +3 -0
  521. package/src/unit-control/test/index.tsx +1 -0
  522. package/src/unit-control/types.ts +4 -0
  523. package/src/utils/colors-values.js +1 -1
  524. package/src/utils/config-values.js +0 -2
  525. package/src/utils/hooks/use-controlled-value.ts +2 -2
  526. package/src/utils/theme-variables.scss +20 -0
  527. package/tsconfig.json +2 -4
  528. package/tsconfig.tsbuildinfo +1 -1
  529. package/src/number-control/test/index.js +0 -478
  530. package/src/snackbar/stories/index.js +0 -89
@@ -14,46 +14,65 @@ import { useState } from '@wordpress/element';
14
14
  */
15
15
  import BoxControl from '../';
16
16
 
17
- const setupUser = () =>
18
- userEvent.setup( {
19
- advanceTimers: jest.advanceTimersByTime,
20
- } );
21
-
22
- const getInput = () =>
23
- screen.getByLabelText( 'Box Control', { selector: 'input' } );
24
- const getSelect = () => screen.getByLabelText( 'Select unit' );
25
- const getReset = () => screen.getByText( /Reset/ );
17
+ const Example = ( extraProps ) => {
18
+ const [ state, setState ] = useState();
19
+
20
+ return (
21
+ <BoxControl
22
+ values={ state }
23
+ onChange={ ( next ) => setState( next ) }
24
+ { ...extraProps }
25
+ />
26
+ );
27
+ };
26
28
 
27
29
  describe( 'BoxControl', () => {
28
30
  describe( 'Basic rendering', () => {
29
- it( 'should render', () => {
30
- const { container } = render( <BoxControl /> );
31
- const input = container.querySelector( 'input' );
31
+ it( 'should render a box control input', () => {
32
+ render( <BoxControl /> );
32
33
 
33
- expect( input ).toBeTruthy();
34
+ expect(
35
+ screen.getByRole( 'textbox', { name: 'Box Control' } )
36
+ ).toBeVisible();
34
37
  } );
35
38
 
36
39
  it( 'should update values when interacting with input', async () => {
37
- const user = setupUser();
40
+ const user = userEvent.setup( {
41
+ advanceTimers: jest.advanceTimersByTime,
42
+ } );
43
+
38
44
  render( <BoxControl /> );
39
- const input = getInput();
40
- const select = getSelect();
45
+
46
+ const input = screen.getByRole( 'textbox', {
47
+ name: 'Box Control',
48
+ } );
41
49
 
42
50
  await user.type( input, '100%' );
43
51
  await user.keyboard( '{Enter}' );
44
52
 
45
53
  expect( input ).toHaveValue( '100' );
46
- expect( select ).toHaveValue( '%' );
54
+ expect(
55
+ screen.getByRole( 'combobox', {
56
+ name: 'Select unit',
57
+ } )
58
+ ).toHaveValue( '%' );
47
59
  } );
48
60
  } );
49
61
 
50
62
  describe( 'Reset', () => {
51
63
  it( 'should reset values when clicking Reset', async () => {
52
- const user = setupUser();
64
+ const user = userEvent.setup( {
65
+ advanceTimers: jest.advanceTimersByTime,
66
+ } );
67
+
53
68
  render( <BoxControl /> );
54
- const input = getInput();
55
- const select = getSelect();
56
- const reset = getReset();
69
+
70
+ const input = screen.getByRole( 'textbox', {
71
+ name: 'Box Control',
72
+ } );
73
+ const select = screen.getByRole( 'combobox', {
74
+ name: 'Select unit',
75
+ } );
57
76
 
58
77
  await user.type( input, '100px' );
59
78
  await user.keyboard( '{Enter}' );
@@ -61,28 +80,25 @@ describe( 'BoxControl', () => {
61
80
  expect( input ).toHaveValue( '100' );
62
81
  expect( select ).toHaveValue( 'px' );
63
82
 
64
- await user.click( reset );
83
+ await user.click( screen.getByRole( 'button', { name: 'Reset' } ) );
65
84
 
66
85
  expect( input ).toHaveValue( '' );
67
86
  expect( select ).toHaveValue( 'px' );
68
87
  } );
69
88
 
70
89
  it( 'should reset values when clicking Reset, if controlled', async () => {
71
- const Example = () => {
72
- const [ state, setState ] = useState();
73
-
74
- return (
75
- <BoxControl
76
- values={ state }
77
- onChange={ ( next ) => setState( next ) }
78
- />
79
- );
80
- };
81
- const user = setupUser();
90
+ const user = userEvent.setup( {
91
+ advanceTimers: jest.advanceTimersByTime,
92
+ } );
93
+
82
94
  render( <Example /> );
83
- const input = getInput();
84
- const select = getSelect();
85
- const reset = getReset();
95
+
96
+ const input = screen.getByRole( 'textbox', {
97
+ name: 'Box Control',
98
+ } );
99
+ const select = screen.getByRole( 'combobox', {
100
+ name: 'Select unit',
101
+ } );
86
102
 
87
103
  await user.type( input, '100px' );
88
104
  await user.keyboard( '{Enter}' );
@@ -90,35 +106,25 @@ describe( 'BoxControl', () => {
90
106
  expect( input ).toHaveValue( '100' );
91
107
  expect( select ).toHaveValue( 'px' );
92
108
 
93
- await user.click( reset );
109
+ await user.click( screen.getByRole( 'button', { name: 'Reset' } ) );
94
110
 
95
111
  expect( input ).toHaveValue( '' );
96
112
  expect( select ).toHaveValue( 'px' );
97
113
  } );
98
114
 
99
115
  it( 'should reset values when clicking Reset, if controlled <-> uncontrolled state changes', async () => {
100
- const Example = () => {
101
- const [ state, setState ] = useState();
102
-
103
- return (
104
- <BoxControl
105
- values={ state }
106
- onChange={ ( next ) => {
107
- if ( next.top ) {
108
- setState( next );
109
- } else {
110
- // This reverts it to being uncontrolled.
111
- setState( undefined );
112
- }
113
- } }
114
- />
115
- );
116
- };
117
- const user = setupUser();
116
+ const user = userEvent.setup( {
117
+ advanceTimers: jest.advanceTimersByTime,
118
+ } );
119
+
118
120
  render( <Example /> );
119
- const input = getInput();
120
- const select = getSelect();
121
- const reset = getReset();
121
+
122
+ const input = screen.getByRole( 'textbox', {
123
+ name: 'Box Control',
124
+ } );
125
+ const select = screen.getByRole( 'combobox', {
126
+ name: 'Select unit',
127
+ } );
122
128
 
123
129
  await user.type( input, '100px' );
124
130
  await user.keyboard( '{Enter}' );
@@ -126,26 +132,33 @@ describe( 'BoxControl', () => {
126
132
  expect( input ).toHaveValue( '100' );
127
133
  expect( select ).toHaveValue( 'px' );
128
134
 
129
- await user.click( reset );
135
+ await user.click( screen.getByRole( 'button', { name: 'Reset' } ) );
130
136
 
131
137
  expect( input ).toHaveValue( '' );
132
138
  expect( select ).toHaveValue( 'px' );
133
139
  } );
134
140
 
135
141
  it( 'should persist cleared value when focus changes', async () => {
136
- const user = setupUser();
142
+ const user = userEvent.setup( {
143
+ advanceTimers: jest.advanceTimersByTime,
144
+ } );
137
145
  const spyChange = jest.fn();
146
+
138
147
  render( <BoxControl onChange={ ( v ) => spyChange( v ) } /> );
139
- const input = screen.getByLabelText( 'Box Control', {
140
- selector: 'input',
148
+
149
+ const input = screen.getByRole( 'textbox', {
150
+ name: 'Box Control',
141
151
  } );
142
- const unitSelect = screen.getByLabelText( 'Select unit' );
143
152
 
144
153
  await user.type( input, '100%' );
145
154
  await user.keyboard( '{Enter}' );
146
155
 
147
156
  expect( input ).toHaveValue( '100' );
148
- expect( unitSelect ).toHaveValue( '%' );
157
+ expect(
158
+ screen.getByRole( 'combobox', {
159
+ name: 'Select unit',
160
+ } )
161
+ ).toHaveValue( '%' );
149
162
 
150
163
  await user.clear( input );
151
164
  expect( input ).toHaveValue( '' );
@@ -164,125 +177,177 @@ describe( 'BoxControl', () => {
164
177
 
165
178
  describe( 'Unlinked sides', () => {
166
179
  it( 'should update a single side value when unlinked', async () => {
167
- let state = {};
168
- const setState = ( newState ) => ( state = newState );
169
-
170
- render(
171
- <BoxControl
172
- values={ state }
173
- onChange={ ( next ) => setState( next ) }
174
- />
175
- );
176
- const user = setupUser();
177
- const unlink = screen.getByLabelText( /Unlink sides/ );
180
+ const user = userEvent.setup( {
181
+ advanceTimers: jest.advanceTimersByTime,
182
+ } );
178
183
 
179
- await user.click( unlink );
184
+ render( <Example /> );
180
185
 
181
- const input = screen.getByLabelText( /Top/ );
182
- const select = screen.getAllByLabelText( /Select unit/ )[ 0 ];
186
+ await user.click(
187
+ screen.getByRole( 'button', { name: 'Unlink sides' } )
188
+ );
183
189
 
184
- await user.type( input, '100px' );
190
+ await user.type(
191
+ screen.getByRole( 'textbox', { name: 'Top' } ),
192
+ '100px'
193
+ );
185
194
  await user.keyboard( '{Enter}' );
186
195
 
187
- expect( input ).toHaveValue( '100' );
188
- expect( select ).toHaveValue( 'px' );
189
-
190
- expect( state ).toEqual( {
191
- top: '100px',
192
- right: undefined,
193
- bottom: undefined,
194
- left: undefined,
195
- } );
196
+ expect(
197
+ screen.getByRole( 'textbox', { name: 'Top' } )
198
+ ).toHaveValue( '100' );
199
+ expect(
200
+ screen.getByRole( 'textbox', { name: 'Right' } )
201
+ ).not.toHaveValue();
202
+ expect(
203
+ screen.getByRole( 'textbox', { name: 'Bottom' } )
204
+ ).not.toHaveValue();
205
+ expect(
206
+ screen.getByRole( 'textbox', { name: 'Left' } )
207
+ ).not.toHaveValue();
208
+
209
+ screen
210
+ .getAllByRole( 'combobox', { name: 'Select unit' } )
211
+ .forEach( ( combobox ) => {
212
+ expect( combobox ).toHaveValue( 'px' );
213
+ } );
196
214
  } );
197
215
 
198
216
  it( 'should update a whole axis when value is changed when unlinked', async () => {
199
- let state = {};
200
- const setState = ( newState ) => ( state = newState );
201
-
202
- render(
203
- <BoxControl
204
- values={ state }
205
- onChange={ ( next ) => setState( next ) }
206
- splitOnAxis={ true }
207
- />
208
- );
209
- const user = setupUser();
210
- const unlink = screen.getByLabelText( /Unlink sides/ );
217
+ const user = userEvent.setup( {
218
+ advanceTimers: jest.advanceTimersByTime,
219
+ } );
211
220
 
212
- await user.click( unlink );
221
+ render( <Example splitOnAxis /> );
213
222
 
214
- const input = screen.getByLabelText( /Vertical/ );
215
- const select = screen.getAllByLabelText( /Select unit/ )[ 0 ];
223
+ await user.click(
224
+ screen.getByRole( 'button', { name: 'Unlink sides' } )
225
+ );
216
226
 
217
- await user.type( input, '100px' );
227
+ await user.type(
228
+ screen.getByRole( 'textbox', {
229
+ name: 'Vertical',
230
+ } ),
231
+ '100px'
232
+ );
218
233
  await user.keyboard( '{Enter}' );
219
234
 
220
- expect( input ).toHaveValue( '100' );
221
- expect( select ).toHaveValue( 'px' );
222
-
223
- expect( state ).toEqual( {
224
- top: '100px',
225
- right: undefined,
226
- bottom: '100px',
227
- left: undefined,
228
- } );
235
+ expect(
236
+ screen.getByRole( 'textbox', { name: 'Vertical' } )
237
+ ).toHaveValue( '100' );
238
+ expect(
239
+ screen.getByRole( 'textbox', { name: 'Horizontal' } )
240
+ ).not.toHaveValue();
241
+
242
+ screen
243
+ .getAllByRole( 'combobox', { name: 'Select unit' } )
244
+ .forEach( ( combobox ) => {
245
+ expect( combobox ).toHaveValue( 'px' );
246
+ } );
229
247
  } );
230
248
  } );
231
249
 
232
250
  describe( 'Unit selections', () => {
233
251
  it( 'should update unlinked controls unit selection based on all input control', async () => {
252
+ const user = userEvent.setup( {
253
+ advanceTimers: jest.advanceTimersByTime,
254
+ } );
255
+
234
256
  // Render control.
235
257
  render( <BoxControl /> );
236
- const user = setupUser();
237
258
 
238
259
  // Make unit selection on all input control.
239
- const allUnitSelect = getSelect();
240
- await user.selectOptions( allUnitSelect, [ 'em' ] );
260
+ await user.selectOptions(
261
+ screen.getByRole( 'combobox', {
262
+ name: 'Select unit',
263
+ } ),
264
+ [ 'em' ]
265
+ );
241
266
 
242
267
  // Unlink the controls.
243
- await user.click( screen.getByLabelText( /Unlink sides/ ) );
268
+ await user.click(
269
+ screen.getByRole( 'button', { name: 'Unlink sides' } )
270
+ );
271
+
272
+ const controls = screen.getAllByRole( 'combobox', {
273
+ name: 'Select unit',
274
+ } );
275
+
276
+ // Confirm we have exactly 4 controls.
277
+ expect( controls ).toHaveLength( 4 );
244
278
 
245
279
  // Confirm that each individual control has the selected unit
246
- const unlinkedSelects = screen.getAllByDisplayValue( 'em' );
247
- expect( unlinkedSelects.length ).toEqual( 4 );
280
+ controls.forEach( ( control ) => {
281
+ expect( control ).toHaveValue( 'em' );
282
+ } );
248
283
  } );
249
284
 
250
285
  it( 'should use individual side attribute unit when available', async () => {
286
+ const user = userEvent.setup( {
287
+ advanceTimers: jest.advanceTimersByTime,
288
+ } );
289
+
251
290
  // Render control.
252
291
  const { rerender } = render( <BoxControl /> );
253
- const user = setupUser();
254
292
 
255
293
  // Make unit selection on all input control.
256
- const allUnitSelect = getSelect();
257
- await user.selectOptions( allUnitSelect, [ 'vw' ] );
294
+ await user.selectOptions(
295
+ screen.getByRole( 'combobox', {
296
+ name: 'Select unit',
297
+ } ),
298
+ [ 'vw' ]
299
+ );
258
300
 
259
301
  // Unlink the controls.
260
- await user.click( screen.getByLabelText( /Unlink sides/ ) );
302
+ await user.click(
303
+ screen.getByRole( 'button', { name: 'Unlink sides' } )
304
+ );
305
+
306
+ const controls = screen.getAllByRole( 'combobox', {
307
+ name: 'Select unit',
308
+ } );
309
+
310
+ // Confirm we have exactly 4 controls.
311
+ expect( controls ).toHaveLength( 4 );
261
312
 
262
313
  // Confirm that each individual control has the selected unit
263
- const unlinkedSelects = screen.getAllByDisplayValue( 'vw' );
264
- expect( unlinkedSelects.length ).toEqual( 4 );
314
+ controls.forEach( ( control ) => {
315
+ expect( control ).toHaveValue( 'vw' );
316
+ } );
265
317
 
266
318
  // Rerender with individual side value & confirm unit is selected.
267
319
  rerender( <BoxControl values={ { top: '2.5em' } } /> );
268
320
 
269
- const topSelect = screen.getByDisplayValue( 'em' );
270
- const otherSelects = screen.getAllByDisplayValue( 'vw' );
321
+ const rerenderedControls = screen.getAllByRole( 'combobox', {
322
+ name: 'Select unit',
323
+ } );
271
324
 
272
- expect( topSelect ).toBeInTheDocument();
273
- expect( otherSelects.length ).toEqual( 3 );
325
+ // Confirm we have exactly 4 controls.
326
+ expect( rerenderedControls ).toHaveLength( 4 );
327
+
328
+ // Confirm that each individual control has the right selected unit
329
+ rerenderedControls.forEach( ( control, index ) => {
330
+ const expected = index === 0 ? 'em' : 'vw';
331
+ expect( control ).toHaveValue( expected );
332
+ } );
274
333
  } );
275
334
  } );
276
335
 
277
336
  describe( 'onChange updates', () => {
278
337
  it( 'should call onChange when values contain more than just CSS units', async () => {
338
+ const user = userEvent.setup( {
339
+ advanceTimers: jest.advanceTimersByTime,
340
+ } );
279
341
  const setState = jest.fn();
280
342
 
281
343
  render( <BoxControl onChange={ setState } /> );
282
- const user = setupUser();
283
- const input = getInput();
284
344
 
285
- await user.type( input, '7.5rem' );
345
+ await user.type(
346
+ screen.getByRole( 'textbox', {
347
+ name: 'Box Control',
348
+ } ),
349
+ '7.5rem'
350
+ );
286
351
  await user.keyboard( '{Enter}' );
287
352
 
288
353
  expect( setState ).toHaveBeenCalledWith( {
@@ -294,13 +359,19 @@ describe( 'BoxControl', () => {
294
359
  } );
295
360
 
296
361
  it( 'should not pass invalid CSS unit only values to onChange', async () => {
362
+ const user = userEvent.setup( {
363
+ advanceTimers: jest.advanceTimersByTime,
364
+ } );
297
365
  const setState = jest.fn();
298
366
 
299
367
  render( <BoxControl onChange={ setState } /> );
300
- const user = setupUser();
301
368
 
302
- const allUnitSelect = getSelect();
303
- await user.selectOptions( allUnitSelect, 'rem' );
369
+ await user.selectOptions(
370
+ screen.getByRole( 'combobox', {
371
+ name: 'Select unit',
372
+ } ),
373
+ 'rem'
374
+ );
304
375
 
305
376
  expect( setState ).toHaveBeenCalledWith( {
306
377
  top: undefined,
@@ -128,6 +128,36 @@ Default.args = {
128
128
  children: 'Code is poetry',
129
129
  };
130
130
 
131
+ export const Primary = Template.bind( {} );
132
+ Primary.args = {
133
+ ...Default.args,
134
+ variant: 'primary',
135
+ };
136
+
137
+ export const Secondary = Template.bind( {} );
138
+ Secondary.args = {
139
+ ...Default.args,
140
+ variant: 'secondary',
141
+ };
142
+
143
+ export const Tertiary = Template.bind( {} );
144
+ Tertiary.args = {
145
+ ...Default.args,
146
+ variant: 'tertiary',
147
+ };
148
+
149
+ export const Link = Template.bind( {} );
150
+ Link.args = {
151
+ ...Default.args,
152
+ variant: 'link',
153
+ };
154
+
155
+ export const IsDestructive = Template.bind( {} );
156
+ IsDestructive.args = {
157
+ ...Default.args,
158
+ isDestructive: true,
159
+ };
160
+
131
161
  export const Icon = Template.bind( {} );
132
162
  Icon.args = {
133
163
  label: 'Code is poetry',
@@ -16,7 +16,7 @@
16
16
  box-sizing: border-box;
17
17
  padding: 6px 12px;
18
18
  border-radius: $radius-block-ui;
19
- color: $gray-900;
19
+ color: $components-color-foreground;
20
20
 
21
21
  &[aria-expanded="true"],
22
22
  &:hover {
@@ -44,7 +44,7 @@
44
44
  &.is-primary {
45
45
  white-space: nowrap;
46
46
  background: $components-color-accent;
47
- color: $white;
47
+ color: $components-color-accent-inverted;
48
48
  text-decoration: none;
49
49
  text-shadow: none;
50
50
 
@@ -53,17 +53,17 @@
53
53
 
54
54
  &:hover:not(:disabled) {
55
55
  background: $components-color-accent-darker-10;
56
- color: $white;
56
+ color: $components-color-accent-inverted;
57
57
  }
58
58
 
59
59
  &:active:not(:disabled) {
60
60
  background: $components-color-accent-darker-20;
61
61
  border-color: $components-color-accent-darker-20;
62
- color: $white;
62
+ color: $components-color-accent-inverted;
63
63
  }
64
64
 
65
65
  &:focus:not(:disabled) {
66
- box-shadow: inset 0 0 0 1px $white, 0 0 0 var(--wp-admin-border-width-focus) $components-color-accent;
66
+ box-shadow: inset 0 0 0 1px $components-color-background, 0 0 0 var(--wp-admin-border-width-focus) $components-color-accent;
67
67
  }
68
68
 
69
69
  &:disabled,
@@ -71,6 +71,7 @@
71
71
  &[aria-disabled="true"],
72
72
  &[aria-disabled="true"]:enabled, // This catches a situation where a Button is aria-disabled, but not disabled.
73
73
  &[aria-disabled="true"]:active:enabled {
74
+ // TODO: Prepare for theming (https://github.com/WordPress/gutenberg/pull/45466/files#r1030872724)
74
75
  color: rgba($white, 0.4);
75
76
  background: $components-color-accent;
76
77
  border-color: $components-color-accent;
@@ -79,7 +80,7 @@
79
80
 
80
81
  &:focus:enabled {
81
82
  box-shadow:
82
- 0 0 0 $border-width $white,
83
+ 0 0 0 $border-width $components-color-background,
83
84
  0 0 0 3px $components-color-accent;
84
85
  }
85
86
  }
@@ -87,7 +88,7 @@
87
88
  &.is-busy,
88
89
  &.is-busy:disabled,
89
90
  &.is-busy[aria-disabled="true"] {
90
- color: $white;
91
+ color: $components-color-accent-inverted;
91
92
  background-size: 100px 100%;
92
93
  // Disable reason: This function call looks nicer when each argument is on its own line.
93
94
  /* stylelint-disable */
@@ -113,7 +114,7 @@
113
114
  outline: 1px solid transparent;
114
115
 
115
116
  &:active:not(:disabled) {
116
- background: $gray-300;
117
+ background: $components-color-gray-300;
117
118
  color: $components-color-accent-darker-10;
118
119
  box-shadow: none;
119
120
  }
@@ -126,6 +127,7 @@
126
127
  &:disabled,
127
128
  &[aria-disabled="true"],
128
129
  &[aria-disabled="true"]:hover {
130
+ // TODO: Prepare for theming (https://github.com/WordPress/gutenberg/pull/45466/files#r1030872724)
129
131
  color: lighten($gray-700, 5%);
130
132
  background: lighten($gray-300, 5%);
131
133
  transform: none;
@@ -222,7 +224,7 @@
222
224
  }
223
225
 
224
226
  &:not([aria-disabled="true"]):active {
225
- color: inherit;
227
+ color: $components-color-foreground;
226
228
  }
227
229
 
228
230
  &:disabled,
@@ -242,6 +244,7 @@
242
244
  /* stylelint-disable */
243
245
  background-image: linear-gradient(
244
246
  -45deg,
247
+ // TODO: Prepare for theming (https://github.com/WordPress/gutenberg/pull/45466/files#r1030872724)
245
248
  darken($white, 2%) 33%,
246
249
  darken($white, 12%) 33%,
247
250
  darken($white, 12%) 70%,
@@ -292,19 +295,19 @@
292
295
 
293
296
  // Toggled style.
294
297
  &.is-pressed {
295
- color: $white;
296
- background: $gray-900;
298
+ color: $components-color-foreground-inverted;
299
+ background: $components-color-foreground;
297
300
 
298
301
  &:focus:not(:disabled) {
299
- box-shadow: inset 0 0 0 1px $white, 0 0 0 var(--wp-admin-border-width-focus) $components-color-accent;
302
+ box-shadow: inset 0 0 0 1px $components-color-background, 0 0 0 var(--wp-admin-border-width-focus) $components-color-accent;
300
303
 
301
304
  // Windows High Contrast mode will show this outline, but not the box-shadow.
302
305
  outline: 2px solid transparent;
303
306
  }
304
307
 
305
308
  &:hover:not(:disabled) {
306
- color: $white;
307
- background: $gray-900;
309
+ color: $components-color-foreground-inverted;
310
+ background: $components-color-foreground;
308
311
  }
309
312
  }
310
313