@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
@@ -0,0 +1,75 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useState, useEffect } from '@wordpress/element';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import DateTimePicker from '..';
15
+ import { daysFromNow, isWeekend } from './utils';
16
+
17
+ const meta: ComponentMeta< typeof DateTimePicker > = {
18
+ title: 'Components/DateTimePicker',
19
+ component: DateTimePicker,
20
+ argTypes: {
21
+ currentDate: { control: 'date' },
22
+ onChange: { action: 'onChange', control: { type: null } },
23
+ },
24
+ parameters: {
25
+ controls: { expanded: true },
26
+ docs: { source: { state: 'open' } },
27
+ },
28
+ };
29
+ export default meta;
30
+
31
+ const Template: ComponentStory< typeof DateTimePicker > = ( {
32
+ currentDate,
33
+ onChange,
34
+ ...args
35
+ } ) => {
36
+ const [ date, setDate ] = useState( currentDate );
37
+ useEffect( () => {
38
+ setDate( currentDate );
39
+ }, [ currentDate ] );
40
+ return (
41
+ <DateTimePicker
42
+ { ...args }
43
+ currentDate={ date }
44
+ onChange={ ( newDate ) => {
45
+ setDate( newDate );
46
+ onChange?.( newDate );
47
+ } }
48
+ />
49
+ );
50
+ };
51
+
52
+ export const Default: ComponentStory< typeof DateTimePicker > = Template.bind(
53
+ {}
54
+ );
55
+
56
+ export const WithEvents: ComponentStory<
57
+ typeof DateTimePicker
58
+ > = Template.bind( {} );
59
+ WithEvents.args = {
60
+ currentDate: new Date(),
61
+ events: [
62
+ { date: daysFromNow( 2 ) },
63
+ { date: daysFromNow( 4 ) },
64
+ { date: daysFromNow( 6 ) },
65
+ { date: daysFromNow( 8 ) },
66
+ ],
67
+ };
68
+
69
+ export const WithInvalidDates: ComponentStory<
70
+ typeof DateTimePicker
71
+ > = Template.bind( {} );
72
+ WithInvalidDates.args = {
73
+ currentDate: new Date(),
74
+ isInvalidDate: isWeekend,
75
+ };
@@ -0,0 +1,51 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useState, useEffect } from '@wordpress/element';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import TimePicker from '../time';
15
+
16
+ const meta: ComponentMeta< typeof TimePicker > = {
17
+ title: 'Components/TimePicker',
18
+ component: TimePicker,
19
+ argTypes: {
20
+ currentTime: { control: 'date' },
21
+ onChange: { action: 'onChange', control: { type: null } },
22
+ },
23
+ parameters: {
24
+ controls: { expanded: true },
25
+ docs: { source: { state: 'open' } },
26
+ },
27
+ };
28
+ export default meta;
29
+
30
+ const Template: ComponentStory< typeof TimePicker > = ( {
31
+ currentTime,
32
+ onChange,
33
+ ...args
34
+ } ) => {
35
+ const [ time, setTime ] = useState( currentTime );
36
+ useEffect( () => {
37
+ setTime( currentTime );
38
+ }, [ currentTime ] );
39
+ return (
40
+ <TimePicker
41
+ { ...args }
42
+ currentTime={ time }
43
+ onChange={ ( newTime ) => {
44
+ setTime( newTime );
45
+ onChange?.( newTime );
46
+ } }
47
+ />
48
+ );
49
+ };
50
+
51
+ export const Default: ComponentStory< typeof TimePicker > = Template.bind( {} );
@@ -0,0 +1,9 @@
1
+ export function daysFromNow( days: number ) {
2
+ const date = new Date();
3
+ date.setDate( date.getDate() + days );
4
+ return date;
5
+ }
6
+
7
+ export function isWeekend( date: Date ) {
8
+ return date.getDay() === 0 || date.getDay() === 6;
9
+ }
@@ -0,0 +1,127 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import moment from 'moment';
5
+ import { render, screen } from '@testing-library/react';
6
+ import userEvent from '@testing-library/user-event';
7
+ import 'react-dates/initialize';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import DatePicker from '../date';
13
+
14
+ describe( 'DatePicker', () => {
15
+ it( 'should highlight the current date', () => {
16
+ render( <DatePicker currentDate="2022-05-02T11:00:00" /> );
17
+
18
+ expect(
19
+ screen.getByRole( 'button', { name: 'Monday, May 2, 2022' } )
20
+ ).toHaveClass( 'CalendarDay__selected' );
21
+
22
+ // Expect React deprecation warning due to 'react-dates' using outdated
23
+ // React lifecycle methods.
24
+ // https://github.com/react-dates/react-dates/issues/1748
25
+ expect( console ).toHaveWarned();
26
+ } );
27
+
28
+ it( "should highlight today's date when not provided a currentDate", () => {
29
+ render( <DatePicker /> );
30
+
31
+ const todayDescription = moment().format( 'dddd, MMM D, YYYY' );
32
+ expect(
33
+ screen.getByRole( 'button', { name: todayDescription } )
34
+ ).toHaveClass( 'CalendarDay__selected' );
35
+ } );
36
+
37
+ it( 'should call onChange when a day is selected', async () => {
38
+ const user = userEvent.setup( { delay: null } );
39
+
40
+ const onChange = jest.fn();
41
+
42
+ render(
43
+ <DatePicker
44
+ currentDate="2022-05-02T11:00:00"
45
+ onChange={ onChange }
46
+ />
47
+ );
48
+
49
+ await user.click(
50
+ screen.getByRole( 'button', { name: 'Friday, May 20, 2022' } )
51
+ );
52
+
53
+ expect( onChange ).toHaveBeenCalledWith( '2022-05-20T11:00:00' );
54
+ } );
55
+
56
+ it( 'should call onMonthPreviewed and onChange when a day in a different month is selected', async () => {
57
+ const user = userEvent.setup( { delay: null } );
58
+
59
+ const onMonthPreviewed = jest.fn();
60
+ const onChange = jest.fn();
61
+
62
+ render(
63
+ <DatePicker
64
+ currentDate="2022-05-02T11:00:00"
65
+ onMonthPreviewed={ onMonthPreviewed }
66
+ onChange={ onChange }
67
+ />
68
+ );
69
+
70
+ await user.click(
71
+ screen.getByRole( 'button', {
72
+ name: 'Move forward to switch to the next month.',
73
+ } )
74
+ );
75
+
76
+ expect( onMonthPreviewed ).toHaveBeenCalledWith(
77
+ expect.stringMatching( /^2022-06/ )
78
+ );
79
+
80
+ await user.click(
81
+ screen.getByRole( 'button', { name: 'Monday, June 20, 2022' } )
82
+ );
83
+
84
+ expect( onChange ).toHaveBeenCalledWith( '2022-06-20T11:00:00' );
85
+ } );
86
+
87
+ it( 'should highlight events on the calendar', () => {
88
+ render(
89
+ <DatePicker
90
+ currentDate="2022-05-02T11:00:00"
91
+ events={ [
92
+ { date: new Date( '2022-05-04T00:00:00' ) },
93
+ { date: new Date( '2022-05-19T00:00:00' ) },
94
+ ] }
95
+ />
96
+ );
97
+
98
+ expect(
99
+ screen
100
+ .getAllByLabelText( 'There is 1 event.', { exact: false } )
101
+ .map( ( day ) => day.getAttribute( 'aria-label' ) )
102
+ ).toEqual( [
103
+ 'Wednesday, May 4, 2022. There is 1 event.',
104
+ 'Thursday, May 19, 2022. There is 1 event.',
105
+ ] );
106
+ } );
107
+
108
+ it( 'should not allow invalid date to be selected', async () => {
109
+ const user = userEvent.setup( { delay: null } );
110
+
111
+ const onChange = jest.fn();
112
+
113
+ render(
114
+ <DatePicker
115
+ currentDate="2022-05-02T11:00:00"
116
+ onChange={ onChange }
117
+ isInvalidDate={ ( date ) => date.getDate() === 20 }
118
+ />
119
+ );
120
+
121
+ await user.click(
122
+ screen.getByRole( 'button', { name: 'Friday, May 20, 2022' } )
123
+ );
124
+
125
+ expect( onChange ).not.toHaveBeenCalledWith( '2022-05-20T11:00:00' );
126
+ } );
127
+ } );
@@ -237,11 +237,21 @@ describe( 'TimePicker', () => {
237
237
  />
238
238
  );
239
239
 
240
- expect( screen.getByLabelText( 'Month' ).value ).toBe( '07' );
241
- expect( screen.getByLabelText( 'Day' ).value ).toBe( '13' );
242
- expect( screen.getByLabelText( 'Year' ).value ).toBe( '2020' );
243
- expect( screen.getByLabelText( 'Hours' ).value ).toBe( '06' );
244
- expect( screen.getByLabelText( 'Minutes' ).value ).toBe( '00' );
240
+ expect(
241
+ ( screen.getByLabelText( 'Month' ) as HTMLInputElement ).value
242
+ ).toBe( '07' );
243
+ expect(
244
+ ( screen.getByLabelText( 'Day' ) as HTMLInputElement ).value
245
+ ).toBe( '13' );
246
+ expect(
247
+ ( screen.getByLabelText( 'Year' ) as HTMLInputElement ).value
248
+ ).toBe( '2020' );
249
+ expect(
250
+ ( screen.getByLabelText( 'Hours' ) as HTMLInputElement ).value
251
+ ).toBe( '06' );
252
+ expect(
253
+ ( screen.getByLabelText( 'Minutes' ) as HTMLInputElement ).value
254
+ ).toBe( '00' );
245
255
  /**
246
256
  * This is not ideal, but best of we can do for now until we refactor
247
257
  * AM/PM into accessible elements, like radio buttons.
@@ -267,14 +277,12 @@ describe( 'TimePicker', () => {
267
277
  </form>
268
278
  );
269
279
 
270
- const form = screen.getByRole( 'form' );
280
+ const form = screen.getByRole( 'form' ) as HTMLFormElement;
271
281
 
272
- let monthInputIndex = [].indexOf.call(
273
- form.elements,
282
+ let monthInputIndex = Array.from( form.elements ).indexOf(
274
283
  screen.getByLabelText( 'Month' )
275
284
  );
276
- let dayInputIndex = [].indexOf.call(
277
- form.elements,
285
+ let dayInputIndex = Array.from( form.elements ).indexOf(
278
286
  screen.getByLabelText( 'Day' )
279
287
  );
280
288
 
@@ -290,12 +298,10 @@ describe( 'TimePicker', () => {
290
298
  </form>
291
299
  );
292
300
 
293
- monthInputIndex = [].indexOf.call(
294
- form.elements,
301
+ monthInputIndex = Array.from( form.elements ).indexOf(
295
302
  screen.getByLabelText( 'Month' )
296
303
  );
297
- dayInputIndex = [].indexOf.call(
298
- form.elements,
304
+ dayInputIndex = Array.from( form.elements ).indexOf(
299
305
  screen.getByLabelText( 'Day' )
300
306
  );
301
307
 
@@ -313,11 +319,20 @@ describe( 'TimePicker', () => {
313
319
  />
314
320
  );
315
321
 
316
- const monthInput = screen.getByLabelText( 'Month' ).value;
317
- const dayInput = screen.getByLabelText( 'Day' ).value;
318
- const yearInput = screen.getByLabelText( 'Year' ).value;
319
- const hoursInput = screen.getByLabelText( 'Hours' ).value;
320
- const minutesInput = screen.getByLabelText( 'Minutes' ).value;
322
+ const monthInput = ( screen.getByLabelText(
323
+ 'Month'
324
+ ) as HTMLInputElement ).value;
325
+ const dayInput = ( screen.getByLabelText( 'Day' ) as HTMLInputElement )
326
+ .value;
327
+ const yearInput = ( screen.getByLabelText(
328
+ 'Year'
329
+ ) as HTMLInputElement ).value;
330
+ const hoursInput = ( screen.getByLabelText(
331
+ 'Hours'
332
+ ) as HTMLInputElement ).value;
333
+ const minutesInput = ( screen.getByLabelText(
334
+ 'Minutes'
335
+ ) as HTMLInputElement ).value;
321
336
 
322
337
  expect( Number.isNaN( parseInt( monthInput, 10 ) ) ).toBe( false );
323
338
  expect( Number.isNaN( parseInt( dayInput, 10 ) ) ).toBe( false );
@@ -14,7 +14,7 @@ describe( 'getMomentDate', () => {
14
14
  const momentDate = getMomentDate( currentDate );
15
15
 
16
16
  expect( moment.isMoment( momentDate ) ).toBe( true );
17
- expect( momentDate.isSame( moment( currentDate ) ) ).toBe( true );
17
+ expect( momentDate?.isSame( moment( currentDate ) ) ).toBe( true );
18
18
  } );
19
19
 
20
20
  it( 'should return null when given a null argument', () => {
@@ -4,6 +4,8 @@
4
4
  import classnames from 'classnames';
5
5
  import { isInteger } from 'lodash';
6
6
  import moment from 'moment';
7
+ import type { FocusEvent } from 'react';
8
+ import type { Moment } from 'moment';
7
9
 
8
10
  /**
9
11
  * WordPress dependencies
@@ -22,25 +24,18 @@ import { __ } from '@wordpress/i18n';
22
24
  import Button from '../button';
23
25
  import ButtonGroup from '../button-group';
24
26
  import TimeZone from './timezone';
27
+ import type { WordPressComponentProps } from '../ui/context';
28
+ import type { UpdateOnBlurAsIntegerFieldProps, TimePickerProps } from './types';
25
29
 
26
- /**
27
- * Module Constants
28
- */
29
30
  const TIMEZONELESS_FORMAT = 'YYYY-MM-DDTHH:mm:ss';
30
31
 
31
- function from12hTo24h( hours, isPm ) {
32
+ function from12hTo24h( hours: number, isPm: boolean ) {
32
33
  return isPm ? ( ( hours % 12 ) + 12 ) % 24 : hours % 12;
33
34
  }
34
35
 
35
36
  /**
36
- * <UpdateOnBlurAsIntegerField>
37
- * A shared component to parse, validate, and handle remounting of the underlying form field element like <input> and <select>.
38
- *
39
- * @param {Object} props Component props.
40
- * @param {string} props.as Render the component as specific element tag, defaults to "input".
41
- * @param {number|string} props.value The default value of the component which will be parsed to integer.
42
- * @param {Function} props.onUpdate Call back when blurred and validated.
43
- * @param {string} [props.className]
37
+ * A shared component to parse, validate, and handle remounting of the
38
+ * underlying form field element like <input> and <select>.
44
39
  */
45
40
  function UpdateOnBlurAsIntegerField( {
46
41
  as,
@@ -48,11 +43,11 @@ function UpdateOnBlurAsIntegerField( {
48
43
  onUpdate,
49
44
  className,
50
45
  ...props
51
- } ) {
52
- function handleBlur( event ) {
46
+ }: WordPressComponentProps< UpdateOnBlurAsIntegerFieldProps, 'input', true > ) {
47
+ function handleBlur( event: FocusEvent< HTMLInputElement > ) {
53
48
  const { target } = event;
54
49
 
55
- if ( value === target.value ) {
50
+ if ( String( value ) === target.value ) {
56
51
  return;
57
52
  }
58
53
 
@@ -65,10 +60,10 @@ function UpdateOnBlurAsIntegerField( {
65
60
  ( typeof props.min !== 'undefined' && parsedValue < props.min )
66
61
  ) {
67
62
  // If validation failed, reset the value to the previous valid value.
68
- target.value = value;
63
+ target.value = String( value );
69
64
  } else {
70
65
  // Otherwise, it's valid, call onUpdate.
71
- onUpdate( target.name, parsedValue );
66
+ onUpdate( parsedValue );
72
67
  }
73
68
  }
74
69
 
@@ -86,19 +81,33 @@ function UpdateOnBlurAsIntegerField( {
86
81
  }
87
82
 
88
83
  /**
89
- * <TimePicker>
84
+ * TimePicker is a React component that renders a clock for time selection.
85
+ *
86
+ * ```jsx
87
+ * import { TimePicker } from '@wordpress/components';
88
+ * import { useState } from '@wordpress/element';
90
89
  *
91
- * @typedef {Date|string|number} WPValidDateTimeFormat
90
+ * const MyTimePicker = () => {
91
+ * const [ time, setTime ] = useState( new Date() );
92
92
  *
93
- * @param {Object} props Component props.
94
- * @param {boolean} props.is12Hour Should the time picker showed in 12 hour format or 24 hour format.
95
- * @param {WPValidDateTimeFormat} props.currentTime The initial current time the time picker should render.
96
- * @param {Function} props.onChange Callback function when the date changed.
93
+ * return (
94
+ * <TimePicker
95
+ * currentTime={ date }
96
+ * onChange={ ( newTime ) => setTime( newTime ) }
97
+ * is12Hour
98
+ * />
99
+ * );
100
+ * };
101
+ * ```
97
102
  */
98
- export function TimePicker( { is12Hour, currentTime, onChange } ) {
103
+ export function TimePicker( {
104
+ is12Hour,
105
+ currentTime,
106
+ onChange,
107
+ }: TimePickerProps ) {
99
108
  const [ date, setDate ] = useState( () =>
100
109
  // Truncate the date at the minutes, see: #15495.
101
- moment( currentTime ).startOf( 'minutes' )
110
+ currentTime ? moment( currentTime ).startOf( 'minutes' ) : moment()
102
111
  );
103
112
 
104
113
  // Reset the state when currentTime changed.
@@ -115,7 +124,7 @@ export function TimePicker( { is12Hour, currentTime, onChange } ) {
115
124
  year: date.format( 'YYYY' ),
116
125
  minutes: date.format( 'mm' ),
117
126
  hours: date.format( is12Hour ? 'hh' : 'HH' ),
118
- am: date.format( 'H' ) <= 11 ? 'AM' : 'PM',
127
+ am: Number( date.format( 'H' ) ) <= 11 ? 'AM' : 'PM',
119
128
  } ),
120
129
  [ date, is12Hour ]
121
130
  );
@@ -124,28 +133,30 @@ export function TimePicker( { is12Hour, currentTime, onChange } ) {
124
133
  * Function that sets the date state and calls the onChange with a new date.
125
134
  * The date is truncated at the minutes.
126
135
  *
127
- * @param {Object} newDate The date object.
136
+ * @param {Moment} newDate The date object.
128
137
  */
129
- function changeDate( newDate ) {
138
+ function changeDate( newDate: Moment ) {
130
139
  setDate( newDate );
131
- onChange( newDate.format( TIMEZONELESS_FORMAT ) );
140
+ onChange?.( newDate.format( TIMEZONELESS_FORMAT ) );
132
141
  }
133
142
 
134
- function update( name, value ) {
135
- // If the 12-hour format is being used and the 'PM' period is selected, then
136
- // the incoming value (which ranges 1-12) should be increased by 12 to match
137
- // the expected 24-hour format.
138
- let adjustedValue = value;
139
- if ( name === 'hours' && is12Hour ) {
140
- adjustedValue = from12hTo24h( value, am === 'PM' );
141
- }
143
+ function update( name: 'date' | 'month' | 'year' | 'hours' | 'minutes' ) {
144
+ return ( value: number ) => {
145
+ // If the 12-hour format is being used and the 'PM' period is selected, then
146
+ // the incoming value (which ranges 1-12) should be increased by 12 to match
147
+ // the expected 24-hour format.
148
+ let adjustedValue = value;
149
+ if ( name === 'hours' && is12Hour ) {
150
+ adjustedValue = from12hTo24h( value, am === 'PM' );
151
+ }
142
152
 
143
- // Clone the date and call the specific setter function according to `name`.
144
- const newDate = date.clone()[ name ]( adjustedValue );
145
- changeDate( newDate );
153
+ // Clone the date and call the specific setter function according to `name`.
154
+ const newDate = date.clone()[ name ]( adjustedValue );
155
+ changeDate( newDate );
156
+ };
146
157
  }
147
158
 
148
- function updateAmPm( value ) {
159
+ function updateAmPm( value: 'AM' | 'PM' ) {
149
160
  return () => {
150
161
  if ( am === value ) {
151
162
  return;
@@ -173,7 +184,7 @@ export function TimePicker( { is12Hour, currentTime, onChange } ) {
173
184
  step={ 1 }
174
185
  min={ 1 }
175
186
  max={ 31 }
176
- onUpdate={ update }
187
+ onUpdate={ update( 'date' ) }
177
188
  />
178
189
  </div>
179
190
  );
@@ -187,7 +198,7 @@ export function TimePicker( { is12Hour, currentTime, onChange } ) {
187
198
  name="month"
188
199
  value={ month }
189
200
  // The value starts from 0, so we have to -1 when setting month.
190
- onUpdate={ ( key, value ) => update( key, value - 1 ) }
201
+ onUpdate={ ( value ) => update( 'month' )( value - 1 ) }
191
202
  >
192
203
  <option value="01">{ __( 'January' ) }</option>
193
204
  <option value="02">{ __( 'February' ) }</option>
@@ -236,7 +247,7 @@ export function TimePicker( { is12Hour, currentTime, onChange } ) {
236
247
  min={ 0 }
237
248
  max={ 9999 }
238
249
  value={ year }
239
- onUpdate={ update }
250
+ onUpdate={ update( 'year' ) }
240
251
  />
241
252
  </div>
242
253
  </div>
@@ -257,7 +268,7 @@ export function TimePicker( { is12Hour, currentTime, onChange } ) {
257
268
  min={ is12Hour ? 1 : 0 }
258
269
  max={ is12Hour ? 12 : 23 }
259
270
  value={ hours }
260
- onUpdate={ update }
271
+ onUpdate={ update( 'hours' ) }
261
272
  />
262
273
  <span
263
274
  className="components-datetime__time-separator"
@@ -274,7 +285,7 @@ export function TimePicker( { is12Hour, currentTime, onChange } ) {
274
285
  min={ 0 }
275
286
  max={ 59 }
276
287
  value={ minutes }
277
- onUpdate={ update }
288
+ onUpdate={ update( 'minutes' ) }
278
289
  />
279
290
  </div>
280
291
  { is12Hour && (
@@ -10,7 +10,8 @@ import { __experimentalGetSettings as getDateSettings } from '@wordpress/date';
10
10
  import Tooltip from '../tooltip';
11
11
 
12
12
  /**
13
- * Displays timezone information when user timezone is different from site timezone.
13
+ * Displays timezone information when user timezone is different from site
14
+ * timezone.
14
15
  */
15
16
  const TimeZone = () => {
16
17
  const { timezone } = getDateSettings();
@@ -24,9 +25,9 @@ const TimeZone = () => {
24
25
  return null;
25
26
  }
26
27
 
27
- const offsetSymbol = timezone.offset >= 0 ? '+' : '';
28
+ const offsetSymbol = Number( timezone.offset ) >= 0 ? '+' : '';
28
29
  const zoneAbbr =
29
- '' !== timezone.abbr && isNaN( timezone.abbr )
30
+ '' !== timezone.abbr && isNaN( Number( timezone.abbr ) )
30
31
  ? timezone.abbr
31
32
  : `UTC${ offsetSymbol }${ timezone.offset }`;
32
33