@wordpress/components 19.8.4 → 19.11.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 (630) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/CONTRIBUTING.md +80 -7
  3. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +11 -11
  4. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  5. package/build/border-box-control/border-box-control/component.js +22 -7
  6. package/build/border-box-control/border-box-control/component.js.map +1 -1
  7. package/build/border-box-control/border-box-control-linked-button/hook.js +3 -2
  8. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  9. package/build/border-box-control/border-box-control-split-controls/component.js +21 -8
  10. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  11. package/build/border-box-control/border-box-control-visualizer/hook.js +3 -2
  12. package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
  13. package/build/border-box-control/styles.js +11 -15
  14. package/build/border-box-control/styles.js.map +1 -1
  15. package/build/border-control/border-control/component.js +5 -3
  16. package/build/border-control/border-control/component.js.map +1 -1
  17. package/build/border-control/border-control/hook.js +6 -3
  18. package/build/border-control/border-control/hook.js.map +1 -1
  19. package/build/border-control/border-control-dropdown/component.js +6 -2
  20. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  21. package/build/border-control/border-control-dropdown/hook.js +5 -5
  22. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  23. package/build/border-control/styles.js +58 -29
  24. package/build/border-control/styles.js.map +1 -1
  25. package/build/box-control/index.js +0 -21
  26. package/build/box-control/index.js.map +1 -1
  27. package/build/box-control/utils.js +1 -8
  28. package/build/box-control/utils.js.map +1 -1
  29. package/build/button/index.js +3 -5
  30. package/build/button/index.js.map +1 -1
  31. package/build/button/index.native.js +16 -2
  32. package/build/button/index.native.js.map +1 -1
  33. package/build/button-group/index.js +24 -7
  34. package/build/button-group/index.js.map +1 -1
  35. package/build/{flyout → button-group}/types.js +0 -0
  36. package/build/button-group/types.js.map +1 -0
  37. package/build/checkbox-control/index.js +34 -7
  38. package/build/checkbox-control/index.js.map +1 -1
  39. package/build/checkbox-control/types.js +6 -0
  40. package/build/checkbox-control/types.js.map +1 -0
  41. package/build/circular-option-picker/index.js +1 -2
  42. package/build/circular-option-picker/index.js.map +1 -1
  43. package/build/color-palette/index.js +5 -12
  44. package/build/color-palette/index.js.map +1 -1
  45. package/build/date-time/date.js +43 -19
  46. package/build/date-time/date.js.map +1 -1
  47. package/build/date-time/index.js +28 -3
  48. package/build/date-time/index.js.map +1 -1
  49. package/build/date-time/time.js +42 -40
  50. package/build/date-time/time.js.map +1 -1
  51. package/build/date-time/timezone.js +4 -3
  52. package/build/date-time/timezone.js.map +1 -1
  53. package/build/date-time/types.js +6 -0
  54. package/build/date-time/types.js.map +1 -0
  55. package/build/date-time/utils.js +6 -4
  56. package/build/date-time/utils.js.map +1 -1
  57. package/build/disabled/index.js +4 -76
  58. package/build/disabled/index.js.map +1 -1
  59. package/build/draggable/index.native.js +223 -0
  60. package/build/draggable/index.native.js.map +1 -0
  61. package/build/dropdown/index.js +7 -5
  62. package/build/dropdown/index.js.map +1 -1
  63. package/build/focal-point-picker/index.native.js +3 -3
  64. package/build/focal-point-picker/index.native.js.map +1 -1
  65. package/build/heading/hook.js +1 -1
  66. package/build/heading/hook.js.map +1 -1
  67. package/build/index.js +0 -8
  68. package/build/index.js.map +1 -1
  69. package/build/index.native.js +16 -0
  70. package/build/index.native.js.map +1 -1
  71. package/build/input-control/index.js +27 -4
  72. package/build/input-control/index.js.map +1 -1
  73. package/build/input-control/styles/input-control-styles.js +42 -30
  74. package/build/input-control/styles/input-control-styles.js.map +1 -1
  75. package/build/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js +1 -1
  76. package/build/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js.map +1 -1
  77. package/build/mobile/bottom-sheet/index.native.js +1 -1
  78. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  79. package/build/mobile/bottom-sheet-select-control/index.native.js +4 -2
  80. package/build/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  81. package/build/mobile/html-text-input/index.native.js +19 -8
  82. package/build/mobile/html-text-input/index.native.js.map +1 -1
  83. package/build/mobile/keyboard-aware-flat-list/index.android.js +28 -5
  84. package/build/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  85. package/build/mobile/keyboard-aware-flat-list/index.ios.js +47 -24
  86. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  87. package/build/navigation/styles/navigation-styles.js +12 -12
  88. package/build/navigation/styles/navigation-styles.js.map +1 -1
  89. package/build/notice/index.native.js +44 -40
  90. package/build/notice/index.native.js.map +1 -1
  91. package/build/notice/list.native.js +27 -45
  92. package/build/notice/list.native.js.map +1 -1
  93. package/build/palette-edit/index.js +38 -7
  94. package/build/palette-edit/index.js.map +1 -1
  95. package/build/popover/index.js +223 -323
  96. package/build/popover/index.js.map +1 -1
  97. package/build/resizable-box/resize-tooltip/utils.js +5 -8
  98. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  99. package/build/sandbox/index.js +2 -2
  100. package/build/sandbox/index.js.map +1 -1
  101. package/build/sandbox/index.native.js +1 -1
  102. package/build/sandbox/index.native.js.map +1 -1
  103. package/build/select-control/index.js +31 -4
  104. package/build/select-control/index.js.map +1 -1
  105. package/build/select-control/styles/select-control-styles.js +17 -14
  106. package/build/select-control/styles/select-control-styles.js.map +1 -1
  107. package/build/surface/styles.js +8 -8
  108. package/build/surface/styles.js.map +1 -1
  109. package/build/text/hook.js +5 -5
  110. package/build/text/hook.js.map +1 -1
  111. package/build/text/styles/text-mixins.native.js +1 -1
  112. package/build/text/styles/text-mixins.native.js.map +1 -1
  113. package/build/text/styles.js +7 -7
  114. package/build/text/styles.js.map +1 -1
  115. package/build/text-control/index.js +35 -28
  116. package/build/text-control/index.js.map +1 -1
  117. package/build/text-control/types.js +6 -0
  118. package/build/text-control/types.js.map +1 -0
  119. package/build/toggle-group-control/toggle-group-control/component.js +1 -3
  120. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  121. package/build/toggle-group-control/toggle-group-control-option-icon/component.js +6 -4
  122. package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
  123. package/build/tools-panel/tools-panel-header/component.js +52 -36
  124. package/build/tools-panel/tools-panel-header/component.js.map +1 -1
  125. package/build/tooltip/index.js +2 -2
  126. package/build/tooltip/index.js.map +1 -1
  127. package/build/ui/spinner/component.js +1 -1
  128. package/build/ui/spinner/component.js.map +1 -1
  129. package/build/unit-control/index.js +3 -3
  130. package/build/unit-control/index.js.map +1 -1
  131. package/build/unit-control/styles/unit-control-styles.js +11 -20
  132. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  133. package/build/unit-control/utils.js.map +1 -1
  134. package/build/utils/colors-values.js +9 -24
  135. package/build/utils/colors-values.js.map +1 -1
  136. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +11 -11
  137. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  138. package/build-module/border-box-control/border-box-control/component.js +22 -7
  139. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  140. package/build-module/border-box-control/border-box-control-linked-button/hook.js +3 -2
  141. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  142. package/build-module/border-box-control/border-box-control-split-controls/component.js +21 -8
  143. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  144. package/build-module/border-box-control/border-box-control-visualizer/hook.js +3 -2
  145. package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
  146. package/build-module/border-box-control/styles.js +9 -15
  147. package/build-module/border-box-control/styles.js.map +1 -1
  148. package/build-module/border-control/border-control/component.js +5 -3
  149. package/build-module/border-control/border-control/component.js.map +1 -1
  150. package/build-module/border-control/border-control/hook.js +6 -3
  151. package/build-module/border-control/border-control/hook.js.map +1 -1
  152. package/build-module/border-control/border-control-dropdown/component.js +6 -2
  153. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  154. package/build-module/border-control/border-control-dropdown/hook.js +5 -5
  155. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  156. package/build-module/border-control/styles.js +56 -29
  157. package/build-module/border-control/styles.js.map +1 -1
  158. package/build-module/box-control/index.js +1 -20
  159. package/build-module/box-control/index.js.map +1 -1
  160. package/build-module/box-control/utils.js +0 -6
  161. package/build-module/box-control/utils.js.map +1 -1
  162. package/build-module/button/index.js +3 -4
  163. package/build-module/button/index.js.map +1 -1
  164. package/build-module/button/index.native.js +16 -3
  165. package/build-module/button/index.native.js.map +1 -1
  166. package/build-module/button-group/index.js +27 -7
  167. package/build-module/button-group/index.js.map +1 -1
  168. package/build-module/{flyout → button-group}/types.js +0 -0
  169. package/build-module/{flyout → button-group}/types.js.map +0 -0
  170. package/build-module/checkbox-control/index.js +31 -7
  171. package/build-module/checkbox-control/index.js.map +1 -1
  172. package/build-module/checkbox-control/types.js +2 -0
  173. package/{build/flyout → build-module/checkbox-control}/types.js.map +0 -0
  174. package/build-module/circular-option-picker/index.js +1 -2
  175. package/build-module/circular-option-picker/index.js.map +1 -1
  176. package/build-module/color-palette/index.js +5 -11
  177. package/build-module/color-palette/index.js.map +1 -1
  178. package/build-module/date-time/date.js +44 -19
  179. package/build-module/date-time/date.js.map +1 -1
  180. package/build-module/date-time/index.js +28 -4
  181. package/build-module/date-time/index.js.map +1 -1
  182. package/build-module/date-time/time.js +43 -41
  183. package/build-module/date-time/time.js.map +1 -1
  184. package/build-module/date-time/timezone.js +4 -3
  185. package/build-module/date-time/timezone.js.map +1 -1
  186. package/build-module/date-time/types.js +2 -0
  187. package/build-module/date-time/types.js.map +1 -0
  188. package/build-module/date-time/utils.js +6 -4
  189. package/build-module/date-time/utils.js.map +1 -1
  190. package/build-module/disabled/index.js +5 -76
  191. package/build-module/disabled/index.js.map +1 -1
  192. package/build-module/draggable/index.native.js +206 -0
  193. package/build-module/draggable/index.native.js.map +1 -0
  194. package/build-module/dropdown/index.js +7 -5
  195. package/build-module/dropdown/index.js.map +1 -1
  196. package/build-module/focal-point-picker/index.native.js +3 -3
  197. package/build-module/focal-point-picker/index.native.js.map +1 -1
  198. package/build-module/heading/hook.js +1 -1
  199. package/build-module/heading/hook.js.map +1 -1
  200. package/build-module/index.js +0 -1
  201. package/build-module/index.js.map +1 -1
  202. package/build-module/index.native.js +2 -1
  203. package/build-module/index.native.js.map +1 -1
  204. package/build-module/input-control/index.js +24 -3
  205. package/build-module/input-control/index.js.map +1 -1
  206. package/build-module/input-control/styles/input-control-styles.js +42 -30
  207. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  208. package/build-module/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js +1 -1
  209. package/build-module/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js.map +1 -1
  210. package/build-module/mobile/bottom-sheet/index.native.js +1 -1
  211. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  212. package/build-module/mobile/bottom-sheet-select-control/index.native.js +4 -2
  213. package/build-module/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  214. package/build-module/mobile/html-text-input/index.native.js +20 -9
  215. package/build-module/mobile/html-text-input/index.native.js.map +1 -1
  216. package/build-module/mobile/keyboard-aware-flat-list/index.android.js +21 -5
  217. package/build-module/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  218. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +42 -25
  219. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  220. package/build-module/navigation/styles/navigation-styles.js +13 -13
  221. package/build-module/navigation/styles/navigation-styles.js.map +1 -1
  222. package/build-module/notice/index.native.js +45 -41
  223. package/build-module/notice/index.native.js.map +1 -1
  224. package/build-module/notice/list.native.js +28 -46
  225. package/build-module/notice/list.native.js.map +1 -1
  226. package/build-module/palette-edit/index.js +37 -7
  227. package/build-module/palette-edit/index.js.map +1 -1
  228. package/build-module/popover/index.js +225 -325
  229. package/build-module/popover/index.js.map +1 -1
  230. package/build-module/resizable-box/resize-tooltip/utils.js +4 -5
  231. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  232. package/build-module/sandbox/index.js +2 -2
  233. package/build-module/sandbox/index.js.map +1 -1
  234. package/build-module/sandbox/index.native.js +1 -1
  235. package/build-module/sandbox/index.native.js.map +1 -1
  236. package/build-module/select-control/index.js +29 -3
  237. package/build-module/select-control/index.js.map +1 -1
  238. package/build-module/select-control/styles/select-control-styles.js +17 -14
  239. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  240. package/build-module/surface/styles.js +8 -8
  241. package/build-module/surface/styles.js.map +1 -1
  242. package/build-module/text/hook.js +5 -5
  243. package/build-module/text/hook.js.map +1 -1
  244. package/build-module/text/styles/text-mixins.native.js +2 -2
  245. package/build-module/text/styles/text-mixins.native.js.map +1 -1
  246. package/build-module/text/styles.js +7 -7
  247. package/build-module/text/styles.js.map +1 -1
  248. package/build-module/text-control/index.js +35 -27
  249. package/build-module/text-control/index.js.map +1 -1
  250. package/build-module/text-control/types.js +2 -0
  251. package/build-module/text-control/types.js.map +1 -0
  252. package/build-module/toggle-group-control/toggle-group-control/component.js +2 -3
  253. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  254. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +1 -5
  255. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
  256. package/build-module/tools-panel/tools-panel-header/component.js +51 -36
  257. package/build-module/tools-panel/tools-panel-header/component.js.map +1 -1
  258. package/build-module/tooltip/index.js +2 -2
  259. package/build-module/tooltip/index.js.map +1 -1
  260. package/build-module/ui/spinner/component.js +1 -1
  261. package/build-module/ui/spinner/component.js.map +1 -1
  262. package/build-module/unit-control/index.js +3 -3
  263. package/build-module/unit-control/index.js.map +1 -1
  264. package/build-module/unit-control/styles/unit-control-styles.js +11 -20
  265. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  266. package/build-module/unit-control/utils.js.map +1 -1
  267. package/build-module/utils/colors-values.js +19 -23
  268. package/build-module/utils/colors-values.js.map +1 -1
  269. package/build-style/style-rtl.css +55 -170
  270. package/build-style/style.css +51 -170
  271. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  272. package/build-types/border-box-control/border-box-control/hook.d.ts +3 -1
  273. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  274. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -1
  275. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
  276. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +3 -1
  277. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  278. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -1
  279. package/build-types/border-box-control/styles.d.ts +2 -2
  280. package/build-types/border-box-control/styles.d.ts.map +1 -1
  281. package/build-types/border-box-control/types.d.ts +40 -13
  282. package/build-types/border-box-control/types.d.ts.map +1 -1
  283. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  284. package/build-types/border-control/border-control/hook.d.ts +2 -1
  285. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  286. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  287. package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -0
  288. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  289. package/build-types/border-control/styles.d.ts +2 -1
  290. package/build-types/border-control/styles.d.ts.map +1 -1
  291. package/build-types/border-control/types.d.ts +18 -6
  292. package/build-types/border-control/types.d.ts.map +1 -1
  293. package/build-types/button/index.d.ts.map +1 -1
  294. package/build-types/button-group/index.d.ts +25 -0
  295. package/build-types/button-group/index.d.ts.map +1 -0
  296. package/build-types/button-group/stories/index.d.ts +12 -0
  297. package/build-types/button-group/stories/index.d.ts.map +1 -0
  298. package/build-types/button-group/types.d.ts +11 -0
  299. package/build-types/button-group/types.d.ts.map +1 -0
  300. package/build-types/checkbox-control/index.d.ts +26 -0
  301. package/build-types/checkbox-control/index.d.ts.map +1 -0
  302. package/build-types/checkbox-control/stories/index.d.ts +13 -0
  303. package/build-types/checkbox-control/stories/index.d.ts.map +1 -0
  304. package/build-types/checkbox-control/types.d.ts +35 -0
  305. package/build-types/checkbox-control/types.d.ts.map +1 -0
  306. package/build-types/circular-option-picker/index.d.ts.map +1 -1
  307. package/build-types/color-palette/index.d.ts.map +1 -1
  308. package/build-types/color-picker/styles.d.ts +3 -3
  309. package/build-types/date-time/date.d.ts +24 -0
  310. package/build-types/date-time/date.d.ts.map +1 -0
  311. package/build-types/date-time/index.d.ts +35 -0
  312. package/build-types/date-time/index.d.ts.map +1 -0
  313. package/build-types/date-time/stories/date.d.ts +14 -0
  314. package/build-types/date-time/stories/date.d.ts.map +1 -0
  315. package/build-types/date-time/stories/index.d.ts +14 -0
  316. package/build-types/date-time/stories/index.d.ts.map +1 -0
  317. package/build-types/date-time/stories/time.d.ts +12 -0
  318. package/build-types/date-time/stories/time.d.ts.map +1 -0
  319. package/build-types/date-time/stories/utils.d.ts +3 -0
  320. package/build-types/date-time/stories/utils.d.ts.map +1 -0
  321. package/build-types/date-time/test/date.d.ts +2 -0
  322. package/build-types/date-time/test/date.d.ts.map +1 -0
  323. package/build-types/date-time/test/time.d.ts +2 -0
  324. package/build-types/date-time/test/time.d.ts.map +1 -0
  325. package/build-types/date-time/test/utils.d.ts +2 -0
  326. package/build-types/date-time/test/utils.d.ts.map +1 -0
  327. package/build-types/date-time/time.d.ts +25 -0
  328. package/build-types/date-time/time.d.ts.map +1 -0
  329. package/build-types/date-time/timezone.d.ts +8 -0
  330. package/build-types/date-time/timezone.d.ts.map +1 -0
  331. package/build-types/date-time/types.d.ts +91 -0
  332. package/build-types/date-time/types.d.ts.map +1 -0
  333. package/build-types/date-time/utils.d.ts +15 -0
  334. package/build-types/date-time/utils.d.ts.map +1 -0
  335. package/build-types/disabled/index.d.ts.map +1 -1
  336. package/build-types/dropdown/index.d.ts.map +1 -1
  337. package/build-types/input-control/index.d.ts +23 -3
  338. package/build-types/input-control/index.d.ts.map +1 -1
  339. package/build-types/input-control/input-field.d.ts +1 -1
  340. package/build-types/input-control/input-field.d.ts.map +1 -1
  341. package/build-types/input-control/stories/index.d.ts +5 -5
  342. package/build-types/input-control/stories/index.d.ts.map +1 -1
  343. package/build-types/input-control/styles/input-control-styles.d.ts +1 -0
  344. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  345. package/build-types/input-control/types.d.ts +79 -3
  346. package/build-types/input-control/types.d.ts.map +1 -1
  347. package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
  348. package/build-types/popover/index.d.ts +5 -8
  349. package/build-types/popover/index.d.ts.map +1 -1
  350. package/build-types/resizable-box/index.d.ts +1 -1
  351. package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
  352. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  353. package/build-types/select-control/index.d.ts +30 -26
  354. package/build-types/select-control/index.d.ts.map +1 -1
  355. package/build-types/select-control/stories/index.d.ts +23 -0
  356. package/build-types/select-control/stories/index.d.ts.map +1 -0
  357. package/build-types/select-control/styles/select-control-styles.d.ts +3 -4
  358. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  359. package/build-types/select-control/test/select-control.d.ts +2 -0
  360. package/build-types/select-control/test/select-control.d.ts.map +1 -0
  361. package/build-types/select-control/types.d.ts +52 -1
  362. package/build-types/select-control/types.d.ts.map +1 -1
  363. package/build-types/text-control/index.d.ts +2 -2
  364. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  365. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -1
  366. package/build-types/tools-panel/tools-panel-header/component.d.ts.map +1 -1
  367. package/build-types/tools-panel/types.d.ts +0 -1
  368. package/build-types/tools-panel/types.d.ts.map +1 -1
  369. package/build-types/tooltip/index.d.ts.map +1 -1
  370. package/build-types/unit-control/index.d.ts +2 -2
  371. package/build-types/unit-control/index.d.ts.map +1 -1
  372. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  373. package/build-types/unit-control/test/index.d.ts +2 -0
  374. package/build-types/unit-control/test/index.d.ts.map +1 -0
  375. package/build-types/unit-control/test/utils.d.ts +2 -0
  376. package/build-types/unit-control/test/utils.d.ts.map +1 -0
  377. package/build-types/unit-control/types.d.ts +1 -1
  378. package/build-types/unit-control/types.d.ts.map +1 -1
  379. package/build-types/unit-control/utils.d.ts +3 -3
  380. package/build-types/unit-control/utils.d.ts.map +1 -1
  381. package/build-types/utils/colors-values.d.ts +6 -146
  382. package/build-types/utils/colors-values.d.ts.map +1 -1
  383. package/package.json +19 -19
  384. package/src/alignment-matrix-control/styles/alignment-matrix-control-styles.js +5 -3
  385. package/src/autocomplete/style.scss +1 -1
  386. package/src/border-box-control/border-box-control/README.md +10 -14
  387. package/src/border-box-control/border-box-control/component.tsx +21 -4
  388. package/src/border-box-control/border-box-control-linked-button/hook.ts +10 -6
  389. package/src/border-box-control/border-box-control-split-controls/component.tsx +24 -7
  390. package/src/border-box-control/border-box-control-visualizer/hook.ts +11 -6
  391. package/src/border-box-control/stories/index.js +1 -0
  392. package/src/border-box-control/styles.ts +15 -8
  393. package/src/border-box-control/types.ts +40 -14
  394. package/src/border-control/border-control/README.md +0 -7
  395. package/src/border-control/border-control/component.tsx +4 -2
  396. package/src/border-control/border-control/hook.ts +5 -2
  397. package/src/border-control/border-control-dropdown/component.tsx +18 -11
  398. package/src/border-control/border-control-dropdown/hook.ts +7 -5
  399. package/src/border-control/stories/index.js +1 -0
  400. package/src/border-control/styles.ts +82 -22
  401. package/src/border-control/types.ts +18 -6
  402. package/src/box-control/README.md +0 -74
  403. package/src/box-control/index.js +0 -15
  404. package/src/box-control/stories/index.js +0 -29
  405. package/src/box-control/utils.js +0 -7
  406. package/src/button/index.js +2 -4
  407. package/src/button/index.native.js +33 -18
  408. package/src/button/test/index.js +16 -1
  409. package/src/button-group/index.tsx +47 -0
  410. package/src/button-group/stories/index.tsx +41 -0
  411. package/src/button-group/types.ts +11 -0
  412. package/src/checkbox-control/README.md +10 -8
  413. package/src/checkbox-control/{index.js → index.tsx} +49 -14
  414. package/src/checkbox-control/stories/{index.js → index.tsx} +49 -27
  415. package/src/checkbox-control/types.ts +36 -0
  416. package/src/circular-option-picker/index.js +1 -2
  417. package/src/circular-option-picker/style.scss +1 -0
  418. package/src/color-palette/README.md +0 -1
  419. package/src/color-palette/index.js +6 -13
  420. package/src/color-palette/style.scss +3 -18
  421. package/src/color-palette/test/__snapshots__/index.js.snap +2 -3
  422. package/src/confirm-dialog/stories/index.js +87 -99
  423. package/src/date-time/README.md +13 -10
  424. package/src/date-time/{date.js → date.tsx} +49 -20
  425. package/src/date-time/{index.js → index.tsx} +31 -5
  426. package/src/date-time/stories/date.tsx +73 -0
  427. package/src/date-time/stories/index.tsx +75 -0
  428. package/src/date-time/stories/time.tsx +51 -0
  429. package/src/date-time/stories/utils.ts +9 -0
  430. package/src/date-time/test/date.tsx +127 -0
  431. package/src/date-time/test/{time.js → time.tsx} +34 -19
  432. package/src/date-time/test/{utils.js → utils.ts} +1 -1
  433. package/src/date-time/{time.js → time.tsx} +57 -46
  434. package/src/date-time/{timezone.js → timezone.tsx} +4 -3
  435. package/src/date-time/types.ts +106 -0
  436. package/src/date-time/utils.ts +20 -0
  437. package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -4
  438. package/src/disabled/index.js +5 -90
  439. package/src/draggable/index.native.js +215 -0
  440. package/src/draggable/style.native.scss +3 -0
  441. package/src/dropdown/index.js +9 -4
  442. package/src/dropdown/style.scss +1 -1
  443. package/src/focal-point-picker/index.native.js +3 -3
  444. package/src/form-file-upload/test/index.js +20 -13
  445. package/src/heading/hook.ts +1 -1
  446. package/src/heading/test/__snapshots__/index.js.snap +3 -3
  447. package/src/index.js +0 -1
  448. package/src/index.native.js +1 -0
  449. package/src/input-control/README.md +3 -3
  450. package/src/input-control/index.tsx +23 -3
  451. package/src/input-control/stories/index.tsx +63 -0
  452. package/src/input-control/styles/input-control-styles.tsx +20 -7
  453. package/src/input-control/types.ts +79 -2
  454. package/src/item-group/stories/index.js +22 -18
  455. package/src/menu-item/style.scss +10 -0
  456. package/src/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js +1 -1
  457. package/src/mobile/bottom-sheet/bottom-sheet-navigation/test/navigation-container.native.js +9 -2
  458. package/src/mobile/bottom-sheet/index.native.js +1 -1
  459. package/src/mobile/bottom-sheet-select-control/index.native.js +8 -2
  460. package/src/mobile/html-text-input/index.native.js +45 -29
  461. package/src/mobile/html-text-input/style.android.scss +2 -15
  462. package/src/mobile/html-text-input/style.ios.scss +2 -15
  463. package/src/mobile/html-text-input/{style-common.native.scss → style.scss} +16 -0
  464. package/src/mobile/keyboard-aware-flat-list/index.android.js +15 -5
  465. package/src/mobile/keyboard-aware-flat-list/index.ios.js +75 -46
  466. package/src/mobile/link-settings/test/link-settings-navigation.native.js +9 -1
  467. package/src/navigation/styles/navigation-styles.js +5 -5
  468. package/src/navigator/stories/index.js +16 -10
  469. package/src/notice/index.native.js +44 -54
  470. package/src/notice/list.native.js +27 -51
  471. package/src/notice/style.native.scss +1 -0
  472. package/src/palette-edit/index.js +37 -9
  473. package/src/palette-edit/style.scss +0 -7
  474. package/src/palette-edit/test/index.js +63 -0
  475. package/src/panel/README.md +1 -1
  476. package/src/placeholder/test/index.js +7 -0
  477. package/src/popover/README.md +7 -9
  478. package/src/popover/index.js +242 -417
  479. package/src/popover/style.scss +20 -190
  480. package/src/popover/test/__snapshots__/index.js.snap +6 -18
  481. package/src/query-controls/README.md +2 -2
  482. package/src/resizable-box/resize-tooltip/utils.ts +4 -5
  483. package/src/sandbox/index.js +2 -2
  484. package/src/sandbox/index.native.js +1 -1
  485. package/src/select-control/README.md +2 -2
  486. package/src/select-control/index.tsx +30 -29
  487. package/src/select-control/stories/index.tsx +90 -0
  488. package/src/select-control/styles/select-control-styles.ts +16 -12
  489. package/src/select-control/test/{select-control.js → select-control.tsx} +2 -2
  490. package/src/select-control/types.ts +66 -1
  491. package/src/surface/styles.js +1 -1
  492. package/src/tab-panel/style.scss +1 -1
  493. package/src/text/hook.js +1 -1
  494. package/src/text/styles/text-mixins.native.js +2 -2
  495. package/src/text/styles.js +1 -1
  496. package/src/text/test/__snapshots__/{index.js.snap → index.tsx.snap} +16 -0
  497. package/src/text/test/{index.js → index.tsx} +12 -6
  498. package/src/text-control/index.tsx +84 -0
  499. package/src/text-control/stories/index.tsx +66 -0
  500. package/src/text-control/types.ts +29 -0
  501. package/src/toggle-group-control/test/__snapshots__/index.js.snap +4 -10
  502. package/src/toggle-group-control/toggle-group-control/component.tsx +7 -3
  503. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +1 -5
  504. package/src/toolbar-group/style.scss +20 -0
  505. package/src/tools-panel/test/__snapshots__/index.js.snap +2 -2
  506. package/src/tools-panel/test/index.js +71 -18
  507. package/src/tools-panel/tools-panel-header/component.tsx +75 -33
  508. package/src/tools-panel/types.ts +0 -1
  509. package/src/tooltip/index.js +8 -2
  510. package/src/tooltip/style.scss +2 -4
  511. package/src/tooltip/test/index.js +6 -0
  512. package/src/tooltip/test/index.native.js +1 -1
  513. package/src/ui/spinner/component.js +1 -1
  514. package/src/ui/spinner/test/__snapshots__/index.js.snap +3 -3
  515. package/src/unit-control/index.tsx +2 -5
  516. package/src/unit-control/styles/unit-control-styles.ts +3 -13
  517. package/src/unit-control/test/__snapshots__/index.tsx.snap +33 -0
  518. package/src/unit-control/test/{index.js → index.tsx} +295 -166
  519. package/src/unit-control/test/{utils.js → utils.ts} +38 -19
  520. package/src/unit-control/types.ts +4 -1
  521. package/src/unit-control/utils.ts +5 -3
  522. package/src/utils/colors-values.js +18 -22
  523. package/tsconfig.json +14 -3
  524. package/tsconfig.tsbuildinfo +1 -1
  525. package/build/box-control/visualizer.js +0 -165
  526. package/build/box-control/visualizer.js.map +0 -1
  527. package/build/flyout/context.js +0 -23
  528. package/build/flyout/context.js.map +0 -1
  529. package/build/flyout/flyout/component.js +0 -106
  530. package/build/flyout/flyout/component.js.map +0 -1
  531. package/build/flyout/flyout/hook.js +0 -53
  532. package/build/flyout/flyout/hook.js.map +0 -1
  533. package/build/flyout/flyout/index.js +0 -24
  534. package/build/flyout/flyout/index.js.map +0 -1
  535. package/build/flyout/flyout-content/component.js +0 -65
  536. package/build/flyout/flyout-content/component.js.map +0 -1
  537. package/build/flyout/flyout-content/index.js +0 -16
  538. package/build/flyout/flyout-content/index.js.map +0 -1
  539. package/build/flyout/index.js +0 -16
  540. package/build/flyout/index.js.map +0 -1
  541. package/build/flyout/styles.js +0 -46
  542. package/build/flyout/styles.js.map +0 -1
  543. package/build/flyout/utils.js +0 -36
  544. package/build/flyout/utils.js.map +0 -1
  545. package/build/mobile/html-text-input/container.android.js +0 -41
  546. package/build/mobile/html-text-input/container.android.js.map +0 -1
  547. package/build/mobile/html-text-input/container.ios.js +0 -60
  548. package/build/mobile/html-text-input/container.ios.js.map +0 -1
  549. package/build/popover/utils.js +0 -322
  550. package/build/popover/utils.js.map +0 -1
  551. package/build-module/box-control/visualizer.js +0 -154
  552. package/build-module/box-control/visualizer.js.map +0 -1
  553. package/build-module/flyout/context.js +0 -11
  554. package/build-module/flyout/context.js.map +0 -1
  555. package/build-module/flyout/flyout/component.js +0 -89
  556. package/build-module/flyout/flyout/component.js.map +0 -1
  557. package/build-module/flyout/flyout/hook.js +0 -44
  558. package/build-module/flyout/flyout/hook.js.map +0 -1
  559. package/build-module/flyout/flyout/index.js +0 -3
  560. package/build-module/flyout/flyout/index.js.map +0 -1
  561. package/build-module/flyout/flyout-content/component.js +0 -51
  562. package/build-module/flyout/flyout-content/component.js.map +0 -1
  563. package/build-module/flyout/flyout-content/index.js +0 -2
  564. package/build-module/flyout/flyout-content/index.js.map +0 -1
  565. package/build-module/flyout/index.js +0 -2
  566. package/build-module/flyout/index.js.map +0 -1
  567. package/build-module/flyout/styles.js +0 -27
  568. package/build-module/flyout/styles.js.map +0 -1
  569. package/build-module/flyout/utils.js +0 -25
  570. package/build-module/flyout/utils.js.map +0 -1
  571. package/build-module/mobile/html-text-input/container.android.js +0 -29
  572. package/build-module/mobile/html-text-input/container.android.js.map +0 -1
  573. package/build-module/mobile/html-text-input/container.ios.js +0 -48
  574. package/build-module/mobile/html-text-input/container.ios.js.map +0 -1
  575. package/build-module/popover/utils.js +0 -308
  576. package/build-module/popover/utils.js.map +0 -1
  577. package/build-types/flyout/context.d.ts +0 -6
  578. package/build-types/flyout/context.d.ts.map +0 -1
  579. package/build-types/flyout/flyout/component.d.ts +0 -21
  580. package/build-types/flyout/flyout/component.d.ts.map +0 -1
  581. package/build-types/flyout/flyout/hook.d.ts +0 -270
  582. package/build-types/flyout/flyout/hook.d.ts.map +0 -1
  583. package/build-types/flyout/flyout/index.d.ts +0 -3
  584. package/build-types/flyout/flyout/index.d.ts.map +0 -1
  585. package/build-types/flyout/flyout-content/component.d.ts +0 -3
  586. package/build-types/flyout/flyout-content/component.d.ts.map +0 -1
  587. package/build-types/flyout/flyout-content/index.d.ts +0 -2
  588. package/build-types/flyout/flyout-content/index.d.ts.map +0 -1
  589. package/build-types/flyout/index.d.ts +0 -2
  590. package/build-types/flyout/index.d.ts.map +0 -1
  591. package/build-types/flyout/styles.d.ts +0 -22
  592. package/build-types/flyout/styles.d.ts.map +0 -1
  593. package/build-types/flyout/types.d.ts +0 -80
  594. package/build-types/flyout/types.d.ts.map +0 -1
  595. package/build-types/flyout/utils.d.ts +0 -8
  596. package/build-types/flyout/utils.d.ts.map +0 -1
  597. package/build-types/popover/utils.d.ts +0 -70
  598. package/build-types/popover/utils.d.ts.map +0 -1
  599. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts +0 -19
  600. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts.map +0 -1
  601. package/src/box-control/visualizer.js +0 -116
  602. package/src/button-group/index.js +0 -17
  603. package/src/button-group/stories/index.js +0 -21
  604. package/src/date-time/stories/date.js +0 -17
  605. package/src/date-time/stories/index.js +0 -72
  606. package/src/date-time/stories/time.js +0 -32
  607. package/src/date-time/test/date.js +0 -97
  608. package/src/date-time/utils.js +0 -18
  609. package/src/flyout/context.js +0 -10
  610. package/src/flyout/flyout/README.md +0 -98
  611. package/src/flyout/flyout/component.js +0 -111
  612. package/src/flyout/flyout/hook.js +0 -45
  613. package/src/flyout/flyout/index.js +0 -2
  614. package/src/flyout/flyout-content/component.js +0 -53
  615. package/src/flyout/flyout-content/index.js +0 -1
  616. package/src/flyout/index.js +0 -1
  617. package/src/flyout/stories/index.js +0 -24
  618. package/src/flyout/styles.ts +0 -41
  619. package/src/flyout/test/__snapshots__/index.js.snap +0 -186
  620. package/src/flyout/test/index.js +0 -103
  621. package/src/flyout/types.ts +0 -84
  622. package/src/flyout/utils.js +0 -23
  623. package/src/input-control/stories/index.js +0 -71
  624. package/src/mobile/html-text-input/container.android.js +0 -23
  625. package/src/mobile/html-text-input/container.ios.js +0 -50
  626. package/src/popover/test/utils.js +0 -304
  627. package/src/popover/utils.js +0 -396
  628. package/src/select-control/stories/index.js +0 -104
  629. package/src/text-control/index.js +0 -72
  630. package/src/text-control/stories/index.js +0 -46
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render as RTLrender, screen, waitFor } from '@testing-library/react';
4
+ import { render, screen } from '@testing-library/react';
5
5
  import userEvent from '@testing-library/user-event';
6
6
 
7
7
  /**
@@ -12,43 +12,48 @@ import { useState } from '@wordpress/element';
12
12
  /**
13
13
  * Internal dependencies
14
14
  */
15
- import UnitControl from '../';
15
+ import UnitControl from '..';
16
16
  import { parseQuantityAndUnitFromRawValue } from '../utils';
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
-
28
- const getComponent = () =>
29
- document.body.querySelector( '.components-unit-control' );
30
- const getInput = () =>
31
- document.body.querySelector( '.components-unit-control input' );
32
- const getSelect = () =>
33
- document.body.querySelector( '.components-unit-control select' );
34
- const getUnitLabel = () =>
35
- document.body.querySelector( '.components-unit-control__unit-label' );
17
+ import type { UnitControlOnChangeCallback } from '../types';
18
+
19
+ const getInput = ( {
20
+ isInputTypeText = false,
21
+ }: {
22
+ isInputTypeText?: boolean;
23
+ } = {} ) =>
24
+ screen.getByRole(
25
+ isInputTypeText ? 'textbox' : 'spinbutton'
26
+ ) as HTMLInputElement;
27
+ const getSelect = () => screen.getByRole( 'combobox' ) as HTMLSelectElement;
28
+ const getSelectOptions = () =>
29
+ screen.getAllByRole( 'option' ) as HTMLOptionElement[];
36
30
 
37
31
  const ControlledSyncUnits = () => {
38
- const [ state, setState ] = useState( { valueA: '', valueB: '' } );
32
+ const [ state, setState ] = useState( {
33
+ valueA: '',
34
+ valueB: '',
35
+ } );
39
36
 
40
37
  // Keep the unit sync'd between the two `UnitControl` instances.
41
- const onUnitControlChange = ( fieldName, newValue ) => {
42
- // eslint-disable-next-line @wordpress/no-unused-vars-before-return
43
- const [ quantity, newUnit ] = parseQuantityAndUnitFromRawValue(
38
+ const onUnitControlChange = (
39
+ fieldName: 'valueA' | 'valueB',
40
+ newValue?: string | number
41
+ ) => {
42
+ const parsedQuantityAndUnit = parseQuantityAndUnitFromRawValue(
44
43
  newValue
45
44
  );
45
+ const quantity = parsedQuantityAndUnit[ 0 ];
46
46
 
47
47
  if ( ! Number.isFinite( quantity ) ) {
48
48
  return;
49
49
  }
50
50
 
51
- const nextState = { ...state, [ fieldName ]: newValue };
51
+ const newUnit = parsedQuantityAndUnit[ 1 ];
52
+
53
+ const nextState = {
54
+ ...state,
55
+ [ fieldName ]: newValue,
56
+ };
52
57
 
53
58
  Object.entries( state ).forEach( ( [ stateProp, stateValue ] ) => {
54
59
  const [
@@ -57,7 +62,9 @@ const ControlledSyncUnits = () => {
57
62
  ] = parseQuantityAndUnitFromRawValue( stateValue );
58
63
 
59
64
  if ( stateProp !== fieldName && stateUnit !== newUnit ) {
60
- nextState[ stateProp ] = `${ stateQuantity }${ newUnit }`;
65
+ nextState[
66
+ stateProp as 'valueA' | 'valueB'
67
+ ] = `${ stateQuantity }${ newUnit }`;
61
68
  }
62
69
  } );
63
70
 
@@ -81,52 +88,69 @@ const ControlledSyncUnits = () => {
81
88
  };
82
89
 
83
90
  describe( 'UnitControl', () => {
91
+ beforeEach( () => {
92
+ jest.useFakeTimers();
93
+ } );
94
+
95
+ afterEach( () => {
96
+ jest.runOnlyPendingTimers();
97
+ jest.useRealTimers();
98
+ } );
99
+
84
100
  describe( 'Basic rendering', () => {
85
101
  it( 'should render', () => {
86
102
  render( <UnitControl /> );
87
103
  const input = getInput();
88
104
  const select = getSelect();
89
105
 
90
- expect( input ).toBeTruthy();
91
- expect( select ).toBeTruthy();
106
+ expect( input ).toBeInTheDocument();
107
+ expect( select ).toBeInTheDocument();
92
108
  } );
93
109
 
94
110
  it( 'should render custom className', () => {
95
- render( <UnitControl className="hello" /> );
111
+ const { container: withoutClassName } = render( <UnitControl /> );
96
112
 
97
- const el = getComponent();
113
+ const { container: withClassName } = render(
114
+ <UnitControl className="hello" />
115
+ );
98
116
 
99
- expect( el.classList.contains( 'hello' ) ).toBe( true );
117
+ expect( withoutClassName.firstChild ).toMatchDiffSnapshot(
118
+ withClassName.firstChild
119
+ );
100
120
  } );
101
121
 
102
122
  it( 'should not render select, if units are disabled', () => {
103
123
  render( <UnitControl value="3em" units={ [] } /> );
104
124
  const input = getInput();
105
- const select = getSelect();
125
+ // Using `queryByRole` instead of `getSelect` because we need to test
126
+ // for this element NOT to be in the document.
127
+ const select = screen.queryByRole( 'combobox' );
106
128
 
107
- expect( input ).toBeTruthy();
108
- expect( select ).toBeFalsy();
129
+ expect( input ).toBeInTheDocument();
130
+ expect( select ).not.toBeInTheDocument();
109
131
  } );
110
132
 
111
133
  it( 'should render label if single units', () => {
112
134
  render( <UnitControl units={ [ { value: '%', label: '%' } ] } /> );
113
135
 
114
- const select = getSelect();
115
- const label = getUnitLabel();
136
+ const select = screen.queryByRole( 'combobox' );
137
+ const label = screen.getByText( '%' );
116
138
 
117
- expect( select ).toBeFalsy();
118
- expect( label ).toBeTruthy();
139
+ expect( select ).not.toBeInTheDocument();
140
+ expect( label ).toBeInTheDocument();
119
141
  } );
120
142
  } );
121
143
 
122
144
  describe( 'Value', () => {
123
145
  it( 'should update value on change', async () => {
146
+ const user = userEvent.setup( {
147
+ advanceTimers: jest.advanceTimersByTime,
148
+ } );
149
+
124
150
  let state = '50px';
125
151
  const setState = jest.fn( ( value ) => ( state = value ) );
126
152
 
127
- const { user } = render(
128
- <UnitControl value={ state } onChange={ setState } />
129
- );
153
+ render( <UnitControl value={ state } onChange={ setState } /> );
130
154
 
131
155
  const input = getInput();
132
156
  await user.clear( input );
@@ -141,12 +165,15 @@ describe( 'UnitControl', () => {
141
165
  } );
142
166
 
143
167
  it( 'should increment value on UP press', async () => {
144
- let state = '50px';
145
- const setState = ( nextState ) => ( state = nextState );
168
+ const user = userEvent.setup( {
169
+ advanceTimers: jest.advanceTimersByTime,
170
+ } );
146
171
 
147
- const { user } = render(
148
- <UnitControl value={ state } onChange={ setState } />
149
- );
172
+ let state: string | undefined = '50px';
173
+ const setState: UnitControlOnChangeCallback = ( nextState ) =>
174
+ ( state = nextState );
175
+
176
+ render( <UnitControl value={ state } onChange={ setState } /> );
150
177
 
151
178
  const input = getInput();
152
179
  await user.type( input, '{ArrowUp}' );
@@ -155,12 +182,15 @@ describe( 'UnitControl', () => {
155
182
  } );
156
183
 
157
184
  it( 'should increment value on UP + SHIFT press, with step', async () => {
158
- let state = '50px';
159
- const setState = ( nextState ) => ( state = nextState );
185
+ const user = userEvent.setup( {
186
+ advanceTimers: jest.advanceTimersByTime,
187
+ } );
160
188
 
161
- const { user } = render(
162
- <UnitControl value={ state } onChange={ setState } />
163
- );
189
+ let state: string | undefined = '50px';
190
+ const setState: UnitControlOnChangeCallback = ( nextState ) =>
191
+ ( state = nextState );
192
+
193
+ render( <UnitControl value={ state } onChange={ setState } /> );
164
194
 
165
195
  const input = getInput();
166
196
  await user.type( input, '{Shift>}{ArrowUp}{/Shift}' );
@@ -169,12 +199,15 @@ describe( 'UnitControl', () => {
169
199
  } );
170
200
 
171
201
  it( 'should decrement value on DOWN press', async () => {
172
- let state = 50;
173
- const setState = ( nextState ) => ( state = nextState );
202
+ const user = userEvent.setup( {
203
+ advanceTimers: jest.advanceTimersByTime,
204
+ } );
174
205
 
175
- const { user } = render(
176
- <UnitControl value={ state } onChange={ setState } />
177
- );
206
+ let state: string | number | undefined = 50;
207
+ const setState: UnitControlOnChangeCallback = ( nextState ) =>
208
+ ( state = nextState );
209
+
210
+ render( <UnitControl value={ state } onChange={ setState } /> );
178
211
 
179
212
  const input = getInput();
180
213
  await user.type( input, '{ArrowDown}' );
@@ -183,12 +216,15 @@ describe( 'UnitControl', () => {
183
216
  } );
184
217
 
185
218
  it( 'should decrement value on DOWN + SHIFT press, with step', async () => {
186
- let state = 50;
187
- const setState = ( nextState ) => ( state = nextState );
219
+ const user = userEvent.setup( {
220
+ advanceTimers: jest.advanceTimersByTime,
221
+ } );
188
222
 
189
- const { user } = render(
190
- <UnitControl value={ state } onChange={ setState } />
191
- );
223
+ let state: string | number | undefined = 50;
224
+ const setState: UnitControlOnChangeCallback = ( nextState ) =>
225
+ ( state = nextState );
226
+
227
+ render( <UnitControl value={ state } onChange={ setState } /> );
192
228
 
193
229
  const input = getInput();
194
230
  await user.type( input, '{Shift>}{ArrowDown}{/Shift}' );
@@ -197,10 +233,15 @@ describe( 'UnitControl', () => {
197
233
  } );
198
234
 
199
235
  it( 'should cancel change when ESCAPE key is pressed', async () => {
200
- let state = 50;
201
- const setState = ( nextState ) => ( state = nextState );
236
+ const user = userEvent.setup( {
237
+ advanceTimers: jest.advanceTimersByTime,
238
+ } );
239
+
240
+ let state: string | number | undefined = 50;
241
+ const setState: UnitControlOnChangeCallback = ( nextState ) =>
242
+ ( state = nextState );
202
243
 
203
- const { user } = render(
244
+ render(
204
245
  <UnitControl
205
246
  value={ state }
206
247
  onChange={ setState }
@@ -208,95 +249,91 @@ describe( 'UnitControl', () => {
208
249
  />
209
250
  );
210
251
 
211
- const input = getInput();
252
+ // Input type is `text` when the `isPressEnterToChange` prop is passed
253
+ const input = getInput( { isInputTypeText: true } );
212
254
  await user.clear( input );
213
255
  await user.type( input, '300px' );
214
256
 
215
257
  expect( input.value ).toBe( '300px' );
216
258
  expect( state ).toBe( 50 );
217
259
 
218
- user.keyboard( '{Escape}' );
260
+ await user.keyboard( '{Escape}' );
219
261
 
220
262
  expect( input.value ).toBe( '50' );
221
263
  expect( state ).toBe( 50 );
222
264
  } );
223
265
 
224
266
  it( 'should run onBlur callback when quantity input is blurred', async () => {
225
- let state = '33%';
267
+ const user = userEvent.setup( {
268
+ advanceTimers: jest.advanceTimersByTime,
269
+ } );
270
+
226
271
  const onChangeSpy = jest.fn();
227
272
  const onBlurSpy = jest.fn();
228
- const setState = ( nextState ) => {
273
+
274
+ let state: string | undefined = '33%';
275
+ const setState: UnitControlOnChangeCallback = ( nextState ) => {
229
276
  onChangeSpy( nextState );
230
277
  state = nextState;
231
278
  };
232
279
 
233
- const { user } = render(
234
- <>
235
- <button>Click me</button>
236
- <UnitControl
237
- value={ state }
238
- onChange={ setState }
239
- onBlur={ onBlurSpy }
240
- />
241
- </>
280
+ render(
281
+ <UnitControl
282
+ value={ state }
283
+ onChange={ setState }
284
+ onBlur={ onBlurSpy }
285
+ />
242
286
  );
243
287
 
244
288
  const input = getInput();
245
289
  await user.clear( input );
246
290
  await user.type( input, '41' );
247
291
 
248
- await waitFor( () =>
249
- expect( onChangeSpy ).toHaveBeenCalledTimes( 3 )
250
- );
292
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 3 );
251
293
  expect( onChangeSpy ).toHaveBeenLastCalledWith( '41%' );
252
294
 
253
- // Clicking on the button should cause the `onBlur` callback to fire.
254
- const button = screen.getByRole( 'button' );
255
- await user.click( button );
295
+ // Clicking document.body to trigger a blur event on the input.
296
+ await user.click( document.body );
256
297
 
257
- await waitFor( () =>
258
- expect( onBlurSpy ).toHaveBeenCalledTimes( 1 )
259
- );
298
+ expect( onBlurSpy ).toHaveBeenCalledTimes( 1 );
260
299
  } );
261
300
 
262
301
  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';
302
+ const user = userEvent.setup( {
303
+ advanceTimers: jest.advanceTimersByTime,
304
+ } );
264
305
 
265
306
  const onUnitChangeSpy = jest.fn();
266
307
  const onChangeSpy = jest.fn();
267
308
 
268
- const setState = ( nextState ) => {
309
+ let state: string | undefined = '15px';
310
+ const setState: UnitControlOnChangeCallback = ( nextState ) => {
269
311
  onChangeSpy( nextState );
270
312
  state = nextState;
271
313
  };
272
314
 
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
- </>
315
+ render(
316
+ <UnitControl
317
+ value={ state }
318
+ onChange={ setState }
319
+ onUnitChange={ onUnitChangeSpy }
320
+ isPressEnterToChange
321
+ />
283
322
  );
284
323
 
285
- const input = getInput();
324
+ // Input type is `text` when the `isPressEnterToChange` prop is passed
325
+ const input = getInput( { isInputTypeText: true } );
286
326
  await user.clear( input );
287
327
  await user.type( input, '41vh' );
288
328
 
289
329
  // This is because `isPressEnterToChange` is `true`
290
330
  expect( onChangeSpy ).not.toHaveBeenCalled();
331
+ expect( onUnitChangeSpy ).not.toHaveBeenCalled();
291
332
 
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
- );
333
+ // Clicking document.body to trigger a blur event on the input.
334
+ await user.click( document.body );
299
335
 
336
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 1 );
300
337
  expect( onChangeSpy ).toHaveBeenLastCalledWith( '41vh' );
301
338
 
302
339
  expect( onUnitChangeSpy ).toHaveBeenCalledTimes( 1 );
@@ -305,16 +342,55 @@ describe( 'UnitControl', () => {
305
342
  expect.anything()
306
343
  );
307
344
  } );
345
+
346
+ it( 'should update value correctly when typed and blurred when a single unit is passed', async () => {
347
+ const user = userEvent.setup( {
348
+ advanceTimers: jest.advanceTimersByTime,
349
+ } );
350
+
351
+ const onChangeSpy = jest.fn();
352
+ render(
353
+ <>
354
+ <button>Click me</button>
355
+ <UnitControl
356
+ units={ [ { value: '%', label: '%' } ] }
357
+ onChange={ onChangeSpy }
358
+ />
359
+ </>
360
+ );
361
+
362
+ const input = getInput();
363
+ await user.type( input, '62' );
364
+
365
+ expect( onChangeSpy ).toHaveBeenLastCalledWith(
366
+ '62%',
367
+ expect.anything()
368
+ );
369
+
370
+ // Start counting again calls to `onChangeSpy`.
371
+ onChangeSpy.mockClear();
372
+
373
+ // Clicking on the button should cause the `onBlur` callback to fire.
374
+ const button = screen.getByRole( 'button' );
375
+ await user.click( button );
376
+
377
+ expect( onChangeSpy ).not.toHaveBeenCalled();
378
+ } );
308
379
  } );
309
380
 
310
381
  describe( 'Unit', () => {
311
382
  it( 'should update unit value on change', async () => {
312
- let state = '14rem';
313
- const setState = ( nextState ) => ( state = nextState );
383
+ const user = userEvent.setup( {
384
+ advanceTimers: jest.advanceTimersByTime,
385
+ } );
386
+
387
+ let state: string | undefined = '14rem';
388
+ const setState: UnitControlOnChangeCallback = ( nextState ) =>
389
+ ( state = nextState );
314
390
 
315
391
  const spy = jest.fn();
316
392
 
317
- const { user } = render(
393
+ render(
318
394
  <UnitControl
319
395
  value={ state }
320
396
  onChange={ setState }
@@ -337,8 +413,7 @@ describe( 'UnitControl', () => {
337
413
 
338
414
  render( <UnitControl units={ units } /> );
339
415
 
340
- const select = getSelect();
341
- const options = select.querySelectorAll( 'option' );
416
+ const options = getSelectOptions();
342
417
 
343
418
  expect( options.length ).toBe( 2 );
344
419
 
@@ -349,15 +424,20 @@ describe( 'UnitControl', () => {
349
424
  } );
350
425
 
351
426
  it( 'should reset value on unit change, if unit has default value', async () => {
352
- let state = 50;
353
- const setState = ( nextState ) => ( state = nextState );
427
+ const user = userEvent.setup( {
428
+ advanceTimers: jest.advanceTimersByTime,
429
+ } );
430
+
431
+ let state: string | number | undefined = 50;
432
+ const setState: UnitControlOnChangeCallback = ( nextState ) =>
433
+ ( state = nextState );
354
434
 
355
435
  const units = [
356
436
  { value: 'pt', label: 'pt', default: 25 },
357
437
  { value: 'vmax', label: 'vmax', default: 75 },
358
438
  ];
359
439
 
360
- const { user } = render(
440
+ render(
361
441
  <UnitControl
362
442
  isResetValueOnUnitChange
363
443
  units={ units }
@@ -377,15 +457,20 @@ describe( 'UnitControl', () => {
377
457
  } );
378
458
 
379
459
  it( 'should not reset value on unit change, if disabled', async () => {
380
- let state = 50;
381
- const setState = ( nextState ) => ( state = nextState );
460
+ const user = userEvent.setup( {
461
+ advanceTimers: jest.advanceTimersByTime,
462
+ } );
463
+
464
+ let state: string | number | undefined = 50;
465
+ const setState: UnitControlOnChangeCallback = ( nextState ) =>
466
+ ( state = nextState );
382
467
 
383
468
  const units = [
384
469
  { value: 'pt', label: 'pt', default: 25 },
385
470
  { value: 'vmax', label: 'vmax', default: 75 },
386
471
  ];
387
472
 
388
- const { user } = render(
473
+ render(
389
474
  <UnitControl
390
475
  isResetValueOnUnitChange={ false }
391
476
  value={ state }
@@ -405,10 +490,15 @@ describe( 'UnitControl', () => {
405
490
  } );
406
491
 
407
492
  it( 'should set correct unit if single units', async () => {
408
- let state = '50%';
409
- const setState = ( value ) => ( state = value );
493
+ const user = userEvent.setup( {
494
+ advanceTimers: jest.advanceTimersByTime,
495
+ } );
410
496
 
411
- const { user } = render(
497
+ let state: string | undefined = '50%';
498
+ const setState: UnitControlOnChangeCallback = ( value ) =>
499
+ ( state = value );
500
+
501
+ render(
412
502
  <UnitControl
413
503
  value={ state }
414
504
  units={ [ { value: '%', label: '%' } ] }
@@ -420,11 +510,15 @@ describe( 'UnitControl', () => {
420
510
  await user.clear( input );
421
511
  await user.type( input, '62' );
422
512
 
423
- await waitFor( () => expect( state ).toBe( '62%' ) );
513
+ expect( state ).toBe( '62%' );
424
514
  } );
425
515
 
426
516
  it( 'should update unit value when a new raw value is passed', async () => {
427
- const { user } = render( <ControlledSyncUnits /> );
517
+ const user = userEvent.setup( {
518
+ advanceTimers: jest.advanceTimersByTime,
519
+ } );
520
+
521
+ render( <ControlledSyncUnits /> );
428
522
 
429
523
  const [ inputA, inputB ] = screen.getAllByRole( 'spinbutton' );
430
524
  const [ selectA, selectB ] = screen.getAllByRole( 'combobox' );
@@ -442,24 +536,26 @@ describe( 'UnitControl', () => {
442
536
 
443
537
  await user.selectOptions( selectA, remOptionA );
444
538
 
445
- await waitFor( () => expect( selectB ).toHaveValue( 'rem' ) );
539
+ expect( selectB ).toHaveValue( 'rem' );
446
540
  expect( selectA ).toHaveValue( 'rem' );
447
541
 
448
542
  await user.selectOptions( selectB, vwOptionB );
449
543
 
450
- await waitFor( () => expect( selectA ).toHaveValue( 'vw' ) );
544
+ expect( selectA ).toHaveValue( 'vw' );
451
545
  expect( selectB ).toHaveValue( 'vw' );
452
546
  } );
453
547
 
454
548
  it( 'should maintain the chosen non-default unit when value is cleared', async () => {
549
+ const user = userEvent.setup( {
550
+ advanceTimers: jest.advanceTimersByTime,
551
+ } );
552
+
455
553
  const units = [
456
554
  { value: 'pt', label: 'pt' },
457
555
  { value: 'vmax', label: 'vmax' },
458
556
  ];
459
557
 
460
- const { user } = render(
461
- <UnitControl units={ units } value="5" />
462
- );
558
+ render( <UnitControl units={ units } value="5" /> );
463
559
 
464
560
  const select = getSelect();
465
561
  await user.selectOptions( select, [ 'vmax' ] );
@@ -471,47 +567,47 @@ describe( 'UnitControl', () => {
471
567
  } );
472
568
 
473
569
  it( 'should run onBlur callback when the unit select is blurred', async () => {
570
+ const user = userEvent.setup( {
571
+ advanceTimers: jest.advanceTimersByTime,
572
+ } );
573
+
474
574
  const onUnitChangeSpy = jest.fn();
475
575
  const onBlurSpy = jest.fn();
476
576
 
477
- const { user } = render(
478
- <>
479
- <button>Click me</button>
480
- <UnitControl
481
- value="15px"
482
- onUnitChange={ onUnitChangeSpy }
483
- onBlur={ onBlurSpy }
484
- />
485
- </>
577
+ render(
578
+ <UnitControl
579
+ value="15px"
580
+ onUnitChange={ onUnitChangeSpy }
581
+ onBlur={ onBlurSpy }
582
+ />
486
583
  );
487
584
 
488
585
  const select = getSelect();
489
586
  await user.selectOptions( select, [ 'em' ] );
490
587
 
491
- await waitFor( () =>
492
- expect( onUnitChangeSpy ).toHaveBeenCalledTimes( 1 )
493
- );
588
+ expect( onUnitChangeSpy ).toHaveBeenCalledTimes( 1 );
494
589
  expect( onUnitChangeSpy ).toHaveBeenLastCalledWith(
495
590
  'em',
496
591
  expect.anything()
497
592
  );
498
593
 
499
- // Clicking on the button should cause the `onBlur` callback to fire.
500
- const button = screen.getByRole( 'button' );
501
- await user.click( button );
594
+ // Clicking document.body to trigger a blur event on the input.
595
+ await user.click( document.body );
502
596
 
503
- await waitFor( () =>
504
- expect( onBlurSpy ).toHaveBeenCalledTimes( 1 )
505
- );
597
+ expect( onBlurSpy ).toHaveBeenCalledTimes( 1 );
506
598
  } );
507
599
  } );
508
600
 
509
601
  describe( 'Unit Parser', () => {
510
- let state = '10px';
511
- const setState = jest.fn( ( nextState ) => ( state = nextState ) );
512
-
513
602
  it( 'should parse unit from input', async () => {
514
- const { user } = render(
603
+ const user = userEvent.setup( {
604
+ advanceTimers: jest.advanceTimersByTime,
605
+ } );
606
+
607
+ let state = '10px';
608
+ const setState = jest.fn( ( nextState ) => ( state = nextState ) );
609
+
610
+ render(
515
611
  <UnitControl
516
612
  value={ state }
517
613
  onChange={ setState }
@@ -519,16 +615,24 @@ describe( 'UnitControl', () => {
519
615
  />
520
616
  );
521
617
 
522
- const input = getInput();
618
+ // Input type is `text` when the `isPressEnterToChange` prop is passed
619
+ const input = getInput( { isInputTypeText: true } );
523
620
  await user.clear( input );
524
621
  await user.type( input, '55 em' );
525
- user.keyboard( '{Enter}' );
622
+ await user.keyboard( '{Enter}' );
526
623
 
527
624
  expect( state ).toBe( '55em' );
528
625
  } );
529
626
 
530
627
  it( 'should parse PX unit from input', async () => {
531
- const { user } = render(
628
+ const user = userEvent.setup( {
629
+ advanceTimers: jest.advanceTimersByTime,
630
+ } );
631
+
632
+ let state = '10px';
633
+ const setState = jest.fn( ( nextState ) => ( state = nextState ) );
634
+
635
+ render(
532
636
  <UnitControl
533
637
  value={ state }
534
638
  onChange={ setState }
@@ -536,16 +640,24 @@ describe( 'UnitControl', () => {
536
640
  />
537
641
  );
538
642
 
539
- const input = getInput();
643
+ // Input type is `text` when the `isPressEnterToChange` prop is passed
644
+ const input = getInput( { isInputTypeText: true } );
540
645
  await user.clear( input );
541
646
  await user.type( input, '61 PX' );
542
- user.keyboard( '{Enter}' );
647
+ await user.keyboard( '{Enter}' );
543
648
 
544
649
  expect( state ).toBe( '61px' );
545
650
  } );
546
651
 
547
652
  it( 'should parse EM unit from input', async () => {
548
- const { user } = render(
653
+ const user = userEvent.setup( {
654
+ advanceTimers: jest.advanceTimersByTime,
655
+ } );
656
+
657
+ let state = '10px';
658
+ const setState = jest.fn( ( nextState ) => ( state = nextState ) );
659
+
660
+ render(
549
661
  <UnitControl
550
662
  value={ state }
551
663
  onChange={ setState }
@@ -553,16 +665,24 @@ describe( 'UnitControl', () => {
553
665
  />
554
666
  );
555
667
 
556
- const input = getInput();
668
+ // Input type is `text` when the `isPressEnterToChange` prop is passed
669
+ const input = getInput( { isInputTypeText: true } );
557
670
  await user.clear( input );
558
671
  await user.type( input, '55 em' );
559
- user.keyboard( '{Enter}' );
672
+ await user.keyboard( '{Enter}' );
560
673
 
561
674
  expect( state ).toBe( '55em' );
562
675
  } );
563
676
 
564
677
  it( 'should parse % unit from input', async () => {
565
- const { user } = render(
678
+ const user = userEvent.setup( {
679
+ advanceTimers: jest.advanceTimersByTime,
680
+ } );
681
+
682
+ let state = '10px';
683
+ const setState = jest.fn( ( nextState ) => ( state = nextState ) );
684
+
685
+ render(
566
686
  <UnitControl
567
687
  value={ state }
568
688
  onChange={ setState }
@@ -570,16 +690,24 @@ describe( 'UnitControl', () => {
570
690
  />
571
691
  );
572
692
 
573
- const input = getInput();
693
+ // Input type is `text` when the `isPressEnterToChange` prop is passed
694
+ const input = getInput( { isInputTypeText: true } );
574
695
  await user.clear( input );
575
696
  await user.type( input, '-10 %' );
576
- user.keyboard( '{Enter}' );
697
+ await user.keyboard( '{Enter}' );
577
698
 
578
699
  expect( state ).toBe( '-10%' );
579
700
  } );
580
701
 
581
702
  it( 'should parse REM unit from input', async () => {
582
- const { user } = render(
703
+ const user = userEvent.setup( {
704
+ advanceTimers: jest.advanceTimersByTime,
705
+ } );
706
+
707
+ let state = '10px';
708
+ const setState = jest.fn( ( nextState ) => ( state = nextState ) );
709
+
710
+ render(
583
711
  <UnitControl
584
712
  value={ state }
585
713
  onChange={ setState }
@@ -587,10 +715,11 @@ describe( 'UnitControl', () => {
587
715
  />
588
716
  );
589
717
 
590
- const input = getInput();
718
+ // Input type is `text` when the `isPressEnterToChange` prop is passed
719
+ const input = getInput( { isInputTypeText: true } );
591
720
  await user.clear( input );
592
721
  await user.type( input, '123 rEm ' );
593
- user.keyboard( '{Enter}' );
722
+ await user.keyboard( '{Enter}' );
594
723
 
595
724
  expect( state ).toBe( '123rem' );
596
725
  } );
@@ -604,7 +733,7 @@ describe( 'UnitControl', () => {
604
733
 
605
734
  rerender( <UnitControl value={ '20vh' } /> );
606
735
 
607
- await waitFor( () => expect( select.value ).toBe( 'vh' ) );
736
+ expect( select.value ).toBe( 'vh' );
608
737
  } );
609
738
 
610
739
  it( 'should fallback to default unit if parsed unit is invalid', () => {
@@ -625,7 +754,7 @@ describe( 'UnitControl', () => {
625
754
  );
626
755
 
627
756
  const select = getSelect();
628
- const options = select.querySelectorAll( 'option' );
757
+ const options = getSelectOptions();
629
758
 
630
759
  expect( select.value ).toBe( '%' );
631
760
  expect( options.length ).toBe( 3 );