@wordpress/components 19.7.0-next.e230fbab09.0 → 19.8.1

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 (539) hide show
  1. package/CHANGELOG.md +57 -1
  2. package/README.md +38 -0
  3. package/build/base-control/index.js +41 -32
  4. package/build/base-control/index.js.map +1 -1
  5. package/build/base-control/styles/base-control-styles.js +43 -22
  6. package/build/base-control/styles/base-control-styles.js.map +1 -1
  7. package/build/base-control/types.js +6 -0
  8. package/build/base-control/types.js.map +1 -0
  9. package/build/border-box-control/border-box-control/component.js +124 -0
  10. package/build/border-box-control/border-box-control/component.js.map +1 -0
  11. package/build/border-box-control/border-box-control/hook.js +113 -0
  12. package/build/border-box-control/border-box-control/hook.js.map +1 -0
  13. package/build/border-box-control/border-box-control/index.js +24 -0
  14. package/build/border-box-control/border-box-control/index.js.map +1 -0
  15. package/build/border-box-control/border-box-control-linked-button/component.js +59 -0
  16. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -0
  17. package/build/border-box-control/border-box-control-linked-button/hook.js +41 -0
  18. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
  19. package/build/border-box-control/border-box-control-linked-button/index.js +16 -0
  20. package/build/border-box-control/border-box-control-linked-button/index.js.map +1 -0
  21. package/build/border-box-control/border-box-control-split-controls/component.js +93 -0
  22. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -0
  23. package/build/border-box-control/border-box-control-split-controls/hook.js +45 -0
  24. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
  25. package/build/border-box-control/border-box-control-split-controls/index.js +16 -0
  26. package/build/border-box-control/border-box-control-split-controls/index.js.map +1 -0
  27. package/build/border-box-control/border-box-control-visualizer/component.js +40 -0
  28. package/build/border-box-control/border-box-control-visualizer/component.js.map +1 -0
  29. package/build/border-box-control/border-box-control-visualizer/hook.js +43 -0
  30. package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
  31. package/build/border-box-control/border-box-control-visualizer/index.js +16 -0
  32. package/build/border-box-control/border-box-control-visualizer/index.js.map +1 -0
  33. package/build/border-box-control/index.js +44 -0
  34. package/build/border-box-control/index.js.map +1 -0
  35. package/build/border-box-control/styles.js +76 -0
  36. package/build/border-box-control/styles.js.map +1 -0
  37. package/build/border-box-control/types.js +6 -0
  38. package/build/border-box-control/types.js.map +1 -0
  39. package/build/border-box-control/utils.js +161 -0
  40. package/build/border-box-control/utils.js.map +1 -0
  41. package/build/border-control/border-control/component.js +119 -0
  42. package/build/border-control/border-control/component.js.map +1 -0
  43. package/build/border-control/border-control/hook.js +130 -0
  44. package/build/border-control/border-control/hook.js.map +1 -0
  45. package/build/border-control/border-control/index.js +24 -0
  46. package/build/border-control/border-control/index.js.map +1 -0
  47. package/build/border-control/border-control-dropdown/component.js +196 -0
  48. package/build/border-control/border-control-dropdown/component.js.map +1 -0
  49. package/build/border-control/border-control-dropdown/hook.js +105 -0
  50. package/build/border-control/border-control-dropdown/hook.js.map +1 -0
  51. package/build/border-control/border-control-dropdown/index.js +16 -0
  52. package/build/border-control/border-control-dropdown/index.js.map +1 -0
  53. package/build/border-control/border-control-style-picker/component.js +101 -0
  54. package/build/border-control/border-control-style-picker/component.js.map +1 -0
  55. package/build/border-control/border-control-style-picker/hook.js +45 -0
  56. package/build/border-control/border-control-style-picker/hook.js.map +1 -0
  57. package/build/border-control/border-control-style-picker/index.js +16 -0
  58. package/build/border-control/border-control-style-picker/index.js.map +1 -0
  59. package/build/border-control/index.js +24 -0
  60. package/build/border-control/index.js.map +1 -0
  61. package/build/border-control/styles.js +125 -0
  62. package/build/border-control/styles.js.map +1 -0
  63. package/build/border-control/types.js +6 -0
  64. package/build/border-control/types.js.map +1 -0
  65. package/build/box-control/all-input-control.js +3 -7
  66. package/build/box-control/all-input-control.js.map +1 -1
  67. package/build/box-control/axial-input-controls.js +20 -15
  68. package/build/box-control/axial-input-controls.js.map +1 -1
  69. package/build/box-control/input-controls.js +21 -16
  70. package/build/box-control/input-controls.js.map +1 -1
  71. package/build/box-control/utils.js +25 -11
  72. package/build/box-control/utils.js.map +1 -1
  73. package/build/card/styles.js +22 -17
  74. package/build/card/styles.js.map +1 -1
  75. package/build/checkbox-control/index.js +21 -1
  76. package/build/checkbox-control/index.js.map +1 -1
  77. package/build/color-palette/index.js +53 -4
  78. package/build/color-palette/index.js.map +1 -1
  79. package/build/custom-select-control/index.js +12 -4
  80. package/build/custom-select-control/index.js.map +1 -1
  81. package/build/divider/styles.js +28 -16
  82. package/build/divider/styles.js.map +1 -1
  83. package/build/focal-point-picker/controls.js +2 -3
  84. package/build/focal-point-picker/controls.js.map +1 -1
  85. package/build/form-file-upload/index.js +4 -1
  86. package/build/form-file-upload/index.js.map +1 -1
  87. package/build/guide/index.js +14 -8
  88. package/build/guide/index.js.map +1 -1
  89. package/build/index.js +40 -0
  90. package/build/index.js.map +1 -1
  91. package/build/input-control/input-field.js +21 -14
  92. package/build/input-control/input-field.js.map +1 -1
  93. package/build/input-control/reducer/actions.js +1 -3
  94. package/build/input-control/reducer/actions.js.map +1 -1
  95. package/build/input-control/reducer/reducer.js +1 -43
  96. package/build/input-control/reducer/reducer.js.map +1 -1
  97. package/build/item-group/styles.js +14 -14
  98. package/build/item-group/styles.js.map +1 -1
  99. package/build/mobile/picker/index.android.js +0 -3
  100. package/build/mobile/picker/index.android.js.map +1 -1
  101. package/build/number-control/index.js +15 -10
  102. package/build/number-control/index.js.map +1 -1
  103. package/build/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +4 -4
  104. package/build/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js.map +1 -1
  105. package/build/surface/styles.js +8 -8
  106. package/build/surface/styles.js.map +1 -1
  107. package/build/toggle-group-control/index.js +8 -0
  108. package/build/toggle-group-control/index.js.map +1 -1
  109. package/build/toggle-group-control/toggle-group-control/component.js +10 -1
  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 +14 -3
  112. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  113. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +90 -0
  114. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
  115. package/build/toggle-group-control/toggle-group-control-option/component.js +9 -90
  116. package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  117. package/build/toggle-group-control/toggle-group-control-option-base/component.js +127 -0
  118. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
  119. package/build/toggle-group-control/toggle-group-control-option-base/index.js +16 -0
  120. package/build/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
  121. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +66 -0
  122. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
  123. package/build/toggle-group-control/toggle-group-control-option-icon/component.js +55 -0
  124. package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
  125. package/build/toggle-group-control/toggle-group-control-option-icon/index.js +16 -0
  126. package/build/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
  127. package/build/toolbar-dropdown-menu/index.js +1 -1
  128. package/build/toolbar-dropdown-menu/index.js.map +1 -1
  129. package/build/tree-grid/index.js +4 -1
  130. package/build/tree-grid/index.js.map +1 -1
  131. package/build/unit-control/index.js +56 -29
  132. package/build/unit-control/index.js.map +1 -1
  133. package/build/unit-control/unit-select-control.js +2 -4
  134. package/build/unit-control/unit-select-control.js.map +1 -1
  135. package/build/utils/colors-values.js +5 -3
  136. package/build/utils/colors-values.js.map +1 -1
  137. package/build/utils/config-values.js +9 -4
  138. package/build/utils/config-values.js.map +1 -1
  139. package/build-module/base-control/index.js +39 -35
  140. package/build-module/base-control/index.js.map +1 -1
  141. package/build-module/base-control/styles/base-control-styles.js +44 -16
  142. package/build-module/base-control/styles/base-control-styles.js.map +1 -1
  143. package/build-module/base-control/types.js +2 -0
  144. package/build-module/base-control/types.js.map +1 -0
  145. package/build-module/border-box-control/border-box-control/component.js +104 -0
  146. package/build-module/border-box-control/border-box-control/component.js.map +1 -0
  147. package/build-module/border-box-control/border-box-control/hook.js +97 -0
  148. package/build-module/border-box-control/border-box-control/hook.js.map +1 -0
  149. package/build-module/border-box-control/border-box-control/index.js +3 -0
  150. package/build-module/border-box-control/border-box-control/index.js.map +1 -0
  151. package/build-module/border-box-control/border-box-control-linked-button/component.js +42 -0
  152. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -0
  153. package/build-module/border-box-control/border-box-control-linked-button/hook.js +26 -0
  154. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
  155. package/build-module/border-box-control/border-box-control-linked-button/index.js +2 -0
  156. package/build-module/border-box-control/border-box-control-linked-button/index.js.map +1 -0
  157. package/build-module/border-box-control/border-box-control-split-controls/component.js +77 -0
  158. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -0
  159. package/build-module/border-box-control/border-box-control-split-controls/hook.js +30 -0
  160. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
  161. package/build-module/border-box-control/border-box-control-split-controls/index.js +2 -0
  162. package/build-module/border-box-control/border-box-control-split-controls/index.js.map +1 -0
  163. package/build-module/border-box-control/border-box-control-visualizer/component.js +27 -0
  164. package/build-module/border-box-control/border-box-control-visualizer/component.js.map +1 -0
  165. package/build-module/border-box-control/border-box-control-visualizer/hook.js +28 -0
  166. package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
  167. package/build-module/border-box-control/border-box-control-visualizer/index.js +2 -0
  168. package/build-module/border-box-control/border-box-control-visualizer/index.js.map +1 -0
  169. package/build-module/border-box-control/index.js +4 -0
  170. package/build-module/border-box-control/index.js.map +1 -0
  171. package/build-module/border-box-control/styles.js +66 -0
  172. package/build-module/border-box-control/styles.js.map +1 -0
  173. package/build-module/border-box-control/types.js +2 -0
  174. package/build-module/border-box-control/types.js.map +1 -0
  175. package/build-module/border-box-control/utils.js +127 -0
  176. package/build-module/border-box-control/utils.js.map +1 -0
  177. package/build-module/border-control/border-control/component.js +100 -0
  178. package/build-module/border-control/border-control/component.js.map +1 -0
  179. package/build-module/border-control/border-control/hook.js +115 -0
  180. package/build-module/border-control/border-control/hook.js.map +1 -0
  181. package/build-module/border-control/border-control/index.js +3 -0
  182. package/build-module/border-control/border-control/index.js.map +1 -0
  183. package/build-module/border-control/border-control-dropdown/component.js +174 -0
  184. package/build-module/border-control/border-control-dropdown/component.js.map +1 -0
  185. package/build-module/border-control/border-control-dropdown/hook.js +89 -0
  186. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -0
  187. package/build-module/border-control/border-control-dropdown/index.js +2 -0
  188. package/build-module/border-control/border-control-dropdown/index.js.map +1 -0
  189. package/build-module/border-control/border-control-style-picker/component.js +81 -0
  190. package/build-module/border-control/border-control-style-picker/component.js.map +1 -0
  191. package/build-module/border-control/border-control-style-picker/hook.js +30 -0
  192. package/build-module/border-control/border-control-style-picker/hook.js.map +1 -0
  193. package/build-module/border-control/border-control-style-picker/index.js +2 -0
  194. package/build-module/border-control/border-control-style-picker/index.js.map +1 -0
  195. package/build-module/border-control/index.js +3 -0
  196. package/build-module/border-control/index.js.map +1 -0
  197. package/build-module/border-control/styles.js +90 -0
  198. package/build-module/border-control/styles.js.map +1 -0
  199. package/build-module/border-control/types.js +2 -0
  200. package/build-module/border-control/types.js.map +1 -0
  201. package/build-module/box-control/all-input-control.js +4 -8
  202. package/build-module/box-control/all-input-control.js.map +1 -1
  203. package/build-module/box-control/axial-input-controls.js +18 -14
  204. package/build-module/box-control/axial-input-controls.js.map +1 -1
  205. package/build-module/box-control/input-controls.js +18 -14
  206. package/build-module/box-control/input-controls.js.map +1 -1
  207. package/build-module/box-control/utils.js +25 -11
  208. package/build-module/box-control/utils.js.map +1 -1
  209. package/build-module/card/styles.js +23 -18
  210. package/build-module/card/styles.js.map +1 -1
  211. package/build-module/checkbox-control/index.js +24 -3
  212. package/build-module/checkbox-control/index.js.map +1 -1
  213. package/build-module/color-palette/index.js +52 -4
  214. package/build-module/color-palette/index.js.map +1 -1
  215. package/build-module/custom-select-control/index.js +12 -4
  216. package/build-module/custom-select-control/index.js.map +1 -1
  217. package/build-module/divider/styles.js +29 -10
  218. package/build-module/divider/styles.js.map +1 -1
  219. package/build-module/focal-point-picker/controls.js +2 -3
  220. package/build-module/focal-point-picker/controls.js.map +1 -1
  221. package/build-module/form-file-upload/index.js +4 -1
  222. package/build-module/form-file-upload/index.js.map +1 -1
  223. package/build-module/guide/index.js +14 -8
  224. package/build-module/guide/index.js.map +1 -1
  225. package/build-module/index.js +3 -1
  226. package/build-module/index.js.map +1 -1
  227. package/build-module/input-control/input-field.js +21 -13
  228. package/build-module/input-control/input-field.js.map +1 -1
  229. package/build-module/input-control/reducer/actions.js +0 -1
  230. package/build-module/input-control/reducer/actions.js.map +1 -1
  231. package/build-module/input-control/reducer/reducer.js +2 -39
  232. package/build-module/input-control/reducer/reducer.js.map +1 -1
  233. package/build-module/item-group/styles.js +14 -14
  234. package/build-module/item-group/styles.js.map +1 -1
  235. package/build-module/mobile/picker/index.android.js +0 -3
  236. package/build-module/mobile/picker/index.android.js.map +1 -1
  237. package/build-module/number-control/index.js +15 -9
  238. package/build-module/number-control/index.js.map +1 -1
  239. package/build-module/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +4 -4
  240. package/build-module/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js.map +1 -1
  241. package/build-module/surface/styles.js +8 -8
  242. package/build-module/surface/styles.js.map +1 -1
  243. package/build-module/toggle-group-control/index.js +1 -0
  244. package/build-module/toggle-group-control/index.js.map +1 -1
  245. package/build-module/toggle-group-control/toggle-group-control/component.js +8 -1
  246. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  247. package/build-module/toggle-group-control/toggle-group-control/styles.js +11 -3
  248. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  249. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +86 -0
  250. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
  251. package/build-module/toggle-group-control/toggle-group-control-option/component.js +9 -79
  252. package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  253. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +105 -0
  254. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
  255. package/build-module/toggle-group-control/toggle-group-control-option-base/index.js +2 -0
  256. package/build-module/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
  257. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +55 -0
  258. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
  259. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +50 -0
  260. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
  261. package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js +2 -0
  262. package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
  263. package/build-module/toolbar-dropdown-menu/index.js +1 -1
  264. package/build-module/toolbar-dropdown-menu/index.js.map +1 -1
  265. package/build-module/tree-grid/index.js +4 -1
  266. package/build-module/tree-grid/index.js.map +1 -1
  267. package/build-module/unit-control/index.js +54 -27
  268. package/build-module/unit-control/index.js.map +1 -1
  269. package/build-module/unit-control/unit-select-control.js +2 -3
  270. package/build-module/unit-control/unit-select-control.js.map +1 -1
  271. package/build-module/utils/colors-values.js +5 -3
  272. package/build-module/utils/colors-values.js.map +1 -1
  273. package/build-module/utils/config-values.js +8 -4
  274. package/build-module/utils/config-values.js.map +1 -1
  275. package/build-style/style-rtl.css +33 -185
  276. package/build-style/style.css +33 -185
  277. package/build-types/base-control/index.d.ts +35 -71
  278. package/build-types/base-control/index.d.ts.map +1 -1
  279. package/build-types/base-control/stories/index.d.ts +25 -0
  280. package/build-types/base-control/stories/index.d.ts.map +1 -0
  281. package/build-types/base-control/styles/base-control-styles.d.ts +10 -5
  282. package/build-types/base-control/styles/base-control-styles.d.ts.map +1 -1
  283. package/build-types/base-control/types.d.ts +41 -0
  284. package/build-types/base-control/types.d.ts.map +1 -0
  285. package/build-types/border-box-control/border-box-control/component.d.ts +4 -0
  286. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -0
  287. package/build-types/border-box-control/border-box-control/hook.d.ts +282 -0
  288. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -0
  289. package/build-types/border-box-control/border-box-control/index.d.ts +3 -0
  290. package/build-types/border-box-control/border-box-control/index.d.ts.map +1 -0
  291. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +4 -0
  292. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -0
  293. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +266 -0
  294. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -0
  295. package/build-types/border-box-control/border-box-control-linked-button/index.d.ts +2 -0
  296. package/build-types/border-box-control/border-box-control-linked-button/index.d.ts.map +1 -0
  297. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +4 -0
  298. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -0
  299. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +274 -0
  300. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -0
  301. package/build-types/border-box-control/border-box-control-split-controls/index.d.ts +2 -0
  302. package/build-types/border-box-control/border-box-control-split-controls/index.d.ts.map +1 -0
  303. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts +4 -0
  304. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -0
  305. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +266 -0
  306. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -0
  307. package/build-types/border-box-control/border-box-control-visualizer/index.d.ts +2 -0
  308. package/build-types/border-box-control/border-box-control-visualizer/index.d.ts.map +1 -0
  309. package/build-types/border-box-control/index.d.ts +4 -0
  310. package/build-types/border-box-control/index.d.ts.map +1 -0
  311. package/build-types/border-box-control/styles.d.ts +8 -0
  312. package/build-types/border-box-control/styles.d.ts.map +1 -0
  313. package/build-types/border-box-control/types.d.ts +91 -0
  314. package/build-types/border-box-control/types.d.ts.map +1 -0
  315. package/build-types/border-box-control/utils.d.ts +24 -0
  316. package/build-types/border-box-control/utils.d.ts.map +1 -0
  317. package/build-types/border-control/border-control/component.d.ts +4 -0
  318. package/build-types/border-control/border-control/component.d.ts.map +1 -0
  319. package/build-types/border-control/border-control/hook.d.ts +285 -0
  320. package/build-types/border-control/border-control/hook.d.ts.map +1 -0
  321. package/build-types/border-control/border-control/index.d.ts +3 -0
  322. package/build-types/border-control/border-control/index.d.ts.map +1 -0
  323. package/build-types/border-control/border-control-dropdown/component.d.ts +4 -0
  324. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -0
  325. package/build-types/border-control/border-control-dropdown/hook.d.ts +280 -0
  326. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -0
  327. package/build-types/border-control/border-control-dropdown/index.d.ts +2 -0
  328. package/build-types/border-control/border-control-dropdown/index.d.ts.map +1 -0
  329. package/build-types/border-control/border-control-style-picker/component.d.ts +4 -0
  330. package/build-types/border-control/border-control-style-picker/component.d.ts.map +1 -0
  331. package/build-types/border-control/border-control-style-picker/hook.d.ts +269 -0
  332. package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -0
  333. package/build-types/border-control/border-control-style-picker/index.d.ts +2 -0
  334. package/build-types/border-control/border-control-style-picker/index.d.ts.map +1 -0
  335. package/build-types/border-control/index.d.ts +3 -0
  336. package/build-types/border-control/index.d.ts.map +1 -0
  337. package/build-types/border-control/styles.d.ts +18 -0
  338. package/build-types/border-control/styles.d.ts.map +1 -0
  339. package/build-types/border-control/types.d.ts +163 -0
  340. package/build-types/border-control/types.d.ts.map +1 -0
  341. package/build-types/card/card-divider/hook.d.ts +1 -1
  342. package/build-types/card/styles.d.ts.map +1 -1
  343. package/build-types/color-indicator/index.d.ts +7 -0
  344. package/build-types/color-indicator/index.d.ts.map +1 -0
  345. package/build-types/color-palette/index.d.ts.map +1 -1
  346. package/build-types/color-picker/styles.d.ts +1 -1
  347. package/build-types/divider/stories/index.d.ts +1 -0
  348. package/build-types/divider/stories/index.d.ts.map +1 -1
  349. package/build-types/divider/styles.d.ts.map +1 -1
  350. package/build-types/divider/types.d.ts +8 -1
  351. package/build-types/divider/types.d.ts.map +1 -1
  352. package/build-types/input-control/input-field.d.ts.map +1 -1
  353. package/build-types/input-control/reducer/actions.d.ts +1 -3
  354. package/build-types/input-control/reducer/actions.d.ts.map +1 -1
  355. package/build-types/input-control/reducer/reducer.d.ts +3 -9
  356. package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
  357. package/build-types/input-control/stories/index.d.ts +17 -0
  358. package/build-types/input-control/stories/index.d.ts.map +1 -0
  359. package/build-types/input-control/types.d.ts +2 -2
  360. package/build-types/input-control/types.d.ts.map +1 -1
  361. package/build-types/item-group/styles.d.ts.map +1 -1
  362. package/build-types/number-control/index.d.ts +3 -3
  363. package/build-types/number-control/index.d.ts.map +1 -1
  364. package/build-types/range-control/styles/range-control-styles.d.ts +1 -1
  365. package/build-types/resizable-box/resize-tooltip/styles/resize-tooltip.styles.d.ts.map +1 -1
  366. package/build-types/spinner/styles/spinner-styles.d.ts +5 -0
  367. package/build-types/spinner/styles/spinner-styles.d.ts.map +1 -0
  368. package/build-types/toggle-group-control/index.d.ts +1 -0
  369. package/build-types/toggle-group-control/index.d.ts.map +1 -1
  370. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  371. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +5 -0
  372. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  373. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts +9 -0
  374. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -0
  375. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -2
  376. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
  377. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts +0 -4
  378. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts.map +1 -1
  379. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +25 -0
  380. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -0
  381. package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts +2 -0
  382. package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts.map +1 -0
  383. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +15 -0
  384. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -0
  385. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +37 -0
  386. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -0
  387. package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts +2 -0
  388. package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts.map +1 -0
  389. package/build-types/toggle-group-control/types.d.ts +24 -8
  390. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  391. package/build-types/ui/form-group/form-group.d.ts +2 -2
  392. package/build-types/unit-control/index.d.ts +12 -5
  393. package/build-types/unit-control/index.d.ts.map +1 -1
  394. package/build-types/unit-control/stories/index.d.ts +33 -0
  395. package/build-types/unit-control/stories/index.d.ts.map +1 -0
  396. package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -1
  397. package/build-types/unit-control/types.d.ts +28 -7
  398. package/build-types/unit-control/types.d.ts.map +1 -1
  399. package/build-types/unit-control/unit-select-control.d.ts.map +1 -1
  400. package/build-types/utils/colors-values.d.ts +78 -18
  401. package/build-types/utils/colors-values.d.ts.map +1 -1
  402. package/build-types/utils/config-values.d.ts +71 -71
  403. package/build-types/utils/config-values.d.ts.map +1 -1
  404. package/package.json +17 -17
  405. package/src/animate/README.md +1 -1
  406. package/src/base-control/README.md +20 -12
  407. package/src/base-control/index.tsx +124 -0
  408. package/src/base-control/stories/index.tsx +80 -0
  409. package/src/base-control/styles/{base-control-styles.js → base-control-styles.ts} +23 -1
  410. package/src/base-control/types.ts +42 -0
  411. package/src/border-box-control/border-box-control/README.md +178 -0
  412. package/src/border-box-control/border-box-control/component.tsx +123 -0
  413. package/src/border-box-control/border-box-control/hook.ts +119 -0
  414. package/src/border-box-control/border-box-control/index.ts +2 -0
  415. package/src/border-box-control/border-box-control-linked-button/component.tsx +50 -0
  416. package/src/border-box-control/border-box-control-linked-button/hook.ts +30 -0
  417. package/src/border-box-control/border-box-control-linked-button/index.ts +1 -0
  418. package/src/border-box-control/border-box-control-split-controls/component.tsx +90 -0
  419. package/src/border-box-control/border-box-control-split-controls/hook.ts +34 -0
  420. package/src/border-box-control/border-box-control-split-controls/index.ts +1 -0
  421. package/src/border-box-control/border-box-control-visualizer/component.tsx +28 -0
  422. package/src/border-box-control/border-box-control-visualizer/hook.ts +30 -0
  423. package/src/border-box-control/border-box-control-visualizer/index.ts +1 -0
  424. package/src/border-box-control/index.ts +3 -0
  425. package/src/border-box-control/stories/index.js +104 -0
  426. package/src/border-box-control/styles.ts +69 -0
  427. package/src/border-box-control/test/index.js +354 -0
  428. package/src/border-box-control/test/utils.js +305 -0
  429. package/src/border-box-control/types.ts +98 -0
  430. package/src/border-box-control/utils.ts +151 -0
  431. package/src/border-control/border-control/README.md +181 -0
  432. package/src/border-control/border-control/component.tsx +112 -0
  433. package/src/border-control/border-control/hook.ts +145 -0
  434. package/src/border-control/border-control/index.ts +2 -0
  435. package/src/border-control/border-control-dropdown/component.tsx +252 -0
  436. package/src/border-control/border-control-dropdown/hook.ts +98 -0
  437. package/src/border-control/border-control-dropdown/index.ts +1 -0
  438. package/src/border-control/border-control-style-picker/component.tsx +89 -0
  439. package/src/border-control/border-control-style-picker/hook.ts +34 -0
  440. package/src/border-control/border-control-style-picker/index.ts +1 -0
  441. package/src/border-control/index.ts +2 -0
  442. package/src/border-control/stories/index.js +118 -0
  443. package/src/border-control/styles.ts +190 -0
  444. package/src/border-control/test/index.js +436 -0
  445. package/src/border-control/types.ts +173 -0
  446. package/src/box-control/all-input-control.js +2 -10
  447. package/src/box-control/axial-input-controls.js +32 -21
  448. package/src/box-control/input-controls.js +30 -19
  449. package/src/box-control/utils.js +29 -12
  450. package/src/card/styles.js +11 -5
  451. package/src/card/test/__snapshots__/index.js.snap +83 -66
  452. package/src/card/test/index.js +7 -5
  453. package/src/checkbox-control/index.js +34 -3
  454. package/src/checkbox-control/stories/index.js +44 -0
  455. package/src/checkbox-control/style.scss +4 -2
  456. package/src/color-palette/README.md +6 -0
  457. package/src/color-palette/index.js +73 -8
  458. package/src/color-palette/stories/index.js +69 -26
  459. package/src/color-palette/style.scss +11 -3
  460. package/src/color-palette/test/__snapshots__/index.js.snap +662 -12
  461. package/src/color-palette/test/index.js +1 -1
  462. package/src/custom-select-control/index.js +15 -3
  463. package/src/custom-select-control/stories/index.js +77 -74
  464. package/src/custom-select-control/style.scss +23 -4
  465. package/src/disabled/README.md +7 -10
  466. package/src/divider/stories/index.tsx +26 -23
  467. package/src/divider/styles.ts +9 -0
  468. package/src/divider/types.ts +11 -1
  469. package/src/flyout/test/__snapshots__/index.js.snap +7 -7
  470. package/src/focal-point-picker/controls.js +2 -3
  471. package/src/font-size-picker/test/index.js +0 -2
  472. package/src/form-file-upload/README.md +18 -0
  473. package/src/form-file-upload/index.js +3 -0
  474. package/src/form-file-upload/test/index.js +73 -11
  475. package/src/form-toggle/README.md +1 -1
  476. package/src/guide/index.js +12 -13
  477. package/src/guide/style.scss +0 -4
  478. package/src/index.js +8 -0
  479. package/src/input-control/input-field.tsx +23 -12
  480. package/src/input-control/reducer/actions.ts +1 -7
  481. package/src/input-control/reducer/reducer.ts +0 -29
  482. package/src/input-control/types.ts +2 -1
  483. package/src/item-group/styles.ts +1 -0
  484. package/src/item-group/test/__snapshots__/index.js.snap +11 -10
  485. package/src/mobile/picker/index.android.js +0 -1
  486. package/src/number-control/README.md +14 -0
  487. package/src/number-control/index.js +13 -12
  488. package/src/number-control/stories/index.js +14 -7
  489. package/src/number-control/test/index.js +79 -1
  490. package/src/range-control/stories/index.js +91 -119
  491. package/src/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +1 -0
  492. package/src/surface/styles.js +1 -1
  493. package/src/surface/test/__snapshots__/index.js.snap +11 -11
  494. package/src/toggle-group-control/index.ts +1 -0
  495. package/src/toggle-group-control/stories/index.js +37 -7
  496. package/src/toggle-group-control/test/__snapshots__/index.js.snap +269 -32
  497. package/src/toggle-group-control/test/index.js +43 -10
  498. package/src/toggle-group-control/toggle-group-control/component.tsx +10 -0
  499. package/src/toggle-group-control/toggle-group-control/styles.ts +14 -0
  500. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +86 -0
  501. package/src/toggle-group-control/toggle-group-control-option/README.md +8 -5
  502. package/src/toggle-group-control/toggle-group-control-option/component.tsx +18 -97
  503. package/src/toggle-group-control/toggle-group-control-option-base/README.md +27 -0
  504. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +129 -0
  505. package/src/toggle-group-control/toggle-group-control-option-base/index.ts +1 -0
  506. package/src/toggle-group-control/{toggle-group-control-option → toggle-group-control-option-base}/styles.ts +4 -13
  507. package/src/toggle-group-control/toggle-group-control-option-icon/README.md +56 -0
  508. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +56 -0
  509. package/src/toggle-group-control/toggle-group-control-option-icon/index.ts +1 -0
  510. package/src/toggle-group-control/types.ts +33 -8
  511. package/src/toolbar-dropdown-menu/index.js +1 -1
  512. package/src/toolbar-group/style.scss +0 -73
  513. package/src/tools-panel/test/__snapshots__/index.js.snap +8 -8
  514. package/src/tree-grid/README.md +1 -1
  515. package/src/tree-grid/index.js +4 -0
  516. package/src/tree-grid/test/index.js +61 -17
  517. package/src/unit-control/README.md +7 -3
  518. package/src/unit-control/index.tsx +65 -31
  519. package/src/unit-control/stories/index.tsx +170 -0
  520. package/src/unit-control/test/index.js +263 -100
  521. package/src/unit-control/types.ts +65 -42
  522. package/src/unit-control/unit-select-control.tsx +2 -3
  523. package/src/utils/colors-values.js +4 -3
  524. package/src/utils/config-values.js +9 -4
  525. package/tsconfig.json +3 -0
  526. package/tsconfig.tsbuildinfo +1 -1
  527. package/build/guide/finish-button.js +0 -44
  528. package/build/guide/finish-button.js.map +0 -1
  529. package/build/toggle-group-control/toggle-group-control-option/styles.js +0 -73
  530. package/build/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
  531. package/build-module/guide/finish-button.js +0 -34
  532. package/build-module/guide/finish-button.js.map +0 -1
  533. package/build-module/toggle-group-control/toggle-group-control-option/styles.js +0 -61
  534. package/build-module/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
  535. package/src/base-control/index.js +0 -111
  536. package/src/base-control/stories/index.js +0 -81
  537. package/src/guide/finish-button.js +0 -26
  538. package/src/guide/test/finish-button.js +0 -49
  539. package/src/unit-control/stories/index.js +0 -127
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, fireEvent, screen } from '@testing-library/react';
4
+ import { render as RTLrender, screen, waitFor } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
5
6
 
6
7
  /**
7
8
  * WordPress dependencies
8
9
  */
9
- import { UP, DOWN, ENTER, ESCAPE } from '@wordpress/keycodes';
10
10
  import { useState } from '@wordpress/element';
11
11
 
12
12
  /**
@@ -15,6 +15,16 @@ import { useState } from '@wordpress/element';
15
15
  import UnitControl from '../';
16
16
  import { parseQuantityAndUnitFromRawValue } from '../utils';
17
17
 
18
+ function render( jsx ) {
19
+ return {
20
+ user: userEvent.setup( {
21
+ // Avoids timeout errors (https://github.com/testing-library/user-event/issues/565#issuecomment-1064579531).
22
+ delay: null,
23
+ } ),
24
+ ...RTLrender( jsx ),
25
+ };
26
+ }
27
+
18
28
  const getComponent = () =>
19
29
  document.body.querySelector( '.components-unit-control' );
20
30
  const getInput = () =>
@@ -24,9 +34,6 @@ const getSelect = () =>
24
34
  const getUnitLabel = () =>
25
35
  document.body.querySelector( '.components-unit-control__unit-label' );
26
36
 
27
- const fireKeyDown = ( data ) =>
28
- fireEvent.keyDown( document.activeElement || document.body, data );
29
-
30
37
  const ControlledSyncUnits = () => {
31
38
  const [ state, setState ] = useState( { valueA: '', valueB: '' } );
32
39
 
@@ -93,7 +100,7 @@ describe( 'UnitControl', () => {
93
100
  } );
94
101
 
95
102
  it( 'should not render select, if units are disabled', () => {
96
- render( <UnitControl unit="em" units={ [] } /> );
103
+ render( <UnitControl value="3em" units={ [] } /> );
97
104
  const input = getInput();
98
105
  const select = getSelect();
99
106
 
@@ -113,73 +120,87 @@ describe( 'UnitControl', () => {
113
120
  } );
114
121
 
115
122
  describe( 'Value', () => {
116
- it( 'should update value on change', () => {
123
+ it( 'should update value on change', async () => {
117
124
  let state = '50px';
118
125
  const setState = jest.fn( ( value ) => ( state = value ) );
119
126
 
120
- render( <UnitControl value={ state } onChange={ setState } /> );
127
+ const { user } = render(
128
+ <UnitControl value={ state } onChange={ setState } />
129
+ );
121
130
 
122
131
  const input = getInput();
123
- input.focus();
124
- fireEvent.change( input, { target: { value: 62 } } );
125
-
126
- expect( setState ).toHaveBeenCalledTimes( 1 );
132
+ await user.clear( input );
133
+ await user.type( input, '62' );
134
+
135
+ // 3 times:
136
+ // - 1: clear
137
+ // - 2: type '6'
138
+ // - 3: type '62'
139
+ expect( setState ).toHaveBeenCalledTimes( 3 );
127
140
  expect( state ).toBe( '62px' );
128
141
  } );
129
142
 
130
- it( 'should increment value on UP press', () => {
143
+ it( 'should increment value on UP press', async () => {
131
144
  let state = '50px';
132
145
  const setState = ( nextState ) => ( state = nextState );
133
146
 
134
- render( <UnitControl value={ state } onChange={ setState } /> );
147
+ const { user } = render(
148
+ <UnitControl value={ state } onChange={ setState } />
149
+ );
135
150
 
136
- getInput().focus();
137
- fireKeyDown( { keyCode: UP } );
151
+ const input = getInput();
152
+ await user.type( input, '{ArrowUp}' );
138
153
 
139
154
  expect( state ).toBe( '51px' );
140
155
  } );
141
156
 
142
- it( 'should increment value on UP + SHIFT press, with step', () => {
157
+ it( 'should increment value on UP + SHIFT press, with step', async () => {
143
158
  let state = '50px';
144
159
  const setState = ( nextState ) => ( state = nextState );
145
160
 
146
- render( <UnitControl value={ state } onChange={ setState } /> );
161
+ const { user } = render(
162
+ <UnitControl value={ state } onChange={ setState } />
163
+ );
147
164
 
148
- getInput().focus();
149
- fireKeyDown( { keyCode: UP, shiftKey: true } );
165
+ const input = getInput();
166
+ await user.type( input, '{Shift>}{ArrowUp}{/Shift}' );
150
167
 
151
168
  expect( state ).toBe( '60px' );
152
169
  } );
153
170
 
154
- it( 'should decrement value on DOWN press', () => {
171
+ it( 'should decrement value on DOWN press', async () => {
155
172
  let state = 50;
156
173
  const setState = ( nextState ) => ( state = nextState );
157
174
 
158
- render( <UnitControl value={ state } onChange={ setState } /> );
175
+ const { user } = render(
176
+ <UnitControl value={ state } onChange={ setState } />
177
+ );
159
178
 
160
- getInput().focus();
161
- fireKeyDown( { keyCode: DOWN } );
179
+ const input = getInput();
180
+ await user.type( input, '{ArrowDown}' );
162
181
 
163
182
  expect( state ).toBe( '49px' );
164
183
  } );
165
184
 
166
- it( 'should decrement value on DOWN + SHIFT press, with step', () => {
185
+ it( 'should decrement value on DOWN + SHIFT press, with step', async () => {
167
186
  let state = 50;
168
187
  const setState = ( nextState ) => ( state = nextState );
169
188
 
170
- render( <UnitControl value={ state } onChange={ setState } /> );
189
+ const { user } = render(
190
+ <UnitControl value={ state } onChange={ setState } />
191
+ );
171
192
 
172
- getInput().focus();
173
- fireKeyDown( { keyCode: DOWN, shiftKey: true } );
193
+ const input = getInput();
194
+ await user.type( input, '{Shift>}{ArrowDown}{/Shift}' );
174
195
 
175
196
  expect( state ).toBe( '40px' );
176
197
  } );
177
198
 
178
- it( 'should cancel change when ESCAPE key is pressed', () => {
199
+ it( 'should cancel change when ESCAPE key is pressed', async () => {
179
200
  let state = 50;
180
201
  const setState = ( nextState ) => ( state = nextState );
181
202
 
182
- render(
203
+ const { user } = render(
183
204
  <UnitControl
184
205
  value={ state }
185
206
  onChange={ setState }
@@ -188,32 +209,124 @@ describe( 'UnitControl', () => {
188
209
  );
189
210
 
190
211
  const input = getInput();
191
- input.focus();
192
-
193
- fireEvent.change( input, { target: { value: '300px' } } );
212
+ await user.clear( input );
213
+ await user.type( input, '300px' );
194
214
 
195
215
  expect( input.value ).toBe( '300px' );
196
216
  expect( state ).toBe( 50 );
197
217
 
198
- fireKeyDown( { keyCode: ESCAPE } );
218
+ user.keyboard( '{Escape}' );
199
219
 
200
220
  expect( input.value ).toBe( '50' );
201
221
  expect( state ).toBe( 50 );
202
222
  } );
223
+
224
+ it( 'should run onBlur callback when quantity input is blurred', async () => {
225
+ let state = '33%';
226
+ const onChangeSpy = jest.fn();
227
+ const onBlurSpy = jest.fn();
228
+ const setState = ( nextState ) => {
229
+ onChangeSpy( nextState );
230
+ state = nextState;
231
+ };
232
+
233
+ const { user } = render(
234
+ <>
235
+ <button>Click me</button>
236
+ <UnitControl
237
+ value={ state }
238
+ onChange={ setState }
239
+ onBlur={ onBlurSpy }
240
+ />
241
+ </>
242
+ );
243
+
244
+ const input = getInput();
245
+ await user.clear( input );
246
+ await user.type( input, '41' );
247
+
248
+ await waitFor( () =>
249
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 3 )
250
+ );
251
+ expect( onChangeSpy ).toHaveBeenLastCalledWith( '41%' );
252
+
253
+ // Clicking on the button should cause the `onBlur` callback to fire.
254
+ const button = screen.getByRole( 'button' );
255
+ await user.click( button );
256
+
257
+ await waitFor( () =>
258
+ expect( onBlurSpy ).toHaveBeenCalledTimes( 1 )
259
+ );
260
+ } );
261
+
262
+ it( 'should invoke onChange and onUnitChange callbacks when isPressEnterToChange is true and the component is blurred with an uncommitted value', async () => {
263
+ let state = '15px';
264
+
265
+ const onUnitChangeSpy = jest.fn();
266
+ const onChangeSpy = jest.fn();
267
+
268
+ const setState = ( nextState ) => {
269
+ onChangeSpy( nextState );
270
+ state = nextState;
271
+ };
272
+
273
+ const { user } = render(
274
+ <>
275
+ <button>Click me</button>
276
+ <UnitControl
277
+ value={ state }
278
+ onChange={ setState }
279
+ onUnitChange={ onUnitChangeSpy }
280
+ isPressEnterToChange
281
+ />
282
+ </>
283
+ );
284
+
285
+ const input = getInput();
286
+ await user.clear( input );
287
+ await user.type( input, '41vh' );
288
+
289
+ // This is because `isPressEnterToChange` is `true`
290
+ expect( onChangeSpy ).not.toHaveBeenCalled();
291
+
292
+ // Clicking on the button should cause the `onBlur` callback to fire.
293
+ const button = screen.getByRole( 'button' );
294
+ await user.click( button );
295
+
296
+ await waitFor( () =>
297
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 1 )
298
+ );
299
+
300
+ expect( onChangeSpy ).toHaveBeenLastCalledWith( '41vh' );
301
+
302
+ expect( onUnitChangeSpy ).toHaveBeenCalledTimes( 1 );
303
+ expect( onUnitChangeSpy ).toHaveBeenLastCalledWith(
304
+ 'vh',
305
+ expect.anything()
306
+ );
307
+ } );
203
308
  } );
204
309
 
205
310
  describe( 'Unit', () => {
206
- it( 'should update unit value on change', () => {
207
- let state = 'px';
311
+ it( 'should update unit value on change', async () => {
312
+ let state = '14rem';
208
313
  const setState = ( nextState ) => ( state = nextState );
209
314
 
210
- render( <UnitControl unit={ state } onUnitChange={ setState } /> );
315
+ const spy = jest.fn();
316
+
317
+ const { user } = render(
318
+ <UnitControl
319
+ value={ state }
320
+ onChange={ setState }
321
+ onUnitChange={ spy }
322
+ />
323
+ );
211
324
 
212
325
  const select = getSelect();
213
- select.focus();
214
- fireEvent.change( select, { target: { value: 'em' } } );
326
+ await user.selectOptions( select, [ 'px' ] );
215
327
 
216
- expect( state ).toBe( 'em' );
328
+ expect( spy ).toHaveBeenCalledWith( 'px', expect.anything() );
329
+ expect( state ).toBe( '14px' );
217
330
  } );
218
331
 
219
332
  it( 'should render customized units, if defined', () => {
@@ -235,7 +348,7 @@ describe( 'UnitControl', () => {
235
348
  expect( vmax.value ).toBe( 'vmax' );
236
349
  } );
237
350
 
238
- it( 'should reset value on unit change, if unit has default value', () => {
351
+ it( 'should reset value on unit change, if unit has default value', async () => {
239
352
  let state = 50;
240
353
  const setState = ( nextState ) => ( state = nextState );
241
354
 
@@ -244,7 +357,7 @@ describe( 'UnitControl', () => {
244
357
  { value: 'vmax', label: 'vmax', default: 75 },
245
358
  ];
246
359
 
247
- render(
360
+ const { user } = render(
248
361
  <UnitControl
249
362
  isResetValueOnUnitChange
250
363
  units={ units }
@@ -254,18 +367,16 @@ describe( 'UnitControl', () => {
254
367
  );
255
368
 
256
369
  const select = getSelect();
257
- select.focus();
258
-
259
- fireEvent.change( select, { target: { value: 'vmax' } } );
370
+ await user.selectOptions( select, [ 'vmax' ] );
260
371
 
261
372
  expect( state ).toBe( '75vmax' );
262
373
 
263
- fireEvent.change( select, { target: { value: 'pt' } } );
374
+ await user.selectOptions( select, [ 'pt' ] );
264
375
 
265
376
  expect( state ).toBe( '25pt' );
266
377
  } );
267
378
 
268
- it( 'should not reset value on unit change, if disabled', () => {
379
+ it( 'should not reset value on unit change, if disabled', async () => {
269
380
  let state = 50;
270
381
  const setState = ( nextState ) => ( state = nextState );
271
382
 
@@ -274,7 +385,7 @@ describe( 'UnitControl', () => {
274
385
  { value: 'vmax', label: 'vmax', default: 75 },
275
386
  ];
276
387
 
277
- render(
388
+ const { user } = render(
278
389
  <UnitControl
279
390
  isResetValueOnUnitChange={ false }
280
391
  value={ state }
@@ -284,69 +395,123 @@ describe( 'UnitControl', () => {
284
395
  );
285
396
 
286
397
  const select = getSelect();
287
- select.focus();
288
-
289
- fireEvent.change( select, { target: { value: 'vmax' } } );
398
+ await user.selectOptions( select, [ 'vmax' ] );
290
399
 
291
400
  expect( state ).toBe( '50vmax' );
292
401
 
293
- fireEvent.change( select, { target: { value: 'pt' } } );
402
+ await user.selectOptions( select, [ 'pt' ] );
294
403
 
295
404
  expect( state ).toBe( '50pt' );
296
405
  } );
297
406
 
298
- it( 'should set correct unit if single units', () => {
407
+ it( 'should set correct unit if single units', async () => {
299
408
  let state = '50%';
300
409
  const setState = ( value ) => ( state = value );
301
410
 
302
- render(
411
+ const { user } = render(
303
412
  <UnitControl
304
413
  value={ state }
305
- unit="%"
306
414
  units={ [ { value: '%', label: '%' } ] }
307
415
  onChange={ setState }
308
416
  />
309
417
  );
310
418
 
311
419
  const input = getInput();
312
- input.focus();
313
- fireEvent.change( input, { target: { value: 62 } } );
420
+ await user.clear( input );
421
+ await user.type( input, '62' );
314
422
 
315
- expect( state ).toBe( '62%' );
423
+ await waitFor( () => expect( state ).toBe( '62%' ) );
316
424
  } );
317
425
 
318
- it( 'should update unit value when a new raw value is passed', () => {
319
- render( <ControlledSyncUnits /> );
426
+ it( 'should update unit value when a new raw value is passed', async () => {
427
+ const { user } = render( <ControlledSyncUnits /> );
320
428
 
321
429
  const [ inputA, inputB ] = screen.getAllByRole( 'spinbutton' );
322
430
  const [ selectA, selectB ] = screen.getAllByRole( 'combobox' );
323
431
 
324
- inputA.focus();
325
- fireEvent.change( inputA, { target: { value: '55' } } );
432
+ const [ remOptionA ] = screen.getAllByRole( 'option', {
433
+ name: 'rem',
434
+ } );
435
+ const [ , vwOptionB ] = screen.getAllByRole( 'option', {
436
+ name: 'vw',
437
+ } );
438
+
439
+ await user.type( inputA, '55' );
326
440
 
327
- inputB.focus();
328
- fireEvent.change( inputB, { target: { value: '14' } } );
441
+ await user.type( inputB, '14' );
329
442
 
330
- selectA.focus();
331
- fireEvent.change( selectA, { target: { value: 'rem' } } );
443
+ await user.selectOptions( selectA, remOptionA );
332
444
 
445
+ await waitFor( () => expect( selectB ).toHaveValue( 'rem' ) );
333
446
  expect( selectA ).toHaveValue( 'rem' );
334
- expect( selectB ).toHaveValue( 'rem' );
335
447
 
336
- selectB.focus();
337
- fireEvent.change( selectB, { target: { value: 'vw' } } );
448
+ await user.selectOptions( selectB, vwOptionB );
338
449
 
339
- expect( selectA ).toHaveValue( 'vw' );
450
+ await waitFor( () => expect( selectA ).toHaveValue( 'vw' ) );
340
451
  expect( selectB ).toHaveValue( 'vw' );
341
452
  } );
453
+
454
+ it( 'should maintain the chosen non-default unit when value is cleared', async () => {
455
+ const units = [
456
+ { value: 'pt', label: 'pt' },
457
+ { value: 'vmax', label: 'vmax' },
458
+ ];
459
+
460
+ const { user } = render(
461
+ <UnitControl units={ units } value="5" />
462
+ );
463
+
464
+ const select = getSelect();
465
+ await user.selectOptions( select, [ 'vmax' ] );
466
+
467
+ const input = getInput();
468
+ await user.clear( input );
469
+
470
+ expect( select ).toHaveValue( 'vmax' );
471
+ } );
472
+
473
+ it( 'should run onBlur callback when the unit select is blurred', async () => {
474
+ const onUnitChangeSpy = jest.fn();
475
+ const onBlurSpy = jest.fn();
476
+
477
+ const { user } = render(
478
+ <>
479
+ <button>Click me</button>
480
+ <UnitControl
481
+ value="15px"
482
+ onUnitChange={ onUnitChangeSpy }
483
+ onBlur={ onBlurSpy }
484
+ />
485
+ </>
486
+ );
487
+
488
+ const select = getSelect();
489
+ await user.selectOptions( select, [ 'em' ] );
490
+
491
+ await waitFor( () =>
492
+ expect( onUnitChangeSpy ).toHaveBeenCalledTimes( 1 )
493
+ );
494
+ expect( onUnitChangeSpy ).toHaveBeenLastCalledWith(
495
+ 'em',
496
+ expect.anything()
497
+ );
498
+
499
+ // Clicking on the button should cause the `onBlur` callback to fire.
500
+ const button = screen.getByRole( 'button' );
501
+ await user.click( button );
502
+
503
+ await waitFor( () =>
504
+ expect( onBlurSpy ).toHaveBeenCalledTimes( 1 )
505
+ );
506
+ } );
342
507
  } );
343
508
 
344
509
  describe( 'Unit Parser', () => {
345
510
  let state = '10px';
346
511
  const setState = jest.fn( ( nextState ) => ( state = nextState ) );
347
512
 
348
- it( 'should parse unit from input', () => {
349
- render(
513
+ it( 'should parse unit from input', async () => {
514
+ const { user } = render(
350
515
  <UnitControl
351
516
  value={ state }
352
517
  onChange={ setState }
@@ -355,15 +520,15 @@ describe( 'UnitControl', () => {
355
520
  );
356
521
 
357
522
  const input = getInput();
358
- input.focus();
359
- fireEvent.change( input, { target: { value: '55 em' } } );
360
- fireKeyDown( { keyCode: ENTER } );
523
+ await user.clear( input );
524
+ await user.type( input, '55 em' );
525
+ user.keyboard( '{Enter}' );
361
526
 
362
527
  expect( state ).toBe( '55em' );
363
528
  } );
364
529
 
365
- it( 'should parse PX unit from input', () => {
366
- render(
530
+ it( 'should parse PX unit from input', async () => {
531
+ const { user } = render(
367
532
  <UnitControl
368
533
  value={ state }
369
534
  onChange={ setState }
@@ -372,15 +537,15 @@ describe( 'UnitControl', () => {
372
537
  );
373
538
 
374
539
  const input = getInput();
375
- input.focus();
376
- fireEvent.change( input, { target: { value: '61 PX' } } );
377
- fireKeyDown( { keyCode: ENTER } );
540
+ await user.clear( input );
541
+ await user.type( input, '61 PX' );
542
+ user.keyboard( '{Enter}' );
378
543
 
379
544
  expect( state ).toBe( '61px' );
380
545
  } );
381
546
 
382
- it( 'should parse EM unit from input', () => {
383
- render(
547
+ it( 'should parse EM unit from input', async () => {
548
+ const { user } = render(
384
549
  <UnitControl
385
550
  value={ state }
386
551
  onChange={ setState }
@@ -389,15 +554,15 @@ describe( 'UnitControl', () => {
389
554
  );
390
555
 
391
556
  const input = getInput();
392
- input.focus();
393
- fireEvent.change( input, { target: { value: '55 em' } } );
394
- fireKeyDown( { keyCode: ENTER } );
557
+ await user.clear( input );
558
+ await user.type( input, '55 em' );
559
+ user.keyboard( '{Enter}' );
395
560
 
396
561
  expect( state ).toBe( '55em' );
397
562
  } );
398
563
 
399
- it( 'should parse % unit from input', () => {
400
- render(
564
+ it( 'should parse % unit from input', async () => {
565
+ const { user } = render(
401
566
  <UnitControl
402
567
  value={ state }
403
568
  onChange={ setState }
@@ -406,15 +571,15 @@ describe( 'UnitControl', () => {
406
571
  );
407
572
 
408
573
  const input = getInput();
409
- input.focus();
410
- fireEvent.change( input, { target: { value: '-10 %' } } );
411
- fireKeyDown( { keyCode: ENTER } );
574
+ await user.clear( input );
575
+ await user.type( input, '-10 %' );
576
+ user.keyboard( '{Enter}' );
412
577
 
413
578
  expect( state ).toBe( '-10%' );
414
579
  } );
415
580
 
416
- it( 'should parse REM unit from input', () => {
417
- render(
581
+ it( 'should parse REM unit from input', async () => {
582
+ const { user } = render(
418
583
  <UnitControl
419
584
  value={ state }
420
585
  onChange={ setState }
@@ -423,25 +588,23 @@ describe( 'UnitControl', () => {
423
588
  );
424
589
 
425
590
  const input = getInput();
426
- input.focus();
427
- fireEvent.change( input, {
428
- target: { value: '123 rEm ' },
429
- } );
430
- fireKeyDown( { keyCode: ENTER } );
591
+ await user.clear( input );
592
+ await user.type( input, '123 rEm ' );
593
+ user.keyboard( '{Enter}' );
431
594
 
432
595
  expect( state ).toBe( '123rem' );
433
596
  } );
434
597
 
435
- it( 'should update unit after initial render and with new unit prop', () => {
598
+ it( 'should update unit after initial render and with new unit prop', async () => {
436
599
  const { rerender } = render( <UnitControl value={ '10%' } /> );
437
600
 
438
601
  const select = getSelect();
439
602
 
440
603
  expect( select.value ).toBe( '%' );
441
604
 
442
- rerender( <UnitControl value={ '20' } unit="em" /> );
605
+ rerender( <UnitControl value={ '20vh' } /> );
443
606
 
444
- expect( select.value ).toBe( 'em' );
607
+ await waitFor( () => expect( select.value ).toBe( 'vh' ) );
445
608
  } );
446
609
 
447
610
  it( 'should fallback to default unit if parsed unit is invalid', () => {