@react-spectrum/s2 0.6.0 → 0.7.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 (767) hide show
  1. package/dist/Accordion.cjs.map +1 -1
  2. package/dist/Accordion.css +1 -5
  3. package/dist/Accordion.css.map +1 -1
  4. package/dist/Accordion.mjs.map +1 -1
  5. package/dist/ActionBar.cjs +2 -2
  6. package/dist/ActionBar.css +0 -6
  7. package/dist/ActionBar.css.map +1 -1
  8. package/dist/ActionBar.mjs +2 -2
  9. package/dist/ActionButton.cjs +4 -4
  10. package/dist/ActionButton.cjs.map +1 -1
  11. package/dist/ActionButton.css +0 -6
  12. package/dist/ActionButton.css.map +1 -1
  13. package/dist/ActionButton.mjs +4 -4
  14. package/dist/ActionButton.mjs.map +1 -1
  15. package/dist/ActionButtonGroup.css +1 -5
  16. package/dist/ActionButtonGroup.css.map +1 -1
  17. package/dist/ActionMenu.cjs.map +1 -1
  18. package/dist/ActionMenu.mjs.map +1 -1
  19. package/dist/AlertDialog.css +1 -5
  20. package/dist/AlertDialog.css.map +1 -1
  21. package/dist/Avatar.cjs.map +1 -1
  22. package/dist/Avatar.css +1 -5
  23. package/dist/Avatar.css.map +1 -1
  24. package/dist/Avatar.mjs.map +1 -1
  25. package/dist/AvatarGroup.cjs +1 -1
  26. package/dist/AvatarGroup.cjs.map +1 -1
  27. package/dist/AvatarGroup.css +0 -6
  28. package/dist/AvatarGroup.css.map +1 -1
  29. package/dist/AvatarGroup.mjs +1 -1
  30. package/dist/AvatarGroup.mjs.map +1 -1
  31. package/dist/Badge.cjs +32 -14
  32. package/dist/Badge.cjs.map +1 -1
  33. package/dist/Badge.css +26 -8
  34. package/dist/Badge.css.map +1 -1
  35. package/dist/Badge.mjs +33 -15
  36. package/dist/Badge.mjs.map +1 -1
  37. package/dist/Breadcrumbs.cjs +7 -7
  38. package/dist/Breadcrumbs.cjs.map +1 -1
  39. package/dist/Breadcrumbs.css +0 -6
  40. package/dist/Breadcrumbs.css.map +1 -1
  41. package/dist/Breadcrumbs.mjs +8 -8
  42. package/dist/Breadcrumbs.mjs.map +1 -1
  43. package/dist/Button.cjs +4 -4
  44. package/dist/Button.cjs.map +1 -1
  45. package/dist/Button.css +0 -6
  46. package/dist/Button.css.map +1 -1
  47. package/dist/Button.mjs +4 -4
  48. package/dist/Button.mjs.map +1 -1
  49. package/dist/ButtonGroup.cjs +1 -1
  50. package/dist/ButtonGroup.cjs.map +1 -1
  51. package/dist/ButtonGroup.css +1 -5
  52. package/dist/ButtonGroup.css.map +1 -1
  53. package/dist/ButtonGroup.mjs +1 -1
  54. package/dist/ButtonGroup.mjs.map +1 -1
  55. package/dist/Card.cjs +15 -15
  56. package/dist/Card.cjs.map +1 -1
  57. package/dist/Card.css +0 -6
  58. package/dist/Card.css.map +1 -1
  59. package/dist/Card.mjs +16 -16
  60. package/dist/Card.mjs.map +1 -1
  61. package/dist/CardView.cjs +71 -309
  62. package/dist/CardView.cjs.map +1 -1
  63. package/dist/CardView.css +1 -5
  64. package/dist/CardView.css.map +1 -1
  65. package/dist/CardView.mjs +28 -266
  66. package/dist/CardView.mjs.map +1 -1
  67. package/dist/CenterBaseline.cjs +1 -1
  68. package/dist/CenterBaseline.css +1 -5
  69. package/dist/CenterBaseline.css.map +1 -1
  70. package/dist/CenterBaseline.mjs +1 -1
  71. package/dist/Checkbox.cjs +1 -1
  72. package/dist/Checkbox.cjs.map +1 -1
  73. package/dist/Checkbox.css +0 -6
  74. package/dist/Checkbox.css.map +1 -1
  75. package/dist/Checkbox.mjs +1 -1
  76. package/dist/Checkbox.mjs.map +1 -1
  77. package/dist/CheckboxGroup.cjs.map +1 -1
  78. package/dist/CheckboxGroup.css +0 -6
  79. package/dist/CheckboxGroup.css.map +1 -1
  80. package/dist/CheckboxGroup.mjs.map +1 -1
  81. package/dist/ClearButton.css +1 -5
  82. package/dist/ClearButton.css.map +1 -1
  83. package/dist/CloseButton.cjs.map +1 -1
  84. package/dist/CloseButton.css +1 -5
  85. package/dist/CloseButton.css.map +1 -1
  86. package/dist/CloseButton.mjs.map +1 -1
  87. package/dist/ColorArea.cjs.map +1 -1
  88. package/dist/ColorArea.css +1 -5
  89. package/dist/ColorArea.css.map +1 -1
  90. package/dist/ColorArea.mjs.map +1 -1
  91. package/dist/ColorField.cjs.map +1 -1
  92. package/dist/ColorField.css +0 -6
  93. package/dist/ColorField.css.map +1 -1
  94. package/dist/ColorField.mjs.map +1 -1
  95. package/dist/ColorHandle.cjs +3 -3
  96. package/dist/ColorHandle.css +1 -5
  97. package/dist/ColorHandle.css.map +1 -1
  98. package/dist/ColorHandle.mjs +3 -3
  99. package/dist/ColorSlider.cjs.map +1 -1
  100. package/dist/ColorSlider.css +0 -6
  101. package/dist/ColorSlider.css.map +1 -1
  102. package/dist/ColorSlider.mjs.map +1 -1
  103. package/dist/ColorSwatch.cjs.map +1 -1
  104. package/dist/ColorSwatch.css +1 -5
  105. package/dist/ColorSwatch.css.map +1 -1
  106. package/dist/ColorSwatch.mjs.map +1 -1
  107. package/dist/ColorSwatchPicker.cjs +1 -1
  108. package/dist/ColorSwatchPicker.cjs.map +1 -1
  109. package/dist/ColorSwatchPicker.css +1 -5
  110. package/dist/ColorSwatchPicker.css.map +1 -1
  111. package/dist/ColorSwatchPicker.mjs +1 -1
  112. package/dist/ColorSwatchPicker.mjs.map +1 -1
  113. package/dist/ColorWheel.cjs.map +1 -1
  114. package/dist/ColorWheel.css +1 -5
  115. package/dist/ColorWheel.css.map +1 -1
  116. package/dist/ColorWheel.mjs.map +1 -1
  117. package/dist/ComboBox.cjs +2 -2
  118. package/dist/ComboBox.css +0 -6
  119. package/dist/ComboBox.css.map +1 -1
  120. package/dist/ComboBox.mjs +2 -2
  121. package/dist/Content.cjs +3 -1
  122. package/dist/Content.cjs.map +1 -1
  123. package/dist/Content.mjs +3 -1
  124. package/dist/Content.mjs.map +1 -1
  125. package/dist/ContextualHelp.cjs +5 -5
  126. package/dist/ContextualHelp.cjs.map +1 -1
  127. package/dist/ContextualHelp.css +0 -6
  128. package/dist/ContextualHelp.css.map +1 -1
  129. package/dist/ContextualHelp.mjs +5 -5
  130. package/dist/ContextualHelp.mjs.map +1 -1
  131. package/dist/CustomDialog.css +1 -5
  132. package/dist/CustomDialog.css.map +1 -1
  133. package/dist/Dialog.cjs +10 -10
  134. package/dist/Dialog.css +0 -6
  135. package/dist/Dialog.css.map +1 -1
  136. package/dist/Dialog.mjs +10 -10
  137. package/dist/Disclosure.cjs +2 -2
  138. package/dist/Disclosure.cjs.map +1 -1
  139. package/dist/Disclosure.css +0 -6
  140. package/dist/Disclosure.css.map +1 -1
  141. package/dist/Disclosure.mjs +2 -2
  142. package/dist/Disclosure.mjs.map +1 -1
  143. package/dist/Divider.cjs.map +1 -1
  144. package/dist/Divider.css +1 -5
  145. package/dist/Divider.css.map +1 -1
  146. package/dist/Divider.mjs.map +1 -1
  147. package/dist/DropZone.cjs.map +1 -1
  148. package/dist/DropZone.css +0 -6
  149. package/dist/DropZone.css.map +1 -1
  150. package/dist/DropZone.mjs.map +1 -1
  151. package/dist/Field.cjs +7 -7
  152. package/dist/Field.cjs.map +1 -1
  153. package/dist/Field.css +0 -6
  154. package/dist/Field.css.map +1 -1
  155. package/dist/Field.mjs +7 -7
  156. package/dist/Field.mjs.map +1 -1
  157. package/dist/Form.cjs.map +1 -1
  158. package/dist/Form.css +1 -5
  159. package/dist/Form.css.map +1 -1
  160. package/dist/Form.mjs.map +1 -1
  161. package/dist/FullscreenDialog.cjs +5 -5
  162. package/dist/FullscreenDialog.css +0 -6
  163. package/dist/FullscreenDialog.css.map +1 -1
  164. package/dist/FullscreenDialog.mjs +5 -5
  165. package/dist/IllustratedMessage.cjs +1 -1
  166. package/dist/IllustratedMessage.cjs.map +1 -1
  167. package/dist/IllustratedMessage.css +0 -6
  168. package/dist/IllustratedMessage.css.map +1 -1
  169. package/dist/IllustratedMessage.mjs +1 -1
  170. package/dist/IllustratedMessage.mjs.map +1 -1
  171. package/dist/Image.cjs +14 -2
  172. package/dist/Image.cjs.map +1 -1
  173. package/dist/Image.css +1 -5
  174. package/dist/Image.css.map +1 -1
  175. package/dist/Image.mjs +15 -3
  176. package/dist/Image.mjs.map +1 -1
  177. package/dist/InlineAlert.cjs +1 -1
  178. package/dist/InlineAlert.css +0 -6
  179. package/dist/InlineAlert.css.map +1 -1
  180. package/dist/InlineAlert.mjs +1 -1
  181. package/dist/Link.cjs.map +1 -1
  182. package/dist/Link.css +0 -6
  183. package/dist/Link.css.map +1 -1
  184. package/dist/Link.mjs.map +1 -1
  185. package/dist/Menu.cjs +20 -8
  186. package/dist/Menu.cjs.map +1 -1
  187. package/dist/Menu.css +12 -6
  188. package/dist/Menu.css.map +1 -1
  189. package/dist/Menu.mjs +21 -9
  190. package/dist/Menu.mjs.map +1 -1
  191. package/dist/Meter.cjs.map +1 -1
  192. package/dist/Meter.css +0 -6
  193. package/dist/Meter.css.map +1 -1
  194. package/dist/Meter.mjs.map +1 -1
  195. package/dist/Modal.css +1 -5
  196. package/dist/Modal.css.map +1 -1
  197. package/dist/NumberField.cjs.map +1 -1
  198. package/dist/NumberField.css +0 -6
  199. package/dist/NumberField.css.map +1 -1
  200. package/dist/NumberField.mjs.map +1 -1
  201. package/dist/Picker.cjs +95 -70
  202. package/dist/Picker.cjs.map +1 -1
  203. package/dist/Picker.css +8 -10
  204. package/dist/Picker.css.map +1 -1
  205. package/dist/Picker.mjs +96 -71
  206. package/dist/Picker.mjs.map +1 -1
  207. package/dist/Popover.cjs +1 -3
  208. package/dist/Popover.cjs.map +1 -1
  209. package/dist/Popover.css +5 -9
  210. package/dist/Popover.css.map +1 -1
  211. package/dist/Popover.mjs +1 -3
  212. package/dist/Popover.mjs.map +1 -1
  213. package/dist/ProgressBar.cjs.map +1 -1
  214. package/dist/ProgressBar.css +0 -6
  215. package/dist/ProgressBar.css.map +1 -1
  216. package/dist/ProgressBar.mjs.map +1 -1
  217. package/dist/ProgressCircle.cjs.map +1 -1
  218. package/dist/ProgressCircle.css +1 -5
  219. package/dist/ProgressCircle.css.map +1 -1
  220. package/dist/ProgressCircle.mjs.map +1 -1
  221. package/dist/Provider.css +1 -5
  222. package/dist/Provider.css.map +1 -1
  223. package/dist/Radio.css +0 -6
  224. package/dist/Radio.css.map +1 -1
  225. package/dist/RadioGroup.cjs.map +1 -1
  226. package/dist/RadioGroup.css +0 -6
  227. package/dist/RadioGroup.css.map +1 -1
  228. package/dist/RadioGroup.mjs.map +1 -1
  229. package/dist/RangeSlider.cjs.map +1 -1
  230. package/dist/RangeSlider.mjs.map +1 -1
  231. package/dist/SearchField.cjs +3 -3
  232. package/dist/SearchField.cjs.map +1 -1
  233. package/dist/SearchField.css +0 -6
  234. package/dist/SearchField.css.map +1 -1
  235. package/dist/SearchField.mjs +3 -3
  236. package/dist/SearchField.mjs.map +1 -1
  237. package/dist/SegmentedControl.cjs +7 -7
  238. package/dist/SegmentedControl.cjs.map +1 -1
  239. package/dist/SegmentedControl.css +0 -6
  240. package/dist/SegmentedControl.css.map +1 -1
  241. package/dist/SegmentedControl.mjs +8 -8
  242. package/dist/SegmentedControl.mjs.map +1 -1
  243. package/dist/Slider.cjs.map +1 -1
  244. package/dist/Slider.css +0 -6
  245. package/dist/Slider.css.map +1 -1
  246. package/dist/Slider.mjs.map +1 -1
  247. package/dist/StatusLight.cjs.map +1 -1
  248. package/dist/StatusLight.css +0 -6
  249. package/dist/StatusLight.css.map +1 -1
  250. package/dist/StatusLight.mjs.map +1 -1
  251. package/dist/Switch.cjs.map +1 -1
  252. package/dist/Switch.css +0 -6
  253. package/dist/Switch.css.map +1 -1
  254. package/dist/Switch.mjs.map +1 -1
  255. package/dist/TableView.cjs +75 -92
  256. package/dist/TableView.cjs.map +1 -1
  257. package/dist/TableView.css +10 -8
  258. package/dist/TableView.css.map +1 -1
  259. package/dist/TableView.mjs +76 -93
  260. package/dist/TableView.mjs.map +1 -1
  261. package/dist/Tabs.cjs +451 -167
  262. package/dist/Tabs.cjs.map +1 -1
  263. package/dist/Tabs.css +208 -122
  264. package/dist/Tabs.css.map +1 -1
  265. package/dist/Tabs.mjs +451 -167
  266. package/dist/Tabs.mjs.map +1 -1
  267. package/dist/TabsPicker.cjs +415 -0
  268. package/dist/TabsPicker.cjs.map +1 -0
  269. package/dist/TabsPicker.css +482 -0
  270. package/dist/TabsPicker.css.map +1 -0
  271. package/dist/TabsPicker.mjs +409 -0
  272. package/dist/TabsPicker.mjs.map +1 -0
  273. package/dist/TagGroup.cjs +13 -13
  274. package/dist/TagGroup.cjs.map +1 -1
  275. package/dist/TagGroup.css +0 -6
  276. package/dist/TagGroup.css.map +1 -1
  277. package/dist/TagGroup.mjs +13 -13
  278. package/dist/TagGroup.mjs.map +1 -1
  279. package/dist/TextField.cjs +1 -1
  280. package/dist/TextField.cjs.map +1 -1
  281. package/dist/TextField.css +0 -6
  282. package/dist/TextField.css.map +1 -1
  283. package/dist/TextField.mjs +1 -1
  284. package/dist/TextField.mjs.map +1 -1
  285. package/dist/ToggleButton.cjs +3 -3
  286. package/dist/ToggleButton.cjs.map +1 -1
  287. package/dist/ToggleButton.css +1 -5
  288. package/dist/ToggleButton.css.map +1 -1
  289. package/dist/ToggleButton.mjs +3 -3
  290. package/dist/ToggleButton.mjs.map +1 -1
  291. package/dist/ToggleButtonGroup.cjs.map +1 -1
  292. package/dist/ToggleButtonGroup.mjs.map +1 -1
  293. package/dist/Tooltip.cjs +1 -1
  294. package/dist/Tooltip.cjs.map +1 -1
  295. package/dist/Tooltip.css +0 -6
  296. package/dist/Tooltip.css.map +1 -1
  297. package/dist/Tooltip.mjs +1 -1
  298. package/dist/Tooltip.mjs.map +1 -1
  299. package/dist/TreeView.cjs +439 -0
  300. package/dist/TreeView.cjs.map +1 -0
  301. package/dist/TreeView.css +608 -0
  302. package/dist/TreeView.css.map +1 -0
  303. package/dist/TreeView.mjs +432 -0
  304. package/dist/TreeView.mjs.map +1 -0
  305. package/dist/main.cjs +5 -0
  306. package/dist/main.cjs.map +1 -1
  307. package/dist/module.mjs +3 -1
  308. package/dist/module.mjs.map +1 -1
  309. package/dist/types.d.ts +120 -81
  310. package/dist/types.d.ts.map +1 -1
  311. package/icons/3DMaterial.cjs.map +1 -1
  312. package/icons/3DMaterial.mjs.map +1 -1
  313. package/icons/ABC.cjs +36 -0
  314. package/icons/ABC.cjs.map +1 -0
  315. package/icons/ABC.mjs +25 -0
  316. package/icons/ABC.mjs.map +1 -0
  317. package/icons/AlertDiamond.cjs.map +1 -1
  318. package/icons/AlertDiamond.mjs.map +1 -1
  319. package/icons/Animation.cjs.map +1 -1
  320. package/icons/Animation.mjs.map +1 -1
  321. package/icons/AnimationNo.cjs.map +1 -1
  322. package/icons/AnimationNo.mjs.map +1 -1
  323. package/icons/App.cjs +42 -0
  324. package/icons/App.cjs.map +1 -0
  325. package/icons/App.mjs +31 -0
  326. package/icons/App.mjs.map +1 -0
  327. package/icons/AspectRatio.cjs.map +1 -1
  328. package/icons/AspectRatio.mjs.map +1 -1
  329. package/icons/Asset.cjs +1 -5
  330. package/icons/Asset.cjs.map +1 -1
  331. package/icons/Asset.mjs +1 -5
  332. package/icons/Asset.mjs.map +1 -1
  333. package/icons/AudioWave.cjs.map +1 -1
  334. package/icons/AudioWave.mjs.map +1 -1
  335. package/icons/BadgeVerified.cjs.map +1 -1
  336. package/icons/BadgeVerified.mjs.map +1 -1
  337. package/icons/Bell.cjs.map +1 -1
  338. package/icons/Bell.mjs.map +1 -1
  339. package/icons/Bookmark.cjs +36 -0
  340. package/icons/Bookmark.cjs.map +1 -0
  341. package/icons/Bookmark.mjs +25 -0
  342. package/icons/Bookmark.mjs.map +1 -0
  343. package/icons/Brand.cjs.map +1 -1
  344. package/icons/Brand.mjs.map +1 -1
  345. package/icons/Building.cjs +62 -0
  346. package/icons/Building.cjs.map +1 -0
  347. package/icons/Building.mjs +51 -0
  348. package/icons/Building.mjs.map +1 -0
  349. package/icons/CalendarEdit.cjs.map +1 -1
  350. package/icons/CalendarEdit.mjs.map +1 -1
  351. package/icons/CallCenter.cjs +36 -0
  352. package/icons/CallCenter.cjs.map +1 -0
  353. package/icons/CallCenter.mjs +25 -0
  354. package/icons/CallCenter.mjs.map +1 -0
  355. package/icons/CameraProperties.cjs.map +1 -1
  356. package/icons/CameraProperties.mjs.map +1 -1
  357. package/icons/Channel.cjs.map +1 -1
  358. package/icons/Channel.mjs.map +1 -1
  359. package/icons/ChartBarVert.cjs +36 -0
  360. package/icons/ChartBarVert.cjs.map +1 -0
  361. package/icons/ChartBarVert.mjs +25 -0
  362. package/icons/ChartBarVert.mjs.map +1 -0
  363. package/icons/ChartPie.cjs +36 -0
  364. package/icons/ChartPie.cjs.map +1 -0
  365. package/icons/ChartPie.mjs +25 -0
  366. package/icons/ChartPie.mjs.map +1 -0
  367. package/icons/ChartTrend.cjs +36 -0
  368. package/icons/ChartTrend.cjs.map +1 -0
  369. package/icons/ChartTrend.mjs +25 -0
  370. package/icons/ChartTrend.mjs.map +1 -0
  371. package/icons/Chat.cjs +36 -0
  372. package/icons/Chat.cjs.map +1 -0
  373. package/icons/Chat.mjs +25 -0
  374. package/icons/Chat.mjs.map +1 -0
  375. package/icons/CheckBox.cjs.map +1 -1
  376. package/icons/CheckBox.mjs.map +1 -1
  377. package/icons/Checkmark.cjs +8 -8
  378. package/icons/Checkmark.cjs.map +1 -1
  379. package/icons/Checkmark.mjs +8 -8
  380. package/icons/Checkmark.mjs.map +1 -1
  381. package/icons/ChevronDoubleLeft.cjs +42 -0
  382. package/icons/ChevronDoubleLeft.cjs.map +1 -0
  383. package/icons/ChevronDoubleLeft.d.ts +5 -0
  384. package/icons/ChevronDoubleLeft.mjs +31 -0
  385. package/icons/ChevronDoubleLeft.mjs.map +1 -0
  386. package/icons/ChevronDoubleRight.cjs +42 -0
  387. package/icons/ChevronDoubleRight.cjs.map +1 -0
  388. package/icons/ChevronDoubleRight.d.ts +5 -0
  389. package/icons/ChevronDoubleRight.mjs +31 -0
  390. package/icons/ChevronDoubleRight.mjs.map +1 -0
  391. package/icons/ChevronDown.cjs +8 -8
  392. package/icons/ChevronDown.cjs.map +1 -1
  393. package/icons/ChevronDown.mjs +8 -8
  394. package/icons/ChevronDown.mjs.map +1 -1
  395. package/icons/ChevronLeft.cjs.map +1 -1
  396. package/icons/ChevronLeft.mjs.map +1 -1
  397. package/icons/ChevronRight.cjs.map +1 -1
  398. package/icons/ChevronRight.mjs.map +1 -1
  399. package/icons/ChevronUp.cjs +36 -0
  400. package/icons/ChevronUp.cjs.map +1 -0
  401. package/icons/ChevronUp.d.ts +5 -0
  402. package/icons/ChevronUp.mjs +25 -0
  403. package/icons/ChevronUp.mjs.map +1 -0
  404. package/icons/Circle.cjs.map +1 -1
  405. package/icons/Circle.mjs.map +1 -1
  406. package/icons/Close.cjs.map +1 -1
  407. package/icons/Close.mjs.map +1 -1
  408. package/icons/CloseCaptions.cjs.map +1 -1
  409. package/icons/CloseCaptions.mjs.map +1 -1
  410. package/icons/Code.cjs +36 -0
  411. package/icons/Code.cjs.map +1 -0
  412. package/icons/Code.d.ts +5 -0
  413. package/icons/Code.mjs +25 -0
  414. package/icons/Code.mjs.map +1 -0
  415. package/icons/Collection.cjs.map +1 -1
  416. package/icons/Collection.mjs.map +1 -1
  417. package/icons/ColorHarmony.cjs.map +1 -1
  418. package/icons/ColorHarmony.mjs.map +1 -1
  419. package/icons/CommentCheckmark.cjs.map +1 -1
  420. package/icons/CommentCheckmark.mjs.map +1 -1
  421. package/icons/CommentHide.cjs.map +1 -1
  422. package/icons/CommentHide.mjs.map +1 -1
  423. package/icons/CommentRemove.cjs.map +1 -1
  424. package/icons/CommentRemove.mjs.map +1 -1
  425. package/icons/Compare.cjs +42 -0
  426. package/icons/Compare.cjs.map +1 -0
  427. package/icons/Compare.d.ts +5 -0
  428. package/icons/Compare.mjs +31 -0
  429. package/icons/Compare.mjs.map +1 -0
  430. package/icons/ContextualTaskBar.cjs.map +1 -1
  431. package/icons/ContextualTaskBar.mjs.map +1 -1
  432. package/icons/CornerRadiusBottomLeft.cjs.map +1 -1
  433. package/icons/CornerRadiusBottomLeft.mjs.map +1 -1
  434. package/icons/CornerRadiusBottomRight.cjs.map +1 -1
  435. package/icons/CornerRadiusBottomRight.mjs.map +1 -1
  436. package/icons/CornerRadiusTopLeft.cjs.map +1 -1
  437. package/icons/CornerRadiusTopLeft.mjs.map +1 -1
  438. package/icons/CornerRadiusTopRight.cjs.map +1 -1
  439. package/icons/CornerRadiusTopRight.mjs.map +1 -1
  440. package/icons/CursorClick.cjs.map +1 -1
  441. package/icons/CursorClick.mjs.map +1 -1
  442. package/icons/Data.cjs +1 -1
  443. package/icons/Data.cjs.map +1 -1
  444. package/icons/Data.mjs +1 -1
  445. package/icons/Data.mjs.map +1 -1
  446. package/icons/DataAdd.cjs.map +1 -1
  447. package/icons/DataAdd.mjs.map +1 -1
  448. package/icons/DataRefresh.cjs +42 -0
  449. package/icons/DataRefresh.cjs.map +1 -0
  450. package/icons/DataRefresh.d.ts +5 -0
  451. package/icons/DataRefresh.mjs +31 -0
  452. package/icons/DataRefresh.mjs.map +1 -0
  453. package/icons/DataSettings.cjs +2 -2
  454. package/icons/DataSettings.cjs.map +1 -1
  455. package/icons/DataSettings.mjs +2 -2
  456. package/icons/DataSettings.mjs.map +1 -1
  457. package/icons/DataUpload.cjs +2 -2
  458. package/icons/DataUpload.cjs.map +1 -1
  459. package/icons/DataUpload.mjs +2 -2
  460. package/icons/DataUpload.mjs.map +1 -1
  461. package/icons/DeviceTablet.cjs.map +1 -1
  462. package/icons/DeviceTablet.mjs.map +1 -1
  463. package/icons/Draw.cjs.map +1 -1
  464. package/icons/Draw.mjs.map +1 -1
  465. package/icons/Edit.cjs.map +1 -1
  466. package/icons/Edit.mjs.map +1 -1
  467. package/icons/EditNo.cjs.map +1 -1
  468. package/icons/EditNo.mjs.map +1 -1
  469. package/icons/Email.cjs.map +1 -1
  470. package/icons/Email.mjs.map +1 -1
  471. package/icons/Enterprise.cjs +46 -0
  472. package/icons/Enterprise.cjs.map +1 -0
  473. package/icons/Enterprise.d.ts +5 -0
  474. package/icons/Enterprise.mjs +35 -0
  475. package/icons/Enterprise.mjs.map +1 -0
  476. package/icons/Export.cjs +42 -0
  477. package/icons/Export.cjs.map +1 -0
  478. package/icons/Export.d.ts +5 -0
  479. package/icons/Export.mjs +31 -0
  480. package/icons/Export.mjs.map +1 -0
  481. package/icons/Filter.cjs.map +1 -1
  482. package/icons/Filter.mjs.map +1 -1
  483. package/icons/FlipHorizontal.cjs +1 -21
  484. package/icons/FlipHorizontal.cjs.map +1 -1
  485. package/icons/FlipHorizontal.mjs +1 -21
  486. package/icons/FlipHorizontal.mjs.map +1 -1
  487. package/icons/FlipVertical.cjs +1 -21
  488. package/icons/FlipVertical.cjs.map +1 -1
  489. package/icons/FlipVertical.mjs +1 -21
  490. package/icons/FlipVertical.mjs.map +1 -1
  491. package/icons/FolderMoveTo.cjs.map +1 -1
  492. package/icons/FolderMoveTo.mjs.map +1 -1
  493. package/icons/FolderSearch.cjs +42 -0
  494. package/icons/FolderSearch.cjs.map +1 -0
  495. package/icons/FolderSearch.d.ts +5 -0
  496. package/icons/FolderSearch.mjs +31 -0
  497. package/icons/FolderSearch.mjs.map +1 -0
  498. package/icons/FontPicker.cjs.map +1 -1
  499. package/icons/FontPicker.mjs.map +1 -1
  500. package/icons/GlobeGrid.cjs.map +1 -1
  501. package/icons/GlobeGrid.mjs.map +1 -1
  502. package/icons/GradientHorizontal.cjs.map +1 -1
  503. package/icons/GradientHorizontal.mjs.map +1 -1
  504. package/icons/GridsAndRulers.cjs.map +1 -1
  505. package/icons/GridsAndRulers.mjs.map +1 -1
  506. package/icons/Icon.cjs.map +1 -1
  507. package/icons/Icon.mjs.map +1 -1
  508. package/icons/Image.cjs.map +1 -1
  509. package/icons/Image.mjs.map +1 -1
  510. package/icons/ImageAdd.cjs +1 -5
  511. package/icons/ImageAdd.cjs.map +1 -1
  512. package/icons/ImageAdd.mjs +1 -5
  513. package/icons/ImageAdd.mjs.map +1 -1
  514. package/icons/ImageBackgroundRemove.cjs.map +1 -1
  515. package/icons/ImageBackgroundRemove.mjs.map +1 -1
  516. package/icons/Images.cjs.map +1 -1
  517. package/icons/Images.mjs.map +1 -1
  518. package/icons/Import.cjs +42 -0
  519. package/icons/Import.cjs.map +1 -0
  520. package/icons/Import.d.ts +5 -0
  521. package/icons/Import.mjs +31 -0
  522. package/icons/Import.mjs.map +1 -0
  523. package/icons/Key.cjs +36 -0
  524. package/icons/Key.cjs.map +1 -0
  525. package/icons/Key.d.ts +5 -0
  526. package/icons/Key.mjs +25 -0
  527. package/icons/Key.mjs.map +1 -0
  528. package/icons/ListMultiSelect.cjs.map +1 -1
  529. package/icons/ListMultiSelect.mjs.map +1 -1
  530. package/icons/ListNumbered.cjs.map +1 -1
  531. package/icons/ListNumbered.mjs.map +1 -1
  532. package/icons/Logo.cjs.map +1 -1
  533. package/icons/Logo.mjs.map +1 -1
  534. package/icons/Market.cjs.map +1 -1
  535. package/icons/Market.mjs.map +1 -1
  536. package/icons/Microphone.cjs.map +1 -1
  537. package/icons/Microphone.mjs.map +1 -1
  538. package/icons/MicrophoneOff.cjs.map +1 -1
  539. package/icons/MicrophoneOff.mjs.map +1 -1
  540. package/icons/MusicNote.cjs.map +1 -1
  541. package/icons/MusicNote.mjs.map +1 -1
  542. package/icons/OrientationPortrait.cjs.map +1 -1
  543. package/icons/OrientationPortrait.mjs.map +1 -1
  544. package/icons/Pause.cjs.map +1 -1
  545. package/icons/Pause.mjs.map +1 -1
  546. package/icons/PauseCircle.cjs.map +1 -1
  547. package/icons/PauseCircle.mjs.map +1 -1
  548. package/icons/PeopleGroup.cjs +36 -0
  549. package/icons/PeopleGroup.cjs.map +1 -0
  550. package/icons/PeopleGroup.d.ts +5 -0
  551. package/icons/PeopleGroup.mjs +25 -0
  552. package/icons/PeopleGroup.mjs.map +1 -0
  553. package/icons/Percentage.cjs.map +1 -1
  554. package/icons/Percentage.mjs.map +1 -1
  555. package/icons/PinOff.cjs.map +1 -1
  556. package/icons/PinOff.mjs.map +1 -1
  557. package/icons/PinOn.cjs.map +1 -1
  558. package/icons/PinOn.mjs.map +1 -1
  559. package/icons/Play.cjs.map +1 -1
  560. package/icons/Play.mjs.map +1 -1
  561. package/icons/PluginGear.cjs.map +1 -1
  562. package/icons/PluginGear.mjs.map +1 -1
  563. package/icons/Polygon6.cjs.map +1 -1
  564. package/icons/Polygon6.mjs.map +1 -1
  565. package/icons/Publish.cjs.map +1 -1
  566. package/icons/Publish.mjs.map +1 -1
  567. package/icons/PublishNo.cjs.map +1 -1
  568. package/icons/PublishNo.mjs.map +1 -1
  569. package/icons/RadioButton.cjs.map +1 -1
  570. package/icons/RadioButton.mjs.map +1 -1
  571. package/icons/RectangleHoriz.cjs.map +1 -1
  572. package/icons/RectangleHoriz.mjs.map +1 -1
  573. package/icons/RocketQuickActions.cjs.map +1 -1
  574. package/icons/RocketQuickActions.mjs.map +1 -1
  575. package/icons/RotateCW.cjs.map +1 -1
  576. package/icons/RotateCW.mjs.map +1 -1
  577. package/icons/Ruler.cjs.map +1 -1
  578. package/icons/Ruler.mjs.map +1 -1
  579. package/icons/SaveFloppy.cjs +36 -0
  580. package/icons/SaveFloppy.cjs.map +1 -0
  581. package/icons/SaveFloppy.d.ts +5 -0
  582. package/icons/SaveFloppy.mjs +25 -0
  583. package/icons/SaveFloppy.mjs.map +1 -0
  584. package/icons/Select.cjs.map +1 -1
  585. package/icons/Select.mjs.map +1 -1
  586. package/icons/Send.cjs.map +1 -1
  587. package/icons/Send.mjs.map +1 -1
  588. package/icons/Shuffle.cjs.map +1 -1
  589. package/icons/Shuffle.mjs.map +1 -1
  590. package/icons/Skeleton.cjs +8 -6
  591. package/icons/Skeleton.cjs.map +1 -1
  592. package/icons/Skeleton.css +3 -5
  593. package/icons/Skeleton.css.map +1 -1
  594. package/icons/Skeleton.mjs +9 -7
  595. package/icons/Skeleton.mjs.map +1 -1
  596. package/icons/SlowConnectionCircle.cjs.map +1 -1
  597. package/icons/SlowConnectionCircle.mjs.map +1 -1
  598. package/icons/SpeedFast.cjs +36 -0
  599. package/icons/SpeedFast.cjs.map +1 -0
  600. package/icons/SpeedFast.d.ts +5 -0
  601. package/icons/SpeedFast.mjs +25 -0
  602. package/icons/SpeedFast.mjs.map +1 -0
  603. package/icons/StepBackward.cjs.map +1 -1
  604. package/icons/StepBackward.mjs.map +1 -1
  605. package/icons/StepForward.cjs.map +1 -1
  606. package/icons/StepForward.mjs.map +1 -1
  607. package/icons/Table.cjs.map +1 -1
  608. package/icons/Table.mjs.map +1 -1
  609. package/icons/Tag.cjs.map +1 -1
  610. package/icons/Tag.mjs.map +1 -1
  611. package/icons/Target.cjs.map +1 -1
  612. package/icons/Target.mjs.map +1 -1
  613. package/icons/TextBold.cjs.map +1 -1
  614. package/icons/TextBold.mjs.map +1 -1
  615. package/icons/TextHighlight.cjs.map +1 -1
  616. package/icons/TextHighlight.mjs.map +1 -1
  617. package/icons/TextIncrease.cjs.map +1 -1
  618. package/icons/TextIncrease.mjs.map +1 -1
  619. package/icons/TextNumbers.cjs.map +1 -1
  620. package/icons/TextNumbers.mjs.map +1 -1
  621. package/icons/TextParagraph.cjs.map +1 -1
  622. package/icons/TextParagraph.mjs.map +1 -1
  623. package/icons/TextReplaceComment.cjs.map +1 -1
  624. package/icons/TextReplaceComment.mjs.map +1 -1
  625. package/icons/Tools.cjs.map +1 -1
  626. package/icons/Tools.mjs.map +1 -1
  627. package/icons/TouchOneFingerSwipeLeftRight.cjs.map +1 -1
  628. package/icons/TouchOneFingerSwipeLeftRight.mjs.map +1 -1
  629. package/icons/Transcript.cjs.map +1 -1
  630. package/icons/Transcript.mjs.map +1 -1
  631. package/icons/Translate.cjs.map +1 -1
  632. package/icons/Translate.mjs.map +1 -1
  633. package/icons/UserAvatarCursor.cjs.map +1 -1
  634. package/icons/UserAvatarCursor.mjs.map +1 -1
  635. package/icons/UserEdit.cjs.map +1 -1
  636. package/icons/UserEdit.mjs.map +1 -1
  637. package/icons/UserGroup.cjs.map +1 -1
  638. package/icons/UserGroup.mjs.map +1 -1
  639. package/icons/UserSettings.cjs +44 -0
  640. package/icons/UserSettings.cjs.map +1 -0
  641. package/icons/UserSettings.d.ts +5 -0
  642. package/icons/UserSettings.mjs +33 -0
  643. package/icons/UserSettings.mjs.map +1 -0
  644. package/icons/VectorDraw.cjs.map +1 -1
  645. package/icons/VectorDraw.mjs.map +1 -1
  646. package/icons/ViewGridFluid.cjs +36 -0
  647. package/icons/ViewGridFluid.cjs.map +1 -0
  648. package/icons/ViewGridFluid.d.ts +5 -0
  649. package/icons/ViewGridFluid.mjs +25 -0
  650. package/icons/ViewGridFluid.mjs.map +1 -0
  651. package/icons/ZoomIn.cjs.map +1 -1
  652. package/icons/ZoomIn.mjs.map +1 -1
  653. package/icons/ZoomOut.cjs.map +1 -1
  654. package/icons/ZoomOut.mjs.map +1 -1
  655. package/package.json +17 -18
  656. package/src/Accordion.tsx +1 -1
  657. package/src/ActionButton.tsx +2 -2
  658. package/src/ActionMenu.tsx +1 -1
  659. package/src/Avatar.tsx +1 -1
  660. package/src/AvatarGroup.tsx +1 -1
  661. package/src/Badge.tsx +27 -8
  662. package/src/Breadcrumbs.tsx +13 -13
  663. package/src/Button.tsx +4 -4
  664. package/src/ButtonGroup.tsx +1 -1
  665. package/src/Card.tsx +2 -2
  666. package/src/CardView.tsx +18 -366
  667. package/src/Checkbox.tsx +1 -1
  668. package/src/CheckboxGroup.tsx +2 -2
  669. package/src/CloseButton.tsx +1 -1
  670. package/src/ColorArea.tsx +1 -1
  671. package/src/ColorField.tsx +1 -1
  672. package/src/ColorSlider.tsx +1 -1
  673. package/src/ColorSwatch.tsx +2 -2
  674. package/src/ColorSwatchPicker.tsx +1 -2
  675. package/src/ColorWheel.tsx +1 -1
  676. package/src/Content.tsx +11 -9
  677. package/src/ContextualHelp.tsx +2 -2
  678. package/src/Disclosure.tsx +1 -1
  679. package/src/Divider.tsx +1 -1
  680. package/src/DropZone.tsx +2 -2
  681. package/src/Field.tsx +1 -1
  682. package/src/Form.tsx +2 -2
  683. package/src/Icon.tsx +2 -2
  684. package/src/IllustratedMessage.tsx +1 -1
  685. package/src/Image.tsx +19 -5
  686. package/src/Link.tsx +2 -2
  687. package/src/Menu.tsx +9 -4
  688. package/src/Meter.tsx +1 -1
  689. package/src/NumberField.tsx +1 -1
  690. package/src/Picker.tsx +81 -60
  691. package/src/Popover.tsx +2 -1
  692. package/src/ProgressBar.tsx +1 -1
  693. package/src/ProgressCircle.tsx +1 -1
  694. package/src/RadioGroup.tsx +2 -2
  695. package/src/RangeSlider.tsx +1 -1
  696. package/src/SearchField.tsx +1 -1
  697. package/src/SegmentedControl.tsx +6 -9
  698. package/src/Skeleton.tsx +6 -8
  699. package/src/Slider.tsx +1 -1
  700. package/src/StatusLight.tsx +1 -1
  701. package/src/Switch.tsx +1 -1
  702. package/src/TableView.tsx +67 -71
  703. package/src/Tabs.tsx +451 -145
  704. package/src/TabsPicker.tsx +350 -0
  705. package/src/TagGroup.tsx +4 -4
  706. package/src/TextField.tsx +2 -2
  707. package/src/ToggleButton.tsx +2 -2
  708. package/src/ToggleButtonGroup.tsx +1 -1
  709. package/src/Tooltip.tsx +4 -4
  710. package/src/TreeView.tsx +450 -0
  711. package/src/index.ts +2 -0
  712. package/src/style-utils.ts +0 -1
  713. package/style/__tests__/style-macro.test.js +3 -7
  714. package/style/dist/spectrum-theme.cjs.map +1 -1
  715. package/style/dist/spectrum-theme.mjs.map +1 -1
  716. package/style/dist/style-macro.cjs +5 -3
  717. package/style/dist/style-macro.cjs.map +1 -1
  718. package/style/dist/style-macro.mjs +5 -3
  719. package/style/dist/style-macro.mjs.map +1 -1
  720. package/style/dist/types.d.ts.map +1 -1
  721. package/style/spectrum-theme.ts +0 -1
  722. package/style/style-macro.ts +9 -3
  723. package/icons/CloudStateDefault.cjs +0 -36
  724. package/icons/CloudStateDefault.cjs.map +0 -1
  725. package/icons/CloudStateDefault.mjs +0 -25
  726. package/icons/CloudStateDefault.mjs.map +0 -1
  727. package/icons/CloudStateDisconnected.cjs +0 -36
  728. package/icons/CloudStateDisconnected.cjs.map +0 -1
  729. package/icons/CloudStateDisconnected.mjs +0 -25
  730. package/icons/CloudStateDisconnected.mjs.map +0 -1
  731. package/icons/CloudStateError.cjs +0 -36
  732. package/icons/CloudStateError.cjs.map +0 -1
  733. package/icons/CloudStateError.mjs +0 -25
  734. package/icons/CloudStateError.mjs.map +0 -1
  735. package/icons/CloudStateErrorRed.cjs +0 -46
  736. package/icons/CloudStateErrorRed.cjs.map +0 -1
  737. package/icons/CloudStateErrorRed.mjs +0 -35
  738. package/icons/CloudStateErrorRed.mjs.map +0 -1
  739. package/icons/CloudStateInProgress.cjs +0 -36
  740. package/icons/CloudStateInProgress.cjs.map +0 -1
  741. package/icons/CloudStateInProgress.mjs +0 -25
  742. package/icons/CloudStateInProgress.mjs.map +0 -1
  743. package/icons/CloudStateOnline.cjs +0 -50
  744. package/icons/CloudStateOnline.cjs.map +0 -1
  745. package/icons/CloudStateOnline.mjs +0 -39
  746. package/icons/CloudStateOnline.mjs.map +0 -1
  747. package/icons/CloudStatePaused.cjs +0 -36
  748. package/icons/CloudStatePaused.cjs.map +0 -1
  749. package/icons/CloudStatePaused.mjs +0 -25
  750. package/icons/CloudStatePaused.mjs.map +0 -1
  751. package/icons/CloudStatePending.cjs +0 -42
  752. package/icons/CloudStatePending.cjs.map +0 -1
  753. package/icons/CloudStatePending.mjs +0 -31
  754. package/icons/CloudStatePending.mjs.map +0 -1
  755. package/icons/CloudStateSlowConnection.cjs +0 -36
  756. package/icons/CloudStateSlowConnection.cjs.map +0 -1
  757. package/icons/CloudStateSlowConnection.mjs +0 -25
  758. package/icons/CloudStateSlowConnection.mjs.map +0 -1
  759. /package/icons/{CloudStateDefault.d.ts → ABC.d.ts} +0 -0
  760. /package/icons/{CloudStateDisconnected.d.ts → App.d.ts} +0 -0
  761. /package/icons/{CloudStateError.d.ts → Bookmark.d.ts} +0 -0
  762. /package/icons/{CloudStateErrorRed.d.ts → Building.d.ts} +0 -0
  763. /package/icons/{CloudStateInProgress.d.ts → CallCenter.d.ts} +0 -0
  764. /package/icons/{CloudStateOnline.d.ts → ChartBarVert.d.ts} +0 -0
  765. /package/icons/{CloudStatePaused.d.ts → ChartPie.d.ts} +0 -0
  766. /package/icons/{CloudStatePending.d.ts → ChartTrend.d.ts} +0 -0
  767. /package/icons/{CloudStateSlowConnection.d.ts → Chat.d.ts} +0 -0
package/src/Tabs.tsx CHANGED
@@ -11,28 +11,32 @@
11
11
  */
12
12
 
13
13
  import {
14
- TabListProps as AriaTabListProps,
15
- TabPanel as AriaTabPanel,
16
- TabPanelProps as AriaTabPanelProps,
17
- TabProps as AriaTabProps,
18
- TabsProps as AriaTabsProps,
19
- ContextValue,
20
- Provider,
21
- Tab as RACTab,
22
- TabList as RACTabList,
23
- Tabs as RACTabs,
24
- TabListStateContext,
25
- useSlottedContext
26
- } from 'react-aria-components';
14
+ TabListProps as AriaTabListProps,
15
+ TabPanel as AriaTabPanel,
16
+ TabPanelProps as AriaTabPanelProps,
17
+ TabProps as AriaTabProps,
18
+ TabsProps as AriaTabsProps,
19
+ ContextValue,
20
+ Group,
21
+ Provider,
22
+ Tab as RACTab,
23
+ TabList as RACTabList,
24
+ Tabs as RACTabs,
25
+ TabListStateContext
26
+ } from 'react-aria-components';
27
27
  import {centerBaseline} from './CenterBaseline';
28
- import {Collection, DOMRef, DOMRefValue, Key, Node, Orientation} from '@react-types/shared';
29
- import {createContext, forwardRef, ReactNode, useCallback, useContext, useEffect, useRef, useState} from 'react';
30
- import {focusRing, style} from '../style' with {type: 'macro'};
28
+ import {Collection, DOMRef, DOMRefValue, Key, Node, Orientation, RefObject} from '@react-types/shared';
29
+ import {CollectionBuilder} from '@react-aria/collections';
30
+ import {createContext, forwardRef, ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';
31
+ import {focusRing, size, style} from '../style' with {type: 'macro'};
31
32
  import {getAllowedOverrides, StyleProps, StylesPropWithHeight, UnsafeStyles} from './style-utils' with {type: 'macro'};
32
33
  import {IconContext} from './Icon';
34
+ import {inertValue, useEffectEvent, useId, useLabels, useLayoutEffect, useResizeObserver} from '@react-aria/utils';
35
+ import {Picker, PickerItem} from './TabsPicker';
33
36
  import {Text, TextContext} from './Content';
37
+ import {useControlledState} from '@react-stately/utils';
34
38
  import {useDOMRef} from '@react-spectrum/utils';
35
- import {useLayoutEffect} from '@react-aria/utils';
39
+ import {useHasTabbableChild} from '@react-aria/focus';
36
40
  import {useLocale} from '@react-aria/i18n';
37
41
  import {useSpectrumContextProps} from './useSpectrumContextProps';
38
42
 
@@ -40,108 +44,104 @@ export interface TabsProps extends Omit<AriaTabsProps, 'className' | 'style' | '
40
44
  /** Spectrum-defined styles, returned by the `style()` macro. */
41
45
  styles?: StylesPropWithHeight,
42
46
  /** The content to display in the tabs. */
43
- children?: ReactNode,
47
+ children: ReactNode,
44
48
  /**
45
49
  * The amount of space between the tabs.
46
50
  * @default 'regular'
47
51
  */
48
- density?: 'compact' | 'regular'
52
+ density?: 'compact' | 'regular',
53
+ /**
54
+ * Defines if the text within the tabs should be hidden and only the icon should be shown.
55
+ * The text is always visible when the item is collapsed into a picker.
56
+ * @default 'show'
57
+ */
58
+ labelBehavior?: 'show' | 'hide'
49
59
  }
50
60
 
51
61
  export interface TabProps extends Omit<AriaTabProps, 'children' | 'style' | 'className'>, StyleProps {
52
62
  /** The content to display in the tab. */
53
- children?: ReactNode
63
+ children: ReactNode
54
64
  }
55
65
 
56
- export interface TabListProps<T> extends Omit<AriaTabListProps<T>, 'children' | 'style' | 'className'>, StyleProps {
66
+ export interface TabListProps<T> extends Omit<AriaTabListProps<T>, 'style' | 'className' | 'aria-label' | 'aria-labelledby'>, StyleProps {
57
67
  /** The content to display in the tablist. */
58
- children?: ReactNode
68
+ children: ReactNode | ((item: T) => ReactNode)
59
69
  }
60
70
 
61
71
  export interface TabPanelProps extends Omit<AriaTabPanelProps, 'children' | 'style' | 'className'>, UnsafeStyles {
62
72
  /** Spectrum-defined styles, returned by the `style()` macro. */
63
73
  styles?: StylesPropWithHeight,
64
74
  /** The content to display in the tab panels. */
65
- children?: ReactNode
75
+ children: ReactNode
66
76
  }
67
77
 
68
- export const TabsContext = createContext<ContextValue<TabsProps, DOMRefValue<HTMLDivElement>>>(null);
69
-
70
- const tabPanel = style({
71
- marginTop: 4,
72
- color: 'gray-800',
73
- flexGrow: 1,
74
- flexBasis: '[0%]',
75
- minHeight: 0,
76
- minWidth: 0
77
- }, getAllowedOverrides({height: true}));
78
-
79
- export function TabPanel(props: TabPanelProps) {
80
- return (
81
- <AriaTabPanel
82
- {...props}
83
- style={props.UNSAFE_style}
84
- className={(props.UNSAFE_className || '') + tabPanel(null, props.styles)} />
85
- );
86
- }
78
+ export const TabsContext = createContext<ContextValue<Partial<TabsProps>, DOMRefValue<HTMLDivElement>>>(null);
79
+ const InternalTabsContext = createContext<Partial<TabsProps>>({});
80
+ const CollapseContext = createContext({
81
+ showTabs: true,
82
+ menuId: '',
83
+ valueId: ''
84
+ });
87
85
 
88
- const tab = style({
89
- ...focusRing(),
90
- display: 'flex',
91
- color: {
92
- default: 'neutral-subdued',
93
- isSelected: 'neutral',
94
- isHovered: 'neutral-subdued',
95
- isDisabled: 'disabled',
96
- forcedColors: {
97
- isSelected: 'Highlight',
98
- isDisabled: 'GrayText'
99
- }
100
- },
101
- borderRadius: 'sm',
102
- gap: 'text-to-visual',
103
- height: {
104
- density: {
105
- compact: 32,
106
- regular: 48
107
- }
108
- },
109
- alignItems: 'center',
86
+ const tabs = style({
110
87
  position: 'relative',
111
- cursor: 'default',
112
- flexShrink: 0,
113
- transition: 'default'
114
- }, getAllowedOverrides());
115
-
116
- const icon = style({
88
+ display: 'flex',
117
89
  flexShrink: 0,
118
- '--iconPrimary': {
119
- type: 'fill',
120
- value: 'currentColor'
90
+ font: 'ui',
91
+ flexDirection: {
92
+ orientation: {
93
+ horizontal: 'column'
94
+ }
121
95
  }
122
- });
96
+ }, getAllowedOverrides({height: true}));
123
97
 
124
- export function Tab(props: TabProps) {
125
- let {density} = useSlottedContext(TabsContext) ?? {};
98
+ /**
99
+ * Tabs organize content into multiple sections and allow users to navigate between them. The content under the set of tabs should be related and form a coherent unit.
100
+ */
101
+ export const Tabs = forwardRef(function Tabs(props: TabsProps, ref: DOMRef<HTMLDivElement>) {
102
+ [props, ref] = useSpectrumContextProps(props, ref, TabsContext);
103
+ let {
104
+ density = 'regular',
105
+ isDisabled,
106
+ disabledKeys,
107
+ orientation = 'horizontal',
108
+ labelBehavior = 'show'
109
+ } = props;
110
+ let domRef = useDOMRef(ref);
111
+ let [value, setValue] = useControlledState(props.selectedKey, props.defaultSelectedKey ?? null!, props.onSelectionChange);
112
+
113
+ if (!props['aria-label'] && !props['aria-labelledby']) {
114
+ throw new Error('An aria-label or aria-labelledby prop is required on Tabs for accessibility.');
115
+ }
126
116
 
127
117
  return (
128
- <RACTab
129
- {...props}
130
- style={props.UNSAFE_style}
131
- className={renderProps => (props.UNSAFE_className || '') + tab({...renderProps, density}, props.styles)}>
132
- <Provider
133
- values={[
134
- [TextContext, {styles: style({order: 1})}],
135
- [IconContext, {
136
- render: centerBaseline({slot: 'icon', styles: style({order: 0})}),
137
- styles: icon
138
- }]
139
- ]}>
140
- {typeof props.children === 'string' ? <Text>{props.children}</Text> : props.children}
141
- </Provider>
142
- </RACTab>
118
+ <Provider
119
+ values={[
120
+ [InternalTabsContext, {
121
+ density,
122
+ isDisabled,
123
+ orientation,
124
+ disabledKeys,
125
+ selectedKey: value,
126
+ onSelectionChange: setValue,
127
+ labelBehavior,
128
+ 'aria-label': props['aria-label'],
129
+ 'aria-labelledby': props['aria-labelledby']
130
+ }]
131
+ ]}>
132
+ <CollectionBuilder content={props.children}>
133
+ {collection => (
134
+ <CollapsingTabs
135
+ {...props}
136
+ selectedKey={value}
137
+ onSelectionChange={setValue}
138
+ collection={collection}
139
+ containerRef={domRef} />
140
+ )}
141
+ </CollectionBuilder>
142
+ </Provider>
143
143
  );
144
- }
144
+ });
145
145
 
146
146
  const tablist = style({
147
147
  display: 'flex',
@@ -151,6 +151,14 @@ const tablist = style({
151
151
  density: {
152
152
  compact: 24,
153
153
  regular: 32
154
+ },
155
+ labelBehavior: {
156
+ hide: {
157
+ density: {
158
+ compact: 16,
159
+ regular: 24
160
+ }
161
+ }
154
162
  }
155
163
  }
156
164
  }
@@ -175,7 +183,15 @@ const tablist = style({
175
183
  });
176
184
 
177
185
  export function TabList<T extends object>(props: TabListProps<T>) {
178
- let {density, isDisabled, disabledKeys, orientation} = useSlottedContext(TabsContext) ?? {};
186
+ let {showTabs} = useContext(CollapseContext) ?? {};
187
+
188
+ if (showTabs) {
189
+ return <TabListInner {...props} />;
190
+ }
191
+ }
192
+
193
+ function TabListInner<T extends object>(props: TabListProps<T>) {
194
+ let {density, isDisabled, disabledKeys, orientation, labelBehavior, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy} = useContext(InternalTabsContext) ?? {};
179
195
  let state = useContext(TabListStateContext);
180
196
  let [selectedTab, setSelectedTab] = useState<HTMLElement | undefined>(undefined);
181
197
  let tablistRef = useRef<HTMLDivElement>(null);
@@ -198,34 +214,16 @@ export function TabList<T extends object>(props: TabListProps<T>) {
198
214
  <TabLine disabledKeys={disabledKeys} isDisabled={isDisabled} selectedTab={selectedTab} orientation={orientation} density={density} />}
199
215
  <RACTabList
200
216
  {...props}
217
+ aria-label={ariaLabel}
218
+ aria-labelledby={ariaLabelledBy}
201
219
  ref={tablistRef}
202
- className={renderProps => tablist({...renderProps, density})} />
220
+ className={renderProps => tablist({...renderProps, labelBehavior, density})} />
203
221
  {orientation === 'horizontal' &&
204
222
  <TabLine disabledKeys={disabledKeys} isDisabled={isDisabled} selectedTab={selectedTab} orientation={orientation} density={density} />}
205
223
  </div>
206
224
  );
207
225
  }
208
226
 
209
- function isAllTabsDisabled<T>(collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) {
210
- let testKey: Key | null = null;
211
- if (collection && collection.size > 0) {
212
- testKey = collection.getFirstKey();
213
-
214
- let index = 0;
215
- while (testKey && index < collection.size) {
216
- // We have to check if the item in the collection has a key in disabledKeys or has the isDisabled prop set directly on it
217
- if (!disabledKeys.has(testKey) && !collection.getItem(testKey)?.props?.isDisabled) {
218
- return false;
219
- }
220
-
221
- testKey = collection.getKeyAfter(testKey);
222
- index++;
223
- }
224
- return true;
225
- }
226
- return false;
227
- }
228
-
229
227
  interface TabLineProps {
230
228
  disabledKeys: Iterable<Key> | undefined,
231
229
  isDisabled: boolean | undefined,
@@ -279,7 +277,7 @@ function TabLine(props: TabLineProps) {
279
277
  // We want to add disabled styling to the selection indicator only if all the Tabs are disabled
280
278
  let [isDisabled, setIsDisabled] = useState<boolean>(false);
281
279
  useEffect(() => {
282
- let isDisabled = isTabsDisabled || isAllTabsDisabled(state?.collection || null, disabledKeys ? new Set(disabledKeys) : new Set(null));
280
+ let isDisabled = isTabsDisabled || isAllTabsDisabled(state?.collection, disabledKeys ? new Set(disabledKeys) : new Set(null));
283
281
  setIsDisabled(isDisabled);
284
282
  }, [state?.collection, disabledKeys, isTabsDisabled, setIsDisabled]);
285
283
 
@@ -314,50 +312,358 @@ function TabLine(props: TabLineProps) {
314
312
 
315
313
  useLayoutEffect(() => {
316
314
  onResize();
317
- }, [onResize, state?.selectedItem?.key, direction, orientation, density]);
315
+ }, [onResize, state?.selectedItem?.key, density, direction, orientation]);
318
316
 
319
317
  return (
320
318
  <div style={{...style}} className={selectedIndicator({isDisabled, orientation})} />
321
319
  );
322
320
  }
323
321
 
324
- const tabs = style({
322
+ const tab = style({
323
+ ...focusRing(),
325
324
  display: 'flex',
325
+ color: {
326
+ default: 'neutral-subdued',
327
+ isSelected: 'neutral',
328
+ isHovered: 'neutral-subdued',
329
+ isDisabled: 'disabled',
330
+ forcedColors: {
331
+ isSelected: 'Highlight',
332
+ isDisabled: 'GrayText'
333
+ }
334
+ },
335
+ borderRadius: 'sm',
336
+ gap: 'text-to-visual',
337
+ height: {
338
+ density: {
339
+ compact: 32,
340
+ regular: 48
341
+ }
342
+ },
343
+ alignItems: 'center',
344
+ position: 'relative',
345
+ cursor: 'default',
326
346
  flexShrink: 0,
327
- fontFamily: 'sans',
328
- fontWeight: 'normal',
329
- flexDirection: {
330
- orientation: {
331
- horizontal: 'column'
347
+ transition: 'default',
348
+ paddingX: {
349
+ labelBehavior: {
350
+ hide: size(6)
332
351
  }
352
+ },
353
+ disableTapHighlight: true
354
+ }, getAllowedOverrides());
355
+
356
+ const icon = style({
357
+ display: 'block',
358
+ flexShrink: 0,
359
+ '--iconPrimary': {
360
+ type: 'fill',
361
+ value: 'currentColor'
333
362
  }
334
- }, getAllowedOverrides({height: true}));
363
+ });
335
364
 
336
- /**
337
- * Tabs organize content into multiple sections and allow users to navigate between them. The content under the set of tabs should be related and form a coherent unit.
338
- */
339
- export const Tabs = forwardRef(function Tabs(props: TabsProps, ref: DOMRef<HTMLDivElement>) {
340
- [props, ref] = useSpectrumContextProps(props, ref, TabsContext);
341
- let {
342
- density = 'regular',
343
- isDisabled,
344
- disabledKeys,
345
- orientation = 'horizontal'
346
- } = props;
347
- let domRef = useDOMRef(ref);
365
+ export function Tab(props: TabProps) {
366
+ let {density, labelBehavior} = useContext(InternalTabsContext) ?? {};
348
367
 
368
+ let contentId = useId();
369
+ let ariaLabelledBy = props['aria-labelledby'] || '';
349
370
  return (
350
- <RACTabs
371
+ <RACTab
351
372
  {...props}
352
- ref={domRef}
373
+ // @ts-ignore
374
+ originalProps={props}
375
+ aria-labelledby={`${labelBehavior === 'hide' ? contentId : ''} ${ariaLabelledBy}`}
353
376
  style={props.UNSAFE_style}
354
- className={renderProps => (props.UNSAFE_className || '') + tabs({...renderProps}, props.styles)}>
355
- <Provider
356
- values={[
357
- [TabsContext, {density, isDisabled, disabledKeys, orientation}]
358
- ]}>
377
+ className={renderProps => (props.UNSAFE_className || '') + tab({...renderProps, density, labelBehavior}, props.styles)}>
378
+ {({
379
+ // @ts-ignore
380
+ isMenu
381
+ }) => {
382
+ if (isMenu) {
383
+ return props.children;
384
+ } else {
385
+ return (
386
+ <Provider
387
+ values={[
388
+ [TextContext, {
389
+ id: contentId,
390
+ styles:
391
+ style({
392
+ order: 1,
393
+ display: {
394
+ labelBehavior: {
395
+ hide: 'none'
396
+ }
397
+ }
398
+ })({labelBehavior})
399
+ }],
400
+ [IconContext, {
401
+ render: centerBaseline({slot: 'icon', styles: style({order: 0})}),
402
+ styles: icon
403
+ }]
404
+ ]}>
405
+ {typeof props.children === 'string' ? <Text>{props.children}</Text> : props.children}
406
+ </Provider>
407
+ );
408
+ }
409
+ }}
410
+ </RACTab>
411
+ );
412
+ }
413
+
414
+ const tabPanel = style({
415
+ ...focusRing(),
416
+ marginTop: 4,
417
+ color: 'gray-800',
418
+ flexGrow: 1,
419
+ flexBasis: '[0%]',
420
+ minHeight: 0,
421
+ minWidth: 0
422
+ }, getAllowedOverrides({height: true}));
423
+
424
+ export function TabPanel(props: TabPanelProps) {
425
+ let {showTabs} = useContext(CollapseContext);
426
+ let {selectedKey} = useContext(InternalTabsContext);
427
+ if (showTabs) {
428
+ return (
429
+ <AriaTabPanel
430
+ {...props}
431
+ style={props.UNSAFE_style}
432
+ className={renderProps => (props.UNSAFE_className ?? '') + tabPanel(renderProps, props.styles)} />
433
+ );
434
+ }
435
+
436
+ if (props.id !== selectedKey) {
437
+ return null;
438
+ }
439
+
440
+ return <CollapsedTabPanel {...props} />;
441
+ }
442
+
443
+ function CollapsedTabPanel(props: TabPanelProps) {
444
+ let {UNSAFE_style, UNSAFE_className = '', ...otherProps} = props;
445
+ let {menuId, valueId} = useContext(CollapseContext);
446
+ let ref = useRef(null);
447
+ let tabIndex = useHasTabbableChild(ref) ? undefined : 0;
448
+
449
+ return (
450
+ <Group
451
+ {...otherProps}
452
+ ref={ref}
453
+ aria-labelledby={menuId + ' ' + valueId}
454
+ tabIndex={tabIndex}
455
+ style={UNSAFE_style}
456
+ className={renderProps => UNSAFE_className + tabPanel(renderProps, props.styles)} />
457
+ );
458
+ }
459
+
460
+ function isAllTabsDisabled<T>(collection: Collection<Node<T>> | undefined, disabledKeys: Set<Key>) {
461
+ let testKey: Key | null = null;
462
+ if (collection && collection.size > 0) {
463
+ testKey = collection.getFirstKey();
464
+
465
+ let index = 0;
466
+ while (testKey && index < collection.size) {
467
+ // We have to check if the item in the collection has a key in disabledKeys or has the isDisabled prop set directly on it
468
+ if (!disabledKeys.has(testKey) && !collection.getItem(testKey)?.props?.isDisabled) {
469
+ return false;
470
+ }
471
+
472
+ testKey = collection.getKeyAfter(testKey);
473
+ index++;
474
+ }
475
+ return true;
476
+ }
477
+ return false;
478
+ }
479
+
480
+ let HiddenTabs = function (props: {
481
+ listRef: RefObject<HTMLDivElement | null>,
482
+ items: Array<Node<any>>,
483
+ size?: string,
484
+ density?: 'compact' | 'regular'
485
+ }) {
486
+ let {listRef, items, size, density} = props;
487
+
488
+ return (
489
+ <div
490
+ // @ts-ignore
491
+ inert={inertValue(true)}
492
+ ref={listRef}
493
+ className={style({
494
+ display: '[inherit]',
495
+ flexDirection: '[inherit]',
496
+ gap: '[inherit]',
497
+ flexWrap: '[inherit]',
498
+ position: 'absolute',
499
+ inset: 0,
500
+ visibility: 'hidden',
501
+ overflow: 'hidden',
502
+ opacity: 0
503
+ })}>
504
+ {items.map((item) => {
505
+ // pull off individual props as an allow list, don't want refs or other props getting through
506
+ return (
507
+ <div
508
+ data-hidden-tab
509
+ style={item.props.UNSAFE_style}
510
+ key={item.key}
511
+ className={item.props.className({size, density})}>
512
+ {item.props.children({size, density})}
513
+ </div>
514
+ );
515
+ })}
516
+ </div>
517
+ );
518
+ };
519
+
520
+ let TabsMenu = (props: {valueId: string, items: Array<Node<any>>, onSelectionChange: TabsProps['onSelectionChange']} & Omit<TabsProps, 'children'>) => {
521
+ let {id, items, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, valueId} = props;
522
+ let {density, onSelectionChange, selectedKey, isDisabled, disabledKeys, labelBehavior} = useContext(InternalTabsContext);
523
+ let state = useContext(TabListStateContext);
524
+ let allKeysDisabled = useMemo(() => {
525
+ return isAllTabsDisabled(state?.collection, disabledKeys ? new Set(disabledKeys) : new Set());
526
+ }, [state?.collection, disabledKeys]);
527
+ let labelProps = useLabels({
528
+ id,
529
+ 'aria-label': ariaLabel,
530
+ 'aria-labelledby': ariaLabelledBy
531
+ });
532
+
533
+ return (
534
+ <div
535
+ className={style({
536
+ display: 'flex',
537
+ flexShrink: 0,
538
+ alignItems: 'center',
539
+ height: {
540
+ density: {
541
+ compact: 32,
542
+ regular: 48
543
+ }
544
+ }})({density})}>
545
+ <Picker
546
+ id={id}
547
+ valueId={valueId}
548
+ {...labelProps}
549
+ aria-describedby={props['aria-describedby']}
550
+ aria-details={props['aria-details']}
551
+ isDisabled={isDisabled || allKeysDisabled}
552
+ density={density!}
553
+ labelBehavior={labelBehavior}
554
+ items={items}
555
+ disabledKeys={disabledKeys}
556
+ selectedKey={selectedKey}
557
+ onSelectionChange={onSelectionChange}>
558
+ {(item: Node<any>) => {
559
+ return (
560
+ <PickerItem
561
+ {...item.props.originalProps}
562
+ isDisabled={isDisabled || allKeysDisabled}
563
+ key={item.key}>
564
+ {item.props.children({density, isMenu: true})}
565
+ </PickerItem>
566
+ );
567
+ }}
568
+ </Picker>
569
+ </div>
570
+ );
571
+ };
572
+
573
+ let CollapsingTabs = ({collection, containerRef, ...props}: {collection: Collection<Node<unknown>>, containerRef: any} & TabsProps) => {
574
+ let {density = 'regular', orientation = 'horizontal', labelBehavior = 'show', onSelectionChange} = props;
575
+ let [showItems, _setShowItems] = useState(true);
576
+ showItems = orientation === 'vertical' ? true : showItems;
577
+ let setShowItems = useCallback((value: boolean) => {
578
+ if (orientation === 'vertical') {
579
+ // if orientation is vertical, we always show the items
580
+ _setShowItems(true);
581
+ } else {
582
+ _setShowItems(value);
583
+ }
584
+ }, [orientation]);
585
+
586
+ let {direction} = useLocale();
587
+
588
+ let children = useMemo(() => [...collection], [collection]);
589
+
590
+ let listRef = useRef<HTMLDivElement | null>(null);
591
+ let updateOverflow = useEffectEvent(() => {
592
+ if (orientation === 'vertical' || !listRef.current || !containerRef?.current) {
593
+ return;
594
+ }
595
+ let container = listRef.current;
596
+ let containerRect = container.getBoundingClientRect();
597
+ let tabs = container.querySelectorAll('[data-hidden-tab]');
598
+ let lastTab = tabs[tabs.length - 1];
599
+ let lastTabRect = lastTab.getBoundingClientRect();
600
+ if (direction === 'ltr') {
601
+ setShowItems?.(lastTabRect.right <= containerRect.right);
602
+ } else {
603
+ setShowItems?.(lastTabRect.left >= containerRect.left);
604
+ }
605
+ });
606
+
607
+ useResizeObserver({ref: containerRef, onResize: updateOverflow});
608
+
609
+ useLayoutEffect(() => {
610
+ if (collection.size > 0) {
611
+ queueMicrotask(updateOverflow);
612
+ }
613
+ }, [collection.size, updateOverflow]);
614
+
615
+ // start with null so that the first render won't have a flicker
616
+ let prevOrientation = useRef<Orientation | null>(null);
617
+ useLayoutEffect(() => {
618
+ if (collection.size > 0 && prevOrientation.current !== orientation) {
619
+ updateOverflow();
620
+ }
621
+ prevOrientation.current = orientation;
622
+ }, [collection.size, updateOverflow, orientation]);
623
+
624
+ useEffect(() => {
625
+ // Recalculate visible tags when fonts are loaded.
626
+ document.fonts?.ready.then(() => updateOverflow());
627
+ // eslint-disable-next-line react-hooks/exhaustive-deps
628
+ }, []);
629
+
630
+ let menuId = useId();
631
+ let valueId = useId();
632
+
633
+ let contents: ReactNode;
634
+ if (showItems) {
635
+ contents = (
636
+ <RACTabs
637
+ {...props}
638
+ style={{display: 'contents'}}>
359
639
  {props.children}
360
- </Provider>
361
- </RACTabs>
640
+ </RACTabs>
641
+ );
642
+ } else {
643
+ contents = (
644
+ <>
645
+ <TabsMenu
646
+ id={menuId}
647
+ valueId={valueId}
648
+ items={children}
649
+ onSelectionChange={onSelectionChange}
650
+ aria-label={props['aria-label']}
651
+ aria-describedby={props['aria-labelledby']} />
652
+ <CollapseContext.Provider value={{showTabs: false, menuId, valueId}}>
653
+ {props.children}
654
+ </CollapseContext.Provider>
655
+ </>
656
+ );
657
+ }
658
+
659
+ return (
660
+ <div style={props.UNSAFE_style} className={(props.UNSAFE_className || '') + tabs({orientation}, props.styles)} ref={containerRef}>
661
+ <div className={tablist({orientation, labelBehavior, density})}>
662
+ <HiddenTabs items={children} density={density} listRef={listRef} />
663
+ </div>
664
+ <CollapseContext.Provider value={{showTabs: true, menuId, valueId}}>
665
+ {contents}
666
+ </CollapseContext.Provider>
667
+ </div>
362
668
  );
363
- });
669
+ };