@wordpress/components 40.0.0 → 40.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/CONTRIBUTING.md +2 -0
  3. package/build/border-box-control/border-box-control/component.cjs +37 -5
  4. package/build/border-box-control/border-box-control/component.cjs.map +3 -3
  5. package/build/border-box-control/border-box-control/hook.cjs +24 -3
  6. package/build/border-box-control/border-box-control/hook.cjs.map +3 -3
  7. package/build/border-box-control/border-box-control-linked-button/hook.cjs +2 -2
  8. package/build/border-box-control/border-box-control-linked-button/hook.cjs.map +2 -2
  9. package/build/border-box-control/border-box-control-split-controls/hook.cjs +2 -2
  10. package/build/border-box-control/border-box-control-split-controls/hook.cjs.map +2 -2
  11. package/build/border-box-control/border-box-control-visualizer/hook.cjs +2 -2
  12. package/build/border-box-control/border-box-control-visualizer/hook.cjs.map +2 -2
  13. package/build/color-palette/index.cjs +1 -1
  14. package/build/color-palette/index.cjs.map +2 -2
  15. package/build/composite/context.cjs +9 -2
  16. package/build/composite/context.cjs.map +2 -2
  17. package/build/composite/group-label.cjs +4 -0
  18. package/build/composite/group-label.cjs.map +2 -2
  19. package/build/composite/group.cjs +10 -2
  20. package/build/composite/group.cjs.map +2 -2
  21. package/build/composite/item.cjs +4 -0
  22. package/build/composite/item.cjs.map +3 -3
  23. package/build/context/context-system-provider.cjs +2 -5
  24. package/build/context/context-system-provider.cjs.map +3 -3
  25. package/build/context/use-context-system.cjs +7 -2
  26. package/build/context/use-context-system.cjs.map +2 -2
  27. package/build/disabled/index.cjs +1 -1
  28. package/build/disabled/index.cjs.map +2 -2
  29. package/build/draggable/index.cjs.map +1 -1
  30. package/build/form-token-field/index.cjs +1 -1
  31. package/build/form-token-field/index.cjs.map +2 -2
  32. package/build/icon/index.cjs +30 -12
  33. package/build/icon/index.cjs.map +2 -2
  34. package/build/input-control/styles/input-control-styles.cjs +42 -27
  35. package/build/input-control/styles/input-control-styles.cjs.map +2 -2
  36. package/build/item-group/context.cjs +1 -0
  37. package/build/item-group/context.cjs.map +2 -2
  38. package/build/item-group/item/component.cjs +12 -0
  39. package/build/item-group/item/component.cjs.map +3 -3
  40. package/build/item-group/item/hook.cjs +7 -6
  41. package/build/item-group/item/hook.cjs.map +2 -2
  42. package/build/item-group/item-group/component.cjs +1 -0
  43. package/build/item-group/item-group/component.cjs.map +2 -2
  44. package/build/item-group/item-group/hook.cjs +1 -1
  45. package/build/item-group/item-group/hook.cjs.map +2 -2
  46. package/build/progress-bar/index.cjs +1 -1
  47. package/build/progress-bar/index.cjs.map +2 -2
  48. package/build/resizable-box/index.cjs.map +1 -1
  49. package/build/snackbar/index.cjs +8 -5
  50. package/build/snackbar/index.cjs.map +2 -2
  51. package/build/textarea-control/index.cjs +1 -1
  52. package/build/textarea-control/index.cjs.map +2 -2
  53. package/build/toggle-group-control/context.cjs +8 -2
  54. package/build/toggle-group-control/context.cjs.map +2 -2
  55. package/build/toggle-group-control/toggle-group-control/as-button-group.cjs +5 -2
  56. package/build/toggle-group-control/toggle-group-control/as-button-group.cjs.map +2 -2
  57. package/build/toggle-group-control/toggle-group-control/as-radio-group.cjs +5 -2
  58. package/build/toggle-group-control/toggle-group-control/as-radio-group.cjs.map +2 -2
  59. package/build/toggle-group-control/toggle-group-control/component.cjs +3 -1
  60. package/build/toggle-group-control/toggle-group-control/component.cjs.map +2 -2
  61. package/build/toggle-group-control/toggle-group-control-option/component.cjs +2 -0
  62. package/build/toggle-group-control/toggle-group-control-option/component.cjs.map +2 -2
  63. package/build/toggle-group-control/toggle-group-control-option-base/component.cjs +2 -1
  64. package/build/toggle-group-control/toggle-group-control-option-base/component.cjs.map +2 -2
  65. package/build/toggle-group-control/toggle-group-control-option-icon/component.cjs +2 -0
  66. package/build/toggle-group-control/toggle-group-control-option-icon/component.cjs.map +2 -2
  67. package/build/tools-panel/tools-panel/hook.cjs +102 -106
  68. package/build/tools-panel/tools-panel/hook.cjs.map +2 -2
  69. package/build/tools-panel/tools-panel-item/hook.cjs +33 -33
  70. package/build/tools-panel/tools-panel-item/hook.cjs.map +2 -2
  71. package/build/tree-grid/cell.cjs +4 -0
  72. package/build/tree-grid/cell.cjs.map +2 -2
  73. package/build/tree-grid/roving-tab-index-item.cjs +5 -1
  74. package/build/tree-grid/roving-tab-index-item.cjs.map +2 -2
  75. package/build/tree-grid/row.cjs +6 -1
  76. package/build/tree-grid/row.cjs.map +2 -2
  77. package/build/tree-grid/use-validate-tree-grid-structure.cjs +81 -0
  78. package/build/tree-grid/use-validate-tree-grid-structure.cjs.map +7 -0
  79. package/build/utils/colors-values.cjs +3 -2
  80. package/build/utils/colors-values.cjs.map +2 -2
  81. package/build-module/border-box-control/border-box-control/component.mjs +38 -6
  82. package/build-module/border-box-control/border-box-control/component.mjs.map +2 -2
  83. package/build-module/border-box-control/border-box-control/hook.mjs +14 -3
  84. package/build-module/border-box-control/border-box-control/hook.mjs.map +2 -2
  85. package/build-module/border-box-control/border-box-control-linked-button/hook.mjs +2 -2
  86. package/build-module/border-box-control/border-box-control-linked-button/hook.mjs.map +2 -2
  87. package/build-module/border-box-control/border-box-control-split-controls/hook.mjs +2 -2
  88. package/build-module/border-box-control/border-box-control-split-controls/hook.mjs.map +2 -2
  89. package/build-module/border-box-control/border-box-control-visualizer/hook.mjs +2 -2
  90. package/build-module/border-box-control/border-box-control-visualizer/hook.mjs.map +2 -2
  91. package/build-module/color-palette/index.mjs +1 -1
  92. package/build-module/color-palette/index.mjs.map +2 -2
  93. package/build-module/composite/context.mjs +6 -1
  94. package/build-module/composite/context.mjs.map +2 -2
  95. package/build-module/composite/group-label.mjs +5 -1
  96. package/build-module/composite/group-label.mjs.map +2 -2
  97. package/build-module/composite/group.mjs +11 -3
  98. package/build-module/composite/group.mjs.map +2 -2
  99. package/build-module/composite/item.mjs +4 -0
  100. package/build-module/composite/item.mjs.map +2 -2
  101. package/build-module/context/context-system-provider.mjs +2 -5
  102. package/build-module/context/context-system-provider.mjs.map +3 -3
  103. package/build-module/context/use-context-system.mjs +7 -2
  104. package/build-module/context/use-context-system.mjs.map +2 -2
  105. package/build-module/disabled/index.mjs +1 -1
  106. package/build-module/disabled/index.mjs.map +2 -2
  107. package/build-module/draggable/index.mjs.map +1 -1
  108. package/build-module/form-token-field/index.mjs +1 -1
  109. package/build-module/form-token-field/index.mjs.map +2 -2
  110. package/build-module/icon/index.mjs +30 -12
  111. package/build-module/icon/index.mjs.map +2 -2
  112. package/build-module/input-control/styles/input-control-styles.mjs +42 -27
  113. package/build-module/input-control/styles/input-control-styles.mjs.map +2 -2
  114. package/build-module/item-group/context.mjs +1 -0
  115. package/build-module/item-group/context.mjs.map +2 -2
  116. package/build-module/item-group/item/component.mjs +12 -0
  117. package/build-module/item-group/item/component.mjs.map +2 -2
  118. package/build-module/item-group/item/hook.mjs +7 -6
  119. package/build-module/item-group/item/hook.mjs.map +2 -2
  120. package/build-module/item-group/item-group/component.mjs +1 -0
  121. package/build-module/item-group/item-group/component.mjs.map +2 -2
  122. package/build-module/item-group/item-group/hook.mjs +1 -1
  123. package/build-module/item-group/item-group/hook.mjs.map +2 -2
  124. package/build-module/progress-bar/index.mjs +1 -1
  125. package/build-module/progress-bar/index.mjs.map +2 -2
  126. package/build-module/resizable-box/index.mjs.map +1 -1
  127. package/build-module/snackbar/index.mjs +8 -5
  128. package/build-module/snackbar/index.mjs.map +2 -2
  129. package/build-module/textarea-control/index.mjs +1 -1
  130. package/build-module/textarea-control/index.mjs.map +2 -2
  131. package/build-module/toggle-group-control/context.mjs +8 -2
  132. package/build-module/toggle-group-control/context.mjs.map +2 -2
  133. package/build-module/toggle-group-control/toggle-group-control/as-button-group.mjs +5 -2
  134. package/build-module/toggle-group-control/toggle-group-control/as-button-group.mjs.map +2 -2
  135. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.mjs +5 -2
  136. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.mjs.map +2 -2
  137. package/build-module/toggle-group-control/toggle-group-control/component.mjs +3 -1
  138. package/build-module/toggle-group-control/toggle-group-control/component.mjs.map +2 -2
  139. package/build-module/toggle-group-control/toggle-group-control-option/component.mjs +2 -0
  140. package/build-module/toggle-group-control/toggle-group-control-option/component.mjs.map +2 -2
  141. package/build-module/toggle-group-control/toggle-group-control-option-base/component.mjs +2 -1
  142. package/build-module/toggle-group-control/toggle-group-control-option-base/component.mjs.map +2 -2
  143. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.mjs +2 -0
  144. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.mjs.map +2 -2
  145. package/build-module/tools-panel/tools-panel/hook.mjs +103 -107
  146. package/build-module/tools-panel/tools-panel/hook.mjs.map +2 -2
  147. package/build-module/tools-panel/tools-panel-item/hook.mjs +35 -35
  148. package/build-module/tools-panel/tools-panel-item/hook.mjs.map +2 -2
  149. package/build-module/tree-grid/cell.mjs +5 -1
  150. package/build-module/tree-grid/cell.mjs.map +2 -2
  151. package/build-module/tree-grid/roving-tab-index-item.mjs +5 -1
  152. package/build-module/tree-grid/roving-tab-index-item.mjs.map +2 -2
  153. package/build-module/tree-grid/row.mjs +7 -2
  154. package/build-module/tree-grid/row.mjs.map +2 -2
  155. package/build-module/tree-grid/use-validate-tree-grid-structure.mjs +56 -0
  156. package/build-module/tree-grid/use-validate-tree-grid-structure.mjs.map +7 -0
  157. package/build-module/utils/colors-values.mjs +3 -2
  158. package/build-module/utils/colors-values.mjs.map +2 -2
  159. package/build-style/style-rtl.css +27 -85
  160. package/build-style/style.css +27 -85
  161. package/build-types/border-box-control/border-box-control/component.d.ts +4 -0
  162. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  163. package/build-types/border-box-control/border-box-control/hook.d.ts +4 -2
  164. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  165. package/build-types/border-box-control/types.d.ts +6 -2
  166. package/build-types/border-box-control/types.d.ts.map +1 -1
  167. package/build-types/composite/context.d.ts +2 -0
  168. package/build-types/composite/context.d.ts.map +1 -1
  169. package/build-types/composite/group-label.d.ts.map +1 -1
  170. package/build-types/composite/group.d.ts.map +1 -1
  171. package/build-types/composite/item.d.ts.map +1 -1
  172. package/build-types/composite/types.d.ts +1 -1
  173. package/build-types/context/context-system-provider.d.ts +8 -6
  174. package/build-types/context/context-system-provider.d.ts.map +1 -1
  175. package/build-types/context/use-context-system.d.ts.map +1 -1
  176. package/build-types/icon/index.d.ts.map +1 -1
  177. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  178. package/build-types/item-group/context.d.ts.map +1 -1
  179. package/build-types/item-group/item/component.d.ts.map +1 -1
  180. package/build-types/item-group/item/hook.d.ts +1 -1
  181. package/build-types/item-group/item/hook.d.ts.map +1 -1
  182. package/build-types/item-group/item-group/component.d.ts.map +1 -1
  183. package/build-types/item-group/types.d.ts +4 -0
  184. package/build-types/item-group/types.d.ts.map +1 -1
  185. package/build-types/popover/types.d.ts +6 -2
  186. package/build-types/popover/types.d.ts.map +1 -1
  187. package/build-types/snackbar/index.d.ts.map +1 -1
  188. package/build-types/toggle-group-control/context.d.ts +2 -2
  189. package/build-types/toggle-group-control/context.d.ts.map +1 -1
  190. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +1 -1
  191. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts.map +1 -1
  192. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +1 -1
  193. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  194. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  195. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +2 -2
  196. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
  197. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  198. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +2 -2
  199. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -1
  200. package/build-types/toggle-group-control/types.d.ts +12 -3
  201. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  202. package/build-types/tools-panel/tools-panel/hook.d.ts +4 -4
  203. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  204. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  205. package/build-types/tools-panel/types.d.ts +52 -9
  206. package/build-types/tools-panel/types.d.ts.map +1 -1
  207. package/build-types/tree-grid/cell.d.ts.map +1 -1
  208. package/build-types/tree-grid/roving-tab-index-item.d.ts.map +1 -1
  209. package/build-types/tree-grid/row.d.ts.map +1 -1
  210. package/build-types/tree-grid/use-validate-tree-grid-structure.d.ts +2 -0
  211. package/build-types/tree-grid/use-validate-tree-grid-structure.d.ts.map +1 -0
  212. package/build-types/utils/colors-values.d.ts.map +1 -1
  213. package/emotion-to-scss-modules.md +149 -0
  214. package/package.json +28 -27
  215. package/src/alignment-matrix-control/test/{index.tsx → index.jsdom.test.tsx} +5 -4
  216. package/src/angle-picker-control/style.module.scss +1 -1
  217. package/src/autocomplete/test/get-autocomplete-match.ts +2 -1
  218. package/src/autocomplete/test/{index.tsx → index.jsdom.test.tsx} +2 -1
  219. package/src/badge/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  220. package/src/base-control/stories/index.story.tsx +2 -2
  221. package/src/base-control/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  222. package/src/border-box-control/border-box-control/README.md +5 -3
  223. package/src/border-box-control/border-box-control/component.tsx +83 -15
  224. package/src/border-box-control/border-box-control/hook.ts +19 -1
  225. package/src/border-box-control/stories/index.story.tsx +10 -0
  226. package/src/border-box-control/style.module.scss +34 -3
  227. package/src/border-box-control/test/{index.tsx → index.jsdom.test.tsx} +138 -2
  228. package/src/border-box-control/test/utils.ts +11 -0
  229. package/src/border-box-control/types.ts +6 -2
  230. package/src/border-control/test/{index.js → index.jsdom.test.tsx} +44 -24
  231. package/src/box-control/test/{index.tsx → index.jsdom.test.tsx} +6 -3
  232. package/src/button/style.scss +0 -6
  233. package/src/button/test/{index.tsx → index.jsdom.test.tsx} +6 -2
  234. package/src/checkbox-control/stories/index.story.tsx +1 -1
  235. package/src/checkbox-control/style.scss +2 -2
  236. package/src/checkbox-control/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +10 -7
  237. package/src/checkbox-control/test/{index.tsx → index.jsdom.test.tsx} +4 -1
  238. package/src/circular-option-picker/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  239. package/src/color-indicator/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +2 -2
  240. package/src/color-indicator/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  241. package/src/color-palette/index.tsx +1 -1
  242. package/src/color-palette/test/{index.tsx → index.jsdom.test.tsx} +25 -22
  243. package/src/color-palette/test/{utils.ts → utils.jsdom.test.ts} +1 -0
  244. package/src/combobox-control/test/{index.tsx → index.jsdom.test.tsx} +12 -7
  245. package/src/composite/README.md +1 -1
  246. package/src/composite/context.tsx +6 -0
  247. package/src/composite/group-label.tsx +8 -1
  248. package/src/composite/group.tsx +9 -2
  249. package/src/composite/item.tsx +6 -0
  250. package/src/composite/legacy/test/{index.tsx → index.jsdom.test.tsx} +6 -13
  251. package/src/composite/test/{index.tsx → index.jsdom.test.tsx} +60 -17
  252. package/src/composite/types.ts +1 -1
  253. package/src/confirm-dialog/test/{index.tsx → index.jsdom.test.tsx} +16 -14
  254. package/src/content-editable-control/test/{index.tsx → index.jsdom.test.tsx} +4 -3
  255. package/src/context/{context-system-provider.js → context-system-provider.tsx} +19 -5
  256. package/src/context/stories/{ComponentsProvider.stories.jsx → ComponentsProvider.stories.tsx} +2 -2
  257. package/src/context/test/context-connect.tsx +1 -2
  258. package/src/context/test/{context-system-provider.js → context-system-provider.jsdom.test.tsx} +93 -51
  259. package/src/context/test/wordpress-component.tsx +1 -2
  260. package/src/context/use-context-system.js +13 -4
  261. package/src/custom-gradient-picker/gradient-bar/test/{utils.ts → utils.jsdom.test.ts} +6 -5
  262. package/src/custom-gradient-picker/test/serializer.ts +1 -0
  263. package/src/custom-select-control-v2/test/{index.tsx → index.jsdom.test.tsx} +4 -1
  264. package/src/date-time/date-picker/test/{index.tsx → index.jsdom.test.tsx} +6 -3
  265. package/src/date-time/date-picker/test/{use-lilius.ts → use-lilius.jsdom.test.ts} +1 -0
  266. package/src/date-time/date-time/test/{index.tsx → index.jsdom.test.tsx} +20 -11
  267. package/src/date-time/test/utils.test.ts +9 -0
  268. package/src/date-time/time-picker/test/{index.tsx → index.jsdom.test.tsx} +37 -27
  269. package/src/date-time/time-picker/time-input/test/{index.tsx → index.jsdom.test.tsx} +8 -3
  270. package/src/disabled/index.tsx +7 -7
  271. package/src/disabled/test/{index.tsx → index.jsdom.test.tsx} +26 -0
  272. package/src/draggable/index.tsx +1 -1
  273. package/src/draggable/style.module.scss +1 -1
  274. package/src/dropdown/style.module.scss +2 -2
  275. package/src/dropdown/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  276. package/src/dropdown-menu/test/{index.tsx → index.jsdom.test.tsx} +5 -4
  277. package/src/duotone-picker/test/{custom-duotone-bar.tsx → custom-duotone-bar.jsdom.test.tsx} +11 -8
  278. package/src/duotone-picker/test/{index.tsx → index.jsdom.test.tsx} +11 -10
  279. package/src/external-link/test/{index.tsx → index.jsdom.test.tsx} +5 -4
  280. package/src/focal-point-picker/test/{index.tsx → index.jsdom.test.tsx} +12 -9
  281. package/src/focal-point-picker/test/{media.tsx → media.jsdom.test.tsx} +1 -0
  282. package/src/font-size-picker/test/{font-size-picker-select.tsx → font-size-picker-select.jsdom.test.tsx} +19 -16
  283. package/src/font-size-picker/test/{font-size-picker-toggle-group.tsx → font-size-picker-toggle-group.jsdom.test.tsx} +13 -11
  284. package/src/font-size-picker/test/{index.tsx → index.jsdom.test.tsx} +19 -14
  285. package/src/font-size-picker/test/utils.ts +1 -0
  286. package/src/form-toggle/style.scss +1 -1
  287. package/src/form-toggle/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +4 -4
  288. package/src/form-toggle/test/{index.tsx → index.jsdom.test.tsx} +2 -1
  289. package/src/form-token-field/index.tsx +1 -1
  290. package/src/form-token-field/test/{index.tsx → index.jsdom.test.tsx} +86 -44
  291. package/src/gradient-picker/test/{index.tsx → index.jsdom.test.tsx} +12 -9
  292. package/src/guide/test/{index.tsx → index.jsdom.test.tsx} +4 -2
  293. package/src/h-stack/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +4 -4
  294. package/src/h-stack/test/{index.tsx → index.jsdom.test.tsx} +3 -0
  295. package/src/higher-order/with-fallback-styles/test/{index.tsx → index.jsdom.test.tsx} +3 -2
  296. package/src/higher-order/with-filters/test/__snapshots__/index.jsdom.test.tsx.snap +87 -0
  297. package/src/higher-order/with-filters/test/{index.tsx → index.jsdom.test.tsx} +6 -5
  298. package/src/higher-order/with-focus-outside/test/{index.tsx → index.jsdom.test.tsx} +2 -1
  299. package/src/higher-order/with-focus-return/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  300. package/src/higher-order/with-notices/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  301. package/src/higher-order/with-spoken-messages/test/{index.tsx → index.jsdom.test.tsx} +3 -2
  302. package/src/icon/index.tsx +28 -12
  303. package/src/icon/test/{index.tsx → index.jsdom.test.tsx} +66 -0
  304. package/src/input-control/styles/input-control-styles.tsx +38 -7
  305. package/src/input-control/test/{index.js → index.jsdom.test.tsx} +16 -10
  306. package/src/isolated-event-container/test/{index.tsx → index.jsdom.test.tsx} +4 -3
  307. package/src/item-group/context.ts +1 -0
  308. package/src/item-group/item/component.tsx +19 -1
  309. package/src/item-group/item/hook.ts +2 -3
  310. package/src/item-group/item-group/component.tsx +1 -0
  311. package/src/item-group/style.module.scss +1 -2
  312. package/src/item-group/test/__snapshots__/{index.js.snap → index.jsdom.test.tsx.snap} +9 -9
  313. package/src/item-group/test/{index.js → index.jsdom.test.tsx} +99 -2
  314. package/src/item-group/types.ts +4 -0
  315. package/src/keyboard-shortcuts/test/{index.tsx → index.jsdom.test.tsx} +5 -4
  316. package/src/menu/test/{index.tsx → index.jsdom.test.tsx} +67 -23
  317. package/src/menu-group/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  318. package/src/menu-item/test/__snapshots__/{index.js.snap → index.jsdom.test.tsx.snap} +5 -5
  319. package/src/menu-item/test/{index.js → index.jsdom.test.tsx} +1 -0
  320. package/src/modal/test/{aria-helper.ts → aria-helper.jsdom.test.ts} +1 -0
  321. package/src/modal/test/{index.tsx → index.jsdom.test.tsx} +9 -5
  322. package/src/navigable-container/test/{navigable-menu.tsx → navigable-menu.jsdom.test.tsx} +7 -5
  323. package/src/navigable-container/test/{tababble-container.tsx → tababble-container.jsdom.test.tsx} +5 -3
  324. package/src/navigator/test/{index.tsx → index.jsdom.test.tsx} +5 -2
  325. package/src/navigator/test/router.ts +1 -0
  326. package/src/notice/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +7 -4
  327. package/src/notice/test/{index.tsx → index.jsdom.test.tsx} +8 -4
  328. package/src/notice/test/{list.tsx → list.jsdom.test.tsx} +1 -0
  329. package/src/number-control/test/{index.tsx → index.jsdom.test.tsx} +9 -6
  330. package/src/palette-edit/test/{index.tsx → index.jsdom.test.tsx} +16 -13
  331. package/src/panel/test/__snapshots__/body.jsdom.test.tsx.snap +9 -0
  332. package/src/panel/test/__snapshots__/header.jsdom.test.tsx.snap +9 -0
  333. package/src/panel/test/__snapshots__/index.jsdom.test.tsx.snap +17 -0
  334. package/src/panel/test/__snapshots__/row.jsdom.test.tsx.snap +17 -0
  335. package/src/panel/test/{body.tsx → body.jsdom.test.tsx} +2 -1
  336. package/src/panel/test/{header.tsx → header.jsdom.test.tsx} +1 -0
  337. package/src/panel/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  338. package/src/panel/test/{row.tsx → row.jsdom.test.tsx} +1 -0
  339. package/src/placeholder/style.scss +0 -5
  340. package/src/placeholder/test/{index.tsx → index.jsdom.test.tsx} +19 -14
  341. package/src/popover/README.md +2 -2
  342. package/src/popover/test/{index.tsx → index.jsdom.test.tsx} +23 -0
  343. package/src/popover/types.ts +9 -3
  344. package/src/progress-bar/style.module.scss +9 -1
  345. package/src/query-controls/test/terms.ts +1 -0
  346. package/src/radio-control/test/{index.tsx → index.jsdom.test.tsx} +14 -11
  347. package/src/range-control/test/{index.tsx → index.jsdom.test.tsx} +10 -7
  348. package/src/resizable-box/index.tsx +1 -1
  349. package/src/sandbox/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  350. package/src/scroll-lock/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  351. package/src/shortcut/test/__snapshots__/index.jsdom.test.tsx.snap +15 -0
  352. package/src/shortcut/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  353. package/src/slot-fill/test/{index.js → index.jsdom.test.tsx} +4 -3
  354. package/src/slot-fill/test/{slot.js → slot.jsdom.test.tsx} +17 -9
  355. package/src/snackbar/index.tsx +10 -6
  356. package/src/snackbar/test/{index.tsx → index.jsdom.test.tsx} +41 -11
  357. package/src/snackbar/test/list.jsdom.test.tsx +100 -0
  358. package/src/style-provider/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  359. package/src/surface/style.module.scss +2 -2
  360. package/src/surface/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  361. package/src/tab-panel/style.scss +4 -23
  362. package/src/tab-panel/test/{index.tsx → index.jsdom.test.tsx} +22 -21
  363. package/src/tabs/test/{index.tsx → index.jsdom.test.tsx} +21 -19
  364. package/src/text-control/test/{text-control.tsx → text-control.jsdom.test.tsx} +1 -0
  365. package/src/text-highlight/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  366. package/src/textarea-control/style.module.scss +9 -4
  367. package/src/tip/style.scss +1 -1
  368. package/src/toggle-control/test/{index.tsx → index.jsdom.test.tsx} +4 -1
  369. package/src/toggle-group-control/context.ts +14 -5
  370. package/src/toggle-group-control/stories/index.story.tsx +15 -2
  371. package/src/toggle-group-control/test/{index.tsx → index.jsdom.test.tsx} +283 -9
  372. package/src/toggle-group-control/toggle-group-control/README.md +8 -5
  373. package/src/toggle-group-control/toggle-group-control/as-button-group.tsx +4 -0
  374. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +4 -0
  375. package/src/toggle-group-control/toggle-group-control/component.tsx +2 -0
  376. package/src/toggle-group-control/toggle-group-control/style.module.scss +8 -2
  377. package/src/toggle-group-control/toggle-group-control-option/README.md +8 -5
  378. package/src/toggle-group-control/toggle-group-control-option/component.tsx +2 -0
  379. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +4 -1
  380. package/src/toggle-group-control/toggle-group-control-option-icon/README.md +7 -0
  381. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +2 -0
  382. package/src/toggle-group-control/types.ts +12 -3
  383. package/src/toolbar/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  384. package/src/toolbar/test/{toolbar-group.tsx → toolbar-group.jsdom.test.tsx} +2 -1
  385. package/src/tools-panel/test/{index.tsx → index.jsdom.test.tsx} +595 -47
  386. package/src/tools-panel/tools-panel/hook.ts +195 -180
  387. package/src/tools-panel/tools-panel-item/README.md +42 -1
  388. package/src/tools-panel/tools-panel-item/hook.ts +97 -69
  389. package/src/tools-panel/types.ts +54 -9
  390. package/src/tooltip/test/{index.tsx → index.jsdom.test.tsx} +5 -3
  391. package/src/tree-grid/cell.tsx +6 -2
  392. package/src/tree-grid/roving-tab-index-item.tsx +7 -3
  393. package/src/tree-grid/row.tsx +8 -2
  394. package/src/tree-grid/test/__snapshots__/{cell.tsx.snap → cell.jsdom.test.tsx.snap} +2 -2
  395. package/src/tree-grid/test/__snapshots__/index.jsdom.test.tsx.snap +3 -0
  396. package/src/tree-grid/test/__snapshots__/roving-tab-index-item.jsdom.test.tsx.snap +27 -0
  397. package/src/tree-grid/test/__snapshots__/roving-tab-index.jsdom.test.tsx.snap +9 -0
  398. package/src/tree-grid/test/__snapshots__/{row.tsx.snap → row.jsdom.test.tsx.snap} +9 -5
  399. package/src/tree-grid/test/cell.jsdom.test.tsx +149 -0
  400. package/src/tree-grid/test/{index.tsx → index.jsdom.test.tsx} +9 -7
  401. package/src/tree-grid/test/{roving-tab-index-item.tsx → roving-tab-index-item.jsdom.test.tsx} +4 -1
  402. package/src/tree-grid/test/{roving-tab-index.tsx → roving-tab-index.jsdom.test.tsx} +1 -0
  403. package/src/tree-grid/test/row.jsdom.test.tsx +132 -0
  404. package/src/tree-grid/use-validate-tree-grid-structure.ts +104 -0
  405. package/src/truncate/style.module.scss +0 -1
  406. package/src/truncate/test/{index.tsx → index.jsdom.test.tsx} +1 -0
  407. package/src/unit-control/test/{index.tsx → index.jsdom.test.tsx} +22 -19
  408. package/src/unit-control/test/utils.ts +1 -0
  409. package/src/utils/colors-values.js +5 -4
  410. package/src/utils/hooks/test/{use-controlled-state.js → use-controlled-state.jsdom.test.tsx} +22 -7
  411. package/src/utils/hooks/test/{use-controlled-value.js → use-controlled-value.jsdom.test.tsx} +6 -3
  412. package/src/utils/hooks/test/{use-cx.js → use-cx.jsdom.test.tsx} +8 -5
  413. package/src/utils/test/colors.js +1 -0
  414. package/src/utils/test/{get-node-text.js → get-node-text.tsx} +1 -0
  415. package/src/utils/test/math.js +1 -0
  416. package/src/utils/test/rtl.js +1 -0
  417. package/src/utils/test/space.js +1 -0
  418. package/src/utils/test/strings.js +1 -0
  419. package/src/utils/test/unit-values.js +1 -0
  420. package/src/v-stack/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +4 -4
  421. package/src/v-stack/test/{index.tsx → index.jsdom.test.tsx} +3 -0
  422. package/src/validated-form-controls/style.scss +11 -15
  423. package/src/validated-form-controls/test/{content-editable-control.tsx → content-editable-control.jsdom.test.tsx} +1 -1
  424. package/src/validated-form-controls/test/{custom-select-control.tsx → custom-select-control.jsdom.test.tsx} +3 -0
  425. package/src/validated-form-controls/test/{input-control.tsx → input-control.jsdom.test.tsx} +3 -0
  426. package/src/validated-form-controls/test/{range-control.tsx → range-control.jsdom.test.tsx} +3 -0
  427. package/src/validated-form-controls/test/{textarea-control.tsx → textarea-control.jsdom.test.tsx} +1 -0
  428. package/src/view/test/__snapshots__/{index.js.snap → index.jsdom.test.tsx.snap} +7 -7
  429. package/src/view/test/{index.js → index.jsdom.test.tsx} +7 -2
  430. package/src/context/test/__snapshots__/context-system-provider.js.snap +0 -35
  431. package/src/higher-order/with-filters/test/__snapshots__/index.tsx.snap +0 -87
  432. package/src/panel/test/__snapshots__/body.tsx.snap +0 -9
  433. package/src/panel/test/__snapshots__/header.tsx.snap +0 -9
  434. package/src/panel/test/__snapshots__/index.tsx.snap +0 -17
  435. package/src/panel/test/__snapshots__/row.tsx.snap +0 -17
  436. package/src/shortcut/test/__snapshots__/index.tsx.snap +0 -15
  437. package/src/snackbar/test/list.tsx +0 -39
  438. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +0 -359
  439. package/src/tree-grid/test/__snapshots__/index.tsx.snap +0 -3
  440. package/src/tree-grid/test/__snapshots__/roving-tab-index-item.tsx.snap +0 -27
  441. package/src/tree-grid/test/__snapshots__/roving-tab-index.tsx.snap +0 -9
  442. package/src/tree-grid/test/cell.tsx +0 -46
  443. package/src/tree-grid/test/row.tsx +0 -37
  444. /package/src/card/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
  445. /package/src/card/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  446. /package/src/color-picker/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  447. /package/src/custom-gradient-picker/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  448. /package/src/custom-select-control/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
  449. /package/src/custom-select-control/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  450. /package/src/divider/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  451. /package/src/elevation/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
  452. /package/src/elevation/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  453. /package/src/flex/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
  454. /package/src/flex/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  455. /package/src/form-file-upload/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  456. /package/src/grid/test/{grid.tsx → grid.jsdom.test.tsx} +0 -0
  457. /package/src/heading/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
  458. /package/src/heading/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  459. /package/src/input-control/test/__snapshots__/{index.js.snap → index.jsdom.test.tsx.snap} +0 -0
  460. /package/src/progress-bar/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  461. /package/src/resizable-box/resize-tooltip/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  462. /package/src/resizable-box/resize-tooltip/test/{label.tsx → label.jsdom.test.tsx} +0 -0
  463. /package/src/scrollable/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  464. /package/src/search-control/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  465. /package/src/select-control/test/__snapshots__/{select-control.tsx.snap → select-control.jsdom.test.tsx.snap} +0 -0
  466. /package/src/select-control/test/{select-control.tsx → select-control.jsdom.test.tsx} +0 -0
  467. /package/src/slot-fill/test/__snapshots__/{slot.js.snap → slot.jsdom.test.tsx.snap} +0 -0
  468. /package/src/spacer/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
  469. /package/src/spacer/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  470. /package/src/text/test/__snapshots__/{index.tsx.snap → index.jsdom.test.tsx.snap} +0 -0
  471. /package/src/text/test/{index.tsx → index.jsdom.test.tsx} +0 -0
  472. /package/src/utils/test/{polymorphic-element.tsx → polymorphic-element.jsdom.test.tsx} +0 -0
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it, test, vi } from 'vitest';
1
2
  import { render, screen, waitFor, within } from '@testing-library/react';
2
3
  import { click, type, press } from '@ariakit/test';
3
4
  import PaletteEdit, {
@@ -6,6 +7,8 @@ import PaletteEdit, {
6
7
  } from '..';
7
8
  import type { PaletteElement } from '../types';
8
9
 
10
+ globalThis.wpVitest.mockMatchMedia();
11
+
9
12
  const noop = () => {};
10
13
 
11
14
  async function clearInput( input: HTMLInputElement ) {
@@ -384,7 +387,7 @@ describe( 'PaletteEdit', () => {
384
387
  } );
385
388
 
386
389
  it( 'calls the `onChange` with the new color appended', async () => {
387
- const onChange = jest.fn();
390
+ const onChange = vi.fn();
388
391
 
389
392
  render(
390
393
  <PaletteEdit
@@ -413,7 +416,7 @@ describe( 'PaletteEdit', () => {
413
416
  } );
414
417
 
415
418
  it( 'calls the `onChange` with the new gradient appended', async () => {
416
- const onChange = jest.fn();
419
+ const onChange = vi.fn();
417
420
 
418
421
  render(
419
422
  <PaletteEdit
@@ -443,7 +446,7 @@ describe( 'PaletteEdit', () => {
443
446
  } );
444
447
 
445
448
  it( 'calls the `onChange` with the new duotone appended, seeded from the color palette', async () => {
446
- const onChange = jest.fn();
449
+ const onChange = vi.fn();
447
450
 
448
451
  render(
449
452
  <PaletteEdit
@@ -474,7 +477,7 @@ describe( 'PaletteEdit', () => {
474
477
  } );
475
478
 
476
479
  it( 'ignores palette colors a duotone cannot be built from when adding one', async () => {
477
- const onChange = jest.fn();
480
+ const onChange = vi.fn();
478
481
 
479
482
  render(
480
483
  <PaletteEdit
@@ -518,7 +521,7 @@ describe( 'PaletteEdit', () => {
518
521
  // accepts hex, `rgb()` and `hsl()`, so a named color saved as-is would
519
522
  // render in the editor and be dropped on the front end.
520
523
  it( 'normalizes palette colors to hex when adding a duotone', async () => {
521
- const onChange = jest.fn();
524
+ const onChange = vi.fn();
522
525
 
523
526
  render(
524
527
  <PaletteEdit
@@ -551,7 +554,7 @@ describe( 'PaletteEdit', () => {
551
554
  } );
552
555
 
553
556
  it( 'falls back to black and white when adding a duotone without a color palette', async () => {
554
- const onChange = jest.fn();
557
+ const onChange = vi.fn();
555
558
 
556
559
  render(
557
560
  <PaletteEdit
@@ -590,7 +593,7 @@ describe( 'PaletteEdit', () => {
590
593
  } );
591
594
 
592
595
  it( 'can remove a color', async () => {
593
- const onChange = jest.fn();
596
+ const onChange = vi.fn();
594
597
 
595
598
  render(
596
599
  <PaletteEdit
@@ -623,7 +626,7 @@ describe( 'PaletteEdit', () => {
623
626
  } );
624
627
 
625
628
  it( 'can update palette name', async () => {
626
- const onChange = jest.fn();
629
+ const onChange = vi.fn();
627
630
 
628
631
  render(
629
632
  <PaletteEdit
@@ -663,7 +666,7 @@ describe( 'PaletteEdit', () => {
663
666
  } );
664
667
 
665
668
  it( 'can update color palette value', async () => {
666
- const onChange = jest.fn();
669
+ const onChange = vi.fn();
667
670
 
668
671
  render(
669
672
  <PaletteEdit
@@ -694,7 +697,7 @@ describe( 'PaletteEdit', () => {
694
697
  } );
695
698
 
696
699
  it( 'can update gradient palette value', async () => {
697
- const onChange = jest.fn();
700
+ const onChange = vi.fn();
698
701
 
699
702
  render(
700
703
  <PaletteEdit
@@ -727,7 +730,7 @@ describe( 'PaletteEdit', () => {
727
730
  } );
728
731
 
729
732
  it( 'can update duotone palette value', async () => {
730
- const onChange = jest.fn();
733
+ const onChange = vi.fn();
731
734
 
732
735
  render(
733
736
  <PaletteEdit
@@ -757,7 +760,7 @@ describe( 'PaletteEdit', () => {
757
760
  // has to apply when editing one, or the shadows and highlights picker can
758
761
  // offer a color the saved duotone cannot be built from.
759
762
  it( 'hides unusable colors and saves named ones as hex when editing a duotone', async () => {
760
- const onChange = jest.fn();
763
+ const onChange = vi.fn();
761
764
 
762
765
  render(
763
766
  <PaletteEdit
@@ -805,7 +808,7 @@ describe( 'PaletteEdit', () => {
805
808
  // rather than an edge one. The duotone that was clicked has to be the one
806
809
  // that gets edited.
807
810
  it( 'updates the clicked duotone when two share the same colors', async () => {
808
- const onChange = jest.fn();
811
+ const onChange = vi.fn();
809
812
  const twins = [
810
813
  { colors: [ '#000000', '#ffffff' ], name: 'First', slug: 'first' },
811
814
  {
@@ -0,0 +1,9 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`PanelBody > basic rendering > should render an empty div with the matching className 1`] = `
4
+ <div>
5
+ <div
6
+ class="components-panel__body is-opened"
7
+ />
8
+ </div>
9
+ `;
@@ -0,0 +1,9 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`PanelHeader > basic rendering > should render PanelHeader with empty div inside 1`] = `
4
+ <div>
5
+ <div
6
+ class="components-panel__header"
7
+ />
8
+ </div>
9
+ `;
@@ -0,0 +1,17 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`Panel > basic rendering > should render an additional className 1`] = `
4
+ <div>
5
+ <div
6
+ class="the-panel components-panel"
7
+ />
8
+ </div>
9
+ `;
10
+
11
+ exports[`Panel > basic rendering > should render an empty div without any provided props 1`] = `
12
+ <div>
13
+ <div
14
+ class="components-panel"
15
+ />
16
+ </div>
17
+ `;
@@ -0,0 +1,17 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`PanelRow > should render with the custom class name 1`] = `
4
+ <div>
5
+ <div
6
+ class="components-panel__row custom"
7
+ />
8
+ </div>
9
+ `;
10
+
11
+ exports[`PanelRow > should render with the default class name 1`] = `
12
+ <div>
13
+ <div
14
+ class="components-panel__row"
15
+ />
16
+ </div>
17
+ `;
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it, vi } from 'vitest';
1
2
  import { render, screen } from '@testing-library/react';
2
3
  import userEvent from '@testing-library/user-event';
3
4
  import { PanelBody } from '../body';
@@ -131,7 +132,7 @@ describe( 'PanelBody', () => {
131
132
 
132
133
  it( 'should pass button props to panel title', async () => {
133
134
  const user = userEvent.setup();
134
- const mock = jest.fn();
135
+ const mock = vi.fn();
135
136
 
136
137
  render(
137
138
  <PanelBody title="Panel" buttonProps={ { onClick: mock } }>
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { render, screen } from '@testing-library/react';
2
3
  import PanelHeader from '../header';
3
4
 
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { render, screen } from '@testing-library/react';
2
3
  import Panel from '..';
3
4
 
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { render, screen } from '@testing-library/react';
2
3
  import PanelRow from '../row';
3
4
 
@@ -51,11 +51,6 @@
51
51
  .block-editor-block-icon {
52
52
  margin-right: $grid-unit-05;
53
53
  fill: currentColor;
54
- // Optimize for high contrast modes.
55
- // See also https://blogs.windows.com/msedgedev/2020/09/17/styling-for-windows-high-contrast-with-new-standards-for-forced-colors/.
56
- @media (forced-colors: active) {
57
- fill: CanvasText;
58
- }
59
54
  }
60
55
 
61
56
  // Don't take up space if the label is empty.
@@ -1,3 +1,4 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
1
2
  import { render, screen, within } from '@testing-library/react';
2
3
  import { useResizeObserver } from '@wordpress/compose';
3
4
  import { SVG, Path } from '@wordpress/primitives';
@@ -6,10 +7,13 @@ import BasePlaceholder from '../';
6
7
  import type { WordPressComponentProps } from '../../context';
7
8
  import type { PlaceholderProps } from '../types';
8
9
 
9
- jest.mock( '@wordpress/compose', () => {
10
+ vi.mock( import( '@wordpress/compose' ), async ( importOriginal ) => {
11
+ const original = await importOriginal();
10
12
  return {
11
- ...jest.requireActual( '@wordpress/compose' ),
12
- useResizeObserver: jest.fn( () => [] ),
13
+ ...original,
14
+ useResizeObserver: vi.fn(
15
+ () => []
16
+ ) as unknown as typeof original.useResizeObserver,
13
17
  };
14
18
  } );
15
19
 
@@ -31,15 +35,18 @@ const Placeholder = (
31
35
 
32
36
  const getPlaceholder = () => screen.getByTestId( 'placeholder' );
33
37
 
34
- jest.mock( '@wordpress/a11y', () => ( { speak: jest.fn() } ) );
35
- const mockedSpeak = jest.mocked( speak );
38
+ vi.mock( import( '@wordpress/a11y' ), async ( importOriginal ) => ( {
39
+ ...( await importOriginal() ),
40
+ speak: vi.fn(),
41
+ } ) );
42
+ const mockedUseResizeObserver = vi.mocked( useResizeObserver );
43
+ const mockedSpeak = vi.mocked( speak );
36
44
 
37
45
  describe( 'Placeholder', () => {
38
46
  beforeEach( () => {
39
- // @ts-expect-error The imported hook is not typed as a Jest mock.
40
- useResizeObserver.mockReturnValue( [
47
+ mockedUseResizeObserver.mockReturnValue( [
41
48
  <div key="1" />,
42
- { width: 320 },
49
+ { width: 320, height: null },
43
50
  ] );
44
51
  mockedSpeak.mockReset();
45
52
  } );
@@ -153,10 +160,9 @@ describe( 'Placeholder', () => {
153
160
 
154
161
  describe( 'resize aware', () => {
155
162
  it( 'should not assign modifier class in first-pass `null` width from `useResizeObserver`', () => {
156
- // @ts-expect-error The imported hook is not typed as a Jest mock.
157
- useResizeObserver.mockReturnValue( [
163
+ mockedUseResizeObserver.mockReturnValue( [
158
164
  <div key="1" />,
159
- { width: 480 },
165
+ { width: 480, height: null },
160
166
  ] );
161
167
 
162
168
  render( <Placeholder /> );
@@ -168,10 +174,9 @@ describe( 'Placeholder', () => {
168
174
  } );
169
175
 
170
176
  it( 'should assign modifier class', () => {
171
- // @ts-expect-error The imported hook is not typed as a Jest mock.
172
- useResizeObserver.mockReturnValue( [
177
+ mockedUseResizeObserver.mockReturnValue( [
173
178
  <div key="1" />,
174
- { width: null },
179
+ { width: null, height: null },
175
180
  ] );
176
181
 
177
182
  render( <Placeholder /> );
@@ -183,9 +183,9 @@ Used to show/hide the arrow that points at the popover's anchor.
183
183
  - Required: No
184
184
  - Default: `true`
185
185
 
186
- ### `offset`: `number`
186
+ ### `offset`: `number | { mainAxis?: number; crossAxis?: number }`
187
187
 
188
- The distance (in px) between the anchor and the popover.
188
+ The distance (in px) between the anchor and the popover. A number displaces the popover along its main axis; pass an object to also displace it along its cross axis.
189
189
 
190
190
  - Required: No
191
191
 
@@ -174,6 +174,29 @@ describe( 'Popover', () => {
174
174
  } );
175
175
  } );
176
176
 
177
+ describe( 'offset', () => {
178
+ it( 'should displace the popover along its cross axis when passed an offset object', async () => {
179
+ render(
180
+ <Popover
181
+ placement="right-start"
182
+ offset={ { mainAxis: 16, crossAxis: 24 } }
183
+ animate={ false }
184
+ flip={ false }
185
+ shift={ false }
186
+ data-testid="popover-element"
187
+ >
188
+ Hello
189
+ </Popover>
190
+ );
191
+ const popover = screen.getByTestId( 'popover-element' );
192
+
193
+ await waitFor( () => expect( popover ).toBeVisible() );
194
+ expect( popover ).toHaveStyle(
195
+ 'transform: translateX(16px) translateY(24px)'
196
+ );
197
+ } );
198
+ } );
199
+
177
200
  describe( 'style', () => {
178
201
  it( 'outputs inline styles added through the style prop in addition to built-in popover positioning styles', async () => {
179
202
  render(
@@ -105,9 +105,15 @@ export type PopoverProps = {
105
105
  */
106
106
  noArrow?: boolean;
107
107
  /**
108
- * The distance (in px) between the anchor and the popover.
109
- */
110
- offset?: number;
108
+ * The distance (in px) between the anchor and the popover. Pass an object to
109
+ * also displace the popover along its cross axis.
110
+ */
111
+ offset?:
112
+ | number
113
+ | {
114
+ mainAxis?: number;
115
+ crossAxis?: number;
116
+ };
111
117
  /**
112
118
  * A callback invoked when the popover should be closed.
113
119
  */
@@ -33,12 +33,20 @@ $indeterminate-indicator-width: 50%;
33
33
  outline-offset: -2px;
34
34
 
35
35
  width: var(--indicator-width);
36
- transition: width 0.4s ease-in-out;
36
+
37
+ @media not (prefers-reduced-motion) {
38
+ transition: width 0.4s ease-in-out;
39
+ }
37
40
 
38
41
  &.is-indeterminate {
39
42
  --indicator-width: #{$indeterminate-indicator-width};
40
43
  animation: indeterminate-slide 1.5s ease-in-out infinite;
41
44
  transition: none;
45
+
46
+ @media (prefers-reduced-motion: reduce) {
47
+ animation-duration: 3s;
48
+ animation-timing-function: steps(4, end);
49
+ }
42
50
  }
43
51
  }
44
52
 
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { buildTermsTree } from '../terms';
2
3
 
3
4
  describe( 'buildTermsTree()', () => {
@@ -1,8 +1,11 @@
1
+ import { describe, expect, it, vi } from 'vitest';
1
2
  import { render, screen } from '@testing-library/react';
2
3
  import userEvent from '@testing-library/user-event';
3
4
  import { useState } from '@wordpress/element';
4
5
  import RadioControl from '../';
5
6
 
7
+ globalThis.wpVitest.mockMatchMedia();
8
+
6
9
  const ControlledRadioControl = ( {
7
10
  ...props
8
11
  }: React.ComponentProps< typeof RadioControl > ) => {
@@ -54,7 +57,7 @@ describe.each( [
54
57
 
55
58
  describe( 'semantics and labelling', () => {
56
59
  it( 'should render a radiogroup with an accessible label (legend)', () => {
57
- const onChangeSpy = jest.fn();
60
+ const onChangeSpy = vi.fn();
58
61
  render(
59
62
  <Component { ...defaultProps } onChange={ onChangeSpy } />
60
63
  );
@@ -65,7 +68,7 @@ describe.each( [
65
68
  } );
66
69
 
67
70
  it( 'should render a radiogroup with an accessible label even when the label is visually hidden', () => {
68
- const onChangeSpy = jest.fn();
71
+ const onChangeSpy = vi.fn();
69
72
  render(
70
73
  <Component
71
74
  { ...defaultProps }
@@ -113,7 +116,7 @@ describe.each( [
113
116
  } );
114
117
 
115
118
  it( 'should describe the radio group with the help text', () => {
116
- const onChangeSpy = jest.fn();
119
+ const onChangeSpy = vi.fn();
117
120
  render(
118
121
  <Component
119
122
  { ...defaultProps }
@@ -128,7 +131,7 @@ describe.each( [
128
131
  } );
129
132
 
130
133
  it( 'should render radio inputs with accessible labels', () => {
131
- const onChangeSpy = jest.fn();
134
+ const onChangeSpy = vi.fn();
132
135
  render(
133
136
  <Component { ...defaultProps } onChange={ onChangeSpy } />
134
137
  );
@@ -143,7 +146,7 @@ describe.each( [
143
146
  } );
144
147
 
145
148
  it( 'should not select have a selected value when the `selected` prop does not match any available options', () => {
146
- const onChangeSpy = jest.fn();
149
+ const onChangeSpy = vi.fn();
147
150
  render(
148
151
  <Component { ...defaultProps } onChange={ onChangeSpy } />
149
152
  );
@@ -156,7 +159,7 @@ describe.each( [
156
159
  } );
157
160
 
158
161
  it( 'should render mutually exclusive radio inputs', () => {
159
- const onChangeSpy = jest.fn();
162
+ const onChangeSpy = vi.fn();
160
163
  render(
161
164
  <Component
162
165
  { ...defaultProps }
@@ -173,7 +176,7 @@ describe.each( [
173
176
  } );
174
177
 
175
178
  it( 'should use the option description text to describe individual options', () => {
176
- const onChangeSpy = jest.fn();
179
+ const onChangeSpy = vi.fn();
177
180
  render(
178
181
  <Component
179
182
  { ...defaultPropsWithDescriptions }
@@ -199,7 +202,7 @@ describe.each( [
199
202
  describe( 'interaction', () => {
200
203
  it( 'should keep enabled options interactive when another option is disabled', async () => {
201
204
  const user = userEvent.setup();
202
- const onChangeSpy = jest.fn();
205
+ const onChangeSpy = vi.fn();
203
206
  render(
204
207
  <Component
205
208
  { ...defaultPropsWithDisabledOption }
@@ -227,7 +230,7 @@ describe.each( [
227
230
 
228
231
  it( 'should select a new value when clicking on the radio input', async () => {
229
232
  const user = userEvent.setup();
230
- const onChangeSpy = jest.fn();
233
+ const onChangeSpy = vi.fn();
231
234
  render(
232
235
  <Component { ...defaultProps } onChange={ onChangeSpy } />
233
236
  );
@@ -252,7 +255,7 @@ describe.each( [
252
255
 
253
256
  it( 'should select a new value when clicking on the radio label', async () => {
254
257
  const user = userEvent.setup();
255
- const onChangeSpy = jest.fn();
258
+ const onChangeSpy = vi.fn();
256
259
  render(
257
260
  <Component { ...defaultProps } onChange={ onChangeSpy } />
258
261
  );
@@ -275,7 +278,7 @@ describe.each( [
275
278
 
276
279
  it( 'should select a new value when using the arrow keys', async () => {
277
280
  const user = userEvent.setup();
278
- const onChangeSpy = jest.fn();
281
+ const onChangeSpy = vi.fn();
279
282
  render(
280
283
  <Component { ...defaultProps } onChange={ onChangeSpy } />
281
284
  );
@@ -1,6 +1,9 @@
1
+ import { describe, expect, it, vi } from 'vitest';
1
2
  import { act, fireEvent, render, screen } from '@testing-library/react';
2
3
  import RangeControl from '../';
3
4
 
5
+ globalThis.wpVitest.mockMatchMedia();
6
+
4
7
  const getRangeInput = (): HTMLInputElement => screen.getByRole( 'slider' );
5
8
  const getNumberInput = (): HTMLInputElement => screen.getByRole( 'spinbutton' );
6
9
  const getResetButton = (): HTMLButtonElement => screen.getByRole( 'button' );
@@ -11,7 +14,7 @@ const fireChangeEvent = ( input: HTMLInputElement, value?: number | string ) =>
11
14
  describe( 'RangeControl', () => {
12
15
  describe( '#render()', () => {
13
16
  it( 'should trigger change callback with numeric value', () => {
14
- const onChange = jest.fn();
17
+ const onChange = vi.fn();
15
18
 
16
19
  render( <RangeControl onChange={ onChange } /> );
17
20
 
@@ -76,7 +79,7 @@ describe( 'RangeControl', () => {
76
79
  } );
77
80
 
78
81
  it( 'should not call onChange if new value is invalid', () => {
79
- const onChange = jest.fn();
82
+ const onChange = vi.fn();
80
83
  render(
81
84
  <RangeControl onChange={ onChange } min={ 10 } max={ 20 } />
82
85
  );
@@ -90,7 +93,7 @@ describe( 'RangeControl', () => {
90
93
  } );
91
94
 
92
95
  it( 'should keep invalid values in number input until loss of focus', () => {
93
- const onChange = jest.fn();
96
+ const onChange = vi.fn();
94
97
  render(
95
98
  <RangeControl onChange={ onChange } min={ -1 } max={ 1 } />
96
99
  );
@@ -141,7 +144,7 @@ describe( 'RangeControl', () => {
141
144
  } );
142
145
 
143
146
  it( 'should take into account the step starting from min', () => {
144
- const onChange = jest.fn();
147
+ const onChange = vi.fn();
145
148
  render(
146
149
  <RangeControl
147
150
  onChange={ onChange }
@@ -286,7 +289,7 @@ describe( 'RangeControl', () => {
286
289
 
287
290
  describe( 'reset', () => {
288
291
  it( 'should clear the input value when clicking the reset button', () => {
289
- const spy = jest.fn();
292
+ const spy = vi.fn();
290
293
  render( <RangeControl allowReset onChange={ spy } /> );
291
294
 
292
295
  const resetButton = getResetButton();
@@ -310,7 +313,7 @@ describe( 'RangeControl', () => {
310
313
  } );
311
314
 
312
315
  it( 'should reset to the `initialPosition` value when clicking the reset button', () => {
313
- const spy = jest.fn();
316
+ const spy = vi.fn();
314
317
  render(
315
318
  <RangeControl
316
319
  allowReset
@@ -339,7 +342,7 @@ describe( 'RangeControl', () => {
339
342
  } );
340
343
 
341
344
  it( 'should reset to the `resetFallbackValue` value when clicking the reset button', () => {
342
- const spy = jest.fn();
345
+ const spy = vi.fn();
343
346
  render(
344
347
  <RangeControl
345
348
  initialPosition={ 10 }
@@ -102,7 +102,7 @@ function UnforwardedResizableBox(
102
102
  ) }
103
103
  // Add a focusable element within the drag handle. Unfortunately,
104
104
  // `re-resizable` does not make them properly focusable by default,
105
- // causing focus to move the the block wrapper which triggers block
105
+ // causing focus to move the block wrapper which triggers block
106
106
  // drag.
107
107
  handleComponent={ Object.fromEntries(
108
108
  Object.keys( HANDLE_CLASSES ).map( ( key ) => [
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { fireEvent, render, screen } from '@testing-library/react';
2
3
  import { useState } from '@wordpress/element';
3
4
  import SandBox, { VIEWPORT_UNIT_VALUE_REGEX, buildSandBoxDocument } from '..';
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { render } from '@testing-library/react';
2
3
  import ScrollLock from '..';
3
4
 
@@ -0,0 +1,15 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`Shortcut > renders passed className 1`] = `
4
+ <span
5
+ class="my-class"
6
+ >
7
+ shortcut text
8
+ </span>
9
+ `;
10
+
11
+ exports[`Shortcut > renders the shortcut display text when a string is passed as the shortcut 1`] = `
12
+ <span>
13
+ shortcut text
14
+ </span>
15
+ `;
@@ -1,3 +1,4 @@
1
+ import { describe, expect, it } from 'vitest';
1
2
  import { render, screen } from '@testing-library/react';
2
3
  import Shortcut from '..';
3
4
 
@@ -1,3 +1,4 @@
1
+ import { describe, expect, test } from 'vitest';
1
2
  import { render, screen, within } from '@testing-library/react';
2
3
  import { createRef } from '@wordpress/element';
3
4
  import { createSlotFill, Provider as SlotFillProvider } from '../';
@@ -79,7 +80,7 @@ describe( 'createSlotFill', () => {
79
80
 
80
81
  test( 'should forward ref to the slot when using bubblesVirtually', () => {
81
82
  const TestSlotFill = createSlotFill( 'TestRefSlot' );
82
- const ref = createRef();
83
+ const ref = createRef< HTMLElement >();
83
84
 
84
85
  render(
85
86
  <SlotFillProvider>
@@ -91,12 +92,12 @@ describe( 'createSlotFill', () => {
91
92
  );
92
93
 
93
94
  expect( ref.current ).not.toBeNull();
94
- expect( ref.current.tagName ).toBe( 'DIV' );
95
+ expect( ref.current!.tagName ).toBe( 'DIV' );
95
96
  } );
96
97
 
97
98
  test( 'should forward ref without bubblesVirtually (ref stays null for fragment-based slot)', () => {
98
99
  const TestSlotFill = createSlotFill( 'TestRefSlotBase' );
99
- const ref = createRef();
100
+ const ref = createRef< HTMLElement >();
100
101
 
101
102
  render(
102
103
  <SlotFillProvider>