@wordpress/components 32.2.1-next.v.202602111440.0 → 32.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/CLAUDE.md +1 -0
  3. package/build/alignment-matrix-control/cell.cjs +2 -2
  4. package/build/alignment-matrix-control/cell.cjs.map +1 -1
  5. package/build/alignment-matrix-control/index.cjs +2 -2
  6. package/build/alignment-matrix-control/index.cjs.map +1 -1
  7. package/build/angle-picker-control/angle-circle.cjs +4 -4
  8. package/build/angle-picker-control/angle-circle.cjs.map +2 -2
  9. package/build/autocomplete/index.cjs +16 -8
  10. package/build/autocomplete/index.cjs.map +2 -2
  11. package/build/clipboard-button/index.cjs +1 -1
  12. package/build/clipboard-button/index.cjs.map +2 -2
  13. package/build/color-picker/color-copy-button.cjs +1 -1
  14. package/build/color-picker/color-copy-button.cjs.map +2 -2
  15. package/build/confirm-dialog/component.cjs +2 -2
  16. package/build/confirm-dialog/component.cjs.map +2 -2
  17. package/build/context/context-system-provider.cjs.map +1 -1
  18. package/build/custom-gradient-picker/gradient-bar/control-points.cjs +2 -2
  19. package/build/custom-gradient-picker/gradient-bar/control-points.cjs.map +2 -2
  20. package/build/date-time/date/index.cjs +1 -1
  21. package/build/date-time/date/index.cjs.map +2 -2
  22. package/build/date-time/time/index.cjs +1 -1
  23. package/build/date-time/time/index.cjs.map +2 -2
  24. package/build/date-time/utils.cjs +9 -0
  25. package/build/date-time/utils.cjs.map +2 -2
  26. package/build/dropdown/index.cjs +1 -1
  27. package/build/dropdown/index.cjs.map +2 -2
  28. package/build/external-link/index.cjs +5 -1
  29. package/build/external-link/index.cjs.map +2 -2
  30. package/build/higher-order/with-spoken-messages/index.cjs.map +2 -2
  31. package/build/modal/index.cjs +2 -2
  32. package/build/modal/index.cjs.map +2 -2
  33. package/build/modal/use-modal-exit-animation.cjs +2 -2
  34. package/build/modal/use-modal-exit-animation.cjs.map +2 -2
  35. package/build/number-control/index.cjs +1 -1
  36. package/build/number-control/index.cjs.map +2 -2
  37. package/build/palette-edit/index.cjs +1 -1
  38. package/build/palette-edit/index.cjs.map +2 -2
  39. package/build/panel/body.cjs +1 -1
  40. package/build/panel/body.cjs.map +2 -2
  41. package/build/private-apis.cjs +0 -2
  42. package/build/private-apis.cjs.map +2 -2
  43. package/build/range-control/index.cjs +1 -1
  44. package/build/range-control/index.cjs.map +2 -2
  45. package/build/resizable-box/resize-tooltip/utils.cjs +1 -1
  46. package/build/resizable-box/resize-tooltip/utils.cjs.map +2 -2
  47. package/build/sandbox/index.cjs +126 -2
  48. package/build/sandbox/index.cjs.map +2 -2
  49. package/build/select-control/styles/select-control-styles.cjs +8 -8
  50. package/build/select-control/styles/select-control-styles.cjs.map +2 -2
  51. package/build/snackbar/list.cjs +4 -1
  52. package/build/snackbar/list.cjs.map +2 -2
  53. package/build/tabs/styles.cjs +5 -5
  54. package/build/tabs/styles.cjs.map +2 -2
  55. package/build/text/utils.cjs.map +1 -1
  56. package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs +8 -8
  57. package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs.map +2 -2
  58. package/build/tree-grid/roving-tab-index-item.cjs +1 -1
  59. package/build/tree-grid/roving-tab-index-item.cjs.map +2 -2
  60. package/build/utils/element-rect.cjs +1 -1
  61. package/build/utils/element-rect.cjs.map +2 -2
  62. package/build/utils/hooks/use-update-effect.cjs.map +1 -1
  63. package/build/utils/rtl.cjs +2 -2
  64. package/build/utils/rtl.cjs.map +2 -2
  65. package/build/utils/use-responsive-value.cjs +1 -7
  66. package/build/utils/use-responsive-value.cjs.map +2 -2
  67. package/build/validated-form-controls/control-with-error.cjs +26 -3
  68. package/build/validated-form-controls/control-with-error.cjs.map +2 -2
  69. package/build/validated-form-controls/validity-indicator.cjs +2 -0
  70. package/build/validated-form-controls/validity-indicator.cjs.map +2 -2
  71. package/build-module/alignment-matrix-control/cell.mjs +2 -2
  72. package/build-module/alignment-matrix-control/cell.mjs.map +1 -1
  73. package/build-module/alignment-matrix-control/index.mjs +2 -2
  74. package/build-module/alignment-matrix-control/index.mjs.map +1 -1
  75. package/build-module/angle-picker-control/angle-circle.mjs +4 -4
  76. package/build-module/angle-picker-control/angle-circle.mjs.map +2 -2
  77. package/build-module/autocomplete/index.mjs +14 -7
  78. package/build-module/autocomplete/index.mjs.map +2 -2
  79. package/build-module/clipboard-button/index.mjs +1 -1
  80. package/build-module/clipboard-button/index.mjs.map +2 -2
  81. package/build-module/color-picker/color-copy-button.mjs +1 -1
  82. package/build-module/color-picker/color-copy-button.mjs.map +2 -2
  83. package/build-module/confirm-dialog/component.mjs +2 -2
  84. package/build-module/confirm-dialog/component.mjs.map +2 -2
  85. package/build-module/context/context-system-provider.mjs.map +1 -1
  86. package/build-module/custom-gradient-picker/gradient-bar/control-points.mjs +2 -2
  87. package/build-module/custom-gradient-picker/gradient-bar/control-points.mjs.map +2 -2
  88. package/build-module/date-time/date/index.mjs +1 -1
  89. package/build-module/date-time/date/index.mjs.map +2 -2
  90. package/build-module/date-time/time/index.mjs +2 -2
  91. package/build-module/date-time/time/index.mjs.map +2 -2
  92. package/build-module/date-time/utils.mjs +8 -0
  93. package/build-module/date-time/utils.mjs.map +2 -2
  94. package/build-module/dropdown/index.mjs +1 -1
  95. package/build-module/dropdown/index.mjs.map +2 -2
  96. package/build-module/external-link/index.mjs +5 -1
  97. package/build-module/external-link/index.mjs.map +2 -2
  98. package/build-module/higher-order/with-spoken-messages/index.mjs.map +2 -2
  99. package/build-module/modal/index.mjs +2 -2
  100. package/build-module/modal/index.mjs.map +2 -2
  101. package/build-module/modal/use-modal-exit-animation.mjs +2 -2
  102. package/build-module/modal/use-modal-exit-animation.mjs.map +2 -2
  103. package/build-module/number-control/index.mjs +1 -1
  104. package/build-module/number-control/index.mjs.map +2 -2
  105. package/build-module/palette-edit/index.mjs +1 -1
  106. package/build-module/palette-edit/index.mjs.map +2 -2
  107. package/build-module/panel/body.mjs +1 -1
  108. package/build-module/panel/body.mjs.map +2 -2
  109. package/build-module/private-apis.mjs +0 -2
  110. package/build-module/private-apis.mjs.map +2 -2
  111. package/build-module/range-control/index.mjs +1 -1
  112. package/build-module/range-control/index.mjs.map +2 -2
  113. package/build-module/resizable-box/resize-tooltip/utils.mjs +1 -1
  114. package/build-module/resizable-box/resize-tooltip/utils.mjs.map +2 -2
  115. package/build-module/sandbox/index.mjs +127 -3
  116. package/build-module/sandbox/index.mjs.map +2 -2
  117. package/build-module/select-control/styles/select-control-styles.mjs +8 -8
  118. package/build-module/select-control/styles/select-control-styles.mjs.map +2 -2
  119. package/build-module/snackbar/list.mjs +4 -1
  120. package/build-module/snackbar/list.mjs.map +2 -2
  121. package/build-module/tabs/styles.mjs +5 -5
  122. package/build-module/tabs/styles.mjs.map +2 -2
  123. package/build-module/text/utils.mjs.map +1 -1
  124. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs +8 -8
  125. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs.map +2 -2
  126. package/build-module/tree-grid/roving-tab-index-item.mjs +1 -1
  127. package/build-module/tree-grid/roving-tab-index-item.mjs.map +2 -2
  128. package/build-module/utils/element-rect.mjs +1 -1
  129. package/build-module/utils/element-rect.mjs.map +2 -2
  130. package/build-module/utils/hooks/use-update-effect.mjs.map +1 -1
  131. package/build-module/utils/rtl.mjs +2 -2
  132. package/build-module/utils/rtl.mjs.map +2 -2
  133. package/build-module/utils/use-responsive-value.mjs +1 -7
  134. package/build-module/utils/use-responsive-value.mjs.map +2 -2
  135. package/build-module/validated-form-controls/control-with-error.mjs +27 -4
  136. package/build-module/validated-form-controls/control-with-error.mjs.map +2 -2
  137. package/build-module/validated-form-controls/validity-indicator.mjs +2 -0
  138. package/build-module/validated-form-controls/validity-indicator.mjs.map +2 -2
  139. package/build-style/style-rtl.css +8 -4
  140. package/build-style/style.css +8 -4
  141. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
  142. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
  143. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
  144. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
  145. package/build-types/angle-picker-control/angle-circle.d.ts.map +1 -1
  146. package/build-types/angle-picker-control/index.d.ts +1 -1
  147. package/build-types/angle-picker-control/stories/index.story.d.ts +1 -1
  148. package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts +25 -0
  149. package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts.map +1 -0
  150. package/build-types/animate/index.d.ts +1 -1
  151. package/build-types/animate/index.d.ts.map +1 -1
  152. package/build-types/animate/types.d.ts +1 -1
  153. package/build-types/animate/types.d.ts.map +1 -1
  154. package/build-types/autocomplete/get-autocomplete-match.d.ts +20 -0
  155. package/build-types/autocomplete/get-autocomplete-match.d.ts.map +1 -0
  156. package/build-types/autocomplete/index.d.ts +10 -2
  157. package/build-types/autocomplete/index.d.ts.map +1 -1
  158. package/build-types/autocomplete/test/get-autocomplete-match.d.ts +2 -0
  159. package/build-types/autocomplete/test/get-autocomplete-match.d.ts.map +1 -0
  160. package/build-types/autocomplete/types.d.ts +1 -1
  161. package/build-types/autocomplete/types.d.ts.map +1 -1
  162. package/build-types/badge/stories/e2e/index.story.d.ts +7 -0
  163. package/build-types/badge/stories/e2e/index.story.d.ts.map +1 -0
  164. package/build-types/base-control/index.d.ts +2 -2
  165. package/build-types/base-control/stories/index.story.d.ts +1 -1
  166. package/build-types/border-box-control/border-box-control/hook.d.ts +1 -1
  167. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +1 -1
  168. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +1 -1
  169. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +1 -1
  170. package/build-types/border-control/border-control/hook.d.ts +1 -1
  171. package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -1
  172. package/build-types/border-control/border-control-style-picker/hook.d.ts +267 -0
  173. package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -0
  174. package/build-types/box-control/all-input-control.d.ts +4 -0
  175. package/build-types/box-control/all-input-control.d.ts.map +1 -0
  176. package/build-types/box-control/axial-input-controls.d.ts +4 -0
  177. package/build-types/box-control/axial-input-controls.d.ts.map +1 -0
  178. package/build-types/box-control/input-controls.d.ts +4 -0
  179. package/build-types/box-control/input-controls.d.ts.map +1 -0
  180. package/build-types/box-control/styles/box-control-styles.d.ts +2 -2
  181. package/build-types/box-control/styles/box-control-styles.d.ts.map +1 -1
  182. package/build-types/box-control/styles/box-control-visualizer-styles.d.ts +46 -0
  183. package/build-types/box-control/styles/box-control-visualizer-styles.d.ts.map +1 -0
  184. package/build-types/box-control/unit-control.d.ts +4 -0
  185. package/build-types/box-control/unit-control.d.ts.map +1 -0
  186. package/build-types/card/card/hook.d.ts +1 -1
  187. package/build-types/card/card-body/hook.d.ts +1 -1
  188. package/build-types/card/card-footer/hook.d.ts +1 -1
  189. package/build-types/card/card-header/hook.d.ts +1 -1
  190. package/build-types/card/card-media/hook.d.ts +1 -1
  191. package/build-types/color-palette/stories/index.story.d.ts +6 -5
  192. package/build-types/color-palette/stories/index.story.d.ts.map +1 -1
  193. package/build-types/color-palette/styles.d.ts +1 -1
  194. package/build-types/color-picker/color-copy-button.d.ts.map +1 -1
  195. package/build-types/color-picker/styles.d.ts +2 -2
  196. package/build-types/color-picker/styles.d.ts.map +1 -1
  197. package/build-types/combobox-control/styles.d.ts +1 -1
  198. package/build-types/context/context-connect.d.ts +2 -2
  199. package/build-types/context/context-connect.d.ts.map +1 -1
  200. package/build-types/context/context-system-provider.d.ts +2 -2
  201. package/build-types/context/context-system-provider.d.ts.map +1 -1
  202. package/build-types/context/wordpress-component.d.ts +3 -3
  203. package/build-types/context/wordpress-component.d.ts.map +1 -1
  204. package/build-types/custom-gradient-picker/gradient-bar/control-points.d.ts.map +1 -1
  205. package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts +2 -2
  206. package/build-types/custom-gradient-picker/test/index.d.ts +2 -0
  207. package/build-types/custom-gradient-picker/test/index.d.ts.map +1 -0
  208. package/build-types/custom-gradient-picker/types.d.ts +1 -1
  209. package/build-types/custom-gradient-picker/types.d.ts.map +1 -1
  210. package/build-types/custom-select-control/styles.d.ts +11 -0
  211. package/build-types/custom-select-control/styles.d.ts.map +1 -0
  212. package/build-types/custom-select-control-v2/types.d.ts +4 -4
  213. package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
  214. package/build-types/date-time/date/styles.d.ts +2 -2
  215. package/build-types/date-time/date-picker/index.d.ts +23 -0
  216. package/build-types/date-time/date-picker/index.d.ts.map +1 -0
  217. package/build-types/date-time/date-picker/styles.d.ts +45 -0
  218. package/build-types/date-time/date-picker/styles.d.ts.map +1 -0
  219. package/build-types/date-time/date-picker/test/index.d.ts +2 -0
  220. package/build-types/date-time/date-picker/test/index.d.ts.map +1 -0
  221. package/build-types/date-time/date-picker/test/use-lilius.d.ts +2 -0
  222. package/build-types/date-time/date-picker/test/use-lilius.d.ts.map +1 -0
  223. package/build-types/date-time/date-picker/use-lilius/index.d.ts +169 -0
  224. package/build-types/date-time/date-picker/use-lilius/index.d.ts.map +1 -0
  225. package/build-types/date-time/date-time/styles.d.ts +1 -1
  226. package/build-types/date-time/time/index.d.ts.map +1 -1
  227. package/build-types/date-time/time-picker/index.d.ts +27 -0
  228. package/build-types/date-time/time-picker/index.d.ts.map +1 -0
  229. package/build-types/date-time/time-picker/styles.d.ts +93 -0
  230. package/build-types/date-time/time-picker/styles.d.ts.map +1 -0
  231. package/build-types/date-time/time-picker/test/index.d.ts +2 -0
  232. package/build-types/date-time/time-picker/test/index.d.ts.map +1 -0
  233. package/build-types/date-time/time-picker/time-input/index.d.ts +4 -0
  234. package/build-types/date-time/time-picker/time-input/index.d.ts.map +1 -0
  235. package/build-types/date-time/time-picker/time-input/test/index.d.ts +2 -0
  236. package/build-types/date-time/time-picker/time-input/test/index.d.ts.map +1 -0
  237. package/build-types/date-time/time-picker/timezone.d.ts +7 -0
  238. package/build-types/date-time/time-picker/timezone.d.ts.map +1 -0
  239. package/build-types/date-time/utils.d.ts +9 -0
  240. package/build-types/date-time/utils.d.ts.map +1 -1
  241. package/build-types/dimension-control/index.d.ts +28 -0
  242. package/build-types/dimension-control/index.d.ts.map +1 -0
  243. package/build-types/dimension-control/sizes.d.ts +26 -0
  244. package/build-types/dimension-control/sizes.d.ts.map +1 -0
  245. package/build-types/dimension-control/stories/index.story.d.ts +4 -0
  246. package/build-types/dimension-control/stories/index.story.d.ts.map +1 -0
  247. package/build-types/dimension-control/types.d.ts +47 -0
  248. package/build-types/dimension-control/types.d.ts.map +1 -0
  249. package/build-types/draggable/types.d.ts +1 -1
  250. package/build-types/draggable/types.d.ts.map +1 -1
  251. package/build-types/drop-zone/types.d.ts +1 -1
  252. package/build-types/drop-zone/types.d.ts.map +1 -1
  253. package/build-types/dropdown-menu/types.d.ts +1 -1
  254. package/build-types/dropdown-menu/types.d.ts.map +1 -1
  255. package/build-types/dropdown-menu-v2/index.d.ts +17 -0
  256. package/build-types/dropdown-menu-v2/index.d.ts.map +1 -0
  257. package/build-types/dropdown-menu-v2/stories/index.story.d.ts +11 -0
  258. package/build-types/dropdown-menu-v2/stories/index.story.d.ts.map +1 -0
  259. package/build-types/dropdown-menu-v2/styles.d.ts +42 -0
  260. package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -0
  261. package/build-types/dropdown-menu-v2/test/index.d.ts +2 -0
  262. package/build-types/dropdown-menu-v2/test/index.d.ts.map +1 -0
  263. package/build-types/dropdown-menu-v2/types.d.ts +252 -0
  264. package/build-types/dropdown-menu-v2/types.d.ts.map +1 -0
  265. package/build-types/elevation/hook.d.ts +1 -1
  266. package/build-types/external-link/index.d.ts.map +1 -1
  267. package/build-types/external-link/styles/external-link-styles.d.ts +10 -0
  268. package/build-types/external-link/styles/external-link-styles.d.ts.map +1 -0
  269. package/build-types/flex/flex/hook.d.ts +1 -1
  270. package/build-types/flex/flex-block/hook.d.ts +1 -1
  271. package/build-types/flex/flex-item/hook.d.ts +1 -1
  272. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
  273. package/build-types/font-size-picker/stories/index.story.d.ts +8 -7
  274. package/build-types/font-size-picker/stories/index.story.d.ts.map +1 -1
  275. package/build-types/font-size-picker/styles.d.ts +2 -2
  276. package/build-types/form-token-field/styles.d.ts +1 -1
  277. package/build-types/gradient-picker/stories/index.story.d.ts +6 -5
  278. package/build-types/gradient-picker/stories/index.story.d.ts.map +1 -1
  279. package/build-types/grid/hook.d.ts +1 -1
  280. package/build-types/h-stack/hook.d.ts +1 -1
  281. package/build-types/heading/hook.d.ts +1 -1
  282. package/build-types/higher-order/navigate-regions/index.d.ts +1 -1
  283. package/build-types/higher-order/with-notices/types.d.ts +1 -1
  284. package/build-types/higher-order/with-notices/types.d.ts.map +1 -1
  285. package/build-types/higher-order/with-spoken-messages/index.d.ts +2 -3
  286. package/build-types/higher-order/with-spoken-messages/index.d.ts.map +1 -1
  287. package/build-types/icon/index.d.ts +2 -2
  288. package/build-types/icon/index.d.ts.map +1 -1
  289. package/build-types/input-control/styles/input-control-styles.d.ts +2 -2
  290. package/build-types/item-group/item/hook.d.ts +1 -1
  291. package/build-types/item-group/item-group/hook.d.ts +1 -1
  292. package/build-types/menu/index.d.ts +2 -2
  293. package/build-types/menu/item-help-text.d.ts +1 -1
  294. package/build-types/menu/item-label.d.ts +1 -1
  295. package/build-types/menu/styles.d.ts +2 -2
  296. package/build-types/menu-item/index.d.ts +1 -1
  297. package/build-types/menu-item/stories/index.story.d.ts +4 -4
  298. package/build-types/menu-item/types.d.ts +1 -1
  299. package/build-types/menu-item/types.d.ts.map +1 -1
  300. package/build-types/mobile/inserter-button/sparkles.d.ts +3 -0
  301. package/build-types/mobile/inserter-button/sparkles.d.ts.map +1 -0
  302. package/build-types/modal/index.d.ts.map +1 -1
  303. package/build-types/modal/types.d.ts +1 -1
  304. package/build-types/modal/types.d.ts.map +1 -1
  305. package/build-types/modal/use-modal-exit-animation.d.ts +1 -1
  306. package/build-types/navigation/styles/navigation-styles.d.ts +2 -2
  307. package/build-types/navigation/types.d.ts +1 -1
  308. package/build-types/navigation/types.d.ts.map +1 -1
  309. package/build-types/navigator/navigator-back-button/hook.d.ts +1 -1
  310. package/build-types/navigator/navigator-back-button/index.d.ts +2 -0
  311. package/build-types/navigator/navigator-back-button/index.d.ts.map +1 -0
  312. package/build-types/navigator/navigator-button/hook.d.ts +1 -1
  313. package/build-types/navigator/navigator-button/index.d.ts +2 -0
  314. package/build-types/navigator/navigator-button/index.d.ts.map +1 -0
  315. package/build-types/navigator/navigator-provider/component.d.ts +38 -0
  316. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -0
  317. package/build-types/navigator/navigator-provider/index.d.ts +2 -0
  318. package/build-types/navigator/navigator-provider/index.d.ts.map +1 -0
  319. package/build-types/navigator/navigator-screen/index.d.ts +2 -0
  320. package/build-types/navigator/navigator-screen/index.d.ts.map +1 -0
  321. package/build-types/navigator/navigator-to-parent-button/index.d.ts +2 -0
  322. package/build-types/navigator/navigator-to-parent-button/index.d.ts.map +1 -0
  323. package/build-types/palette-edit/styles.d.ts +1 -1
  324. package/build-types/palette-edit/types.d.ts +1 -1
  325. package/build-types/palette-edit/types.d.ts.map +1 -1
  326. package/build-types/panel/types.d.ts +2 -2
  327. package/build-types/panel/types.d.ts.map +1 -1
  328. package/build-types/private-apis.d.ts.map +1 -1
  329. package/build-types/radio-group/radio/index.d.ts +7 -0
  330. package/build-types/radio-group/radio/index.d.ts.map +1 -0
  331. package/build-types/radio-group/radio-context/index.d.ts +6 -0
  332. package/build-types/radio-group/radio-context/index.d.ts.map +1 -0
  333. package/build-types/range-control/index.d.ts.map +1 -1
  334. package/build-types/range-control/input-range.d.ts +1 -1
  335. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  336. package/build-types/range-control/types.d.ts +2 -2
  337. package/build-types/range-control/types.d.ts.map +1 -1
  338. package/build-types/resizable-box/resize-tooltip/styles/resize-tooltip.styles.d.ts +1 -1
  339. package/build-types/resizable-box/resize-tooltip/utils.d.ts +1 -1
  340. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  341. package/build-types/sandbox/index.d.ts +1 -1
  342. package/build-types/sandbox/index.d.ts.map +1 -1
  343. package/build-types/sandbox/types.d.ts +11 -0
  344. package/build-types/sandbox/types.d.ts.map +1 -1
  345. package/build-types/scrollable/hook.d.ts +1 -1
  346. package/build-types/search-control/types.d.ts +1 -1
  347. package/build-types/search-control/types.d.ts.map +1 -1
  348. package/build-types/select-control/styles/select-control-styles.d.ts +2 -2
  349. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  350. package/build-types/slot-fill/bubbles-virtually/fill.d.ts +5 -0
  351. package/build-types/slot-fill/bubbles-virtually/fill.d.ts.map +1 -0
  352. package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts +12 -0
  353. package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts.map +1 -0
  354. package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts +4 -0
  355. package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts.map +1 -0
  356. package/build-types/slot-fill/bubbles-virtually/slot.d.ts +1 -1
  357. package/build-types/slot-fill/types.d.ts +1 -1
  358. package/build-types/slot-fill/types.d.ts.map +1 -1
  359. package/build-types/slot-fill/use-slot.d.ts +9 -0
  360. package/build-types/slot-fill/use-slot.d.ts.map +1 -0
  361. package/build-types/snackbar/index.d.ts +1 -1
  362. package/build-types/snackbar/list.d.ts.map +1 -1
  363. package/build-types/spacer/hook.d.ts +1 -1
  364. package/build-types/style-provider/test/index.d.ts +2 -0
  365. package/build-types/style-provider/test/index.d.ts.map +1 -0
  366. package/build-types/surface/hook.d.ts +1 -1
  367. package/build-types/tabs/styles.d.ts.map +1 -1
  368. package/build-types/text/hook.d.ts +1 -1
  369. package/build-types/text/stories/index.story.d.ts +3 -3
  370. package/build-types/text/utils.d.ts +18 -18
  371. package/build-types/text/utils.d.ts.map +1 -1
  372. package/build-types/theme/stories/index.story.d.ts +1 -1
  373. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  374. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  375. package/build-types/toggle-group-control/types.d.ts +1 -1
  376. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  377. package/build-types/tools-panel/tools-panel/hook.d.ts +1 -1
  378. package/build-types/tools-panel/tools-panel-header/hook.d.ts +1 -1
  379. package/build-types/tools-panel/tools-panel-item/hook.d.ts +1 -1
  380. package/build-types/tree-grid/types.d.ts +1 -1
  381. package/build-types/tree-grid/types.d.ts.map +1 -1
  382. package/build-types/truncate/hook.d.ts +1 -1
  383. package/build-types/ui/context/constants.d.ts +8 -0
  384. package/build-types/ui/context/constants.d.ts.map +1 -0
  385. package/build-types/ui/context/context-connect.d.ts +40 -0
  386. package/build-types/ui/context/context-connect.d.ts.map +1 -0
  387. package/build-types/ui/context/context-system-provider.d.ts +7 -0
  388. package/build-types/ui/context/context-system-provider.d.ts.map +1 -0
  389. package/build-types/ui/context/get-styled-class-name-from-key.d.ts +2 -0
  390. package/build-types/ui/context/get-styled-class-name-from-key.d.ts.map +1 -0
  391. package/build-types/ui/context/index.d.ts +5 -0
  392. package/build-types/ui/context/index.d.ts.map +1 -0
  393. package/build-types/ui/context/test/context-connect.d.ts +2 -0
  394. package/build-types/ui/context/test/context-connect.d.ts.map +1 -0
  395. package/build-types/ui/context/test/wordpress-component.d.ts +2 -0
  396. package/build-types/ui/context/test/wordpress-component.d.ts.map +1 -0
  397. package/build-types/ui/context/use-context-system.d.ts +20 -0
  398. package/build-types/ui/context/use-context-system.d.ts.map +1 -0
  399. package/build-types/ui/context/utils.d.ts +26 -0
  400. package/build-types/ui/context/utils.d.ts.map +1 -0
  401. package/build-types/ui/context/wordpress-component.d.ts +32 -0
  402. package/build-types/ui/context/wordpress-component.d.ts.map +1 -0
  403. package/build-types/ui/shortcut/component.d.ts +12 -0
  404. package/build-types/ui/shortcut/component.d.ts.map +1 -0
  405. package/build-types/ui/shortcut/index.d.ts +3 -0
  406. package/build-types/ui/shortcut/index.d.ts.map +1 -0
  407. package/build-types/ui/tooltip/component.d.ts +29 -0
  408. package/build-types/ui/tooltip/component.d.ts.map +1 -0
  409. package/build-types/ui/tooltip/content.d.ts +9 -0
  410. package/build-types/ui/tooltip/content.d.ts.map +1 -0
  411. package/build-types/ui/tooltip/context.d.ts +10 -0
  412. package/build-types/ui/tooltip/context.d.ts.map +1 -0
  413. package/build-types/ui/tooltip/index.d.ts +3 -0
  414. package/build-types/ui/tooltip/index.d.ts.map +1 -0
  415. package/build-types/ui/tooltip/styles.d.ts +12 -0
  416. package/build-types/ui/tooltip/styles.d.ts.map +1 -0
  417. package/build-types/ui/tooltip/types.d.ts +62 -0
  418. package/build-types/ui/tooltip/types.d.ts.map +1 -0
  419. package/build-types/ui/utils/colors.d.ts +17 -0
  420. package/build-types/ui/utils/colors.d.ts.map +1 -0
  421. package/build-types/ui/utils/font-size.d.ts +18 -0
  422. package/build-types/ui/utils/font-size.d.ts.map +1 -0
  423. package/build-types/ui/utils/get-valid-children.d.ts +13 -0
  424. package/build-types/ui/utils/get-valid-children.d.ts.map +1 -0
  425. package/build-types/ui/utils/index.d.ts +2 -0
  426. package/build-types/ui/utils/index.d.ts.map +1 -0
  427. package/build-types/ui/utils/space.d.ts +23 -0
  428. package/build-types/ui/utils/space.d.ts.map +1 -0
  429. package/build-types/ui/utils/types.d.ts +14 -0
  430. package/build-types/ui/utils/types.d.ts.map +1 -0
  431. package/build-types/ui/utils/use-responsive-value.d.ts +5 -0
  432. package/build-types/ui/utils/use-responsive-value.d.ts.map +1 -0
  433. package/build-types/utils/hooks/use-latest-ref.d.ts +15 -0
  434. package/build-types/utils/hooks/use-latest-ref.d.ts.map +1 -0
  435. package/build-types/utils/hooks/use-update-effect.d.ts +3 -3
  436. package/build-types/utils/hooks/use-update-effect.d.ts.map +1 -1
  437. package/build-types/utils/input/base.d.ts +3 -0
  438. package/build-types/utils/input/base.d.ts.map +1 -0
  439. package/build-types/utils/input/index.d.ts +2 -0
  440. package/build-types/utils/input/index.d.ts.map +1 -0
  441. package/build-types/utils/input/input-control.d.ts +2 -0
  442. package/build-types/utils/input/input-control.d.ts.map +1 -0
  443. package/build-types/utils/reduce-motion.d.ts +8 -0
  444. package/build-types/utils/reduce-motion.d.ts.map +1 -0
  445. package/build-types/utils/rtl.d.ts +4 -4
  446. package/build-types/utils/rtl.d.ts.map +1 -1
  447. package/build-types/utils/use-responsive-value.d.ts.map +1 -1
  448. package/build-types/utils/z-index.d.ts +3 -0
  449. package/build-types/utils/z-index.d.ts.map +1 -0
  450. package/build-types/v-stack/hook.d.ts +1 -1
  451. package/build-types/v-stack/stories/index.story.d.ts +1 -1
  452. package/build-types/validated-form-controls/components/range-control.d.ts.map +1 -1
  453. package/build-types/validated-form-controls/components/stories/overview.story.d.ts.map +1 -1
  454. package/build-types/validated-form-controls/control-with-error.d.ts.map +1 -1
  455. package/build-types/validated-form-controls/test/checkbox-control.d.ts +2 -0
  456. package/build-types/validated-form-controls/test/checkbox-control.d.ts.map +1 -0
  457. package/build-types/validated-form-controls/test/combobox-control.d.ts +2 -0
  458. package/build-types/validated-form-controls/test/combobox-control.d.ts.map +1 -0
  459. package/build-types/validated-form-controls/test/custom-select-control.d.ts +2 -0
  460. package/build-types/validated-form-controls/test/custom-select-control.d.ts.map +1 -0
  461. package/build-types/validated-form-controls/test/form-token-field.d.ts +2 -0
  462. package/build-types/validated-form-controls/test/form-token-field.d.ts.map +1 -0
  463. package/build-types/validated-form-controls/test/input-control.d.ts +2 -0
  464. package/build-types/validated-form-controls/test/input-control.d.ts.map +1 -0
  465. package/build-types/validated-form-controls/test/number-control.d.ts +2 -0
  466. package/build-types/validated-form-controls/test/number-control.d.ts.map +1 -0
  467. package/build-types/validated-form-controls/test/radio-control.d.ts +2 -0
  468. package/build-types/validated-form-controls/test/radio-control.d.ts.map +1 -0
  469. package/build-types/validated-form-controls/test/range-control.d.ts +2 -0
  470. package/build-types/validated-form-controls/test/range-control.d.ts.map +1 -0
  471. package/build-types/validated-form-controls/test/select-control.d.ts +2 -0
  472. package/build-types/validated-form-controls/test/select-control.d.ts.map +1 -0
  473. package/build-types/validated-form-controls/test/text-control.d.ts +2 -0
  474. package/build-types/validated-form-controls/test/text-control.d.ts.map +1 -0
  475. package/build-types/validated-form-controls/test/textarea-control.d.ts +2 -0
  476. package/build-types/validated-form-controls/test/textarea-control.d.ts.map +1 -0
  477. package/build-types/validated-form-controls/test/toggle-control.d.ts +2 -0
  478. package/build-types/validated-form-controls/test/toggle-control.d.ts.map +1 -0
  479. package/build-types/validated-form-controls/test/toggle-group-control.d.ts +2 -0
  480. package/build-types/validated-form-controls/test/toggle-group-control.d.ts.map +1 -0
  481. package/build-types/validated-form-controls/validity-indicator.d.ts +2 -1
  482. package/build-types/validated-form-controls/validity-indicator.d.ts.map +1 -1
  483. package/build-types/view/types.d.ts +8 -0
  484. package/build-types/view/types.d.ts.map +1 -0
  485. package/package.json +24 -24
  486. package/src/alignment-matrix-control/test/index.tsx +1 -1
  487. package/src/angle-picker-control/angle-circle.tsx +6 -5
  488. package/src/animate/types.ts +1 -1
  489. package/src/autocomplete/autocompleter-ui.tsx +1 -1
  490. package/src/autocomplete/index.tsx +33 -8
  491. package/src/autocomplete/test/index.tsx +110 -1
  492. package/src/autocomplete/types.ts +1 -1
  493. package/src/button/style.scss +8 -5
  494. package/src/calendar/style.scss +4 -2
  495. package/src/clipboard-button/index.tsx +1 -1
  496. package/src/color-palette/stories/index.story.tsx +56 -48
  497. package/src/color-picker/color-copy-button.tsx +1 -3
  498. package/src/composite/stories/index.story.tsx +1 -1
  499. package/src/confirm-dialog/component.tsx +2 -2
  500. package/src/context/context-connect.ts +3 -3
  501. package/src/context/context-system-provider.js +4 -4
  502. package/src/context/wordpress-component.ts +3 -5
  503. package/src/custom-gradient-picker/gradient-bar/control-points.tsx +3 -2
  504. package/src/custom-gradient-picker/types.ts +1 -1
  505. package/src/custom-select-control-v2/custom-select.tsx +1 -1
  506. package/src/custom-select-control-v2/stories/index.story.tsx +3 -3
  507. package/src/custom-select-control-v2/test/index.tsx +3 -3
  508. package/src/custom-select-control-v2/types.ts +4 -4
  509. package/src/date-time/date/index.tsx +1 -1
  510. package/src/date-time/test/utils.test.ts +8 -11
  511. package/src/date-time/time/index.tsx +2 -12
  512. package/src/date-time/time/test/index.tsx +69 -0
  513. package/src/date-time/utils.ts +18 -0
  514. package/src/draggable/index.native.js +17 -17
  515. package/src/draggable/types.ts +1 -1
  516. package/src/drop-zone/types.ts +1 -1
  517. package/src/dropdown/index.tsx +1 -1
  518. package/src/dropdown-menu/types.ts +1 -1
  519. package/src/external-link/index.tsx +5 -1
  520. package/src/font-size-picker/stories/index.story.tsx +133 -125
  521. package/src/form-token-field/style.scss +1 -0
  522. package/src/gradient-picker/stories/index.story.tsx +48 -42
  523. package/src/h-stack/test/index.tsx +1 -1
  524. package/src/heading/hook.ts +2 -2
  525. package/src/higher-order/with-notices/test/index.tsx +2 -2
  526. package/src/higher-order/with-notices/types.ts +1 -1
  527. package/src/higher-order/with-spoken-messages/index.tsx +2 -4
  528. package/src/icon/index.tsx +2 -2
  529. package/src/keyboard-shortcuts/index.tsx +1 -1
  530. package/src/menu/stories/index.story.tsx +1 -1
  531. package/src/menu-item/types.ts +1 -1
  532. package/src/modal/index.tsx +4 -3
  533. package/src/modal/types.ts +1 -1
  534. package/src/modal/use-modal-exit-animation.ts +2 -2
  535. package/src/navigation/README.md +1 -1
  536. package/src/navigation/types.ts +1 -1
  537. package/src/number-control/index.tsx +1 -1
  538. package/src/palette-edit/index.tsx +2 -2
  539. package/src/palette-edit/types.ts +1 -1
  540. package/src/panel/README.md +1 -1
  541. package/src/panel/body.tsx +1 -1
  542. package/src/panel/types.ts +2 -2
  543. package/src/popover/stories/index.story.tsx +1 -1
  544. package/src/private-apis.ts +0 -2
  545. package/src/radio-control/test/index.tsx +5 -4
  546. package/src/range-control/index.tsx +1 -1
  547. package/src/range-control/types.ts +2 -2
  548. package/src/resizable-box/index.tsx +1 -1
  549. package/src/resizable-box/resize-tooltip/index.tsx +1 -1
  550. package/src/resizable-box/resize-tooltip/label.tsx +1 -1
  551. package/src/resizable-box/resize-tooltip/utils.ts +2 -2
  552. package/src/sandbox/index.tsx +190 -10
  553. package/src/sandbox/test/index.tsx +65 -24
  554. package/src/sandbox/types.ts +11 -0
  555. package/src/search-control/types.ts +1 -1
  556. package/src/select-control/styles/select-control-styles.ts +1 -0
  557. package/src/slot-fill/types.ts +1 -1
  558. package/src/snackbar/list.tsx +7 -2
  559. package/src/tabs/styles.ts +1 -0
  560. package/src/text/utils.ts +18 -18
  561. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +18 -16
  562. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +1 -1
  563. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +4 -6
  564. package/src/toggle-group-control/types.ts +1 -1
  565. package/src/tree-grid/roving-tab-index-item.tsx +1 -1
  566. package/src/tree-grid/types.ts +1 -1
  567. package/src/utils/element-rect.ts +1 -1
  568. package/src/utils/hooks/use-update-effect.js +2 -2
  569. package/src/utils/rtl.js +4 -4
  570. package/src/utils/use-responsive-value.ts +1 -5
  571. package/src/v-stack/test/index.tsx +1 -1
  572. package/src/validated-form-controls/components/stories/overview.story.tsx +2 -1
  573. package/src/validated-form-controls/control-with-error.tsx +44 -4
  574. package/src/validated-form-controls/test/checkbox-control.tsx +49 -0
  575. package/src/validated-form-controls/test/combobox-control.tsx +61 -0
  576. package/src/validated-form-controls/test/control-with-error.tsx +182 -1
  577. package/src/validated-form-controls/test/custom-select-control.tsx +60 -0
  578. package/src/validated-form-controls/test/form-token-field.tsx +52 -0
  579. package/src/validated-form-controls/test/input-control.tsx +42 -0
  580. package/src/validated-form-controls/test/number-control.tsx +44 -0
  581. package/src/validated-form-controls/test/radio-control.tsx +61 -0
  582. package/src/validated-form-controls/test/range-control.tsx +73 -0
  583. package/src/validated-form-controls/test/select-control.tsx +57 -0
  584. package/src/validated-form-controls/test/text-control.tsx +49 -0
  585. package/src/validated-form-controls/test/textarea-control.tsx +51 -0
  586. package/src/validated-form-controls/test/toggle-control.tsx +49 -0
  587. package/src/validated-form-controls/test/toggle-group-control.tsx +28 -0
  588. package/src/validated-form-controls/validity-indicator.tsx +3 -0
@@ -31,7 +31,7 @@ export const CustomSelectContext =
31
31
  CustomSelectContext.displayName = 'CustomSelectContext';
32
32
 
33
33
  function defaultRenderSelectedValue(
34
- value: CustomSelectButtonProps[ 'value' ]
34
+ value: CustomSelectButtonProps[ 'defaultValue' ]
35
35
  ) {
36
36
  const isValueEmpty = Array.isArray( value )
37
37
  ? value.length === 0
@@ -55,11 +55,11 @@ const meta: Meta< typeof CustomSelectControlV2 > = {
55
55
  export default meta;
56
56
 
57
57
  const Template: StoryFn< typeof CustomSelectControlV2 > = ( props ) => {
58
- const [ value, setValue ] = useState< string | string[] >();
58
+ const [ value, setValue ] = useState< string | readonly string[] >();
59
59
  return (
60
60
  <CustomSelectControlV2
61
61
  { ...props }
62
- onChange={ ( nextValue: string | string[] ) => {
62
+ onChange={ ( nextValue ) => {
63
63
  setValue( nextValue );
64
64
  props.onChange?.( nextValue );
65
65
  } }
@@ -114,7 +114,7 @@ MultipleSelection.args = {
114
114
  ),
115
115
  };
116
116
 
117
- const renderItem = ( gravatar: string | string[] ) => {
117
+ const renderItem = ( gravatar: string | readonly string[] ) => {
118
118
  const avatar = `https://gravatar.com/avatar?d=${ gravatar }`;
119
119
  return (
120
120
  <div style={ { display: 'flex', alignItems: 'center' } }>
@@ -47,11 +47,11 @@ const defaultProps = {
47
47
  };
48
48
 
49
49
  const ControlledCustomSelectControl = ( props: CustomSelectProps ) => {
50
- const [ value, setValue ] = useState< string | string[] >();
50
+ const [ value, setValue ] = useState< string | readonly string[] >();
51
51
  return (
52
52
  <UncontrolledCustomSelectControlV2
53
53
  { ...props }
54
- onChange={ ( nextValue: string | string[] ) => {
54
+ onChange={ ( nextValue ) => {
55
55
  setValue( nextValue );
56
56
  props.onChange?.( nextValue );
57
57
  } }
@@ -375,7 +375,7 @@ describe.each( [
375
375
  } );
376
376
 
377
377
  it( 'Should allow rendering a custom value when using `renderSelectedValue`', async () => {
378
- const renderValue = ( value: string | string[] ) => {
378
+ const renderValue = ( value: string | readonly string[] ) => {
379
379
  return <img src={ `${ value }.jpg` } alt={ value as string } />;
380
380
  };
381
381
 
@@ -32,21 +32,21 @@ export type CustomSelectButtonProps = {
32
32
  * An optional default value for the control when used in uncontrolled mode.
33
33
  * If left `undefined`, the first non-disabled item will be used.
34
34
  */
35
- defaultValue?: string | string[];
35
+ defaultValue?: string | readonly string[];
36
36
  /**
37
37
  * A function that receives the new value of the input.
38
38
  */
39
- onChange?: ( newValue: string | string[] ) => void;
39
+ onChange?: ( newValue: string | readonly string[] ) => void;
40
40
  /**
41
41
  * Can be used to render select UI with custom styled values.
42
42
  */
43
43
  renderSelectedValue?: (
44
- selectedValue: string | string[]
44
+ selectedValue: string | readonly string[]
45
45
  ) => React.ReactNode;
46
46
  /**
47
47
  * The value of the control when used in uncontrolled mode.
48
48
  */
49
- value?: string | string[];
49
+ value?: string | readonly string[];
50
50
  };
51
51
 
52
52
  // Props only exposed on the internal implementation
@@ -314,7 +314,7 @@ function Day( {
314
314
  onClick,
315
315
  onKeyDown,
316
316
  }: DayProps ) {
317
- const ref = useRef< HTMLButtonElement >();
317
+ const ref = useRef< HTMLButtonElement >( null );
318
318
 
319
319
  // Focus the day when it becomes focusable, e.g. because an arrow key is
320
320
  // pressed. Only do this if focus is allowed - this stops us stealing focus
@@ -1,17 +1,14 @@
1
- /**
2
- * External dependencies
3
- */
4
1
  import timezoneMock from 'timezone-mock';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
2
  import { getSettings, setSettings, type DateSettings } from '@wordpress/date';
3
+ import { inputToDate, getDaysInMonth } from '../utils';
10
4
 
11
- /**
12
- * Internal dependencies
13
- */
14
- import { inputToDate } from '../utils';
5
+ describe( 'getDaysInMonth', () => {
6
+ it( 'should return the number of days in the month', () => {
7
+ expect( getDaysInMonth( 2026, 0 ) ).toBe( 31 );
8
+ expect( getDaysInMonth( 2026, 1 ) ).toBe( 28 );
9
+ expect( getDaysInMonth( 2028, 1 ) ).toBe( 29 );
10
+ } );
11
+ } );
15
12
 
16
13
  describe( 'inputToDate', () => {
17
14
  let originalSettings: DateSettings;
@@ -1,18 +1,7 @@
1
- /**
2
- * External dependencies
3
- */
4
1
  import { startOfMinute } from 'date-fns';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
2
  import { useState, useMemo, useEffect } from '@wordpress/element';
10
3
  import { __ } from '@wordpress/i18n';
11
4
  import { date as formatDate } from '@wordpress/date';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
5
  import BaseControl from '../../base-control';
17
6
  import { VisuallyHidden } from '../../visually-hidden';
18
7
  import SelectControl from '../../select-control';
@@ -33,6 +22,7 @@ import {
33
22
  buildPadInputStateReducer,
34
23
  validateInputElementTarget,
35
24
  setInConfiguredTimezone,
25
+ getDaysInMonth,
36
26
  } from '../utils';
37
27
  import { TIMEZONELESS_FORMAT } from '../constants';
38
28
  import { TimeInput } from './time-input';
@@ -150,7 +140,7 @@ export function TimePicker( {
150
140
  value={ day }
151
141
  step={ 1 }
152
142
  min={ 1 }
153
- max={ 31 }
143
+ max={ getDaysInMonth( Number( year ), Number( month ) - 1 ) }
154
144
  required
155
145
  spinControls="none"
156
146
  isPressEnterToChange
@@ -158,6 +158,75 @@ describe( 'TimePicker', () => {
158
158
  expect( onChangeSpy ).toHaveBeenCalledWith( '1986-10-18T11:59:00' );
159
159
  } );
160
160
 
161
+ it( 'should call onChange with a bounded day if out of bounds', async () => {
162
+ const user = userEvent.setup();
163
+
164
+ const onChangeSpy = jest.fn();
165
+
166
+ render(
167
+ <TimePicker
168
+ currentTime="2026-02-05T00:00:00"
169
+ onChange={ onChangeSpy }
170
+ is12Hour
171
+ />
172
+ );
173
+
174
+ const dayInput = screen.getByLabelText( 'Day' );
175
+
176
+ await user.clear( dayInput );
177
+ await user.type( dayInput, '30' );
178
+ await user.keyboard( '{Tab}' );
179
+
180
+ expect( onChangeSpy ).toHaveBeenCalledWith( '2026-02-28T00:00:00' );
181
+ expect( dayInput ).toHaveValue( 28 );
182
+ } );
183
+
184
+ it( 'should clamp day when switching months', async () => {
185
+ const user = userEvent.setup();
186
+
187
+ const onChangeSpy = jest.fn();
188
+
189
+ render(
190
+ <TimePicker
191
+ currentTime="2026-03-31T00:00:00"
192
+ onChange={ onChangeSpy }
193
+ is12Hour
194
+ />
195
+ );
196
+
197
+ const monthSelect = screen.getByLabelText( 'Month' );
198
+ const dayInput = screen.getByLabelText( 'Day' );
199
+
200
+ await user.selectOptions( monthSelect, '02' );
201
+
202
+ expect( onChangeSpy ).toHaveBeenCalledWith( '2026-02-28T00:00:00' );
203
+ expect( dayInput ).toHaveValue( 28 );
204
+ } );
205
+
206
+ it( 'should clamp day when switching year from leap to non-leap', async () => {
207
+ const user = userEvent.setup();
208
+
209
+ const onChangeSpy = jest.fn();
210
+
211
+ render(
212
+ <TimePicker
213
+ currentTime="2028-02-29T00:00:00"
214
+ onChange={ onChangeSpy }
215
+ is12Hour
216
+ />
217
+ );
218
+
219
+ const dayInput = screen.getByLabelText( 'Day' );
220
+ const yearInput = screen.getByLabelText( 'Year' );
221
+
222
+ await user.clear( yearInput );
223
+ await user.type( yearInput, '2026' );
224
+ await user.keyboard( '{Tab}' );
225
+
226
+ expect( onChangeSpy ).toHaveBeenCalledWith( '2026-02-28T00:00:00' );
227
+ expect( dayInput ).toHaveValue( 28 );
228
+ } );
229
+
161
230
  it( 'should switch to PM correctly', async () => {
162
231
  const user = userEvent.setup();
163
232
 
@@ -110,6 +110,19 @@ export function buildPadInputStateReducer( pad: number ) {
110
110
  };
111
111
  }
112
112
 
113
+ /**
114
+ * Returns the number of days in a month.
115
+ *
116
+ * @param year The year
117
+ * @param month The month, zero-indexed (0-11)
118
+ *
119
+ * @return The number of days in the month
120
+ */
121
+ export const getDaysInMonth = ( year: number, month: number ) =>
122
+ // Take advantage of JavaScript's built-in date wrapping logic, where day 0
123
+ // of the next month is interpreted as the last day of the preceding month.
124
+ new Date( year, month + 1, 0 ).getDate();
125
+
113
126
  /**
114
127
  * Updates specific date fields in the configured timezone and returns a new
115
128
  * UTC date.
@@ -139,6 +152,11 @@ export function setInConfiguredTimezone(
139
152
  ...updates,
140
153
  };
141
154
 
155
+ // Clamp the day to the last valid day of the month, to avoid producing
156
+ // invalid date strings (e.g. "2026-02-31").
157
+ const daysInMonth = getDaysInMonth( values.year, values.month );
158
+ values.date = Math.min( values.date, daysInMonth );
159
+
142
160
  const year = String( values.year ).padStart( 4, '0' );
143
161
  const month = String( values.month + 1 ).padStart( 2, '0' );
144
162
  const day = String( values.date ).padStart( 2, '0' );
@@ -29,14 +29,14 @@ const { Provider } = Context;
29
29
  /**
30
30
  * Draggable component.
31
31
  *
32
- * @param {Object} props Component props.
33
- * @param {JSX.Element} props.children Children to be rendered.
34
- * @param {Function} [props.onDragEnd] Callback when dragging ends.
35
- * @param {Function} [props.onDragOver] Callback when dragging happens over an element.
36
- * @param {Function} [props.onDragStart] Callback when dragging starts.
37
- * @param {string} [props.testID] Id used for querying the pan gesture in tests.
32
+ * @param {Object} props Component props.
33
+ * @param {React.JSX.Element} props.children Children to be rendered.
34
+ * @param {Function} [props.onDragEnd] Callback when dragging ends.
35
+ * @param {Function} [props.onDragOver] Callback when dragging happens over an element.
36
+ * @param {Function} [props.onDragStart] Callback when dragging starts.
37
+ * @param {string} [props.testID] Id used for querying the pan gesture in tests.
38
38
  *
39
- * @return {JSX.Element} The component to be rendered.
39
+ * @return {React.JSX.Element} The component to be rendered.
40
40
  */
41
41
  const Draggable = ( {
42
42
  children,
@@ -167,17 +167,17 @@ const Draggable = ( {
167
167
  *
168
168
  * This component acts as the trigger for the dragging functionality.
169
169
  *
170
- * @param {Object} props Component props.
171
- * @param {JSX.Element} props.children Children to be rendered.
172
- * @param {*} props.id Identifier passed within the event callbacks.
173
- * @param {boolean} [props.enabled] Enables the long-press gesture.
174
- * @param {number} [props.maxDistance] Maximum distance, that defines how far the finger is allowed to travel during a long press gesture.
175
- * @param {number} [props.minDuration] Minimum time, that a finger must remain pressed on the corresponding view.
176
- * @param {Function} [props.onLongPress] Callback when long-press gesture is triggered over an element.
177
- * @param {Function} [props.onLongPressEnd] Callback when long-press gesture ends.
178
- * @param {string} [props.testID] Id used for querying the long-press gesture handler in tests.
170
+ * @param {Object} props Component props.
171
+ * @param {React.JSX.Element} props.children Children to be rendered.
172
+ * @param {*} props.id Identifier passed within the event callbacks.
173
+ * @param {boolean} [props.enabled] Enables the long-press gesture.
174
+ * @param {number} [props.maxDistance] Maximum distance, that defines how far the finger is allowed to travel during a long press gesture.
175
+ * @param {number} [props.minDuration] Minimum time, that a finger must remain pressed on the corresponding view.
176
+ * @param {Function} [props.onLongPress] Callback when long-press gesture is triggered over an element.
177
+ * @param {Function} [props.onLongPressEnd] Callback when long-press gesture ends.
178
+ * @param {string} [props.testID] Id used for querying the long-press gesture handler in tests.
179
179
  *
180
- * @return {JSX.Element} The component to be rendered.
180
+ * @return {React.JSX.Element} The component to be rendered.
181
181
  */
182
182
  const DraggableTrigger = ( {
183
183
  children,
@@ -16,7 +16,7 @@ export type DraggableProps = {
16
16
  * `onDragEnd` handler.
17
17
  */
18
18
  onDraggableEnd: ( event: DragEvent ) => void;
19
- } ) => JSX.Element | null;
19
+ } ) => React.JSX.Element | null;
20
20
  /**
21
21
  * Whether to append the cloned element to the `ownerDocument` body.
22
22
  * By default, elements sourced by id are appended to the element's wrapper.
@@ -10,7 +10,7 @@ export type DropZoneProps = {
10
10
  *
11
11
  * @default "upload"
12
12
  */
13
- icon?: JSX.Element;
13
+ icon?: React.JSX.Element;
14
14
  /**
15
15
  * A string to be shown within the drop zone area.
16
16
  *
@@ -61,7 +61,7 @@ const UnconnectedDropdown = (
61
61
  // re-renders when the popover's anchor updates.
62
62
  const [ fallbackPopoverAnchor, setFallbackPopoverAnchor ] =
63
63
  useState< HTMLDivElement | null >( null );
64
- const containerRef = useRef< HTMLDivElement >();
64
+ const containerRef = useRef< HTMLDivElement >( null );
65
65
 
66
66
  const [ isOpen, setIsOpen ] = useControlledValue( {
67
67
  defaultValue: defaultOpen,
@@ -58,7 +58,7 @@ type ToggleProps = Partial<
58
58
  'label' | 'text'
59
59
  >
60
60
  > & {
61
- as?: React.ElementType | keyof JSX.IntrinsicElements;
61
+ as?: React.ElementType | keyof React.JSX.IntrinsicElements;
62
62
  'data-toolbar-item'?: boolean;
63
63
  };
64
64
 
@@ -67,7 +67,11 @@ function UnforwardedExternalLink(
67
67
  { children }
68
68
  </span>
69
69
  <span
70
- className="components-external-link__icon"
70
+ className={ clsx(
71
+ 'components-external-link__icon',
72
+ // This class prevents the arrow from being replaced by a Twemoji image.
73
+ 'wp-exclude-emoji'
74
+ ) }
71
75
  aria-label={
72
76
  /* translators: accessibility text */
73
77
  __( '(opens in a new tab)' )