@wordpress/components 28.1.0 → 28.3.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 (451) hide show
  1. package/CHANGELOG.md +179 -120
  2. package/build/animation/index.js.map +1 -1
  3. package/build/autocomplete/autocompleter-ui.js +1 -0
  4. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  5. package/build/autocomplete/index.js.map +1 -1
  6. package/build/base-control/index.js +14 -7
  7. package/build/base-control/index.js.map +1 -1
  8. package/build/border-box-control/border-box-control-visualizer/component.js +0 -4
  9. package/build/border-box-control/border-box-control-visualizer/component.js.map +1 -1
  10. package/build/button/index.js +5 -3
  11. package/build/button/index.js.map +1 -1
  12. package/build/button/types.js.map +1 -1
  13. package/build/combobox-control/index.js +4 -1
  14. package/build/combobox-control/index.js.map +1 -1
  15. package/build/composite/current/index.js.map +1 -1
  16. package/build/custom-select-control-v2/custom-select.js +58 -36
  17. package/build/custom-select-control-v2/custom-select.js.map +1 -1
  18. package/build/custom-select-control-v2/default-component/index.js +0 -1
  19. package/build/custom-select-control-v2/default-component/index.js.map +1 -1
  20. package/build/custom-select-control-v2/item.js +2 -0
  21. package/build/custom-select-control-v2/item.js.map +1 -1
  22. package/build/custom-select-control-v2/legacy-component/index.js +33 -15
  23. package/build/custom-select-control-v2/legacy-component/index.js.map +1 -1
  24. package/build/custom-select-control-v2/styles.js +92 -65
  25. package/build/custom-select-control-v2/styles.js.map +1 -1
  26. package/build/custom-select-control-v2/types.js.map +1 -1
  27. package/build/date-time/date-time/index.js +3 -1
  28. package/build/date-time/date-time/index.js.map +1 -1
  29. package/build/date-time/index.js +7 -0
  30. package/build/date-time/index.js.map +1 -1
  31. package/build/date-time/time/index.js +62 -145
  32. package/build/date-time/time/index.js.map +1 -1
  33. package/build/date-time/time-input/index.js +159 -0
  34. package/build/date-time/time-input/index.js.map +1 -0
  35. package/build/date-time/types.js.map +1 -1
  36. package/build/date-time/utils.js +64 -0
  37. package/build/date-time/utils.js.map +1 -1
  38. package/build/disclosure/index.js +0 -1
  39. package/build/disclosure/index.js.map +1 -1
  40. package/build/divider/component.js +0 -1
  41. package/build/divider/component.js.map +1 -1
  42. package/build/divider/types.js.map +1 -1
  43. package/build/drop-zone/index.js +16 -79
  44. package/build/drop-zone/index.js.map +1 -1
  45. package/build/dropdown-menu/index.js +1 -0
  46. package/build/dropdown-menu/index.js.map +1 -1
  47. package/build/dropdown-menu-v2/index.js +0 -1
  48. package/build/dropdown-menu-v2/index.js.map +1 -1
  49. package/build/dropdown-menu-v2/styles.js +15 -16
  50. package/build/dropdown-menu-v2/styles.js.map +1 -1
  51. package/build/dropdown-menu-v2/types.js.map +1 -1
  52. package/build/font-size-picker/font-size-picker-select.js +2 -2
  53. package/build/font-size-picker/font-size-picker-select.js.map +1 -1
  54. package/build/font-size-picker/index.js +1 -1
  55. package/build/font-size-picker/index.js.map +1 -1
  56. package/build/font-size-picker/utils.js +0 -4
  57. package/build/font-size-picker/utils.js.map +1 -1
  58. package/build/form-token-field/token.js +4 -1
  59. package/build/form-token-field/token.js.map +1 -1
  60. package/build/higher-order/with-spoken-messages/index.js +1 -2
  61. package/build/higher-order/with-spoken-messages/index.js.map +1 -1
  62. package/build/lock-unlock.js +1 -1
  63. package/build/lock-unlock.js.map +1 -1
  64. package/build/menu-items-choice/types.js.map +1 -1
  65. package/build/palette-edit/index.js +30 -38
  66. package/build/palette-edit/index.js.map +1 -1
  67. package/build/palette-edit/types.js.map +1 -1
  68. package/build/popover/index.js +0 -4
  69. package/build/popover/index.js.map +1 -1
  70. package/build/popover/utils.js +0 -1
  71. package/build/popover/utils.js.map +1 -1
  72. package/build/private-apis.js +2 -4
  73. package/build/private-apis.js.map +1 -1
  74. package/build/progress-bar/styles.js +19 -13
  75. package/build/progress-bar/styles.js.map +1 -1
  76. package/build/radio-group/context.js +0 -1
  77. package/build/radio-group/context.js.map +1 -1
  78. package/build/radio-group/index.js +0 -1
  79. package/build/radio-group/index.js.map +1 -1
  80. package/build/radio-group/radio.js +0 -1
  81. package/build/radio-group/radio.js.map +1 -1
  82. package/build/range-control/index.js +4 -1
  83. package/build/range-control/index.js.map +1 -1
  84. package/build/range-control/styles/range-control-styles.js +34 -28
  85. package/build/range-control/styles/range-control-styles.js.map +1 -1
  86. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  87. package/build/select-control/index.js +1 -2
  88. package/build/select-control/index.js.map +1 -1
  89. package/build/select-control/styles/select-control-styles.js +13 -8
  90. package/build/select-control/styles/select-control-styles.js.map +1 -1
  91. package/build/tab-panel/index.js +0 -1
  92. package/build/tab-panel/index.js.map +1 -1
  93. package/build/tabs/index.js +0 -1
  94. package/build/tabs/index.js.map +1 -1
  95. package/build/tabs/styles.js +3 -5
  96. package/build/tabs/styles.js.map +1 -1
  97. package/build/tabs/tablist.js +148 -37
  98. package/build/tabs/tablist.js.map +1 -1
  99. package/build/tabs/types.js.map +1 -1
  100. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +0 -2
  101. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  102. package/build/toggle-group-control/toggle-group-control/component.js +0 -2
  103. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  104. package/build/toggle-group-control/toggle-group-control-option-base/component.js +0 -4
  105. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  106. package/build/toolbar/toolbar/toolbar-container.js +0 -1
  107. package/build/toolbar/toolbar/toolbar-container.js.map +1 -1
  108. package/build/toolbar/toolbar/types.js.map +1 -1
  109. package/build/toolbar/toolbar-button/index.js +27 -19
  110. package/build/toolbar/toolbar-button/index.js.map +1 -1
  111. package/build/toolbar/toolbar-button/types.js.map +1 -1
  112. package/build/toolbar/toolbar-context/index.js +0 -1
  113. package/build/toolbar/toolbar-context/index.js.map +1 -1
  114. package/build/toolbar/toolbar-item/index.js +1 -1
  115. package/build/toolbar/toolbar-item/index.js.map +1 -1
  116. package/build/tooltip/index.js +3 -2
  117. package/build/tooltip/index.js.map +1 -1
  118. package/build/tooltip/types.js.map +1 -1
  119. package/build/unit-control/index.js +3 -3
  120. package/build/unit-control/index.js.map +1 -1
  121. package/build/unit-control/styles/unit-control-styles.js +7 -7
  122. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  123. package/build/utils/hooks/use-update-effect.js +4 -1
  124. package/build/utils/hooks/use-update-effect.js.map +1 -1
  125. package/build-module/animation/index.js +0 -1
  126. package/build-module/animation/index.js.map +1 -1
  127. package/build-module/autocomplete/autocompleter-ui.js +1 -0
  128. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  129. package/build-module/autocomplete/index.js.map +1 -1
  130. package/build-module/base-control/index.js +13 -6
  131. package/build-module/base-control/index.js.map +1 -1
  132. package/build-module/border-box-control/border-box-control-visualizer/component.js +0 -4
  133. package/build-module/border-box-control/border-box-control-visualizer/component.js.map +1 -1
  134. package/build-module/button/index.js +5 -3
  135. package/build-module/button/index.js.map +1 -1
  136. package/build-module/button/types.js.map +1 -1
  137. package/build-module/combobox-control/index.js +4 -1
  138. package/build-module/combobox-control/index.js.map +1 -1
  139. package/build-module/composite/current/index.js +0 -3
  140. package/build-module/composite/current/index.js.map +1 -1
  141. package/build-module/custom-select-control-v2/custom-select.js +59 -38
  142. package/build-module/custom-select-control-v2/custom-select.js.map +1 -1
  143. package/build-module/custom-select-control-v2/default-component/index.js +0 -1
  144. package/build-module/custom-select-control-v2/default-component/index.js.map +1 -1
  145. package/build-module/custom-select-control-v2/item.js +2 -0
  146. package/build-module/custom-select-control-v2/item.js.map +1 -1
  147. package/build-module/custom-select-control-v2/legacy-component/index.js +33 -16
  148. package/build-module/custom-select-control-v2/legacy-component/index.js.map +1 -1
  149. package/build-module/custom-select-control-v2/styles.js +90 -63
  150. package/build-module/custom-select-control-v2/styles.js.map +1 -1
  151. package/build-module/custom-select-control-v2/types.js.map +1 -1
  152. package/build-module/date-time/date-time/index.js +4 -1
  153. package/build-module/date-time/date-time/index.js.map +1 -1
  154. package/build-module/date-time/index.js +2 -1
  155. package/build-module/date-time/index.js.map +1 -1
  156. package/build-module/date-time/time/index.js +65 -149
  157. package/build-module/date-time/time/index.js.map +1 -1
  158. package/build-module/date-time/time-input/index.js +151 -0
  159. package/build-module/date-time/time-input/index.js.map +1 -0
  160. package/build-module/date-time/types.js.map +1 -1
  161. package/build-module/date-time/utils.js +61 -0
  162. package/build-module/date-time/utils.js.map +1 -1
  163. package/build-module/disclosure/index.js +0 -1
  164. package/build-module/disclosure/index.js.map +1 -1
  165. package/build-module/divider/component.js +0 -1
  166. package/build-module/divider/component.js.map +1 -1
  167. package/build-module/divider/types.js.map +1 -1
  168. package/build-module/drop-zone/index.js +17 -80
  169. package/build-module/drop-zone/index.js.map +1 -1
  170. package/build-module/dropdown-menu/index.js +1 -0
  171. package/build-module/dropdown-menu/index.js.map +1 -1
  172. package/build-module/dropdown-menu-v2/index.js +0 -1
  173. package/build-module/dropdown-menu-v2/index.js.map +1 -1
  174. package/build-module/dropdown-menu-v2/styles.js +14 -15
  175. package/build-module/dropdown-menu-v2/styles.js.map +1 -1
  176. package/build-module/dropdown-menu-v2/types.js.map +1 -1
  177. package/build-module/font-size-picker/font-size-picker-select.js +1 -1
  178. package/build-module/font-size-picker/font-size-picker-select.js.map +1 -1
  179. package/build-module/font-size-picker/index.js +1 -1
  180. package/build-module/font-size-picker/index.js.map +1 -1
  181. package/build-module/font-size-picker/utils.js +0 -4
  182. package/build-module/font-size-picker/utils.js.map +1 -1
  183. package/build-module/form-token-field/token.js +4 -1
  184. package/build-module/form-token-field/token.js.map +1 -1
  185. package/build-module/higher-order/with-spoken-messages/index.js +1 -2
  186. package/build-module/higher-order/with-spoken-messages/index.js.map +1 -1
  187. package/build-module/lock-unlock.js +1 -1
  188. package/build-module/lock-unlock.js.map +1 -1
  189. package/build-module/menu-items-choice/types.js.map +1 -1
  190. package/build-module/palette-edit/index.js +31 -39
  191. package/build-module/palette-edit/index.js.map +1 -1
  192. package/build-module/palette-edit/types.js.map +1 -1
  193. package/build-module/popover/index.js +0 -3
  194. package/build-module/popover/index.js.map +1 -1
  195. package/build-module/popover/utils.js +0 -1
  196. package/build-module/popover/utils.js.map +1 -1
  197. package/build-module/private-apis.js +2 -4
  198. package/build-module/private-apis.js.map +1 -1
  199. package/build-module/progress-bar/styles.js +21 -13
  200. package/build-module/progress-bar/styles.js.map +1 -1
  201. package/build-module/radio-group/context.js +0 -1
  202. package/build-module/radio-group/context.js.map +1 -1
  203. package/build-module/radio-group/index.js +0 -1
  204. package/build-module/radio-group/index.js.map +1 -1
  205. package/build-module/radio-group/radio.js +0 -1
  206. package/build-module/radio-group/radio.js.map +1 -1
  207. package/build-module/range-control/index.js +4 -1
  208. package/build-module/range-control/index.js.map +1 -1
  209. package/build-module/range-control/styles/range-control-styles.js +34 -28
  210. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  211. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  212. package/build-module/select-control/index.js +2 -3
  213. package/build-module/select-control/index.js.map +1 -1
  214. package/build-module/select-control/styles/select-control-styles.js +12 -7
  215. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  216. package/build-module/tab-panel/index.js +0 -1
  217. package/build-module/tab-panel/index.js.map +1 -1
  218. package/build-module/tabs/index.js +0 -1
  219. package/build-module/tabs/index.js.map +1 -1
  220. package/build-module/tabs/styles.js +3 -4
  221. package/build-module/tabs/styles.js.map +1 -1
  222. package/build-module/tabs/tablist.js +149 -38
  223. package/build-module/tabs/tablist.js.map +1 -1
  224. package/build-module/tabs/types.js.map +1 -1
  225. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +0 -1
  226. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  227. package/build-module/toggle-group-control/toggle-group-control/component.js +0 -1
  228. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  229. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +0 -2
  230. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  231. package/build-module/toolbar/toolbar/toolbar-container.js +0 -1
  232. package/build-module/toolbar/toolbar/toolbar-container.js.map +1 -1
  233. package/build-module/toolbar/toolbar/types.js.map +1 -1
  234. package/build-module/toolbar/toolbar-button/index.js +27 -19
  235. package/build-module/toolbar/toolbar-button/index.js.map +1 -1
  236. package/build-module/toolbar/toolbar-button/types.js.map +1 -1
  237. package/build-module/toolbar/toolbar-context/index.js +0 -1
  238. package/build-module/toolbar/toolbar-context/index.js.map +1 -1
  239. package/build-module/toolbar/toolbar-item/index.js +1 -1
  240. package/build-module/toolbar/toolbar-item/index.js.map +1 -1
  241. package/build-module/tooltip/index.js +3 -2
  242. package/build-module/tooltip/index.js.map +1 -1
  243. package/build-module/tooltip/types.js.map +1 -1
  244. package/build-module/unit-control/index.js +3 -3
  245. package/build-module/unit-control/index.js.map +1 -1
  246. package/build-module/unit-control/styles/unit-control-styles.js +7 -7
  247. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  248. package/build-module/utils/hooks/use-update-effect.js +4 -1
  249. package/build-module/utils/hooks/use-update-effect.js.map +1 -1
  250. package/build-style/style-rtl.css +46 -6
  251. package/build-style/style.css +46 -6
  252. package/build-types/animation/index.d.ts.map +1 -1
  253. package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
  254. package/build-types/autocomplete/index.d.ts.map +1 -1
  255. package/build-types/base-control/index.d.ts +6 -20
  256. package/build-types/base-control/index.d.ts.map +1 -1
  257. package/build-types/base-control/stories/index.story.d.ts.map +1 -1
  258. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -1
  259. package/build-types/button/deprecated.d.ts +4 -4
  260. package/build-types/button/index.d.ts.map +1 -1
  261. package/build-types/button/stories/e2e/index.story.d.ts.map +1 -1
  262. package/build-types/button/types.d.ts +27 -10
  263. package/build-types/button/types.d.ts.map +1 -1
  264. package/build-types/combobox-control/index.d.ts.map +1 -1
  265. package/build-types/composite/current/index.d.ts.map +1 -1
  266. package/build-types/custom-select-control/stories/index.story.d.ts +15 -0
  267. package/build-types/custom-select-control/stories/index.story.d.ts.map +1 -1
  268. package/build-types/custom-select-control-v2/custom-select.d.ts +2 -2
  269. package/build-types/custom-select-control-v2/custom-select.d.ts.map +1 -1
  270. package/build-types/custom-select-control-v2/default-component/index.d.ts.map +1 -1
  271. package/build-types/custom-select-control-v2/item.d.ts.map +1 -1
  272. package/build-types/custom-select-control-v2/legacy-component/index.d.ts.map +1 -1
  273. package/build-types/custom-select-control-v2/stories/default.story.d.ts +6 -3
  274. package/build-types/custom-select-control-v2/stories/default.story.d.ts.map +1 -1
  275. package/build-types/custom-select-control-v2/styles.d.ts +18 -22
  276. package/build-types/custom-select-control-v2/styles.d.ts.map +1 -1
  277. package/build-types/custom-select-control-v2/types.d.ts +13 -2
  278. package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
  279. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  280. package/build-types/date-time/index.d.ts +2 -1
  281. package/build-types/date-time/index.d.ts.map +1 -1
  282. package/build-types/date-time/stories/time-input.story.d.ts +12 -0
  283. package/build-types/date-time/stories/time-input.story.d.ts.map +1 -0
  284. package/build-types/date-time/time/index.d.ts +1 -1
  285. package/build-types/date-time/time/index.d.ts.map +1 -1
  286. package/build-types/date-time/time-input/index.d.ts +5 -0
  287. package/build-types/date-time/time-input/index.d.ts.map +1 -0
  288. package/build-types/date-time/time-input/test/index.d.ts +2 -0
  289. package/build-types/date-time/time-input/test/index.d.ts.map +1 -0
  290. package/build-types/date-time/types.d.ts +54 -0
  291. package/build-types/date-time/types.d.ts.map +1 -1
  292. package/build-types/date-time/utils.d.ts +40 -0
  293. package/build-types/date-time/utils.d.ts.map +1 -1
  294. package/build-types/disclosure/index.d.ts.map +1 -1
  295. package/build-types/divider/component.d.ts.map +1 -1
  296. package/build-types/divider/types.d.ts.map +1 -1
  297. package/build-types/drop-zone/index.d.ts +3 -0
  298. package/build-types/drop-zone/index.d.ts.map +1 -1
  299. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  300. package/build-types/dropdown-menu-v2/index.d.ts.map +1 -1
  301. package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -1
  302. package/build-types/dropdown-menu-v2/types.d.ts.map +1 -1
  303. package/build-types/font-size-picker/styles.d.ts +1 -1
  304. package/build-types/font-size-picker/utils.d.ts.map +1 -1
  305. package/build-types/form-token-field/token.d.ts.map +1 -1
  306. package/build-types/higher-order/with-spoken-messages/index.d.ts +1 -2
  307. package/build-types/higher-order/with-spoken-messages/index.d.ts.map +1 -1
  308. package/build-types/menu-items-choice/types.d.ts +1 -1
  309. package/build-types/menu-items-choice/types.d.ts.map +1 -1
  310. package/build-types/navigator/navigator-back-button/component.d.ts +1 -1
  311. package/build-types/navigator/navigator-back-button/hook.d.ts +1 -1
  312. package/build-types/navigator/navigator-button/component.d.ts +1 -1
  313. package/build-types/navigator/navigator-button/hook.d.ts +1 -1
  314. package/build-types/navigator/navigator-to-parent-button/component.d.ts +1 -1
  315. package/build-types/palette-edit/index.d.ts.map +1 -1
  316. package/build-types/palette-edit/types.d.ts +1 -3
  317. package/build-types/palette-edit/types.d.ts.map +1 -1
  318. package/build-types/popover/index.d.ts.map +1 -1
  319. package/build-types/popover/utils.d.ts.map +1 -1
  320. package/build-types/private-apis.d.ts.map +1 -1
  321. package/build-types/progress-bar/styles.d.ts.map +1 -1
  322. package/build-types/radio-group/context.d.ts.map +1 -1
  323. package/build-types/radio-group/index.d.ts.map +1 -1
  324. package/build-types/radio-group/radio.d.ts.map +1 -1
  325. package/build-types/range-control/index.d.ts.map +1 -1
  326. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  327. package/build-types/resizable-box/resize-tooltip/utils.d.ts +2 -2
  328. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  329. package/build-types/select-control/index.d.ts.map +1 -1
  330. package/build-types/select-control/styles/select-control-styles.d.ts +5 -0
  331. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  332. package/build-types/tab-panel/index.d.ts.map +1 -1
  333. package/build-types/tabs/index.d.ts.map +1 -1
  334. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  335. package/build-types/tabs/styles.d.ts.map +1 -1
  336. package/build-types/tabs/tablist.d.ts.map +1 -1
  337. package/build-types/tabs/types.d.ts.map +1 -1
  338. package/build-types/theme/stories/index.story.d.ts.map +1 -1
  339. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  340. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  341. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  342. package/build-types/toolbar/toolbar/toolbar-container.d.ts.map +1 -1
  343. package/build-types/toolbar/toolbar/types.d.ts +6 -0
  344. package/build-types/toolbar/toolbar/types.d.ts.map +1 -1
  345. package/build-types/toolbar/toolbar-button/index.d.ts +3 -96
  346. package/build-types/toolbar/toolbar-button/index.d.ts.map +1 -1
  347. package/build-types/toolbar/toolbar-button/types.d.ts +18 -0
  348. package/build-types/toolbar/toolbar-button/types.d.ts.map +1 -1
  349. package/build-types/toolbar/toolbar-context/index.d.ts.map +1 -1
  350. package/build-types/toolbar/toolbar-item/index.d.ts +1 -3
  351. package/build-types/toolbar/toolbar-item/index.d.ts.map +1 -1
  352. package/build-types/tooltip/index.d.ts.map +1 -1
  353. package/build-types/tooltip/types.d.ts +4 -0
  354. package/build-types/tooltip/types.d.ts.map +1 -1
  355. package/build-types/unit-control/index.d.ts.map +1 -1
  356. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  357. package/build-types/utils/hooks/use-update-effect.d.ts +1 -1
  358. package/build-types/utils/hooks/use-update-effect.d.ts.map +1 -1
  359. package/package.json +19 -19
  360. package/src/animation/index.tsx +0 -1
  361. package/src/autocomplete/autocompleter-ui.tsx +1 -0
  362. package/src/autocomplete/index.tsx +0 -1
  363. package/src/base-control/index.tsx +16 -6
  364. package/src/base-control/stories/index.story.tsx +0 -1
  365. package/src/border-box-control/border-box-control-visualizer/component.tsx +0 -5
  366. package/src/button/README.md +13 -0
  367. package/src/button/index.tsx +6 -4
  368. package/src/button/stories/e2e/index.story.tsx +2 -1
  369. package/src/button/test/index.tsx +17 -2
  370. package/src/button/types.ts +27 -10
  371. package/src/combobox-control/index.tsx +2 -0
  372. package/src/composite/current/index.ts +0 -2
  373. package/src/custom-select-control/stories/index.story.tsx +32 -3
  374. package/src/custom-select-control/test/index.js +247 -28
  375. package/src/custom-select-control-v2/custom-select.tsx +58 -23
  376. package/src/custom-select-control-v2/default-component/index.tsx +0 -1
  377. package/src/custom-select-control-v2/item.tsx +5 -1
  378. package/src/custom-select-control-v2/legacy-component/index.tsx +45 -16
  379. package/src/custom-select-control-v2/legacy-component/test/index.tsx +261 -43
  380. package/src/custom-select-control-v2/styles.ts +156 -74
  381. package/src/custom-select-control-v2/test/index.tsx +35 -5
  382. package/src/custom-select-control-v2/types.ts +19 -6
  383. package/src/date-time/README.md +8 -0
  384. package/src/date-time/date-time/index.tsx +2 -1
  385. package/src/date-time/index.ts +2 -1
  386. package/src/date-time/stories/time-input.story.tsx +36 -0
  387. package/src/date-time/time/index.tsx +77 -194
  388. package/src/date-time/time/test/index.tsx +61 -0
  389. package/src/date-time/time-input/index.tsx +196 -0
  390. package/src/date-time/time-input/test/index.tsx +171 -0
  391. package/src/date-time/types.ts +63 -0
  392. package/src/date-time/utils.ts +69 -0
  393. package/src/dimension-control/test/__snapshots__/index.test.js.snap +116 -96
  394. package/src/disclosure/index.tsx +0 -1
  395. package/src/divider/component.tsx +0 -1
  396. package/src/divider/types.ts +0 -1
  397. package/src/drop-zone/index.tsx +17 -76
  398. package/src/drop-zone/style.scss +51 -16
  399. package/src/dropdown-menu/index.tsx +1 -0
  400. package/src/dropdown-menu-v2/index.tsx +0 -1
  401. package/src/dropdown-menu-v2/styles.ts +0 -1
  402. package/src/dropdown-menu-v2/types.ts +0 -1
  403. package/src/font-size-picker/font-size-picker-select.tsx +1 -1
  404. package/src/font-size-picker/index.tsx +1 -1
  405. package/src/font-size-picker/test/index.tsx +6 -6
  406. package/src/font-size-picker/utils.ts +0 -5
  407. package/src/form-token-field/token.tsx +2 -0
  408. package/src/higher-order/navigate-regions/style.scss +25 -13
  409. package/src/higher-order/with-spoken-messages/index.tsx +1 -2
  410. package/src/lock-unlock.js +1 -1
  411. package/src/menu-items-choice/types.ts +2 -1
  412. package/src/palette-edit/index.tsx +33 -45
  413. package/src/palette-edit/test/index.tsx +3 -4
  414. package/src/palette-edit/types.ts +1 -3
  415. package/src/popover/index.tsx +0 -2
  416. package/src/popover/utils.ts +0 -1
  417. package/src/private-apis.ts +2 -5
  418. package/src/progress-bar/styles.ts +18 -9
  419. package/src/radio-group/context.tsx +0 -1
  420. package/src/radio-group/index.tsx +0 -1
  421. package/src/radio-group/radio.tsx +0 -1
  422. package/src/range-control/index.tsx +2 -0
  423. package/src/range-control/styles/range-control-styles.ts +6 -2
  424. package/src/resizable-box/resize-tooltip/utils.ts +1 -1
  425. package/src/select-control/index.tsx +3 -4
  426. package/src/select-control/styles/select-control-styles.ts +17 -6
  427. package/src/tab-panel/index.tsx +0 -1
  428. package/src/tabs/index.tsx +0 -1
  429. package/src/tabs/stories/index.story.tsx +25 -18
  430. package/src/tabs/styles.ts +18 -14
  431. package/src/tabs/tablist.tsx +187 -43
  432. package/src/tabs/types.ts +0 -1
  433. package/src/theme/stories/index.story.tsx +2 -0
  434. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +0 -1
  435. package/src/toggle-group-control/toggle-group-control/component.tsx +0 -2
  436. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +0 -2
  437. package/src/toolbar/toolbar/README.md +9 -0
  438. package/src/toolbar/toolbar/style.scss +7 -0
  439. package/src/toolbar/toolbar/toolbar-container.tsx +0 -1
  440. package/src/toolbar/toolbar/types.ts +6 -0
  441. package/src/toolbar/toolbar-button/index.tsx +30 -17
  442. package/src/toolbar/toolbar-button/types.ts +19 -0
  443. package/src/toolbar/toolbar-context/index.ts +0 -1
  444. package/src/toolbar/toolbar-item/index.tsx +1 -1
  445. package/src/tooltip/index.tsx +3 -2
  446. package/src/tooltip/test/index.tsx +18 -0
  447. package/src/tooltip/types.ts +4 -0
  448. package/src/unit-control/index.tsx +3 -2
  449. package/src/unit-control/styles/unit-control-styles.ts +10 -4
  450. package/src/utils/hooks/use-update-effect.js +8 -1
  451. package/tsconfig.tsbuildinfo +1 -1
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { startOfMinute, format, set, setHours, setMonth } from 'date-fns';
4
+ import { startOfMinute, format, set, setMonth } from 'date-fns';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -13,63 +13,28 @@ import { __ } from '@wordpress/i18n';
13
13
  * Internal dependencies
14
14
  */
15
15
  import BaseControl from '../../base-control';
16
- import Button from '../../button';
17
- import ButtonGroup from '../../button-group';
18
16
  import SelectControl from '../../select-control';
19
17
  import TimeZone from './timezone';
20
- import type { TimePickerProps } from '../types';
18
+ import type { TimeInputValue, TimePickerProps } from '../types';
21
19
  import {
22
20
  Wrapper,
23
21
  Fieldset,
24
- HoursInput,
25
- TimeSeparator,
26
- MinutesInput,
27
22
  MonthSelectWrapper,
28
23
  DayInput,
29
24
  YearInput,
30
- TimeWrapper,
31
25
  } from './styles';
32
26
  import { HStack } from '../../h-stack';
33
27
  import { Spacer } from '../../spacer';
34
28
  import type { InputChangeCallback } from '../../input-control/types';
35
- import type { InputState } from '../../input-control/reducer/state';
36
- import type { InputAction } from '../../input-control/reducer/actions';
37
29
  import {
38
- COMMIT,
39
- PRESS_DOWN,
40
- PRESS_UP,
41
- } from '../../input-control/reducer/actions';
42
- import { inputToDate } from '../utils';
30
+ inputToDate,
31
+ buildPadInputStateReducer,
32
+ validateInputElementTarget,
33
+ } from '../utils';
43
34
  import { TIMEZONELESS_FORMAT } from '../constants';
35
+ import { TimeInput } from '../time-input';
44
36
 
45
- function from12hTo24h( hours: number, isPm: boolean ) {
46
- return isPm ? ( ( hours % 12 ) + 12 ) % 24 : hours % 12;
47
- }
48
-
49
- /**
50
- * Creates an InputControl reducer used to pad an input so that it is always a
51
- * given width. For example, the hours and minutes inputs are padded to 2 so
52
- * that '4' appears as '04'.
53
- *
54
- * @param pad How many digits the value should be.
55
- */
56
- function buildPadInputStateReducer( pad: number ) {
57
- return ( state: InputState, action: InputAction ) => {
58
- const nextState = { ...state };
59
- if (
60
- action.type === COMMIT ||
61
- action.type === PRESS_UP ||
62
- action.type === PRESS_DOWN
63
- ) {
64
- if ( nextState.value !== undefined ) {
65
- nextState.value = nextState.value
66
- .toString()
67
- .padStart( pad, '0' );
68
- }
69
- }
70
- return nextState;
71
- };
72
- }
37
+ const VALID_DATE_ORDERS = [ 'dmy', 'mdy', 'ymd' ];
73
38
 
74
39
  /**
75
40
  * TimePicker is a React component that renders a clock for time selection.
@@ -95,6 +60,7 @@ export function TimePicker( {
95
60
  is12Hour,
96
61
  currentTime,
97
62
  onChange,
63
+ dateOrder: dateOrderProp,
98
64
  }: TimePickerProps ) {
99
65
  const [ date, setDate ] = useState( () =>
100
66
  // Truncate the date at the minutes, see: #15495.
@@ -111,46 +77,26 @@ export function TimePicker( {
111
77
  );
112
78
  }, [ currentTime ] );
113
79
 
114
- const { day, month, year, minutes, hours, am } = useMemo(
80
+ const { day, month, year, minutes, hours } = useMemo(
115
81
  () => ( {
116
82
  day: format( date, 'dd' ),
117
83
  month: format( date, 'MM' ),
118
84
  year: format( date, 'yyyy' ),
119
85
  minutes: format( date, 'mm' ),
120
- hours: format( date, is12Hour ? 'hh' : 'HH' ),
86
+ hours: format( date, 'HH' ),
121
87
  am: format( date, 'a' ),
122
88
  } ),
123
- [ date, is12Hour ]
89
+ [ date ]
124
90
  );
125
91
 
126
- const buildNumberControlChangeCallback = (
127
- method: 'hours' | 'minutes' | 'date' | 'year'
128
- ) => {
92
+ const buildNumberControlChangeCallback = ( method: 'date' | 'year' ) => {
129
93
  const callback: InputChangeCallback = ( value, { event } ) => {
130
- // `instanceof` checks need to get the instance definition from the
131
- // corresponding window object — therefore, the following logic makes
132
- // the component work correctly even when rendered inside an iframe.
133
- const HTMLInputElementInstance =
134
- ( event.target as HTMLInputElement )?.ownerDocument.defaultView
135
- ?.HTMLInputElement ?? HTMLInputElement;
136
-
137
- if ( ! ( event.target instanceof HTMLInputElementInstance ) ) {
138
- return;
139
- }
140
-
141
- if ( ! event.target.validity.valid ) {
94
+ if ( ! validateInputElementTarget( event ) ) {
142
95
  return;
143
96
  }
144
97
 
145
98
  // We can safely assume value is a number if target is valid.
146
- let numberValue = Number( value );
147
-
148
- // If the 12-hour format is being used and the 'PM' period is
149
- // selected, then the incoming value (which ranges 1-12) should be
150
- // increased by 12 to match the expected 24-hour format.
151
- if ( method === 'hours' && is12Hour ) {
152
- numberValue = from12hTo24h( numberValue, am === 'PM' );
153
- }
99
+ const numberValue = Number( value );
154
100
 
155
101
  const newDate = set( date, { [ method ]: numberValue } );
156
102
  setDate( newDate );
@@ -159,25 +105,21 @@ export function TimePicker( {
159
105
  return callback;
160
106
  };
161
107
 
162
- function buildAmPmChangeCallback( value: 'AM' | 'PM' ) {
163
- return () => {
164
- if ( am === value ) {
165
- return;
166
- }
167
-
168
- const parsedHours = parseInt( hours, 10 );
169
-
170
- const newDate = setHours(
171
- date,
172
- from12hTo24h( parsedHours, value === 'PM' )
173
- );
174
- setDate( newDate );
175
- onChange?.( format( newDate, TIMEZONELESS_FORMAT ) );
176
- };
177
- }
108
+ const onTimeInputChangeCallback = ( {
109
+ hours: newHours,
110
+ minutes: newMinutes,
111
+ }: TimeInputValue ) => {
112
+ const newDate = set( date, {
113
+ hours: newHours,
114
+ minutes: newMinutes,
115
+ } );
116
+ setDate( newDate );
117
+ onChange?.( format( newDate, TIMEZONELESS_FORMAT ) );
118
+ };
178
119
 
179
120
  const dayField = (
180
121
  <DayInput
122
+ key="day"
181
123
  className="components-datetime__time-field components-datetime__time-field-day" // Unused, for backwards compatibility.
182
124
  label={ __( 'Day' ) }
183
125
  hideLabelFromVision
@@ -196,7 +138,7 @@ export function TimePicker( {
196
138
  );
197
139
 
198
140
  const monthField = (
199
- <MonthSelectWrapper>
141
+ <MonthSelectWrapper key="month">
200
142
  <SelectControl
201
143
  className="components-datetime__time-field components-datetime__time-field-month" // Unused, for backwards compatibility.
202
144
  label={ __( 'Month' ) }
@@ -227,6 +169,46 @@ export function TimePicker( {
227
169
  </MonthSelectWrapper>
228
170
  );
229
171
 
172
+ const yearField = (
173
+ <YearInput
174
+ key="year"
175
+ className="components-datetime__time-field components-datetime__time-field-year" // Unused, for backwards compatibility.
176
+ label={ __( 'Year' ) }
177
+ hideLabelFromVision
178
+ __next40pxDefaultSize
179
+ value={ year }
180
+ step={ 1 }
181
+ min={ 1 }
182
+ max={ 9999 }
183
+ required
184
+ spinControls="none"
185
+ isPressEnterToChange
186
+ isDragEnabled={ false }
187
+ isShiftStepEnabled={ false }
188
+ onChange={ buildNumberControlChangeCallback( 'year' ) }
189
+ __unstableStateReducer={ buildPadInputStateReducer( 4 ) }
190
+ />
191
+ );
192
+
193
+ const defaultDateOrder = is12Hour ? 'mdy' : 'dmy';
194
+ const dateOrder =
195
+ dateOrderProp && VALID_DATE_ORDERS.includes( dateOrderProp )
196
+ ? dateOrderProp
197
+ : defaultDateOrder;
198
+
199
+ const fields = dateOrder.split( '' ).map( ( field ) => {
200
+ switch ( field ) {
201
+ case 'd':
202
+ return dayField;
203
+ case 'm':
204
+ return monthField;
205
+ case 'y':
206
+ return yearField;
207
+ default:
208
+ return null;
209
+ }
210
+ } );
211
+
230
212
  return (
231
213
  <Wrapper
232
214
  className="components-datetime__time" // Unused, for backwards compatibility.
@@ -241,84 +223,14 @@ export function TimePicker( {
241
223
  <HStack
242
224
  className="components-datetime__time-wrapper" // Unused, for backwards compatibility.
243
225
  >
244
- <TimeWrapper
245
- className="components-datetime__time-field components-datetime__time-field-time" // Unused, for backwards compatibility.
246
- >
247
- <HoursInput
248
- className="components-datetime__time-field-hours-input" // Unused, for backwards compatibility.
249
- label={ __( 'Hours' ) }
250
- hideLabelFromVision
251
- __next40pxDefaultSize
252
- value={ hours }
253
- step={ 1 }
254
- min={ is12Hour ? 1 : 0 }
255
- max={ is12Hour ? 12 : 23 }
256
- required
257
- spinControls="none"
258
- isPressEnterToChange
259
- isDragEnabled={ false }
260
- isShiftStepEnabled={ false }
261
- onChange={ buildNumberControlChangeCallback(
262
- 'hours'
263
- ) }
264
- __unstableStateReducer={ buildPadInputStateReducer(
265
- 2
266
- ) }
267
- />
268
- <TimeSeparator
269
- className="components-datetime__time-separator" // Unused, for backwards compatibility.
270
- aria-hidden="true"
271
- >
272
- :
273
- </TimeSeparator>
274
- <MinutesInput
275
- className="components-datetime__time-field-minutes-input" // Unused, for backwards compatibility.
276
- label={ __( 'Minutes' ) }
277
- hideLabelFromVision
278
- __next40pxDefaultSize
279
- value={ minutes }
280
- step={ 1 }
281
- min={ 0 }
282
- max={ 59 }
283
- required
284
- spinControls="none"
285
- isPressEnterToChange
286
- isDragEnabled={ false }
287
- isShiftStepEnabled={ false }
288
- onChange={ buildNumberControlChangeCallback(
289
- 'minutes'
290
- ) }
291
- __unstableStateReducer={ buildPadInputStateReducer(
292
- 2
293
- ) }
294
- />
295
- </TimeWrapper>
296
- { is12Hour && (
297
- <ButtonGroup
298
- className="components-datetime__time-field components-datetime__time-field-am-pm" // Unused, for backwards compatibility.
299
- >
300
- <Button
301
- className="components-datetime__time-am-button" // Unused, for backwards compatibility.
302
- variant={
303
- am === 'AM' ? 'primary' : 'secondary'
304
- }
305
- __next40pxDefaultSize
306
- onClick={ buildAmPmChangeCallback( 'AM' ) }
307
- >
308
- { __( 'AM' ) }
309
- </Button>
310
- <Button
311
- className="components-datetime__time-pm-button" // Unused, for backwards compatibility.
312
- variant={
313
- am === 'PM' ? 'primary' : 'secondary'
314
- }
315
- __next40pxDefaultSize
316
- onClick={ buildAmPmChangeCallback( 'PM' ) }
317
- >
318
- { __( 'PM' ) }
319
- </Button>
320
- </ButtonGroup>
321
- ) }
226
+ <TimeInput
227
+ value={ {
228
+ hours: Number( hours ),
229
+ minutes: Number( minutes ),
230
+ } }
231
+ is12Hour={ is12Hour }
232
+ onChange={ onTimeInputChangeCallback }
233
+ />
322
234
  <Spacer />
323
235
  <TimeZone />
324
236
  </HStack>
@@ -333,36 +245,7 @@ export function TimePicker( {
333
245
  <HStack
334
246
  className="components-datetime__time-wrapper" // Unused, for backwards compatibility.
335
247
  >
336
- { is12Hour ? (
337
- <>
338
- { monthField }
339
- { dayField }
340
- </>
341
- ) : (
342
- <>
343
- { dayField }
344
- { monthField }
345
- </>
346
- ) }
347
- <YearInput
348
- className="components-datetime__time-field components-datetime__time-field-year" // Unused, for backwards compatibility.
349
- label={ __( 'Year' ) }
350
- hideLabelFromVision
351
- __next40pxDefaultSize
352
- value={ year }
353
- step={ 1 }
354
- min={ 1 }
355
- max={ 9999 }
356
- required
357
- spinControls="none"
358
- isPressEnterToChange
359
- isDragEnabled={ false }
360
- isShiftStepEnabled={ false }
361
- onChange={ buildNumberControlChangeCallback( 'year' ) }
362
- __unstableStateReducer={ buildPadInputStateReducer(
363
- 4
364
- ) }
365
- />
248
+ { fields }
366
249
  </HStack>
367
250
  </Fieldset>
368
251
  </Wrapper>
@@ -333,6 +333,67 @@ describe( 'TimePicker', () => {
333
333
  expect( monthInputIndex < dayInputIndex ).toBe( true );
334
334
  } );
335
335
 
336
+ it( 'Should change layouts/orders when `dateOrder` prop is passed', () => {
337
+ const onChangeSpy = jest.fn();
338
+
339
+ render(
340
+ <form aria-label="form">
341
+ <TimePicker
342
+ currentTime="1986-10-18T11:00:00"
343
+ onChange={ onChangeSpy }
344
+ dateOrder="ymd"
345
+ />
346
+ </form>
347
+ );
348
+
349
+ const form = screen.getByRole( 'form' ) as HTMLFormElement;
350
+
351
+ const yearInputIndex = Array.from( form.elements ).indexOf(
352
+ screen.getByLabelText( 'Year' )
353
+ );
354
+
355
+ const monthInputIndex = Array.from( form.elements ).indexOf(
356
+ screen.getByLabelText( 'Month' )
357
+ );
358
+ const dayInputIndex = Array.from( form.elements ).indexOf(
359
+ screen.getByLabelText( 'Day' )
360
+ );
361
+
362
+ expect( monthInputIndex > yearInputIndex ).toBe( true );
363
+ expect( dayInputIndex > monthInputIndex ).toBe( true );
364
+ } );
365
+
366
+ it( 'Should ignore `is12Hour` prop setting when `dateOrder` prop is explicitly passed', () => {
367
+ const onChangeSpy = jest.fn();
368
+
369
+ render(
370
+ <form aria-label="form">
371
+ <TimePicker
372
+ currentTime="1986-10-18T11:00:00"
373
+ onChange={ onChangeSpy }
374
+ dateOrder="ymd"
375
+ is12Hour
376
+ />
377
+ </form>
378
+ );
379
+
380
+ const form = screen.getByRole( 'form' ) as HTMLFormElement;
381
+
382
+ const yearInputIndex = Array.from( form.elements ).indexOf(
383
+ screen.getByLabelText( 'Year' )
384
+ );
385
+
386
+ const monthInputIndex = Array.from( form.elements ).indexOf(
387
+ screen.getByLabelText( 'Month' )
388
+ );
389
+ const dayInputIndex = Array.from( form.elements ).indexOf(
390
+ screen.getByLabelText( 'Day' )
391
+ );
392
+
393
+ expect( monthInputIndex > yearInputIndex ).toBe( true );
394
+ expect( dayInputIndex > monthInputIndex ).toBe( true );
395
+ } );
396
+
336
397
  it( 'Should set a time when passed a null currentTime', () => {
337
398
  const onChangeSpy = jest.fn();
338
399
 
@@ -0,0 +1,196 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { __ } from '@wordpress/i18n';
10
+ import { Fragment } from '@wordpress/element';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import {
16
+ TimeWrapper,
17
+ TimeSeparator,
18
+ HoursInput,
19
+ MinutesInput,
20
+ Fieldset,
21
+ } from '../time/styles';
22
+ import { HStack } from '../../h-stack';
23
+ import Button from '../../button';
24
+ import ButtonGroup from '../../button-group';
25
+ import {
26
+ from12hTo24h,
27
+ from24hTo12h,
28
+ buildPadInputStateReducer,
29
+ validateInputElementTarget,
30
+ } from '../utils';
31
+ import type { TimeInputProps } from '../types';
32
+ import type { InputChangeCallback } from '../../input-control/types';
33
+ import { useControlledValue } from '../../utils';
34
+ import BaseControl from '../../base-control';
35
+
36
+ export function TimeInput( {
37
+ value: valueProp,
38
+ defaultValue,
39
+ is12Hour,
40
+ label,
41
+ minutesProps,
42
+ onChange,
43
+ }: TimeInputProps ) {
44
+ const [
45
+ value = {
46
+ hours: new Date().getHours(),
47
+ minutes: new Date().getMinutes(),
48
+ },
49
+ setValue,
50
+ ] = useControlledValue( {
51
+ value: valueProp,
52
+ onChange,
53
+ defaultValue,
54
+ } );
55
+ const dayPeriod = parseDayPeriod( value.hours );
56
+ const hours12Format = from24hTo12h( value.hours );
57
+
58
+ const buildNumberControlChangeCallback = (
59
+ method: 'hours' | 'minutes'
60
+ ): InputChangeCallback => {
61
+ return ( _value, { event } ) => {
62
+ if ( ! validateInputElementTarget( event ) ) {
63
+ return;
64
+ }
65
+
66
+ // We can safely assume value is a number if target is valid.
67
+ const numberValue = Number( _value );
68
+
69
+ setValue( {
70
+ ...value,
71
+ [ method ]:
72
+ method === 'hours' && is12Hour
73
+ ? from12hTo24h( numberValue, dayPeriod === 'PM' )
74
+ : numberValue,
75
+ } );
76
+ };
77
+ };
78
+
79
+ const buildAmPmChangeCallback = ( _value: 'AM' | 'PM' ) => {
80
+ return () => {
81
+ if ( dayPeriod === _value ) {
82
+ return;
83
+ }
84
+
85
+ setValue( {
86
+ ...value,
87
+ hours: from12hTo24h( hours12Format, _value === 'PM' ),
88
+ } );
89
+ };
90
+ };
91
+
92
+ function parseDayPeriod( _hours: number ) {
93
+ return _hours < 12 ? 'AM' : 'PM';
94
+ }
95
+
96
+ const Wrapper = label ? Fieldset : Fragment;
97
+
98
+ return (
99
+ <Wrapper>
100
+ { label && (
101
+ <BaseControl.VisualLabel as="legend">
102
+ { label }
103
+ </BaseControl.VisualLabel>
104
+ ) }
105
+
106
+ <HStack alignment="left" expanded={ false }>
107
+ <TimeWrapper
108
+ className="components-datetime__time-field components-datetime__time-field-time" // Unused, for backwards compatibility.
109
+ >
110
+ <HoursInput
111
+ className="components-datetime__time-field-hours-input" // Unused, for backwards compatibility.
112
+ label={ __( 'Hours' ) }
113
+ hideLabelFromVision
114
+ __next40pxDefaultSize
115
+ value={ String(
116
+ is12Hour ? hours12Format : value.hours
117
+ ).padStart( 2, '0' ) }
118
+ step={ 1 }
119
+ min={ is12Hour ? 1 : 0 }
120
+ max={ is12Hour ? 12 : 23 }
121
+ required
122
+ spinControls="none"
123
+ isPressEnterToChange
124
+ isDragEnabled={ false }
125
+ isShiftStepEnabled={ false }
126
+ onChange={ buildNumberControlChangeCallback( 'hours' ) }
127
+ __unstableStateReducer={ buildPadInputStateReducer(
128
+ 2
129
+ ) }
130
+ />
131
+ <TimeSeparator
132
+ className="components-datetime__time-separator" // Unused, for backwards compatibility.
133
+ aria-hidden="true"
134
+ >
135
+ :
136
+ </TimeSeparator>
137
+ <MinutesInput
138
+ className={ clsx(
139
+ 'components-datetime__time-field-minutes-input', // Unused, for backwards compatibility.
140
+ minutesProps?.className
141
+ ) }
142
+ label={ __( 'Minutes' ) }
143
+ hideLabelFromVision
144
+ __next40pxDefaultSize
145
+ value={ String( value.minutes ).padStart( 2, '0' ) }
146
+ step={ 1 }
147
+ min={ 0 }
148
+ max={ 59 }
149
+ required
150
+ spinControls="none"
151
+ isPressEnterToChange
152
+ isDragEnabled={ false }
153
+ isShiftStepEnabled={ false }
154
+ onChange={ ( ...args ) => {
155
+ buildNumberControlChangeCallback( 'minutes' )(
156
+ ...args
157
+ );
158
+ minutesProps?.onChange?.( ...args );
159
+ } }
160
+ __unstableStateReducer={ buildPadInputStateReducer(
161
+ 2
162
+ ) }
163
+ { ...minutesProps }
164
+ />
165
+ </TimeWrapper>
166
+ { is12Hour && (
167
+ <ButtonGroup
168
+ className="components-datetime__time-field components-datetime__time-field-am-pm" // Unused, for backwards compatibility.
169
+ >
170
+ <Button
171
+ className="components-datetime__time-am-button" // Unused, for backwards compatibility.
172
+ variant={
173
+ dayPeriod === 'AM' ? 'primary' : 'secondary'
174
+ }
175
+ __next40pxDefaultSize
176
+ onClick={ buildAmPmChangeCallback( 'AM' ) }
177
+ >
178
+ { __( 'AM' ) }
179
+ </Button>
180
+ <Button
181
+ className="components-datetime__time-pm-button" // Unused, for backwards compatibility.
182
+ variant={
183
+ dayPeriod === 'PM' ? 'primary' : 'secondary'
184
+ }
185
+ __next40pxDefaultSize
186
+ onClick={ buildAmPmChangeCallback( 'PM' ) }
187
+ >
188
+ { __( 'PM' ) }
189
+ </Button>
190
+ </ButtonGroup>
191
+ ) }
192
+ </HStack>
193
+ </Wrapper>
194
+ );
195
+ }
196
+ export default TimeInput;