@wordpress/components 25.14.0 → 25.15.1-next.79a6196f.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 (568) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/CONTRIBUTING.md +57 -115
  3. package/LICENSE.md +1 -1
  4. package/build/base-control/index.js +17 -13
  5. package/build/base-control/index.js.map +1 -1
  6. package/build/border-box-control/border-box-control-linked-button/component.js +1 -1
  7. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  8. package/build/border-control/border-control-style-picker/component.js +1 -1
  9. package/build/border-control/border-control-style-picker/component.js.map +1 -1
  10. package/build/box-control/index.js +1 -1
  11. package/build/box-control/index.js.map +1 -1
  12. package/build/box-control/linked-button.js +1 -1
  13. package/build/box-control/linked-button.js.map +1 -1
  14. package/build/button/index.js +1 -1
  15. package/build/button/index.js.map +1 -1
  16. package/build/color-palette/index.native.js +11 -7
  17. package/build/color-palette/index.native.js.map +1 -1
  18. package/build/color-picker/color-copy-button.js +1 -1
  19. package/build/color-picker/color-copy-button.js.map +1 -1
  20. package/build/context/wordpress-component.js.map +1 -1
  21. package/build/custom-select-control-v2/index.js +11 -10
  22. package/build/custom-select-control-v2/index.js.map +1 -1
  23. package/build/date-time/date/styles.js +8 -8
  24. package/build/date-time/date/styles.js.map +1 -1
  25. package/build/dropdown-menu-v2/index.js +205 -159
  26. package/build/dropdown-menu-v2/index.js.map +1 -1
  27. package/build/dropdown-menu-v2/styles.js +86 -77
  28. package/build/dropdown-menu-v2/styles.js.map +1 -1
  29. package/build/dropdown-menu-v2/types.js.map +1 -1
  30. package/build/duotone-picker/duotone-picker.js +4 -3
  31. package/build/duotone-picker/duotone-picker.js.map +1 -1
  32. package/build/font-size-picker/index.js +4 -2
  33. package/build/font-size-picker/index.js.map +1 -1
  34. package/build/font-size-picker/index.native.js +6 -3
  35. package/build/font-size-picker/index.native.js.map +1 -1
  36. package/build/form-token-field/index.js +10 -5
  37. package/build/form-token-field/index.js.map +1 -1
  38. package/build/form-token-field/token.js +1 -0
  39. package/build/form-token-field/token.js.map +1 -1
  40. package/build/gradient-picker/index.js +3 -2
  41. package/build/gradient-picker/index.js.map +1 -1
  42. package/build/index.native.js +20 -3
  43. package/build/index.native.js.map +1 -1
  44. package/build/input-control/styles/input-control-styles.js +32 -29
  45. package/build/input-control/styles/input-control-styles.js.map +1 -1
  46. package/build/input-control/types.js.map +1 -1
  47. package/build/lock-unlock.js +18 -0
  48. package/build/lock-unlock.js.map +1 -0
  49. package/build/mobile/bottom-sheet/index.native.js +8 -0
  50. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  51. package/build/mobile/color-settings/palette.screen.native.js +8 -4
  52. package/build/mobile/color-settings/palette.screen.native.js.map +1 -1
  53. package/build/mobile/global-styles-context/utils.native.js +26 -13
  54. package/build/mobile/global-styles-context/utils.native.js.map +1 -1
  55. package/build/mobile/image/constants.js +12 -0
  56. package/build/mobile/image/constants.js.map +1 -0
  57. package/build/mobile/image/index.native.js +26 -18
  58. package/build/mobile/image/index.native.js.map +1 -1
  59. package/build/mobile/keyboard-aware-flat-list/index.android.js +40 -8
  60. package/build/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  61. package/build/mobile/keyboard-aware-flat-list/index.ios.js +44 -68
  62. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  63. package/build/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js +39 -0
  64. package/build/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js.map +1 -0
  65. package/build/mobile/keyboard-aware-flat-list/{use-scroll-to-text-input.native.js → use-scroll-to-section.native.js} +22 -29
  66. package/build/mobile/keyboard-aware-flat-list/use-scroll-to-section.native.js.map +1 -0
  67. package/build/mobile/keyboard-aware-flat-list/use-scroll.native.js +93 -0
  68. package/build/mobile/keyboard-aware-flat-list/use-scroll.native.js.map +1 -0
  69. package/build/mobile/utils/get-px-from-css-unit.native.js +302 -0
  70. package/build/mobile/utils/get-px-from-css-unit.native.js.map +1 -0
  71. package/build/modal/index.js +18 -13
  72. package/build/modal/index.js.map +1 -1
  73. package/build/navigation/menu/menu-title.js +1 -1
  74. package/build/navigation/menu/menu-title.js.map +1 -1
  75. package/build/navigator/navigator-provider/component.js +13 -15
  76. package/build/navigator/navigator-provider/component.js.map +1 -1
  77. package/build/navigator/navigator-screen/component.js +23 -63
  78. package/build/navigator/navigator-screen/component.js.map +1 -1
  79. package/build/navigator/styles.js +52 -0
  80. package/build/navigator/styles.js.map +1 -0
  81. package/build/number-control/index.js +4 -8
  82. package/build/number-control/index.js.map +1 -1
  83. package/build/number-control/types.js.map +1 -1
  84. package/build/palette-edit/index.js +15 -54
  85. package/build/palette-edit/index.js.map +1 -1
  86. package/build/private-apis.js +11 -26
  87. package/build/private-apis.js.map +1 -1
  88. package/build/private-apis.native.js +21 -0
  89. package/build/private-apis.native.js.map +1 -0
  90. package/build/radio-control/index.js +1 -0
  91. package/build/radio-control/index.js.map +1 -1
  92. package/build/range-control/index.js +1 -1
  93. package/build/range-control/index.js.map +1 -1
  94. package/build/select-control/styles/select-control-styles.js +15 -25
  95. package/build/select-control/styles/select-control-styles.js.map +1 -1
  96. package/build/slot-fill/index.js +3 -2
  97. package/build/slot-fill/index.js.map +1 -1
  98. package/build/slot-fill/types.js.map +1 -1
  99. package/build/snackbar/types.js.map +1 -1
  100. package/build/tabs/styles.js +3 -3
  101. package/build/tabs/styles.js.map +1 -1
  102. package/build/tabs/tabpanel.js +9 -7
  103. package/build/tabs/tabpanel.js.map +1 -1
  104. package/build/toggle-group-control/toggle-group-control/component.js +4 -4
  105. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  106. package/build/toggle-group-control/toggle-group-control/styles.js +29 -15
  107. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  108. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
  109. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  110. package/build/tools-panel/tools-panel/component.js +3 -1
  111. package/build/tools-panel/tools-panel/component.js.map +1 -1
  112. package/build/tools-panel/tools-panel-header/component.js +9 -8
  113. package/build/tools-panel/tools-panel-header/component.js.map +1 -1
  114. package/build/tools-panel/types.js.map +1 -1
  115. package/build/tooltip/index.js +34 -10
  116. package/build/tooltip/index.js.map +1 -1
  117. package/build/tooltip/types.js.map +1 -1
  118. package/build/truncate/hook.js +10 -4
  119. package/build/truncate/hook.js.map +1 -1
  120. package/build/truncate/types.js.map +1 -1
  121. package/build/unit-control/index.js +1 -1
  122. package/build/unit-control/index.js.map +1 -1
  123. package/build/utils/strings.js +34 -3
  124. package/build/utils/strings.js.map +1 -1
  125. package/build-module/base-control/index.js +16 -12
  126. package/build-module/base-control/index.js.map +1 -1
  127. package/build-module/border-box-control/border-box-control-linked-button/component.js +1 -1
  128. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  129. package/build-module/border-control/border-control-style-picker/component.js +1 -1
  130. package/build-module/border-control/border-control-style-picker/component.js.map +1 -1
  131. package/build-module/box-control/index.js +1 -1
  132. package/build-module/box-control/index.js.map +1 -1
  133. package/build-module/box-control/linked-button.js +1 -1
  134. package/build-module/box-control/linked-button.js.map +1 -1
  135. package/build-module/button/index.js +1 -1
  136. package/build-module/button/index.js.map +1 -1
  137. package/build-module/color-palette/index.native.js +11 -7
  138. package/build-module/color-palette/index.native.js.map +1 -1
  139. package/build-module/color-picker/color-copy-button.js +1 -1
  140. package/build-module/color-picker/color-copy-button.js.map +1 -1
  141. package/build-module/context/wordpress-component.js.map +1 -1
  142. package/build-module/custom-select-control-v2/index.js +11 -10
  143. package/build-module/custom-select-control-v2/index.js.map +1 -1
  144. package/build-module/date-time/date/styles.js +8 -8
  145. package/build-module/date-time/date/styles.js.map +1 -1
  146. package/build-module/dropdown-menu-v2/index.js +201 -154
  147. package/build-module/dropdown-menu-v2/index.js.map +1 -1
  148. package/build-module/dropdown-menu-v2/styles.js +68 -61
  149. package/build-module/dropdown-menu-v2/styles.js.map +1 -1
  150. package/build-module/dropdown-menu-v2/types.js.map +1 -1
  151. package/build-module/duotone-picker/duotone-picker.js +4 -3
  152. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  153. package/build-module/font-size-picker/index.js +4 -2
  154. package/build-module/font-size-picker/index.js.map +1 -1
  155. package/build-module/font-size-picker/index.native.js +5 -2
  156. package/build-module/font-size-picker/index.native.js.map +1 -1
  157. package/build-module/form-token-field/index.js +10 -5
  158. package/build-module/form-token-field/index.js.map +1 -1
  159. package/build-module/form-token-field/token.js +1 -0
  160. package/build-module/form-token-field/token.js.map +1 -1
  161. package/build-module/gradient-picker/index.js +3 -2
  162. package/build-module/gradient-picker/index.js.map +1 -1
  163. package/build-module/index.native.js +6 -1
  164. package/build-module/index.native.js.map +1 -1
  165. package/build-module/input-control/styles/input-control-styles.js +31 -29
  166. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  167. package/build-module/input-control/types.js.map +1 -1
  168. package/build-module/lock-unlock.js +9 -0
  169. package/build-module/lock-unlock.js.map +1 -0
  170. package/build-module/mobile/bottom-sheet/index.native.js +9 -1
  171. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  172. package/build-module/mobile/color-settings/palette.screen.native.js +8 -4
  173. package/build-module/mobile/color-settings/palette.screen.native.js.map +1 -1
  174. package/build-module/mobile/global-styles-context/utils.native.js +25 -13
  175. package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
  176. package/build-module/mobile/image/constants.js +5 -0
  177. package/build-module/mobile/image/constants.js.map +1 -0
  178. package/build-module/mobile/image/index.native.js +25 -16
  179. package/build-module/mobile/image/index.native.js.map +1 -1
  180. package/build-module/mobile/keyboard-aware-flat-list/index.android.js +40 -6
  181. package/build-module/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  182. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +46 -68
  183. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  184. package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js +33 -0
  185. package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js.map +1 -0
  186. package/build-module/mobile/keyboard-aware-flat-list/{use-scroll-to-text-input.native.js → use-scroll-to-section.native.js} +21 -27
  187. package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-section.native.js.map +1 -0
  188. package/build-module/mobile/keyboard-aware-flat-list/use-scroll.native.js +86 -0
  189. package/build-module/mobile/keyboard-aware-flat-list/use-scroll.native.js.map +1 -0
  190. package/build-module/mobile/utils/get-px-from-css-unit.native.js +294 -0
  191. package/build-module/mobile/utils/get-px-from-css-unit.native.js.map +1 -0
  192. package/build-module/modal/index.js +18 -13
  193. package/build-module/modal/index.js.map +1 -1
  194. package/build-module/navigation/menu/menu-title.js +1 -1
  195. package/build-module/navigation/menu/menu-title.js.map +1 -1
  196. package/build-module/navigator/navigator-provider/component.js +3 -16
  197. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  198. package/build-module/navigator/navigator-screen/component.js +16 -70
  199. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  200. package/build-module/navigator/styles.js +47 -0
  201. package/build-module/navigator/styles.js.map +1 -0
  202. package/build-module/number-control/index.js +4 -8
  203. package/build-module/number-control/index.js.map +1 -1
  204. package/build-module/number-control/types.js.map +1 -1
  205. package/build-module/palette-edit/index.js +15 -51
  206. package/build-module/palette-edit/index.js.map +1 -1
  207. package/build-module/private-apis.js +10 -23
  208. package/build-module/private-apis.js.map +1 -1
  209. package/build-module/private-apis.native.js +14 -0
  210. package/build-module/private-apis.native.js.map +1 -0
  211. package/build-module/radio-control/index.js +1 -0
  212. package/build-module/radio-control/index.js.map +1 -1
  213. package/build-module/range-control/index.js +1 -1
  214. package/build-module/range-control/index.js.map +1 -1
  215. package/build-module/select-control/styles/select-control-styles.js +15 -25
  216. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  217. package/build-module/slot-fill/index.js +3 -2
  218. package/build-module/slot-fill/index.js.map +1 -1
  219. package/build-module/slot-fill/types.js.map +1 -1
  220. package/build-module/snackbar/types.js.map +1 -1
  221. package/build-module/tabs/styles.js +3 -3
  222. package/build-module/tabs/styles.js.map +1 -1
  223. package/build-module/tabs/tabpanel.js +9 -7
  224. package/build-module/tabs/tabpanel.js.map +1 -1
  225. package/build-module/toggle-group-control/toggle-group-control/component.js +4 -4
  226. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  227. package/build-module/toggle-group-control/toggle-group-control/styles.js +29 -15
  228. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  229. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
  230. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  231. package/build-module/tools-panel/tools-panel/component.js +3 -1
  232. package/build-module/tools-panel/tools-panel/component.js.map +1 -1
  233. package/build-module/tools-panel/tools-panel-header/component.js +9 -8
  234. package/build-module/tools-panel/tools-panel-header/component.js.map +1 -1
  235. package/build-module/tools-panel/types.js.map +1 -1
  236. package/build-module/tooltip/index.js +34 -12
  237. package/build-module/tooltip/index.js.map +1 -1
  238. package/build-module/tooltip/types.js.map +1 -1
  239. package/build-module/truncate/hook.js +10 -4
  240. package/build-module/truncate/hook.js.map +1 -1
  241. package/build-module/truncate/types.js.map +1 -1
  242. package/build-module/unit-control/index.js +1 -1
  243. package/build-module/unit-control/index.js.map +1 -1
  244. package/build-module/utils/strings.js +32 -2
  245. package/build-module/utils/strings.js.map +1 -1
  246. package/build-style/style-rtl.css +29 -5
  247. package/build-style/style.css +29 -5
  248. package/build-types/base-control/index.d.ts +3 -27
  249. package/build-types/base-control/index.d.ts.map +1 -1
  250. package/build-types/base-control/stories/index.story.d.ts +4 -1
  251. package/build-types/base-control/stories/index.story.d.ts.map +1 -1
  252. package/build-types/border-box-control/border-box-control/hook.d.ts +4 -4
  253. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +6 -6
  254. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +4 -4
  255. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +4 -4
  256. package/build-types/border-box-control/stories/index.story.d.ts +1 -1
  257. package/build-types/border-control/border-control/hook.d.ts +4 -4
  258. package/build-types/border-control/border-control-dropdown/hook.d.ts +4 -4
  259. package/build-types/border-control/border-control-style-picker/hook.d.ts +4 -4
  260. package/build-types/border-control/stories/index.story.d.ts +6 -6
  261. package/build-types/box-control/stories/index.story.d.ts +42 -42
  262. package/build-types/box-control/styles/box-control-styles.d.ts +1 -1
  263. package/build-types/button/deprecated.d.ts +3 -3
  264. package/build-types/card/card/hook.d.ts +4 -4
  265. package/build-types/card/card-body/hook.d.ts +4 -4
  266. package/build-types/card/card-divider/hook.d.ts +4 -4
  267. package/build-types/card/card-footer/hook.d.ts +4 -4
  268. package/build-types/card/card-header/hook.d.ts +4 -4
  269. package/build-types/card/card-media/hook.d.ts +4 -4
  270. package/build-types/color-palette/styles.d.ts +2 -2
  271. package/build-types/color-picker/component.d.ts +2 -2
  272. package/build-types/color-picker/stories/index.story.d.ts +1 -1
  273. package/build-types/color-picker/stories/index.story.d.ts.map +1 -1
  274. package/build-types/color-picker/styles.d.ts +3 -3
  275. package/build-types/composite/test/index.d.ts.map +1 -0
  276. package/build-types/context/wordpress-component.d.ts +3 -3
  277. package/build-types/context/wordpress-component.d.ts.map +1 -1
  278. package/build-types/custom-select-control-v2/index.d.ts +3 -2
  279. package/build-types/custom-select-control-v2/index.d.ts.map +1 -1
  280. package/build-types/custom-select-control-v2/stories/index.story.d.ts +4 -3
  281. package/build-types/custom-select-control-v2/stories/index.story.d.ts.map +1 -1
  282. package/build-types/date-time/date/styles.d.ts +3 -3
  283. package/build-types/date-time/date-time/styles.d.ts +1 -1
  284. package/build-types/date-time/time/styles.d.ts +4 -4
  285. package/build-types/dropdown/index.d.ts +1 -1
  286. package/build-types/dropdown/index.d.ts.map +1 -1
  287. package/build-types/dropdown/stories/index.story.d.ts +3 -3
  288. package/build-types/dropdown/stories/index.story.d.ts.map +1 -1
  289. package/build-types/dropdown-menu/index.d.ts +1 -1
  290. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  291. package/build-types/dropdown-menu/stories/index.story.d.ts +2 -2
  292. package/build-types/dropdown-menu/stories/index.story.d.ts.map +1 -1
  293. package/build-types/dropdown-menu-v2/index.d.ts +18 -15
  294. package/build-types/dropdown-menu-v2/index.d.ts.map +1 -1
  295. package/build-types/dropdown-menu-v2/stories/index.story.d.ts +7 -2
  296. package/build-types/dropdown-menu-v2/stories/index.story.d.ts.map +1 -1
  297. package/build-types/dropdown-menu-v2/styles.d.ts +77 -23
  298. package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -1
  299. package/build-types/dropdown-menu-v2/types.d.ts +89 -173
  300. package/build-types/dropdown-menu-v2/types.d.ts.map +1 -1
  301. package/build-types/duotone-picker/duotone-picker.d.ts.map +1 -1
  302. package/build-types/elevation/hook.d.ts +4 -4
  303. package/build-types/flex/flex/hook.d.ts +4 -4
  304. package/build-types/flex/flex-block/hook.d.ts +4 -4
  305. package/build-types/flex/flex-item/hook.d.ts +4 -4
  306. package/build-types/focal-point-picker/stories/index.story.d.ts +4 -4
  307. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
  308. package/build-types/font-size-picker/index.d.ts.map +1 -1
  309. package/build-types/font-size-picker/styles.d.ts +1 -1
  310. package/build-types/form-token-field/index.d.ts.map +1 -1
  311. package/build-types/form-token-field/token.d.ts.map +1 -1
  312. package/build-types/grid/hook.d.ts +4 -4
  313. package/build-types/h-stack/hook.d.ts +4 -4
  314. package/build-types/heading/component.d.ts +1 -1
  315. package/build-types/heading/hook.d.ts +4 -4
  316. package/build-types/input-control/styles/input-control-styles.d.ts +11 -0
  317. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  318. package/build-types/input-control/types.d.ts +1 -1
  319. package/build-types/input-control/types.d.ts.map +1 -1
  320. package/build-types/item-group/item/hook.d.ts +4 -4
  321. package/build-types/item-group/item-group/hook.d.ts +4 -4
  322. package/build-types/lock-unlock.d.ts +3 -0
  323. package/build-types/lock-unlock.d.ts.map +1 -0
  324. package/build-types/menu-item/index.d.ts +1 -1
  325. package/build-types/menu-item/stories/index.story.d.ts +4 -4
  326. package/build-types/mobile/image/constants.d.ts +5 -0
  327. package/build-types/mobile/image/constants.d.ts.map +1 -0
  328. package/build-types/modal/index.d.ts.map +1 -1
  329. package/build-types/navigation/styles/navigation-styles.d.ts +3 -3
  330. package/build-types/navigator/navigator-back-button/hook.d.ts +6 -6
  331. package/build-types/navigator/navigator-button/hook.d.ts +6 -6
  332. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  333. package/build-types/navigator/navigator-screen/component.d.ts +1 -7
  334. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  335. package/build-types/navigator/styles.d.ts +9 -0
  336. package/build-types/navigator/styles.d.ts.map +1 -0
  337. package/build-types/number-control/index.d.ts +1 -1
  338. package/build-types/number-control/index.d.ts.map +1 -1
  339. package/build-types/number-control/stories/index.story.d.ts +1 -1
  340. package/build-types/number-control/types.d.ts +1 -1
  341. package/build-types/palette-edit/index.d.ts +3 -8
  342. package/build-types/palette-edit/index.d.ts.map +1 -1
  343. package/build-types/palette-edit/styles.d.ts +3 -3
  344. package/build-types/popover/index.d.ts +1 -1
  345. package/build-types/popover/index.d.ts.map +1 -1
  346. package/build-types/popover/stories/e2e/index.story.d.ts +1 -1
  347. package/build-types/private-apis.d.ts +0 -1
  348. package/build-types/private-apis.d.ts.map +1 -1
  349. package/build-types/radio-control/index.d.ts.map +1 -1
  350. package/build-types/range-control/index.d.ts +1 -1
  351. package/build-types/range-control/styles/range-control-styles.d.ts +1 -1
  352. package/build-types/resizable-box/index.d.ts +1 -1
  353. package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
  354. package/build-types/resizable-box/stories/index.story.d.ts +2 -2
  355. package/build-types/scrollable/hook.d.ts +4 -4
  356. package/build-types/search-control/index.d.ts +1 -1
  357. package/build-types/search-control/stories/index.story.d.ts +2 -2
  358. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  359. package/build-types/slot-fill/index.d.ts +1 -1
  360. package/build-types/slot-fill/index.d.ts.map +1 -1
  361. package/build-types/slot-fill/types.d.ts +4 -0
  362. package/build-types/slot-fill/types.d.ts.map +1 -1
  363. package/build-types/snackbar/index.d.ts +2 -2
  364. package/build-types/snackbar/stories/index.story.d.ts +0 -3
  365. package/build-types/snackbar/stories/index.story.d.ts.map +1 -1
  366. package/build-types/snackbar/types.d.ts +1 -1
  367. package/build-types/snackbar/types.d.ts.map +1 -1
  368. package/build-types/spacer/hook.d.ts +4 -4
  369. package/build-types/surface/hook.d.ts +4 -4
  370. package/build-types/tabs/styles.d.ts.map +1 -1
  371. package/build-types/tabs/tabpanel.d.ts +1 -1
  372. package/build-types/tabs/tabpanel.d.ts.map +1 -1
  373. package/build-types/text/hook.d.ts +4 -4
  374. package/build-types/text-control/index.d.ts +1 -1
  375. package/build-types/textarea-control/index.d.ts +1 -1
  376. package/build-types/toggle-control/stories/index.story.d.ts +2 -2
  377. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +1 -1
  378. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +1 -1
  379. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  380. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +2 -2
  381. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  382. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
  383. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +1 -1
  384. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  385. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  386. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  387. package/build-types/toolbar/toolbar-button/index.d.ts +3 -3
  388. package/build-types/tools-panel/tools-panel/component.d.ts.map +1 -1
  389. package/build-types/tools-panel/tools-panel/hook.d.ts +5 -4
  390. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  391. package/build-types/tools-panel/tools-panel-header/component.d.ts.map +1 -1
  392. package/build-types/tools-panel/tools-panel-header/hook.d.ts +5 -4
  393. package/build-types/tools-panel/tools-panel-header/hook.d.ts.map +1 -1
  394. package/build-types/tools-panel/tools-panel-item/hook.d.ts +4 -4
  395. package/build-types/tools-panel/types.d.ts +9 -0
  396. package/build-types/tools-panel/types.d.ts.map +1 -1
  397. package/build-types/tooltip/index.d.ts +1 -1
  398. package/build-types/tooltip/index.d.ts.map +1 -1
  399. package/build-types/tooltip/stories/index.story.d.ts +10 -1
  400. package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
  401. package/build-types/tooltip/types.d.ts +3 -0
  402. package/build-types/tooltip/types.d.ts.map +1 -1
  403. package/build-types/truncate/hook.d.ts +5 -5
  404. package/build-types/truncate/hook.d.ts.map +1 -1
  405. package/build-types/truncate/types.d.ts +4 -0
  406. package/build-types/truncate/types.d.ts.map +1 -1
  407. package/build-types/unit-control/index.d.ts +1 -1
  408. package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -1
  409. package/build-types/utils/strings.d.ts +14 -2
  410. package/build-types/utils/strings.d.ts.map +1 -1
  411. package/build-types/v-stack/hook.d.ts +4 -4
  412. package/build-types/v-stack/stories/index.story.d.ts +1 -1
  413. package/package.json +20 -21
  414. package/src/alignment-matrix-control/test/index.tsx +10 -16
  415. package/src/base-control/index.tsx +21 -16
  416. package/src/border-box-control/border-box-control-linked-button/component.tsx +1 -1
  417. package/src/border-control/border-control-style-picker/component.tsx +1 -1
  418. package/src/box-control/index.tsx +1 -1
  419. package/src/box-control/linked-button.tsx +1 -1
  420. package/src/button/README.md +32 -6
  421. package/src/button/index.tsx +1 -1
  422. package/src/button-group/README.md +0 -6
  423. package/src/card/card/README.md +1 -1
  424. package/src/checkbox-control/README.md +1 -9
  425. package/src/color-palette/index.native.js +18 -7
  426. package/src/color-picker/color-copy-button.tsx +1 -1
  427. package/src/combobox-control/README.md +0 -6
  428. package/src/composite/test/index.tsx +576 -0
  429. package/src/context/wordpress-component.ts +11 -6
  430. package/src/custom-select-control/README.md +0 -6
  431. package/src/custom-select-control-v2/index.tsx +13 -12
  432. package/src/date-time/date/styles.ts +3 -3
  433. package/src/dropdown-menu/README.md +0 -5
  434. package/src/dropdown-menu-v2/README.md +75 -136
  435. package/src/dropdown-menu-v2/index.tsx +321 -231
  436. package/src/dropdown-menu-v2/stories/index.story.tsx +522 -126
  437. package/src/dropdown-menu-v2/styles.ts +226 -151
  438. package/src/dropdown-menu-v2/test/index.tsx +480 -188
  439. package/src/dropdown-menu-v2/types.ts +98 -184
  440. package/src/duotone-picker/duotone-picker.tsx +7 -3
  441. package/src/font-size-picker/index.native.js +8 -2
  442. package/src/font-size-picker/index.tsx +4 -2
  443. package/src/form-toggle/README.md +0 -6
  444. package/src/form-token-field/index.tsx +11 -7
  445. package/src/form-token-field/test/index.tsx +97 -0
  446. package/src/form-token-field/token.tsx +1 -0
  447. package/src/gradient-picker/index.tsx +2 -2
  448. package/src/index.native.js +6 -1
  449. package/src/input-control/styles/input-control-styles.tsx +10 -8
  450. package/src/input-control/types.ts +1 -1
  451. package/src/lock-unlock.js +10 -0
  452. package/src/menu-group/README.md +0 -8
  453. package/src/menu-items-choice/README.md +0 -7
  454. package/src/mobile/bottom-sheet/index.native.js +15 -1
  455. package/src/mobile/color-settings/palette.screen.native.js +7 -5
  456. package/src/mobile/global-styles-context/test/fixtures/theme.native.js +0 -20
  457. package/src/mobile/global-styles-context/utils.native.js +28 -19
  458. package/src/mobile/image/constants.js +1 -0
  459. package/src/mobile/image/index.native.js +55 -18
  460. package/src/mobile/image/style.native.scss +35 -9
  461. package/src/mobile/keyboard-aware-flat-list/index.android.js +50 -5
  462. package/src/mobile/keyboard-aware-flat-list/index.ios.js +65 -91
  463. package/src/mobile/keyboard-aware-flat-list/test/{use-scroll-to-text-input.native.js → use-scroll-to-section.native.js} +27 -25
  464. package/src/mobile/keyboard-aware-flat-list/test/use-scroll.native.js +71 -0
  465. package/src/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js +41 -0
  466. package/src/mobile/keyboard-aware-flat-list/{use-scroll-to-text-input.native.js → use-scroll-to-section.native.js} +22 -27
  467. package/src/mobile/keyboard-aware-flat-list/use-scroll.native.js +100 -0
  468. package/src/mobile/utils/get-px-from-css-unit.native.js +329 -0
  469. package/src/mobile/utils/test/get-px-from-css-unit.native.js +172 -0
  470. package/src/modal/README.md +0 -6
  471. package/src/modal/index.tsx +18 -16
  472. package/src/modal/test/index.tsx +90 -1
  473. package/src/navigation/menu/menu-title.tsx +1 -1
  474. package/src/navigator/navigator-provider/component.tsx +3 -4
  475. package/src/navigator/navigator-screen/component.tsx +15 -93
  476. package/src/navigator/styles.ts +71 -0
  477. package/src/navigator/test/index.tsx +0 -64
  478. package/src/notice/README.md +0 -6
  479. package/src/number-control/README.md +2 -2
  480. package/src/number-control/index.tsx +4 -8
  481. package/src/number-control/types.ts +1 -1
  482. package/src/palette-edit/index.tsx +15 -58
  483. package/src/palette-edit/test/index.tsx +1 -75
  484. package/src/panel/README.md +0 -6
  485. package/src/private-apis.native.js +13 -0
  486. package/src/private-apis.ts +12 -37
  487. package/src/radio-control/README.md +0 -6
  488. package/src/radio-control/index.tsx +4 -1
  489. package/src/radio-control/style.scss +29 -2
  490. package/src/radio-group/README.md +0 -6
  491. package/src/range-control/README.md +1 -9
  492. package/src/range-control/index.tsx +1 -1
  493. package/src/search-control/README.md +0 -6
  494. package/src/select-control/README.md +0 -6
  495. package/src/select-control/styles/select-control-styles.ts +10 -28
  496. package/src/slot-fill/index.tsx +5 -2
  497. package/src/slot-fill/types.ts +5 -0
  498. package/src/snackbar/README.md +0 -6
  499. package/src/snackbar/stories/index.story.tsx +7 -5
  500. package/src/snackbar/style.scss +4 -3
  501. package/src/snackbar/types.ts +2 -1
  502. package/src/spacer/README.md +0 -2
  503. package/src/tab-panel/README.md +0 -5
  504. package/src/tab-panel/test/index.tsx +39 -56
  505. package/src/tabs/styles.ts +7 -1
  506. package/src/tabs/tabpanel.tsx +7 -6
  507. package/src/tabs/test/index.tsx +56 -0
  508. package/src/text-control/README.md +0 -6
  509. package/src/textarea-control/README.md +0 -6
  510. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +12 -16
  511. package/src/toggle-group-control/test/index.tsx +58 -45
  512. package/src/toggle-group-control/toggle-group-control/component.tsx +5 -4
  513. package/src/toggle-group-control/toggle-group-control/styles.ts +13 -19
  514. package/src/toggle-group-control/toggle-group-control-option/README.md +1 -1
  515. package/src/toggle-group-control/toggle-group-control-option-base/README.md +1 -1
  516. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +3 -2
  517. package/src/toggle-group-control/toggle-group-control-option-icon/README.md +1 -1
  518. package/src/toolbar/toolbar/README.md +0 -6
  519. package/src/tools-panel/test/index.tsx +12 -20
  520. package/src/tools-panel/tools-panel/README.md +7 -0
  521. package/src/tools-panel/tools-panel/component.tsx +2 -0
  522. package/src/tools-panel/tools-panel-header/README.md +7 -0
  523. package/src/tools-panel/tools-panel-header/component.tsx +20 -13
  524. package/src/tools-panel/types.ts +9 -0
  525. package/src/tooltip/README.md +4 -0
  526. package/src/tooltip/index.tsx +48 -10
  527. package/src/tooltip/stories/index.story.tsx +18 -1
  528. package/src/tooltip/test/index.tsx +404 -254
  529. package/src/tooltip/types.ts +4 -0
  530. package/src/tree-grid/README.md +0 -4
  531. package/src/truncate/README.md +8 -0
  532. package/src/truncate/hook.ts +17 -10
  533. package/src/truncate/test/index.tsx +54 -27
  534. package/src/truncate/types.ts +4 -0
  535. package/src/unit-control/index.tsx +1 -1
  536. package/src/utils/strings.ts +30 -2
  537. package/src/utils/test/strings.js +96 -1
  538. package/tsconfig.tsbuildinfo +1 -1
  539. package/build/dropdown-menu-v2-ariakit/index.js +0 -256
  540. package/build/dropdown-menu-v2-ariakit/index.js.map +0 -1
  541. package/build/dropdown-menu-v2-ariakit/styles.js +0 -180
  542. package/build/dropdown-menu-v2-ariakit/styles.js.map +0 -1
  543. package/build/dropdown-menu-v2-ariakit/types.js +0 -6
  544. package/build/dropdown-menu-v2-ariakit/types.js.map +0 -1
  545. package/build/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js.map +0 -1
  546. package/build-module/dropdown-menu-v2-ariakit/index.js +0 -237
  547. package/build-module/dropdown-menu-v2-ariakit/index.js.map +0 -1
  548. package/build-module/dropdown-menu-v2-ariakit/styles.js +0 -165
  549. package/build-module/dropdown-menu-v2-ariakit/styles.js.map +0 -1
  550. package/build-module/dropdown-menu-v2-ariakit/types.js +0 -2
  551. package/build-module/dropdown-menu-v2-ariakit/types.js.map +0 -1
  552. package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js.map +0 -1
  553. package/build-types/dropdown-menu-v2-ariakit/index.d.ts +0 -20
  554. package/build-types/dropdown-menu-v2-ariakit/index.d.ts.map +0 -1
  555. package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts +0 -16
  556. package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts.map +0 -1
  557. package/build-types/dropdown-menu-v2-ariakit/styles.d.ts +0 -96
  558. package/build-types/dropdown-menu-v2-ariakit/styles.d.ts.map +0 -1
  559. package/build-types/dropdown-menu-v2-ariakit/test/index.d.ts.map +0 -1
  560. package/build-types/dropdown-menu-v2-ariakit/types.d.ts +0 -168
  561. package/build-types/dropdown-menu-v2-ariakit/types.d.ts.map +0 -1
  562. package/src/dropdown-menu-v2-ariakit/README.md +0 -331
  563. package/src/dropdown-menu-v2-ariakit/index.tsx +0 -383
  564. package/src/dropdown-menu-v2-ariakit/stories/index.story.tsx +0 -617
  565. package/src/dropdown-menu-v2-ariakit/styles.ts +0 -345
  566. package/src/dropdown-menu-v2-ariakit/test/index.tsx +0 -1108
  567. package/src/dropdown-menu-v2-ariakit/types.ts +0 -179
  568. /package/build-types/{dropdown-menu-v2-ariakit → composite}/test/index.d.ts +0 -0
@@ -2,7 +2,7 @@
2
2
  * External dependencies
3
3
  */
4
4
  import { render, screen, waitFor } from '@testing-library/react';
5
- import userEvent from '@testing-library/user-event';
5
+ import { press, hover, click } from '@ariakit/test';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
@@ -13,7 +13,6 @@ import { wordpress, category, media } from '@wordpress/icons';
13
13
  * Internal dependencies
14
14
  */
15
15
  import TabPanel from '..';
16
- import cleanupTooltip from '../../tooltip/test/utils';
17
16
 
18
17
  const TABS = [
19
18
  {
@@ -95,8 +94,6 @@ describe.each( [
95
94
  } );
96
95
 
97
96
  it( 'should display a tooltip when hovering tabs provided with an icon', async () => {
98
- const user = userEvent.setup();
99
-
100
97
  const panelRenderFunction = jest.fn();
101
98
 
102
99
  const TABS_WITH_ICON = [
@@ -119,7 +116,7 @@ describe.each( [
119
116
  screen.queryByText( TABS_WITH_ICON[ i ].title )
120
117
  ).not.toBeInTheDocument();
121
118
 
122
- await user.hover( allTabs[ i ] );
119
+ await hover( allTabs[ i ] );
123
120
 
124
121
  await waitFor( () =>
125
122
  expect(
@@ -127,15 +124,12 @@ describe.each( [
127
124
  ).toBeVisible()
128
125
  );
129
126
 
130
- await user.unhover( allTabs[ i ] );
127
+ // Trigger closing the tooltip
128
+ await click( document.body );
131
129
  }
132
-
133
- await cleanupTooltip( user );
134
130
  } );
135
131
 
136
132
  it( 'should display a tooltip when moving the selection via the keyboard on tabs provided with an icon', async () => {
137
- const user = userEvent.setup();
138
-
139
133
  const mockOnSelect = jest.fn();
140
134
  const panelRenderFunction = jest.fn();
141
135
 
@@ -161,7 +155,7 @@ describe.each( [
161
155
  // Tab to focus the tablist. Make sure alpha is focused, and that the
162
156
  // corresponding tooltip is shown.
163
157
  expect( screen.queryByText( 'Alpha' ) ).not.toBeInTheDocument();
164
- await user.keyboard( '[Tab]' );
158
+ await press.Tab();
165
159
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
166
160
  expect( screen.getByText( 'Alpha' ) ).toBeInTheDocument();
167
161
  expect( await getSelectedTab() ).toHaveFocus();
@@ -169,7 +163,7 @@ describe.each( [
169
163
  // Move selection with arrow keys. Make sure beta is focused, and that
170
164
  // the corresponding tooltip is shown.
171
165
  expect( screen.queryByText( 'Beta' ) ).not.toBeInTheDocument();
172
- await user.keyboard( '[ArrowRight]' );
166
+ await press.ArrowRight();
173
167
  expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
174
168
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'beta' );
175
169
  expect( screen.getByText( 'Beta' ) ).toBeInTheDocument();
@@ -178,7 +172,7 @@ describe.each( [
178
172
  // Move selection with arrow keys. Make sure gamma is focused, and that
179
173
  // the corresponding tooltip is shown.
180
174
  expect( screen.queryByText( 'Gamma' ) ).not.toBeInTheDocument();
181
- await user.keyboard( '[ArrowRight]' );
175
+ await press.ArrowRight();
182
176
  expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
183
177
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'gamma' );
184
178
  expect( screen.getByText( 'Gamma' ) ).toBeInTheDocument();
@@ -187,13 +181,11 @@ describe.each( [
187
181
  // Move selection with arrow keys. Make sure beta is focused, and that
188
182
  // the corresponding tooltip is shown.
189
183
  expect( screen.queryByText( 'Beta' ) ).not.toBeInTheDocument();
190
- await user.keyboard( '[ArrowLeft]' );
184
+ await press.ArrowLeft();
191
185
  expect( mockOnSelect ).toHaveBeenCalledTimes( 4 );
192
186
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'beta' );
193
187
  expect( screen.getByText( 'Beta' ) ).toBeInTheDocument();
194
188
  expect( await getSelectedTab() ).toHaveFocus();
195
-
196
- await cleanupTooltip( user );
197
189
  } );
198
190
  } );
199
191
 
@@ -283,7 +275,6 @@ describe.each( [
283
275
  } );
284
276
 
285
277
  it( 'should fall back to the tab associated to `initialTabName` if the currently active tab is removed', async () => {
286
- const user = userEvent.setup();
287
278
  const mockOnSelect = jest.fn();
288
279
 
289
280
  const { rerender } = render(
@@ -298,7 +289,7 @@ describe.each( [
298
289
  expect( await getSelectedTab() ).toHaveTextContent( 'Gamma' );
299
290
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'gamma' );
300
291
 
301
- await user.click( screen.getByRole( 'tab', { name: 'Alpha' } ) );
292
+ await click( screen.getByRole( 'tab', { name: 'Alpha' } ) );
302
293
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
303
294
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'alpha' );
304
295
 
@@ -386,7 +377,6 @@ describe.each( [
386
377
 
387
378
  describe( 'Disabled Tab', () => {
388
379
  it( 'should disable the tab when `disabled` is `true`', async () => {
389
- const user = userEvent.setup();
390
380
  const mockOnSelect = jest.fn();
391
381
 
392
382
  render(
@@ -414,7 +404,7 @@ describe.each( [
414
404
 
415
405
  // onSelect should not be called since the disabled tab is
416
406
  // highlighted, but not selected.
417
- await user.keyboard( '[ArrowLeft]' );
407
+ await press.ArrowLeft();
418
408
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
419
409
  } );
420
410
 
@@ -582,7 +572,6 @@ describe.each( [
582
572
 
583
573
  describe( 'Tab Activation', () => {
584
574
  it( 'defaults to automatic tab activation (pointer clicks)', async () => {
585
- const user = userEvent.setup();
586
575
  const panelRenderFunction = jest.fn();
587
576
  const mockOnSelect = jest.fn();
588
577
 
@@ -602,7 +591,7 @@ describe.each( [
602
591
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'alpha' );
603
592
 
604
593
  // Click on Beta, make sure beta is the selected tab
605
- await user.click( screen.getByRole( 'tab', { name: 'Beta' } ) );
594
+ await click( screen.getByRole( 'tab', { name: 'Beta' } ) );
606
595
 
607
596
  expect( await getSelectedTab() ).toHaveTextContent( 'Beta' );
608
597
  expect(
@@ -611,7 +600,7 @@ describe.each( [
611
600
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'beta' );
612
601
 
613
602
  // Click on Alpha, make sure beta is the selected tab
614
- await user.click( screen.getByRole( 'tab', { name: 'Alpha' } ) );
603
+ await click( screen.getByRole( 'tab', { name: 'Alpha' } ) );
615
604
 
616
605
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
617
606
  expect(
@@ -621,7 +610,6 @@ describe.each( [
621
610
  } );
622
611
 
623
612
  it( 'defaults to automatic tab activation (arrow keys)', async () => {
624
- const user = userEvent.setup();
625
613
  const mockOnSelect = jest.fn();
626
614
 
627
615
  render(
@@ -638,12 +626,12 @@ describe.each( [
638
626
  // Tab to focus the tablist. Make sure alpha is focused.
639
627
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
640
628
  expect( await getSelectedTab() ).not.toHaveFocus();
641
- await user.keyboard( '[Tab]' );
629
+ await press.Tab();
642
630
  expect( await getSelectedTab() ).toHaveFocus();
643
631
 
644
632
  // Navigate forward with arrow keys and make sure the Beta tab is
645
633
  // selected automatically.
646
- await user.keyboard( '[ArrowRight]' );
634
+ await press.ArrowRight();
647
635
  expect( await getSelectedTab() ).toHaveTextContent( 'Beta' );
648
636
  expect( await getSelectedTab() ).toHaveFocus();
649
637
  expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
@@ -651,7 +639,7 @@ describe.each( [
651
639
 
652
640
  // Navigate backwards with arrow keys. Make sure alpha is
653
641
  // selected automatically.
654
- await user.keyboard( '[ArrowLeft]' );
642
+ await press.ArrowLeft();
655
643
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
656
644
  expect( await getSelectedTab() ).toHaveFocus();
657
645
  expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
@@ -659,7 +647,6 @@ describe.each( [
659
647
  } );
660
648
 
661
649
  it( 'wraps around the last/first tab when using arrow keys', async () => {
662
- const user = userEvent.setup();
663
650
  const mockOnSelect = jest.fn();
664
651
 
665
652
  render(
@@ -676,12 +663,12 @@ describe.each( [
676
663
  // Tab to focus the tablist. Make sure Alpha is focused.
677
664
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
678
665
  expect( await getSelectedTab() ).not.toHaveFocus();
679
- await user.keyboard( '[Tab]' );
666
+ await press.Tab();
680
667
  expect( await getSelectedTab() ).toHaveFocus();
681
668
 
682
669
  // Navigate backwards with arrow keys and make sure that the Gamma tab
683
670
  // (the last tab) is selected automatically.
684
- await user.keyboard( '[ArrowLeft]' );
671
+ await press.ArrowLeft();
685
672
  expect( await getSelectedTab() ).toHaveTextContent( 'Gamma' );
686
673
  expect( await getSelectedTab() ).toHaveFocus();
687
674
  expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
@@ -689,7 +676,7 @@ describe.each( [
689
676
 
690
677
  // Navigate forward with arrow keys. Make sure alpha (the first tab) is
691
678
  // selected automatically.
692
- await user.keyboard( '[ArrowRight]' );
679
+ await press.ArrowRight();
693
680
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
694
681
  expect( await getSelectedTab() ).toHaveFocus();
695
682
  expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
@@ -697,7 +684,6 @@ describe.each( [
697
684
  } );
698
685
 
699
686
  it( 'should not move tab selection when pressing the up/down arrow keys, unless the orientation is changed to `vertical`', async () => {
700
- const user = userEvent.setup();
701
687
  const mockOnSelect = jest.fn();
702
688
 
703
689
  const { rerender } = render(
@@ -714,18 +700,18 @@ describe.each( [
714
700
  // Tab to focus the tablist. Make sure alpha is focused.
715
701
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
716
702
  expect( await getSelectedTab() ).not.toHaveFocus();
717
- await user.keyboard( '[Tab]' );
703
+ await press.Tab();
718
704
  expect( await getSelectedTab() ).toHaveFocus();
719
705
 
720
706
  // Press the arrow up key, nothing happens.
721
- await user.keyboard( '[ArrowUp]' );
707
+ await press.ArrowUp();
722
708
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
723
709
  expect( await getSelectedTab() ).toHaveFocus();
724
710
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
725
711
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'alpha' );
726
712
 
727
713
  // Press the arrow down key, nothing happens
728
- await user.keyboard( '[ArrowDown]' );
714
+ await press.ArrowDown();
729
715
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
730
716
  expect( await getSelectedTab() ).toHaveFocus();
731
717
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
@@ -753,7 +739,7 @@ describe.each( [
753
739
 
754
740
  // Navigate forward with arrow keys and make sure the Beta tab is
755
741
  // selected automatically.
756
- await user.keyboard( '[ArrowDown]' );
742
+ await press.ArrowDown();
757
743
  expect( await getSelectedTab() ).toHaveTextContent( 'Beta' );
758
744
  expect( await getSelectedTab() ).toHaveFocus();
759
745
  expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
@@ -761,7 +747,7 @@ describe.each( [
761
747
 
762
748
  // Navigate backwards with arrow keys. Make sure alpha is
763
749
  // selected automatically.
764
- await user.keyboard( '[ArrowUp]' );
750
+ await press.ArrowUp();
765
751
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
766
752
  expect( await getSelectedTab() ).toHaveFocus();
767
753
  expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
@@ -769,7 +755,7 @@ describe.each( [
769
755
 
770
756
  // Navigate backwards with arrow keys. Make sure alpha is
771
757
  // selected automatically.
772
- await user.keyboard( '[ArrowUp]' );
758
+ await press.ArrowUp();
773
759
  expect( await getSelectedTab() ).toHaveTextContent( 'Gamma' );
774
760
  expect( await getSelectedTab() ).toHaveFocus();
775
761
  expect( mockOnSelect ).toHaveBeenCalledTimes( 4 );
@@ -777,7 +763,7 @@ describe.each( [
777
763
 
778
764
  // Navigate backwards with arrow keys. Make sure alpha is
779
765
  // selected automatically.
780
- await user.keyboard( '[ArrowDown]' );
766
+ await press.ArrowDown();
781
767
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
782
768
  expect( await getSelectedTab() ).toHaveFocus();
783
769
  expect( mockOnSelect ).toHaveBeenCalledTimes( 5 );
@@ -785,7 +771,6 @@ describe.each( [
785
771
  } );
786
772
 
787
773
  it( 'should move focus on a tab even if disabled with arrow key, but not with pointer clicks', async () => {
788
- const user = userEvent.setup();
789
774
  const mockOnSelect = jest.fn();
790
775
 
791
776
  render(
@@ -810,7 +795,7 @@ describe.each( [
810
795
  // Tab to focus the tablist. Make sure Alpha is focused.
811
796
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
812
797
  expect( await getSelectedTab() ).not.toHaveFocus();
813
- await user.keyboard( '[Tab]' );
798
+ await press.Tab();
814
799
  expect( await getSelectedTab() ).toHaveFocus();
815
800
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
816
801
 
@@ -819,7 +804,9 @@ describe.each( [
819
804
  // it was the tab that was last selected before delta. Therefore, the
820
805
  // `mockOnSelect` function gets called only twice (and not three times)
821
806
  // - it will receive focus, when using arrow keys
822
- await user.keyboard( '[ArrowRight][ArrowRight][ArrowRight]' );
807
+ await press.ArrowRight();
808
+ await press.ArrowRight();
809
+ await press.ArrowRight();
823
810
  expect( await getSelectedTab() ).toHaveTextContent( 'Gamma' );
824
811
  expect(
825
812
  screen.getByRole( 'tab', { name: 'Delta' } )
@@ -830,7 +817,7 @@ describe.each( [
830
817
  // Navigate backwards with arrow keys. The gamma tab receives focus.
831
818
  // The `mockOnSelect` callback doesn't fire, since the gamma tab was
832
819
  // already selected.
833
- await user.keyboard( '[ArrowLeft]' );
820
+ await press.ArrowLeft();
834
821
  expect( await getSelectedTab() ).toHaveTextContent( 'Gamma' );
835
822
  expect( await getSelectedTab() ).toHaveFocus();
836
823
  expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
@@ -838,34 +825,31 @@ describe.each( [
838
825
  // Click on the disabled tab. Compared to using arrow keys to move the
839
826
  // focus, disabled tabs ignore pointer clicks — and therefore, they don't
840
827
  // receive focus, nor they cause the `mockOnSelect` function to fire.
841
- await user.click( screen.getByRole( 'tab', { name: 'Delta' } ) );
828
+ await click( screen.getByRole( 'tab', { name: 'Delta' } ) );
842
829
  expect( await getSelectedTab() ).toHaveTextContent( 'Gamma' );
843
830
  expect( await getSelectedTab() ).toHaveFocus();
844
831
  expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
845
832
  } );
846
833
 
847
834
  it( 'should not focus the next tab when the Tab key is pressed', async () => {
848
- const user = userEvent.setup();
849
-
850
835
  render( <Component tabs={ TABS } children={ () => undefined } /> );
851
836
 
852
837
  // Tab should initially focus the first tab in the tablist, which
853
838
  // is Alpha.
854
- await user.keyboard( '[Tab]' );
839
+ await press.Tab();
855
840
  expect(
856
841
  await screen.findByRole( 'tab', { name: 'Alpha' } )
857
842
  ).toHaveFocus();
858
843
 
859
844
  // Because all other tabs should have `tabindex=-1`, pressing Tab
860
845
  // should NOT move the focus to the next tab, which is Beta.
861
- await user.keyboard( '[Tab]' );
846
+ await press.Tab();
862
847
  expect(
863
848
  await screen.findByRole( 'tab', { name: 'Beta' } )
864
849
  ).not.toHaveFocus();
865
850
  } );
866
851
 
867
852
  it( 'switches to manual tab activation when the `selectOnMove` prop is set to `false`', async () => {
868
- const user = userEvent.setup();
869
853
  const mockOnSelect = jest.fn();
870
854
 
871
855
  render(
@@ -883,33 +867,33 @@ describe.each( [
883
867
 
884
868
  // Click on Alpha and make sure it is selected.
885
869
  // onSelect shouldn't fire since the selected tab didn't change.
886
- await user.click( screen.getByRole( 'tab', { name: 'Alpha' } ) );
870
+ await click( screen.getByRole( 'tab', { name: 'Alpha' } ) );
887
871
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
888
872
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'alpha' );
889
873
 
890
874
  // Navigate forward with arrow keys. Make sure Beta is focused, but
891
875
  // that the tab selection happens only when pressing the spacebar
892
876
  // or enter key.
893
- await user.keyboard( '[ArrowRight]' );
877
+ await press.ArrowRight();
894
878
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
895
879
  expect(
896
880
  await screen.findByRole( 'tab', { name: 'Beta' } )
897
881
  ).toHaveFocus();
898
882
 
899
- await user.keyboard( '[Enter]' );
883
+ await press.Enter();
900
884
  expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
901
885
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'beta' );
902
886
 
903
887
  // Navigate forward with arrow keys. Make sure Gamma (last tab) is
904
888
  // focused, but that tab selection happens only when pressing the
905
889
  // spacebar or enter key.
906
- await user.keyboard( '[ArrowRight]' );
890
+ await press.ArrowRight();
907
891
  expect( mockOnSelect ).toHaveBeenCalledTimes( 2 );
908
892
  expect(
909
893
  screen.getByRole( 'tab', { name: 'Gamma' } )
910
894
  ).toHaveFocus();
911
895
 
912
- await user.keyboard( '[Space]' );
896
+ await press.Space();
913
897
  expect( mockOnSelect ).toHaveBeenCalledTimes( 3 );
914
898
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'gamma' );
915
899
  } );
@@ -931,7 +915,6 @@ describe.each( [
931
915
  } );
932
916
 
933
917
  it( 'should apply the `activeClass` to the selected tab', async () => {
934
- const user = userEvent.setup();
935
918
  const activeClass = 'my-active-tab';
936
919
 
937
920
  render(
@@ -952,7 +935,7 @@ describe.each( [
952
935
  } );
953
936
 
954
937
  // Click the 'Beta' tab
955
- await user.click( screen.getByRole( 'tab', { name: 'Beta' } ) );
938
+ await click( screen.getByRole( 'tab', { name: 'Beta' } ) );
956
939
 
957
940
  // Make sure that only the selected tab has the active class
958
941
  expect( await getSelectedTab() ).toHaveTextContent( 'Beta' );
@@ -22,7 +22,9 @@ export const TabListWrapper = styled.div`
22
22
  `;
23
23
 
24
24
  export const Tab = styled( Ariakit.Tab )`
25
- && {
25
+ & {
26
+ display: inline-flex;
27
+ align-items: center;
26
28
  position: relative;
27
29
  border-radius: 0;
28
30
  height: ${ space( 12 ) };
@@ -39,6 +41,10 @@ export const Tab = styled( Ariakit.Tab )`
39
41
  opacity: 0.3;
40
42
  }
41
43
 
44
+ &:hover {
45
+ color: ${ COLORS.theme.accent };
46
+ }
47
+
42
48
  &:focus:not( :disabled ) {
43
49
  position: relative;
44
50
  box-shadow: none;
@@ -1,7 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
-
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
@@ -32,16 +28,21 @@ export const TabPanel = forwardRef<
32
28
  }
33
29
  const { store, instanceId } = context;
34
30
  const instancedTabId = `${ instanceId }-${ tabId }`;
31
+ const selectedId = store.useState( ( state ) => state.selectedId );
35
32
 
36
33
  return (
37
34
  <StyledTabPanel
38
35
  ref={ ref }
39
36
  store={ store }
40
- id={ instancedTabId }
37
+ // For TabPanel, the id passed here is the id attribute of the DOM
38
+ // element.
39
+ // `tabId` is the id of the tab that controls this panel.
40
+ id={ `${ instancedTabId }-view` }
41
+ tabId={ instancedTabId }
41
42
  focusable={ focusable }
42
43
  { ...otherProps }
43
44
  >
44
- { children }
45
+ { selectedId === instancedTabId && children }
45
46
  </StyledTabPanel>
46
47
  );
47
48
  } );
@@ -1278,4 +1278,60 @@ describe( 'Tabs', () => {
1278
1278
  } );
1279
1279
  } );
1280
1280
  } );
1281
+ it( 'should associate each `Tab` with the correct `TabPanel`, even if they are not rendered in the same order', async () => {
1282
+ const TABS_WITH_DELTA_REVERSED = [ ...TABS_WITH_DELTA ].reverse();
1283
+
1284
+ render(
1285
+ <Tabs>
1286
+ <Tabs.TabList>
1287
+ { TABS_WITH_DELTA.map( ( tabObj ) => (
1288
+ <Tabs.Tab
1289
+ key={ tabObj.tabId }
1290
+ tabId={ tabObj.tabId }
1291
+ className={ tabObj.tab.className }
1292
+ disabled={ tabObj.tab.disabled }
1293
+ >
1294
+ { tabObj.title }
1295
+ </Tabs.Tab>
1296
+ ) ) }
1297
+ </Tabs.TabList>
1298
+ { TABS_WITH_DELTA_REVERSED.map( ( tabObj ) => (
1299
+ <Tabs.TabPanel
1300
+ key={ tabObj.tabId }
1301
+ tabId={ tabObj.tabId }
1302
+ focusable={ tabObj.tabpanel?.focusable }
1303
+ >
1304
+ { tabObj.content }
1305
+ </Tabs.TabPanel>
1306
+ ) ) }
1307
+ </Tabs>
1308
+ );
1309
+
1310
+ // Alpha is the initially selected tab,and should render the correct tabpanel
1311
+ expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
1312
+ expect( screen.getByRole( 'tabpanel' ) ).toHaveTextContent(
1313
+ 'Selected tab: Alpha'
1314
+ );
1315
+
1316
+ // Select Beta, make sure the correct tabpanel is rendered
1317
+ await click( screen.getByRole( 'tab', { name: 'Beta' } ) );
1318
+ expect( await getSelectedTab() ).toHaveTextContent( 'Beta' );
1319
+ expect( screen.getByRole( 'tabpanel' ) ).toHaveTextContent(
1320
+ 'Selected tab: Beta'
1321
+ );
1322
+
1323
+ // Select Gamma, make sure the correct tabpanel is rendered
1324
+ await click( screen.getByRole( 'tab', { name: 'Gamma' } ) );
1325
+ expect( await getSelectedTab() ).toHaveTextContent( 'Gamma' );
1326
+ expect( screen.getByRole( 'tabpanel' ) ).toHaveTextContent(
1327
+ 'Selected tab: Gamma'
1328
+ );
1329
+
1330
+ // Select Delta, make sure the correct tabpanel is rendered
1331
+ await click( screen.getByRole( 'tab', { name: 'Delta' } ) );
1332
+ expect( await getSelectedTab() ).toHaveTextContent( 'Delta' );
1333
+ expect( screen.getByRole( 'tabpanel' ) ).toHaveTextContent(
1334
+ 'Selected tab: Delta'
1335
+ );
1336
+ } );
1281
1337
  } );
@@ -4,12 +4,6 @@ TextControl components let users enter and edit text.
4
4
 
5
5
  ![Unfilled and filled TextControl components](https://make.wordpress.org/design/files/2019/03/TextControl.png)
6
6
 
7
- ## Table of contents
8
-
9
- 1. [Design guidelines](#design-guidelines)
10
- 2. [Development guidelines](#development-guidelines)
11
- 3. [Related components](#related-components)
12
-
13
7
  ## Design guidelines
14
8
 
15
9
  ### Usage
@@ -4,12 +4,6 @@ TextareaControls are TextControls that allow for multiple lines of text, and wra
4
4
 
5
5
  ![An empty TextareaControl, and a focused TextareaControl with some content entered.](https://wordpress.org/gutenberg/files/2019/01/TextareaControl.png)
6
6
 
7
- ## Table of contents
8
-
9
- 1. [Design guidelines](#design-guidelines)
10
- 2. [Development guidelines](#development-guidelines)
11
- 3. [Related components](#related-components)
12
-
13
7
  ## Design guidelines
14
8
 
15
9
  ### Usage