@react-spectrum/s2 0.11.1 → 0.12.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 (566) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.css +2 -2
  3. package/dist/Accordion.mjs +3 -3
  4. package/dist/ActionBar.cjs +61 -62
  5. package/dist/ActionBar.cjs.map +1 -1
  6. package/dist/ActionBar.css +62 -66
  7. package/dist/ActionBar.css.map +1 -1
  8. package/dist/ActionBar.mjs +61 -62
  9. package/dist/ActionBar.mjs.map +1 -1
  10. package/dist/ActionButton.cjs +356 -250
  11. package/dist/ActionButton.cjs.map +1 -1
  12. package/dist/ActionButton.css +208 -144
  13. package/dist/ActionButton.css.map +1 -1
  14. package/dist/ActionButton.mjs +357 -251
  15. package/dist/ActionButton.mjs.map +1 -1
  16. package/dist/ActionButtonGroup.cjs +16 -16
  17. package/dist/ActionButtonGroup.css +9 -9
  18. package/dist/ActionButtonGroup.mjs +16 -16
  19. package/dist/Add.cjs +10 -10
  20. package/dist/Add.css +6 -6
  21. package/dist/Add.mjs +10 -10
  22. package/dist/AlertDialog.cjs +3 -3
  23. package/dist/AlertDialog.css +3 -3
  24. package/dist/AlertDialog.mjs +3 -3
  25. package/dist/Asterisk.cjs +6 -6
  26. package/dist/Asterisk.css +4 -4
  27. package/dist/Asterisk.mjs +6 -6
  28. package/dist/Avatar.cjs +20 -16
  29. package/dist/Avatar.cjs.map +1 -1
  30. package/dist/Avatar.css +22 -14
  31. package/dist/Avatar.css.map +1 -1
  32. package/dist/Avatar.mjs +20 -16
  33. package/dist/Avatar.mjs.map +1 -1
  34. package/dist/AvatarGroup.cjs +135 -135
  35. package/dist/AvatarGroup.css +33 -33
  36. package/dist/AvatarGroup.mjs +135 -135
  37. package/dist/Badge.cjs +207 -207
  38. package/dist/Badge.css +127 -127
  39. package/dist/Badge.mjs +207 -207
  40. package/dist/Breadcrumbs.cjs +255 -255
  41. package/dist/Breadcrumbs.css +109 -109
  42. package/dist/Breadcrumbs.mjs +255 -255
  43. package/dist/Button.cjs +356 -354
  44. package/dist/Button.cjs.map +1 -1
  45. package/dist/Button.css +179 -179
  46. package/dist/Button.css.map +1 -1
  47. package/dist/Button.mjs +357 -356
  48. package/dist/Button.mjs.map +1 -1
  49. package/dist/ButtonGroup.cjs +21 -21
  50. package/dist/ButtonGroup.css +15 -15
  51. package/dist/ButtonGroup.mjs +21 -21
  52. package/dist/Calendar.cjs +127 -127
  53. package/dist/Calendar.cjs.map +1 -1
  54. package/dist/Calendar.css +134 -134
  55. package/dist/Calendar.css.map +1 -1
  56. package/dist/Calendar.mjs +127 -127
  57. package/dist/Calendar.mjs.map +1 -1
  58. package/dist/Card.cjs +335 -311
  59. package/dist/Card.cjs.map +1 -1
  60. package/dist/Card.css +213 -213
  61. package/dist/Card.css.map +1 -1
  62. package/dist/Card.mjs +335 -311
  63. package/dist/Card.mjs.map +1 -1
  64. package/dist/CardView.cjs +25 -19
  65. package/dist/CardView.cjs.map +1 -1
  66. package/dist/CardView.css +16 -16
  67. package/dist/CardView.css.map +1 -1
  68. package/dist/CardView.mjs +26 -20
  69. package/dist/CardView.mjs.map +1 -1
  70. package/dist/CenterBaseline.cjs +1 -1
  71. package/dist/CenterBaseline.css +2 -2
  72. package/dist/CenterBaseline.mjs +1 -1
  73. package/dist/Checkbox.cjs +171 -171
  74. package/dist/Checkbox.css +92 -92
  75. package/dist/Checkbox.mjs +171 -171
  76. package/dist/CheckboxGroup.cjs +46 -46
  77. package/dist/CheckboxGroup.css +38 -38
  78. package/dist/CheckboxGroup.mjs +46 -46
  79. package/dist/Checkmark.cjs +12 -12
  80. package/dist/Checkmark.css +8 -8
  81. package/dist/Checkmark.mjs +12 -12
  82. package/dist/Chevron.cjs +12 -12
  83. package/dist/Chevron.css +10 -10
  84. package/dist/Chevron.mjs +12 -12
  85. package/dist/ClearButton.cjs +29 -29
  86. package/dist/ClearButton.css +29 -29
  87. package/dist/ClearButton.mjs +29 -29
  88. package/dist/CloseButton.cjs +55 -55
  89. package/dist/CloseButton.css +46 -46
  90. package/dist/CloseButton.mjs +55 -55
  91. package/dist/ColorArea.cjs +25 -18
  92. package/dist/ColorArea.cjs.map +1 -1
  93. package/dist/ColorArea.css +16 -16
  94. package/dist/ColorArea.css.map +1 -1
  95. package/dist/ColorArea.mjs +26 -19
  96. package/dist/ColorArea.mjs.map +1 -1
  97. package/dist/ColorField.cjs +33 -33
  98. package/dist/ColorField.cjs.map +1 -1
  99. package/dist/ColorField.css +28 -28
  100. package/dist/ColorField.css.map +1 -1
  101. package/dist/ColorField.mjs +33 -33
  102. package/dist/ColorField.mjs.map +1 -1
  103. package/dist/ColorHandle.cjs +27 -27
  104. package/dist/ColorHandle.css +43 -43
  105. package/dist/ColorHandle.mjs +27 -27
  106. package/dist/ColorSlider.cjs +122 -121
  107. package/dist/ColorSlider.cjs.map +1 -1
  108. package/dist/ColorSlider.css +54 -54
  109. package/dist/ColorSlider.css.map +1 -1
  110. package/dist/ColorSlider.mjs +122 -121
  111. package/dist/ColorSlider.mjs.map +1 -1
  112. package/dist/ColorSwatch.cjs +30 -30
  113. package/dist/ColorSwatch.css +29 -29
  114. package/dist/ColorSwatch.mjs +30 -30
  115. package/dist/ColorSwatchPicker.cjs +28 -28
  116. package/dist/ColorSwatchPicker.css +46 -46
  117. package/dist/ColorSwatchPicker.mjs +28 -28
  118. package/dist/ColorWheel.cjs +26 -26
  119. package/dist/ColorWheel.css +17 -17
  120. package/dist/ColorWheel.mjs +26 -26
  121. package/dist/ComboBox.cjs +474 -452
  122. package/dist/ComboBox.cjs.map +1 -1
  123. package/dist/ComboBox.css +213 -185
  124. package/dist/ComboBox.css.map +1 -1
  125. package/dist/ComboBox.mjs +475 -453
  126. package/dist/ComboBox.mjs.map +1 -1
  127. package/dist/ContextualHelp.cjs +36 -33
  128. package/dist/ContextualHelp.cjs.map +1 -1
  129. package/dist/ContextualHelp.css +68 -60
  130. package/dist/ContextualHelp.css.map +1 -1
  131. package/dist/ContextualHelp.mjs +37 -34
  132. package/dist/ContextualHelp.mjs.map +1 -1
  133. package/dist/Cross.cjs +14 -14
  134. package/dist/Cross.css +10 -10
  135. package/dist/Cross.mjs +14 -14
  136. package/dist/CustomDialog.cjs +26 -26
  137. package/dist/CustomDialog.cjs.map +1 -1
  138. package/dist/CustomDialog.css +25 -25
  139. package/dist/CustomDialog.css.map +1 -1
  140. package/dist/CustomDialog.mjs +26 -26
  141. package/dist/CustomDialog.mjs.map +1 -1
  142. package/dist/Dash.cjs +10 -10
  143. package/dist/Dash.css +6 -6
  144. package/dist/Dash.mjs +10 -10
  145. package/dist/DateField.cjs +74 -74
  146. package/dist/DateField.cjs.map +1 -1
  147. package/dist/DateField.css +77 -77
  148. package/dist/DateField.css.map +1 -1
  149. package/dist/DateField.mjs +74 -74
  150. package/dist/DateField.mjs.map +1 -1
  151. package/dist/DatePicker.cjs +194 -191
  152. package/dist/DatePicker.cjs.map +1 -1
  153. package/dist/DatePicker.css +138 -126
  154. package/dist/DatePicker.css.map +1 -1
  155. package/dist/DatePicker.mjs +195 -192
  156. package/dist/DatePicker.mjs.map +1 -1
  157. package/dist/DateRangePicker.cjs +57 -57
  158. package/dist/DateRangePicker.cjs.map +1 -1
  159. package/dist/DateRangePicker.css +60 -60
  160. package/dist/DateRangePicker.css.map +1 -1
  161. package/dist/DateRangePicker.mjs +57 -57
  162. package/dist/DateRangePicker.mjs.map +1 -1
  163. package/dist/Dialog.cjs +17 -17
  164. package/dist/Dialog.cjs.map +1 -1
  165. package/dist/Dialog.css +88 -84
  166. package/dist/Dialog.css.map +1 -1
  167. package/dist/Dialog.mjs +17 -17
  168. package/dist/Dialog.mjs.map +1 -1
  169. package/dist/Disclosure.cjs +128 -147
  170. package/dist/Disclosure.cjs.map +1 -1
  171. package/dist/Disclosure.css +144 -112
  172. package/dist/Disclosure.css.map +1 -1
  173. package/dist/Disclosure.mjs +128 -147
  174. package/dist/Disclosure.mjs.map +1 -1
  175. package/dist/Divider.cjs +26 -26
  176. package/dist/Divider.css +25 -25
  177. package/dist/Divider.mjs +26 -26
  178. package/dist/DropZone.cjs +63 -63
  179. package/dist/DropZone.cjs.map +1 -1
  180. package/dist/DropZone.css +58 -58
  181. package/dist/DropZone.css.map +1 -1
  182. package/dist/DropZone.mjs +63 -63
  183. package/dist/DropZone.mjs.map +1 -1
  184. package/dist/Field.cjs +370 -370
  185. package/dist/Field.cjs.map +1 -1
  186. package/dist/Field.css +146 -142
  187. package/dist/Field.css.map +1 -1
  188. package/dist/Field.mjs +370 -370
  189. package/dist/Field.mjs.map +1 -1
  190. package/dist/Form.cjs +10 -10
  191. package/dist/Form.css +9 -9
  192. package/dist/Form.mjs +10 -10
  193. package/dist/FullscreenDialog.cjs +5 -5
  194. package/dist/FullscreenDialog.cjs.map +1 -1
  195. package/dist/FullscreenDialog.css +93 -93
  196. package/dist/FullscreenDialog.css.map +1 -1
  197. package/dist/FullscreenDialog.mjs +5 -5
  198. package/dist/FullscreenDialog.mjs.map +1 -1
  199. package/dist/IllustratedMessage.cjs +257 -257
  200. package/dist/IllustratedMessage.css +78 -78
  201. package/dist/IllustratedMessage.mjs +257 -257
  202. package/dist/Image.cjs +25 -17
  203. package/dist/Image.cjs.map +1 -1
  204. package/dist/Image.css +14 -14
  205. package/dist/Image.css.map +1 -1
  206. package/dist/Image.mjs +25 -17
  207. package/dist/Image.mjs.map +1 -1
  208. package/dist/InlineAlert.cjs +138 -153
  209. package/dist/InlineAlert.cjs.map +1 -1
  210. package/dist/InlineAlert.css +82 -151
  211. package/dist/InlineAlert.css.map +1 -1
  212. package/dist/InlineAlert.mjs +138 -153
  213. package/dist/InlineAlert.mjs.map +1 -1
  214. package/dist/Link.cjs +55 -55
  215. package/dist/Link.css +46 -46
  216. package/dist/Link.mjs +55 -55
  217. package/dist/LinkOut.cjs +8 -8
  218. package/dist/LinkOut.css +8 -8
  219. package/dist/LinkOut.mjs +8 -8
  220. package/dist/Menu.cjs +529 -501
  221. package/dist/Menu.cjs.map +1 -1
  222. package/dist/Menu.css +195 -191
  223. package/dist/Menu.css.map +1 -1
  224. package/dist/Menu.mjs +529 -502
  225. package/dist/Menu.mjs.map +1 -1
  226. package/dist/Meter.cjs +164 -164
  227. package/dist/Meter.css +93 -93
  228. package/dist/Meter.mjs +164 -164
  229. package/dist/Modal.cjs +90 -70
  230. package/dist/Modal.cjs.map +1 -1
  231. package/dist/Modal.css +76 -60
  232. package/dist/Modal.css.map +1 -1
  233. package/dist/Modal.mjs +90 -70
  234. package/dist/Modal.mjs.map +1 -1
  235. package/dist/NotificationBadge.cjs +59 -59
  236. package/dist/NotificationBadge.css +51 -51
  237. package/dist/NotificationBadge.mjs +59 -59
  238. package/dist/NumberField.cjs +116 -116
  239. package/dist/NumberField.cjs.map +1 -1
  240. package/dist/NumberField.css +100 -100
  241. package/dist/NumberField.css.map +1 -1
  242. package/dist/NumberField.mjs +116 -116
  243. package/dist/NumberField.mjs.map +1 -1
  244. package/dist/Picker.cjs +424 -349
  245. package/dist/Picker.cjs.map +1 -1
  246. package/dist/Picker.css +200 -180
  247. package/dist/Picker.css.map +1 -1
  248. package/dist/Picker.mjs +428 -353
  249. package/dist/Picker.mjs.map +1 -1
  250. package/dist/Popover.cjs +120 -116
  251. package/dist/Popover.cjs.map +1 -1
  252. package/dist/Popover.css +86 -82
  253. package/dist/Popover.css.map +1 -1
  254. package/dist/Popover.mjs +121 -118
  255. package/dist/Popover.mjs.map +1 -1
  256. package/dist/ProgressBar.cjs +174 -174
  257. package/dist/ProgressBar.css +101 -101
  258. package/dist/ProgressBar.mjs +174 -174
  259. package/dist/ProgressCircle.cjs +32 -32
  260. package/dist/ProgressCircle.css +24 -24
  261. package/dist/ProgressCircle.mjs +32 -32
  262. package/dist/Provider.cjs +11 -11
  263. package/dist/Provider.cjs.map +1 -1
  264. package/dist/Provider.css +13 -13
  265. package/dist/Provider.css.map +1 -1
  266. package/dist/Provider.mjs +11 -11
  267. package/dist/Provider.mjs.map +1 -1
  268. package/dist/Radio.cjs +155 -155
  269. package/dist/Radio.css +79 -79
  270. package/dist/Radio.mjs +155 -155
  271. package/dist/RadioGroup.cjs +43 -43
  272. package/dist/RadioGroup.css +38 -38
  273. package/dist/RadioGroup.mjs +43 -43
  274. package/dist/RangeCalendar.cjs +8 -8
  275. package/dist/RangeCalendar.cjs.map +1 -1
  276. package/dist/RangeCalendar.css +10 -10
  277. package/dist/RangeCalendar.css.map +1 -1
  278. package/dist/RangeCalendar.mjs +8 -8
  279. package/dist/RangeCalendar.mjs.map +1 -1
  280. package/dist/RangeSlider.cjs.map +1 -1
  281. package/dist/RangeSlider.mjs.map +1 -1
  282. package/dist/SearchField.cjs +43 -43
  283. package/dist/SearchField.cjs.map +1 -1
  284. package/dist/SearchField.css +46 -46
  285. package/dist/SearchField.css.map +1 -1
  286. package/dist/SearchField.mjs +43 -43
  287. package/dist/SearchField.mjs.map +1 -1
  288. package/dist/SegmentedControl.cjs +193 -224
  289. package/dist/SegmentedControl.cjs.map +1 -1
  290. package/dist/SegmentedControl.css +146 -118
  291. package/dist/SegmentedControl.css.map +1 -1
  292. package/dist/SegmentedControl.mjs +196 -227
  293. package/dist/SegmentedControl.mjs.map +1 -1
  294. package/dist/SelectBoxGroup.cjs +161 -159
  295. package/dist/SelectBoxGroup.cjs.map +1 -1
  296. package/dist/SelectBoxGroup.css +123 -123
  297. package/dist/SelectBoxGroup.css.map +1 -1
  298. package/dist/SelectBoxGroup.mjs +161 -159
  299. package/dist/SelectBoxGroup.mjs.map +1 -1
  300. package/dist/Slider.cjs +300 -300
  301. package/dist/Slider.css +151 -151
  302. package/dist/Slider.mjs +300 -300
  303. package/dist/StatusLight.cjs +126 -126
  304. package/dist/StatusLight.css +61 -61
  305. package/dist/StatusLight.mjs +126 -126
  306. package/dist/Switch.cjs +163 -163
  307. package/dist/Switch.css +74 -74
  308. package/dist/Switch.mjs +163 -163
  309. package/dist/TableView.cjs +340 -328
  310. package/dist/TableView.cjs.map +1 -1
  311. package/dist/TableView.css +176 -172
  312. package/dist/TableView.css.map +1 -1
  313. package/dist/TableView.mjs +340 -328
  314. package/dist/TableView.mjs.map +1 -1
  315. package/dist/Tabs.cjs +150 -190
  316. package/dist/Tabs.cjs.map +1 -1
  317. package/dist/Tabs.css +128 -100
  318. package/dist/Tabs.css.map +1 -1
  319. package/dist/Tabs.mjs +153 -193
  320. package/dist/Tabs.mjs.map +1 -1
  321. package/dist/TabsPicker.cjs +169 -161
  322. package/dist/TabsPicker.cjs.map +1 -1
  323. package/dist/TabsPicker.css +116 -124
  324. package/dist/TabsPicker.css.map +1 -1
  325. package/dist/TabsPicker.mjs +170 -162
  326. package/dist/TabsPicker.mjs.map +1 -1
  327. package/dist/TagGroup.cjs +226 -218
  328. package/dist/TagGroup.cjs.map +1 -1
  329. package/dist/TagGroup.css +147 -147
  330. package/dist/TagGroup.css.map +1 -1
  331. package/dist/TagGroup.mjs +226 -218
  332. package/dist/TagGroup.mjs.map +1 -1
  333. package/dist/TextField.cjs +65 -63
  334. package/dist/TextField.cjs.map +1 -1
  335. package/dist/TextField.css +58 -54
  336. package/dist/TextField.css.map +1 -1
  337. package/dist/TextField.mjs +65 -63
  338. package/dist/TextField.mjs.map +1 -1
  339. package/dist/TimeField.cjs +53 -53
  340. package/dist/TimeField.cjs.map +1 -1
  341. package/dist/TimeField.css +48 -48
  342. package/dist/TimeField.css.map +1 -1
  343. package/dist/TimeField.mjs +53 -53
  344. package/dist/TimeField.mjs.map +1 -1
  345. package/dist/Toast.cjs +120 -120
  346. package/dist/Toast.css +108 -108
  347. package/dist/Toast.mjs +120 -120
  348. package/dist/ToggleButton.cjs +3 -3
  349. package/dist/ToggleButton.css +12 -12
  350. package/dist/ToggleButton.mjs +3 -3
  351. package/dist/Tooltip.cjs +84 -83
  352. package/dist/Tooltip.cjs.map +1 -1
  353. package/dist/Tooltip.css +74 -70
  354. package/dist/Tooltip.css.map +1 -1
  355. package/dist/Tooltip.mjs +84 -83
  356. package/dist/Tooltip.mjs.map +1 -1
  357. package/dist/TreeView.cjs +150 -148
  358. package/dist/TreeView.cjs.map +1 -1
  359. package/dist/TreeView.css +147 -147
  360. package/dist/TreeView.css.map +1 -1
  361. package/dist/TreeView.mjs +151 -149
  362. package/dist/TreeView.mjs.map +1 -1
  363. package/dist/ar-AE.cjs +5 -0
  364. package/dist/ar-AE.cjs.map +1 -1
  365. package/dist/ar-AE.mjs +5 -0
  366. package/dist/ar-AE.mjs.map +1 -1
  367. package/dist/bg-BG.cjs +5 -0
  368. package/dist/bg-BG.cjs.map +1 -1
  369. package/dist/bg-BG.mjs +5 -0
  370. package/dist/bg-BG.mjs.map +1 -1
  371. package/dist/cs-CZ.cjs +5 -0
  372. package/dist/cs-CZ.cjs.map +1 -1
  373. package/dist/cs-CZ.mjs +5 -0
  374. package/dist/cs-CZ.mjs.map +1 -1
  375. package/dist/da-DK.cjs +5 -0
  376. package/dist/da-DK.cjs.map +1 -1
  377. package/dist/da-DK.mjs +5 -0
  378. package/dist/da-DK.mjs.map +1 -1
  379. package/dist/de-DE.cjs +5 -0
  380. package/dist/de-DE.cjs.map +1 -1
  381. package/dist/de-DE.mjs +5 -0
  382. package/dist/de-DE.mjs.map +1 -1
  383. package/dist/el-GR.cjs +5 -0
  384. package/dist/el-GR.cjs.map +1 -1
  385. package/dist/el-GR.mjs +5 -0
  386. package/dist/el-GR.mjs.map +1 -1
  387. package/dist/en-US.cjs +21 -16
  388. package/dist/en-US.cjs.map +1 -1
  389. package/dist/en-US.mjs +21 -16
  390. package/dist/en-US.mjs.map +1 -1
  391. package/dist/es-ES.cjs +5 -0
  392. package/dist/es-ES.cjs.map +1 -1
  393. package/dist/es-ES.mjs +5 -0
  394. package/dist/es-ES.mjs.map +1 -1
  395. package/dist/et-EE.cjs +5 -0
  396. package/dist/et-EE.cjs.map +1 -1
  397. package/dist/et-EE.mjs +5 -0
  398. package/dist/et-EE.mjs.map +1 -1
  399. package/dist/fi-FI.cjs +5 -0
  400. package/dist/fi-FI.cjs.map +1 -1
  401. package/dist/fi-FI.mjs +5 -0
  402. package/dist/fi-FI.mjs.map +1 -1
  403. package/dist/fr-FR.cjs +5 -0
  404. package/dist/fr-FR.cjs.map +1 -1
  405. package/dist/fr-FR.mjs +5 -0
  406. package/dist/fr-FR.mjs.map +1 -1
  407. package/dist/he-IL.cjs +5 -0
  408. package/dist/he-IL.cjs.map +1 -1
  409. package/dist/he-IL.mjs +5 -0
  410. package/dist/he-IL.mjs.map +1 -1
  411. package/dist/hr-HR.cjs +5 -0
  412. package/dist/hr-HR.cjs.map +1 -1
  413. package/dist/hr-HR.mjs +5 -0
  414. package/dist/hr-HR.mjs.map +1 -1
  415. package/dist/hu-HU.cjs +5 -0
  416. package/dist/hu-HU.cjs.map +1 -1
  417. package/dist/hu-HU.mjs +5 -0
  418. package/dist/hu-HU.mjs.map +1 -1
  419. package/dist/it-IT.cjs +5 -0
  420. package/dist/it-IT.cjs.map +1 -1
  421. package/dist/it-IT.mjs +5 -0
  422. package/dist/it-IT.mjs.map +1 -1
  423. package/dist/ja-JP.cjs +5 -0
  424. package/dist/ja-JP.cjs.map +1 -1
  425. package/dist/ja-JP.mjs +5 -0
  426. package/dist/ja-JP.mjs.map +1 -1
  427. package/dist/ko-KR.cjs +5 -0
  428. package/dist/ko-KR.cjs.map +1 -1
  429. package/dist/ko-KR.mjs +5 -0
  430. package/dist/ko-KR.mjs.map +1 -1
  431. package/dist/lt-LT.cjs +5 -0
  432. package/dist/lt-LT.cjs.map +1 -1
  433. package/dist/lt-LT.mjs +5 -0
  434. package/dist/lt-LT.mjs.map +1 -1
  435. package/dist/lv-LV.cjs +5 -0
  436. package/dist/lv-LV.cjs.map +1 -1
  437. package/dist/lv-LV.mjs +5 -0
  438. package/dist/lv-LV.mjs.map +1 -1
  439. package/dist/main.cjs +2 -0
  440. package/dist/main.cjs.map +1 -1
  441. package/dist/module.mjs +3 -3
  442. package/dist/module.mjs.map +1 -1
  443. package/dist/nb-NO.cjs +5 -0
  444. package/dist/nb-NO.cjs.map +1 -1
  445. package/dist/nb-NO.mjs +5 -0
  446. package/dist/nb-NO.mjs.map +1 -1
  447. package/dist/nl-NL.cjs +5 -0
  448. package/dist/nl-NL.cjs.map +1 -1
  449. package/dist/nl-NL.mjs +5 -0
  450. package/dist/nl-NL.mjs.map +1 -1
  451. package/dist/pl-PL.cjs +5 -0
  452. package/dist/pl-PL.cjs.map +1 -1
  453. package/dist/pl-PL.mjs +5 -0
  454. package/dist/pl-PL.mjs.map +1 -1
  455. package/dist/pt-BR.cjs +5 -0
  456. package/dist/pt-BR.cjs.map +1 -1
  457. package/dist/pt-BR.mjs +5 -0
  458. package/dist/pt-BR.mjs.map +1 -1
  459. package/dist/pt-PT.cjs +5 -0
  460. package/dist/pt-PT.cjs.map +1 -1
  461. package/dist/pt-PT.mjs +5 -0
  462. package/dist/pt-PT.mjs.map +1 -1
  463. package/dist/ro-RO.cjs +5 -0
  464. package/dist/ro-RO.cjs.map +1 -1
  465. package/dist/ro-RO.mjs +5 -0
  466. package/dist/ro-RO.mjs.map +1 -1
  467. package/dist/ru-RU.cjs +5 -0
  468. package/dist/ru-RU.cjs.map +1 -1
  469. package/dist/ru-RU.mjs +5 -0
  470. package/dist/ru-RU.mjs.map +1 -1
  471. package/dist/sk-SK.cjs +5 -0
  472. package/dist/sk-SK.cjs.map +1 -1
  473. package/dist/sk-SK.mjs +5 -0
  474. package/dist/sk-SK.mjs.map +1 -1
  475. package/dist/sl-SI.cjs +5 -0
  476. package/dist/sl-SI.cjs.map +1 -1
  477. package/dist/sl-SI.mjs +5 -0
  478. package/dist/sl-SI.mjs.map +1 -1
  479. package/dist/sr-SP.cjs +5 -0
  480. package/dist/sr-SP.cjs.map +1 -1
  481. package/dist/sr-SP.mjs +5 -0
  482. package/dist/sr-SP.mjs.map +1 -1
  483. package/dist/sv-SE.cjs +5 -0
  484. package/dist/sv-SE.cjs.map +1 -1
  485. package/dist/sv-SE.mjs +5 -0
  486. package/dist/sv-SE.mjs.map +1 -1
  487. package/dist/tr-TR.cjs +5 -0
  488. package/dist/tr-TR.cjs.map +1 -1
  489. package/dist/tr-TR.mjs +5 -0
  490. package/dist/tr-TR.mjs.map +1 -1
  491. package/dist/types.d.ts +147 -87
  492. package/dist/types.d.ts.map +1 -1
  493. package/dist/uk-UA.cjs +5 -0
  494. package/dist/uk-UA.cjs.map +1 -1
  495. package/dist/uk-UA.mjs +5 -0
  496. package/dist/uk-UA.mjs.map +1 -1
  497. package/dist/zh-CN.cjs +5 -0
  498. package/dist/zh-CN.cjs.map +1 -1
  499. package/dist/zh-CN.mjs +5 -0
  500. package/dist/zh-CN.mjs.map +1 -1
  501. package/dist/zh-TW.cjs +5 -0
  502. package/dist/zh-TW.cjs.map +1 -1
  503. package/dist/zh-TW.mjs +5 -0
  504. package/dist/zh-TW.mjs.map +1 -1
  505. package/icons/Icon.cjs +10 -10
  506. package/icons/Icon.css +9 -9
  507. package/icons/Icon.mjs +10 -10
  508. package/icons/Skeleton.cjs +2 -2
  509. package/icons/Skeleton.css +6 -6
  510. package/icons/Skeleton.mjs +2 -2
  511. package/package.json +20 -20
  512. package/page.css +7 -7
  513. package/src/ActionBar.tsx +5 -3
  514. package/src/ActionButton.tsx +112 -32
  515. package/src/Avatar.tsx +4 -1
  516. package/src/Button.tsx +27 -28
  517. package/src/Calendar.tsx +3 -0
  518. package/src/Card.tsx +22 -7
  519. package/src/CardView.tsx +9 -1
  520. package/src/ColorArea.tsx +10 -2
  521. package/src/ColorField.tsx +3 -2
  522. package/src/ColorSlider.tsx +3 -2
  523. package/src/ComboBox.tsx +69 -44
  524. package/src/ContextualHelp.tsx +36 -32
  525. package/src/CustomDialog.tsx +1 -1
  526. package/src/DateField.tsx +4 -0
  527. package/src/DatePicker.tsx +28 -20
  528. package/src/DateRangePicker.tsx +5 -1
  529. package/src/Dialog.tsx +6 -3
  530. package/src/Disclosure.tsx +20 -16
  531. package/src/DropZone.tsx +5 -2
  532. package/src/Field.tsx +4 -1
  533. package/src/FullscreenDialog.tsx +1 -1
  534. package/src/Image.tsx +30 -8
  535. package/src/InlineAlert.tsx +10 -27
  536. package/src/Menu.tsx +57 -45
  537. package/src/Modal.tsx +99 -74
  538. package/src/NumberField.tsx +3 -2
  539. package/src/Picker.tsx +114 -51
  540. package/src/Popover.tsx +57 -35
  541. package/src/Provider.tsx +1 -1
  542. package/src/RangeCalendar.tsx +3 -0
  543. package/src/RangeSlider.tsx +3 -0
  544. package/src/SearchField.tsx +2 -1
  545. package/src/SegmentedControl.tsx +16 -44
  546. package/src/SelectBoxGroup.tsx +21 -23
  547. package/src/TableView.tsx +7 -6
  548. package/src/Tabs.tsx +34 -70
  549. package/src/TabsPicker.tsx +35 -26
  550. package/src/TagGroup.tsx +44 -36
  551. package/src/TextField.tsx +11 -6
  552. package/src/TimeField.tsx +4 -0
  553. package/src/Tooltip.tsx +3 -0
  554. package/src/TreeView.tsx +2 -2
  555. package/src/index.ts +3 -2
  556. package/src/page.macro.ts +2 -2
  557. package/src/style-utils.ts +4 -3
  558. package/style/__tests__/style-macro.test.js +56 -56
  559. package/style/dist/spectrum-theme.cjs +36 -6
  560. package/style/dist/spectrum-theme.cjs.map +1 -1
  561. package/style/dist/spectrum-theme.mjs +36 -6
  562. package/style/dist/spectrum-theme.mjs.map +1 -1
  563. package/style/dist/types.d.ts +1 -0
  564. package/style/dist/types.d.ts.map +1 -1
  565. package/style/spectrum-theme.ts +10 -8
  566. package/style/tokens.ts +10 -0
package/dist/Tabs.css CHANGED
@@ -1,424 +1,452 @@
1
1
  @layer _.a {
2
- .uk11 {
2
+ .uk12 {
3
3
  font-family: var(--s2-font-family-sans, adobe-clean-spectrum-vf), adobe-clean-variable, adobe-clean, ui-sans-serif, system-ui, sans-serif;
4
4
  }
5
5
 
6
- .-_6BNtrc-c11 {
6
+ .-_6BNtrc-c12 {
7
7
  --fs: pow(1.125, 0);
8
8
  }
9
9
 
10
- .vx11 {
10
+ .vx12 {
11
11
  font-size: round(var(--s2-font-size-base, 14) * var(--fs) / 16 * 1rem, 1px);
12
12
  }
13
13
 
14
- .wb11 {
14
+ .wb12 {
15
15
  font-variation-settings: "wght" 400;
16
16
  }
17
17
 
18
- .xb11 {
18
+ .xb12 {
19
19
  font-weight: 400;
20
20
  }
21
21
 
22
- ._xa11 {
22
+ ._xa12 {
23
23
  font-synthesis-weight: none;
24
24
  }
25
25
 
26
- ._Fd11 {
26
+ ._Fd12 {
27
27
  line-height: round(1em * (1.15 + (1 - ((min(32, var(--s2-font-size-base, 14) * var(--fs)) - 10)) / 22) * .15), 2px);
28
28
  }
29
29
 
30
- .Up11 {
30
+ .Up12 {
31
31
  row-gap: 2rem;
32
32
  }
33
33
 
34
- .Ul11 {
34
+ .Ul12 {
35
35
  row-gap: 1rem;
36
36
  }
37
37
 
38
- .Uj11 {
38
+ .Uj12 {
39
39
  row-gap: 1.5rem;
40
40
  }
41
41
 
42
- .qp11 {
42
+ .qp12 {
43
43
  column-gap: 2rem;
44
44
  }
45
45
 
46
- .ql11 {
46
+ .ql12 {
47
47
  column-gap: 1rem;
48
48
  }
49
49
 
50
- .qj11 {
50
+ .qj12 {
51
51
  column-gap: 1.5rem;
52
52
  }
53
53
 
54
- ._ta11 {
54
+ ._ta12 {
55
55
  flex-direction: column;
56
56
  }
57
57
 
58
- .Hz11 {
58
+ .Hz12 {
59
59
  margin-inline-end: 1.25rem;
60
60
  }
61
61
 
62
- .Ix11 {
62
+ .Ix12 {
63
63
  margin-inline-start: .75rem;
64
64
  }
65
65
 
66
- .Nq11 {
66
+ .Nq12 {
67
67
  min-width: min-content;
68
68
  }
69
69
 
70
- .Na11 {
70
+ .Na12 {
71
71
  min-width: 0;
72
72
  }
73
73
 
74
- ._ua11 {
74
+ ._ua12 {
75
75
  flex-grow: 0;
76
76
  }
77
77
 
78
- .g011 {
78
+ .g012 {
79
79
  background-color: var(--lightningcss-light, #292929) var(--lightningcss-dark, #dbdbdb);
80
80
  }
81
81
 
82
- .gH11 {
82
+ .gH12 {
83
83
  background-color: var(--lightningcss-light, #e9e9e9) var(--lightningcss-dark, #2c2c2c);
84
84
  }
85
85
 
86
- .Fb11 {
86
+ .Fb12 {
87
87
  height: 100%;
88
88
  }
89
89
 
90
- .FLvNfn11 {
90
+ .FLvNfn12 {
91
91
  height: 2px;
92
92
  }
93
93
 
94
- .Za11 {
94
+ .Za12 {
95
95
  width: 100%;
96
96
  }
97
97
 
98
- .ZLvNfn11 {
98
+ .ZLvNfn12 {
99
99
  width: 2px;
100
100
  }
101
101
 
102
- ._Er11 {
102
+ ._qg12 {
103
+ contain: strict;
104
+ }
105
+
106
+ .YIRyJjb12 {
107
+ transition-property: translate, width, height;
108
+ }
109
+
110
+ .Xc12 {
111
+ transition-duration: .2s;
112
+ }
113
+
114
+ ._2a12 {
115
+ transition-timing-function: cubic-bezier(0, 0, .4, 1);
116
+ }
117
+
118
+ ._Er12 {
103
119
  left: 0;
104
120
  }
105
121
 
106
- ._Aa11 {
122
+ ._Aa12 {
107
123
  inset-inline-start: -12px;
108
124
  }
109
125
 
110
- ._je11 {
126
+ ._je12 {
111
127
  border-style: none;
112
128
  }
113
129
 
114
- .og11 {
130
+ .og12 {
115
131
  border-start-start-radius: 9999px;
116
132
  }
117
133
 
118
- .ng11 {
134
+ .ng12 {
119
135
  border-start-end-radius: 9999px;
120
136
  }
121
137
 
122
- .kg11 {
138
+ .kg12 {
123
139
  border-end-start-radius: 9999px;
124
140
  }
125
141
 
126
- .jg11 {
142
+ .jg12 {
127
143
  border-end-end-radius: 9999px;
128
144
  }
129
145
 
130
- .pv11 {
146
+ .pv12 {
131
147
  color: var(--lightningcss-light, #505050) var(--lightningcss-dark, #afafaf);
132
148
  }
133
149
 
134
- .po11 {
150
+ .po12 {
135
151
  color: var(--lightningcss-light, #131313) var(--lightningcss-dark, #f2f2f2);
136
152
  }
137
153
 
138
- .pp11 {
154
+ .pp12 {
139
155
  color: var(--lightningcss-light, #c6c6c6) var(--lightningcss-dark, #444);
140
156
  }
141
157
 
142
- .oa11 {
158
+ .oa12 {
143
159
  border-start-start-radius: .25rem;
144
160
  }
145
161
 
146
- .na11 {
162
+ .na12 {
147
163
  border-start-end-radius: .25rem;
148
164
  }
149
165
 
150
- .ka11 {
166
+ .ka12 {
151
167
  border-end-start-radius: .25rem;
152
168
  }
153
169
 
154
- .ja11 {
170
+ .ja12 {
155
171
  border-end-end-radius: .25rem;
156
172
  }
157
173
 
158
- .Uc11 {
174
+ .Uc12 {
159
175
  row-gap: .428571em;
160
176
  }
161
177
 
162
- .qc11 {
178
+ .qc12 {
163
179
  column-gap: .428571em;
164
180
  }
165
181
 
166
- .Mi11 {
182
+ .Mi12 {
167
183
  min-height: calc(2rem * var(--s2-scale));
168
184
  }
169
185
 
170
- .Mk11 {
186
+ .Mk12 {
171
187
  min-height: calc(3rem * var(--s2-scale));
172
188
  }
173
189
 
174
- ._Pc11 {
190
+ ._Pc12 {
175
191
  position: relative;
176
192
  }
177
193
 
178
- .ri11 {
194
+ .ri12 {
179
195
  cursor: default;
180
196
  }
181
197
 
182
- .Yd11 {
198
+ ._Xa12 {
199
+ text-decoration: none;
200
+ }
201
+
202
+ .Yd12 {
183
203
  transition-property: color, background-color, var(--gp, color), border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, translate, scale, rotate, filter, backdrop-filter;
184
204
  }
185
205
 
186
- .Xb11 {
206
+ .Xb12 {
187
207
  transition-duration: .15s;
188
208
  }
189
209
 
190
- ._2b11 {
210
+ ._2b12 {
191
211
  transition-timing-function: cubic-bezier(.45, 0, .4, 1);
192
212
  }
193
213
 
194
- .SssxDec11 {
214
+ .SssxDec12 {
195
215
  padding-inline-start: calc(.375rem * var(--s2-scale));
196
216
  }
197
217
 
198
- .RssxDec11 {
218
+ .RssxDec12 {
199
219
  padding-inline-end: calc(.375rem * var(--s2-scale));
200
220
  }
201
221
 
202
- .__ca11 {
222
+ .__ca12 {
203
223
  -webkit-tap-highlight-color: #0000;
204
224
  }
205
225
 
206
- .sb11 {
226
+ .sb12 {
207
227
  display: block;
208
228
  }
209
229
 
210
- .-_8sjo0b-t5ZbAob11 {
230
+ .-_8sjo0b-t5ZbAob12 {
211
231
  --iconPrimary: currentColor;
212
232
  }
213
233
 
214
- ._Jb11 {
234
+ ._Jb12 {
215
235
  order: 1;
216
236
  }
217
237
 
218
- .sk11 {
238
+ .sk12 {
219
239
  display: none;
220
240
  }
221
241
 
222
- ._Ja11 {
242
+ ._Ja12 {
223
243
  order: 0;
224
244
  }
225
245
 
226
- ._Le11 {
246
+ ._Le12 {
227
247
  outline-style: none;
228
248
  }
229
249
 
230
- ._Lf11 {
250
+ ._Lf12 {
231
251
  outline-style: solid;
232
252
  }
233
253
 
234
- .Oh11 {
254
+ .Oh12 {
235
255
  outline-color: var(--lightningcss-light, #4b75ff) var(--lightningcss-dark, #4069fd);
236
256
  }
237
257
 
238
- ._Mc11 {
258
+ ._Mc12 {
239
259
  outline-width: 2px;
240
260
  }
241
261
 
242
- ._Kd11 {
262
+ ._Kd12 {
243
263
  outline-offset: 2px;
244
264
  }
245
265
 
246
- .Js11 {
266
+ .Js12 {
247
267
  margin-top: .25rem;
248
268
  }
249
269
 
250
- .pt11 {
270
+ .pt12 {
251
271
  color: var(--lightningcss-light, #292929) var(--lightningcss-dark, #dbdbdb);
252
272
  }
253
273
 
254
- ._ub11 {
274
+ ._ub12 {
255
275
  flex-grow: 1;
256
276
  }
257
277
 
258
- .Ma11 {
278
+ .Ma12 {
259
279
  min-height: 0;
260
280
  }
261
281
 
262
- .s40ub4c11 {
282
+ .s40ub4c12 {
263
283
  display: inherit;
264
284
  }
265
285
 
266
- ._t40ub4c11 {
286
+ ._t40ub4c12 {
267
287
  flex-direction: inherit;
268
288
  }
269
289
 
270
- .U40ub4c11 {
290
+ .U40ub4c12 {
271
291
  row-gap: inherit;
272
292
  }
273
293
 
274
- .q40ub4c11 {
294
+ .q40ub4c12 {
275
295
  column-gap: inherit;
276
296
  }
277
297
 
278
- ._w40ub4c11 {
298
+ ._w40ub4c12 {
279
299
  flex-wrap: inherit;
280
300
  }
281
301
 
282
- ._Pa11 {
302
+ ._Pa12 {
283
303
  position: absolute;
284
304
  }
285
305
 
286
- .Wr11 {
306
+ .Wr12 {
287
307
  top: 0;
288
308
  }
289
309
 
290
- ._lr11 {
310
+ ._lr12 {
291
311
  bottom: 0;
292
312
  }
293
313
 
294
- ._Ar11 {
314
+ ._Ar12 {
295
315
  inset-inline-start: 0;
296
316
  }
297
317
 
298
- ._zr11 {
318
+ ._zr12 {
299
319
  inset-inline-end: 0;
300
320
  }
301
321
 
302
- ._6b11 {
322
+ ._6b12 {
303
323
  visibility: hidden;
304
324
  }
305
325
 
306
- ._Nc11 {
326
+ ._Nc12 {
307
327
  overflow-x: hidden;
308
328
  }
309
329
 
310
- .Pc11 {
330
+ .Pc12 {
311
331
  overflow-y: hidden;
312
332
  }
313
333
 
314
- ._Ia11 {
334
+ ._Ia12 {
315
335
  opacity: 0;
316
336
  }
317
337
 
318
- .sd11 {
338
+ .sd12 {
319
339
  display: flex;
320
340
  }
321
341
 
322
- ._va11 {
342
+ ._va12 {
323
343
  flex-shrink: 0;
324
344
  }
325
345
 
326
- .eb11 {
346
+ .eb12 {
327
347
  align-items: center;
328
348
  }
329
349
 
330
- .Fx11 {
350
+ .Fx12 {
331
351
  height: calc(2rem * var(--s2-scale));
332
352
  }
333
353
 
334
- .Fz11 {
354
+ .Fz12 {
335
355
  height: calc(3rem * var(--s2-scale));
336
356
  }
337
357
  }
338
358
 
339
359
  @layer _.b {
340
- .uch11:lang(ar) {
360
+ .uch12:lang(ar) {
341
361
  font-family: myriad-arabic, ui-sans-serif, system-ui, sans-serif;
342
362
  }
343
363
 
344
- ._FezxGHba11:is(:lang(ar), :lang(he)) {
364
+ ._FezxGHba12:is(:lang(ar), :lang(he)) {
345
365
  line-height: 1.3;
346
366
  }
347
367
  }
348
368
 
349
369
  @layer _.c {
350
- .udi11:lang(he) {
370
+ .udi12:lang(he) {
351
371
  font-family: myriad-hebrew, ui-sans-serif, system-ui, sans-serif;
352
372
  }
353
373
 
354
- ._FnuYUweb11:is(:lang(ja), :lang(ko), :lang(zh), :lang(zh-Hant), :lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
374
+ ._FnuYUweb12:is(:lang(ja), :lang(ko), :lang(zh), :lang(zh-Hant), :lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
355
375
  line-height: 1.5;
356
376
  }
357
377
  }
358
378
 
359
379
  @layer _.d {
360
- .uea11:lang(ja) {
380
+ .uea12:lang(ja) {
361
381
  font-family: adobe-clean-han-japanese, Hiragino Kaku Gothic ProN, ヒラギノ角ゴ ProN W3, Osaka, YuGothic, Yu Gothic, メイリオ, Meiryo, MS Pゴシック, MS PGothic, sans-serif;
362
382
  }
363
383
  }
364
384
 
365
385
  @layer _.e {
366
- .ugb11:lang(ko) {
386
+ .ugb12:lang(ko) {
367
387
  font-family: adobe-clean-han-korean, source-han-korean, Malgun Gothic, Apple Gothic, sans-serif;
368
388
  }
369
389
  }
370
390
 
371
391
  @layer _.f {
372
- .uhd11:lang(zh) {
392
+ .uhd12:lang(zh) {
373
393
  font-family: adobe-clean-han-traditional, source-han-traditional, MingLiu, Heiti TC Light, sans-serif;
374
394
  }
375
395
  }
376
396
 
377
397
  @layer _.g {
378
- .uje11:lang(zh-hant) {
398
+ .uje12:lang(zh-hant) {
379
399
  font-family: adobe-clean-han-traditional, source-han-traditional, MingLiu, Microsoft JhengHei UI, Microsoft JhengHei, Heiti TC Light, sans-serif;
380
400
  }
381
401
  }
382
402
 
383
403
  @layer _.h {
384
- .u2NhKxcl11:lang(zh-HK) {
404
+ .u2NhKxcl12:lang(zh-HK) {
385
405
  font-family: adobe-clean-han-hong-kong, source-han-hong-kong, MingLiu, Microsoft JhengHei UI, Microsoft JhengHei, Heiti TC Light, sans-serif;
386
406
  }
387
407
  }
388
408
 
389
409
  @layer _.i {
390
- .uic11:is(:lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
410
+ .uic12:is(:lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
391
411
  font-family: adobe-clean-han-simplified-c, source-han-simplified-c, SimSun, Heiti SC Light, sans-serif;
392
412
  }
393
413
  }
394
414
 
395
415
  @layer _.b.l {
396
416
  @media (forced-colors: active) {
397
- .gle11 {
417
+ .gle12 {
398
418
  background-color: highlight;
399
419
  }
400
420
 
401
- .gld11 {
421
+ .gld12 {
402
422
  background-color: graytext;
403
423
  }
404
424
 
405
- .pld11 {
425
+ .pld12 {
406
426
  color: highlight;
407
427
  }
408
428
 
409
- .plc11 {
429
+ .plc12 {
410
430
  color: graytext;
411
431
  }
412
432
  }
413
433
  }
414
434
 
435
+ @layer _.b.dklsgc {
436
+ @media (prefers-reduced-motion: reduce) {
437
+ .Ydklsgce12 {
438
+ transition-property: none;
439
+ }
440
+ }
441
+ }
442
+
415
443
  @layer _.b.s {
416
444
  @media not ((hover: hover) and (pointer: fine)) {
417
- .Usd11 {
445
+ .Usd12 {
418
446
  row-gap: .470588em;
419
447
  }
420
448
 
421
- .qsd11 {
449
+ .qsd12 {
422
450
  column-gap: .470588em;
423
451
  }
424
452
  }
package/dist/Tabs.css.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"ACuGa;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAwEG;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAsCO;;;;EAAA;;;;EA6DG;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA4Cd;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA+CC;;;;EAAA;;;;EAsCO;;;;EAAA;;;;EAU4C;;;;EAwE/C;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA8EA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA+CA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AA3fJ;EAAA;;;;EAAA;;;;;AAAA;EAAA;;;;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AA2Ka;EAAA;IAAA;;;;IAAA;;;;IA4Cd;;;;IAAA;;;;;;AAAA;EAAA;IAAA;;;;IAAA","sources":["d333cabc54201ea1","packages/@react-spectrum/s2/src/Tabs.tsx"],"sourcesContent":["@import \"575a5a16650d7070\";\n@import \"7a0058ba44ec735a\";\n@import \"ea0c0ad20f1e1c01\";\n@import \"1a91a7d853a67795\";\n@import \"b645d7882760dc18\";\n@import \"5aa00674bbf9e612\";\n@import \"9d65793a05791106\";\n@import \"2976d7d1f8a0759d\";\n@import \"713e94facc5ee3f3\";\n@import \"64129d49d07323ce\";\n@import \"5458e36ec7f2a11f\";\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n TabListProps as AriaTabListProps,\n TabPanel as AriaTabPanel,\n TabPanelProps as AriaTabPanelProps,\n TabProps as AriaTabProps,\n TabsProps as AriaTabsProps,\n ContextValue,\n Group,\n Provider,\n Tab as RACTab,\n TabList as RACTabList,\n Tabs as RACTabs,\n TabListStateContext,\n TabRenderProps\n} from 'react-aria-components';\nimport {baseColor, focusRing, size, style} from '../style' with {type: 'macro'};\nimport {centerBaseline} from './CenterBaseline';\nimport {Collection, DOMRef, DOMRefValue, GlobalDOMAttributes, Key, Node, Orientation, RefObject} from '@react-types/shared';\nimport {CollectionBuilder} from '@react-aria/collections';\nimport {createContext, forwardRef, ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {getAllowedOverrides, StyleProps, StylesPropWithHeight, UnsafeStyles} from './style-utils' with {type: 'macro'};\nimport {IconContext} from './Icon';\nimport {inertValue, useEffectEvent, useId, useLabels, useLayoutEffect, useResizeObserver} from '@react-aria/utils';\nimport {Picker, PickerItem} from './TabsPicker';\nimport {Text, TextContext} from './Content';\nimport {useControlledState} from '@react-stately/utils';\nimport {useDOMRef, useMediaQuery} from '@react-spectrum/utils';\nimport {useHasTabbableChild} from '@react-aria/focus';\nimport {useLocale} from '@react-aria/i18n';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\nexport interface TabsProps extends Omit<AriaTabsProps, 'className' | 'style' | 'children' | keyof GlobalDOMAttributes>, UnsafeStyles {\n /** Spectrum-defined styles, returned by the `style()` macro. */\n styles?: StylesPropWithHeight,\n /** The content to display in the tabs. */\n children: ReactNode,\n /**\n * The amount of space between the tabs.\n * @default 'regular'\n */\n density?: 'compact' | 'regular',\n /**\n * Defines if the text within the tabs should be hidden and only the icon should be shown.\n * The text is always visible when the item is collapsed into a picker.\n * @default 'show'\n */\n labelBehavior?: 'show' | 'hide'\n}\n\nexport interface TabProps extends Omit<AriaTabProps, 'children' | 'style' | 'className' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {\n /** The content to display in the tab. */\n children: ReactNode\n}\n\nexport interface TabListProps<T> extends Omit<AriaTabListProps<T>, 'style' | 'className' | 'aria-label' | 'aria-labelledby' | keyof GlobalDOMAttributes>, StyleProps {\n /** The content to display in the tablist. */\n children: ReactNode | ((item: T) => ReactNode)\n}\n\nexport interface TabPanelProps extends Omit<AriaTabPanelProps, 'children' | 'style' | 'className' | keyof GlobalDOMAttributes>, UnsafeStyles {\n /** Spectrum-defined styles, returned by the `style()` macro. */\n styles?: StylesPropWithHeight,\n /** The content to display in the tab panels. */\n children: ReactNode\n}\n\nexport const TabsContext = createContext<ContextValue<Partial<TabsProps>, DOMRefValue<HTMLDivElement>>>(null);\nconst InternalTabsContext = createContext<Partial<TabsProps> & {\n tablistRef?: RefObject<HTMLDivElement | null>,\n prevRef?: RefObject<DOMRect | null>,\n selectedKey?: Key | null\n}>({});\n\ninterface CollapseContextType {\n showTabs: boolean,\n menuId: string,\n valueId: string,\n ariaLabel?: string | undefined,\n ariaDescribedBy?: string | undefined,\n tabs: Array<Node<any>>,\n listRef?: RefObject<HTMLDivElement | null>,\n onSelectionChange?: (key: Key) => void\n}\n\nconst CollapseContext = createContext<CollapseContextType>({\n showTabs: true,\n menuId: '',\n valueId: '',\n tabs: []\n});\n\nconst tabs = style({\n position: 'relative',\n display: 'flex',\n flexShrink: 0,\n font: 'ui',\n flexDirection: {\n orientation: {\n horizontal: 'column'\n }\n }\n}, getAllowedOverrides({height: true}));\n\n/**\n * 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.\n */\nexport const Tabs = forwardRef(function Tabs(props: TabsProps, ref: DOMRef<HTMLDivElement>) {\n [props, ref] = useSpectrumContextProps(props, ref, TabsContext);\n let {\n density = 'regular',\n isDisabled,\n disabledKeys,\n orientation = 'horizontal',\n labelBehavior = 'show'\n } = props;\n let domRef = useDOMRef(ref);\n let [value, setValue] = useControlledState(props.selectedKey, props.defaultSelectedKey ?? null!, props.onSelectionChange);\n\n if (!props['aria-label'] && !props['aria-labelledby']) {\n throw new Error('An aria-label or aria-labelledby prop is required on Tabs for accessibility.');\n }\n\n let tablistRef = useRef<HTMLDivElement | null>(null);\n let prevRef = useRef<DOMRect | null>(null);\n\n let onChange = useEffectEvent((val: Key) => {\n if (tablistRef.current) {\n prevRef.current = tablistRef.current.querySelector('[role=tab][data-selected=true]')?.getBoundingClientRect() ?? null;\n }\n setValue(val);\n });\n\n return (\n <Provider\n values={[\n [InternalTabsContext, {\n density,\n isDisabled,\n orientation,\n disabledKeys,\n selectedKey: value,\n tablistRef,\n prevRef,\n onSelectionChange: onChange,\n labelBehavior,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby']\n }]\n ]}>\n <CollectionBuilder content={props.children}>\n {collection => (\n <CollapsingTabs\n {...props}\n selectedKey={value}\n onSelectionChange={onChange}\n collection={collection}\n containerRef={domRef} />\n )}\n </CollectionBuilder>\n </Provider>\n );\n});\n\nconst tablist = style({\n display: 'flex',\n gap: {\n orientation: {\n horizontal: {\n density: {\n compact: 24,\n regular: 32\n },\n labelBehavior: {\n hide: {\n density: {\n compact: 16,\n regular: 24\n }\n }\n }\n }\n }\n },\n flexDirection: {\n orientation: {\n vertical: 'column'\n }\n },\n marginEnd: {\n orientation: {\n vertical: 20\n }\n },\n marginStart: {\n orientation: {\n vertical: 12\n }\n },\n minWidth: 'min'\n});\n\nconst tablistWrapper = style({\n position: 'relative',\n minWidth: 0,\n flexShrink: 0,\n flexGrow: 0\n}, getAllowedOverrides());\n\nexport function TabList<T extends object>(props: TabListProps<T>): ReactNode | null {\n let {showTabs, menuId, valueId, tabs, listRef, onSelectionChange, ariaLabel, ariaDescribedBy} = useContext(CollapseContext) ?? {};\n let {density, orientation, labelBehavior} = useContext(InternalTabsContext);\n\n if (showTabs) {\n return <TabListInner {...props} />;\n }\n \n return (\n <div className={tablistWrapper(null, props.styles)}>\n {listRef && <div className={tablist({orientation, labelBehavior, density})}>\n <HiddenTabs items={tabs} density={density} listRef={listRef} />\n </div>}\n <TabsMenu\n id={menuId}\n valueId={valueId}\n items={tabs}\n onSelectionChange={onSelectionChange}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy} />\n </div>\n );\n}\n\nfunction TabListInner<T extends object>(props: TabListProps<T>) {\n let {\n tablistRef,\n orientation,\n density,\n labelBehavior,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy\n } = useContext(InternalTabsContext) ?? {};\n let {tabs, listRef} = useContext(CollapseContext) ?? {};\n\n return (\n <div\n style={props.UNSAFE_style}\n className={\n (props.UNSAFE_className || '') +\n tablistWrapper(null, props.styles)}>\n {listRef && <div className={tablist({orientation, labelBehavior, density})}>\n <HiddenTabs items={tabs} density={density} listRef={listRef} />\n </div>}\n <RACTabList\n {...props}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n ref={tablistRef}\n className={renderProps => tablist({...renderProps, labelBehavior, density})} />\n </div>\n );\n}\n\nconst selectedIndicator = style<{isDisabled: boolean, orientation?: Orientation}>({\n position: 'absolute',\n backgroundColor: {\n default: 'neutral',\n isDisabled: 'disabled',\n forcedColors: {\n default: 'Highlight',\n isDisabled: 'GrayText'\n }\n },\n height: {\n default: 'full',\n orientation: {\n horizontal: '[2px]'\n }\n },\n width: {\n default: 'full',\n orientation: {\n vertical: '[2px]'\n }\n },\n bottom: {\n default: 0\n },\n top: {\n orientation: {\n vertical: 0\n }\n },\n left: {\n orientation: {\n horizontal: 0\n }\n },\n insetStart: {\n orientation: {\n vertical: -12\n }\n },\n borderStyle: 'none',\n borderRadius: 'full'\n});\n\nconst tab = style<TabRenderProps & {density?: 'compact' | 'regular', labelBehavior?: 'show' | 'hide', orientation?: Orientation}>({\n ...focusRing(),\n display: 'flex',\n color: {\n default: baseColor('neutral-subdued'),\n isSelected: baseColor('neutral'),\n isDisabled: 'disabled',\n forcedColors: {\n isSelected: 'Highlight',\n isDisabled: 'GrayText'\n }\n },\n borderRadius: 'sm',\n gap: 'text-to-visual',\n height: {\n orientation: {\n horizontal: {\n density: {\n compact: 32,\n regular: 48\n }\n }\n }\n },\n minHeight: {\n orientation: {\n vertical: {\n density: {\n compact: 32,\n regular: 48\n }\n }\n }\n },\n alignItems: 'center',\n position: 'relative',\n cursor: 'default',\n flexShrink: 0,\n transition: 'default',\n paddingX: {\n labelBehavior: {\n hide: size(6)\n }\n },\n disableTapHighlight: true\n}, getAllowedOverrides());\n\nconst icon = style({\n display: 'block',\n flexShrink: 0,\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n }\n});\n\nexport function Tab(props: TabProps): ReactNode {\n let {density, orientation, labelBehavior, prevRef} = useContext(InternalTabsContext) ?? {};\n\n let contentId = useId();\n let ariaLabelledBy = props['aria-labelledby'] || '';\n\n return (\n <RACTab\n {...props}\n // @ts-ignore\n originalProps={props}\n aria-labelledby={`${labelBehavior === 'hide' ? contentId : ''} ${ariaLabelledBy}`}\n style={props.UNSAFE_style}\n className={renderProps => (props.UNSAFE_className || '') + tab({...renderProps, density, labelBehavior, orientation}, props.styles)}>\n {({\n // @ts-ignore\n isMenu,\n isSelected,\n isDisabled\n }) => {\n if (isMenu) {\n return props.children;\n } else {\n return (\n <Provider\n values={[\n [TextContext, {\n id: contentId,\n styles:\n style({\n order: 1,\n display: {\n labelBehavior: {\n hide: 'none'\n }\n }\n })({labelBehavior})\n }],\n [IconContext, {\n render: centerBaseline({slot: 'icon', styles: style({order: 0})}),\n styles: icon\n }]\n ]}>\n <TabInner\n isSelected={isSelected}\n orientation={orientation!}\n isDisabled={isDisabled}\n prevRef={prevRef}>\n {typeof props.children === 'string' ? <Text>{props.children}</Text> : props.children}\n </TabInner>\n </Provider>\n );\n }\n }}\n </RACTab>\n );\n}\n\nfunction TabInner({isSelected, isDisabled, orientation, children, prevRef}: {\n isSelected: boolean,\n isDisabled: boolean,\n orientation: Orientation,\n children: ReactNode,\n prevRef?: RefObject<DOMRect | null>\n}) {\n let reduceMotion = useMediaQuery('(prefers-reduced-motion: reduce)');\n let ref = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n if (isSelected && prevRef?.current && ref?.current && !reduceMotion) {\n let currentItem = ref?.current.getBoundingClientRect();\n\n if (orientation === 'horizontal') {\n let deltaX = prevRef.current.left - currentItem.left;\n ref.current.animate(\n [\n {transform: `translateX(${deltaX}px)`, width: `${prevRef.current.width}px`},\n {transform: 'translateX(0px)', width: '100%'}\n ],\n {\n duration: 200,\n easing: 'ease-out'\n }\n );\n } else {\n let deltaY = prevRef.current.top - currentItem.top;\n ref.current.animate(\n [\n {transform: `translateY(${deltaY}px)`, height: `${prevRef.current.height}px`},\n {transform: 'translateY(0px)', height: '100%'}\n ],\n {\n duration: 200,\n easing: 'ease-out'\n }\n );\n }\n\n prevRef.current = null;\n }\n }, [isSelected, reduceMotion, prevRef, orientation]);\n\n return (\n <>\n {isSelected && <div ref={ref} className={selectedIndicator({isDisabled, orientation})} />}\n {children}\n </>\n );\n}\n\n\nconst tabPanel = style({\n ...focusRing(),\n marginTop: 4,\n color: 'gray-800',\n flexGrow: 1,\n minHeight: 0\n}, getAllowedOverrides({height: true}));\n\nexport function TabPanel(props: TabPanelProps): ReactNode | null {\n let {showTabs} = useContext(CollapseContext);\n let {selectedKey} = useContext(InternalTabsContext);\n if (showTabs) {\n return (\n <AriaTabPanel\n {...props}\n style={props.UNSAFE_style}\n className={renderProps => (props.UNSAFE_className ?? '') + tabPanel(renderProps, props.styles)} />\n );\n }\n\n if (props.id !== selectedKey) {\n return null;\n }\n\n return <CollapsedTabPanel {...props} />;\n}\n\nfunction CollapsedTabPanel(props: TabPanelProps) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let {UNSAFE_style, UNSAFE_className = '', id, ...otherProps} = props;\n let {menuId, valueId} = useContext(CollapseContext);\n let ref = useRef(null);\n let tabIndex = useHasTabbableChild(ref) ? undefined : 0;\n\n return (\n <Group\n {...otherProps}\n ref={ref}\n aria-labelledby={menuId + ' ' + valueId}\n tabIndex={tabIndex}\n style={UNSAFE_style}\n className={renderProps => UNSAFE_className + tabPanel(renderProps, props.styles)} />\n );\n}\n\nfunction isEveryTabDisabled<T>(collection: Collection<Node<T>> | undefined, disabledKeys: Set<Key>) {\n let testKey: Key | null = null;\n if (collection && collection.size > 0) {\n testKey = collection.getFirstKey();\n\n let index = 0;\n while (testKey && index < collection.size) {\n // We have to check if the item in the collection has a key in disabledKeys or has the isDisabled prop set directly on it\n if (!disabledKeys.has(testKey) && !collection.getItem(testKey)?.props?.isDisabled) {\n return false;\n }\n\n testKey = collection.getKeyAfter(testKey);\n index++;\n }\n return true;\n }\n return false;\n}\n\nlet HiddenTabs = function (props: {\n listRef: RefObject<HTMLDivElement | null>,\n items: Array<Node<any>>,\n size?: string,\n density?: 'compact' | 'regular'\n}) {\n let {listRef, items = [], size, density} = props;\n\n return (\n <div\n // @ts-ignore\n inert={inertValue(true)}\n ref={listRef}\n className={style({\n display: 'inherit',\n flexDirection: 'inherit',\n gap: 'inherit',\n flexWrap: 'inherit',\n position: 'absolute',\n inset: 0,\n visibility: 'hidden',\n overflow: 'hidden',\n opacity: 0\n })}>\n {items.map((item) => {\n // pull off individual props as an allow list, don't want refs or other props getting through\n return (\n <div\n data-hidden-tab\n style={item.props.UNSAFE_style}\n key={item.key}\n className={item.props.className({size, density})}>\n {item.props.children({size, density})}\n </div>\n );\n })}\n </div>\n );\n};\n\nlet TabsMenu = (props: {valueId: string, items: Array<Node<any>>, onSelectionChange: TabsProps['onSelectionChange']} & Omit<TabsProps, 'children'>) => {\n let {id, items, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, valueId} = props;\n let {density, onSelectionChange: _onSelectionChange, selectedKey, isDisabled, disabledKeys, labelBehavior} = useContext(InternalTabsContext);\n let onSelectionChange = useCallback((key: Key | null) => {\n if (key != null) {\n _onSelectionChange?.(key);\n }\n }, [_onSelectionChange]);\n let state = useContext(TabListStateContext);\n let allKeysDisabled = useMemo(() => {\n return isEveryTabDisabled(state?.collection, disabledKeys ? new Set(disabledKeys) : new Set());\n }, [state?.collection, disabledKeys]);\n let labelProps = useLabels({\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy\n });\n\n return (\n <div\n className={style({\n display: 'flex',\n flexShrink: 0,\n alignItems: 'center',\n height: {\n density: {\n compact: 32,\n regular: 48\n }\n }})({density})}>\n <Picker\n id={id}\n valueId={valueId}\n {...labelProps}\n aria-describedby={props['aria-describedby']}\n aria-details={props['aria-details']}\n isDisabled={isDisabled || allKeysDisabled}\n density={density!}\n labelBehavior={labelBehavior}\n items={items}\n disabledKeys={disabledKeys}\n selectedKey={selectedKey}\n onSelectionChange={onSelectionChange}>\n {(item: Node<any>) => {\n return (\n <PickerItem\n {...item.props.originalProps}\n isDisabled={isDisabled || allKeysDisabled}\n key={item.key}>\n {item.props.children({density, isMenu: true})}\n </PickerItem>\n );\n }}\n </Picker>\n </div>\n );\n};\n\nlet CollapsingTabs = ({collection, containerRef, ...props}: {collection: Collection<Node<unknown>>, containerRef: any} & TabsProps) => {\n let {orientation = 'horizontal', onSelectionChange} = props;\n let [showItems, _setShowItems] = useState(true);\n showItems = orientation === 'vertical' ? true : showItems;\n let setShowItems = useCallback((value: boolean) => {\n if (orientation === 'vertical') {\n // if orientation is vertical, we always show the items\n _setShowItems(true);\n } else {\n _setShowItems(value);\n }\n }, [orientation]);\n\n let {direction} = useLocale();\n\n let children = useMemo(() => [...collection], [collection]);\n\n let listRef = useRef<HTMLDivElement | null>(null);\n let updateOverflow = useEffectEvent(() => {\n if (orientation === 'vertical' || !listRef.current || !containerRef?.current) {\n return;\n }\n let container = listRef.current;\n let containerRect = container.getBoundingClientRect();\n let tabs = container.querySelectorAll('[data-hidden-tab]');\n let lastTab = tabs[tabs.length - 1];\n let lastTabRect = lastTab.getBoundingClientRect();\n if (direction === 'ltr') {\n setShowItems?.(lastTabRect.right <= containerRect.right);\n } else {\n setShowItems?.(lastTabRect.left >= containerRect.left);\n }\n });\n\n useResizeObserver({ref: containerRef, onResize: updateOverflow});\n\n useLayoutEffect(() => {\n if (collection.size > 0) {\n queueMicrotask(updateOverflow);\n }\n }, [collection.size, updateOverflow]);\n\n // start with null so that the first render won't have a flicker\n let prevOrientation = useRef<Orientation | null>(null);\n useLayoutEffect(() => {\n if (collection.size > 0 && prevOrientation.current !== orientation) {\n updateOverflow();\n }\n prevOrientation.current = orientation;\n }, [collection.size, updateOverflow, orientation]);\n\n useEffect(() => {\n // Recalculate visible tags when fonts are loaded.\n document.fonts?.ready.then(() => updateOverflow());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let menuId = useId();\n let valueId = useId();\n\n let contents: ReactNode;\n if (showItems) {\n contents = (\n <RACTabs\n {...props}\n style={{display: 'contents'}}>\n {props.children}\n </RACTabs>\n );\n } else {\n contents = (\n <>\n <CollapseContext.Provider value={{showTabs: false, tabs: children, menuId, valueId, listRef: listRef, onSelectionChange, ariaLabel: props['aria-label'], ariaDescribedBy: props['aria-labelledby']}}>\n {props.children}\n </CollapseContext.Provider>\n </>\n );\n }\n\n return (\n <div style={props.UNSAFE_style} className={(props.UNSAFE_className || '') + tabs({orientation}, props.styles)} ref={containerRef}>\n <CollapseContext.Provider value={{showTabs: true, menuId, valueId, tabs: children, listRef: listRef}}>\n {contents}\n </CollapseContext.Provider>\n </div>\n );\n};\n"],"names":[],"version":3,"file":"Tabs.css.map"}
1
+ {"mappings":"ACuGa;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA+DG;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAsCO;;;;EAAA;;;;EA6DG;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAmDd;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAgDC;;;;EAAA;;;;EAqCO;;;;EAAA;;;;EAU4C;;;;EAkC/C;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAgFA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAiDA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AAvdJ;EAAA;;;;EAAA;;;;;AAAA;EAAA;;;;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAkKa;EAAA;IAAA;;;;IAAA;;;;IAmDd;;;;IAAA;;;;;;AAnDc;EAAA;IAAA;;;;;;AAmDd;EAAA;IAAA;;;;IAAA","sources":["d333cabc54201ea1","packages/@react-spectrum/s2/src/Tabs.tsx"],"sourcesContent":["@import \"575a5a16650d7070\";\n@import \"7a0058ba44ec735a\";\n@import \"ea0c0ad20f1e1c01\";\n@import \"1a91a7d853a67795\";\n@import \"b645d7882760dc18\";\n@import \"5aa00674bbf9e612\";\n@import \"9d65793a05791106\";\n@import \"2976d7d1f8a0759d\";\n@import \"713e94facc5ee3f3\";\n@import \"64129d49d07323ce\";\n@import \"5458e36ec7f2a11f\";\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n TabListProps as AriaTabListProps,\n TabPanel as AriaTabPanel,\n TabPanelProps as AriaTabPanelProps,\n TabProps as AriaTabProps,\n TabsProps as AriaTabsProps,\n ContextValue,\n Group,\n Provider,\n Tab as RACTab,\n TabList as RACTabList,\n Tabs as RACTabs,\n SelectionIndicator,\n TabListStateContext,\n TabRenderProps\n} from 'react-aria-components';\nimport {baseColor, focusRing, size, style} from '../style' with {type: 'macro'};\nimport {centerBaseline} from './CenterBaseline';\nimport {Collection, DOMRef, DOMRefValue, GlobalDOMAttributes, Key, Node, Orientation, RefObject} from '@react-types/shared';\nimport {CollectionBuilder} from '@react-aria/collections';\nimport {createContext, forwardRef, ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {getAllowedOverrides, StyleProps, StylesPropWithHeight, UnsafeStyles} from './style-utils' with {type: 'macro'};\nimport {IconContext} from './Icon';\nimport {inertValue, useEffectEvent, useId, useLabels, useLayoutEffect, useResizeObserver} from '@react-aria/utils';\nimport {Picker, PickerItem} from './TabsPicker';\nimport {Text, TextContext} from './Content';\nimport {useControlledState} from '@react-stately/utils';\nimport {useDOMRef} from '@react-spectrum/utils';\nimport {useHasTabbableChild} from '@react-aria/focus';\nimport {useLocale} from '@react-aria/i18n';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\nexport interface TabsProps extends Omit<AriaTabsProps, 'className' | 'style' | 'children' | keyof GlobalDOMAttributes>, UnsafeStyles {\n /** Spectrum-defined styles, returned by the `style()` macro. */\n styles?: StylesPropWithHeight,\n /** The content to display in the tabs. */\n children: ReactNode,\n /**\n * The amount of space between the tabs.\n * @default 'regular'\n */\n density?: 'compact' | 'regular',\n /**\n * Defines if the text within the tabs should be hidden and only the icon should be shown.\n * The text is always visible when the item is collapsed into a picker.\n * @default 'show'\n */\n labelBehavior?: 'show' | 'hide'\n}\n\nexport interface TabProps extends Omit<AriaTabProps, 'children' | 'style' | 'className' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {\n /** The content to display in the tab. */\n children: ReactNode\n}\n\nexport interface TabListProps<T> extends Omit<AriaTabListProps<T>, 'style' | 'className' | 'aria-label' | 'aria-labelledby' | keyof GlobalDOMAttributes>, StyleProps {\n /** The content to display in the tablist. */\n children: ReactNode | ((item: T) => ReactNode)\n}\n\nexport interface TabPanelProps extends Omit<AriaTabPanelProps, 'children' | 'style' | 'className' | keyof GlobalDOMAttributes>, UnsafeStyles {\n /** Spectrum-defined styles, returned by the `style()` macro. */\n styles?: StylesPropWithHeight,\n /** The content to display in the tab panels. */\n children: ReactNode\n}\n\nexport const TabsContext = createContext<ContextValue<Partial<TabsProps>, DOMRefValue<HTMLDivElement>>>(null);\nconst InternalTabsContext = createContext<Partial<TabsProps> & {\n tablistRef?: RefObject<HTMLDivElement | null>,\n selectedKey?: Key | null\n}>({});\n\ninterface CollapseContextType {\n showTabs: boolean,\n menuId: string,\n valueId: string,\n ariaLabel?: string | undefined,\n ariaDescribedBy?: string | undefined,\n tabs: Array<Node<any>>,\n listRef?: RefObject<HTMLDivElement | null>,\n onSelectionChange?: (key: Key) => void\n}\n\nconst CollapseContext = createContext<CollapseContextType>({\n showTabs: true,\n menuId: '',\n valueId: '',\n tabs: []\n});\n\nconst tabs = style({\n position: 'relative',\n display: 'flex',\n flexShrink: 0,\n font: 'ui',\n flexDirection: {\n orientation: {\n horizontal: 'column'\n }\n }\n}, getAllowedOverrides({height: true}));\n\n/**\n * 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.\n */\nexport const Tabs = forwardRef(function Tabs(props: TabsProps, ref: DOMRef<HTMLDivElement>) {\n [props, ref] = useSpectrumContextProps(props, ref, TabsContext);\n let {\n density = 'regular',\n isDisabled,\n disabledKeys,\n orientation = 'horizontal',\n labelBehavior = 'show'\n } = props;\n let domRef = useDOMRef(ref);\n let [value, setValue] = useControlledState(props.selectedKey, props.defaultSelectedKey ?? null!, props.onSelectionChange);\n\n if (!props['aria-label'] && !props['aria-labelledby']) {\n throw new Error('An aria-label or aria-labelledby prop is required on Tabs for accessibility.');\n }\n\n let tablistRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <Provider\n values={[\n [InternalTabsContext, {\n density,\n isDisabled,\n orientation,\n disabledKeys,\n selectedKey: value,\n tablistRef,\n onSelectionChange: setValue,\n labelBehavior,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby']\n }]\n ]}>\n <CollectionBuilder content={props.children}>\n {collection => (\n <CollapsingTabs\n {...props}\n selectedKey={value}\n onSelectionChange={setValue}\n collection={collection}\n containerRef={domRef} />\n )}\n </CollectionBuilder>\n </Provider>\n );\n});\n\nconst tablist = style({\n display: 'flex',\n gap: {\n orientation: {\n horizontal: {\n density: {\n compact: 24,\n regular: 32\n },\n labelBehavior: {\n hide: {\n density: {\n compact: 16,\n regular: 24\n }\n }\n }\n }\n }\n },\n flexDirection: {\n orientation: {\n vertical: 'column'\n }\n },\n marginEnd: {\n orientation: {\n vertical: 20\n }\n },\n marginStart: {\n orientation: {\n vertical: 12\n }\n },\n minWidth: 'min'\n});\n\nconst tablistWrapper = style({\n position: 'relative',\n minWidth: 0,\n flexShrink: 0,\n flexGrow: 0\n}, getAllowedOverrides());\n\nexport function TabList<T extends object>(props: TabListProps<T>): ReactNode | null {\n let {showTabs, menuId, valueId, tabs, listRef, onSelectionChange, ariaLabel, ariaDescribedBy} = useContext(CollapseContext) ?? {};\n let {density, orientation, labelBehavior} = useContext(InternalTabsContext);\n\n if (showTabs) {\n return <TabListInner {...props} />;\n }\n \n return (\n <div className={tablistWrapper(null, props.styles)}>\n {listRef && <div className={tablist({orientation, labelBehavior, density})}>\n <HiddenTabs items={tabs} density={density} listRef={listRef} />\n </div>}\n <TabsMenu\n id={menuId}\n valueId={valueId}\n items={tabs}\n onSelectionChange={onSelectionChange}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy} />\n </div>\n );\n}\n\nfunction TabListInner<T extends object>(props: TabListProps<T>) {\n let {\n tablistRef,\n orientation,\n density,\n labelBehavior,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy\n } = useContext(InternalTabsContext) ?? {};\n let {tabs, listRef} = useContext(CollapseContext) ?? {};\n\n return (\n <div\n style={props.UNSAFE_style}\n className={\n (props.UNSAFE_className || '') +\n tablistWrapper(null, props.styles)}>\n {listRef && <div className={tablist({orientation, labelBehavior, density})}>\n <HiddenTabs items={tabs} density={density} listRef={listRef} />\n </div>}\n <RACTabList\n {...props}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n ref={tablistRef}\n className={renderProps => tablist({...renderProps, labelBehavior, density})} />\n </div>\n );\n}\n\nconst selectedIndicator = style<{isDisabled: boolean, orientation?: Orientation}>({\n position: 'absolute',\n backgroundColor: {\n default: 'neutral',\n isDisabled: 'disabled',\n forcedColors: {\n default: 'Highlight',\n isDisabled: 'GrayText'\n }\n },\n height: {\n default: 'full',\n orientation: {\n horizontal: '[2px]'\n }\n },\n width: {\n default: 'full',\n orientation: {\n vertical: '[2px]'\n }\n },\n contain: 'strict',\n transition: {\n default: '[translate,width,height]',\n '@media (prefers-reduced-motion: reduce)': 'none'\n },\n transitionDuration: 200,\n transitionTimingFunction: 'out',\n bottom: {\n default: 0\n },\n top: {\n orientation: {\n vertical: 0\n }\n },\n left: {\n orientation: {\n horizontal: 0\n }\n },\n insetStart: {\n orientation: {\n vertical: -12\n }\n },\n borderStyle: 'none',\n borderRadius: 'full'\n});\n\nconst tab = style<TabRenderProps & {density?: 'compact' | 'regular', labelBehavior?: 'show' | 'hide', orientation?: Orientation}>({\n ...focusRing(),\n display: 'flex',\n color: {\n default: baseColor('neutral-subdued'),\n isSelected: baseColor('neutral'),\n isDisabled: 'disabled',\n forcedColors: {\n isSelected: 'Highlight',\n isDisabled: 'GrayText'\n }\n },\n borderRadius: 'sm',\n gap: 'text-to-visual',\n height: {\n orientation: {\n horizontal: {\n density: {\n compact: 32,\n regular: 48\n }\n }\n }\n },\n minHeight: {\n orientation: {\n vertical: {\n density: {\n compact: 32,\n regular: 48\n }\n }\n }\n },\n alignItems: 'center',\n position: 'relative',\n cursor: 'default',\n textDecoration: 'none',\n flexShrink: 0,\n transition: 'default',\n paddingX: {\n labelBehavior: {\n hide: size(6)\n }\n },\n disableTapHighlight: true\n}, getAllowedOverrides());\n\nconst icon = style({\n display: 'block',\n flexShrink: 0,\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n }\n});\n\nexport function Tab(props: TabProps): ReactNode {\n let {density, orientation, labelBehavior} = useContext(InternalTabsContext) ?? {};\n\n let contentId = useId();\n let ariaLabelledBy = props['aria-labelledby'] || '';\n\n return (\n <RACTab\n {...props}\n // @ts-ignore\n originalProps={props}\n aria-labelledby={`${labelBehavior === 'hide' ? contentId : ''} ${ariaLabelledBy}`}\n style={props.UNSAFE_style}\n className={renderProps => (props.UNSAFE_className || '') + tab({...renderProps, density, labelBehavior, orientation}, props.styles)}>\n {({\n // @ts-ignore\n isMenu,\n isDisabled\n }) => {\n if (isMenu) {\n return props.children;\n } else {\n return (\n <Provider\n values={[\n [TextContext, {\n id: contentId,\n styles:\n style({\n order: 1,\n display: {\n labelBehavior: {\n hide: 'none'\n }\n }\n })({labelBehavior})\n }],\n [IconContext, {\n render: centerBaseline({slot: 'icon', styles: style({order: 0})}),\n styles: icon\n }]\n ]}>\n <TabInner\n orientation={orientation!}\n isDisabled={isDisabled}>\n {typeof props.children === 'string' ? <Text>{props.children}</Text> : props.children}\n </TabInner>\n </Provider>\n );\n }\n }}\n </RACTab>\n );\n}\n\nfunction TabInner({isDisabled, orientation, children}: {\n isDisabled: boolean,\n orientation: Orientation,\n children: ReactNode\n}) {\n let ref = useRef<HTMLDivElement | null>(null);\n let isHidden = useContext(HiddenTabsContext);\n\n return (\n <>\n {!isHidden && <SelectionIndicator ref={ref} className={selectedIndicator({isDisabled, orientation})} />}\n {children}\n </>\n );\n}\n\n\nconst tabPanel = style({\n ...focusRing(),\n marginTop: 4,\n color: 'gray-800',\n flexGrow: 1,\n minHeight: 0\n}, getAllowedOverrides({height: true}));\n\nexport function TabPanel(props: TabPanelProps): ReactNode | null {\n let {showTabs} = useContext(CollapseContext);\n let {selectedKey} = useContext(InternalTabsContext);\n if (showTabs) {\n return (\n <AriaTabPanel\n {...props}\n style={props.UNSAFE_style}\n className={renderProps => (props.UNSAFE_className ?? '') + tabPanel(renderProps, props.styles)} />\n );\n }\n\n if (props.id !== selectedKey) {\n return null;\n }\n\n return <CollapsedTabPanel {...props} />;\n}\n\nfunction CollapsedTabPanel(props: TabPanelProps) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let {UNSAFE_style, UNSAFE_className = '', id, ...otherProps} = props;\n let {menuId, valueId} = useContext(CollapseContext);\n let ref = useRef(null);\n let tabIndex = useHasTabbableChild(ref) ? undefined : 0;\n\n return (\n <Group\n {...otherProps}\n ref={ref}\n aria-labelledby={menuId + ' ' + valueId}\n tabIndex={tabIndex}\n style={UNSAFE_style}\n className={renderProps => UNSAFE_className + tabPanel(renderProps, props.styles)} />\n );\n}\n\nfunction isEveryTabDisabled<T>(collection: Collection<Node<T>> | undefined, disabledKeys: Set<Key>) {\n let testKey: Key | null = null;\n if (collection && collection.size > 0) {\n testKey = collection.getFirstKey();\n\n let index = 0;\n while (testKey && index < collection.size) {\n // We have to check if the item in the collection has a key in disabledKeys or has the isDisabled prop set directly on it\n if (!disabledKeys.has(testKey) && !collection.getItem(testKey)?.props?.isDisabled) {\n return false;\n }\n\n testKey = collection.getKeyAfter(testKey);\n index++;\n }\n return true;\n }\n return false;\n}\n\nconst HiddenTabsContext = createContext(false);\n\nlet HiddenTabs = function (props: {\n listRef: RefObject<HTMLDivElement | null>,\n items: Array<Node<any>>,\n size?: string,\n density?: 'compact' | 'regular'\n}) {\n let {listRef, items = [], size, density} = props;\n\n return (\n <div\n // @ts-ignore\n inert={inertValue(true)}\n ref={listRef}\n className={style({\n display: 'inherit',\n flexDirection: 'inherit',\n gap: 'inherit',\n flexWrap: 'inherit',\n position: 'absolute',\n inset: 0,\n visibility: 'hidden',\n overflow: 'hidden',\n opacity: 0\n })}>\n <HiddenTabsContext.Provider value>\n {items.map((item) => {\n // pull off individual props as an allow list, don't want refs or other props getting through\n return (\n <div\n data-hidden-tab\n style={item.props.UNSAFE_style}\n key={item.key}\n className={item.props.className({size, density})}>\n {item.props.children({size, density})}\n </div>\n );\n })}\n </HiddenTabsContext.Provider>\n </div>\n );\n};\n\nlet TabsMenu = (props: {valueId: string, items: Array<Node<any>>, onSelectionChange: TabsProps['onSelectionChange']} & Omit<TabsProps, 'children'>) => {\n let {id, items, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, valueId} = props;\n let {density, onSelectionChange: _onSelectionChange, selectedKey, isDisabled, disabledKeys, labelBehavior} = useContext(InternalTabsContext);\n let onSelectionChange = useCallback((key: Key | null) => {\n if (key != null) {\n _onSelectionChange?.(key);\n }\n }, [_onSelectionChange]);\n let state = useContext(TabListStateContext);\n let allKeysDisabled = useMemo(() => {\n return isEveryTabDisabled(state?.collection, disabledKeys ? new Set(disabledKeys) : new Set());\n }, [state?.collection, disabledKeys]);\n let labelProps = useLabels({\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy\n });\n\n return (\n <div\n className={style({\n display: 'flex',\n flexShrink: 0,\n alignItems: 'center',\n height: {\n density: {\n compact: 32,\n regular: 48\n }\n }})({density})}>\n <Picker\n id={id}\n valueId={valueId}\n {...labelProps}\n aria-describedby={props['aria-describedby']}\n aria-details={props['aria-details']}\n isDisabled={isDisabled || allKeysDisabled}\n density={density!}\n labelBehavior={labelBehavior}\n items={items}\n disabledKeys={disabledKeys}\n selectedKey={selectedKey}\n onSelectionChange={onSelectionChange}>\n {(item: Node<any>) => {\n return (\n <PickerItem\n {...item.props.originalProps}\n isDisabled={isDisabled || allKeysDisabled}\n key={item.key}>\n {item.props.children({density, isMenu: true})}\n </PickerItem>\n );\n }}\n </Picker>\n </div>\n );\n};\n\nlet CollapsingTabs = ({collection, containerRef, ...props}: {collection: Collection<Node<unknown>>, containerRef: any} & TabsProps) => {\n let {orientation = 'horizontal', onSelectionChange} = props;\n let [showItems, _setShowItems] = useState(true);\n showItems = orientation === 'vertical' ? true : showItems;\n let setShowItems = useCallback((value: boolean) => {\n if (orientation === 'vertical') {\n // if orientation is vertical, we always show the items\n _setShowItems(true);\n } else {\n _setShowItems(value);\n }\n }, [orientation]);\n\n let {direction} = useLocale();\n\n let children = useMemo(() => [...collection], [collection]);\n\n let listRef = useRef<HTMLDivElement | null>(null);\n let updateOverflow = useEffectEvent(() => {\n if (orientation === 'vertical' || !listRef.current || !containerRef?.current) {\n return;\n }\n let container = listRef.current;\n let containerRect = container.getBoundingClientRect();\n let tabs = container.querySelectorAll('[data-hidden-tab]');\n let lastTab = tabs[tabs.length - 1];\n let lastTabRect = lastTab.getBoundingClientRect();\n if (direction === 'ltr') {\n setShowItems?.(lastTabRect.right <= containerRect.right);\n } else {\n setShowItems?.(lastTabRect.left >= containerRect.left);\n }\n });\n\n useResizeObserver({ref: containerRef, onResize: updateOverflow});\n\n useLayoutEffect(() => {\n if (collection.size > 0) {\n queueMicrotask(updateOverflow);\n }\n }, [collection.size, updateOverflow]);\n\n // start with null so that the first render won't have a flicker\n let prevOrientation = useRef<Orientation | null>(null);\n useLayoutEffect(() => {\n if (collection.size > 0 && prevOrientation.current !== orientation) {\n updateOverflow();\n }\n prevOrientation.current = orientation;\n }, [collection.size, updateOverflow, orientation]);\n\n useEffect(() => {\n // Recalculate visible tags when fonts are loaded.\n document.fonts?.ready.then(() => updateOverflow());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let menuId = useId();\n let valueId = useId();\n\n let contents: ReactNode;\n if (showItems) {\n contents = (\n <RACTabs\n {...props}\n style={{display: 'contents'}}>\n {props.children}\n </RACTabs>\n );\n } else {\n contents = (\n <>\n <CollapseContext.Provider value={{showTabs: false, tabs: children, menuId, valueId, listRef: listRef, onSelectionChange, ariaLabel: props['aria-label'], ariaDescribedBy: props['aria-labelledby']}}>\n {props.children}\n </CollapseContext.Provider>\n </>\n );\n }\n\n return (\n <div style={props.UNSAFE_style} className={(props.UNSAFE_className || '') + tabs({orientation}, props.styles)} ref={containerRef}>\n <CollapseContext.Provider value={{showTabs: true, menuId, valueId, tabs: children, listRef: listRef}}>\n {contents}\n </CollapseContext.Provider>\n </div>\n );\n};\n"],"names":[],"version":3,"file":"Tabs.css.map"}