@react-spectrum/s2 1.0.0 → 1.2.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 (629) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.cjs.map +1 -1
  3. package/dist/Accordion.css +2 -2
  4. package/dist/Accordion.css.map +1 -1
  5. package/dist/Accordion.mjs +3 -3
  6. package/dist/Accordion.mjs.map +1 -1
  7. package/dist/ActionBar.cjs +62 -61
  8. package/dist/ActionBar.cjs.map +1 -1
  9. package/dist/ActionBar.css +58 -58
  10. package/dist/ActionBar.css.map +1 -1
  11. package/dist/ActionBar.mjs +62 -61
  12. package/dist/ActionBar.mjs.map +1 -1
  13. package/dist/ActionButton.cjs +234 -234
  14. package/dist/ActionButton.cjs.map +1 -1
  15. package/dist/ActionButton.css +160 -160
  16. package/dist/ActionButton.css.map +1 -1
  17. package/dist/ActionButton.mjs +234 -234
  18. package/dist/ActionButton.mjs.map +1 -1
  19. package/dist/ActionButtonGroup.cjs +16 -16
  20. package/dist/ActionButtonGroup.css +9 -9
  21. package/dist/ActionButtonGroup.mjs +16 -16
  22. package/dist/Add.cjs +10 -10
  23. package/dist/Add.css +6 -6
  24. package/dist/Add.mjs +10 -10
  25. package/dist/AlertDialog.cjs +3 -3
  26. package/dist/AlertDialog.css +3 -3
  27. package/dist/AlertDialog.mjs +3 -3
  28. package/dist/Asterisk.cjs +6 -6
  29. package/dist/Asterisk.css +4 -4
  30. package/dist/Asterisk.mjs +6 -6
  31. package/dist/Avatar.cjs +17 -17
  32. package/dist/Avatar.css +16 -16
  33. package/dist/Avatar.mjs +17 -17
  34. package/dist/AvatarGroup.cjs +121 -121
  35. package/dist/AvatarGroup.css +31 -31
  36. package/dist/AvatarGroup.mjs +121 -121
  37. package/dist/Badge.cjs +197 -197
  38. package/dist/Badge.css +125 -125
  39. package/dist/Badge.mjs +197 -197
  40. package/dist/Breadcrumbs.cjs +235 -235
  41. package/dist/Breadcrumbs.cjs.map +1 -1
  42. package/dist/Breadcrumbs.css +100 -100
  43. package/dist/Breadcrumbs.css.map +1 -1
  44. package/dist/Breadcrumbs.mjs +235 -235
  45. package/dist/Breadcrumbs.mjs.map +1 -1
  46. package/dist/Button.cjs +333 -333
  47. package/dist/Button.cjs.map +1 -1
  48. package/dist/Button.css +174 -174
  49. package/dist/Button.css.map +1 -1
  50. package/dist/Button.mjs +333 -333
  51. package/dist/Button.mjs.map +1 -1
  52. package/dist/ButtonGroup.cjs +21 -21
  53. package/dist/ButtonGroup.css +15 -15
  54. package/dist/ButtonGroup.mjs +21 -21
  55. package/dist/Calendar.cjs +169 -169
  56. package/dist/Calendar.cjs.map +1 -1
  57. package/dist/Calendar.css +134 -134
  58. package/dist/Calendar.css.map +1 -1
  59. package/dist/Calendar.mjs +169 -169
  60. package/dist/Calendar.mjs.map +1 -1
  61. package/dist/Card.cjs +310 -310
  62. package/dist/Card.cjs.map +1 -1
  63. package/dist/Card.css +206 -206
  64. package/dist/Card.css.map +1 -1
  65. package/dist/Card.mjs +310 -310
  66. package/dist/Card.mjs.map +1 -1
  67. package/dist/CardView.cjs +19 -19
  68. package/dist/CardView.cjs.map +1 -1
  69. package/dist/CardView.css +17 -17
  70. package/dist/CardView.css.map +1 -1
  71. package/dist/CardView.mjs +19 -19
  72. package/dist/CardView.mjs.map +1 -1
  73. package/dist/CenterBaseline.cjs +1 -1
  74. package/dist/CenterBaseline.css +2 -2
  75. package/dist/CenterBaseline.mjs +1 -1
  76. package/dist/Checkbox.cjs +162 -162
  77. package/dist/Checkbox.cjs.map +1 -1
  78. package/dist/Checkbox.css +95 -91
  79. package/dist/Checkbox.css.map +1 -1
  80. package/dist/Checkbox.mjs +162 -162
  81. package/dist/Checkbox.mjs.map +1 -1
  82. package/dist/CheckboxGroup.cjs +44 -44
  83. package/dist/CheckboxGroup.cjs.map +1 -1
  84. package/dist/CheckboxGroup.css +37 -37
  85. package/dist/CheckboxGroup.css.map +1 -1
  86. package/dist/CheckboxGroup.mjs +44 -44
  87. package/dist/CheckboxGroup.mjs.map +1 -1
  88. package/dist/Checkmark.cjs +12 -12
  89. package/dist/Checkmark.css +8 -8
  90. package/dist/Checkmark.mjs +12 -12
  91. package/dist/Chevron.cjs +12 -12
  92. package/dist/Chevron.css +10 -10
  93. package/dist/Chevron.mjs +12 -12
  94. package/dist/ClearButton.cjs +30 -30
  95. package/dist/ClearButton.css +30 -30
  96. package/dist/ClearButton.mjs +30 -30
  97. package/dist/CloseButton.cjs +56 -56
  98. package/dist/CloseButton.css +47 -47
  99. package/dist/CloseButton.mjs +56 -56
  100. package/dist/ColorArea.cjs +17 -17
  101. package/dist/ColorArea.cjs.map +1 -1
  102. package/dist/ColorArea.css +16 -16
  103. package/dist/ColorArea.css.map +1 -1
  104. package/dist/ColorArea.mjs +17 -17
  105. package/dist/ColorArea.mjs.map +1 -1
  106. package/dist/ColorField.cjs +32 -32
  107. package/dist/ColorField.cjs.map +1 -1
  108. package/dist/ColorField.css +27 -27
  109. package/dist/ColorField.css.map +1 -1
  110. package/dist/ColorField.mjs +32 -32
  111. package/dist/ColorField.mjs.map +1 -1
  112. package/dist/ColorHandle.cjs +27 -27
  113. package/dist/ColorHandle.css +42 -42
  114. package/dist/ColorHandle.mjs +27 -27
  115. package/dist/ColorSlider.cjs +109 -109
  116. package/dist/ColorSlider.cjs.map +1 -1
  117. package/dist/ColorSlider.css +52 -52
  118. package/dist/ColorSlider.css.map +1 -1
  119. package/dist/ColorSlider.mjs +109 -109
  120. package/dist/ColorSlider.mjs.map +1 -1
  121. package/dist/ColorSwatch.cjs +30 -30
  122. package/dist/ColorSwatch.cjs.map +1 -1
  123. package/dist/ColorSwatch.css +29 -29
  124. package/dist/ColorSwatch.css.map +1 -1
  125. package/dist/ColorSwatch.mjs +30 -30
  126. package/dist/ColorSwatch.mjs.map +1 -1
  127. package/dist/ColorSwatchPicker.cjs +30 -30
  128. package/dist/ColorSwatchPicker.css +48 -48
  129. package/dist/ColorSwatchPicker.mjs +30 -30
  130. package/dist/ColorWheel.cjs +31 -27
  131. package/dist/ColorWheel.cjs.map +1 -1
  132. package/dist/ColorWheel.css +17 -17
  133. package/dist/ColorWheel.css.map +1 -1
  134. package/dist/ColorWheel.mjs +31 -27
  135. package/dist/ColorWheel.mjs.map +1 -1
  136. package/dist/ComboBox.cjs +383 -383
  137. package/dist/ComboBox.cjs.map +1 -1
  138. package/dist/ComboBox.css +187 -187
  139. package/dist/ComboBox.css.map +1 -1
  140. package/dist/ComboBox.mjs +383 -383
  141. package/dist/ComboBox.mjs.map +1 -1
  142. package/dist/ContextualHelp.cjs +70 -41
  143. package/dist/ContextualHelp.cjs.map +1 -1
  144. package/dist/ContextualHelp.css +71 -71
  145. package/dist/ContextualHelp.css.map +1 -1
  146. package/dist/ContextualHelp.mjs +74 -46
  147. package/dist/ContextualHelp.mjs.map +1 -1
  148. package/dist/Cross.cjs +14 -14
  149. package/dist/Cross.css +10 -10
  150. package/dist/Cross.mjs +14 -14
  151. package/dist/CustomDialog.cjs +26 -26
  152. package/dist/CustomDialog.cjs.map +1 -1
  153. package/dist/CustomDialog.css +25 -25
  154. package/dist/CustomDialog.css.map +1 -1
  155. package/dist/CustomDialog.mjs +26 -26
  156. package/dist/CustomDialog.mjs.map +1 -1
  157. package/dist/Dash.cjs +10 -10
  158. package/dist/Dash.css +6 -6
  159. package/dist/Dash.mjs +10 -10
  160. package/dist/DateField.cjs +74 -74
  161. package/dist/DateField.cjs.map +1 -1
  162. package/dist/DateField.css +77 -77
  163. package/dist/DateField.css.map +1 -1
  164. package/dist/DateField.mjs +74 -74
  165. package/dist/DateField.mjs.map +1 -1
  166. package/dist/DatePicker.cjs +173 -173
  167. package/dist/DatePicker.cjs.map +1 -1
  168. package/dist/DatePicker.css +128 -128
  169. package/dist/DatePicker.css.map +1 -1
  170. package/dist/DatePicker.mjs +173 -173
  171. package/dist/DatePicker.mjs.map +1 -1
  172. package/dist/DateRangePicker.cjs +56 -56
  173. package/dist/DateRangePicker.cjs.map +1 -1
  174. package/dist/DateRangePicker.css +59 -59
  175. package/dist/DateRangePicker.css.map +1 -1
  176. package/dist/DateRangePicker.mjs +56 -56
  177. package/dist/DateRangePicker.mjs.map +1 -1
  178. package/dist/Dialog.cjs +17 -17
  179. package/dist/Dialog.cjs.map +1 -1
  180. package/dist/Dialog.css +70 -70
  181. package/dist/Dialog.css.map +1 -1
  182. package/dist/Dialog.mjs +17 -17
  183. package/dist/Dialog.mjs.map +1 -1
  184. package/dist/Disclosure.cjs +120 -120
  185. package/dist/Disclosure.cjs.map +1 -1
  186. package/dist/Disclosure.css +112 -112
  187. package/dist/Disclosure.css.map +1 -1
  188. package/dist/Disclosure.mjs +120 -120
  189. package/dist/Disclosure.mjs.map +1 -1
  190. package/dist/Divider.cjs +26 -26
  191. package/dist/Divider.cjs.map +1 -1
  192. package/dist/Divider.css +25 -25
  193. package/dist/Divider.css.map +1 -1
  194. package/dist/Divider.mjs +26 -26
  195. package/dist/Divider.mjs.map +1 -1
  196. package/dist/DropZone.cjs +62 -62
  197. package/dist/DropZone.cjs.map +1 -1
  198. package/dist/DropZone.css +57 -57
  199. package/dist/DropZone.css.map +1 -1
  200. package/dist/DropZone.mjs +62 -62
  201. package/dist/DropZone.mjs.map +1 -1
  202. package/dist/Field.cjs +351 -351
  203. package/dist/Field.cjs.map +1 -1
  204. package/dist/Field.css +147 -147
  205. package/dist/Field.css.map +1 -1
  206. package/dist/Field.mjs +351 -351
  207. package/dist/Field.mjs.map +1 -1
  208. package/dist/Form.cjs +10 -10
  209. package/dist/Form.cjs.map +1 -1
  210. package/dist/Form.css +9 -9
  211. package/dist/Form.css.map +1 -1
  212. package/dist/Form.mjs +10 -10
  213. package/dist/Form.mjs.map +1 -1
  214. package/dist/FullscreenDialog.cjs +5 -5
  215. package/dist/FullscreenDialog.cjs.map +1 -1
  216. package/dist/FullscreenDialog.css +78 -78
  217. package/dist/FullscreenDialog.css.map +1 -1
  218. package/dist/FullscreenDialog.mjs +5 -5
  219. package/dist/FullscreenDialog.mjs.map +1 -1
  220. package/dist/IllustratedMessage.cjs +229 -229
  221. package/dist/IllustratedMessage.css +72 -72
  222. package/dist/IllustratedMessage.mjs +229 -229
  223. package/dist/Image.cjs +14 -14
  224. package/dist/Image.css +14 -14
  225. package/dist/Image.mjs +14 -14
  226. package/dist/InlineAlert.cjs +101 -101
  227. package/dist/InlineAlert.css +76 -76
  228. package/dist/InlineAlert.mjs +101 -101
  229. package/dist/Link.cjs +50 -50
  230. package/dist/Link.cjs.map +1 -1
  231. package/dist/Link.css +41 -41
  232. package/dist/Link.css.map +1 -1
  233. package/dist/Link.mjs +50 -50
  234. package/dist/Link.mjs.map +1 -1
  235. package/dist/LinkOut.cjs +8 -8
  236. package/dist/LinkOut.css +8 -8
  237. package/dist/LinkOut.mjs +8 -8
  238. package/dist/ListView.cjs +777 -0
  239. package/dist/ListView.cjs.map +1 -0
  240. package/dist/ListView.css +740 -0
  241. package/dist/ListView.css.map +1 -0
  242. package/dist/ListView.mjs +770 -0
  243. package/dist/ListView.mjs.map +1 -0
  244. package/dist/Menu.cjs +540 -445
  245. package/dist/Menu.cjs.map +1 -1
  246. package/dist/Menu.css +234 -190
  247. package/dist/Menu.css.map +1 -1
  248. package/dist/Menu.mjs +541 -447
  249. package/dist/Menu.mjs.map +1 -1
  250. package/dist/Meter.cjs +154 -154
  251. package/dist/Meter.cjs.map +1 -1
  252. package/dist/Meter.css +91 -91
  253. package/dist/Meter.css.map +1 -1
  254. package/dist/Meter.mjs +154 -154
  255. package/dist/Meter.mjs.map +1 -1
  256. package/dist/Modal.cjs +66 -66
  257. package/dist/Modal.cjs.map +1 -1
  258. package/dist/Modal.css +54 -54
  259. package/dist/Modal.css.map +1 -1
  260. package/dist/Modal.mjs +66 -66
  261. package/dist/Modal.mjs.map +1 -1
  262. package/dist/NotificationBadge.cjs +57 -57
  263. package/dist/NotificationBadge.css +49 -49
  264. package/dist/NotificationBadge.mjs +57 -57
  265. package/dist/NumberField.cjs +115 -115
  266. package/dist/NumberField.cjs.map +1 -1
  267. package/dist/NumberField.css +99 -99
  268. package/dist/NumberField.css.map +1 -1
  269. package/dist/NumberField.mjs +115 -115
  270. package/dist/NumberField.mjs.map +1 -1
  271. package/dist/Picker.cjs +337 -285
  272. package/dist/Picker.cjs.map +1 -1
  273. package/dist/Picker.css +173 -173
  274. package/dist/Picker.css.map +1 -1
  275. package/dist/Picker.mjs +339 -287
  276. package/dist/Picker.mjs.map +1 -1
  277. package/dist/Popover.cjs +89 -89
  278. package/dist/Popover.cjs.map +1 -1
  279. package/dist/Popover.css +70 -70
  280. package/dist/Popover.css.map +1 -1
  281. package/dist/Popover.mjs +89 -89
  282. package/dist/Popover.mjs.map +1 -1
  283. package/dist/ProgressBar.cjs +164 -164
  284. package/dist/ProgressBar.cjs.map +1 -1
  285. package/dist/ProgressBar.css +99 -99
  286. package/dist/ProgressBar.css.map +1 -1
  287. package/dist/ProgressBar.mjs +164 -164
  288. package/dist/ProgressBar.mjs.map +1 -1
  289. package/dist/ProgressCircle.cjs +32 -32
  290. package/dist/ProgressCircle.cjs.map +1 -1
  291. package/dist/ProgressCircle.css +24 -24
  292. package/dist/ProgressCircle.css.map +1 -1
  293. package/dist/ProgressCircle.mjs +32 -32
  294. package/dist/ProgressCircle.mjs.map +1 -1
  295. package/dist/Provider.cjs +11 -11
  296. package/dist/Provider.css +10 -10
  297. package/dist/Provider.mjs +11 -11
  298. package/dist/Radio.cjs +146 -146
  299. package/dist/Radio.cjs.map +1 -1
  300. package/dist/Radio.css +78 -78
  301. package/dist/Radio.css.map +1 -1
  302. package/dist/Radio.mjs +146 -146
  303. package/dist/Radio.mjs.map +1 -1
  304. package/dist/RadioGroup.cjs +42 -42
  305. package/dist/RadioGroup.cjs.map +1 -1
  306. package/dist/RadioGroup.css +37 -37
  307. package/dist/RadioGroup.css.map +1 -1
  308. package/dist/RadioGroup.mjs +42 -42
  309. package/dist/RadioGroup.mjs.map +1 -1
  310. package/dist/RangeCalendar.cjs +8 -8
  311. package/dist/RangeCalendar.cjs.map +1 -1
  312. package/dist/RangeCalendar.css +10 -10
  313. package/dist/RangeCalendar.css.map +1 -1
  314. package/dist/RangeCalendar.mjs +8 -8
  315. package/dist/RangeCalendar.mjs.map +1 -1
  316. package/dist/SearchField.cjs +42 -42
  317. package/dist/SearchField.cjs.map +1 -1
  318. package/dist/SearchField.css +45 -45
  319. package/dist/SearchField.css.map +1 -1
  320. package/dist/SearchField.mjs +42 -42
  321. package/dist/SearchField.mjs.map +1 -1
  322. package/dist/SegmentedControl.cjs +180 -180
  323. package/dist/SegmentedControl.css +123 -123
  324. package/dist/SegmentedControl.mjs +180 -180
  325. package/dist/SelectBoxGroup.cjs +144 -144
  326. package/dist/SelectBoxGroup.cjs.map +1 -1
  327. package/dist/SelectBoxGroup.css +120 -120
  328. package/dist/SelectBoxGroup.css.map +1 -1
  329. package/dist/SelectBoxGroup.mjs +144 -144
  330. package/dist/SelectBoxGroup.mjs.map +1 -1
  331. package/dist/Slider.cjs +295 -295
  332. package/dist/Slider.cjs.map +1 -1
  333. package/dist/Slider.css +154 -154
  334. package/dist/Slider.css.map +1 -1
  335. package/dist/Slider.mjs +295 -295
  336. package/dist/Slider.mjs.map +1 -1
  337. package/dist/StatusLight.cjs +116 -116
  338. package/dist/StatusLight.css +59 -59
  339. package/dist/StatusLight.mjs +116 -116
  340. package/dist/Switch.cjs +155 -155
  341. package/dist/Switch.cjs.map +1 -1
  342. package/dist/Switch.css +74 -74
  343. package/dist/Switch.css.map +1 -1
  344. package/dist/Switch.mjs +155 -155
  345. package/dist/Switch.mjs.map +1 -1
  346. package/dist/TableView.cjs +448 -424
  347. package/dist/TableView.cjs.map +1 -1
  348. package/dist/TableView.css +232 -204
  349. package/dist/TableView.css.map +1 -1
  350. package/dist/TableView.mjs +450 -426
  351. package/dist/TableView.mjs.map +1 -1
  352. package/dist/Tabs.cjs +127 -127
  353. package/dist/Tabs.cjs.map +1 -1
  354. package/dist/Tabs.css +105 -105
  355. package/dist/Tabs.css.map +1 -1
  356. package/dist/Tabs.mjs +127 -127
  357. package/dist/Tabs.mjs.map +1 -1
  358. package/dist/TabsPicker.cjs +127 -127
  359. package/dist/TabsPicker.cjs.map +1 -1
  360. package/dist/TabsPicker.css +108 -108
  361. package/dist/TabsPicker.css.map +1 -1
  362. package/dist/TabsPicker.mjs +127 -127
  363. package/dist/TabsPicker.mjs.map +1 -1
  364. package/dist/TagGroup.cjs +204 -204
  365. package/dist/TagGroup.cjs.map +1 -1
  366. package/dist/TagGroup.css +146 -146
  367. package/dist/TagGroup.css.map +1 -1
  368. package/dist/TagGroup.mjs +204 -204
  369. package/dist/TagGroup.mjs.map +1 -1
  370. package/dist/TextField.cjs +59 -59
  371. package/dist/TextField.cjs.map +1 -1
  372. package/dist/TextField.css +54 -54
  373. package/dist/TextField.css.map +1 -1
  374. package/dist/TextField.mjs +59 -59
  375. package/dist/TextField.mjs.map +1 -1
  376. package/dist/TimeField.cjs +52 -52
  377. package/dist/TimeField.cjs.map +1 -1
  378. package/dist/TimeField.css +47 -47
  379. package/dist/TimeField.css.map +1 -1
  380. package/dist/TimeField.mjs +52 -52
  381. package/dist/TimeField.mjs.map +1 -1
  382. package/dist/Toast.cjs +121 -121
  383. package/dist/Toast.cjs.map +1 -1
  384. package/dist/Toast.css +110 -110
  385. package/dist/Toast.css.map +1 -1
  386. package/dist/Toast.mjs +122 -122
  387. package/dist/Toast.mjs.map +1 -1
  388. package/dist/ToggleButton.cjs +3 -3
  389. package/dist/ToggleButton.cjs.map +1 -1
  390. package/dist/ToggleButton.css +12 -12
  391. package/dist/ToggleButton.css.map +1 -1
  392. package/dist/ToggleButton.mjs +3 -3
  393. package/dist/ToggleButton.mjs.map +1 -1
  394. package/dist/ToggleButtonGroup.cjs.map +1 -1
  395. package/dist/ToggleButtonGroup.mjs.map +1 -1
  396. package/dist/Tooltip.cjs +78 -78
  397. package/dist/Tooltip.cjs.map +1 -1
  398. package/dist/Tooltip.css +65 -65
  399. package/dist/Tooltip.css.map +1 -1
  400. package/dist/Tooltip.mjs +78 -78
  401. package/dist/Tooltip.mjs.map +1 -1
  402. package/dist/TreeView.cjs +191 -141
  403. package/dist/TreeView.cjs.map +1 -1
  404. package/dist/TreeView.css +143 -127
  405. package/dist/TreeView.css.map +1 -1
  406. package/dist/TreeView.mjs +191 -141
  407. package/dist/TreeView.mjs.map +1 -1
  408. package/dist/ar-AE.cjs +1 -0
  409. package/dist/ar-AE.cjs.map +1 -1
  410. package/dist/ar-AE.mjs +1 -0
  411. package/dist/ar-AE.mjs.map +1 -1
  412. package/dist/bg-BG.cjs +1 -0
  413. package/dist/bg-BG.cjs.map +1 -1
  414. package/dist/bg-BG.mjs +1 -0
  415. package/dist/bg-BG.mjs.map +1 -1
  416. package/dist/cs-CZ.cjs +1 -0
  417. package/dist/cs-CZ.cjs.map +1 -1
  418. package/dist/cs-CZ.mjs +1 -0
  419. package/dist/cs-CZ.mjs.map +1 -1
  420. package/dist/da-DK.cjs +1 -0
  421. package/dist/da-DK.cjs.map +1 -1
  422. package/dist/da-DK.mjs +1 -0
  423. package/dist/da-DK.mjs.map +1 -1
  424. package/dist/de-DE.cjs +1 -0
  425. package/dist/de-DE.cjs.map +1 -1
  426. package/dist/de-DE.mjs +1 -0
  427. package/dist/de-DE.mjs.map +1 -1
  428. package/dist/el-GR.cjs +1 -0
  429. package/dist/el-GR.cjs.map +1 -1
  430. package/dist/el-GR.mjs +1 -0
  431. package/dist/el-GR.mjs.map +1 -1
  432. package/dist/en-US.cjs +1 -0
  433. package/dist/en-US.cjs.map +1 -1
  434. package/dist/en-US.mjs +1 -0
  435. package/dist/en-US.mjs.map +1 -1
  436. package/dist/es-ES.cjs +1 -0
  437. package/dist/es-ES.cjs.map +1 -1
  438. package/dist/es-ES.mjs +1 -0
  439. package/dist/es-ES.mjs.map +1 -1
  440. package/dist/et-EE.cjs +1 -0
  441. package/dist/et-EE.cjs.map +1 -1
  442. package/dist/et-EE.mjs +1 -0
  443. package/dist/et-EE.mjs.map +1 -1
  444. package/dist/fi-FI.cjs +1 -0
  445. package/dist/fi-FI.cjs.map +1 -1
  446. package/dist/fi-FI.mjs +1 -0
  447. package/dist/fi-FI.mjs.map +1 -1
  448. package/dist/fr-FR.cjs +1 -0
  449. package/dist/fr-FR.cjs.map +1 -1
  450. package/dist/fr-FR.mjs +1 -0
  451. package/dist/fr-FR.mjs.map +1 -1
  452. package/dist/he-IL.cjs +1 -0
  453. package/dist/he-IL.cjs.map +1 -1
  454. package/dist/he-IL.mjs +1 -0
  455. package/dist/he-IL.mjs.map +1 -1
  456. package/dist/hr-HR.cjs +1 -0
  457. package/dist/hr-HR.cjs.map +1 -1
  458. package/dist/hr-HR.mjs +1 -0
  459. package/dist/hr-HR.mjs.map +1 -1
  460. package/dist/hu-HU.cjs +1 -0
  461. package/dist/hu-HU.cjs.map +1 -1
  462. package/dist/hu-HU.mjs +1 -0
  463. package/dist/hu-HU.mjs.map +1 -1
  464. package/dist/it-IT.cjs +1 -0
  465. package/dist/it-IT.cjs.map +1 -1
  466. package/dist/it-IT.mjs +1 -0
  467. package/dist/it-IT.mjs.map +1 -1
  468. package/dist/ja-JP.cjs +1 -0
  469. package/dist/ja-JP.cjs.map +1 -1
  470. package/dist/ja-JP.mjs +1 -0
  471. package/dist/ja-JP.mjs.map +1 -1
  472. package/dist/ko-KR.cjs +1 -0
  473. package/dist/ko-KR.cjs.map +1 -1
  474. package/dist/ko-KR.mjs +1 -0
  475. package/dist/ko-KR.mjs.map +1 -1
  476. package/dist/lt-LT.cjs +1 -0
  477. package/dist/lt-LT.cjs.map +1 -1
  478. package/dist/lt-LT.mjs +1 -0
  479. package/dist/lt-LT.mjs.map +1 -1
  480. package/dist/lv-LV.cjs +1 -0
  481. package/dist/lv-LV.cjs.map +1 -1
  482. package/dist/lv-LV.mjs +1 -0
  483. package/dist/lv-LV.mjs.map +1 -1
  484. package/dist/main.cjs +7 -0
  485. package/dist/main.cjs.map +1 -1
  486. package/dist/module.mjs +5 -3
  487. package/dist/module.mjs.map +1 -1
  488. package/dist/nb-NO.cjs +1 -0
  489. package/dist/nb-NO.cjs.map +1 -1
  490. package/dist/nb-NO.mjs +1 -0
  491. package/dist/nb-NO.mjs.map +1 -1
  492. package/dist/nl-NL.cjs +1 -0
  493. package/dist/nl-NL.cjs.map +1 -1
  494. package/dist/nl-NL.mjs +1 -0
  495. package/dist/nl-NL.mjs.map +1 -1
  496. package/dist/pl-PL.cjs +1 -0
  497. package/dist/pl-PL.cjs.map +1 -1
  498. package/dist/pl-PL.mjs +1 -0
  499. package/dist/pl-PL.mjs.map +1 -1
  500. package/dist/pt-BR.cjs +1 -0
  501. package/dist/pt-BR.cjs.map +1 -1
  502. package/dist/pt-BR.mjs +1 -0
  503. package/dist/pt-BR.mjs.map +1 -1
  504. package/dist/pt-PT.cjs +1 -0
  505. package/dist/pt-PT.cjs.map +1 -1
  506. package/dist/pt-PT.mjs +1 -0
  507. package/dist/pt-PT.mjs.map +1 -1
  508. package/dist/ro-RO.cjs +1 -0
  509. package/dist/ro-RO.cjs.map +1 -1
  510. package/dist/ro-RO.mjs +1 -0
  511. package/dist/ro-RO.mjs.map +1 -1
  512. package/dist/ru-RU.cjs +1 -0
  513. package/dist/ru-RU.cjs.map +1 -1
  514. package/dist/ru-RU.mjs +1 -0
  515. package/dist/ru-RU.mjs.map +1 -1
  516. package/dist/sk-SK.cjs +1 -0
  517. package/dist/sk-SK.cjs.map +1 -1
  518. package/dist/sk-SK.mjs +1 -0
  519. package/dist/sk-SK.mjs.map +1 -1
  520. package/dist/sl-SI.cjs +1 -0
  521. package/dist/sl-SI.cjs.map +1 -1
  522. package/dist/sl-SI.mjs +1 -0
  523. package/dist/sl-SI.mjs.map +1 -1
  524. package/dist/sr-SP.cjs +1 -0
  525. package/dist/sr-SP.cjs.map +1 -1
  526. package/dist/sr-SP.mjs +1 -0
  527. package/dist/sr-SP.mjs.map +1 -1
  528. package/dist/sv-SE.cjs +1 -0
  529. package/dist/sv-SE.cjs.map +1 -1
  530. package/dist/sv-SE.mjs +1 -0
  531. package/dist/sv-SE.mjs.map +1 -1
  532. package/dist/tr-TR.cjs +1 -0
  533. package/dist/tr-TR.cjs.map +1 -1
  534. package/dist/tr-TR.mjs +1 -0
  535. package/dist/tr-TR.mjs.map +1 -1
  536. package/dist/types.d.ts +143 -76
  537. package/dist/types.d.ts.map +1 -1
  538. package/dist/uk-UA.cjs +1 -0
  539. package/dist/uk-UA.cjs.map +1 -1
  540. package/dist/uk-UA.mjs +1 -0
  541. package/dist/uk-UA.mjs.map +1 -1
  542. package/dist/zh-CN.cjs +1 -0
  543. package/dist/zh-CN.cjs.map +1 -1
  544. package/dist/zh-CN.mjs +1 -0
  545. package/dist/zh-CN.mjs.map +1 -1
  546. package/dist/zh-TW.cjs +1 -0
  547. package/dist/zh-TW.cjs.map +1 -1
  548. package/dist/zh-TW.mjs +1 -0
  549. package/dist/zh-TW.mjs.map +1 -1
  550. package/icons/Icon.cjs +12 -12
  551. package/icons/Icon.css +9 -9
  552. package/icons/Icon.mjs +12 -12
  553. package/icons/Skeleton.cjs +2 -2
  554. package/icons/Skeleton.cjs.map +1 -1
  555. package/icons/Skeleton.css +6 -6
  556. package/icons/Skeleton.mjs +2 -2
  557. package/icons/Skeleton.mjs.map +1 -1
  558. package/icons/runtime.cjs +16 -3
  559. package/icons/runtime.cjs.map +1 -1
  560. package/icons/runtime.mjs +16 -3
  561. package/icons/runtime.mjs.map +1 -1
  562. package/package.json +21 -21
  563. package/src/Accordion.tsx +1 -1
  564. package/src/ActionBar.tsx +2 -2
  565. package/src/ActionButton.tsx +1 -1
  566. package/src/Breadcrumbs.tsx +2 -2
  567. package/src/Button.tsx +2 -2
  568. package/src/Calendar.tsx +1 -1
  569. package/src/Card.tsx +1 -1
  570. package/src/CardView.tsx +1 -1
  571. package/src/Checkbox.tsx +2 -1
  572. package/src/CheckboxGroup.tsx +1 -1
  573. package/src/CoachMark.tsx +1 -1
  574. package/src/ColorArea.tsx +1 -1
  575. package/src/ColorField.tsx +1 -1
  576. package/src/ColorSlider.tsx +1 -1
  577. package/src/ColorSwatch.tsx +1 -1
  578. package/src/ColorWheel.tsx +2 -2
  579. package/src/ComboBox.tsx +4 -3
  580. package/src/ContextualHelp.tsx +81 -43
  581. package/src/CustomDialog.tsx +1 -1
  582. package/src/DateField.tsx +1 -1
  583. package/src/DatePicker.tsx +1 -1
  584. package/src/DateRangePicker.tsx +1 -1
  585. package/src/Dialog.tsx +1 -1
  586. package/src/Disclosure.tsx +2 -2
  587. package/src/Divider.tsx +1 -1
  588. package/src/DropZone.tsx +1 -1
  589. package/src/Field.tsx +6 -6
  590. package/src/Form.tsx +1 -1
  591. package/src/FullscreenDialog.tsx +1 -1
  592. package/src/Link.tsx +1 -1
  593. package/src/ListView.tsx +782 -0
  594. package/src/Menu.tsx +111 -29
  595. package/src/Meter.tsx +1 -1
  596. package/src/Modal.tsx +1 -1
  597. package/src/NumberField.tsx +1 -1
  598. package/src/Picker.tsx +75 -14
  599. package/src/Popover.tsx +2 -1
  600. package/src/ProgressBar.tsx +1 -1
  601. package/src/ProgressCircle.tsx +1 -1
  602. package/src/Radio.tsx +1 -1
  603. package/src/RadioGroup.tsx +1 -1
  604. package/src/RangeCalendar.tsx +1 -1
  605. package/src/SearchField.tsx +1 -1
  606. package/src/SelectBoxGroup.tsx +1 -1
  607. package/src/Slider.tsx +1 -1
  608. package/src/Switch.tsx +1 -1
  609. package/src/TableView.tsx +37 -19
  610. package/src/Tabs.tsx +4 -4
  611. package/src/TabsPicker.tsx +2 -2
  612. package/src/TagGroup.tsx +2 -2
  613. package/src/TextField.tsx +1 -1
  614. package/src/TimeField.tsx +1 -1
  615. package/src/Toast.tsx +3 -3
  616. package/src/ToggleButton.tsx +1 -1
  617. package/src/ToggleButtonGroup.tsx +1 -1
  618. package/src/Tooltip.tsx +1 -1
  619. package/src/TreeView.tsx +53 -12
  620. package/src/index.ts +6 -3
  621. package/style/__tests__/mergeStyles.test.ts +68 -0
  622. package/style/__tests__/style-macro.test.js +50 -30
  623. package/style/dist/style-macro.cjs +65 -14
  624. package/style/dist/style-macro.cjs.map +1 -1
  625. package/style/dist/style-macro.mjs +65 -14
  626. package/style/dist/style-macro.mjs.map +1 -1
  627. package/style/runtime.ts +21 -5
  628. package/style/style-macro.ts +81 -16
  629. package/style/__tests__/mergeStyles.test.js +0 -32
package/src/Menu.tsx CHANGED
@@ -34,21 +34,25 @@ import {centerBaseline} from './CenterBaseline';
34
34
  import {centerPadding, control, controlFont, controlSize, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
35
35
  import CheckmarkIcon from '../ui-icons/Checkmark';
36
36
  import ChevronRightIcon from '../ui-icons/Chevron';
37
- import {createContext, forwardRef, JSX, ReactNode, useContext, useRef, useState} from 'react';
37
+ import {createContext, forwardRef, JSX, ReactElement, ReactNode, useContext, useRef, useState} from 'react';
38
38
  import {divider} from './Divider';
39
39
  import {DOMRef, DOMRefValue, GlobalDOMAttributes, PressEvent} from '@react-types/shared';
40
40
  import {edgeToText} from '../style/spectrum-theme' with {type: 'macro'};
41
41
  import {forwardRefType} from './types';
42
42
  import {HeaderContext, HeadingContext, KeyboardContext, Text, TextContext} from './Content';
43
- import {IconContext} from './Icon'; // chevron right removed??
44
- import {ImageContext} from './Image';
43
+ import {IconContext} from './Icon';
44
+ import {ImageContext} from './Image'; // chevron right removed??
45
+ import InfoCircleIcon from '../s2wf-icons/S2_Icon_InfoCircle_20_N.svg';
45
46
  import {InPopoverContext, Popover, PopoverContext} from './Popover';
47
+ // @ts-ignore
48
+ import intlMessages from '../intl/*.json';
46
49
  import LinkOutIcon from '../ui-icons/LinkOut';
47
50
  import {mergeStyles} from '../style/runtime';
48
51
  import {Placement, useLocale} from 'react-aria';
49
52
  import {PressResponder} from '@react-aria/interactions';
50
53
  import {pressScale} from './pressScale';
51
- import {useGlobalListeners} from '@react-aria/utils';
54
+ import {useGlobalListeners, useId} from '@react-aria/utils';
55
+ import {useLocalizedStringFormatter} from '@react-aria/i18n';
52
56
  import {useSpectrumContextProps} from './useSpectrumContextProps';
53
57
  // viewbox on LinkOut is super weird just because i copied the icon from designs...
54
58
  // need to strip id's from icons
@@ -74,7 +78,7 @@ export interface MenuTriggerProps extends AriaMenuTriggerProps {
74
78
  shouldFlip?: boolean
75
79
  }
76
80
 
77
- export interface MenuProps<T> extends Omit<AriaMenuProps<T>, 'children' | 'style' | 'className' | 'dependencies' | 'renderEmptyState' | keyof GlobalDOMAttributes>, StyleProps {
81
+ export interface MenuProps<T> extends Omit<AriaMenuProps<T>, 'children' | 'style' | 'className' | 'render' | 'dependencies' | 'renderEmptyState' | keyof GlobalDOMAttributes>, StyleProps {
78
82
  /**
79
83
  * The size of the Menu.
80
84
  *
@@ -317,6 +321,7 @@ let keyboard = style<{size: 'S' | 'M' | 'L' | 'XL', isDisabled: boolean}>({
317
321
 
318
322
  let descriptor = style({
319
323
  gridArea: 'descriptor',
324
+ placeSelf: 'end',
320
325
  marginStart: 8,
321
326
  '--iconPrimary': {
322
327
  type: 'fill',
@@ -324,6 +329,19 @@ let descriptor = style({
324
329
  }
325
330
  });
326
331
 
332
+ let descriptorIcon = style<{size: 'S' | 'M' | 'L' | 'XL'}>({
333
+ marginEnd: 0,
334
+ display: 'block',
335
+ size: {
336
+ size: {
337
+ S: 16,
338
+ M: 20,
339
+ L: 24,
340
+ XL: 26
341
+ }
342
+ }
343
+ });
344
+
327
345
  let InternalMenuContext = createContext<{size: 'S' | 'M' | 'L' | 'XL', isSubmenu: boolean, hideLinkOutIcon: boolean}>({
328
346
  size: 'M',
329
347
  isSubmenu: false,
@@ -331,6 +349,7 @@ let InternalMenuContext = createContext<{size: 'S' | 'M' | 'L' | 'XL', isSubmenu
331
349
  });
332
350
 
333
351
  let InternalMenuTriggerContext = createContext<Omit<MenuTriggerProps, 'children'> | null>(null);
352
+ let UnavailableContext = createContext(false);
334
353
 
335
354
  let wrappingDiv = style({
336
355
  display: 'flex',
@@ -421,12 +440,8 @@ export function Divider(props: SeparatorProps): ReactNode {
421
440
  );
422
441
  }
423
442
 
424
- export interface MenuSectionProps<T extends object> extends Omit<AriaMenuSectionProps<T>, 'style' | 'className' | keyof GlobalDOMAttributes> {
425
- /**
426
- * The children of the menu section.
427
- */
428
- children?: ReactNode
429
- }
443
+ export interface MenuSectionProps<T extends object> extends Omit<AriaMenuSectionProps<T>, 'style' | 'className' | 'render' | keyof GlobalDOMAttributes> {}
444
+
430
445
  export function MenuSection<T extends object>(props: MenuSectionProps<T>): ReactNode {
431
446
  // remember, context doesn't work if it's around Section nor inside
432
447
  let {size} = useContext(InternalMenuContext);
@@ -442,7 +457,7 @@ export function MenuSection<T extends object>(props: MenuSectionProps<T>): React
442
457
  );
443
458
  }
444
459
 
445
- export interface MenuItemProps extends Omit<AriaMenuItemProps, 'children' | 'style' | 'className' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {
460
+ export interface MenuItemProps extends Omit<AriaMenuItemProps, 'children' | 'style' | 'className' | 'render' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {
446
461
  /**
447
462
  * The contents of the item.
448
463
  */
@@ -463,6 +478,33 @@ const linkIconSize = {
463
478
  XL: 'XL'
464
479
  } as const;
465
480
 
481
+ interface UnavailableIconWrapperProps {
482
+ direction: 'ltr' | 'rtl',
483
+ size: 'S' | 'M' | 'L' | 'XL',
484
+ id?: string
485
+ }
486
+
487
+ function UnavailableIconWrapper(props: UnavailableIconWrapperProps) {
488
+ let {direction, size, id} = props;
489
+ let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');
490
+
491
+ return (
492
+ <div slot="descriptor" className={mergeStyles(descriptor, style({marginBottom: fontRelative(-1)}))} id={id}>
493
+ <Provider values={[[IconContext, {slots: {icon: {styles: descriptorIcon({size})}}}]]}>
494
+ <InfoCircleIcon
495
+ aria-label={stringFormatter.format('menu.unavailable')}
496
+ className={style({
497
+ scaleX: {
498
+ direction: {
499
+ rtl: -1
500
+ }
501
+ }
502
+ })({direction})} />
503
+ </Provider>
504
+ </div>
505
+ );
506
+ }
507
+
466
508
  export function MenuItem(props: MenuItemProps): ReactNode {
467
509
  let ref = useRef(null);
468
510
  let isLink = props.href != null;
@@ -470,9 +512,13 @@ export function MenuItem(props: MenuItemProps): ReactNode {
470
512
  let {size, hideLinkOutIcon} = useContext(InternalMenuContext);
471
513
  let textValue = props.textValue || (typeof props.children === 'string' ? props.children : undefined);
472
514
  let {direction} = useLocale();
515
+ let isUnavailable = useContext(UnavailableContext);
516
+ let infoIconId = useId();
517
+
473
518
  return (
474
519
  <AriaMenuItem
475
520
  {...props}
521
+ aria-describedby={isUnavailable ? infoIconId : undefined}
476
522
  textValue={textValue}
477
523
  ref={ref}
478
524
  style={pressScale(ref, props.UNSAFE_style)}
@@ -522,17 +568,21 @@ export function MenuItem(props: MenuItemProps): ReactNode {
522
568
  </div>
523
569
  )}
524
570
  {renderProps.hasSubmenu && (
525
- <div slot="descriptor" className={descriptor}>
526
- <ChevronRightIcon
527
- size={size}
528
- className={style({
529
- scaleX: {
530
- direction: {
531
- rtl: -1
532
- }
533
- }
534
- })({direction})} />
535
- </div>
571
+ isUnavailable
572
+ ? <UnavailableIconWrapper direction={direction} size={size} id={infoIconId} />
573
+ : (
574
+ <div slot="descriptor" className={descriptor}>
575
+ <ChevronRightIcon
576
+ size={size}
577
+ className={style({
578
+ scaleX: {
579
+ direction: {
580
+ rtl: -1
581
+ }
582
+ }
583
+ })({direction})} />
584
+ </div>
585
+ )
536
586
  )}
537
587
  </Provider>
538
588
  </>
@@ -587,11 +637,13 @@ function MenuTrigger(props: MenuTriggerProps): ReactNode {
587
637
  shouldFlip: props.shouldFlip
588
638
  }}>
589
639
  <PopoverContext.Provider value={{hideArrow: true, offset: 8, crossOffset: 0, placement, shouldFlip}}>
590
- <AriaMenuTrigger {...props}>
591
- <PressResponder onPressStart={onPressStart} isPressed={isPressed}>
592
- {props.children}
593
- </PressResponder>
594
- </AriaMenuTrigger>
640
+ <InPopoverContext.Provider value={false}>
641
+ <AriaMenuTrigger {...props}>
642
+ <PressResponder onPressStart={onPressStart} isPressed={isPressed}>
643
+ {props.children}
644
+ </PressResponder>
645
+ </AriaMenuTrigger>
646
+ </InPopoverContext.Provider>
595
647
  </PopoverContext.Provider>
596
648
  </InternalMenuTriggerContext.Provider>
597
649
  );
@@ -613,7 +665,37 @@ function SubmenuTrigger(props: SubmenuTriggerProps): JSX.Element {
613
665
  );
614
666
  }
615
667
 
616
- export {MenuTrigger, SubmenuTrigger};
668
+ export interface UnavailableMenuItemTriggerProps {
669
+ /**
670
+ * The contents of the UnavailableMenuItemTrigger. The first child should be a MenuItem and the second child be a ContextualHelpPopover.
671
+ */
672
+ children: ReactElement[],
673
+ /**
674
+ * Whether the menu item is currently unavailable.
675
+ * @default false
676
+ */
677
+ isUnavailable?: boolean
678
+ }
679
+
680
+ function UnavailableMenuItemTrigger(props: UnavailableMenuItemTriggerProps): JSX.Element {
681
+ let {isUnavailable = false, children} = props;
682
+ if (isUnavailable) {
683
+ return (
684
+ <UnavailableContext.Provider value={isUnavailable}>
685
+ <AriaSubmenuTrigger>
686
+ {children[0]}
687
+ <PopoverContext.Provider value={{hideArrow: true, offset: -2, crossOffset: -8, placement: 'end top'}}>
688
+ {children[1]}
689
+ </PopoverContext.Provider>
690
+ </AriaSubmenuTrigger>
691
+ </UnavailableContext.Provider>
692
+ );
693
+ }
694
+
695
+ return children[0] as JSX.Element;
696
+ }
697
+
698
+ export {MenuTrigger, SubmenuTrigger, UnavailableMenuItemTrigger};
617
699
 
618
700
  // This is purely so that storybook generates the types for both Menu and MenuTrigger
619
701
  interface ICombined<T extends object> extends MenuProps<T>, Omit<MenuTriggerProps, 'children'> {}
package/src/Meter.tsx CHANGED
@@ -48,7 +48,7 @@ interface MeterStyleProps {
48
48
  labelPosition?: LabelPosition
49
49
  }
50
50
 
51
- export interface MeterProps extends Omit<AriaMeterProps, 'children' | 'className' | 'style' | keyof GlobalDOMAttributes>, MeterStyleProps, StyleProps {
51
+ export interface MeterProps extends Omit<AriaMeterProps, 'children' | 'className' | 'style' | 'render' | keyof GlobalDOMAttributes>, MeterStyleProps, StyleProps {
52
52
  /** The content to display as the label. */
53
53
  label?: ReactNode
54
54
  }
package/src/Modal.tsx CHANGED
@@ -18,7 +18,7 @@ import {ModalOverlay, ModalOverlayProps, Modal as RACModal, useLocale} from 'rea
18
18
  import {style} from '../style' with {type: 'macro'};
19
19
  import {useDOMRef} from '@react-spectrum/utils';
20
20
 
21
- interface ModalProps extends Omit<ModalOverlayProps, 'className' | 'style' | keyof GlobalDOMAttributes> {
21
+ interface ModalProps extends Omit<ModalOverlayProps, 'className' | 'style' | 'render' | keyof GlobalDOMAttributes> {
22
22
  /**
23
23
  * The size of the Modal.
24
24
  *
@@ -38,7 +38,7 @@ import {useSpectrumContextProps} from './useSpectrumContextProps';
38
38
 
39
39
 
40
40
  export interface NumberFieldProps extends
41
- Omit<AriaNumberFieldProps, 'children' | 'className' | 'style' | keyof GlobalDOMAttributes>,
41
+ Omit<AriaNumberFieldProps, 'children' | 'className' | 'style' | 'render' | keyof GlobalDOMAttributes>,
42
42
  StyleProps,
43
43
  SpectrumLabelableProps,
44
44
  HelpTextProps,
package/src/Picker.tsx CHANGED
@@ -29,6 +29,7 @@ import {
29
29
  ListLayout,
30
30
  Provider,
31
31
  SectionProps,
32
+ SelectStateContext,
32
33
  SelectValue,
33
34
  Virtualizer
34
35
  } from 'react-aria-components';
@@ -50,6 +51,7 @@ import CheckmarkIcon from '../ui-icons/Checkmark';
50
51
  import ChevronIcon from '../ui-icons/Chevron';
51
52
  import {control, controlBorderRadius, controlFont, field, fieldInput, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
52
53
  import {createHideableComponent} from '@react-aria/collections';
54
+ import {createShadowTreeWalker, getOwnerDocument, isFocusable, useGlobalListeners, useSlotId} from '@react-aria/utils';
53
55
  import {
54
56
  Divider,
55
57
  listbox,
@@ -76,9 +78,8 @@ import {PressResponder} from '@react-aria/interactions';
76
78
  import {pressScale} from './pressScale';
77
79
  import {ProgressCircle} from './ProgressCircle';
78
80
  import {raw} from '../style/style-macro' with {type: 'macro'};
79
- import React, {createContext, forwardRef, ReactNode, useContext, useMemo, useRef, useState} from 'react';
81
+ import React, {createContext, forwardRef, ReactNode, useContext, useEffect, useMemo, useRef, useState} from 'react';
80
82
  import {useFocusableRef} from '@react-spectrum/utils';
81
- import {useGlobalListeners, useSlotId} from '@react-aria/utils';
82
83
  import {useLocale, useLocalizedStringFormatter} from '@react-aria/i18n';
83
84
  import {useScale} from './utils';
84
85
  import {useSpectrumContextProps} from './useSpectrumContextProps';
@@ -98,7 +99,7 @@ export interface PickerStyleProps {
98
99
 
99
100
  type SelectionMode = 'single' | 'multiple';
100
101
  export interface PickerProps<T extends object, M extends SelectionMode = 'single'> extends
101
- Omit<AriaSelectProps<T, M>, 'children' | 'style' | 'className' | 'allowsEmptyCollection' | keyof GlobalDOMAttributes>,
102
+ Omit<AriaSelectProps<T, M>, 'children' | 'style' | 'className' | 'render' | 'allowsEmptyCollection' | keyof GlobalDOMAttributes>,
102
103
  PickerStyleProps,
103
104
  StyleProps,
104
105
  SpectrumLabelableProps,
@@ -123,7 +124,13 @@ export interface PickerProps<T extends object, M extends SelectionMode = 'single
123
124
  /** Width of the menu. By default, matches width of the trigger. Note that the minimum width of the dropdown is always equal to the trigger's width. */
124
125
  menuWidth?: number,
125
126
  /** The current loading state of the Picker. */
126
- loadingState?: LoadingState
127
+ loadingState?: LoadingState,
128
+ /**
129
+ * Custom renderer for the picker value. Allows one to provide a custom element to render selected items.
130
+ *
131
+ * @note The returned ReactNode should not have interactable elements as it will break accessibility.
132
+ */
133
+ renderValue?: (selectedItems: T[]) => ReactNode
127
134
  }
128
135
 
129
136
  interface PickerButtonProps extends PickerStyleProps, ButtonRenderProps {}
@@ -227,7 +234,8 @@ const valueStyles = style({
227
234
  },
228
235
  truncate: true,
229
236
  display: 'flex',
230
- alignItems: 'center'
237
+ alignItems: 'center',
238
+ height: '100%'
231
239
  });
232
240
 
233
241
  const iconStyles = style({
@@ -298,6 +306,7 @@ export const Picker = /*#__PURE__*/ (forwardRef as forwardRefType)(function Pick
298
306
  placeholder = stringFormatter.format('picker.placeholder'),
299
307
  isQuiet,
300
308
  loadingState,
309
+ renderValue,
301
310
  onLoadMore,
302
311
  ...pickerProps
303
312
  } = props;
@@ -376,6 +385,7 @@ export const Picker = /*#__PURE__*/ (forwardRef as forwardRefType)(function Pick
376
385
  </FieldLabel>
377
386
  <PickerButton
378
387
  loadingState={loadingState}
388
+ renderValue={renderValue}
379
389
  isOpen={isOpen}
380
390
  isQuiet={isQuiet}
381
391
  isFocusVisible={isFocusVisible}
@@ -482,7 +492,14 @@ const avatarSize = {
482
492
  XL: 26
483
493
  } as const;
484
494
 
485
- interface PickerButtonInnerProps<T extends object> extends PickerStyleProps, Omit<AriaSelectRenderProps, 'isRequired' | 'isFocused'>, Pick<PickerProps<T>, 'loadingState'> {
495
+ // https://w3c.github.io/aria/#widget_roles
496
+ let INTERACTIVE_ARIA_ROLES = new Set([
497
+ 'application', 'button', 'checkbox', 'combobox', 'gridcell', 'link', 'menuitem',
498
+ 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'searchbox', 'separator',
499
+ 'slider', 'spinbutton', 'switch', 'tab', 'textbox', 'treeitem'
500
+ ]);
501
+
502
+ interface PickerButtonInnerProps<T extends object> extends PickerStyleProps, Omit<AriaSelectRenderProps, 'isRequired' | 'isFocused'>, Pick<PickerProps<T>, 'loadingState' | 'renderValue'> {
486
503
  loadingCircle: ReactNode,
487
504
  buttonRef: RefObject<HTMLButtonElement | null>
488
505
  }
@@ -498,9 +515,40 @@ const PickerButton = createHideableComponent(function PickerButton<T extends obj
498
515
  isDisabled,
499
516
  loadingState,
500
517
  loadingCircle,
501
- buttonRef
518
+ buttonRef,
519
+ renderValue
502
520
  } = props;
503
521
  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');
522
+ let renderValueRef = useRef(null);
523
+
524
+ let state = useContext(SelectStateContext)!;
525
+ useEffect(() => {
526
+ if (process.env.NODE_ENV === 'production' || !renderValue) {
527
+ return;
528
+ }
529
+
530
+ if (!renderValueRef.current) {
531
+ return;
532
+ }
533
+
534
+ let doc = getOwnerDocument(renderValueRef.current);
535
+ let walker = createShadowTreeWalker(
536
+ doc,
537
+ renderValueRef.current,
538
+ NodeFilter.SHOW_ELEMENT,
539
+ {
540
+ acceptNode(node: Element) {
541
+ let role = node.getAttribute('role');
542
+ let interactive = isFocusable(node) || (role != null && INTERACTIVE_ARIA_ROLES.has(role));
543
+ return interactive ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
544
+ }
545
+ }
546
+ );
547
+ let next = walker.nextNode();
548
+ if (next) {
549
+ console.warn('Picker\'s value should not have interactive children for accessibility.');
550
+ }
551
+ }, [state.selectedItems, renderValue]);
504
552
 
505
553
  // For mouse interactions, pickers open on press start. When the popover underlay appears
506
554
  // it covers the trigger button, causing onPressEnd to fire immediately and no press scaling
@@ -533,8 +581,20 @@ const PickerButton = createHideableComponent(function PickerButton<T extends obj
533
581
  })}>
534
582
  {(renderProps) => (
535
583
  <>
536
- <SelectValue className={valueStyles({isQuiet}) + ' ' + raw('&> :not([slot=icon], [slot=avatar], [slot=label], [data-slot=label]) {display: none;}')}>
584
+ <SelectValue
585
+ className={
586
+ valueStyles({isQuiet}) +
587
+ (renderValue ? '' : ' ' + raw('&> :not([slot=icon], [slot=avatar], [slot=label], [data-slot=label]) {display: none;}'))
588
+ }>
537
589
  {({selectedItems, defaultChildren}) => {
590
+ const selectedValues = selectedItems.filter((item): item is T => item != null);
591
+ const defaultRenderedValue = selectedItems.length <= 1
592
+ ? defaultChildren
593
+ : <Text slot="label">{stringFormatter.format('picker.selectedCount', {count: selectedItems.length})}</Text>;
594
+ const renderedValue = selectedItems.length > 0 && renderValue
595
+ ? renderValue(selectedValues)
596
+ : defaultRenderedValue;
597
+
538
598
  return (
539
599
  <Provider
540
600
  values={[
@@ -579,10 +639,11 @@ const PickerButton = createHideableComponent(function PickerButton<T extends obj
579
639
  }],
580
640
  [InsideSelectValueContext, true]
581
641
  ]}>
582
- {selectedItems.length <= 1
583
- ? defaultChildren
584
- : <Text slot="label">{stringFormatter.format('picker.selectedCount', {count: selectedItems.length})}</Text>
585
- }
642
+ {renderValue ? (
643
+ <div ref={renderValueRef} style={{display: 'contents'}}>
644
+ {renderedValue}
645
+ </div>
646
+ ) : renderedValue}
586
647
  </Provider>
587
648
  );
588
649
  }}
@@ -604,7 +665,7 @@ const PickerButton = createHideableComponent(function PickerButton<T extends obj
604
665
  );
605
666
  });
606
667
 
607
- export interface PickerItemProps extends Omit<ListBoxItemProps, 'children' | 'style' | 'className' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {
668
+ export interface PickerItemProps extends Omit<ListBoxItemProps, 'children' | 'style' | 'className' | 'render' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {
608
669
  children: ReactNode
609
670
  }
610
671
 
@@ -675,7 +736,7 @@ function DefaultProvider({context, value, children}: {context: React.Context<any
675
736
  return <context.Provider value={value}>{children}</context.Provider>;
676
737
  }
677
738
 
678
- export interface PickerSectionProps<T extends object> extends Omit<SectionProps<T>, 'style' | 'className' | keyof GlobalDOMAttributes>, StyleProps {}
739
+ export interface PickerSectionProps<T extends object> extends Omit<SectionProps<T>, 'style' | 'className' | 'render' | keyof GlobalDOMAttributes>, StyleProps {}
679
740
  export function PickerSection<T extends object>(props: PickerSectionProps<T>): ReactNode {
680
741
  let {size} = useContext(InternalPickerContext);
681
742
  return (
package/src/Popover.tsx CHANGED
@@ -40,6 +40,7 @@ export interface PopoverProps extends UnsafeStyles, Omit<AriaPopoverProps,
40
40
  'shouldUpdatePosition' |
41
41
  'style' |
42
42
  'className' |
43
+ 'render' |
43
44
  keyof GlobalDOMAttributes
44
45
  > {
45
46
  /**
@@ -255,7 +256,7 @@ export interface PopoverDialogProps extends Pick<PopoverProps,
255
256
  'triggerRef' |
256
257
  'isOpen' |
257
258
  'onOpenChange'
258
- >, Omit<DialogProps, 'children' | 'className' | 'style' | keyof GlobalDOMAttributes>, UnsafeStyles {
259
+ >, Omit<DialogProps, 'children' | 'className' | 'style' | 'render' | keyof GlobalDOMAttributes>, UnsafeStyles {
259
260
  /**
260
261
  * The children of the popover.
261
262
  */
@@ -50,7 +50,7 @@ interface ProgressBarStyleProps {
50
50
 
51
51
  }
52
52
 
53
- export interface ProgressBarProps extends Omit<AriaProgressBarProps, 'children' | 'className' | 'style' | keyof GlobalDOMAttributes>, ProgressBarStyleProps, StyleProps {
53
+ export interface ProgressBarProps extends Omit<AriaProgressBarProps, 'children' | 'className' | 'style' | 'render' | keyof GlobalDOMAttributes>, ProgressBarStyleProps, StyleProps {
54
54
  /** The content to display as the label. */
55
55
  label?: ReactNode
56
56
  }
@@ -104,7 +104,7 @@ const hcmStroke = style({
104
104
  }
105
105
  });
106
106
 
107
- export interface ProgressCircleProps extends Omit<RACProgressBarProps, 'children' | 'style' | 'valueLabel' | 'formatOptions' | 'label' | 'className' | keyof GlobalDOMAttributes>, ProgressCircleStyleProps, UnsafeStyles {
107
+ export interface ProgressCircleProps extends Omit<RACProgressBarProps, 'children' | 'style' | 'valueLabel' | 'formatOptions' | 'label' | 'className' | 'render' | keyof GlobalDOMAttributes>, ProgressCircleStyleProps, UnsafeStyles {
108
108
  /** Spectrum-defined styles, returned by the `style()` macro. */
109
109
  styles?: StylesPropWithHeight
110
110
  }
package/src/Radio.tsx CHANGED
@@ -24,7 +24,7 @@ import {forwardRef, ReactNode, useContext, useRef} from 'react';
24
24
  import {pressScale} from './pressScale';
25
25
  import {useFocusableRef} from '@react-spectrum/utils';
26
26
 
27
- export interface RadioProps extends Omit<AriaRadioProps, 'className' | 'style' | 'children' | 'onHover' | 'onHoverStart' | 'onHoverEnd' | 'onHoverChange' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {
27
+ export interface RadioProps extends Omit<AriaRadioProps, 'className' | 'style' | 'render' | 'children' | 'onHover' | 'onHoverStart' | 'onHoverEnd' | 'onHoverChange' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {
28
28
  /**
29
29
  * The label for the element.
30
30
  */
@@ -24,7 +24,7 @@ import {style} from '../style' with {type: 'macro'};
24
24
  import {useDOMRef} from '@react-spectrum/utils';
25
25
  import {useSpectrumContextProps} from './useSpectrumContextProps';
26
26
 
27
- export interface RadioGroupProps extends Omit<AriaRadioGroupProps, 'className' | 'style' | 'children' | keyof GlobalDOMAttributes>, StyleProps, SpectrumLabelableProps, HelpTextProps {
27
+ export interface RadioGroupProps extends Omit<AriaRadioGroupProps, 'className' | 'style' | 'render' | 'children' | keyof GlobalDOMAttributes>, StyleProps, SpectrumLabelableProps, HelpTextProps {
28
28
  /**
29
29
  * The Radios contained within the RadioGroup.
30
30
  */
@@ -34,7 +34,7 @@ import {useSpectrumContextProps} from './useSpectrumContextProps';
34
34
 
35
35
 
36
36
  export interface RangeCalendarProps<T extends DateValue>
37
- extends Omit<AriaRangeCalendarProps<T>, 'visibleDuration' | 'style' | 'className' | 'children' | 'styles' | keyof GlobalDOMAttributes>,
37
+ extends Omit<AriaRangeCalendarProps<T>, 'visibleDuration' | 'style' | 'className' | 'render' | 'children' | 'styles' | keyof GlobalDOMAttributes>,
38
38
  StyleProps {
39
39
  /**
40
40
  * The error message to display when the calendar is invalid.
@@ -32,7 +32,7 @@ import SearchIcon from '../s2wf-icons/S2_Icon_Search_20_N.svg';
32
32
  import {TextFieldRef} from '@react-types/textfield';
33
33
  import {useSpectrumContextProps} from './useSpectrumContextProps';
34
34
 
35
- export interface SearchFieldProps extends Omit<AriaSearchFieldProps, 'className' | 'style' | 'children' | keyof GlobalDOMAttributes>, StyleProps, SpectrumLabelableProps, HelpTextProps, Pick<InputProps, 'placeholder'> {
35
+ export interface SearchFieldProps extends Omit<AriaSearchFieldProps, 'className' | 'style' | 'render' | 'children' | keyof GlobalDOMAttributes>, StyleProps, SpectrumLabelableProps, HelpTextProps, Pick<InputProps, 'placeholder'> {
36
36
  /**
37
37
  * The size of the SearchField.
38
38
  *
@@ -30,7 +30,7 @@ import {TextContext} from './Content';
30
30
  import {useFocusVisible} from 'react-aria';
31
31
  import {useSpectrumContextProps} from './useSpectrumContextProps';
32
32
 
33
- export interface SelectBoxGroupProps<T> extends StyleProps, Omit<ListBoxProps<T>, keyof GlobalDOMAttributes | 'layout' | 'dragAndDropHooks' | 'dependencies' | 'renderEmptyState' | 'children' | 'onAction' | 'shouldFocusOnHover' | 'selectionBehavior' | 'shouldSelectOnPressUp' | 'shouldFocusWrap' | 'style' | 'className'> {
33
+ export interface SelectBoxGroupProps<T> extends StyleProps, Omit<ListBoxProps<T>, keyof GlobalDOMAttributes | 'layout' | 'dragAndDropHooks' | 'dependencies' | 'renderEmptyState' | 'children' | 'onAction' | 'shouldFocusOnHover' | 'selectionBehavior' | 'shouldSelectOnPressUp' | 'shouldFocusWrap' | 'style' | 'className' | 'render'> {
34
34
  /**
35
35
  * The SelectBox elements contained within the SelectBoxGroup.
36
36
  */
package/src/Slider.tsx CHANGED
@@ -32,7 +32,7 @@ import {useFocusableRef} from '@react-spectrum/utils';
32
32
  import {useLocale, useNumberFormatter} from '@react-aria/i18n';
33
33
  import {useSpectrumContextProps} from './useSpectrumContextProps';
34
34
 
35
- export interface SliderBaseProps<T> extends Omit<AriaSliderProps<T>, 'children' | 'style' | 'className' | 'orientation' | keyof GlobalDOMAttributes>, Omit<SpectrumLabelableProps, 'necessityIndicator' | 'isRequired'>, StyleProps {
35
+ export interface SliderBaseProps<T> extends Omit<AriaSliderProps<T>, 'children' | 'style' | 'className' | 'render' | 'orientation' | keyof GlobalDOMAttributes>, Omit<SpectrumLabelableProps, 'necessityIndicator' | 'isRequired'>, StyleProps {
36
36
  children?: ReactNode,
37
37
  /**
38
38
  * The size of the Slider.
package/src/Switch.tsx CHANGED
@@ -42,7 +42,7 @@ interface SwitchStyleProps {
42
42
 
43
43
  interface RenderProps extends SwitchRenderProps, SwitchStyleProps {}
44
44
 
45
- export interface SwitchProps extends Omit<AriaSwitchProps, 'className' | 'style' | 'children' | 'onHover' | 'onHoverStart' | 'onHoverEnd' | 'onHoverChange' | keyof GlobalDOMAttributes>, StyleProps, SwitchStyleProps {
45
+ export interface SwitchProps extends Omit<AriaSwitchProps, 'className' | 'style' | 'render' | 'children' | 'onHover' | 'onHoverStart' | 'onHoverEnd' | 'onHoverChange' | keyof GlobalDOMAttributes>, StyleProps, SwitchStyleProps {
46
46
  children?: ReactNode
47
47
  }
48
48