@wordpress/components 28.4.0 → 28.6.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 (698) hide show
  1. package/CHANGELOG.md +113 -1
  2. package/CONTRIBUTING.md +155 -64
  3. package/build/alignment-matrix-control/cell.js +2 -2
  4. package/build/alignment-matrix-control/cell.js.map +1 -1
  5. package/build/alignment-matrix-control/index.js +6 -5
  6. package/build/alignment-matrix-control/index.js.map +1 -1
  7. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +8 -17
  8. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  9. package/build/angle-picker-control/styles/angle-picker-control-styles.js +4 -4
  10. package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  11. package/build/autocomplete/autocompleter-ui.js +2 -0
  12. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  13. package/build/base-control/index.js +54 -41
  14. package/build/base-control/index.js.map +1 -1
  15. package/build/base-control/styles/base-control-styles.js +8 -8
  16. package/build/base-control/styles/base-control-styles.js.map +1 -1
  17. package/build/base-control/types.js.map +1 -1
  18. package/build/border-control/styles.js +18 -24
  19. package/build/border-control/styles.js.map +1 -1
  20. package/build/checkbox-control/index.js +1 -0
  21. package/build/checkbox-control/index.js.map +1 -1
  22. package/build/circular-option-picker/circular-option-picker-option.js +4 -4
  23. package/build/circular-option-picker/circular-option-picker-option.js.map +1 -1
  24. package/build/circular-option-picker/circular-option-picker.js +3 -3
  25. package/build/circular-option-picker/circular-option-picker.js.map +1 -1
  26. package/build/circular-option-picker/types.js.map +1 -1
  27. package/build/color-palette/index.js +1 -1
  28. package/build/color-palette/index.js.map +1 -1
  29. package/build/color-palette/utils.js +17 -5
  30. package/build/color-palette/utils.js.map +1 -1
  31. package/build/color-picker/input-with-slider.js +1 -0
  32. package/build/color-picker/input-with-slider.js.map +1 -1
  33. package/build/combobox-control/index.js +1 -0
  34. package/build/combobox-control/index.js.map +1 -1
  35. package/build/composite/context.js +19 -0
  36. package/build/composite/context.js.map +1 -0
  37. package/build/composite/index.js +287 -9
  38. package/build/composite/index.js.map +1 -1
  39. package/build/composite/legacy/index.js +10 -8
  40. package/build/composite/legacy/index.js.map +1 -1
  41. package/build/composite/types.js +6 -0
  42. package/build/composite/types.js.map +1 -0
  43. package/build/custom-select-control/index.js +37 -14
  44. package/build/custom-select-control/index.js.map +1 -1
  45. package/build/custom-select-control/types.js.map +1 -1
  46. package/build/custom-select-control-v2/custom-select.js +3 -2
  47. package/build/custom-select-control-v2/custom-select.js.map +1 -1
  48. package/build/custom-select-control-v2/styles.js +9 -9
  49. package/build/custom-select-control-v2/styles.js.map +1 -1
  50. package/build/date-time/index.js +0 -7
  51. package/build/date-time/index.js.map +1 -1
  52. package/build/date-time/time/index.js +77 -41
  53. package/build/date-time/time/index.js.map +1 -1
  54. package/build/date-time/time/styles.js +11 -11
  55. package/build/date-time/time/styles.js.map +1 -1
  56. package/build/date-time/{time-input → time/time-input}/index.js +7 -7
  57. package/build/date-time/time/time-input/index.js.map +1 -0
  58. package/build/date-time/types.js.map +1 -1
  59. package/build/dimension-control/index.js +25 -8
  60. package/build/dimension-control/index.js.map +1 -1
  61. package/build/dimension-control/types.js.map +1 -1
  62. package/build/dropdown-menu-v2/index.js +3 -2
  63. package/build/dropdown-menu-v2/index.js.map +1 -1
  64. package/build/dropdown-menu-v2/styles.js +23 -21
  65. package/build/dropdown-menu-v2/styles.js.map +1 -1
  66. package/build/focal-point-picker/controls.js +1 -3
  67. package/build/focal-point-picker/controls.js.map +1 -1
  68. package/build/focal-point-picker/index.js +1 -2
  69. package/build/focal-point-picker/index.js.map +1 -1
  70. package/build/focal-point-picker/styles/focal-point-picker-style.js +11 -11
  71. package/build/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
  72. package/build/focal-point-picker/types.js.map +1 -1
  73. package/build/form-file-upload/types.js.map +1 -1
  74. package/build/form-toggle/index.js +24 -24
  75. package/build/form-toggle/index.js.map +1 -1
  76. package/build/guide/index.js +2 -0
  77. package/build/guide/index.js.map +1 -1
  78. package/build/heading/types.js.map +1 -1
  79. package/build/index.js +5 -5
  80. package/build/index.js.map +1 -1
  81. package/build/item-group/styles.js +11 -11
  82. package/build/item-group/styles.js.map +1 -1
  83. package/build/mobile/utils/alignments.native.js +1 -1
  84. package/build/mobile/utils/alignments.native.js.map +1 -1
  85. package/build/modal/index.js +18 -11
  86. package/build/modal/index.js.map +1 -1
  87. package/build/navigator/navigator-back-button/component.js +1 -1
  88. package/build/navigator/navigator-back-button/component.js.map +1 -1
  89. package/build/navigator/navigator-back-button/hook.js +3 -9
  90. package/build/navigator/navigator-back-button/hook.js.map +1 -1
  91. package/build/navigator/navigator-provider/component.js +17 -9
  92. package/build/navigator/navigator-provider/component.js.map +1 -1
  93. package/build/navigator/navigator-to-parent-button/component.js +13 -40
  94. package/build/navigator/navigator-to-parent-button/component.js.map +1 -1
  95. package/build/navigator/types.js.map +1 -1
  96. package/build/palette-edit/styles.js +11 -11
  97. package/build/palette-edit/styles.js.map +1 -1
  98. package/build/popover/index.js +6 -1
  99. package/build/popover/index.js.map +1 -1
  100. package/build/private-apis.js +6 -6
  101. package/build/private-apis.js.map +1 -1
  102. package/build/progress-bar/styles.js +5 -5
  103. package/build/progress-bar/styles.js.map +1 -1
  104. package/build/query-controls/index.js +6 -7
  105. package/build/query-controls/index.js.map +1 -1
  106. package/build/query-controls/types.js.map +1 -1
  107. package/build/radio-control/index.js +43 -15
  108. package/build/radio-control/index.js.map +1 -1
  109. package/build/radio-control/types.js.map +1 -1
  110. package/build/radio-group/radio.js +3 -2
  111. package/build/radio-group/radio.js.map +1 -1
  112. package/build/range-control/index.js +32 -9
  113. package/build/range-control/index.js.map +1 -1
  114. package/build/range-control/styles/range-control-styles.js +29 -29
  115. package/build/range-control/styles/range-control-styles.js.map +1 -1
  116. package/build/search-control/index.js +5 -4
  117. package/build/search-control/index.js.map +1 -1
  118. package/build/select-control/index.js +21 -8
  119. package/build/select-control/index.js.map +1 -1
  120. package/build/select-control/types.js.map +1 -1
  121. package/build/tab-panel/index.js +3 -2
  122. package/build/tab-panel/index.js.map +1 -1
  123. package/build/tabs/index.js +3 -2
  124. package/build/tabs/index.js.map +1 -1
  125. package/build/tabs/tablist.js +6 -4
  126. package/build/tabs/tablist.js.map +1 -1
  127. package/build/tabs/tabpanel.js +6 -1
  128. package/build/tabs/tabpanel.js.map +1 -1
  129. package/build/text/styles.js +7 -7
  130. package/build/text/styles.js.map +1 -1
  131. package/build/text-control/index.js +2 -0
  132. package/build/text-control/index.js.map +1 -1
  133. package/build/textarea-control/index.js +1 -0
  134. package/build/textarea-control/index.js.map +1 -1
  135. package/build/textarea-control/styles/textarea-control-styles.js +8 -2
  136. package/build/textarea-control/styles/textarea-control-styles.js.map +1 -1
  137. package/build/toggle-control/index.js +35 -25
  138. package/build/toggle-control/index.js.map +1 -1
  139. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +3 -2
  140. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  141. package/build/toggle-group-control/toggle-group-control/component.js +7 -1
  142. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  143. package/build/toggle-group-control/toggle-group-control/styles.js +7 -7
  144. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  145. package/build/toggle-group-control/toggle-group-control-option/component.js +6 -1
  146. package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  147. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
  148. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  149. package/build/toggle-group-control/toggle-group-control-option-icon/component.js +14 -14
  150. package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
  151. package/build/tools-panel/styles.js +13 -13
  152. package/build/tools-panel/styles.js.map +1 -1
  153. package/build/tooltip/index.js +14 -2
  154. package/build/tooltip/index.js.map +1 -1
  155. package/build/tree-select/index.js +20 -8
  156. package/build/tree-select/index.js.map +1 -1
  157. package/build/unit-control/styles/unit-control-styles.js +7 -7
  158. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  159. package/build/utils/config-values.js +10 -3
  160. package/build/utils/config-values.js.map +1 -1
  161. package/build-module/alignment-matrix-control/cell.js +2 -2
  162. package/build-module/alignment-matrix-control/cell.js.map +1 -1
  163. package/build-module/alignment-matrix-control/index.js +4 -3
  164. package/build-module/alignment-matrix-control/index.js.map +1 -1
  165. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +9 -18
  166. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  167. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +4 -4
  168. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  169. package/build-module/autocomplete/autocompleter-ui.js +2 -0
  170. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  171. package/build-module/base-control/index.js +54 -42
  172. package/build-module/base-control/index.js.map +1 -1
  173. package/build-module/base-control/styles/base-control-styles.js +8 -8
  174. package/build-module/base-control/styles/base-control-styles.js.map +1 -1
  175. package/build-module/base-control/types.js.map +1 -1
  176. package/build-module/border-control/styles.js +13 -23
  177. package/build-module/border-control/styles.js.map +1 -1
  178. package/build-module/checkbox-control/index.js +1 -0
  179. package/build-module/checkbox-control/index.js.map +1 -1
  180. package/build-module/circular-option-picker/circular-option-picker-option.js +4 -4
  181. package/build-module/circular-option-picker/circular-option-picker-option.js.map +1 -1
  182. package/build-module/circular-option-picker/circular-option-picker.js +1 -1
  183. package/build-module/circular-option-picker/circular-option-picker.js.map +1 -1
  184. package/build-module/circular-option-picker/types.js.map +1 -1
  185. package/build-module/color-palette/index.js +1 -1
  186. package/build-module/color-palette/index.js.map +1 -1
  187. package/build-module/color-palette/utils.js +17 -5
  188. package/build-module/color-palette/utils.js.map +1 -1
  189. package/build-module/color-picker/input-with-slider.js +1 -0
  190. package/build-module/color-picker/input-with-slider.js.map +1 -1
  191. package/build-module/combobox-control/index.js +1 -0
  192. package/build-module/combobox-control/index.js.map +1 -1
  193. package/build-module/composite/context.js +12 -0
  194. package/build-module/composite/context.js.map +1 -0
  195. package/build-module/composite/index.js +284 -6
  196. package/build-module/composite/index.js.map +1 -1
  197. package/build-module/composite/legacy/index.js +10 -6
  198. package/build-module/composite/legacy/index.js.map +1 -1
  199. package/build-module/composite/types.js +2 -0
  200. package/build-module/composite/types.js.map +1 -0
  201. package/build-module/custom-select-control/index.js +38 -14
  202. package/build-module/custom-select-control/index.js.map +1 -1
  203. package/build-module/custom-select-control/types.js.map +1 -1
  204. package/build-module/custom-select-control-v2/custom-select.js +2 -1
  205. package/build-module/custom-select-control-v2/custom-select.js.map +1 -1
  206. package/build-module/custom-select-control-v2/styles.js +9 -9
  207. package/build-module/custom-select-control-v2/styles.js.map +1 -1
  208. package/build-module/date-time/index.js +1 -2
  209. package/build-module/date-time/index.js.map +1 -1
  210. package/build-module/date-time/time/index.js +77 -41
  211. package/build-module/date-time/time/index.js.map +1 -1
  212. package/build-module/date-time/time/styles.js +11 -11
  213. package/build-module/date-time/time/styles.js.map +1 -1
  214. package/build-module/date-time/{time-input → time/time-input}/index.js +7 -7
  215. package/build-module/date-time/time/time-input/index.js.map +1 -0
  216. package/build-module/date-time/types.js.map +1 -1
  217. package/build-module/dimension-control/index.js +25 -8
  218. package/build-module/dimension-control/index.js.map +1 -1
  219. package/build-module/dimension-control/types.js.map +1 -1
  220. package/build-module/dropdown-menu-v2/index.js +2 -1
  221. package/build-module/dropdown-menu-v2/index.js.map +1 -1
  222. package/build-module/dropdown-menu-v2/styles.js +23 -21
  223. package/build-module/dropdown-menu-v2/styles.js.map +1 -1
  224. package/build-module/focal-point-picker/controls.js +1 -3
  225. package/build-module/focal-point-picker/controls.js.map +1 -1
  226. package/build-module/focal-point-picker/index.js +1 -2
  227. package/build-module/focal-point-picker/index.js.map +1 -1
  228. package/build-module/focal-point-picker/styles/focal-point-picker-style.js +11 -11
  229. package/build-module/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
  230. package/build-module/focal-point-picker/types.js.map +1 -1
  231. package/build-module/form-file-upload/types.js.map +1 -1
  232. package/build-module/form-toggle/index.js +23 -22
  233. package/build-module/form-toggle/index.js.map +1 -1
  234. package/build-module/guide/index.js +2 -0
  235. package/build-module/guide/index.js.map +1 -1
  236. package/build-module/heading/types.js.map +1 -1
  237. package/build-module/index.js +1 -1
  238. package/build-module/index.js.map +1 -1
  239. package/build-module/item-group/styles.js +11 -11
  240. package/build-module/item-group/styles.js.map +1 -1
  241. package/build-module/mobile/utils/alignments.native.js +1 -1
  242. package/build-module/mobile/utils/alignments.native.js.map +1 -1
  243. package/build-module/modal/index.js +17 -11
  244. package/build-module/modal/index.js.map +1 -1
  245. package/build-module/navigator/navigator-back-button/component.js +1 -1
  246. package/build-module/navigator/navigator-back-button/component.js.map +1 -1
  247. package/build-module/navigator/navigator-back-button/hook.js +3 -9
  248. package/build-module/navigator/navigator-back-button/hook.js.map +1 -1
  249. package/build-module/navigator/navigator-provider/component.js +17 -9
  250. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  251. package/build-module/navigator/navigator-to-parent-button/component.js +12 -41
  252. package/build-module/navigator/navigator-to-parent-button/component.js.map +1 -1
  253. package/build-module/navigator/types.js.map +1 -1
  254. package/build-module/palette-edit/styles.js +11 -11
  255. package/build-module/palette-edit/styles.js.map +1 -1
  256. package/build-module/popover/index.js +6 -1
  257. package/build-module/popover/index.js.map +1 -1
  258. package/build-module/private-apis.js +6 -6
  259. package/build-module/private-apis.js.map +1 -1
  260. package/build-module/progress-bar/styles.js +5 -5
  261. package/build-module/progress-bar/styles.js.map +1 -1
  262. package/build-module/query-controls/index.js +6 -7
  263. package/build-module/query-controls/index.js.map +1 -1
  264. package/build-module/query-controls/types.js.map +1 -1
  265. package/build-module/radio-control/index.js +44 -17
  266. package/build-module/radio-control/index.js.map +1 -1
  267. package/build-module/radio-control/types.js.map +1 -1
  268. package/build-module/radio-group/radio.js +2 -1
  269. package/build-module/radio-group/radio.js.map +1 -1
  270. package/build-module/range-control/index.js +32 -9
  271. package/build-module/range-control/index.js.map +1 -1
  272. package/build-module/range-control/styles/range-control-styles.js +29 -29
  273. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  274. package/build-module/search-control/index.js +5 -4
  275. package/build-module/search-control/index.js.map +1 -1
  276. package/build-module/select-control/index.js +21 -8
  277. package/build-module/select-control/index.js.map +1 -1
  278. package/build-module/select-control/types.js.map +1 -1
  279. package/build-module/tab-panel/index.js +2 -1
  280. package/build-module/tab-panel/index.js.map +1 -1
  281. package/build-module/tabs/index.js +2 -1
  282. package/build-module/tabs/index.js.map +1 -1
  283. package/build-module/tabs/tablist.js +5 -3
  284. package/build-module/tabs/tablist.js.map +1 -1
  285. package/build-module/tabs/tabpanel.js +6 -2
  286. package/build-module/tabs/tabpanel.js.map +1 -1
  287. package/build-module/text/styles.js +7 -7
  288. package/build-module/text/styles.js.map +1 -1
  289. package/build-module/text-control/index.js +2 -0
  290. package/build-module/text-control/index.js.map +1 -1
  291. package/build-module/textarea-control/index.js +1 -0
  292. package/build-module/textarea-control/index.js.map +1 -1
  293. package/build-module/textarea-control/styles/textarea-control-styles.js +9 -2
  294. package/build-module/textarea-control/styles/textarea-control-styles.js.map +1 -1
  295. package/build-module/toggle-control/index.js +34 -24
  296. package/build-module/toggle-control/index.js.map +1 -1
  297. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +2 -1
  298. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  299. package/build-module/toggle-group-control/toggle-group-control/component.js +7 -1
  300. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  301. package/build-module/toggle-group-control/toggle-group-control/styles.js +7 -7
  302. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  303. package/build-module/toggle-group-control/toggle-group-control-option/component.js +6 -1
  304. package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  305. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
  306. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  307. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +14 -14
  308. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
  309. package/build-module/tools-panel/styles.js +13 -13
  310. package/build-module/tools-panel/styles.js.map +1 -1
  311. package/build-module/tooltip/index.js +14 -2
  312. package/build-module/tooltip/index.js.map +1 -1
  313. package/build-module/tree-select/index.js +20 -8
  314. package/build-module/tree-select/index.js.map +1 -1
  315. package/build-module/unit-control/styles/unit-control-styles.js +7 -7
  316. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  317. package/build-module/utils/config-values.js +10 -3
  318. package/build-module/utils/config-values.js.map +1 -1
  319. package/build-style/style-rtl.css +79 -33
  320. package/build-style/style.css +79 -33
  321. package/build-types/alignment-matrix-control/index.d.ts.map +1 -1
  322. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -1
  323. package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts.map +1 -1
  324. package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
  325. package/build-types/base-control/hooks.d.ts +1 -0
  326. package/build-types/base-control/hooks.d.ts.map +1 -1
  327. package/build-types/base-control/index.d.ts +44 -0
  328. package/build-types/base-control/index.d.ts.map +1 -1
  329. package/build-types/base-control/types.d.ts +7 -0
  330. package/build-types/base-control/types.d.ts.map +1 -1
  331. package/build-types/border-control/styles.d.ts.map +1 -1
  332. package/build-types/button/stories/e2e/index.story.d.ts.map +1 -1
  333. package/build-types/checkbox-control/index.d.ts.map +1 -1
  334. package/build-types/checkbox-control/stories/index.story.d.ts.map +1 -1
  335. package/build-types/circular-option-picker/circular-option-picker-option.d.ts.map +1 -1
  336. package/build-types/circular-option-picker/types.d.ts +2 -3
  337. package/build-types/circular-option-picker/types.d.ts.map +1 -1
  338. package/build-types/color-palette/index.d.ts.map +1 -1
  339. package/build-types/color-palette/styles.d.ts +2 -2
  340. package/build-types/color-palette/utils.d.ts.map +1 -1
  341. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  342. package/build-types/color-picker/styles.d.ts +3 -1
  343. package/build-types/color-picker/styles.d.ts.map +1 -1
  344. package/build-types/combobox-control/index.d.ts.map +1 -1
  345. package/build-types/combobox-control/stories/index.story.d.ts.map +1 -1
  346. package/build-types/composite/context.d.ts +7 -0
  347. package/build-types/composite/context.d.ts.map +1 -0
  348. package/build-types/composite/index.d.ts +181 -1
  349. package/build-types/composite/index.d.ts.map +1 -1
  350. package/build-types/composite/legacy/index.d.ts +7 -2
  351. package/build-types/composite/legacy/index.d.ts.map +1 -1
  352. package/build-types/composite/legacy/stories/utils.d.ts +19 -0
  353. package/build-types/composite/legacy/stories/utils.d.ts.map +1 -1
  354. package/build-types/composite/stories/index.story.d.ts +13 -0
  355. package/build-types/composite/stories/index.story.d.ts.map +1 -0
  356. package/build-types/composite/stories/utils.d.ts +29 -0
  357. package/build-types/composite/stories/utils.d.ts.map +1 -0
  358. package/build-types/composite/types.d.ts +288 -0
  359. package/build-types/composite/types.d.ts.map +1 -0
  360. package/build-types/custom-select-control/index.d.ts +2 -2
  361. package/build-types/custom-select-control/index.d.ts.map +1 -1
  362. package/build-types/custom-select-control/stories/index.story.d.ts +3 -3
  363. package/build-types/custom-select-control/stories/index.story.d.ts.map +1 -1
  364. package/build-types/custom-select-control/types.d.ts +7 -7
  365. package/build-types/custom-select-control/types.d.ts.map +1 -1
  366. package/build-types/custom-select-control-v2/custom-select.d.ts.map +1 -1
  367. package/build-types/custom-select-control-v2/styles.d.ts +16 -28
  368. package/build-types/custom-select-control-v2/styles.d.ts.map +1 -1
  369. package/build-types/date-time/date/styles.d.ts +2 -2
  370. package/build-types/date-time/date-time/index.d.ts +1 -1
  371. package/build-types/date-time/index.d.ts +1 -2
  372. package/build-types/date-time/index.d.ts.map +1 -1
  373. package/build-types/date-time/stories/time.story.d.ts +5 -0
  374. package/build-types/date-time/stories/time.story.d.ts.map +1 -1
  375. package/build-types/date-time/time/index.d.ts +4 -1
  376. package/build-types/date-time/time/index.d.ts.map +1 -1
  377. package/build-types/date-time/time/styles.d.ts.map +1 -1
  378. package/build-types/date-time/{time-input → time/time-input}/index.d.ts +1 -1
  379. package/build-types/date-time/time/time-input/index.d.ts.map +1 -0
  380. package/build-types/date-time/time/time-input/test/index.d.ts.map +1 -0
  381. package/build-types/date-time/types.d.ts +7 -1
  382. package/build-types/date-time/types.d.ts.map +1 -1
  383. package/build-types/dimension-control/index.d.ts +1 -0
  384. package/build-types/dimension-control/index.d.ts.map +1 -1
  385. package/build-types/dimension-control/stories/index.story.d.ts +8 -1
  386. package/build-types/dimension-control/stories/index.story.d.ts.map +1 -1
  387. package/build-types/dimension-control/types.d.ts +2 -7
  388. package/build-types/dimension-control/types.d.ts.map +1 -1
  389. package/build-types/dropdown-menu-v2/index.d.ts.map +1 -1
  390. package/build-types/dropdown-menu-v2/styles.d.ts +24 -42
  391. package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -1
  392. package/build-types/focal-point-picker/controls.d.ts +1 -1
  393. package/build-types/focal-point-picker/controls.d.ts.map +1 -1
  394. package/build-types/focal-point-picker/index.d.ts +1 -1
  395. package/build-types/focal-point-picker/index.d.ts.map +1 -1
  396. package/build-types/focal-point-picker/stories/index.story.d.ts.map +1 -1
  397. package/build-types/focal-point-picker/types.d.ts +2 -2
  398. package/build-types/focal-point-picker/types.d.ts.map +1 -1
  399. package/build-types/form-file-upload/types.d.ts +6 -0
  400. package/build-types/form-file-upload/types.d.ts.map +1 -1
  401. package/build-types/form-toggle/index.d.ts +2 -5
  402. package/build-types/form-toggle/index.d.ts.map +1 -1
  403. package/build-types/guide/index.d.ts.map +1 -1
  404. package/build-types/heading/component.d.ts +1 -1
  405. package/build-types/heading/types.d.ts +1 -1
  406. package/build-types/heading/types.d.ts.map +1 -1
  407. package/build-types/index.d.ts +1 -1
  408. package/build-types/index.d.ts.map +1 -1
  409. package/build-types/modal/index.d.ts.map +1 -1
  410. package/build-types/navigation/styles/navigation-styles.d.ts +2 -2
  411. package/build-types/navigator/navigator-back-button/component.d.ts +1 -1
  412. package/build-types/navigator/navigator-back-button/hook.d.ts +2 -2
  413. package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
  414. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  415. package/build-types/navigator/navigator-to-parent-button/component.d.ts +6 -0
  416. package/build-types/navigator/navigator-to-parent-button/component.d.ts.map +1 -1
  417. package/build-types/navigator/types.d.ts +45 -9
  418. package/build-types/navigator/types.d.ts.map +1 -1
  419. package/build-types/palette-edit/styles.d.ts +2 -2
  420. package/build-types/popover/index.d.ts +1 -1
  421. package/build-types/popover/index.d.ts.map +1 -1
  422. package/build-types/popover/stories/e2e/index.story.d.ts +1 -1
  423. package/build-types/private-apis.d.ts.map +1 -1
  424. package/build-types/query-controls/index.d.ts +1 -1
  425. package/build-types/query-controls/index.d.ts.map +1 -1
  426. package/build-types/query-controls/types.d.ts +2 -1
  427. package/build-types/query-controls/types.d.ts.map +1 -1
  428. package/build-types/radio-control/index.d.ts.map +1 -1
  429. package/build-types/radio-control/stories/index.story.d.ts +1 -0
  430. package/build-types/radio-control/stories/index.story.d.ts.map +1 -1
  431. package/build-types/radio-control/test/index.d.ts +2 -0
  432. package/build-types/radio-control/test/index.d.ts.map +1 -0
  433. package/build-types/radio-control/types.d.ts +4 -0
  434. package/build-types/radio-control/types.d.ts.map +1 -1
  435. package/build-types/radio-group/radio.d.ts.map +1 -1
  436. package/build-types/range-control/index.d.ts.map +1 -1
  437. package/build-types/range-control/stories/index.story.d.ts.map +1 -1
  438. package/build-types/search-control/index.d.ts.map +1 -1
  439. package/build-types/search-control/stories/index.story.d.ts.map +1 -1
  440. package/build-types/select-control/index.d.ts +4 -1
  441. package/build-types/select-control/index.d.ts.map +1 -1
  442. package/build-types/select-control/stories/index.story.d.ts +13 -5
  443. package/build-types/select-control/stories/index.story.d.ts.map +1 -1
  444. package/build-types/select-control/types.d.ts +27 -27
  445. package/build-types/select-control/types.d.ts.map +1 -1
  446. package/build-types/tab-panel/index.d.ts.map +1 -1
  447. package/build-types/tabs/index.d.ts.map +1 -1
  448. package/build-types/tabs/styles.d.ts +8 -14
  449. package/build-types/tabs/styles.d.ts.map +1 -1
  450. package/build-types/tabs/tablist.d.ts.map +1 -1
  451. package/build-types/tabs/tabpanel.d.ts +0 -3
  452. package/build-types/tabs/tabpanel.d.ts.map +1 -1
  453. package/build-types/text-control/index.d.ts +1 -0
  454. package/build-types/text-control/index.d.ts.map +1 -1
  455. package/build-types/text-control/stories/index.story.d.ts.map +1 -1
  456. package/build-types/textarea-control/index.d.ts.map +1 -1
  457. package/build-types/textarea-control/styles/textarea-control-styles.d.ts.map +1 -1
  458. package/build-types/toggle-control/index.d.ts +3 -9
  459. package/build-types/toggle-control/index.d.ts.map +1 -1
  460. package/build-types/toggle-control/stories/index.story.d.ts.map +1 -1
  461. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  462. package/build-types/toggle-group-control/toggle-group-control/component.d.ts +6 -1
  463. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  464. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -1
  465. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
  466. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +14 -14
  467. package/build-types/tooltip/index.d.ts.map +1 -1
  468. package/build-types/tooltip/test/utils/index.d.ts +1 -5
  469. package/build-types/tooltip/test/utils/index.d.ts.map +1 -1
  470. package/build-types/tree-select/index.d.ts +1 -1
  471. package/build-types/tree-select/index.d.ts.map +1 -1
  472. package/build-types/utils/config-values.d.ts +10 -3
  473. package/package.json +20 -20
  474. package/src/alignment-matrix-control/cell.tsx +3 -3
  475. package/src/alignment-matrix-control/index.tsx +5 -4
  476. package/src/alignment-matrix-control/styles/alignment-matrix-control-styles.ts +2 -2
  477. package/src/alignment-matrix-control/test/index.tsx +1 -3
  478. package/src/angle-picker-control/styles/angle-picker-control-styles.tsx +2 -2
  479. package/src/autocomplete/autocompleter-ui.tsx +2 -0
  480. package/src/autocomplete/style.scss +0 -6
  481. package/src/base-control/README.md +5 -2
  482. package/src/base-control/index.tsx +61 -41
  483. package/src/base-control/styles/base-control-styles.ts +1 -1
  484. package/src/base-control/types.ts +7 -0
  485. package/src/border-box-control/border-box-control/README.md +7 -0
  486. package/src/border-control/border-control/README.md +7 -0
  487. package/src/border-control/styles.ts +1 -6
  488. package/src/button/README.md +7 -0
  489. package/src/button/stories/e2e/index.story.tsx +103 -21
  490. package/src/button/style.scss +51 -23
  491. package/src/button/test/index.tsx +18 -40
  492. package/src/button-group/style.scss +2 -2
  493. package/src/checkbox-control/index.tsx +1 -0
  494. package/src/checkbox-control/stories/index.story.tsx +1 -0
  495. package/src/checkbox-control/test/index.tsx +8 -1
  496. package/src/circular-option-picker/circular-option-picker-option.tsx +8 -6
  497. package/src/circular-option-picker/circular-option-picker.tsx +1 -1
  498. package/src/circular-option-picker/style.scss +3 -3
  499. package/src/circular-option-picker/test/index.tsx +1 -4
  500. package/src/circular-option-picker/types.ts +2 -3
  501. package/src/color-indicator/style.scss +1 -1
  502. package/src/color-palette/index.tsx +22 -20
  503. package/src/color-palette/style.scss +2 -2
  504. package/src/color-palette/utils.ts +23 -10
  505. package/src/color-picker/input-with-slider.tsx +1 -0
  506. package/src/combobox-control/README.md +8 -0
  507. package/src/combobox-control/index.tsx +1 -0
  508. package/src/combobox-control/stories/index.story.tsx +3 -4
  509. package/src/combobox-control/test/index.tsx +5 -1
  510. package/src/composite/README.md +325 -0
  511. package/src/composite/context.ts +14 -0
  512. package/src/composite/index.tsx +341 -0
  513. package/src/composite/legacy/index.tsx +15 -14
  514. package/src/composite/legacy/stories/utils.tsx +19 -0
  515. package/src/composite/legacy/test/index.tsx +2 -18
  516. package/src/composite/stories/index.story.tsx +466 -0
  517. package/src/composite/{current/stories → stories}/utils.tsx +22 -7
  518. package/src/composite/types.ts +298 -0
  519. package/src/custom-gradient-picker/style.scss +2 -2
  520. package/src/custom-select-control/README.md +7 -0
  521. package/src/custom-select-control/index.tsx +55 -25
  522. package/src/custom-select-control/test/index.tsx +172 -30
  523. package/src/custom-select-control/types.ts +7 -7
  524. package/src/custom-select-control-v2/custom-select.tsx +2 -1
  525. package/src/custom-select-control-v2/styles.ts +7 -6
  526. package/src/custom-select-control-v2/test/index.tsx +15 -19
  527. package/src/date-time/index.ts +1 -2
  528. package/src/date-time/stories/time.story.tsx +17 -0
  529. package/src/date-time/time/index.tsx +72 -28
  530. package/src/date-time/time/styles.ts +1 -0
  531. package/src/date-time/{time-input → time/time-input}/index.tsx +9 -9
  532. package/src/date-time/types.ts +11 -1
  533. package/src/dimension-control/README.md +17 -0
  534. package/src/dimension-control/index.tsx +26 -9
  535. package/src/dimension-control/stories/index.story.tsx +1 -0
  536. package/src/dimension-control/test/__snapshots__/index.test.js.snap +0 -16
  537. package/src/dimension-control/test/index.test.js +5 -1
  538. package/src/dimension-control/types.ts +5 -7
  539. package/src/drop-zone/style.scss +1 -1
  540. package/src/dropdown-menu-v2/index.tsx +5 -3
  541. package/src/dropdown-menu-v2/styles.ts +35 -32
  542. package/src/dropdown-menu-v2/test/index.tsx +1 -4
  543. package/src/focal-point-picker/README.md +9 -1
  544. package/src/focal-point-picker/controls.tsx +1 -3
  545. package/src/focal-point-picker/index.tsx +1 -2
  546. package/src/focal-point-picker/stories/index.story.tsx +3 -0
  547. package/src/focal-point-picker/styles/focal-point-picker-style.ts +1 -1
  548. package/src/focal-point-picker/test/index.tsx +5 -1
  549. package/src/focal-point-picker/types.ts +2 -2
  550. package/src/font-size-picker/README.md +7 -0
  551. package/src/font-size-picker/test/index.tsx +50 -43
  552. package/src/form-file-upload/README.md +8 -0
  553. package/src/form-file-upload/types.ts +6 -0
  554. package/src/form-toggle/index.tsx +23 -21
  555. package/src/form-token-field/README.md +1 -0
  556. package/src/guide/index.tsx +2 -0
  557. package/src/guide/style.scss +0 -1
  558. package/src/heading/types.ts +1 -4
  559. package/src/index.ts +1 -1
  560. package/src/input-control/README.md +8 -0
  561. package/src/item-group/styles.ts +1 -1
  562. package/src/mobile/utils/alignments.native.js +1 -0
  563. package/src/modal/index.tsx +21 -20
  564. package/src/modal/style.scss +3 -3
  565. package/src/navigator/navigator-back-button/component.tsx +1 -1
  566. package/src/navigator/navigator-back-button/hook.ts +6 -10
  567. package/src/navigator/navigator-provider/README.md +38 -36
  568. package/src/navigator/navigator-provider/component.tsx +13 -7
  569. package/src/navigator/navigator-screen/README.md +13 -1
  570. package/src/navigator/navigator-to-parent-button/README.md +2 -0
  571. package/src/navigator/navigator-to-parent-button/component.tsx +14 -43
  572. package/src/navigator/test/index.tsx +136 -6
  573. package/src/navigator/types.ts +45 -10
  574. package/src/number-control/README.md +8 -0
  575. package/src/palette-edit/styles.ts +5 -5
  576. package/src/placeholder/style.scss +15 -3
  577. package/src/popover/index.tsx +9 -3
  578. package/src/popover/style.scss +2 -2
  579. package/src/popover/test/index.tsx +34 -0
  580. package/src/private-apis.ts +6 -12
  581. package/src/progress-bar/styles.ts +2 -2
  582. package/src/query-controls/README.md +7 -0
  583. package/src/query-controls/index.tsx +10 -7
  584. package/src/query-controls/types.ts +2 -1
  585. package/src/radio-control/index.tsx +62 -13
  586. package/src/radio-control/stories/index.story.tsx +23 -0
  587. package/src/radio-control/style.scss +38 -3
  588. package/src/radio-control/test/index.tsx +277 -0
  589. package/src/radio-control/types.ts +4 -0
  590. package/src/radio-group/radio.tsx +2 -1
  591. package/src/range-control/README.md +7 -0
  592. package/src/range-control/index.tsx +39 -9
  593. package/src/range-control/stories/index.story.tsx +7 -0
  594. package/src/range-control/styles/range-control-styles.ts +2 -2
  595. package/src/range-control/test/index.tsx +54 -14
  596. package/src/search-control/index.tsx +7 -4
  597. package/src/search-control/stories/index.story.tsx +1 -0
  598. package/src/search-control/test/index.tsx +1 -0
  599. package/src/select-control/README.md +16 -1
  600. package/src/select-control/index.tsx +34 -22
  601. package/src/select-control/stories/index.story.tsx +8 -5
  602. package/src/select-control/test/select-control.tsx +155 -5
  603. package/src/select-control/types.ts +70 -65
  604. package/src/snackbar/style.scss +2 -2
  605. package/src/tab-panel/index.tsx +4 -1
  606. package/src/tab-panel/style.scss +1 -1
  607. package/src/tab-panel/test/index.tsx +1 -8
  608. package/src/tabs/index.tsx +2 -1
  609. package/src/tabs/tablist.tsx +6 -4
  610. package/src/tabs/tabpanel.tsx +6 -2
  611. package/src/tabs/test/index.tsx +68 -84
  612. package/src/text/styles.ts +1 -1
  613. package/src/text-control/README.md +9 -0
  614. package/src/text-control/index.tsx +2 -0
  615. package/src/text-control/stories/index.story.tsx +3 -1
  616. package/src/text-control/style.scss +5 -0
  617. package/src/text-control/test/text-control.tsx +5 -1
  618. package/src/textarea-control/index.tsx +1 -0
  619. package/src/textarea-control/stories/index.story.tsx +2 -0
  620. package/src/textarea-control/styles/textarea-control-styles.ts +75 -2
  621. package/src/toggle-control/README.md +9 -0
  622. package/src/toggle-control/index.tsx +34 -22
  623. package/src/toggle-control/stories/index.story.tsx +1 -0
  624. package/src/toggle-control/style.scss +2 -1
  625. package/src/toggle-control/test/index.tsx +7 -1
  626. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +14 -30
  627. package/src/toggle-group-control/test/index.tsx +5 -7
  628. package/src/toggle-group-control/toggle-group-control/README.md +20 -1
  629. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +2 -1
  630. package/src/toggle-group-control/toggle-group-control/component.tsx +7 -1
  631. package/src/toggle-group-control/toggle-group-control/styles.ts +1 -1
  632. package/src/toggle-group-control/toggle-group-control-option/README.md +6 -1
  633. package/src/toggle-group-control/toggle-group-control-option/component.tsx +6 -1
  634. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +2 -2
  635. package/src/toggle-group-control/toggle-group-control-option-icon/README.md +1 -1
  636. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +14 -14
  637. package/src/toolbar/toolbar/style.scss +2 -2
  638. package/src/tools-panel/styles.ts +1 -1
  639. package/src/tooltip/index.tsx +16 -2
  640. package/src/tooltip/style.scss +1 -1
  641. package/src/tooltip/test/index.tsx +0 -5
  642. package/src/tooltip/test/utils/index.tsx +5 -5
  643. package/src/tree-select/index.tsx +17 -7
  644. package/src/tree-select/stories/index.story.tsx +1 -0
  645. package/src/unit-control/README.md +7 -0
  646. package/src/unit-control/styles/unit-control-styles.ts +1 -1
  647. package/src/utils/config-values.js +10 -3
  648. package/tsconfig.tsbuildinfo +1 -1
  649. package/build/composite/current/index.js +0 -43
  650. package/build/composite/current/index.js.map +0 -1
  651. package/build/composite/v2.js +0 -17
  652. package/build/composite/v2.js.map +0 -1
  653. package/build/date-time/time-input/index.js.map +0 -1
  654. package/build/utils/input/base.js +0 -20
  655. package/build/utils/input/base.js.map +0 -1
  656. package/build/utils/input/index.js +0 -17
  657. package/build/utils/input/index.js.map +0 -1
  658. package/build/utils/input/input-control.js +0 -21
  659. package/build/utils/input/input-control.js.map +0 -1
  660. package/build-module/composite/current/index.js +0 -12
  661. package/build-module/composite/current/index.js.map +0 -1
  662. package/build-module/composite/v2.js +0 -5
  663. package/build-module/composite/v2.js.map +0 -1
  664. package/build-module/date-time/time-input/index.js.map +0 -1
  665. package/build-module/utils/input/base.js +0 -13
  666. package/build-module/utils/input/base.js.map +0 -1
  667. package/build-module/utils/input/index.js +0 -2
  668. package/build-module/utils/input/index.js.map +0 -1
  669. package/build-module/utils/input/input-control.js +0 -14
  670. package/build-module/utils/input/input-control.js.map +0 -1
  671. package/build-types/composite/current/index.d.ts +0 -12
  672. package/build-types/composite/current/index.d.ts.map +0 -1
  673. package/build-types/composite/current/stories/index.story.d.ts +0 -13
  674. package/build-types/composite/current/stories/index.story.d.ts.map +0 -1
  675. package/build-types/composite/current/stories/utils.d.ts +0 -14
  676. package/build-types/composite/current/stories/utils.d.ts.map +0 -1
  677. package/build-types/composite/v2.d.ts +0 -2
  678. package/build-types/composite/v2.d.ts.map +0 -1
  679. package/build-types/date-time/stories/time-input.story.d.ts +0 -12
  680. package/build-types/date-time/stories/time-input.story.d.ts.map +0 -1
  681. package/build-types/date-time/time-input/index.d.ts.map +0 -1
  682. package/build-types/date-time/time-input/test/index.d.ts.map +0 -1
  683. package/build-types/utils/input/base.d.ts +0 -3
  684. package/build-types/utils/input/base.d.ts.map +0 -1
  685. package/build-types/utils/input/index.d.ts +0 -2
  686. package/build-types/utils/input/index.d.ts.map +0 -1
  687. package/build-types/utils/input/input-control.d.ts +0 -2
  688. package/build-types/utils/input/input-control.d.ts.map +0 -1
  689. package/src/composite/current/index.ts +0 -20
  690. package/src/composite/current/stories/index.story.tsx +0 -86
  691. package/src/composite/index.ts +0 -7
  692. package/src/composite/v2.ts +0 -4
  693. package/src/date-time/stories/time-input.story.tsx +0 -36
  694. package/src/utils/input/base.js +0 -30
  695. package/src/utils/input/index.js +0 -1
  696. package/src/utils/input/input-control.js +0 -63
  697. /package/build-types/date-time/{time-input → time/time-input}/test/index.d.ts +0 -0
  698. /package/src/date-time/{time-input → time/time-input}/test/index.tsx +0 -0
@@ -26,8 +26,24 @@ function useUniqueId( idProp?: string ) {
26
26
  return idProp || id;
27
27
  }
28
28
 
29
- function UnforwardedSelectControl(
30
- props: WordPressComponentProps< SelectControlProps, 'select', false >,
29
+ function SelectOptions( {
30
+ options,
31
+ }: {
32
+ options: NonNullable< SelectControlProps[ 'options' ] >;
33
+ } ) {
34
+ return options.map( ( { id, label, value, ...optionProps }, index ) => {
35
+ const key = id || `${ label }-${ value }-${ index }`;
36
+
37
+ return (
38
+ <option key={ key } value={ value } { ...optionProps }>
39
+ { label }
40
+ </option>
41
+ );
42
+ } );
43
+ }
44
+
45
+ function UnforwardedSelectControl< V extends string >(
46
+ props: WordPressComponentProps< SelectControlProps< V >, 'select', false >,
31
47
  ref: React.ForwardedRef< HTMLSelectElement >
32
48
  ) {
33
49
  const {
@@ -66,12 +82,14 @@ function UnforwardedSelectControl(
66
82
  const selectedOptions = Array.from( event.target.options ).filter(
67
83
  ( { selected } ) => selected
68
84
  );
69
- const newValues = selectedOptions.map( ( { value } ) => value );
85
+ const newValues = selectedOptions.map(
86
+ ( { value } ) => value as V
87
+ );
70
88
  props.onChange?.( newValues, { event } );
71
89
  return;
72
90
  }
73
91
 
74
- props.onChange?.( event.target.value, { event } );
92
+ props.onChange?.( event.target.value as V, { event } );
75
93
  };
76
94
 
77
95
  const classes = clsx( 'components-select-control', className );
@@ -81,6 +99,7 @@ function UnforwardedSelectControl(
81
99
  help={ help }
82
100
  id={ id }
83
101
  __nextHasNoMarginBottom={ __nextHasNoMarginBottom }
102
+ __associatedWPComponentName="SelectControl"
84
103
  >
85
104
  <StyledInputBase
86
105
  className={ classes }
@@ -115,23 +134,7 @@ function UnforwardedSelectControl(
115
134
  value={ valueProp }
116
135
  variant={ variant }
117
136
  >
118
- { children ||
119
- options.map( ( option, index ) => {
120
- const key =
121
- option.id ||
122
- `${ option.label }-${ option.value }-${ index }`;
123
-
124
- return (
125
- <option
126
- key={ key }
127
- value={ option.value }
128
- disabled={ option.disabled }
129
- hidden={ option.hidden }
130
- >
131
- { option.label }
132
- </option>
133
- );
134
- } ) }
137
+ { children || <SelectOptions options={ options } /> }
135
138
  </Select>
136
139
  </StyledInputBase>
137
140
  </BaseControl>
@@ -151,6 +154,7 @@ function UnforwardedSelectControl(
151
154
  *
152
155
  * return (
153
156
  * <SelectControl
157
+ * __nextHasNoMarginBottom
154
158
  * label="Size"
155
159
  * value={ size }
156
160
  * options={ [
@@ -164,6 +168,14 @@ function UnforwardedSelectControl(
164
168
  * };
165
169
  * ```
166
170
  */
167
- export const SelectControl = forwardRef( UnforwardedSelectControl );
171
+ export const SelectControl = forwardRef( UnforwardedSelectControl ) as <
172
+ V extends string,
173
+ >(
174
+ props: WordPressComponentProps<
175
+ SelectControlProps< V >,
176
+ 'select',
177
+ false
178
+ > & { ref?: React.Ref< HTMLSelectElement > }
179
+ ) => React.JSX.Element | null;
168
180
 
169
181
  export default SelectControl;
@@ -63,6 +63,7 @@ const SelectControlWithState: StoryFn< typeof SelectControl > = ( props ) => {
63
63
 
64
64
  export const Default = SelectControlWithState.bind( {} );
65
65
  Default.args = {
66
+ __nextHasNoMarginBottom: true,
66
67
  options: [
67
68
  { value: '', label: 'Select an Option', disabled: true },
68
69
  { value: 'a', label: 'Option A' },
@@ -82,9 +83,11 @@ WithLabelAndHelpText.args = {
82
83
  * As an alternative to the `options` prop, `optgroup`s and `options` can be
83
84
  * passed in as `children` for more customizeability.
84
85
  */
85
- export const WithCustomChildren: StoryFn< typeof SelectControl > = ( args ) => {
86
- return (
87
- <SelectControlWithState { ...args }>
86
+ export const WithCustomChildren = SelectControlWithState.bind( {} );
87
+ WithCustomChildren.args = {
88
+ __nextHasNoMarginBottom: true,
89
+ children: (
90
+ <>
88
91
  <option value="option-1">Option 1</option>
89
92
  <option value="option-2" disabled>
90
93
  Option 2 - Disabled
@@ -97,8 +100,8 @@ export const WithCustomChildren: StoryFn< typeof SelectControl > = ( args ) => {
97
100
  Option Group 1 - Option 2 - Disabled
98
101
  </option>
99
102
  </optgroup>
100
- </SelectControlWithState>
101
- );
103
+ </>
104
+ ),
102
105
  };
103
106
 
104
107
  export const Minimal = SelectControlWithState.bind( {} );
@@ -7,7 +7,13 @@ import userEvent from '@testing-library/user-event';
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
10
- import SelectControl from '..';
10
+ import _SelectControl from '..';
11
+
12
+ const SelectControl = (
13
+ props: React.ComponentProps< typeof _SelectControl >
14
+ ) => {
15
+ return <_SelectControl { ...props } __nextHasNoMarginBottom />;
16
+ };
11
17
 
12
18
  describe( 'SelectControl', () => {
13
19
  it( 'should not render when no options or children are provided', () => {
@@ -17,8 +23,8 @@ describe( 'SelectControl', () => {
17
23
  expect( screen.queryByRole( 'combobox' ) ).not.toBeInTheDocument();
18
24
  } );
19
25
 
20
- it( 'should not render its children', async () => {
21
- const user = await userEvent.setup();
26
+ it( 'should render its children', async () => {
27
+ const user = userEvent.setup();
22
28
  const handleChangeMock = jest.fn();
23
29
 
24
30
  render(
@@ -46,8 +52,8 @@ describe( 'SelectControl', () => {
46
52
  );
47
53
  } );
48
54
 
49
- it( 'should not render its options', async () => {
50
- const user = await userEvent.setup();
55
+ it( 'should render its options', async () => {
56
+ const user = userEvent.setup();
51
57
  const handleChangeMock = jest.fn();
52
58
 
53
59
  render(
@@ -81,4 +87,148 @@ describe( 'SelectControl', () => {
81
87
  expect.anything()
82
88
  );
83
89
  } );
90
+
91
+ it( 'should pass through options props', () => {
92
+ render(
93
+ <SelectControl
94
+ label="Select"
95
+ options={ [
96
+ {
97
+ value: 'value',
98
+ label: 'label',
99
+ 'aria-label': 'Aria label',
100
+ },
101
+ ] }
102
+ />
103
+ );
104
+
105
+ expect(
106
+ screen.getByRole( 'option', { name: 'Aria label' } )
107
+ ).toBeInTheDocument();
108
+ } );
109
+
110
+ /* eslint-disable jest/expect-expect */
111
+ describe( 'static typing', () => {
112
+ describe( 'single', () => {
113
+ it( 'should infer the value type from available `options`, but not the `value` or `onChange` prop', () => {
114
+ const onChange: ( value: 'foo' | 'bar' ) => void = () => {};
115
+
116
+ <SelectControl
117
+ value="narrow"
118
+ options={ [
119
+ {
120
+ value: 'narrow',
121
+ label: 'Narrow',
122
+ },
123
+ {
124
+ value: 'value',
125
+ label: 'Value',
126
+ },
127
+ ] }
128
+ // @ts-expect-error onChange type is not compatible with inferred value type
129
+ onChange={ onChange }
130
+ />;
131
+
132
+ <_SelectControl
133
+ // @ts-expect-error "string" is not "narrow" or "value"
134
+ value="string"
135
+ options={ [
136
+ {
137
+ value: 'narrow',
138
+ label: 'Narrow',
139
+ },
140
+ {
141
+ value: 'value',
142
+ label: 'Value',
143
+ },
144
+ ] }
145
+ // @ts-expect-error "string" is not "narrow" or "value"
146
+ onChange={ ( value ) => value === 'string' }
147
+ />;
148
+ } );
149
+
150
+ it( 'should accept an explicit type argument', () => {
151
+ <_SelectControl< 'narrow' | 'value' >
152
+ // @ts-expect-error "string" is not "narrow" or "value"
153
+ value="string"
154
+ options={ [
155
+ {
156
+ value: 'narrow',
157
+ label: 'Narrow',
158
+ },
159
+ {
160
+ // @ts-expect-error "string" is not "narrow" or "value"
161
+ value: 'string',
162
+ label: 'String',
163
+ },
164
+ ] }
165
+ />;
166
+ } );
167
+ } );
168
+
169
+ describe( 'multiple', () => {
170
+ it( 'should infer the value type from available `options`, but not the `value` or `onChange` prop', () => {
171
+ const onChange: (
172
+ value: ( 'foo' | 'bar' )[]
173
+ ) => void = () => {};
174
+
175
+ <_SelectControl
176
+ multiple
177
+ value={ [ 'narrow' ] }
178
+ options={ [
179
+ {
180
+ value: 'narrow',
181
+ label: 'Narrow',
182
+ },
183
+ {
184
+ value: 'value',
185
+ label: 'Value',
186
+ },
187
+ ] }
188
+ // @ts-expect-error onChange type is not compatible with inferred value type
189
+ onChange={ onChange }
190
+ />;
191
+
192
+ <_SelectControl
193
+ multiple
194
+ // @ts-expect-error "string" is not "narrow" or "value"
195
+ value={ [ 'string' ] }
196
+ options={ [
197
+ {
198
+ value: 'narrow',
199
+ label: 'Narrow',
200
+ },
201
+ {
202
+ value: 'value',
203
+ label: 'Value',
204
+ },
205
+ ] }
206
+ onChange={ ( value ) =>
207
+ // @ts-expect-error "string" is not "narrow" or "value"
208
+ value.forEach( ( v ) => v === 'string' )
209
+ }
210
+ />;
211
+ } );
212
+
213
+ it( 'should accept an explicit type argument', () => {
214
+ <_SelectControl< 'narrow' | 'value' >
215
+ multiple
216
+ // @ts-expect-error "string" is not "narrow" or "value"
217
+ value={ [ 'string' ] }
218
+ options={ [
219
+ {
220
+ value: 'narrow',
221
+ label: 'Narrow',
222
+ },
223
+ {
224
+ // @ts-expect-error "string" is not "narrow" or "value"
225
+ value: 'string',
226
+ label: 'String',
227
+ },
228
+ ] }
229
+ />;
230
+ } );
231
+ } );
232
+ } );
233
+ /* eslint-enable jest/expect-expect */
84
234
  } );
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import type { ChangeEvent, FocusEvent, ReactNode } from 'react';
4
+ import type { ChangeEvent, ReactNode } from 'react';
5
5
 
6
6
  /**
7
7
  * Internal dependencies
@@ -9,7 +9,7 @@ import type { ChangeEvent, FocusEvent, ReactNode } from 'react';
9
9
  import type { InputBaseProps } from '../input-control/types';
10
10
  import type { BaseControlProps } from '../base-control/types';
11
11
 
12
- type SelectControlBaseProps = Pick<
12
+ type SelectControlBaseProps< V extends string > = Pick<
13
13
  InputBaseProps,
14
14
  | '__next36pxDefaultSize'
15
15
  | '__next40pxDefaultSize'
@@ -22,9 +22,12 @@ type SelectControlBaseProps = Pick<
22
22
  | 'suffix'
23
23
  > &
24
24
  Pick< BaseControlProps, 'help' | '__nextHasNoMarginBottom' > & {
25
- onBlur?: ( event: FocusEvent< HTMLSelectElement > ) => void;
26
- onFocus?: ( event: FocusEvent< HTMLSelectElement > ) => void;
27
- options?: {
25
+ /**
26
+ * An array of option property objects to be rendered,
27
+ * each with a `label` and `value` property, as well as any other
28
+ * `<option>` attributes.
29
+ */
30
+ options?: readonly ( {
28
31
  /**
29
32
  * The label to be shown to the user.
30
33
  */
@@ -33,21 +36,11 @@ type SelectControlBaseProps = Pick<
33
36
  * The internal value used to choose the selected value.
34
37
  * This is also the value passed to `onChange` when the option is selected.
35
38
  */
36
- value: string;
37
- id?: string;
38
- /**
39
- * Whether or not the option should have the disabled attribute.
40
- *
41
- * @default false
42
- */
43
- disabled?: boolean;
44
- /**
45
- * Whether or not the option should be hidden.
46
- *
47
- * @default false
48
- */
49
- hidden?: boolean;
50
- }[];
39
+ value: V;
40
+ } & Omit<
41
+ React.OptionHTMLAttributes< HTMLOptionElement >,
42
+ 'label' | 'value'
43
+ > )[];
51
44
  /**
52
45
  * As an alternative to the `options` prop, `optgroup`s and `options` can be
53
46
  * passed in as `children` for more customizability.
@@ -61,50 +54,62 @@ type SelectControlBaseProps = Pick<
61
54
  variant?: 'default' | 'minimal';
62
55
  };
63
56
 
64
- export type SelectControlSingleSelectionProps = SelectControlBaseProps & {
65
- /**
66
- * If this property is added, multiple values can be selected. The `value` passed should be an array.
67
- *
68
- * In most cases, it is preferable to use the `FormTokenField` or `CheckboxControl` components instead.
69
- *
70
- * @default false
71
- */
72
- multiple?: false;
73
- value?: string;
74
- /**
75
- * A function that receives the value of the new option that is being selected as input.
76
- *
77
- * If `multiple` is `true`, the value received is an array of the selected value.
78
- * Otherwise, the value received is a single value with the new selected value.
79
- */
80
- onChange?: (
81
- value: string,
82
- extra?: { event?: ChangeEvent< HTMLSelectElement > }
83
- ) => void;
84
- };
57
+ export type SelectControlSingleSelectionProps< V extends string = string > =
58
+ SelectControlBaseProps< V > & {
59
+ /**
60
+ * If this property is added, multiple values can be selected. The `value` passed should be an array.
61
+ *
62
+ * In most cases, it is preferable to use the `FormTokenField` or `CheckboxControl` components instead.
63
+ *
64
+ * @default false
65
+ */
66
+ multiple?: false;
67
+ /**
68
+ * The value of the selected option.
69
+ *
70
+ * If `multiple` is true, the `value` should be an array with the values of the selected options.
71
+ */
72
+ value?: NoInfer< V >;
73
+ /**
74
+ * A function that receives the value of the new option that is being selected as input.
75
+ *
76
+ * If `multiple` is `true`, the value received is an array of the selected value.
77
+ * Otherwise, the value received is a single value with the new selected value.
78
+ */
79
+ onChange?: (
80
+ value: NoInfer< V >,
81
+ extra?: { event?: ChangeEvent< HTMLSelectElement > }
82
+ ) => void;
83
+ };
85
84
 
86
- export type SelectControlMultipleSelectionProps = SelectControlBaseProps & {
87
- /**
88
- * If this property is added, multiple values can be selected. The `value` passed should be an array.
89
- *
90
- * In most cases, it is preferable to use the `FormTokenField` or `CheckboxControl` components instead.
91
- *
92
- * @default false
93
- */
94
- multiple: true;
95
- value?: string[];
96
- /**
97
- * A function that receives the value of the new option that is being selected as input.
98
- *
99
- * If `multiple` is `true`, the value received is an array of the selected value.
100
- * Otherwise, the value received is a single value with the new selected value.
101
- */
102
- onChange?: (
103
- value: string[],
104
- extra?: { event?: ChangeEvent< HTMLSelectElement > }
105
- ) => void;
106
- };
85
+ export type SelectControlMultipleSelectionProps< V extends string > =
86
+ SelectControlBaseProps< V > & {
87
+ /**
88
+ * If this property is added, multiple values can be selected. The `value` passed should be an array.
89
+ *
90
+ * In most cases, it is preferable to use the `FormTokenField` or `CheckboxControl` components instead.
91
+ *
92
+ * @default false
93
+ */
94
+ multiple: true;
95
+ /**
96
+ * The value of the selected option.
97
+ *
98
+ * If `multiple` is true, the `value` should be an array with the values of the selected options.
99
+ */
100
+ value?: NoInfer< V >[];
101
+ /**
102
+ * A function that receives the value of the new option that is being selected as input.
103
+ *
104
+ * If `multiple` is `true`, the value received is an array of the selected value.
105
+ * Otherwise, the value received is a single value with the new selected value.
106
+ */
107
+ onChange?: (
108
+ value: NoInfer< V >[],
109
+ extra?: { event?: ChangeEvent< HTMLSelectElement > }
110
+ ) => void;
111
+ };
107
112
 
108
- export type SelectControlProps =
109
- | SelectControlSingleSelectionProps
110
- | SelectControlMultipleSelectionProps;
113
+ export type SelectControlProps< V extends string = string > =
114
+ | SelectControlSingleSelectionProps< V >
115
+ | SelectControlMultipleSelectionProps< V >;
@@ -3,8 +3,8 @@
3
3
  font-size: $default-font-size;
4
4
  background: rgba($black, 0.85); // Emulates #1e1e1e closely.
5
5
  backdrop-filter: blur($grid-unit-20) saturate(180%);
6
- border-radius: $radius-block-ui;
7
- box-shadow: $shadow-popover;
6
+ border-radius: $radius-medium;
7
+ box-shadow: $elevation-x-small;
8
8
  color: $white;
9
9
  padding: $grid-unit-15 ($grid-unit-05 * 5);
10
10
  width: 100%;
@@ -2,6 +2,7 @@
2
2
  * External dependencies
3
3
  */
4
4
  import * as Ariakit from '@ariakit/react';
5
+ import { useStoreState } from '@ariakit/react';
5
6
  import clsx from 'clsx';
6
7
  import type { ForwardedRef } from 'react';
7
8
 
@@ -121,7 +122,9 @@ const UnforwardedTabPanel = (
121
122
  defaultSelectedId: prependInstanceId( initialTabName ),
122
123
  } );
123
124
 
124
- const selectedTabName = extractTabName( tabStore.useState( 'selectedId' ) );
125
+ const selectedTabName = extractTabName(
126
+ useStoreState( tabStore, 'selectedId' )
127
+ );
125
128
 
126
129
  const setTabStoreSelectedId = useCallback(
127
130
  ( tabName: string ) => {
@@ -67,7 +67,7 @@
67
67
 
68
68
  // Draw the indicator.
69
69
  box-shadow: 0 0 0 0 transparent;
70
- border-radius: $radius-block-ui;
70
+ border-radius: $radius-small;
71
71
 
72
72
  // Animation
73
73
  transition: all 0.1s linear;
@@ -2,7 +2,7 @@
2
2
  * External dependencies
3
3
  */
4
4
  import { render, screen, waitFor } from '@testing-library/react';
5
- import { press, hover, click, sleep } from '@ariakit/test';
5
+ import { press, hover, click } from '@ariakit/test';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
@@ -155,7 +155,6 @@ describe.each( [
155
155
  // Tab to focus the tablist. Make sure alpha is focused, and that the
156
156
  // corresponding tooltip is shown.
157
157
  expect( screen.queryByText( 'Alpha' ) ).not.toBeInTheDocument();
158
- await sleep();
159
158
  await press.Tab();
160
159
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
161
160
  expect( screen.getByText( 'Alpha' ) ).toBeInTheDocument();
@@ -627,7 +626,6 @@ describe.each( [
627
626
  // Tab to focus the tablist. Make sure alpha is focused.
628
627
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
629
628
  expect( await getSelectedTab() ).not.toHaveFocus();
630
- await sleep();
631
629
  await press.Tab();
632
630
  expect( await getSelectedTab() ).toHaveFocus();
633
631
 
@@ -665,7 +663,6 @@ describe.each( [
665
663
  // Tab to focus the tablist. Make sure Alpha is focused.
666
664
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
667
665
  expect( await getSelectedTab() ).not.toHaveFocus();
668
- await sleep();
669
666
  await press.Tab();
670
667
  expect( await getSelectedTab() ).toHaveFocus();
671
668
 
@@ -703,7 +700,6 @@ describe.each( [
703
700
  // Tab to focus the tablist. Make sure alpha is focused.
704
701
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
705
702
  expect( await getSelectedTab() ).not.toHaveFocus();
706
- await sleep();
707
703
  await press.Tab();
708
704
  expect( await getSelectedTab() ).toHaveFocus();
709
705
 
@@ -799,7 +795,6 @@ describe.each( [
799
795
  // Tab to focus the tablist. Make sure Alpha is focused.
800
796
  expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
801
797
  expect( await getSelectedTab() ).not.toHaveFocus();
802
- await sleep();
803
798
  await press.Tab();
804
799
  expect( await getSelectedTab() ).toHaveFocus();
805
800
  expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
@@ -841,7 +836,6 @@ describe.each( [
841
836
 
842
837
  // Tab should initially focus the first tab in the tablist, which
843
838
  // is Alpha.
844
- await sleep();
845
839
  await press.Tab();
846
840
  expect(
847
841
  await screen.findByRole( 'tab', { name: 'Alpha' } )
@@ -849,7 +843,6 @@ describe.each( [
849
843
 
850
844
  // Because all other tabs should have `tabindex=-1`, pressing Tab
851
845
  // should NOT move the focus to the next tab, which is Beta.
852
- await sleep();
853
846
  await press.Tab();
854
847
  expect(
855
848
  await screen.findByRole( 'tab', { name: 'Beta' } )
@@ -2,6 +2,7 @@
2
2
  * External dependencies
3
3
  */
4
4
  import * as Ariakit from '@ariakit/react';
5
+ import { useStoreState } from '@ariakit/react';
5
6
 
6
7
  /**
7
8
  * WordPress dependencies
@@ -48,7 +49,7 @@ function Tabs( {
48
49
 
49
50
  const isControlled = selectedTabId !== undefined;
50
51
 
51
- const { items, selectedId, activeId } = store.useState();
52
+ const { items, selectedId, activeId } = useStoreState( store );
52
53
  const { setSelectedId, setActiveId } = store;
53
54
 
54
55
  // Keep track of whether tabs have been populated. This is used to prevent
@@ -2,6 +2,7 @@
2
2
  * External dependencies
3
3
  */
4
4
  import * as Ariakit from '@ariakit/react';
5
+ import { useStoreState } from '@ariakit/react';
5
6
 
6
7
  /**
7
8
  * WordPress dependencies
@@ -26,7 +27,8 @@ export const TabList = forwardRef<
26
27
  >( function TabList( { children, ...otherProps }, ref ) {
27
28
  const context = useTabsContext();
28
29
 
29
- const selectedId = context?.store.useState( 'selectedId' );
30
+ const tabStoreState = useStoreState( context?.store );
31
+ const selectedId = tabStoreState?.selectedId;
30
32
  const indicatorPosition = useTrackElementOffsetRect(
31
33
  context?.store.item( selectedId )?.element
32
34
  );
@@ -37,13 +39,13 @@ export const TabList = forwardRef<
37
39
  ( { previousValue } ) => previousValue && setAnimationEnabled( true )
38
40
  );
39
41
 
40
- if ( ! context ) {
42
+ if ( ! context || ! tabStoreState ) {
41
43
  warning( '`Tabs.TabList` must be wrapped in a `Tabs` component.' );
42
44
  return null;
43
45
  }
44
- const { store } = context;
45
46
 
46
- const { activeId, selectOnMove } = store.useState();
47
+ const { store } = context;
48
+ const { activeId, selectOnMove } = tabStoreState;
47
49
  const { setActiveId } = store;
48
50
 
49
51
  const onBlur = () => {
@@ -1,7 +1,11 @@
1
1
  /**
2
- * WordPress dependencies
2
+ * External dependencies
3
3
  */
4
+ import { useStoreState } from '@ariakit/react';
4
5
 
6
+ /**
7
+ * WordPress dependencies
8
+ */
5
9
  import { forwardRef } from '@wordpress/element';
6
10
 
7
11
  /**
@@ -22,13 +26,13 @@ export const TabPanel = forwardRef<
22
26
  ref
23
27
  ) {
24
28
  const context = useTabsContext();
29
+ const selectedId = useStoreState( context?.store, 'selectedId' );
25
30
  if ( ! context ) {
26
31
  warning( '`Tabs.TabPanel` must be wrapped in a `Tabs` component.' );
27
32
  return null;
28
33
  }
29
34
  const { store, instanceId } = context;
30
35
  const instancedTabId = `${ instanceId }-${ tabId }`;
31
- const selectedId = store.useState( ( state ) => state.selectedId );
32
36
 
33
37
  return (
34
38
  <StyledTabPanel