@wordpress/components 23.1.0 → 23.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/LICENSE.md +1 -1
  4. package/build/alignment-matrix-control/utils.js +2 -2
  5. package/build/alignment-matrix-control/utils.js.map +1 -1
  6. package/build/autocomplete/autocompleter-ui.js +1 -3
  7. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  8. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  9. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  10. package/build/border-control/border-control-dropdown/component.js +8 -4
  11. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  12. package/build/button/deprecated.js +8 -6
  13. package/build/button/deprecated.js.map +1 -1
  14. package/build/button/index.js +52 -23
  15. package/build/button/index.js.map +1 -1
  16. package/build/button/types.js +6 -0
  17. package/build/button/types.js.map +1 -0
  18. package/build/color-list-picker/index.js.map +1 -1
  19. package/build/color-list-picker/types.js +6 -0
  20. package/build/color-list-picker/types.js.map +1 -0
  21. package/build/color-palette/index.js +9 -61
  22. package/build/color-palette/index.js.map +1 -1
  23. package/build/color-palette/index.native.js +24 -9
  24. package/build/color-palette/index.native.js.map +1 -1
  25. package/build/color-palette/utils.js +103 -0
  26. package/build/color-palette/utils.js.map +1 -0
  27. package/build/color-picker/component.js +1 -0
  28. package/build/color-picker/component.js.map +1 -1
  29. package/build/color-picker/styles.js +8 -10
  30. package/build/color-picker/styles.js.map +1 -1
  31. package/build/combobox-control/index.js +5 -1
  32. package/build/combobox-control/index.js.map +1 -1
  33. package/build/custom-gradient-picker/gradient-bar/utils.js +1 -1
  34. package/build/custom-gradient-picker/gradient-bar/utils.js.map +1 -1
  35. package/build/date-time/date/index.js.map +1 -1
  36. package/build/dropdown/index.js +20 -8
  37. package/build/dropdown/index.js.map +1 -1
  38. package/build/focal-point-picker/utils.js +1 -1
  39. package/build/focal-point-picker/utils.js.map +1 -1
  40. package/build/form-token-field/token.js +1 -1
  41. package/build/form-token-field/token.js.map +1 -1
  42. package/build/gradient-picker/index.js +9 -1
  43. package/build/gradient-picker/index.js.map +1 -1
  44. package/build/h-stack/component.js +0 -1
  45. package/build/h-stack/component.js.map +1 -1
  46. package/build/index.js +7 -17
  47. package/build/index.js.map +1 -1
  48. package/build/index.native.js +8 -18
  49. package/build/index.native.js.map +1 -1
  50. package/build/input-control/input-field.js +4 -2
  51. package/build/input-control/input-field.js.map +1 -1
  52. package/build/item-group/item/component.js +27 -3
  53. package/build/item-group/item/component.js.map +1 -1
  54. package/build/item-group/item-group/component.js +26 -3
  55. package/build/item-group/item-group/component.js.map +1 -1
  56. package/build/item-group/styles.js +14 -14
  57. package/build/item-group/styles.js.map +1 -1
  58. package/build/keyboard-shortcuts/index.js +44 -16
  59. package/build/keyboard-shortcuts/index.js.map +1 -1
  60. package/build/keyboard-shortcuts/types.js +6 -0
  61. package/build/keyboard-shortcuts/types.js.map +1 -0
  62. package/build/modal/index.js +1 -1
  63. package/build/modal/index.js.map +1 -1
  64. package/build/notice/index.js +16 -18
  65. package/build/notice/index.js.map +1 -1
  66. package/build/notice/list.js +23 -8
  67. package/build/notice/list.js.map +1 -1
  68. package/build/notice/types.js +6 -0
  69. package/build/notice/types.js.map +1 -0
  70. package/build/number-control/index.js +1 -1
  71. package/build/number-control/index.js.map +1 -1
  72. package/build/panel/row.js +5 -3
  73. package/build/panel/row.js.map +1 -1
  74. package/build/query-controls/author-select.js +7 -3
  75. package/build/query-controls/author-select.js.map +1 -1
  76. package/build/query-controls/category-select.js +7 -3
  77. package/build/query-controls/category-select.js.map +1 -1
  78. package/build/query-controls/index.js +69 -20
  79. package/build/query-controls/index.js.map +1 -1
  80. package/build/query-controls/terms.js +4 -3
  81. package/build/query-controls/terms.js.map +1 -1
  82. package/build/query-controls/types.js +6 -0
  83. package/build/query-controls/types.js.map +1 -0
  84. package/build/resizable-box/index.js +5 -4
  85. package/build/resizable-box/index.js.map +1 -1
  86. package/build/responsive-wrapper/index.js +18 -1
  87. package/build/responsive-wrapper/index.js.map +1 -1
  88. package/build/responsive-wrapper/types.js +6 -0
  89. package/build/responsive-wrapper/types.js.map +1 -0
  90. package/build/sandbox/index.js +35 -24
  91. package/build/sandbox/index.js.map +1 -1
  92. package/build/sandbox/types.js +6 -0
  93. package/build/sandbox/types.js.map +1 -0
  94. package/build/slot-fill/bubbles-virtually/fill.js +1 -0
  95. package/build/slot-fill/bubbles-virtually/fill.js.map +1 -1
  96. package/build/slot-fill/slot.js +1 -0
  97. package/build/slot-fill/slot.js.map +1 -1
  98. package/build/slot-fill/use-slot.js +1 -11
  99. package/build/slot-fill/use-slot.js.map +1 -1
  100. package/build/snackbar/index.js.map +1 -1
  101. package/build/snackbar/list.js.map +1 -1
  102. package/build/tab-panel/index.js +40 -7
  103. package/build/tab-panel/index.js.map +1 -1
  104. package/build/toolbar/index.js +42 -60
  105. package/build/toolbar/index.js.map +1 -1
  106. package/build/toolbar/toolbar/index.js +74 -0
  107. package/build/toolbar/toolbar/index.js.map +1 -0
  108. package/build/toolbar/{toolbar-container.js → toolbar/toolbar-container.js} +0 -0
  109. package/build/toolbar/toolbar/toolbar-container.js.map +1 -0
  110. package/build/toolbar/{toolbar-container.native.js → toolbar/toolbar-container.native.js} +0 -0
  111. package/build/toolbar/toolbar/toolbar-container.native.js.map +1 -0
  112. package/build/{toolbar-button → toolbar/toolbar-button}/index.js +1 -1
  113. package/build/toolbar/toolbar-button/index.js.map +1 -0
  114. package/build/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.js +0 -0
  115. package/build/toolbar/toolbar-button/toolbar-button-container.js.map +1 -0
  116. package/build/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.native.js +0 -0
  117. package/build/toolbar/toolbar-button/toolbar-button-container.native.js.map +1 -0
  118. package/build/{toolbar-context → toolbar/toolbar-context}/index.js +0 -0
  119. package/build/toolbar/toolbar-context/index.js.map +1 -0
  120. package/build/{toolbar-dropdown-menu → toolbar/toolbar-dropdown-menu}/index.js +1 -1
  121. package/build/toolbar/toolbar-dropdown-menu/index.js.map +1 -0
  122. package/build/{toolbar-group → toolbar/toolbar-group}/index.js +0 -0
  123. package/build/toolbar/toolbar-group/index.js.map +1 -0
  124. package/build/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.js +1 -1
  125. package/build/toolbar/toolbar-group/toolbar-group-collapsed.js.map +1 -0
  126. package/build/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.native.js +1 -1
  127. package/build/toolbar/toolbar-group/toolbar-group-collapsed.native.js.map +1 -0
  128. package/build/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.js +0 -0
  129. package/build/toolbar/toolbar-group/toolbar-group-container.js.map +1 -0
  130. package/build/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.native.js +0 -0
  131. package/build/toolbar/toolbar-group/toolbar-group-container.native.js.map +1 -0
  132. package/build/{toolbar-item → toolbar/toolbar-item}/index.js +0 -0
  133. package/build/toolbar/toolbar-item/index.js.map +1 -0
  134. package/build/{toolbar-item → toolbar/toolbar-item}/index.native.js +0 -0
  135. package/build/toolbar/toolbar-item/index.native.js.map +1 -0
  136. package/build/tree-grid/index.js +4 -4
  137. package/build/tree-grid/index.js.map +1 -1
  138. package/build/tree-select/index.js +2 -6
  139. package/build/tree-select/index.js.map +1 -1
  140. package/build-module/alignment-matrix-control/utils.js +2 -2
  141. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  142. package/build-module/autocomplete/autocompleter-ui.js +1 -2
  143. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  144. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  145. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  146. package/build-module/border-control/border-control-dropdown/component.js +7 -4
  147. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  148. package/build-module/button/deprecated.js +8 -5
  149. package/build-module/button/deprecated.js.map +1 -1
  150. package/build-module/button/index.js +51 -22
  151. package/build-module/button/index.js.map +1 -1
  152. package/build-module/button/types.js +2 -0
  153. package/build-module/button/types.js.map +1 -0
  154. package/build-module/color-list-picker/index.js.map +1 -1
  155. package/build-module/color-list-picker/types.js +2 -0
  156. package/build-module/color-list-picker/types.js.map +1 -0
  157. package/build-module/color-palette/index.js +7 -54
  158. package/build-module/color-palette/index.js.map +1 -1
  159. package/build-module/color-palette/index.native.js +24 -8
  160. package/build-module/color-palette/index.native.js.map +1 -1
  161. package/build-module/color-palette/utils.js +79 -0
  162. package/build-module/color-palette/utils.js.map +1 -0
  163. package/build-module/color-picker/component.js +1 -0
  164. package/build-module/color-picker/component.js.map +1 -1
  165. package/build-module/color-picker/styles.js +8 -9
  166. package/build-module/color-picker/styles.js.map +1 -1
  167. package/build-module/combobox-control/index.js +5 -1
  168. package/build-module/combobox-control/index.js.map +1 -1
  169. package/build-module/custom-gradient-picker/gradient-bar/utils.js +1 -1
  170. package/build-module/custom-gradient-picker/gradient-bar/utils.js.map +1 -1
  171. package/build-module/date-time/date/index.js +1 -1
  172. package/build-module/date-time/date/index.js.map +1 -1
  173. package/build-module/dropdown/index.js +19 -8
  174. package/build-module/dropdown/index.js.map +1 -1
  175. package/build-module/focal-point-picker/utils.js +1 -1
  176. package/build-module/focal-point-picker/utils.js.map +1 -1
  177. package/build-module/form-token-field/token.js +1 -1
  178. package/build-module/form-token-field/token.js.map +1 -1
  179. package/build-module/gradient-picker/index.js +9 -2
  180. package/build-module/gradient-picker/index.js.map +1 -1
  181. package/build-module/h-stack/component.js +0 -1
  182. package/build-module/h-stack/component.js.map +1 -1
  183. package/build-module/index.js +1 -6
  184. package/build-module/index.js.map +1 -1
  185. package/build-module/index.native.js +1 -6
  186. package/build-module/index.native.js.map +1 -1
  187. package/build-module/input-control/input-field.js +4 -2
  188. package/build-module/input-control/input-field.js.map +1 -1
  189. package/build-module/item-group/item/component.js +26 -2
  190. package/build-module/item-group/item/component.js.map +1 -1
  191. package/build-module/item-group/item-group/component.js +25 -2
  192. package/build-module/item-group/item-group/component.js.map +1 -1
  193. package/build-module/item-group/styles.js +14 -14
  194. package/build-module/item-group/styles.js.map +1 -1
  195. package/build-module/keyboard-shortcuts/index.js +48 -16
  196. package/build-module/keyboard-shortcuts/index.js.map +1 -1
  197. package/build-module/keyboard-shortcuts/types.js +2 -0
  198. package/build-module/keyboard-shortcuts/types.js.map +1 -0
  199. package/build-module/modal/index.js +1 -1
  200. package/build-module/modal/index.js.map +1 -1
  201. package/build-module/notice/index.js +14 -15
  202. package/build-module/notice/index.js.map +1 -1
  203. package/build-module/notice/list.js +23 -8
  204. package/build-module/notice/list.js.map +1 -1
  205. package/build-module/notice/types.js +2 -0
  206. package/build-module/notice/types.js.map +1 -0
  207. package/build-module/number-control/index.js +1 -1
  208. package/build-module/number-control/index.js.map +1 -1
  209. package/build-module/panel/row.js +5 -3
  210. package/build-module/panel/row.js.map +1 -1
  211. package/build-module/query-controls/author-select.js +7 -3
  212. package/build-module/query-controls/author-select.js.map +1 -1
  213. package/build-module/query-controls/category-select.js +8 -4
  214. package/build-module/query-controls/category-select.js.map +1 -1
  215. package/build-module/query-controls/index.js +65 -20
  216. package/build-module/query-controls/index.js.map +1 -1
  217. package/build-module/query-controls/terms.js +8 -4
  218. package/build-module/query-controls/terms.js.map +1 -1
  219. package/build-module/query-controls/types.js +2 -0
  220. package/build-module/query-controls/types.js.map +1 -0
  221. package/build-module/resizable-box/index.js +3 -2
  222. package/build-module/resizable-box/index.js.map +1 -1
  223. package/build-module/responsive-wrapper/index.js +20 -1
  224. package/build-module/responsive-wrapper/index.js.map +1 -1
  225. package/build-module/responsive-wrapper/types.js +2 -0
  226. package/build-module/responsive-wrapper/types.js.map +1 -0
  227. package/build-module/sandbox/index.js +37 -23
  228. package/build-module/sandbox/index.js.map +1 -1
  229. package/build-module/sandbox/types.js +2 -0
  230. package/build-module/sandbox/types.js.map +1 -0
  231. package/build-module/slot-fill/bubbles-virtually/fill.js +1 -0
  232. package/build-module/slot-fill/bubbles-virtually/fill.js.map +1 -1
  233. package/build-module/slot-fill/slot.js +1 -0
  234. package/build-module/slot-fill/slot.js.map +1 -1
  235. package/build-module/slot-fill/use-slot.js +2 -12
  236. package/build-module/slot-fill/use-slot.js.map +1 -1
  237. package/build-module/snackbar/index.js.map +1 -1
  238. package/build-module/snackbar/list.js.map +1 -1
  239. package/build-module/tab-panel/index.js +40 -7
  240. package/build-module/tab-panel/index.js.map +1 -1
  241. package/build-module/toolbar/index.js +6 -58
  242. package/build-module/toolbar/index.js.map +1 -1
  243. package/build-module/toolbar/toolbar/index.js +59 -0
  244. package/build-module/toolbar/toolbar/index.js.map +1 -0
  245. package/build-module/toolbar/{toolbar-container.js → toolbar/toolbar-container.js} +0 -0
  246. package/{build → build-module/toolbar}/toolbar/toolbar-container.js.map +1 -1
  247. package/build-module/toolbar/{toolbar-container.native.js → toolbar/toolbar-container.native.js} +0 -0
  248. package/build-module/toolbar/toolbar/toolbar-container.native.js.map +1 -0
  249. package/build-module/{toolbar-button → toolbar/toolbar-button}/index.js +1 -1
  250. package/build-module/toolbar/toolbar-button/index.js.map +1 -0
  251. package/build-module/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.js +0 -0
  252. package/build-module/toolbar/toolbar-button/toolbar-button-container.js.map +1 -0
  253. package/build-module/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.native.js +0 -0
  254. package/build-module/toolbar/toolbar-button/toolbar-button-container.native.js.map +1 -0
  255. package/build-module/{toolbar-context → toolbar/toolbar-context}/index.js +0 -0
  256. package/build-module/toolbar/toolbar-context/index.js.map +1 -0
  257. package/build-module/{toolbar-dropdown-menu → toolbar/toolbar-dropdown-menu}/index.js +1 -1
  258. package/build-module/toolbar/toolbar-dropdown-menu/index.js.map +1 -0
  259. package/build-module/{toolbar-group → toolbar/toolbar-group}/index.js +0 -0
  260. package/build-module/toolbar/toolbar-group/index.js.map +1 -0
  261. package/build-module/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.js +1 -1
  262. package/build-module/toolbar/toolbar-group/toolbar-group-collapsed.js.map +1 -0
  263. package/build-module/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.native.js +1 -1
  264. package/build-module/toolbar/toolbar-group/toolbar-group-collapsed.native.js.map +1 -0
  265. package/build-module/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.js +0 -0
  266. package/build-module/toolbar/toolbar-group/toolbar-group-container.js.map +1 -0
  267. package/build-module/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.native.js +0 -0
  268. package/build-module/toolbar/toolbar-group/toolbar-group-container.native.js.map +1 -0
  269. package/build-module/{toolbar-item → toolbar/toolbar-item}/index.js +0 -0
  270. package/build-module/toolbar/toolbar-item/index.js.map +1 -0
  271. package/build-module/{toolbar-item → toolbar/toolbar-item}/index.native.js +0 -0
  272. package/build-module/toolbar/toolbar-item/index.native.js.map +1 -0
  273. package/build-module/tree-grid/index.js +4 -4
  274. package/build-module/tree-grid/index.js.map +1 -1
  275. package/build-module/tree-select/index.js +2 -6
  276. package/build-module/tree-select/index.js.map +1 -1
  277. package/build-style/style-rtl.css +6 -1
  278. package/build-style/style.css +6 -1
  279. package/build-types/border-box-control/border-box-control/hook.d.ts +1 -1
  280. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +1 -1
  281. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +171 -160
  282. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -1
  283. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +1 -1
  284. package/build-types/border-control/border-control/hook.d.ts +1 -1
  285. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  286. package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -1
  287. package/build-types/button/deprecated.d.ts +143 -7
  288. package/build-types/button/deprecated.d.ts.map +1 -1
  289. package/build-types/button/index.d.ts +20 -3
  290. package/build-types/button/index.d.ts.map +1 -1
  291. package/build-types/button/stories/index.d.ts +20 -0
  292. package/build-types/button/stories/index.d.ts.map +1 -0
  293. package/build-types/button/test/index.d.ts +2 -0
  294. package/build-types/button/test/index.d.ts.map +1 -0
  295. package/build-types/button/types.d.ts +134 -0
  296. package/build-types/button/types.d.ts.map +1 -0
  297. package/build-types/color-list-picker/index.d.ts +5 -0
  298. package/build-types/color-list-picker/index.d.ts.map +1 -0
  299. package/build-types/color-list-picker/types.d.ts +42 -0
  300. package/build-types/color-list-picker/types.d.ts.map +1 -0
  301. package/build-types/color-palette/index.d.ts +2 -4
  302. package/build-types/color-palette/index.d.ts.map +1 -1
  303. package/build-types/color-palette/stories/index.d.ts +2 -2
  304. package/build-types/color-palette/styles.d.ts +1 -1
  305. package/build-types/color-palette/types.d.ts +1 -1
  306. package/build-types/color-palette/types.d.ts.map +1 -1
  307. package/build-types/color-palette/utils.d.ts +14 -0
  308. package/build-types/color-palette/utils.d.ts.map +1 -0
  309. package/build-types/color-picker/component.d.ts.map +1 -1
  310. package/build-types/color-picker/styles.d.ts +2 -2
  311. package/build-types/color-picker/styles.d.ts.map +1 -1
  312. package/build-types/dashicon/types.d.ts +0 -4
  313. package/build-types/dashicon/types.d.ts.map +1 -1
  314. package/build-types/date-time/date/index.d.ts.map +1 -1
  315. package/build-types/date-time/date/styles.d.ts +3 -3
  316. package/build-types/dropdown/index.d.ts +4 -4
  317. package/build-types/dropdown/index.d.ts.map +1 -1
  318. package/build-types/dropdown/stories/index.d.ts.map +1 -1
  319. package/build-types/dropdown/types.d.ts +9 -10
  320. package/build-types/dropdown/types.d.ts.map +1 -1
  321. package/build-types/focal-point-picker/utils.d.ts.map +1 -1
  322. package/build-types/font-size-picker/styles.d.ts +2 -2
  323. package/build-types/h-stack/component.d.ts +0 -1
  324. package/build-types/h-stack/component.d.ts.map +1 -1
  325. package/build-types/input-control/input-field.d.ts.map +1 -1
  326. package/build-types/item-group/item/component.d.ts +24 -2
  327. package/build-types/item-group/item/component.d.ts.map +1 -1
  328. package/build-types/item-group/item-group/component.d.ts +23 -2
  329. package/build-types/item-group/item-group/component.d.ts.map +1 -1
  330. package/build-types/item-group/stories/index.d.ts +15 -0
  331. package/build-types/item-group/stories/index.d.ts.map +1 -0
  332. package/build-types/item-group/styles.d.ts.map +1 -1
  333. package/build-types/keyboard-shortcuts/index.d.ts +38 -0
  334. package/build-types/keyboard-shortcuts/index.d.ts.map +1 -0
  335. package/build-types/keyboard-shortcuts/stories/index.d.ts +12 -0
  336. package/build-types/keyboard-shortcuts/stories/index.d.ts.map +1 -0
  337. package/build-types/keyboard-shortcuts/test/index.d.ts +2 -0
  338. package/build-types/keyboard-shortcuts/test/index.d.ts.map +1 -0
  339. package/build-types/keyboard-shortcuts/types.d.ts +48 -0
  340. package/build-types/keyboard-shortcuts/types.d.ts.map +1 -0
  341. package/build-types/modal/index.d.ts.map +1 -1
  342. package/build-types/navigator/navigator-back-button/component.d.ts +1 -1
  343. package/build-types/navigator/navigator-back-button/hook.d.ts +2 -2
  344. package/build-types/navigator/navigator-button/component.d.ts +1 -1
  345. package/build-types/navigator/navigator-button/hook.d.ts +2 -2
  346. package/build-types/notice/index.d.ts +16 -0
  347. package/build-types/notice/index.d.ts.map +1 -0
  348. package/build-types/notice/list.d.ts +32 -0
  349. package/build-types/notice/list.d.ts.map +1 -0
  350. package/build-types/notice/stories/index.d.ts +17 -0
  351. package/build-types/notice/stories/index.d.ts.map +1 -0
  352. package/build-types/notice/test/index.d.ts +2 -0
  353. package/build-types/notice/test/index.d.ts.map +1 -0
  354. package/build-types/notice/test/list.d.ts +2 -0
  355. package/build-types/notice/test/list.d.ts.map +1 -0
  356. package/build-types/notice/types.d.ts +128 -0
  357. package/build-types/notice/types.d.ts.map +1 -0
  358. package/build-types/number-control/styles/number-control-styles.d.ts +2 -2
  359. package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
  360. package/build-types/placeholder/stories/index.d.ts.map +1 -1
  361. package/build-types/query-controls/author-select.d.ts +4 -0
  362. package/build-types/query-controls/author-select.d.ts.map +1 -0
  363. package/build-types/query-controls/category-select.d.ts +4 -0
  364. package/build-types/query-controls/category-select.d.ts.map +1 -0
  365. package/build-types/query-controls/index.d.ts +30 -0
  366. package/build-types/query-controls/index.d.ts.map +1 -0
  367. package/build-types/query-controls/stories/index.d.ts +13 -0
  368. package/build-types/query-controls/stories/index.d.ts.map +1 -0
  369. package/build-types/query-controls/terms.d.ts +13 -0
  370. package/build-types/query-controls/terms.d.ts.map +1 -0
  371. package/build-types/query-controls/test/terms.d.ts +2 -0
  372. package/build-types/query-controls/test/terms.d.ts.map +1 -0
  373. package/build-types/query-controls/types.d.ts +131 -0
  374. package/build-types/query-controls/types.d.ts.map +1 -0
  375. package/build-types/range-control/index.d.ts +1 -1
  376. package/build-types/resizable-box/index.d.ts +6 -7
  377. package/build-types/resizable-box/index.d.ts.map +1 -1
  378. package/build-types/resizable-box/stories/index.d.ts +61 -0
  379. package/build-types/resizable-box/stories/index.d.ts.map +1 -0
  380. package/build-types/responsive-wrapper/index.d.ts +24 -0
  381. package/build-types/responsive-wrapper/index.d.ts.map +1 -0
  382. package/build-types/responsive-wrapper/stories/index.d.ts +12 -0
  383. package/build-types/responsive-wrapper/stories/index.d.ts.map +1 -0
  384. package/build-types/responsive-wrapper/types.d.ts +22 -0
  385. package/build-types/responsive-wrapper/types.d.ts.map +1 -0
  386. package/build-types/sandbox/index.d.ts +19 -0
  387. package/build-types/sandbox/index.d.ts.map +1 -0
  388. package/build-types/sandbox/stories/index.d.ts +12 -0
  389. package/build-types/sandbox/stories/index.d.ts.map +1 -0
  390. package/build-types/sandbox/test/index.d.ts +2 -0
  391. package/build-types/sandbox/test/index.d.ts.map +1 -0
  392. package/build-types/sandbox/types.d.ts +36 -0
  393. package/build-types/sandbox/types.d.ts.map +1 -0
  394. package/build-types/slot-fill/bubbles-virtually/fill.d.ts.map +1 -1
  395. package/build-types/slot-fill/use-slot.d.ts.map +1 -1
  396. package/build-types/snackbar/index.d.ts +9 -2
  397. package/build-types/snackbar/index.d.ts.map +1 -1
  398. package/build-types/snackbar/list.d.ts.map +1 -1
  399. package/build-types/snackbar/types.d.ts +15 -88
  400. package/build-types/snackbar/types.d.ts.map +1 -1
  401. package/build-types/tab-panel/index.d.ts.map +1 -1
  402. package/build-types/tab-panel/stories/index.d.ts +1 -0
  403. package/build-types/tab-panel/stories/index.d.ts.map +1 -1
  404. package/build-types/tab-panel/types.d.ts +11 -5
  405. package/build-types/tab-panel/types.d.ts.map +1 -1
  406. package/build-types/toggle-group-control/stories/index.d.ts.map +1 -1
  407. package/build-types/tree-select/index.d.ts.map +1 -1
  408. package/build-types/ui/form-group/form-group.d.ts +2 -2
  409. package/package.json +18 -17
  410. package/src/alignment-matrix-control/utils.tsx +2 -2
  411. package/src/autocomplete/autocompleter-ui.js +1 -2
  412. package/src/autocomplete/test/index.js +1 -5
  413. package/src/border-box-control/border-box-control-linked-button/component.tsx +1 -1
  414. package/src/border-box-control/border-box-control-linked-button/hook.ts +1 -1
  415. package/src/border-control/border-control-dropdown/component.tsx +9 -8
  416. package/src/box-control/test/index.js +11 -35
  417. package/src/button/README.md +49 -55
  418. package/src/button/{deprecated.js → deprecated.tsx} +19 -4
  419. package/src/button/{index.js → index.tsx} +95 -34
  420. package/src/button/stories/index.tsx +106 -0
  421. package/src/button/style.scss +3 -2
  422. package/src/button/test/{index.js → index.tsx} +30 -7
  423. package/src/button/types.ts +138 -0
  424. package/src/checkbox-control/test/index.tsx +1 -5
  425. package/src/color-list-picker/{index.js → index.tsx} +3 -2
  426. package/src/color-list-picker/types.ts +46 -0
  427. package/src/color-palette/README.md +1 -1
  428. package/src/color-palette/index.native.js +11 -4
  429. package/src/color-palette/index.tsx +11 -67
  430. package/src/color-palette/test/index.tsx +4 -14
  431. package/src/color-palette/test/utils.ts +1 -1
  432. package/src/color-palette/types.ts +1 -1
  433. package/src/color-palette/utils.ts +98 -0
  434. package/src/color-picker/component.tsx +1 -0
  435. package/src/color-picker/stories/index.js +20 -60
  436. package/src/color-picker/styles.ts +0 -5
  437. package/src/color-picker/test/index.js +6 -15
  438. package/src/combobox-control/index.js +9 -1
  439. package/src/combobox-control/test/index.js +1 -6
  440. package/src/confirm-dialog/test/index.js +9 -29
  441. package/src/custom-gradient-picker/gradient-bar/utils.js +1 -1
  442. package/src/dashicon/types.ts +0 -6
  443. package/src/date-time/date/index.tsx +2 -1
  444. package/src/date-time/date/test/index.tsx +2 -8
  445. package/src/date-time/time/test/index.tsx +9 -29
  446. package/src/dimension-control/test/index.test.js +2 -8
  447. package/src/disabled/test/index.tsx +1 -5
  448. package/src/draggable/test/index.native.js +4 -4
  449. package/src/dropdown/README.md +1 -8
  450. package/src/dropdown/index.tsx +17 -6
  451. package/src/dropdown/stories/index.tsx +3 -3
  452. package/src/dropdown/test/index.tsx +2 -8
  453. package/src/dropdown/types.ts +9 -10
  454. package/src/dropdown-menu/README.md +1 -1
  455. package/src/dropdown-menu/stories/index.js +96 -27
  456. package/src/dropdown-menu/test/index.js +2 -8
  457. package/src/external-link/test/index.tsx +1 -6
  458. package/src/focal-point-picker/stories/index.tsx +1 -1
  459. package/src/focal-point-picker/test/index.js +3 -11
  460. package/src/focal-point-picker/utils.ts +4 -1
  461. package/src/font-size-picker/test/index.tsx +14 -44
  462. package/src/form-file-upload/test/index.tsx +2 -17
  463. package/src/form-toggle/test/index.tsx +1 -5
  464. package/src/form-token-field/test/index.tsx +80 -163
  465. package/src/form-token-field/token.tsx +1 -1
  466. package/src/gradient-picker/index.js +15 -4
  467. package/src/guide/stories/index.js +14 -41
  468. package/src/guide/test/index.js +5 -17
  469. package/src/h-stack/component.tsx +0 -1
  470. package/src/higher-order/with-filters/test/index.js +24 -24
  471. package/src/higher-order/with-focus-outside/test/index.js +11 -25
  472. package/src/higher-order/with-focus-return/test/index.js +1 -5
  473. package/src/index.js +8 -6
  474. package/src/index.native.js +8 -6
  475. package/src/input-control/input-field.tsx +3 -1
  476. package/src/input-control/test/index.js +1 -6
  477. package/src/isolated-event-container/test/index.js +2 -8
  478. package/src/item-group/item/component.tsx +26 -2
  479. package/src/item-group/item-group/component.tsx +25 -2
  480. package/src/item-group/stories/index.tsx +103 -0
  481. package/src/item-group/styles.ts +1 -0
  482. package/src/item-group/test/__snapshots__/index.js.snap +11 -10
  483. package/src/keyboard-shortcuts/README.md +1 -1
  484. package/src/keyboard-shortcuts/index.tsx +93 -0
  485. package/src/keyboard-shortcuts/stories/index.tsx +60 -0
  486. package/src/keyboard-shortcuts/test/{index.js → index.tsx} +16 -6
  487. package/src/keyboard-shortcuts/types.ts +51 -0
  488. package/src/modal/index.tsx +1 -2
  489. package/src/navigable-container/test/navigable-menu.js +5 -17
  490. package/src/navigable-container/test/tababble-container.js +3 -11
  491. package/src/navigation/test/index.js +3 -11
  492. package/src/navigator/test/index.tsx +6 -20
  493. package/src/notice/README.md +89 -42
  494. package/src/notice/{index.js → index.tsx} +28 -20
  495. package/src/notice/list.tsx +72 -0
  496. package/src/notice/stories/index.tsx +119 -0
  497. package/src/notice/test/__snapshots__/{index.js.snap → index.tsx.snap} +0 -0
  498. package/src/notice/test/{index.js → index.tsx} +7 -4
  499. package/src/notice/test/{list.js → list.tsx} +0 -0
  500. package/src/notice/types.ts +136 -0
  501. package/src/number-control/index.tsx +1 -1
  502. package/src/number-control/test/index.tsx +28 -86
  503. package/src/panel/row.js +3 -3
  504. package/src/panel/stories/index.js +62 -80
  505. package/src/panel/test/body.js +2 -8
  506. package/src/placeholder/stories/index.tsx +1 -0
  507. package/src/placeholder/style.scss +1 -1
  508. package/src/query-controls/README.md +56 -56
  509. package/src/query-controls/author-select.tsx +37 -0
  510. package/src/query-controls/category-select.tsx +46 -0
  511. package/src/query-controls/index.tsx +192 -0
  512. package/src/query-controls/stories/index.tsx +205 -0
  513. package/src/query-controls/terms.ts +57 -0
  514. package/src/query-controls/test/{terms.js → terms.ts} +36 -20
  515. package/src/query-controls/types.ts +150 -0
  516. package/src/resizable-box/README.md +2 -2
  517. package/src/resizable-box/index.tsx +7 -6
  518. package/src/resizable-box/stories/index.tsx +92 -0
  519. package/src/responsive-wrapper/README.md +29 -0
  520. package/src/responsive-wrapper/{index.js → index.tsx} +23 -2
  521. package/src/responsive-wrapper/stories/index.tsx +38 -0
  522. package/src/responsive-wrapper/types.ts +20 -0
  523. package/src/sandbox/README.md +45 -2
  524. package/src/sandbox/{index.js → index.tsx} +47 -24
  525. package/src/sandbox/stories/index.tsx +32 -0
  526. package/src/sandbox/test/{index.js → index.tsx} +9 -4
  527. package/src/sandbox/types.ts +34 -0
  528. package/src/select-control/test/select-control.tsx +1 -6
  529. package/src/slot-fill/bubbles-virtually/fill.js +1 -0
  530. package/src/slot-fill/slot.js +1 -1
  531. package/src/slot-fill/stories/index.js +12 -17
  532. package/src/slot-fill/use-slot.js +6 -16
  533. package/src/snackbar/index.tsx +6 -5
  534. package/src/snackbar/list.tsx +4 -2
  535. package/src/snackbar/types.ts +18 -92
  536. package/src/style.scss +3 -3
  537. package/src/tab-panel/README.md +1 -0
  538. package/src/tab-panel/index.tsx +42 -6
  539. package/src/tab-panel/stories/index.tsx +20 -0
  540. package/src/tab-panel/style.scss +8 -0
  541. package/src/tab-panel/test/index.tsx +124 -7
  542. package/src/tab-panel/types.ts +11 -5
  543. package/src/theme/test/index.tsx +4 -4
  544. package/src/toggle-group-control/stories/index.tsx +1 -0
  545. package/src/toggle-group-control/test/index.tsx +7 -23
  546. package/src/toolbar/index.js +6 -52
  547. package/src/toolbar/stories/index.js +71 -75
  548. package/src/toolbar/test/index.js +1 -2
  549. package/src/{toolbar-group/test/index.js → toolbar/test/toolbar-group.js} +1 -1
  550. package/src/toolbar/{README.md → toolbar/README.md} +0 -0
  551. package/src/toolbar/toolbar/index.js +52 -0
  552. package/src/toolbar/{style.native.scss → toolbar/style.native.scss} +0 -0
  553. package/src/toolbar/{style.scss → toolbar/style.scss} +0 -0
  554. package/src/toolbar/{toolbar-container.js → toolbar/toolbar-container.js} +0 -0
  555. package/src/toolbar/{toolbar-container.native.js → toolbar/toolbar-container.native.js} +0 -0
  556. package/src/{toolbar-button → toolbar/toolbar-button}/README.md +0 -0
  557. package/src/{toolbar-button → toolbar/toolbar-button}/index.js +1 -1
  558. package/src/{toolbar-button → toolbar/toolbar-button}/style.scss +0 -0
  559. package/src/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.js +0 -0
  560. package/src/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.native.js +0 -0
  561. package/src/{toolbar-context → toolbar/toolbar-context}/index.js +0 -0
  562. package/src/{toolbar-dropdown-menu → toolbar/toolbar-dropdown-menu}/README.md +0 -0
  563. package/src/{toolbar-dropdown-menu → toolbar/toolbar-dropdown-menu}/index.js +1 -1
  564. package/src/{toolbar-group → toolbar/toolbar-group}/README.md +0 -0
  565. package/src/{toolbar-group → toolbar/toolbar-group}/index.js +0 -0
  566. package/src/{toolbar-group → toolbar/toolbar-group}/style.native.scss +0 -0
  567. package/src/{toolbar-group → toolbar/toolbar-group}/style.scss +0 -0
  568. package/src/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.js +1 -1
  569. package/src/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.native.js +1 -1
  570. package/src/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.js +0 -0
  571. package/src/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.native.js +0 -0
  572. package/src/{toolbar-item → toolbar/toolbar-item}/README.md +0 -0
  573. package/src/{toolbar-item → toolbar/toolbar-item}/index.js +0 -0
  574. package/src/{toolbar-item → toolbar/toolbar-item}/index.native.js +0 -0
  575. package/src/tools-panel/stories/index.js +3 -0
  576. package/src/tools-panel/test/index.js +1 -1
  577. package/src/tree-grid/index.js +3 -5
  578. package/src/tree-select/index.tsx +3 -6
  579. package/src/ui/context/test/context-connect.tsx +2 -0
  580. package/src/ui/context/test/wordpress-component.tsx +2 -0
  581. package/src/unit-control/test/index.tsx +21 -74
  582. package/src/utils/hooks/test/use-latest-ref.js +15 -18
  583. package/tsconfig.json +1 -11
  584. package/tsconfig.tsbuildinfo +1 -1
  585. package/build/toolbar/toolbar-container.native.js.map +0 -1
  586. package/build/toolbar-button/index.js.map +0 -1
  587. package/build/toolbar-button/toolbar-button-container.js.map +0 -1
  588. package/build/toolbar-button/toolbar-button-container.native.js.map +0 -1
  589. package/build/toolbar-context/index.js.map +0 -1
  590. package/build/toolbar-dropdown-menu/index.js.map +0 -1
  591. package/build/toolbar-group/index.js.map +0 -1
  592. package/build/toolbar-group/toolbar-group-collapsed.js.map +0 -1
  593. package/build/toolbar-group/toolbar-group-collapsed.native.js.map +0 -1
  594. package/build/toolbar-group/toolbar-group-container.js.map +0 -1
  595. package/build/toolbar-group/toolbar-group-container.native.js.map +0 -1
  596. package/build/toolbar-item/index.js.map +0 -1
  597. package/build/toolbar-item/index.native.js.map +0 -1
  598. package/build-module/toolbar/toolbar-container.js.map +0 -1
  599. package/build-module/toolbar/toolbar-container.native.js.map +0 -1
  600. package/build-module/toolbar-button/index.js.map +0 -1
  601. package/build-module/toolbar-button/toolbar-button-container.js.map +0 -1
  602. package/build-module/toolbar-button/toolbar-button-container.native.js.map +0 -1
  603. package/build-module/toolbar-context/index.js.map +0 -1
  604. package/build-module/toolbar-dropdown-menu/index.js.map +0 -1
  605. package/build-module/toolbar-group/index.js.map +0 -1
  606. package/build-module/toolbar-group/toolbar-group-collapsed.js.map +0 -1
  607. package/build-module/toolbar-group/toolbar-group-collapsed.native.js.map +0 -1
  608. package/build-module/toolbar-group/toolbar-group-container.js.map +0 -1
  609. package/build-module/toolbar-group/toolbar-group-container.native.js.map +0 -1
  610. package/build-module/toolbar-item/index.js.map +0 -1
  611. package/build-module/toolbar-item/index.native.js.map +0 -1
  612. package/src/button/stories/index.js +0 -179
  613. package/src/item-group/stories/index.js +0 -270
  614. package/src/keyboard-shortcuts/index.js +0 -56
  615. package/src/notice/list.js +0 -48
  616. package/src/notice/stories/index.js +0 -74
  617. package/src/query-controls/author-select.js +0 -23
  618. package/src/query-controls/category-select.js +0 -31
  619. package/src/query-controls/index.js +0 -121
  620. package/src/query-controls/terms.js +0 -40
  621. package/src/resizable-box/stories/index.js +0 -97
  622. package/src/toolbar-button/stories/index.js +0 -33
  623. package/src/toolbar-group/stories/index.js +0 -33
@@ -19,17 +19,16 @@ import type { WordPressComponentProps } from '../ui/context';
19
19
 
20
20
  const TabButton = ( {
21
21
  tabId,
22
- onClick,
23
22
  children,
24
23
  selected,
25
24
  ...rest
26
25
  }: TabButtonProps ) => (
27
26
  <Button
28
27
  role="tab"
29
- tabIndex={ selected ? null : -1 }
28
+ tabIndex={ selected ? undefined : -1 }
30
29
  aria-selected={ selected }
31
30
  id={ tabId }
32
- onClick={ onClick }
31
+ __experimentalIsFocusable
33
32
  { ...rest }
34
33
  >
35
34
  { children }
@@ -104,11 +103,47 @@ export function TabPanel( {
104
103
  const selectedTab = tabs.find( ( { name } ) => name === selected );
105
104
  const selectedId = `${ instanceId }-${ selectedTab?.name ?? 'none' }`;
106
105
 
106
+ // Handle selecting the initial tab.
107
107
  useEffect( () => {
108
- if ( ! selectedTab?.name && tabs.length > 0 ) {
109
- handleTabSelection( initialTabName || tabs[ 0 ].name );
108
+ // If there's a selected tab, don't override it.
109
+ if ( selectedTab ) {
110
+ return;
110
111
  }
111
- }, [ tabs, selectedTab?.name, initialTabName, handleTabSelection ] );
112
+
113
+ const initialTab = tabs.find( ( tab ) => tab.name === initialTabName );
114
+
115
+ // Wait for the denoted initial tab to be declared before making a
116
+ // selection. This ensures that if a tab is declared lazily it can
117
+ // still receive initial selection.
118
+ if ( initialTabName && ! initialTab ) {
119
+ return;
120
+ }
121
+
122
+ if ( initialTab && ! initialTab.disabled ) {
123
+ // Select the initial tab if it's not disabled.
124
+ handleTabSelection( initialTab.name );
125
+ } else {
126
+ // Fallback to the first enabled tab when the initial is disabled.
127
+ const firstEnabledTab = tabs.find( ( tab ) => ! tab.disabled );
128
+ if ( firstEnabledTab ) handleTabSelection( firstEnabledTab.name );
129
+ }
130
+ }, [ tabs, selectedTab, initialTabName, handleTabSelection ] );
131
+
132
+ // Handle the currently selected tab becoming disabled.
133
+ useEffect( () => {
134
+ // This effect only runs when the selected tab is defined and becomes disabled.
135
+ if ( ! selectedTab?.disabled ) {
136
+ return;
137
+ }
138
+
139
+ const firstEnabledTab = tabs.find( ( tab ) => ! tab.disabled );
140
+
141
+ // If the currently selected tab becomes disabled, select the first enabled tab.
142
+ // (if there is one).
143
+ if ( firstEnabledTab ) {
144
+ handleTabSelection( firstEnabledTab.name );
145
+ }
146
+ }, [ tabs, selectedTab?.disabled, handleTabSelection ] );
112
147
 
113
148
  return (
114
149
  <div className={ className }>
@@ -134,6 +169,7 @@ export function TabPanel( {
134
169
  selected={ tab.name === selected }
135
170
  key={ tab.name }
136
171
  onClick={ () => handleTabSelection( tab.name ) }
172
+ disabled={ tab.disabled }
137
173
  label={ tab.icon && tab.title }
138
174
  icon={ tab.icon }
139
175
  showTooltip={ !! tab.icon }
@@ -35,3 +35,23 @@ Default.args = {
35
35
  },
36
36
  ],
37
37
  };
38
+
39
+ export const DisabledTab = Template.bind( {} );
40
+ DisabledTab.args = {
41
+ children: ( tab ) => <p>Selected tab: { tab.title }</p>,
42
+ tabs: [
43
+ {
44
+ name: 'tab1',
45
+ title: 'Tab 1',
46
+ disabled: true,
47
+ },
48
+ {
49
+ name: 'tab2',
50
+ title: 'Tab 2',
51
+ },
52
+ {
53
+ name: 'tab3',
54
+ title: 'Tab 3',
55
+ },
56
+ ],
57
+ };
@@ -24,6 +24,7 @@
24
24
  &:focus:not(:disabled) {
25
25
  position: relative;
26
26
  box-shadow: none;
27
+ outline: none;
27
28
  }
28
29
 
29
30
  // Tab indicator
@@ -48,6 +49,10 @@
48
49
  // Active.
49
50
  &.is-active::after {
50
51
  height: calc(1 * var(--wp-admin-border-width-focus));
52
+
53
+ // Windows high contrast mode.
54
+ outline: 2px solid transparent;
55
+ outline-offset: -1px;
51
56
  }
52
57
 
53
58
  // Focus.
@@ -71,5 +76,8 @@
71
76
 
72
77
  &:focus-visible::before {
73
78
  box-shadow: 0 0 0 var(--wp-admin-border-width-focus) $components-color-accent;
79
+
80
+ // Windows high contrast mode.
81
+ outline: 2px solid transparent;
74
82
  }
75
83
  }
@@ -9,12 +9,7 @@ import userEvent from '@testing-library/user-event';
9
9
  */
10
10
  import TabPanel from '..';
11
11
 
12
- jest.useFakeTimers();
13
-
14
- const setupUser = () =>
15
- userEvent.setup( {
16
- advanceTimers: jest.advanceTimersByTime,
17
- } );
12
+ const setupUser = () => userEvent.setup();
18
13
 
19
14
  const TABS = [
20
15
  {
@@ -147,7 +142,7 @@ describe( 'TabPanel', () => {
147
142
  );
148
143
  } );
149
144
 
150
- it( 'should select `initialTabname` if defined', () => {
145
+ it( 'should select `initialTabName` if defined', () => {
151
146
  const mockOnSelect = jest.fn();
152
147
 
153
148
  render(
@@ -162,6 +157,128 @@ describe( 'TabPanel', () => {
162
157
  expect( mockOnSelect ).toHaveBeenLastCalledWith( 'beta' );
163
158
  } );
164
159
 
160
+ it( 'waits for the tab with the `initialTabName` to become present in the `tabs` array before selecting it', () => {
161
+ const mockOnSelect = jest.fn();
162
+
163
+ const { rerender } = render(
164
+ <TabPanel
165
+ tabs={ TABS }
166
+ initialTabName="delta"
167
+ children={ () => undefined }
168
+ onSelect={ mockOnSelect }
169
+ />
170
+ );
171
+
172
+ // There should be no selected tab.
173
+ expect(
174
+ screen.queryByRole( 'tab', { selected: true } )
175
+ ).not.toBeInTheDocument();
176
+
177
+ rerender(
178
+ <TabPanel
179
+ tabs={ [
180
+ { name: 'delta', title: 'Delta', className: 'delta-class' },
181
+ ...TABS,
182
+ ] }
183
+ initialTabName="delta"
184
+ children={ () => undefined }
185
+ onSelect={ mockOnSelect }
186
+ />
187
+ );
188
+
189
+ expect( getSelectedTab() ).toHaveTextContent( 'Delta' );
190
+ expect( mockOnSelect ).toHaveBeenLastCalledWith( 'delta' );
191
+ } );
192
+
193
+ it( 'should disable the tab when `disabled` is true', async () => {
194
+ const user = setupUser();
195
+ const mockOnSelect = jest.fn();
196
+
197
+ render(
198
+ <TabPanel
199
+ tabs={ [
200
+ ...TABS,
201
+ {
202
+ name: 'delta',
203
+ title: 'Delta',
204
+ className: 'delta-class',
205
+ disabled: true,
206
+ },
207
+ ] }
208
+ children={ () => undefined }
209
+ onSelect={ mockOnSelect }
210
+ />
211
+ );
212
+
213
+ expect( screen.getByRole( 'tab', { name: 'Delta' } ) ).toHaveAttribute(
214
+ 'aria-disabled',
215
+ 'true'
216
+ );
217
+
218
+ // onSelect gets called on the initial render.
219
+ expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
220
+
221
+ // onSelect should not be called since the disabled tab is highlighted, but not selected.
222
+ await user.keyboard( '[ArrowLeft]' );
223
+ expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
224
+ } );
225
+
226
+ it( 'should select the first enabled tab when the inital tab is disabled', () => {
227
+ const mockOnSelect = jest.fn();
228
+
229
+ render(
230
+ <TabPanel
231
+ tabs={ [
232
+ {
233
+ name: 'alpha',
234
+ title: 'Alpha',
235
+ className: 'alpha-class',
236
+ disabled: true,
237
+ },
238
+ {
239
+ name: 'beta',
240
+ title: 'Beta',
241
+ className: 'beta-class',
242
+ },
243
+ ] }
244
+ initialTabName="alpha"
245
+ children={ () => undefined }
246
+ onSelect={ mockOnSelect }
247
+ />
248
+ );
249
+
250
+ expect( getSelectedTab() ).toHaveTextContent( 'Beta' );
251
+ } );
252
+
253
+ it( 'should select the first enabled tab when the currently selected becomes disabled', () => {
254
+ const mockOnSelect = jest.fn();
255
+
256
+ const { rerender } = render(
257
+ <TabPanel
258
+ tabs={ TABS }
259
+ children={ () => undefined }
260
+ onSelect={ mockOnSelect }
261
+ />
262
+ );
263
+
264
+ expect( getSelectedTab() ).toHaveTextContent( 'Alpha' );
265
+
266
+ rerender(
267
+ <TabPanel
268
+ tabs={ TABS.map( ( tab ) => {
269
+ if ( tab.name === 'alpha' ) {
270
+ return { ...tab, disabled: true };
271
+ }
272
+ return tab;
273
+ } ) }
274
+ children={ () => undefined }
275
+ onSelect={ mockOnSelect }
276
+ />
277
+ );
278
+
279
+ expect( getSelectedTab() ).toHaveTextContent( 'Beta' );
280
+ } );
281
+
165
282
  describe( 'fallbacks when new tab list invalidates current selection', () => {
166
283
  it( 'should select `initialTabName` if defined', async () => {
167
284
  const user = setupUser();
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import type { ReactNode } from 'react';
4
+ import type { MouseEvent, ReactNode } from 'react';
5
5
 
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
9
  import type { IconType } from '../icon';
10
10
 
11
- type Tab = {
11
+ type Tab< IconProps = unknown > = {
12
12
  /**
13
13
  * The key of the tab.
14
14
  */
@@ -21,18 +21,24 @@ type Tab = {
21
21
  * The class name to apply to the tab button.
22
22
  */
23
23
  className?: string;
24
+ /**
25
+ * The icon used for the tab button.
26
+ */
27
+ icon?: IconType< IconProps >;
28
+ /**
29
+ * Determines if the tab button should be disabled.
30
+ */
31
+ disabled?: boolean;
24
32
  } & Record< any, any >;
25
33
 
26
34
  export type TabButtonProps< IconProps = unknown > = {
27
35
  children: ReactNode;
28
- className?: string;
29
- icon?: IconType< IconProps >;
30
36
  label?: string;
31
37
  onClick: ( event: MouseEvent ) => void;
32
38
  selected: boolean;
33
39
  showTooltip?: boolean;
34
40
  tabId: string;
35
- };
41
+ } & Pick< Tab< IconProps >, 'className' | 'icon' | 'disabled' >;
36
42
 
37
43
  export type TabPanelProps = {
38
44
  /**
@@ -26,7 +26,7 @@ const MyThemableComponent = ( props: MyThemableComponentProps ) => {
26
26
 
27
27
  describe( 'Theme', () => {
28
28
  describe( 'accent color', () => {
29
- it( 'it does not define the accent color (and its variations) as a CSS variable when the `accent` prop is undefined', () => {
29
+ it( 'does not define the accent color (and its variations) as a CSS variable when the `accent` prop is undefined', () => {
30
30
  render(
31
31
  <Theme data-testid="theme">
32
32
  <MyThemableComponent>Inner</MyThemableComponent>
@@ -49,7 +49,7 @@ describe( 'Theme', () => {
49
49
  } );
50
50
  } );
51
51
 
52
- it( 'it defines the accent color (and its variations) as a CSS variable', () => {
52
+ it( 'defines the accent color (and its variations) as a CSS variable', () => {
53
53
  render(
54
54
  <Theme accent="#123abc" data-testid="theme">
55
55
  <MyThemableComponent>Inner</MyThemableComponent>
@@ -66,7 +66,7 @@ describe( 'Theme', () => {
66
66
  } );
67
67
 
68
68
  describe( 'background color', () => {
69
- it( 'it does not define the background color (and its dependent colors) as a CSS variable when the `background` prop is undefined', () => {
69
+ it( 'does not define the background color (and its dependent colors) as a CSS variable when the `background` prop is undefined', () => {
70
70
  render(
71
71
  <Theme data-testid="theme">
72
72
  <MyThemableComponent>Inner</MyThemableComponent>
@@ -91,7 +91,7 @@ describe( 'Theme', () => {
91
91
  } );
92
92
  } );
93
93
 
94
- it( 'it defines the background color (and its dependent colors) as a CSS variable', () => {
94
+ it( 'defines the background color (and its dependent colors) as a CSS variable', () => {
95
95
  render(
96
96
  <Theme background="#ffffff" data-testid="theme">
97
97
  <MyThemableComponent>Inner</MyThemableComponent>
@@ -48,6 +48,7 @@ const Template: ComponentStory< typeof ToggleGroupControl > = ( {
48
48
 
49
49
  return (
50
50
  <ToggleGroupControl
51
+ __nextHasNoMarginBottom
51
52
  { ...props }
52
53
  onChange={ ( ...changeArgs ) => {
53
54
  setValue( ...changeArgs );
@@ -18,8 +18,6 @@ import {
18
18
  ToggleGroupControlOptionIcon,
19
19
  } from '../index';
20
20
 
21
- jest.useFakeTimers();
22
-
23
21
  function getWrappingPopoverElement( element: HTMLElement ) {
24
22
  return element.closest( '.components-popover' );
25
23
  }
@@ -81,9 +79,7 @@ describe( 'ToggleGroupControl', () => {
81
79
  } );
82
80
  } );
83
81
  it( 'should call onChange with proper value', async () => {
84
- const user = userEvent.setup( {
85
- advanceTimers: jest.advanceTimersByTime,
86
- } );
82
+ const user = userEvent.setup();
87
83
  const mockOnChange = jest.fn();
88
84
 
89
85
  render(
@@ -102,9 +98,7 @@ describe( 'ToggleGroupControl', () => {
102
98
  } );
103
99
 
104
100
  it( 'should render tooltip where `showTooltip` === `true`', async () => {
105
- const user = userEvent.setup( {
106
- advanceTimers: jest.advanceTimersByTime,
107
- } );
101
+ const user = userEvent.setup();
108
102
  render(
109
103
  <ToggleGroupControl label="Test Toggle Group Control">
110
104
  { optionsWithTooltip }
@@ -131,9 +125,7 @@ describe( 'ToggleGroupControl', () => {
131
125
  } );
132
126
 
133
127
  it( 'should not render tooltip', async () => {
134
- const user = userEvent.setup( {
135
- advanceTimers: jest.advanceTimersByTime,
136
- } );
128
+ const user = userEvent.setup();
137
129
  render(
138
130
  <ToggleGroupControl label="Test Toggle Group Control">
139
131
  { optionsWithTooltip }
@@ -157,9 +149,7 @@ describe( 'ToggleGroupControl', () => {
157
149
  describe( 'isDeselectable = false', () => {
158
150
  it( 'should not be deselectable', async () => {
159
151
  const mockOnChange = jest.fn();
160
- const user = userEvent.setup( {
161
- advanceTimers: jest.advanceTimersByTime,
162
- } );
152
+ const user = userEvent.setup();
163
153
 
164
154
  render(
165
155
  <ToggleGroupControl
@@ -180,9 +170,7 @@ describe( 'ToggleGroupControl', () => {
180
170
  } );
181
171
 
182
172
  it( 'should not tab to next radio option', async () => {
183
- const user = userEvent.setup( {
184
- advanceTimers: jest.advanceTimersByTime,
185
- } );
173
+ const user = userEvent.setup();
186
174
 
187
175
  render(
188
176
  <ToggleGroupControl value="rigas" label="Test">
@@ -205,9 +193,7 @@ describe( 'ToggleGroupControl', () => {
205
193
  describe( 'isDeselectable = true', () => {
206
194
  it( 'should be deselectable', async () => {
207
195
  const mockOnChange = jest.fn();
208
- const user = userEvent.setup( {
209
- advanceTimers: jest.advanceTimersByTime,
210
- } );
196
+ const user = userEvent.setup();
211
197
 
212
198
  render(
213
199
  <ToggleGroupControl
@@ -237,9 +223,7 @@ describe( 'ToggleGroupControl', () => {
237
223
  } );
238
224
 
239
225
  it( 'should tab to the next option button', async () => {
240
- const user = userEvent.setup( {
241
- advanceTimers: jest.advanceTimersByTime,
242
- } );
226
+ const user = userEvent.setup();
243
227
 
244
228
  render(
245
229
  <ToggleGroupControl
@@ -1,52 +1,6 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { forwardRef } from '@wordpress/element';
10
- import deprecated from '@wordpress/deprecated';
11
-
12
- /**
13
- * Internal dependencies
14
- */
15
- import ToolbarGroup from '../toolbar-group';
16
- import ToolbarContainer from './toolbar-container';
17
-
18
- /**
19
- * Renders a toolbar.
20
- *
21
- * To add controls, simply pass `ToolbarButton` components as children.
22
- *
23
- * @param {Object} props Component props.
24
- * @param {string} [props.className] Class to set on the container div.
25
- * @param {string} [props.label] ARIA label for toolbar container.
26
- * @param {Object} ref React Element ref.
27
- */
28
- function Toolbar( { className, label, ...props }, ref ) {
29
- if ( ! label ) {
30
- deprecated( 'Using Toolbar without label prop', {
31
- since: '5.6',
32
- alternative: 'ToolbarGroup component',
33
- link: 'https://developer.wordpress.org/block-editor/components/toolbar/',
34
- } );
35
- return <ToolbarGroup { ...props } className={ className } />;
36
- }
37
- // `ToolbarGroup` already uses components-toolbar for compatibility reasons.
38
- const finalClassName = classnames(
39
- 'components-accessible-toolbar',
40
- className
41
- );
42
- return (
43
- <ToolbarContainer
44
- className={ finalClassName }
45
- label={ label }
46
- ref={ ref }
47
- { ...props }
48
- />
49
- );
50
- }
51
-
52
- export default forwardRef( Toolbar );
1
+ export { default as Toolbar } from './toolbar';
2
+ export { default as ToolbarButton } from './toolbar-button';
3
+ export { default as ToolbarContext } from './toolbar-context';
4
+ export { default as ToolbarDropdownMenu } from './toolbar-dropdown-menu';
5
+ export { default as ToolbarGroup } from './toolbar-group';
6
+ export { default as ToolbarItem } from './toolbar-item';
@@ -12,22 +12,42 @@ import {
12
12
  link,
13
13
  more,
14
14
  paragraph,
15
+ arrowUp,
16
+ arrowDown,
17
+ arrowLeft,
18
+ arrowRight,
19
+ chevronDown,
15
20
  } from '@wordpress/icons';
16
21
 
17
22
  /**
18
23
  * Internal dependencies
19
24
  */
20
- import Toolbar from '../';
21
25
  import {
22
- SVG,
23
- Path,
26
+ Toolbar,
24
27
  ToolbarButton,
25
28
  ToolbarGroup,
26
29
  ToolbarItem,
27
- DropdownMenu,
28
- } from '../../';
30
+ ToolbarDropdownMenu,
31
+ } from '..';
32
+ import { SVG, Path, DropdownMenu } from '../../';
29
33
 
30
- export default { title: 'Components/Toolbar', component: Toolbar };
34
+ export default {
35
+ title: 'Components/Toolbar',
36
+ component: Toolbar,
37
+ subcomponents: {
38
+ ToolbarButton,
39
+ ToolbarGroup,
40
+ ToolbarItem,
41
+ ToolbarDropdownMenu,
42
+ },
43
+ argTypes: {
44
+ children: { control: { type: null } },
45
+ },
46
+ parameters: {
47
+ controls: { expanded: true },
48
+ docs: { source: { state: 'open' } },
49
+ },
50
+ };
31
51
 
32
52
  function InlineImageIcon() {
33
53
  return (
@@ -37,13 +57,20 @@ function InlineImageIcon() {
37
57
  );
38
58
  }
39
59
 
40
- /* eslint-disable no-restricted-syntax */
41
- export const _default = () => {
42
- return (
43
- // id is required for server side rendering
44
- <Toolbar label="Options" id="options-toolbar">
60
+ const Template = ( props ) => (
61
+ <div style={ { height: 280 } }>
62
+ <Toolbar { ...props } />
63
+ </div>
64
+ );
65
+
66
+ export const Default = Template.bind( {} );
67
+ Default.args = {
68
+ label: 'Options',
69
+ id: 'options-toolbar',
70
+ children: (
71
+ <>
45
72
  <ToolbarGroup>
46
- <ToolbarButton icon={ paragraph } label="Paragraph" />
73
+ <ToolbarButton icon={ paragraph } text="Paragraph" />
47
74
  </ToolbarGroup>
48
75
  <ToolbarGroup>
49
76
  <ToolbarItem>
@@ -105,72 +132,41 @@ export const _default = () => {
105
132
  { icon: alignRight, title: 'Align right' },
106
133
  ] }
107
134
  />
108
- </Toolbar>
109
- );
135
+ <ToolbarDropdownMenu
136
+ icon={ chevronDown }
137
+ label="Select a direction"
138
+ controls={ [
139
+ {
140
+ title: 'Up',
141
+ icon: arrowUp,
142
+ },
143
+ {
144
+ title: 'Right',
145
+ icon: arrowRight,
146
+ },
147
+ {
148
+ title: 'Down',
149
+ icon: arrowDown,
150
+ },
151
+ {
152
+ title: 'Left',
153
+ icon: arrowLeft,
154
+ },
155
+ ] }
156
+ />
157
+ </>
158
+ ),
110
159
  };
111
160
 
112
- export const withoutGroup = () => {
113
- return (
114
- // id is required for server side rendering
115
- <Toolbar label="Options" id="options-toolbar-without-group">
161
+ export const WithoutGroup = Template.bind( {} );
162
+ WithoutGroup.args = {
163
+ label: 'Options',
164
+ id: 'options-toolbar-without-group',
165
+ children: (
166
+ <>
116
167
  <ToolbarButton icon={ formatBold } label="Bold" isPressed />
117
168
  <ToolbarButton icon={ formatItalic } label="Italic" />
118
169
  <ToolbarButton icon={ link } label="Link" />
119
- </Toolbar>
120
- );
121
- };
122
- /* eslint-enable no-restricted-syntax */
123
-
124
- export const toolbars = () => {
125
- return (
126
- <div>
127
- <div style={ { padding: '20px' } }>
128
- <h2>Icon-only Toolbar</h2>
129
- <Toolbar>
130
- <ToolbarButton icon={ formatBold } title="Bold" />
131
- <ToolbarButton
132
- icon={ formatItalic }
133
- title="Italic"
134
- isActive
135
- />
136
- <ToolbarButton icon={ link } title="Link" />
137
- </Toolbar>
138
- </div>
139
-
140
- <div style={ { padding: '20px' } }>
141
- <h2>Text-only Toolbar</h2>
142
- <Toolbar>
143
- <ToolbarButton>Bold Format</ToolbarButton>
144
- <ToolbarButton isActive>Italic Format</ToolbarButton>
145
- <ToolbarButton>Link Format</ToolbarButton>
146
- </Toolbar>
147
- </div>
148
-
149
- <div style={ { padding: '20px' } }>
150
- <h2>Text and Icon Toolbar</h2>
151
- <Toolbar>
152
- <ToolbarButton icon={ formatBold } title="Bold" />
153
- <ToolbarButton isActive>Bold Format</ToolbarButton>
154
- <ToolbarButton icon={ formatItalic } title="Italic" />
155
- <ToolbarButton>Italic Format</ToolbarButton>
156
- <ToolbarButton icon={ link } title="Link" />
157
- <ToolbarButton>Link Format</ToolbarButton>
158
- </Toolbar>
159
- </div>
160
-
161
- <div style={ { padding: '20px' } }>
162
- <h2>Single Icon Button Toolbar</h2>
163
- <Toolbar>
164
- <ToolbarButton icon={ formatBold } title="Bold" />
165
- </Toolbar>
166
- </div>
167
-
168
- <div style={ { padding: '20px' } }>
169
- <h2>Single Text Button toolbar</h2>
170
- <Toolbar>
171
- <ToolbarButton>Bold Toolbar</ToolbarButton>
172
- </Toolbar>
173
- </div>
174
- </div>
175
- );
170
+ </>
171
+ ),
176
172
  };