@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
@@ -0,0 +1,277 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useState } from '@wordpress/element';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import RadioControl from '../';
16
+
17
+ const ControlledRadioControl = ( {
18
+ ...props
19
+ }: React.ComponentProps< typeof RadioControl > ) => {
20
+ const [ option, setOption ] = useState( props.selected );
21
+
22
+ return (
23
+ <RadioControl
24
+ { ...props }
25
+ onChange={ ( newValue ) => {
26
+ setOption( newValue );
27
+ props.onChange?.( newValue );
28
+ } }
29
+ selected={ option }
30
+ />
31
+ );
32
+ };
33
+
34
+ const defaultProps = {
35
+ options: [
36
+ { label: 'Mouse', value: 'mouse' },
37
+ { label: 'Cat', value: 'cat' },
38
+ { label: 'Dog', value: 'dog' },
39
+ ],
40
+ label: 'Animal',
41
+ };
42
+
43
+ const defaultPropsWithDescriptions = {
44
+ ...defaultProps,
45
+ options: defaultProps.options.map( ( option, index ) => ( {
46
+ ...option,
47
+ description: `This is the option number ${ index + 1 }.`,
48
+ } ) ),
49
+ };
50
+
51
+ describe.each( [
52
+ // TODO: `RadioControl` doesn't currently support uncontrolled mode.
53
+ // [ 'uncontrolled', RadioControl ],
54
+ [ 'controlled', ControlledRadioControl ],
55
+ ] )( 'RadioControl %s', ( ...modeAndComponent ) => {
56
+ const [ , Component ] = modeAndComponent;
57
+
58
+ describe( 'semantics and labelling', () => {
59
+ it( 'should group all radios under a fieldset with an accessible label (legend)', () => {
60
+ const onChangeSpy = jest.fn();
61
+ render(
62
+ <Component { ...defaultProps } onChange={ onChangeSpy } />
63
+ );
64
+
65
+ expect(
66
+ screen.getByRole( 'group', { name: defaultProps.label } )
67
+ ).toBeVisible();
68
+ } );
69
+
70
+ it( 'should group all radios under a fieldset with an accessible label even when the label is visually hidden', () => {
71
+ const onChangeSpy = jest.fn();
72
+ render(
73
+ <Component
74
+ { ...defaultProps }
75
+ hideLabelFromVision
76
+ onChange={ onChangeSpy }
77
+ />
78
+ );
79
+
80
+ expect(
81
+ screen.getByRole( 'group', { name: defaultProps.label } )
82
+ ).toBeVisible();
83
+ } );
84
+
85
+ it( 'should describe the radio group with the help text', () => {
86
+ const onChangeSpy = jest.fn();
87
+ render(
88
+ <Component
89
+ { ...defaultProps }
90
+ help="Test help text"
91
+ onChange={ onChangeSpy }
92
+ />
93
+ );
94
+
95
+ expect(
96
+ screen.getByRole( 'group', { name: defaultProps.label } )
97
+ ).toHaveAccessibleDescription( 'Test help text' );
98
+ } );
99
+
100
+ it( 'should render radio inputs with accessible labels', () => {
101
+ const onChangeSpy = jest.fn();
102
+ render(
103
+ <Component { ...defaultProps } onChange={ onChangeSpy } />
104
+ );
105
+
106
+ for ( const option of defaultProps.options ) {
107
+ const optionEl = screen.getByRole( 'radio', {
108
+ name: option.label,
109
+ } );
110
+ expect( optionEl ).toBeVisible();
111
+ expect( optionEl ).not.toBeChecked();
112
+ }
113
+ } );
114
+
115
+ it( 'should not select have a selected value when the `selected` prop does not match any available options', () => {
116
+ const onChangeSpy = jest.fn();
117
+ render(
118
+ <Component { ...defaultProps } onChange={ onChangeSpy } />
119
+ );
120
+
121
+ expect(
122
+ screen.queryByRole( 'radio', {
123
+ checked: true,
124
+ } )
125
+ ).not.toBeInTheDocument();
126
+ } );
127
+
128
+ it( 'should render mutually exclusive radio inputs', () => {
129
+ const onChangeSpy = jest.fn();
130
+ render(
131
+ <Component
132
+ { ...defaultProps }
133
+ onChange={ onChangeSpy }
134
+ selected={ defaultProps.options[ 1 ].value }
135
+ />
136
+ );
137
+
138
+ expect(
139
+ screen.getByRole( 'radio', {
140
+ checked: true,
141
+ } )
142
+ ).toHaveAccessibleName( defaultProps.options[ 1 ].label );
143
+ } );
144
+
145
+ it( 'should use the option description text to describe individual options', () => {
146
+ const onChangeSpy = jest.fn();
147
+ render(
148
+ <Component
149
+ { ...defaultPropsWithDescriptions }
150
+ onChange={ onChangeSpy }
151
+ selected={ defaultProps.options[ 1 ].value }
152
+ help="Select your favorite animal"
153
+ />
154
+ );
155
+
156
+ // Group help text should not be used to describe individual options.
157
+ let index = 1;
158
+ for ( const option of defaultProps.options ) {
159
+ expect(
160
+ screen.getByRole( 'radio', { name: option.label } )
161
+ ).toHaveAccessibleDescription(
162
+ `This is the option number ${ index }.`
163
+ );
164
+ index += 1;
165
+ }
166
+ } );
167
+ } );
168
+
169
+ describe( 'interaction', () => {
170
+ it( 'should select a new value when clicking on the radio input', async () => {
171
+ const user = userEvent.setup();
172
+ const onChangeSpy = jest.fn();
173
+ render(
174
+ <Component { ...defaultProps } onChange={ onChangeSpy } />
175
+ );
176
+
177
+ // Click on the third radio, make sure it's selected.
178
+ await user.click(
179
+ screen.getByRole( 'radio', {
180
+ name: defaultProps.options[ 2 ].label,
181
+ } )
182
+ );
183
+ expect(
184
+ screen.getByRole( 'radio', {
185
+ checked: true,
186
+ } )
187
+ ).toHaveAccessibleName( defaultProps.options[ 2 ].label );
188
+
189
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 1 );
190
+ expect( onChangeSpy ).toHaveBeenLastCalledWith(
191
+ defaultProps.options[ 2 ].value
192
+ );
193
+ } );
194
+
195
+ it( 'should select a new value when clicking on the radio label', async () => {
196
+ const user = userEvent.setup();
197
+ const onChangeSpy = jest.fn();
198
+ render(
199
+ <Component { ...defaultProps } onChange={ onChangeSpy } />
200
+ );
201
+
202
+ // Click on the second radio's label, make sure it selects the associated radio.
203
+ await user.click(
204
+ screen.getByText( defaultProps.options[ 1 ].label )
205
+ );
206
+ expect(
207
+ screen.getByRole( 'radio', {
208
+ checked: true,
209
+ } )
210
+ ).toHaveAccessibleName( defaultProps.options[ 1 ].label );
211
+
212
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 1 );
213
+ expect( onChangeSpy ).toHaveBeenLastCalledWith(
214
+ defaultProps.options[ 1 ].value
215
+ );
216
+ } );
217
+
218
+ it( 'should select a new value when using the arrow keys', async () => {
219
+ const user = userEvent.setup();
220
+ const onChangeSpy = jest.fn();
221
+ render(
222
+ <Component { ...defaultProps } onChange={ onChangeSpy } />
223
+ );
224
+
225
+ await user.tab();
226
+
227
+ expect(
228
+ screen.getByRole( 'radio', {
229
+ name: defaultProps.options[ 0 ].label,
230
+ } )
231
+ ).toHaveFocus();
232
+
233
+ await user.keyboard( '{ArrowDown}' );
234
+
235
+ expect(
236
+ screen.getByRole( 'radio', {
237
+ checked: true,
238
+ name: defaultProps.options[ 1 ].label,
239
+ } )
240
+ ).toHaveFocus();
241
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 2 );
242
+ expect( onChangeSpy ).toHaveBeenLastCalledWith(
243
+ defaultProps.options[ 1 ].value
244
+ );
245
+
246
+ await user.keyboard( '{ArrowDown}' );
247
+ await user.keyboard( '{ArrowDown}' );
248
+
249
+ // The selection wrap around.
250
+ expect(
251
+ screen.getByRole( 'radio', {
252
+ checked: true,
253
+ name: defaultProps.options[ 0 ].label,
254
+ } )
255
+ ).toHaveFocus();
256
+ // TODO: why called twice for every interaction?
257
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 6 );
258
+ expect( onChangeSpy ).toHaveBeenLastCalledWith(
259
+ defaultProps.options[ 0 ].value
260
+ );
261
+
262
+ await user.keyboard( '{ArrowUp}' );
263
+
264
+ expect(
265
+ screen.getByRole( 'radio', {
266
+ checked: true,
267
+ name: defaultProps.options[ 2 ].label,
268
+ } )
269
+ ).toHaveFocus();
270
+
271
+ expect( onChangeSpy ).toHaveBeenCalledTimes( 8 );
272
+ expect( onChangeSpy ).toHaveBeenLastCalledWith(
273
+ defaultProps.options[ 2 ].value
274
+ );
275
+ } );
276
+ } );
277
+ } );
@@ -24,6 +24,10 @@ export type RadioControlProps = Pick<
24
24
  * The internal value compared against select and passed to onChange
25
25
  */
26
26
  value: string;
27
+ /**
28
+ * Optional help text to be shown in addition the label.
29
+ */
30
+ description?: string;
27
31
  }[];
28
32
  /**
29
33
  * The value property of the currently selected option.
@@ -7,6 +7,7 @@ import { forwardRef, useContext } from '@wordpress/element';
7
7
  * External dependencies
8
8
  */
9
9
  import * as Ariakit from '@ariakit/react';
10
+ import { useStoreState } from '@ariakit/react';
10
11
 
11
12
  /**
12
13
  * Internal dependencies
@@ -26,7 +27,7 @@ function UnforwardedRadio(
26
27
  ) {
27
28
  const { store, disabled } = useContext( RadioGroupContext );
28
29
 
29
- const selectedValue = store?.useState( 'value' );
30
+ const selectedValue = useStoreState( store, 'value' );
30
31
  const isChecked = selectedValue !== undefined && selectedValue === value;
31
32
 
32
33
  return (
@@ -362,6 +362,13 @@ Determines if the `input` number field will render next to the RangeControl. Thi
362
362
  - Required: No
363
363
  - Platform: Web
364
364
 
365
+ ### `__next40pxDefaultSize`: `boolean`
366
+
367
+ Start opting into the larger default height that will become the default size in a future version.
368
+
369
+ - Required: No
370
+ - Default: `false`
371
+
365
372
  ### `__nextHasNoMarginBottom`: `boolean`
366
373
 
367
374
  Start opting into the new margin-free styles that will become the default in a future version.
@@ -41,6 +41,25 @@ import { space } from '../utils/space';
41
41
 
42
42
  const noop = () => {};
43
43
 
44
+ /**
45
+ * Computes the value that `RangeControl` should reset to when pressing
46
+ * the reset button.
47
+ */
48
+ function computeResetValue( {
49
+ resetFallbackValue,
50
+ initialPosition,
51
+ }: Pick< RangeControlProps, 'resetFallbackValue' | 'initialPosition' > ) {
52
+ if ( resetFallbackValue !== undefined ) {
53
+ return ! Number.isNaN( resetFallbackValue ) ? resetFallbackValue : null;
54
+ }
55
+
56
+ if ( initialPosition !== undefined ) {
57
+ return ! Number.isNaN( initialPosition ) ? initialPosition : null;
58
+ }
59
+
60
+ return null;
61
+ }
62
+
44
63
  function UnforwardedRangeControl(
45
64
  props: WordPressComponentProps< RangeControlProps, 'input', false >,
46
65
  forwardedRef: ForwardedRef< HTMLInputElement >
@@ -166,13 +185,12 @@ function UnforwardedRangeControl(
166
185
  };
167
186
 
168
187
  const handleOnReset = () => {
169
- let resetValue: number | null = parseFloat( `${ resetFallbackValue }` );
170
- let onChangeResetValue: number | undefined = resetValue;
171
-
172
- if ( isNaN( resetValue ) ) {
173
- resetValue = null;
174
- onChangeResetValue = undefined;
175
- }
188
+ // Reset to `resetFallbackValue` if defined, otherwise set internal value
189
+ // to `null` which, if propagated to the `value` prop, will cause
190
+ // the value to be reset to the `initialPosition` prop if defined.
191
+ const resetValue = Number.isNaN( resetFallbackValue )
192
+ ? null
193
+ : resetFallbackValue ?? null;
176
194
 
177
195
  setValue( resetValue );
178
196
 
@@ -189,7 +207,7 @@ function UnforwardedRangeControl(
189
207
  * preserve the undefined callback argument, except when a
190
208
  * resetFallbackValue is defined.
191
209
  */
192
- onChange( onChangeResetValue );
210
+ onChange( resetValue ?? undefined );
193
211
  };
194
212
 
195
213
  const handleShowTooltip = () => setShowTooltip( true );
@@ -210,9 +228,11 @@ function UnforwardedRangeControl(
210
228
  const offsetStyle = {
211
229
  [ isRTL() ? 'right' : 'left' ]: fillValueOffset,
212
230
  };
231
+
213
232
  return (
214
233
  <BaseControl
215
234
  __nextHasNoMarginBottom={ __nextHasNoMarginBottom }
235
+ __associatedWPComponentName="RangeControl"
216
236
  className={ classes }
217
237
  label={ label }
218
238
  hideLabelFromVision={ hideLabelFromVision }
@@ -328,7 +348,17 @@ function UnforwardedRangeControl(
328
348
  className="components-range-control__reset"
329
349
  // If the RangeControl itself is disabled, the reset button shouldn't be in the tab sequence.
330
350
  accessibleWhenDisabled={ ! disabled }
331
- disabled={ disabled || value === undefined }
351
+ // The reset button should be disabled if RangeControl itself is disabled,
352
+ // or if the current `value` is equal to the value that would be currently
353
+ // assigned when clicking the button.
354
+ disabled={
355
+ disabled ||
356
+ value ===
357
+ computeResetValue( {
358
+ resetFallbackValue,
359
+ initialPosition,
360
+ } )
361
+ }
332
362
  variant="secondary"
333
363
  size="small"
334
364
  onClick={ handleOnReset }
@@ -70,6 +70,7 @@ const Template: StoryFn< typeof RangeControl > = ( { onChange, ...args } ) => {
70
70
 
71
71
  export const Default: StoryFn< typeof RangeControl > = Template.bind( {} );
72
72
  Default.args = {
73
+ __nextHasNoMarginBottom: true,
73
74
  help: 'Please select how transparent you would like this.',
74
75
  initialPosition: 50,
75
76
  label: 'Opacity',
@@ -104,6 +105,7 @@ export const WithAnyStep: StoryFn< typeof RangeControl > = ( {
104
105
  );
105
106
  };
106
107
  WithAnyStep.args = {
108
+ __nextHasNoMarginBottom: true,
107
109
  label: 'Brightness',
108
110
  step: 'any',
109
111
  };
@@ -167,6 +169,7 @@ export const WithIntegerStepAndMarks: StoryFn< typeof RangeControl > =
167
169
  MarkTemplate.bind( {} );
168
170
 
169
171
  WithIntegerStepAndMarks.args = {
172
+ __nextHasNoMarginBottom: true,
170
173
  label: 'Integer Step',
171
174
  marks: marksBase,
172
175
  max: 10,
@@ -183,6 +186,7 @@ export const WithDecimalStepAndMarks: StoryFn< typeof RangeControl > =
183
186
  MarkTemplate.bind( {} );
184
187
 
185
188
  WithDecimalStepAndMarks.args = {
189
+ __nextHasNoMarginBottom: true,
186
190
  marks: [
187
191
  ...marksBase,
188
192
  { value: 3.5, label: '3.5' },
@@ -202,6 +206,7 @@ export const WithNegativeMinimumAndMarks: StoryFn< typeof RangeControl > =
202
206
  MarkTemplate.bind( {} );
203
207
 
204
208
  WithNegativeMinimumAndMarks.args = {
209
+ __nextHasNoMarginBottom: true,
205
210
  marks: marksWithNegatives,
206
211
  max: 10,
207
212
  min: -10,
@@ -217,6 +222,7 @@ export const WithNegativeRangeAndMarks: StoryFn< typeof RangeControl > =
217
222
  MarkTemplate.bind( {} );
218
223
 
219
224
  WithNegativeRangeAndMarks.args = {
225
+ __nextHasNoMarginBottom: true,
220
226
  marks: marksWithNegatives,
221
227
  max: -1,
222
228
  min: -10,
@@ -232,6 +238,7 @@ export const WithAnyStepAndMarks: StoryFn< typeof RangeControl > =
232
238
  MarkTemplate.bind( {} );
233
239
 
234
240
  WithAnyStepAndMarks.args = {
241
+ __nextHasNoMarginBottom: true,
235
242
  marks: marksBase,
236
243
  max: 10,
237
244
  min: 0,
@@ -154,7 +154,7 @@ export const Mark = styled.span`
154
154
  height: ${ thumbSize }px;
155
155
  left: 0;
156
156
  position: absolute;
157
- top: -4px;
157
+ top: 9px;
158
158
  width: 1px;
159
159
 
160
160
  ${ markFill };
@@ -170,7 +170,7 @@ export const MarkLabel = styled.span`
170
170
  color: ${ COLORS.gray[ 300 ] };
171
171
  font-size: 11px;
172
172
  position: absolute;
173
- top: 12px;
173
+ top: 22px;
174
174
  white-space: nowrap;
175
175
 
176
176
  ${ rtl( { left: 0 } ) };
@@ -6,7 +6,7 @@ import { act, fireEvent, render, screen } from '@testing-library/react';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
- import RangeControl from '../';
9
+ import _RangeControl from '../';
10
10
 
11
11
  const getRangeInput = (): HTMLInputElement => screen.getByRole( 'slider' );
12
12
  const getNumberInput = (): HTMLInputElement => screen.getByRole( 'spinbutton' );
@@ -15,6 +15,12 @@ const getResetButton = (): HTMLButtonElement => screen.getByRole( 'button' );
15
15
  const fireChangeEvent = ( input: HTMLInputElement, value?: number | string ) =>
16
16
  fireEvent.change( input, { target: { value } } );
17
17
 
18
+ const RangeControl = (
19
+ props: React.ComponentProps< typeof _RangeControl >
20
+ ) => {
21
+ return <_RangeControl { ...props } __nextHasNoMarginBottom />;
22
+ };
23
+
18
24
  describe( 'RangeControl', () => {
19
25
  describe( '#render()', () => {
20
26
  it( 'should trigger change callback with numeric value', () => {
@@ -292,14 +298,37 @@ describe( 'RangeControl', () => {
292
298
  } );
293
299
 
294
300
  describe( 'reset', () => {
295
- it( 'should reset to a custom fallback value, defined by a parent component', () => {
301
+ it( 'should clear the input value when clicking the reset button', () => {
302
+ const spy = jest.fn();
303
+ render( <RangeControl allowReset onChange={ spy } /> );
304
+
305
+ const resetButton = getResetButton();
306
+ const rangeInput = getRangeInput();
307
+ const numberInput = getNumberInput();
308
+
309
+ fireChangeEvent( numberInput, '14' );
310
+
311
+ expect( rangeInput.value ).toBe( '14' );
312
+ expect( numberInput.value ).toBe( '14' );
313
+ expect( spy ).toHaveBeenCalledWith( 14 );
314
+
315
+ fireEvent.click( resetButton );
316
+
317
+ // range input resets to min + (max-min)/2
318
+ expect( rangeInput.value ).toBe( '50' );
319
+ expect( numberInput.value ).toBe( '' );
320
+ expect( spy ).toHaveBeenCalledWith( undefined );
321
+
322
+ expect( resetButton ).toHaveAttribute( 'aria-disabled', 'true' );
323
+ } );
324
+
325
+ it( 'should reset to the `initialPosition` value when clicking the reset button', () => {
296
326
  const spy = jest.fn();
297
327
  render(
298
328
  <RangeControl
299
- initialPosition={ 10 }
300
329
  allowReset
330
+ initialPosition={ 23 }
301
331
  onChange={ spy }
302
- resetFallbackValue={ 33 }
303
332
  />
304
333
  );
305
334
 
@@ -307,21 +336,29 @@ describe( 'RangeControl', () => {
307
336
  const rangeInput = getRangeInput();
308
337
  const numberInput = getNumberInput();
309
338
 
339
+ fireChangeEvent( numberInput, '14' );
340
+
341
+ expect( rangeInput.value ).toBe( '14' );
342
+ expect( numberInput.value ).toBe( '14' );
343
+ expect( spy ).toHaveBeenCalledWith( 14 );
344
+
310
345
  fireEvent.click( resetButton );
311
346
 
312
- expect( rangeInput.value ).toBe( '33' );
313
- expect( numberInput.value ).toBe( '33' );
314
- expect( spy ).toHaveBeenCalledWith( 33 );
347
+ expect( rangeInput.value ).toBe( '23' );
348
+ expect( numberInput.value ).toBe( '23' );
349
+ expect( spy ).toHaveBeenCalledWith( undefined );
350
+
351
+ expect( resetButton ).toHaveAttribute( 'aria-disabled', 'true' );
315
352
  } );
316
353
 
317
- it( 'should reset to a 50% of min/max value, of no initialPosition or value is defined', () => {
354
+ it( 'should reset to the `resetFallbackValue` value when clicking the reset button', () => {
355
+ const spy = jest.fn();
318
356
  render(
319
357
  <RangeControl
320
- initialPosition={ undefined }
321
- min={ 0 }
322
- max={ 100 }
358
+ initialPosition={ 10 }
323
359
  allowReset
324
- resetFallbackValue={ undefined }
360
+ onChange={ spy }
361
+ resetFallbackValue={ 33 }
325
362
  />
326
363
  );
327
364
 
@@ -331,8 +368,11 @@ describe( 'RangeControl', () => {
331
368
 
332
369
  fireEvent.click( resetButton );
333
370
 
334
- expect( rangeInput.value ).toBe( '50' );
335
- expect( numberInput.value ).toBe( '' );
371
+ expect( rangeInput.value ).toBe( '33' );
372
+ expect( numberInput.value ).toBe( '33' );
373
+ expect( spy ).toHaveBeenCalledWith( 33 );
374
+
375
+ expect( resetButton ).toHaveAttribute( 'aria-disabled', 'true' );
336
376
  } );
337
377
  } );
338
378
  } );
@@ -77,10 +77,13 @@ function UnforwardedSearchControl(
77
77
 
78
78
  const contextValue = useMemo(
79
79
  () => ( {
80
- // Overrides the underlying BaseControl `__nextHasNoMarginBottom` via the context system
81
- // to provide backwards compatibile margin for SearchControl.
82
- // (In a standard InputControl, the BaseControl `__nextHasNoMarginBottom` is always set to true.)
83
- BaseControl: { _overrides: { __nextHasNoMarginBottom } },
80
+ BaseControl: {
81
+ // Overrides the underlying BaseControl `__nextHasNoMarginBottom` via the context system
82
+ // to provide backwards compatibile margin for SearchControl.
83
+ // (In a standard InputControl, the BaseControl `__nextHasNoMarginBottom` is always set to true.)
84
+ _overrides: { __nextHasNoMarginBottom },
85
+ __associatedWPComponentName: 'SearchControl',
86
+ },
84
87
  // `isBorderless` is still experimental and not a public prop for InputControl yet.
85
88
  InputBase: { isBorderless: true },
86
89
  } ),
@@ -48,6 +48,7 @@ const Template: StoryFn< typeof SearchControl > = ( {
48
48
  export const Default = Template.bind( {} );
49
49
  Default.args = {
50
50
  help: 'Help text to explain the input.',
51
+ __nextHasNoMarginBottom: true,
51
52
  };
52
53
 
53
54
  /**
@@ -23,6 +23,7 @@ function ControlledSearchControl( {
23
23
  return (
24
24
  <SearchControl
25
25
  { ...restProps }
26
+ __nextHasNoMarginBottom
26
27
  value={ value }
27
28
  onChange={ ( ...args ) => {
28
29
  setValue( ...args );
@@ -190,7 +190,7 @@ In most cases, it is preferable to use the `FormTokenField` or `CheckboxControl`
190
190
 
191
191
  #### options
192
192
 
193
- An array of objects containing the following properties:
193
+ An array of objects containing the following properties, as well as any other `option` element attributes:
194
194
 
195
195
  - `label`: (string) The label to be shown to the user.
196
196
  - `value`: (string) The internal value used to choose the selected value. This is also the value passed to onChange when the option is selected.
@@ -214,6 +214,13 @@ If multiple is false the value received is a single value with the new selected
214
214
  - Type: `function`
215
215
  - Required: Yes
216
216
 
217
+ #### value
218
+
219
+ The value of the selected option. If `multiple` is true, the `value` should be an array with the values of the selected options.
220
+
221
+ - Type: `String|String[]`
222
+ - Required: No
223
+
217
224
  #### variant
218
225
 
219
226
  The style variant of the control.
@@ -222,6 +229,14 @@ The style variant of the control.
222
229
  - Required: No
223
230
  - Default: `'default'`
224
231
 
232
+ ### __next40pxDefaultSize
233
+
234
+ Start opting into the larger default height that will become the default size in a future version.
235
+
236
+ - Type: `Boolean`
237
+ - Required: No
238
+ - Default: `false`
239
+
225
240
  ### __nextHasNoMarginBottom
226
241
 
227
242
  Start opting into the new margin-free styles that will become the default in a future version.