@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
@@ -127,7 +127,7 @@ export type PaletteEditListViewProps< T extends Color | Gradient > = {
127
127
  onChange: ( newElements?: T[] ) => void;
128
128
  isGradient: T extends Gradient ? true : false;
129
129
  canOnlyChangeValues: PaletteEditProps[ 'canOnlyChangeValues' ];
130
- addColorRef: React.RefObject< HTMLButtonElement >;
130
+ addColorRef: React.RefObject< HTMLButtonElement | null >;
131
131
  editingElement?: EditingElement;
132
132
  popoverProps?: PaletteEditProps[ 'popoverProps' ];
133
133
  setEditingElement: ( newEditingElement?: EditingElement ) => void;
@@ -117,7 +117,7 @@ The CSS class to apply to the wrapper element.
117
117
 
118
118
  - Required: No
119
119
 
120
- ###### `icon`: `JSX.Element`
120
+ ###### `icon`: `React.JSX.Element`
121
121
 
122
122
  An icon to be shown next to the title.
123
123
 
@@ -57,7 +57,7 @@ export function UnforwardedPanelBody(
57
57
  };
58
58
 
59
59
  // Ref is used so that the effect does not re-run upon scrollAfterOpen changing value.
60
- const scrollAfterOpenRef = useRef< boolean | undefined >();
60
+ const scrollAfterOpenRef = useRef< boolean >( undefined );
61
61
  scrollAfterOpenRef.current = scrollAfterOpen;
62
62
  // Runs after initial render.
63
63
  useUpdateEffect( () => {
@@ -70,7 +70,7 @@ export type PanelBodyProps = {
70
70
  /**
71
71
  * An icon to be shown next to the title.
72
72
  */
73
- icon?: JSX.Element;
73
+ icon?: React.JSX.Element;
74
74
  /**
75
75
  * Whether or not the panel will start open.
76
76
  */
@@ -104,7 +104,7 @@ export type PanelBodyTitleProps = Omit< ButtonAsButtonProps, 'icon' > & {
104
104
  /**
105
105
  * An icon to be shown next to the title.
106
106
  */
107
- icon?: JSX.Element;
107
+ icon?: React.JSX.Element;
108
108
  /**
109
109
  * Whether or not the `PanelBody` is currently opened or not.
110
110
  */
@@ -93,7 +93,7 @@ export const Default: StoryObj< typeof Popover > = {
93
93
  decorators: [
94
94
  ( Story ) => {
95
95
  const [ isVisible, setIsVisible ] = useState( false );
96
- const buttonRef = useRef< HTMLButtonElement | undefined >();
96
+ const buttonRef = useRef< HTMLButtonElement >( undefined );
97
97
  const toggleVisible = ( event: React.MouseEvent ) => {
98
98
  if ( buttonRef.current && event.target !== buttonRef.current ) {
99
99
  return;
@@ -30,7 +30,6 @@ import {
30
30
  ValidatedToggleGroupControl,
31
31
  } from './validated-form-controls';
32
32
  import { ValidatedFormTokenField } from './validated-form-controls/components/form-token-field';
33
- import { Picker } from './color-picker/picker';
34
33
 
35
34
  export const privateApis = {};
36
35
  lock( privateApis, {
@@ -46,7 +45,6 @@ lock( privateApis, {
46
45
  DateCalendar,
47
46
  DateRangeCalendar,
48
47
  TZDate,
49
- Picker,
50
48
  useDrag,
51
49
  ValidatedInputControl,
52
50
  ValidatedCheckboxControl,
@@ -238,7 +238,8 @@ describe.each( [
238
238
  name: defaultProps.options[ 1 ].label,
239
239
  } )
240
240
  ).toHaveFocus();
241
- expect( onChangeSpy ).toHaveBeenCalledTimes( 2 );
241
+
242
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 1 );
242
243
  expect( onChangeSpy ).toHaveBeenLastCalledWith(
243
244
  defaultProps.options[ 1 ].value
244
245
  );
@@ -253,8 +254,8 @@ describe.each( [
253
254
  name: defaultProps.options[ 0 ].label,
254
255
  } )
255
256
  ).toHaveFocus();
256
- // TODO: why called twice for every interaction?
257
- expect( onChangeSpy ).toHaveBeenCalledTimes( 6 );
257
+
258
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 3 );
258
259
  expect( onChangeSpy ).toHaveBeenLastCalledWith(
259
260
  defaultProps.options[ 0 ].value
260
261
  );
@@ -268,7 +269,7 @@ describe.each( [
268
269
  } )
269
270
  ).toHaveFocus();
270
271
 
271
- expect( onChangeSpy ).toHaveBeenCalledTimes( 8 );
272
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 4 );
272
273
  expect( onChangeSpy ).toHaveBeenLastCalledWith(
273
274
  defaultProps.options[ 2 ].value
274
275
  );
@@ -122,7 +122,7 @@ function UnforwardedRangeControl(
122
122
  const [ showTooltip, setShowTooltip ] = useState( hasTooltip );
123
123
  const [ isFocused, setIsFocused ] = useState( false );
124
124
 
125
- const inputRef = useRef< HTMLInputElement >();
125
+ const inputRef = useRef< HTMLInputElement >( null );
126
126
  const isCurrentlyFocused = inputRef.current?.matches( ':focus' );
127
127
  const isThumbFocused = ! disabled && isFocused;
128
128
 
@@ -5,7 +5,7 @@ import type {
5
5
  CSSProperties,
6
6
  FocusEventHandler,
7
7
  MouseEventHandler,
8
- MutableRefObject,
8
+ RefObject,
9
9
  } from 'react';
10
10
 
11
11
  /**
@@ -267,7 +267,7 @@ export type ThumbProps = {
267
267
  export type TooltipProps = {
268
268
  show?: boolean;
269
269
  placement?: string;
270
- inputRef?: MutableRefObject< HTMLElement | undefined >;
270
+ inputRef?: RefObject< HTMLElement | null >;
271
271
  tooltipPlacement?: string;
272
272
  value?: ControlledRangeValue;
273
273
  renderTooltipContent?: (
@@ -104,7 +104,7 @@ function UnforwardedResizableBox(
104
104
  ...props
105
105
  }: ResizableBoxProps,
106
106
  ref: ForwardedRef< Resizable >
107
- ): JSX.Element {
107
+ ) {
108
108
  return (
109
109
  <Resizable
110
110
  className={ clsx(
@@ -46,7 +46,7 @@ function ResizeTooltip(
46
46
  ...props
47
47
  }: ResizeTooltipProps,
48
48
  ref: ForwardedRef< HTMLDivElement >
49
- ): JSX.Element | null {
49
+ ) {
50
50
  const { label, resizeListener } = useResizeLabel( {
51
51
  axis,
52
52
  fadeTimeout,
@@ -35,7 +35,7 @@ type LabelProps = React.DetailedHTMLProps<
35
35
  function Label(
36
36
  { label, position = POSITIONS.corner, zIndex = 1000, ...props }: LabelProps,
37
37
  ref: ForwardedRef< HTMLDivElement >
38
- ): JSX.Element | null {
38
+ ) {
39
39
  const showLabel = !! label;
40
40
 
41
41
  const isBottom = position === POSITIONS.bottom;
@@ -19,7 +19,7 @@ interface UseResizeLabelProps {
19
19
  /** The label value. */
20
20
  label?: string;
21
21
  /** Element to be rendered for resize listening events. */
22
- resizeListener: JSX.Element;
22
+ resizeListener: React.JSX.Element;
23
23
  }
24
24
 
25
25
  interface UseResizeLabelArgs {
@@ -82,7 +82,7 @@ export function useResizeLabel( {
82
82
  * This timeout is used with setMoveX and setMoveY to determine of
83
83
  * both width and height values have changed at (roughly) the same time.
84
84
  */
85
- const moveTimeoutRef = useRef< number >();
85
+ const moveTimeoutRef = useRef< number >( undefined );
86
86
 
87
87
  const debounceUnsetMoveXY = useCallback( () => {
88
88
  const unsetMoveXY = () => {
@@ -6,6 +6,7 @@ import {
6
6
  useRef,
7
7
  useState,
8
8
  useEffect,
9
+ useMemo,
9
10
  } from '@wordpress/element';
10
11
  import { useFocusableIframe, useMergeRefs } from '@wordpress/compose';
11
12
 
@@ -14,6 +15,8 @@ import { useFocusableIframe, useMergeRefs } from '@wordpress/compose';
14
15
  */
15
16
  import type { SandBoxProps } from './types';
16
17
 
18
+ type SandBoxContentProps = Omit< SandBoxProps, 'allowSameOrigin' >;
19
+
17
20
  const observeAndResizeJS = function () {
18
21
  const { MutationObserver } = window;
19
22
 
@@ -115,17 +118,176 @@ const style = `
115
118
  `;
116
119
 
117
120
  /**
118
- * This component provides an isolated environment for arbitrary HTML via iframes.
121
+ * Builds the full HTML document string for the sandbox iframe content.
122
+ */
123
+ function buildSandBoxDocument( {
124
+ html,
125
+ title,
126
+ type,
127
+ styles,
128
+ scripts,
129
+ }: {
130
+ html: string;
131
+ title: string;
132
+ type?: string;
133
+ styles: string[];
134
+ scripts: string[];
135
+ } ): string {
136
+ const htmlDoc = (
137
+ <html lang={ document.documentElement.lang } className={ type }>
138
+ <head>
139
+ <title>{ title }</title>
140
+ <style dangerouslySetInnerHTML={ { __html: style } } />
141
+ { styles.map( ( rules, i ) => (
142
+ <style
143
+ key={ i }
144
+ dangerouslySetInnerHTML={ { __html: rules } }
145
+ />
146
+ ) ) }
147
+ </head>
148
+ <body
149
+ data-resizable-iframe-connected="data-resizable-iframe-connected"
150
+ className={ type }
151
+ >
152
+ <div dangerouslySetInnerHTML={ { __html: html } } />
153
+ <script
154
+ type="text/javascript"
155
+ dangerouslySetInnerHTML={ {
156
+ __html: `(${ observeAndResizeJS.toString() })();`,
157
+ } }
158
+ />
159
+ { scripts.map( ( src ) => (
160
+ <script key={ src } src={ src } />
161
+ ) ) }
162
+ </body>
163
+ </html>
164
+ );
165
+
166
+ return '<!DOCTYPE html>' + renderToString( htmlDoc );
167
+ }
168
+
169
+ /**
170
+ * Isolated sandbox that uses the `srcdoc` attribute to render content
171
+ * without `allow-same-origin`. This is the default for user-controlled
172
+ * content (e.g., the HTML block) where same-origin access would be a
173
+ * security risk.
119
174
  *
120
- * ```jsx
121
- * import { SandBox } from '@wordpress/components';
175
+ * Because `srcdoc` is a declarative attribute, the browser automatically
176
+ * re-renders the content when the iframe is moved in the DOM (e.g.,
177
+ * block reordering), so no `load` event listener is needed.
178
+ * The `message` listener is re-synced on every `load` so
179
+ * it follows the iframe if it's reparented into a different document.
180
+ */
181
+ function IsolatedSandBox( {
182
+ html = '',
183
+ title = '',
184
+ type,
185
+ styles = [],
186
+ scripts = [],
187
+ onFocus,
188
+ tabIndex,
189
+ }: SandBoxContentProps ) {
190
+ const ref = useRef< HTMLIFrameElement >( null );
191
+ const [ width, setWidth ] = useState( 0 );
192
+ const [ height, setHeight ] = useState( 0 );
193
+
194
+ const srcDoc = useMemo(
195
+ () => buildSandBoxDocument( { html, title, type, styles, scripts } ),
196
+ [ html, title, type, styles, scripts ]
197
+ );
198
+
199
+ useEffect( () => {
200
+ const iframe = ref.current;
201
+ if ( ! iframe ) {
202
+ return;
203
+ }
204
+
205
+ function checkMessageForResize( event: MessageEvent ) {
206
+ // Verify that the mounted element is the source of the message.
207
+ // iframe.contentWindow is accessible cross-origin as a
208
+ // WindowProxy reference, so this check still works without
209
+ // allow-same-origin.
210
+ if ( ! iframe || iframe.contentWindow !== event.source ) {
211
+ return;
212
+ }
213
+
214
+ // Attempt to parse the message data as JSON if passed as string.
215
+ let data = event.data || {};
216
+
217
+ if ( 'string' === typeof data ) {
218
+ try {
219
+ data = JSON.parse( data );
220
+ } catch {}
221
+ }
222
+
223
+ // Update the state only if the message is formatted as we expect,
224
+ // i.e. as an object with a 'resize' action.
225
+ if ( 'resize' !== data.action ) {
226
+ return;
227
+ }
228
+
229
+ setWidth( data.width );
230
+ setHeight( data.height );
231
+ }
232
+
233
+ let currentView: Window | null = null;
234
+ function syncListener() {
235
+ const view = iframe?.ownerDocument?.defaultView ?? null;
236
+ if ( view === currentView ) {
237
+ return;
238
+ }
239
+
240
+ currentView?.removeEventListener(
241
+ 'message',
242
+ checkMessageForResize
243
+ );
244
+
245
+ currentView = view;
246
+ currentView?.addEventListener( 'message', checkMessageForResize );
247
+ }
248
+
249
+ syncListener();
250
+ iframe.addEventListener( 'load', syncListener );
251
+
252
+ return () => {
253
+ iframe.removeEventListener( 'load', syncListener );
254
+ currentView?.removeEventListener(
255
+ 'message',
256
+ checkMessageForResize
257
+ );
258
+ };
259
+ }, [] );
260
+
261
+ return (
262
+ <iframe
263
+ ref={ useMergeRefs( [ ref, useFocusableIframe() ] ) }
264
+ title={ title }
265
+ tabIndex={ tabIndex }
266
+ className="components-sandbox"
267
+ sandbox="allow-scripts allow-presentation"
268
+ srcDoc={ srcDoc }
269
+ onFocus={ onFocus }
270
+ width={ Math.ceil( width ) }
271
+ height={ Math.ceil( height ) }
272
+ />
273
+ );
274
+ }
275
+
276
+ /**
277
+ * Same-origin sandbox that writes to `contentDocument` directly. This
278
+ * preserves the parent page's URL as the iframe's document URL, which
279
+ * provides a valid Referer header for nested iframes (required by
280
+ * providers like YouTube).
122
281
  *
123
- * const MySandBox = () => (
124
- * <SandBox html="<p>Content</p>" title="SandBox" type="embed" />
125
- * );
126
- * ```
282
+ * Only used when `allowSameOrigin` is true — i.e., for server-fetched
283
+ * oEmbed previews that are not directly user-controlled.
284
+ *
285
+ * This implementation is intentionally kept close to the original
286
+ * pre-refactor code to preserve past bugfixes:
287
+ * - load listener for iframe re-initialization after DOM moves (#21916)
288
+ * - forceRerender guard to avoid unnecessary full rewrites (#20176)
127
289
  */
128
- function SandBox( {
290
+ function SameOriginSandBox( {
129
291
  html = '',
130
292
  title = '',
131
293
  type,
@@ -133,8 +295,8 @@ function SandBox( {
133
295
  scripts = [],
134
296
  onFocus,
135
297
  tabIndex,
136
- }: SandBoxProps ) {
137
- const ref = useRef< HTMLIFrameElement >();
298
+ }: SandBoxContentProps ) {
299
+ const ref = useRef< HTMLIFrameElement >( null );
138
300
  const [ width, setWidth ] = useState( 0 );
139
301
  const [ height, setHeight ] = useState( 0 );
140
302
 
@@ -292,4 +454,22 @@ function SandBox( {
292
454
  );
293
455
  }
294
456
 
457
+ /**
458
+ * This component provides an isolated environment for arbitrary HTML via iframes.
459
+ *
460
+ * ```jsx
461
+ * import { SandBox } from '@wordpress/components';
462
+ *
463
+ * const MySandBox = () => (
464
+ * <SandBox html="<p>Content</p>" title="SandBox" type="embed" />
465
+ * );
466
+ * ```
467
+ */
468
+ function SandBox( { allowSameOrigin = false, ...contentProps }: SandBoxProps ) {
469
+ if ( allowSameOrigin ) {
470
+ return <SameOriginSandBox { ...contentProps } />;
471
+ }
472
+ return <IsolatedSandBox { ...contentProps } />;
473
+ }
474
+
295
475
  export default SandBox;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { fireEvent, render, screen, within } from '@testing-library/react';
4
+ import { fireEvent, render, screen } from '@testing-library/react';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -16,10 +16,7 @@ import SandBox from '..';
16
16
  describe( 'SandBox', () => {
17
17
  const TestWrapper = () => {
18
18
  const [ html, setHtml ] = useState(
19
- // MutationObserver implementation from JSDom does not work as intended
20
- // with iframes so we need to ignore it for the time being.
21
- '<script type="text/javascript">window.MutationObserver = null;</script>' +
22
- '<iframe title="Mock Iframe" src="https://super.embed"></iframe>'
19
+ '<iframe title="Mock Iframe" src="https://super.embed"></iframe>'
23
20
  );
24
21
 
25
22
  const updateHtml = () => {
@@ -38,34 +35,78 @@ describe( 'SandBox', () => {
38
35
  );
39
36
  };
40
37
 
41
- it( 'should rerender with new emdeded content if html prop changes', () => {
38
+ it( 'should not include allow-same-origin by default', () => {
39
+ render( <SandBox html="<p>Hello</p>" title="Test" /> );
40
+
41
+ const iframe = screen.getByTitle< HTMLIFrameElement >( 'Test' );
42
+
43
+ expect( iframe ).toHaveAttribute(
44
+ 'sandbox',
45
+ 'allow-scripts allow-presentation'
46
+ );
47
+ expect( iframe.getAttribute( 'sandbox' ) ).not.toContain(
48
+ 'allow-same-origin'
49
+ );
50
+ } );
51
+
52
+ it( 'should set srcdoc with the provided html content', () => {
53
+ render( <SandBox html="<p>Hello</p>" title="Test Title" /> );
54
+
55
+ const iframe = screen.getByTitle< HTMLIFrameElement >( 'Test Title' );
56
+ const srcDoc = iframe.getAttribute( 'srcdoc' ) ?? '';
57
+
58
+ expect( srcDoc ).toContain( '<p>Hello</p>' );
59
+ expect( srcDoc ).toContain( '<title>Test Title</title>' );
60
+ } );
61
+
62
+ it( 'should include custom styles in srcdoc', () => {
63
+ render(
64
+ <SandBox
65
+ html="<p>Styled</p>"
66
+ title="Styled Test"
67
+ styles={ [ '.custom { color: red; }' ] }
68
+ />
69
+ );
70
+
71
+ const iframe = screen.getByTitle< HTMLIFrameElement >( 'Styled Test' );
72
+ const srcDoc = iframe.getAttribute( 'srcdoc' ) ?? '';
73
+
74
+ expect( srcDoc ).toContain( '.custom { color: red; }' );
75
+ } );
76
+
77
+ it( 'should include script tags in srcdoc', () => {
78
+ render(
79
+ <SandBox
80
+ html="<p>Script</p>"
81
+ title="Script Test"
82
+ scripts={ [ 'https://example.com/embed.js' ] }
83
+ />
84
+ );
85
+
86
+ const iframe = screen.getByTitle< HTMLIFrameElement >( 'Script Test' );
87
+ const srcDoc = iframe.getAttribute( 'srcdoc' ) ?? '';
88
+
89
+ expect( srcDoc ).toContain(
90
+ '<script src="https://example.com/embed.js">'
91
+ );
92
+ } );
93
+
94
+ it( 'should update srcdoc when html prop changes', () => {
42
95
  render( <TestWrapper /> );
43
96
 
44
97
  const iframe =
45
98
  screen.getByTitle< HTMLIFrameElement >( 'SandBox Title' );
46
99
 
47
- if ( ! iframe.contentWindow ) {
48
- throw new Error();
49
- }
50
-
51
- let sandboxedIframe = within(
52
- iframe.contentWindow.document.body
53
- ).getByTitle( 'Mock Iframe' );
54
-
55
- expect( sandboxedIframe ).toHaveAttribute(
56
- 'src',
57
- 'https://super.embed'
100
+ expect( iframe ).toHaveAttribute(
101
+ 'srcdoc',
102
+ expect.stringContaining( 'https://super.embed' )
58
103
  );
59
104
 
60
105
  fireEvent.click( screen.getByRole( 'button' ) );
61
106
 
62
- sandboxedIframe = within(
63
- iframe.contentWindow.document.body
64
- ).getByTitle( 'Mock Iframe' );
65
-
66
- expect( sandboxedIframe ).toHaveAttribute(
67
- 'src',
68
- 'https://another.super.embed'
107
+ expect( iframe ).toHaveAttribute(
108
+ 'srcdoc',
109
+ expect.stringContaining( 'https://another.super.embed' )
69
110
  );
70
111
  } );
71
112
  } );
@@ -1,4 +1,15 @@
1
1
  export type SandBoxProps = {
2
+ /**
3
+ * Whether to include `allow-same-origin` in the iframe's sandbox
4
+ * attribute. When true, nested iframes (such as third-party embeds)
5
+ * can access their own origin's cookies and storage.
6
+ *
7
+ * Only enable this for content that is NOT directly user-controlled,
8
+ * such as server-fetched oEmbed previews.
9
+ *
10
+ * @default false
11
+ */
12
+ allowSameOrigin?: boolean;
2
13
  /**
3
14
  * The HTML to render in the body of the iframe document.
4
15
  *
@@ -72,5 +72,5 @@ export type SuffixItemProps = Pick<
72
72
  SearchControlProps,
73
73
  'value' | 'onChange' | 'onClose'
74
74
  > & {
75
- searchRef: React.RefObject< HTMLInputElement >;
75
+ searchRef: React.RefObject< HTMLInputElement | null >;
76
76
  };
@@ -162,6 +162,7 @@ export const Select = styled.select< SelectProps >`
162
162
  cursor: inherit;
163
163
  display: block;
164
164
  font-family: inherit;
165
+ line-height: 1.3; // Override forms.css styles, large enough value to prevent descender clipping without affecting height
165
166
  margin: 0;
166
167
  width: 100%;
167
168
  max-width: none;
@@ -113,7 +113,7 @@ export type SlotFillProviderProps = {
113
113
  };
114
114
 
115
115
  export type SlotFillInstance = {};
116
- export type SlotRef = RefObject< HTMLElement >;
116
+ export type SlotRef = RefObject< HTMLElement | null >;
117
117
  export type SlotRecord = { instance: SlotFillInstance } & (
118
118
  | { type: 'children' }
119
119
  | { type: 'portal'; ref: SlotRef; fillProps: FillProps }
@@ -66,7 +66,7 @@ export function SnackbarList( {
66
66
  children,
67
67
  onRemove,
68
68
  }: WordPressComponentProps< SnackbarListProps, 'div' > ) {
69
- const listRef = useRef< HTMLDivElement | null >( null );
69
+ const listRef = useRef< HTMLDivElement >( null );
70
70
  const isReducedMotion = useReducedMotion();
71
71
  className = clsx( 'components-snackbar-list', className );
72
72
  const removeNotice =
@@ -86,7 +86,12 @@ export function SnackbarList( {
86
86
 
87
87
  return (
88
88
  <motion.div
89
- layout={ ! isReducedMotion } // See https://www.framer.com/docs/animation/#layout-animations
89
+ layout={ isReducedMotion ? false : 'position' } // See https://www.framer.com/docs/animation/#layout-animations
90
+ // Ensures a stable full-width bounding box so that
91
+ // `layout="position"` only ever detects vertical
92
+ // shifts, preventing horizontal animation when
93
+ // notice text changes in place.
94
+ style={ { width: '100%' } }
90
95
  initial="init"
91
96
  animate="open"
92
97
  exit="exit"
@@ -162,6 +162,7 @@ export const Tab = styled( Ariakit.Tab )`
162
162
  align-items: center;
163
163
  cursor: pointer;
164
164
  line-height: 1.2; // Characters in some languages (e.g. Japanese) may have a native higher line-height.
165
+ font-family: ${ font( 'default.fontFamily' ) };
165
166
  font-weight: 400;
166
167
  font-size: ${ font( 'default.fontSize' ) };
167
168
  color: ${ COLORS.theme.foreground };
package/src/text/utils.ts CHANGED
@@ -17,37 +17,37 @@ import { createElement } from '@wordpress/element';
17
17
 
18
18
  /**
19
19
  * @typedef Options
20
- * @property {string} [activeClassName=''] Classname for active highlighted areas.
21
- * @property {number} [activeIndex=-1] The index of the active highlighted area.
22
- * @property {import('react').AllHTMLAttributes<HTMLDivElement>['style']} [activeStyle] Styles to apply to the active highlighted area.
23
- * @property {boolean} [autoEscape] Whether to automatically escape text.
24
- * @property {boolean} [caseSensitive=false] Whether to highlight in a case-sensitive manner.
25
- * @property {string} children Children to highlight.
26
- * @property {import('highlight-words-core').FindAllArgs['findChunks']} [findChunks] Custom `findChunks` function to pass to `highlight-words-core`.
27
- * @property {string | Record<string, unknown>} [highlightClassName=''] Classname to apply to highlighted text or a Record of classnames to apply to given text (which should be the key).
28
- * @property {import('react').AllHTMLAttributes<HTMLDivElement>['style']} [highlightStyle={}] Styles to apply to highlighted text.
29
- * @property {keyof JSX.IntrinsicElements} [highlightTag='mark'] Tag to use for the highlighted text.
30
- * @property {import('highlight-words-core').FindAllArgs['sanitize']} [sanitize] Custom `sanitize` function to pass to `highlight-words-core`.
31
- * @property {string[]} [searchWords=[]] Words to search for and highlight.
32
- * @property {string} [unhighlightClassName=''] Classname to apply to unhighlighted text.
33
- * @property {import('react').AllHTMLAttributes<HTMLDivElement>['style']} [unhighlightStyle] Style to apply to unhighlighted text.
20
+ * @property {string} [activeClassName=''] Classname for active highlighted areas.
21
+ * @property {number} [activeIndex=-1] The index of the active highlighted area.
22
+ * @property {React.CSSProperties} [activeStyle] Styles to apply to the active highlighted area.
23
+ * @property {boolean} [autoEscape] Whether to automatically escape text.
24
+ * @property {boolean} [caseSensitive=false] Whether to highlight in a case-sensitive manner.
25
+ * @property {string} children Children to highlight.
26
+ * @property {FindAllArgs['findChunks']} [findChunks] Custom `findChunks` function to pass to `highlight-words-core`.
27
+ * @property {string | Record<string, unknown>} [highlightClassName=''] Classname to apply to highlighted text or a Record of classnames to apply to given text (which should be the key).
28
+ * @property {React.CSSProperties} [highlightStyle={}] Styles to apply to highlighted text.
29
+ * @property {keyof React.JSX.IntrinsicElements} [highlightTag='mark'] Tag to use for the highlighted text.
30
+ * @property {FindAllArgs['sanitize']} [sanitize] Custom `sanitize` function to pass to `highlight-words-core`.
31
+ * @property {string[]} [searchWords=[]] Words to search for and highlight.
32
+ * @property {string} [unhighlightClassName=''] Classname to apply to unhighlighted text.
33
+ * @property {React.CSSProperties} [unhighlightStyle] Style to apply to unhighlighted text.
34
34
  */
35
35
 
36
36
  interface Options {
37
37
  activeClassName?: string;
38
38
  activeIndex?: number;
39
- activeStyle?: React.AllHTMLAttributes< HTMLDivElement >[ 'style' ];
39
+ activeStyle?: React.CSSProperties;
40
40
  autoEscape?: boolean;
41
41
  caseSensitive?: boolean;
42
42
  children: string;
43
43
  findChunks?: FindAllArgs[ 'findChunks' ];
44
44
  highlightClassName?: string | Record< string, unknown >;
45
- highlightStyle?: React.AllHTMLAttributes< HTMLDivElement >[ 'style' ];
46
- highlightTag?: keyof JSX.IntrinsicElements;
45
+ highlightStyle?: React.CSSProperties;
46
+ highlightTag?: keyof React.JSX.IntrinsicElements;
47
47
  sanitize?: FindAllArgs[ 'sanitize' ];
48
48
  searchWords?: string[];
49
49
  unhighlightClassName?: string;
50
- unhighlightStyle?: React.AllHTMLAttributes< HTMLDivElement >[ 'style' ];
50
+ unhighlightStyle?: React.CSSProperties;
51
51
  }
52
52
 
53
53
  /**