@react-spectrum/s2 1.4.0 → 1.5.1

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 (419) hide show
  1. package/dist/exports/CenterBaseline.cjs +12 -0
  2. package/dist/exports/CenterBaseline.cjs.map +1 -0
  3. package/dist/exports/CenterBaseline.mjs +7 -0
  4. package/dist/exports/CenterBaseline.mjs.map +1 -0
  5. package/dist/exports/Skeleton.cjs +1 -0
  6. package/dist/exports/Skeleton.cjs.map +1 -1
  7. package/dist/exports/Skeleton.mjs +2 -2
  8. package/dist/exports/Skeleton.mjs.map +1 -1
  9. package/dist/exports/index.cjs +3 -0
  10. package/dist/exports/index.cjs.map +1 -1
  11. package/dist/exports/index.mjs +3 -1
  12. package/dist/exports/index.mjs.map +1 -1
  13. package/dist/private/Accordion.cjs +2 -2
  14. package/dist/private/Accordion.css +2 -2
  15. package/dist/private/Accordion.mjs +2 -2
  16. package/dist/private/ActionBar.cjs +59 -59
  17. package/dist/private/ActionBar.cjs.map +1 -1
  18. package/dist/private/ActionBar.css +58 -58
  19. package/dist/private/ActionBar.css.map +1 -1
  20. package/dist/private/ActionBar.mjs +59 -59
  21. package/dist/private/ActionBar.mjs.map +1 -1
  22. package/dist/private/ActionButton.cjs +247 -247
  23. package/dist/private/ActionButton.cjs.map +1 -1
  24. package/dist/private/ActionButton.css +169 -169
  25. package/dist/private/ActionButton.css.map +1 -1
  26. package/dist/private/ActionButton.mjs +247 -247
  27. package/dist/private/ActionButton.mjs.map +1 -1
  28. package/dist/private/ActionButtonGroup.cjs +15 -15
  29. package/dist/private/ActionButtonGroup.css +9 -9
  30. package/dist/private/ActionButtonGroup.mjs +15 -15
  31. package/dist/private/ActionMenu.cjs.map +1 -1
  32. package/dist/private/ActionMenu.mjs.map +1 -1
  33. package/dist/private/Add.cjs +10 -10
  34. package/dist/private/Add.css +6 -6
  35. package/dist/private/Add.mjs +10 -10
  36. package/dist/private/AlertDialog.cjs +3 -3
  37. package/dist/private/AlertDialog.cjs.map +1 -1
  38. package/dist/private/AlertDialog.css +3 -3
  39. package/dist/private/AlertDialog.css.map +1 -1
  40. package/dist/private/AlertDialog.mjs +3 -3
  41. package/dist/private/AlertDialog.mjs.map +1 -1
  42. package/dist/private/Asterisk.cjs +6 -6
  43. package/dist/private/Asterisk.css +4 -4
  44. package/dist/private/Asterisk.mjs +6 -6
  45. package/dist/private/Avatar.cjs +16 -16
  46. package/dist/private/Avatar.css +16 -16
  47. package/dist/private/Avatar.mjs +16 -16
  48. package/dist/private/AvatarGroup.cjs +120 -120
  49. package/dist/private/AvatarGroup.css +31 -31
  50. package/dist/private/AvatarGroup.mjs +120 -120
  51. package/dist/private/Badge.cjs +197 -197
  52. package/dist/private/Badge.css +125 -125
  53. package/dist/private/Badge.mjs +197 -197
  54. package/dist/private/Breadcrumbs.cjs +234 -234
  55. package/dist/private/Breadcrumbs.cjs.map +1 -1
  56. package/dist/private/Breadcrumbs.css +100 -100
  57. package/dist/private/Breadcrumbs.css.map +1 -1
  58. package/dist/private/Breadcrumbs.mjs +234 -234
  59. package/dist/private/Breadcrumbs.mjs.map +1 -1
  60. package/dist/private/Button.cjs +335 -326
  61. package/dist/private/Button.cjs.map +1 -1
  62. package/dist/private/Button.css +176 -172
  63. package/dist/private/Button.css.map +1 -1
  64. package/dist/private/Button.mjs +335 -326
  65. package/dist/private/Button.mjs.map +1 -1
  66. package/dist/private/ButtonGroup.cjs +23 -20
  67. package/dist/private/ButtonGroup.cjs.map +1 -1
  68. package/dist/private/ButtonGroup.css +19 -15
  69. package/dist/private/ButtonGroup.css.map +1 -1
  70. package/dist/private/ButtonGroup.mjs +23 -20
  71. package/dist/private/ButtonGroup.mjs.map +1 -1
  72. package/dist/private/Calendar.cjs +232 -232
  73. package/dist/private/Calendar.cjs.map +1 -1
  74. package/dist/private/Calendar.css +149 -149
  75. package/dist/private/Calendar.css.map +1 -1
  76. package/dist/private/Calendar.mjs +232 -232
  77. package/dist/private/Calendar.mjs.map +1 -1
  78. package/dist/private/Card.cjs +309 -309
  79. package/dist/private/Card.css +206 -206
  80. package/dist/private/Card.mjs +309 -309
  81. package/dist/private/CardView.cjs +17 -17
  82. package/dist/private/CardView.css +17 -17
  83. package/dist/private/CardView.mjs +17 -17
  84. package/dist/private/CenterBaseline.cjs +1 -1
  85. package/dist/private/CenterBaseline.cjs.map +1 -1
  86. package/dist/private/CenterBaseline.css +2 -2
  87. package/dist/private/CenterBaseline.css.map +1 -1
  88. package/dist/private/CenterBaseline.mjs +1 -1
  89. package/dist/private/CenterBaseline.mjs.map +1 -1
  90. package/dist/private/Checkbox.cjs +188 -188
  91. package/dist/private/Checkbox.css +110 -110
  92. package/dist/private/Checkbox.mjs +188 -188
  93. package/dist/private/CheckboxGroup.cjs +43 -43
  94. package/dist/private/CheckboxGroup.css +37 -37
  95. package/dist/private/CheckboxGroup.mjs +43 -43
  96. package/dist/private/Checkmark.cjs +12 -12
  97. package/dist/private/Checkmark.css +8 -8
  98. package/dist/private/Checkmark.mjs +12 -12
  99. package/dist/private/Chevron.cjs +12 -12
  100. package/dist/private/Chevron.css +10 -10
  101. package/dist/private/Chevron.mjs +12 -12
  102. package/dist/private/ClearButton.cjs +30 -30
  103. package/dist/private/ClearButton.css +30 -30
  104. package/dist/private/ClearButton.mjs +30 -30
  105. package/dist/private/CloseButton.cjs +52 -52
  106. package/dist/private/CloseButton.cjs.map +1 -1
  107. package/dist/private/CloseButton.css +46 -46
  108. package/dist/private/CloseButton.css.map +1 -1
  109. package/dist/private/CloseButton.mjs +52 -52
  110. package/dist/private/CloseButton.mjs.map +1 -1
  111. package/dist/private/ColorArea.cjs +16 -16
  112. package/dist/private/ColorArea.css +16 -16
  113. package/dist/private/ColorArea.mjs +16 -16
  114. package/dist/private/ColorField.cjs +31 -31
  115. package/dist/private/ColorField.css +27 -27
  116. package/dist/private/ColorField.mjs +31 -31
  117. package/dist/private/ColorHandle.cjs +27 -27
  118. package/dist/private/ColorHandle.css +42 -42
  119. package/dist/private/ColorHandle.mjs +27 -27
  120. package/dist/private/ColorSlider.cjs +108 -108
  121. package/dist/private/ColorSlider.css +52 -52
  122. package/dist/private/ColorSlider.mjs +108 -108
  123. package/dist/private/ColorSwatch.cjs +29 -29
  124. package/dist/private/ColorSwatch.css +29 -29
  125. package/dist/private/ColorSwatch.mjs +29 -29
  126. package/dist/private/ColorSwatchPicker.cjs +29 -29
  127. package/dist/private/ColorSwatchPicker.css +48 -48
  128. package/dist/private/ColorSwatchPicker.mjs +29 -29
  129. package/dist/private/ColorWheel.cjs +26 -26
  130. package/dist/private/ColorWheel.css +17 -17
  131. package/dist/private/ColorWheel.mjs +26 -26
  132. package/dist/private/ComboBox.cjs +381 -381
  133. package/dist/private/ComboBox.cjs.map +1 -1
  134. package/dist/private/ComboBox.css +188 -188
  135. package/dist/private/ComboBox.css.map +1 -1
  136. package/dist/private/ComboBox.mjs +381 -381
  137. package/dist/private/ComboBox.mjs.map +1 -1
  138. package/dist/private/ContextualHelp.cjs +5 -5
  139. package/dist/private/ContextualHelp.cjs.map +1 -1
  140. package/dist/private/ContextualHelp.css +50 -50
  141. package/dist/private/ContextualHelp.css.map +1 -1
  142. package/dist/private/ContextualHelp.mjs +5 -5
  143. package/dist/private/ContextualHelp.mjs.map +1 -1
  144. package/dist/private/CornerTriangle.cjs +8 -8
  145. package/dist/private/CornerTriangle.css +6 -6
  146. package/dist/private/CornerTriangle.mjs +8 -8
  147. package/dist/private/Cross.cjs +14 -14
  148. package/dist/private/Cross.css +10 -10
  149. package/dist/private/Cross.mjs +14 -14
  150. package/dist/private/CustomDialog.cjs +25 -25
  151. package/dist/private/CustomDialog.css +25 -25
  152. package/dist/private/CustomDialog.mjs +25 -25
  153. package/dist/private/Dash.cjs +10 -10
  154. package/dist/private/Dash.css +6 -6
  155. package/dist/private/Dash.mjs +10 -10
  156. package/dist/private/DateField.cjs +73 -73
  157. package/dist/private/DateField.css +77 -77
  158. package/dist/private/DateField.mjs +73 -73
  159. package/dist/private/DatePicker.cjs +172 -172
  160. package/dist/private/DatePicker.cjs.map +1 -1
  161. package/dist/private/DatePicker.css +128 -128
  162. package/dist/private/DatePicker.css.map +1 -1
  163. package/dist/private/DatePicker.mjs +172 -172
  164. package/dist/private/DatePicker.mjs.map +1 -1
  165. package/dist/private/DateRangePicker.cjs +55 -55
  166. package/dist/private/DateRangePicker.cjs.map +1 -1
  167. package/dist/private/DateRangePicker.css +59 -59
  168. package/dist/private/DateRangePicker.css.map +1 -1
  169. package/dist/private/DateRangePicker.mjs +55 -55
  170. package/dist/private/DateRangePicker.mjs.map +1 -1
  171. package/dist/private/Dialog.cjs +17 -17
  172. package/dist/private/Dialog.css +70 -70
  173. package/dist/private/Dialog.mjs +17 -17
  174. package/dist/private/Disclosure.cjs +144 -122
  175. package/dist/private/Disclosure.cjs.map +1 -1
  176. package/dist/private/Disclosure.css +112 -112
  177. package/dist/private/Disclosure.css.map +1 -1
  178. package/dist/private/Disclosure.mjs +144 -122
  179. package/dist/private/Disclosure.mjs.map +1 -1
  180. package/dist/private/Divider.cjs +25 -25
  181. package/dist/private/Divider.css +25 -25
  182. package/dist/private/Divider.mjs +25 -25
  183. package/dist/private/DragHandle.cjs +8 -8
  184. package/dist/private/DragHandle.css +6 -6
  185. package/dist/private/DragHandle.mjs +8 -8
  186. package/dist/private/DragPreview.cjs +154 -154
  187. package/dist/private/DragPreview.css +106 -106
  188. package/dist/private/DragPreview.mjs +154 -154
  189. package/dist/private/DropZone.cjs +61 -61
  190. package/dist/private/DropZone.cjs.map +1 -1
  191. package/dist/private/DropZone.css +57 -57
  192. package/dist/private/DropZone.css.map +1 -1
  193. package/dist/private/DropZone.mjs +61 -61
  194. package/dist/private/DropZone.mjs.map +1 -1
  195. package/dist/private/Field.cjs +360 -360
  196. package/dist/private/Field.cjs.map +1 -1
  197. package/dist/private/Field.css +160 -160
  198. package/dist/private/Field.css.map +1 -1
  199. package/dist/private/Field.mjs +360 -360
  200. package/dist/private/Field.mjs.map +1 -1
  201. package/dist/private/Form.cjs +9 -9
  202. package/dist/private/Form.css +9 -9
  203. package/dist/private/Form.mjs +9 -9
  204. package/dist/private/FullscreenDialog.cjs +5 -5
  205. package/dist/private/FullscreenDialog.css +78 -78
  206. package/dist/private/FullscreenDialog.mjs +5 -5
  207. package/dist/private/IllustratedMessage.cjs +228 -228
  208. package/dist/private/IllustratedMessage.css +72 -72
  209. package/dist/private/IllustratedMessage.mjs +228 -228
  210. package/dist/private/Image.cjs +14 -14
  211. package/dist/private/Image.css +14 -14
  212. package/dist/private/Image.mjs +14 -14
  213. package/dist/private/InlineAlert.cjs +100 -100
  214. package/dist/private/InlineAlert.cjs.map +1 -1
  215. package/dist/private/InlineAlert.css +76 -76
  216. package/dist/private/InlineAlert.css.map +1 -1
  217. package/dist/private/InlineAlert.mjs +100 -100
  218. package/dist/private/InlineAlert.mjs.map +1 -1
  219. package/dist/private/LabeledValue.cjs +134 -134
  220. package/dist/private/LabeledValue.css +63 -63
  221. package/dist/private/LabeledValue.mjs +134 -134
  222. package/dist/private/Link.cjs +49 -49
  223. package/dist/private/Link.css +41 -41
  224. package/dist/private/Link.mjs +49 -49
  225. package/dist/private/LinkOut.cjs +8 -8
  226. package/dist/private/LinkOut.css +8 -8
  227. package/dist/private/LinkOut.mjs +8 -8
  228. package/dist/private/ListView.cjs +245 -245
  229. package/dist/private/ListView.cjs.map +1 -1
  230. package/dist/private/ListView.css +177 -177
  231. package/dist/private/ListView.css.map +1 -1
  232. package/dist/private/ListView.mjs +245 -245
  233. package/dist/private/ListView.mjs.map +1 -1
  234. package/dist/private/Menu.cjs +446 -446
  235. package/dist/private/Menu.cjs.map +1 -1
  236. package/dist/private/Menu.css +196 -196
  237. package/dist/private/Menu.css.map +1 -1
  238. package/dist/private/Menu.mjs +446 -446
  239. package/dist/private/Menu.mjs.map +1 -1
  240. package/dist/private/Meter.cjs +153 -153
  241. package/dist/private/Meter.css +91 -91
  242. package/dist/private/Meter.mjs +153 -153
  243. package/dist/private/Modal.cjs +74 -74
  244. package/dist/private/Modal.css +59 -59
  245. package/dist/private/Modal.mjs +74 -74
  246. package/dist/private/NotificationBadge.cjs +56 -56
  247. package/dist/private/NotificationBadge.cjs.map +1 -1
  248. package/dist/private/NotificationBadge.css +49 -49
  249. package/dist/private/NotificationBadge.css.map +1 -1
  250. package/dist/private/NotificationBadge.mjs +56 -56
  251. package/dist/private/NotificationBadge.mjs.map +1 -1
  252. package/dist/private/NumberField.cjs +114 -114
  253. package/dist/private/NumberField.css +99 -99
  254. package/dist/private/NumberField.mjs +114 -114
  255. package/dist/private/Picker.cjs +275 -275
  256. package/dist/private/Picker.cjs.map +1 -1
  257. package/dist/private/Picker.css +173 -173
  258. package/dist/private/Picker.css.map +1 -1
  259. package/dist/private/Picker.mjs +275 -275
  260. package/dist/private/Picker.mjs.map +1 -1
  261. package/dist/private/Popover.cjs +95 -95
  262. package/dist/private/Popover.cjs.map +1 -1
  263. package/dist/private/Popover.css +75 -75
  264. package/dist/private/Popover.css.map +1 -1
  265. package/dist/private/Popover.mjs +95 -95
  266. package/dist/private/Popover.mjs.map +1 -1
  267. package/dist/private/ProgressBar.cjs +163 -163
  268. package/dist/private/ProgressBar.css +99 -99
  269. package/dist/private/ProgressBar.mjs +163 -163
  270. package/dist/private/ProgressCircle.cjs +34 -31
  271. package/dist/private/ProgressCircle.cjs.map +1 -1
  272. package/dist/private/ProgressCircle.css +24 -24
  273. package/dist/private/ProgressCircle.css.map +1 -1
  274. package/dist/private/ProgressCircle.mjs +34 -31
  275. package/dist/private/ProgressCircle.mjs.map +1 -1
  276. package/dist/private/Provider.cjs +19 -19
  277. package/dist/private/Provider.css +15 -15
  278. package/dist/private/Provider.mjs +19 -19
  279. package/dist/private/RadioGroup.cjs +208 -208
  280. package/dist/private/RadioGroup.css +113 -113
  281. package/dist/private/RadioGroup.mjs +208 -208
  282. package/dist/private/RangeCalendar.cjs +16 -16
  283. package/dist/private/RangeCalendar.cjs.map +1 -1
  284. package/dist/private/RangeCalendar.css +17 -17
  285. package/dist/private/RangeCalendar.css.map +1 -1
  286. package/dist/private/RangeCalendar.mjs +16 -16
  287. package/dist/private/RangeCalendar.mjs.map +1 -1
  288. package/dist/private/RangeSlider.cjs.map +1 -1
  289. package/dist/private/RangeSlider.mjs.map +1 -1
  290. package/dist/private/SearchField.cjs +41 -41
  291. package/dist/private/SearchField.css +45 -45
  292. package/dist/private/SearchField.mjs +41 -41
  293. package/dist/private/SegmentedControl.cjs +178 -178
  294. package/dist/private/SegmentedControl.css +123 -123
  295. package/dist/private/SegmentedControl.mjs +178 -178
  296. package/dist/private/SelectBoxGroup.cjs +142 -142
  297. package/dist/private/SelectBoxGroup.css +120 -120
  298. package/dist/private/SelectBoxGroup.mjs +142 -142
  299. package/dist/private/Slider.cjs +292 -292
  300. package/dist/private/Slider.css +159 -159
  301. package/dist/private/Slider.mjs +292 -292
  302. package/dist/private/StatusLight.cjs +115 -115
  303. package/dist/private/StatusLight.css +59 -59
  304. package/dist/private/StatusLight.mjs +115 -115
  305. package/dist/private/Switch.cjs +171 -171
  306. package/dist/private/Switch.css +85 -85
  307. package/dist/private/Switch.mjs +171 -171
  308. package/dist/private/TableView.cjs +551 -534
  309. package/dist/private/TableView.cjs.map +1 -1
  310. package/dist/private/TableView.css +329 -303
  311. package/dist/private/TableView.css.map +1 -1
  312. package/dist/private/TableView.mjs +551 -534
  313. package/dist/private/TableView.mjs.map +1 -1
  314. package/dist/private/Tabs.cjs +131 -125
  315. package/dist/private/Tabs.cjs.map +1 -1
  316. package/dist/private/Tabs.css +105 -105
  317. package/dist/private/Tabs.css.map +1 -1
  318. package/dist/private/Tabs.mjs +131 -125
  319. package/dist/private/Tabs.mjs.map +1 -1
  320. package/dist/private/TabsPicker.cjs +127 -127
  321. package/dist/private/TabsPicker.css +108 -108
  322. package/dist/private/TabsPicker.mjs +127 -127
  323. package/dist/private/TagGroup.cjs +203 -203
  324. package/dist/private/TagGroup.cjs.map +1 -1
  325. package/dist/private/TagGroup.css +146 -146
  326. package/dist/private/TagGroup.css.map +1 -1
  327. package/dist/private/TagGroup.mjs +203 -203
  328. package/dist/private/TagGroup.mjs.map +1 -1
  329. package/dist/private/TextField.cjs +58 -58
  330. package/dist/private/TextField.css +54 -54
  331. package/dist/private/TextField.mjs +58 -58
  332. package/dist/private/TimeField.cjs +51 -51
  333. package/dist/private/TimeField.css +47 -47
  334. package/dist/private/TimeField.mjs +51 -51
  335. package/dist/private/Toast.cjs +120 -120
  336. package/dist/private/Toast.cjs.map +1 -1
  337. package/dist/private/Toast.css +110 -110
  338. package/dist/private/Toast.css.map +1 -1
  339. package/dist/private/Toast.mjs +120 -120
  340. package/dist/private/Toast.mjs.map +1 -1
  341. package/dist/private/ToggleButton.cjs +16 -16
  342. package/dist/private/ToggleButton.css +23 -23
  343. package/dist/private/ToggleButton.mjs +16 -16
  344. package/dist/private/Tooltip.cjs +86 -86
  345. package/dist/private/Tooltip.css +70 -70
  346. package/dist/private/Tooltip.mjs +86 -86
  347. package/dist/private/TreeView.cjs +229 -229
  348. package/dist/private/TreeView.cjs.map +1 -1
  349. package/dist/private/TreeView.css +184 -184
  350. package/dist/private/TreeView.css.map +1 -1
  351. package/dist/private/TreeView.mjs +229 -229
  352. package/dist/private/TreeView.mjs.map +1 -1
  353. package/dist/private/dnd-utils.cjs +42 -42
  354. package/dist/private/dnd-utils.css +39 -39
  355. package/dist/private/dnd-utils.mjs +42 -42
  356. package/dist/types/exports/CenterBaseline.d.ts +1 -0
  357. package/dist/types/exports/Skeleton.d.ts +1 -1
  358. package/dist/types/exports/index.d.ts +1 -0
  359. package/dist/types/src/CenterBaseline.d.ts +17 -0
  360. package/dist/types/src/ContextualHelp.d.ts +1 -1
  361. package/dist/types/src/Disclosure.d.ts +6 -1
  362. package/dist/types/src/ListView.d.ts +1 -1
  363. package/dist/types/src/Menu.d.ts +1 -1
  364. package/dist/types/src/Popover.d.ts +2 -2
  365. package/dist/types/src/style-utils.d.ts +4 -1
  366. package/exports/CenterBaseline.ts +1 -0
  367. package/exports/Skeleton.ts +1 -1
  368. package/exports/index.ts +2 -0
  369. package/icons/Icon.cjs +10 -10
  370. package/icons/Icon.css +9 -9
  371. package/icons/Icon.mjs +10 -10
  372. package/icons/Skeleton.cjs +2 -2
  373. package/icons/Skeleton.css +6 -6
  374. package/icons/Skeleton.mjs +2 -2
  375. package/package.json +6 -6
  376. package/src/ActionBar.tsx +0 -1
  377. package/src/ActionButton.tsx +0 -1
  378. package/src/ActionMenu.tsx +0 -1
  379. package/src/AlertDialog.tsx +0 -1
  380. package/src/Breadcrumbs.tsx +0 -4
  381. package/src/Button.tsx +12 -3
  382. package/src/ButtonGroup.tsx +1 -0
  383. package/src/Calendar.tsx +0 -1
  384. package/src/CenterBaseline.tsx +17 -0
  385. package/src/CloseButton.tsx +0 -1
  386. package/src/ComboBox.tsx +0 -1
  387. package/src/ContextualHelp.tsx +1 -2
  388. package/src/DatePicker.tsx +0 -1
  389. package/src/DateRangePicker.tsx +0 -1
  390. package/src/Disclosure.tsx +92 -79
  391. package/src/DropZone.tsx +0 -1
  392. package/src/Field.tsx +0 -1
  393. package/src/InlineAlert.tsx +0 -1
  394. package/src/ListView.tsx +0 -2
  395. package/src/Menu.tsx +1 -8
  396. package/src/NotificationBadge.tsx +0 -1
  397. package/src/Picker.tsx +0 -1
  398. package/src/Popover.tsx +2 -1
  399. package/src/ProgressCircle.tsx +1 -1
  400. package/src/RangeCalendar.tsx +0 -1
  401. package/src/RangeSlider.tsx +0 -1
  402. package/src/TableView.tsx +75 -37
  403. package/src/Tabs.tsx +9 -2
  404. package/src/TagGroup.tsx +0 -1
  405. package/src/Toast.tsx +0 -3
  406. package/src/TreeView.tsx +0 -1
  407. package/src/style-utils.ts +13 -2
  408. package/style/__tests__/style-macro.test.js +73 -71
  409. package/style/dist/main.cjs +25 -25
  410. package/style/dist/module.mjs +13 -13
  411. package/style/dist/properties.mjs +3 -3
  412. package/style/dist/spectrum-theme.cjs +224 -224
  413. package/style/dist/spectrum-theme.mjs +217 -217
  414. package/style/dist/style-macro.cjs +100 -100
  415. package/style/dist/style-macro.mjs +94 -94
  416. package/style/dist/style-utils.cjs +51 -39
  417. package/style/dist/style-utils.cjs.map +1 -1
  418. package/style/dist/style-utils.mjs +50 -38
  419. package/style/dist/style-utils.mjs.map +1 -1
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-spectrum/s2/src/TreeView.tsx"],"sourcesContent":["/*\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 {ActionButtonGroupContext} from './ActionButtonGroup';\nimport {ActionMenuContext} from './ActionMenu';\nimport {\n baseColor,\n color,\n colorMix,\n focusRing,\n fontRelative,\n style\n} from '../style' with {type: 'macro'};\nimport {Button, ButtonContext} from 'react-aria-components/Button';\nimport {centerBaseline} from './CenterBaseline';\nimport {Checkbox} from './Checkbox';\nimport Chevron from '../ui-icons/Chevron';\nimport {css} from '../style/style-macro' with {type: 'macro'};\nimport {\n DOMRef,\n forwardRefType,\n GlobalDOMAttributes,\n ItemDropTarget,\n Key,\n LoadingState\n} from '@react-types/shared';\nimport {DragHandleButton, InsertionIndicator} from './dnd-utils';\nimport {DragPreview} from './DragPreview';\nimport {\n getAllowedOverrides,\n StylesPropWithHeight,\n UnsafeStyles\n} from './style-utils' with {type: 'macro'};\nimport {IconContext} from './Icon';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {ProgressCircle} from './ProgressCircle';\nimport {Provider, useContextProps} from 'react-aria-components/slots';\nimport {\n TreeItemProps as RACTreeItemProps,\n TreeProps as RACTreeProps,\n Tree,\n TreeItem,\n TreeItemContent,\n TreeItemContentProps,\n TreeItemRenderProps,\n TreeLoadMoreItem,\n TreeLoadMoreItemProps,\n TreeRenderProps\n} from 'react-aria-components/Tree';\nimport React, {\n createContext,\n forwardRef,\n JSXElementConstructor,\n ReactElement,\n ReactNode,\n useContext,\n useRef\n} from 'react';\nimport {S2ListLayout} from './ListView';\nimport {Text, TextContext} from './Content';\nimport {TreeState} from 'react-stately/useTreeState';\nimport {useActionBarContainer} from './ActionBar';\nimport {useDOMRef} from './useDOMRef';\nimport {useLocale} from 'react-aria/I18nProvider';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useScale} from './utils';\nimport {Virtualizer} from 'react-aria-components/Virtualizer';\n\ninterface S2TreeProps {\n /** Handler that is called when a user performs an action on a row. */\n onAction?: (key: Key) => void;\n /** Provides the ActionBar to display when items are selected in the TreeView. */\n renderActionBar?: (selectedKeys: 'all' | Set<Key>) => ReactElement;\n}\n\ninterface TreeViewStyleProps {\n /**\n * How selection should be displayed. For guidance on when to use which option, refer to the\n * [Spectrum](https://spectrum.adobe.com/page/tree-view/#Checkbox-or-highlight-selection-style)\n * page.\n *\n * @default 'checkbox'\n */\n selectionStyle?: 'highlight' | 'checkbox';\n}\n\nexport interface TreeViewProps<T>\n extends\n Omit<\n RACTreeProps<T>,\n | 'style'\n | 'className'\n | 'render'\n | 'onRowAction'\n | 'selectionBehavior'\n | 'onScroll'\n | 'onCellAction'\n | keyof GlobalDOMAttributes\n >,\n UnsafeStyles,\n S2TreeProps,\n TreeViewStyleProps {\n /** Spectrum-defined styles, returned by the `style()` macro. */\n styles?: StylesPropWithHeight;\n}\n\nexport interface TreeViewItemProps extends Omit<\n RACTreeItemProps,\n 'className' | 'style' | 'render' | 'onClick' | keyof GlobalDOMAttributes\n> {\n /** Whether this item has children, even if not loaded yet. */\n hasChildItems?: boolean;\n}\n\nexport interface TreeViewLoadMoreItemProps extends Pick<TreeLoadMoreItemProps, 'onLoadMore'> {\n /** The current loading state of the TreeView or TreeView row. */\n loadingState?: LoadingState;\n}\n\ninterface TreeRendererContextValue {\n renderer?: (item) => ReactElement<any, string | JSXElementConstructor<any>>;\n}\nconst TreeRendererContext = createContext<TreeRendererContextValue>({});\n\nconst treeViewWrapper = style(\n {\n minHeight: 0,\n height: 'full',\n minWidth: 160,\n display: 'flex',\n isolation: 'isolate',\n disableTapHighlight: true,\n position: 'relative',\n overflow: 'clip',\n '--indicator-level-padding': {\n type: 'width',\n value: {\n // 4 (start gap) + 10 (drag handle) + (hasCheckbox ? 16 + 8 : 0) + 40 (expand button)\n // keep in sync with treeCellGrid gridTemplateColumns\n default: 54,\n hasCheckbox: 78\n }\n },\n '--root-drop-radius': {\n type: 'borderTopStartRadius',\n value: 'sm'\n }\n },\n getAllowedOverrides({height: true})\n);\n\n// TODO: can't use border cuz it means the contents of the tree are no longer\n// flush with its container. Outline and box shadow are affected by the outlineOffset we\n// have in the tree styles and result in the rows clipping the drop outline. This approach\n// avoids that\nconst rootDropOutline = css(`\n &:has([role=\"treegrid\"][data-drop-target])::after {\n content: \"\";\n position: absolute;\n inset: 0;\n pointer-events: none;\n border: 2px solid ${color('blue-800')};\n border-radius: var(--root-drop-radius);\n z-index: 2;\n }\n @media (forced-colors: active) {\n &:has([role=\"treegrid\"][data-drop-target])::after {\n border-color: Highlight;\n }\n }\n`);\n\n// These are the same as ListView. we didn't have v3 tree dnd and dont have designs so to be adjusted later\nconst dropTargetBackground = colorMix('gray-25', 'blue-900', 10);\nconst rootDropSelectedRowBackground = colorMix('gray-25', 'blue-900', 28);\nconst rowDropBackground = colorMix('gray-25', 'blue-900', 10);\nconst rootRowDropStyles = {\n default: dropTargetBackground,\n isSelected: rootDropSelectedRowBackground,\n forcedColors: 'Background'\n} as const;\nconst rowDropStyles = {\n default: rowDropBackground,\n isSelected: rowDropBackground,\n forcedColors: 'Background'\n} as const;\n\n// TODO: the below is needed so the borders of the top and bottom row isn't cut off if the TreeView is wrapped within a container by always reserving the 2px needed for the\n// keyboard focus ring. Perhaps find a different way of rendering the outlines since the top of the item doesn't\n// scroll into view due to how the ring is offset. Alternatively, have the tree render the top/bottom outline like it does in Listview\nconst tree = style<TreeRenderProps>({\n ...focusRing(),\n outlineOffset: -2, // make certain we are visible inside overflow hidden containers\n userSelect: 'none',\n minHeight: 0,\n minWidth: 0,\n width: 'full',\n height: 'full',\n overflow: 'auto',\n boxSizing: 'border-box',\n backgroundColor: {\n isDropTarget: {\n default: dropTargetBackground,\n forcedColors: 'Background'\n }\n },\n justifyContent: {\n isEmpty: 'center'\n },\n alignItems: {\n isEmpty: 'center'\n },\n '--indent': {\n type: 'width',\n value: 16\n }\n});\n\nlet InternalTreeViewContext = createContext<{selectionStyle?: 'highlight' | 'checkbox'}>({});\n\n/**\n * A tree view provides users with a way to navigate nested hierarchical information.\n */\nexport const TreeView = /*#__PURE__*/ (forwardRef as forwardRefType)(function TreeView<T>(\n props: TreeViewProps<T>,\n ref: DOMRef<HTMLDivElement>\n) {\n let {\n children,\n selectionStyle = 'checkbox',\n UNSAFE_className,\n UNSAFE_style,\n dragAndDropHooks\n } = props;\n let scale = useScale();\n\n if (dragAndDropHooks && dragAndDropHooks.renderDragPreview == null) {\n dragAndDropHooks.renderDragPreview = items => <DragPreview items={items} />;\n }\n\n let hasCheckbox = props.selectionMode !== 'none' && selectionStyle !== 'highlight';\n\n if (dragAndDropHooks) {\n dragAndDropHooks.renderDropIndicator = target => (\n <InsertionIndicator target={target as ItemDropTarget} />\n );\n }\n let renderer;\n if (typeof children === 'function') {\n renderer = children;\n }\n\n let domRef = useDOMRef(ref);\n let scrollRef = useRef<HTMLDivElement | null>(null);\n\n let {selectedKeys, onSelectionChange, actionBar, actionBarHeight} = useActionBarContainer({\n ...props,\n scrollRef\n });\n\n return (\n <div\n ref={domRef}\n className={\n (UNSAFE_className ?? '') +\n treeViewWrapper({hasCheckbox}, props.styles) +\n ' ' +\n rootDropOutline\n }\n style={UNSAFE_style}>\n <Virtualizer\n layout={S2ListLayout}\n layoutOptions={{\n rowHeight: scale === 'large' ? 50 : 40,\n dropIndicatorThickness: 0\n }}>\n <TreeRendererContext.Provider value={{renderer}}>\n <InternalTreeViewContext.Provider value={{selectionStyle}}>\n <Tree\n {...props}\n dragAndDropHooks={dragAndDropHooks}\n style={{\n paddingBottom: actionBarHeight > 0 ? actionBarHeight + 8 : 0,\n scrollPaddingBottom: actionBarHeight > 0 ? actionBarHeight + 8 : 0\n }}\n className={renderProps => tree(renderProps)}\n selectionBehavior={selectionStyle === 'highlight' ? 'replace' : 'toggle'}\n selectedKeys={selectedKeys}\n defaultSelectedKeys={undefined}\n onSelectionChange={onSelectionChange}\n ref={scrollRef}>\n {props.children}\n </Tree>\n </InternalTreeViewContext.Provider>\n </TreeRendererContext.Provider>\n </Virtualizer>\n {actionBar}\n </div>\n );\n});\n\nconst rowBackgroundColor = {\n default: '--s2-container-bg',\n isFocusVisibleWithin: colorMix('gray-25', 'gray-900', 7),\n isHovered: colorMix('gray-25', 'gray-900', 7),\n isPressed: colorMix('gray-25', 'gray-900', 7),\n isSelected: {\n default: colorMix('gray-25', 'gray-900', 7),\n isFocusVisibleWithin: colorMix('gray-25', 'gray-900', 10),\n isHovered: colorMix('gray-25', 'gray-900', 10),\n isPressed: colorMix('gray-25', 'gray-900', 10)\n },\n forcedColors: {\n default: 'Background'\n }\n} as const;\n\nconst treeRow = style<TreeItemRenderProps & {isLink?: boolean; isPreviousSelected?: boolean}>({\n outlineStyle: {\n default: 'none',\n isDropTarget: 'solid'\n },\n outlineWidth: {\n isDropTarget: 2\n },\n outlineOffset: {\n isDropTarget: -2\n },\n outlineColor: {\n isDropTarget: 'blue-800',\n forcedColors: {\n isDropTarget: 'Highlight'\n }\n },\n position: 'relative',\n display: 'flex',\n height: 40,\n width: 'full',\n boxSizing: 'border-box',\n font: 'ui',\n color: {\n default: baseColor('neutral-subdued'),\n isSelected: baseColor('neutral'),\n forcedColors: 'ButtonText'\n },\n cursor: {\n default: 'default',\n isLink: 'pointer'\n },\n '--rowBackgroundColor': {\n type: 'backgroundColor',\n value: rowBackgroundColor\n },\n '--borderRadiusTreeItem': {\n type: 'borderTopStartRadius',\n value: 'sm'\n },\n borderRadius: 'sm'\n});\n\nconst treeCellGrid = style({\n display: 'grid',\n width: 'full',\n height: 'full',\n boxSizing: 'border-box',\n borderRadius: 'sm',\n alignContent: 'center',\n alignItems: 'center',\n // TODO: will have to update these to match design\n gridTemplateColumns: [\n 4,\n 'auto',\n 'auto',\n 'auto',\n 'auto',\n 'auto',\n '1fr',\n 'minmax(0, auto)',\n 'auto'\n ],\n gridTemplateRows: '1fr',\n gridTemplateAreas: [\n '. drag-handle checkbox level-padding expand-button icon content actions actionmenu'\n ],\n paddingEnd: 4, // account for any focus rings on the last item in the cell\n color: {\n isDisabled: {\n default: 'gray-400',\n forcedColors: 'GrayText'\n },\n forcedColors: 'ButtonText',\n selectionStyle: {\n highlight: {\n isSelected: {\n forcedColors: 'HighlightText'\n }\n }\n }\n },\n '--rowSelectedBorderColor': {\n type: 'outlineColor',\n value: {\n default: 'gray-800',\n isFocusVisible: 'focus-ring',\n forcedColors: 'Highlight'\n }\n },\n '--rowForcedFocusBorderColor': {\n type: 'outlineColor',\n value: {\n default: 'focus-ring',\n forcedColors: 'Highlight'\n }\n },\n '--borderColor': {\n type: 'borderColor',\n value: {\n default: 'transparent',\n selectionStyle: {\n highlight: 'blue-900'\n },\n forcedColors: 'ButtonBorder'\n }\n },\n forcedColorAdjust: 'none'\n});\n\nconst treeRowBackground = style({\n position: 'absolute',\n zIndex: -1,\n inset: 0,\n backgroundColor: {\n default: '--rowBackgroundColor',\n forcedColors: 'Background',\n selectionStyle: {\n highlight: {\n default: '--rowBackgroundColor',\n isSelected: {\n default: colorMix('gray-25', 'blue-900', 10),\n isHovered: colorMix('gray-25', 'blue-900', 15),\n isPressed: colorMix('gray-25', 'blue-900', 15),\n isFocusVisible: colorMix('gray-25', 'blue-900', 15),\n forcedColors: 'Highlight'\n }\n }\n },\n ':is([role=\"treegrid\"][data-drop-target] *)': rootRowDropStyles,\n isDropTarget: rowDropStyles\n },\n borderTopStartRadius: {\n default: '--borderRadiusTreeItem',\n isPreviousSelected: {\n default: '--borderRadiusTreeItem',\n isSelected: 'none'\n }\n },\n borderTopEndRadius: {\n default: '--borderRadiusTreeItem',\n isPreviousSelected: {\n default: '--borderRadiusTreeItem',\n isSelected: 'none'\n }\n },\n borderBottomStartRadius: {\n default: '--borderRadiusTreeItem',\n isNextSelected: {\n default: '--borderRadiusTreeItem',\n isSelected: 'none'\n }\n },\n borderBottomEndRadius: {\n default: '--borderRadiusTreeItem',\n isNextSelected: {\n default: '--borderRadiusTreeItem',\n isSelected: 'none'\n }\n },\n borderTopWidth: {\n default: 1,\n isPreviousSelected: 0\n },\n borderBottomWidth: {\n default: 1,\n isNextSelected: 0\n },\n borderStartWidth: 1,\n borderEndWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: 'transparent',\n isSelected: '--borderColor'\n }\n});\n\nconst treeCheckbox = style({\n gridArea: 'checkbox',\n marginStart: 8,\n marginEnd: 0,\n paddingEnd: 0,\n visibility: {\n default: 'visible',\n isDisabled: 'hidden'\n }\n});\n\nconst treeIcon = style({\n gridArea: 'icon',\n marginEnd: 'text-to-visual',\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n }\n});\n\nconst treeContent = style({\n gridArea: 'content',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden'\n});\n\nconst treeActions = style({\n gridArea: 'actions',\n /* TODO: I made this one up, confirm desired behavior. These paddings are to make sure the action group has enough padding for the focus ring */\n marginStart: 2,\n marginEnd: 4\n});\n\nconst treeActionMenu = style({\n gridArea: 'actionmenu'\n});\n\nconst treeDragButtonContainer = style({\n gridArea: 'drag-handle',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 10\n});\n\nlet treeRowFocusRing = style({\n ...focusRing(),\n outlineOffset: {\n default: -2,\n forcedColors: -3\n },\n outlineWidth: {\n default: 2,\n forcedColors: '[3px]'\n },\n outlineColor: {\n default: 'focus-ring',\n forcedColors: 'Highlight',\n selectionStyle: {\n highlight: {\n default: 'focus-ring',\n forcedColors: 'ButtonBorder'\n }\n }\n },\n position: 'absolute',\n inset: 0,\n top: {\n default: '[-1px]',\n isFirstItem: 0\n },\n bottom: {\n selectionStyle: {\n checkbox: 0,\n highlight: {\n default: 0,\n isNextSelected: '[-1px]',\n isSelected: {\n default: 0,\n isNextSelected: 0\n }\n }\n }\n },\n borderRadius: 'sm',\n zIndex: 1,\n pointerEvents: 'none'\n});\n\nexport const TreeViewItem = (props: TreeViewItemProps): ReactNode => {\n let {href} = props;\n\n return (\n <TreeItem\n {...props}\n className={renderProps =>\n treeRow({\n ...renderProps,\n isLink: !!href\n })\n }\n />\n );\n};\n\nexport interface TreeViewItemContentProps extends Omit<TreeItemContentProps, 'children'> {\n /** Rendered contents of the tree item or child items. */\n children: ReactNode;\n}\n\nexport const TreeViewItemContent = (props: TreeViewItemContentProps): ReactNode => {\n let {children} = props;\n let scale = useScale();\n\n let {selectionStyle} = useContext(InternalTreeViewContext);\n\n return (\n <TreeItemContent>\n {({\n isExpanded,\n hasChildItems,\n selectionMode,\n selectionBehavior,\n isDisabled,\n isSelected,\n id,\n state,\n isHovered,\n isFocusVisible,\n isFocusVisibleWithin,\n allowsDragging,\n isDropTarget\n }) => {\n return (\n <div\n className={treeCellGrid({\n isDisabled,\n isNextSelected: isNextSelected(id, state),\n isSelected,\n selectionStyle\n })}>\n <div\n className={treeRowBackground({\n isHovered,\n isFocusVisible,\n isSelected,\n selectionStyle,\n isNextSelected: isNextSelected(id, state),\n isPreviousSelected: isPrevSelected(id, state),\n isDropTarget\n })}\n />\n {isFocusVisible && (\n <div\n className={treeRowFocusRing({\n isFocusVisible,\n selectionStyle,\n isSelected,\n isNextSelected: isNextSelected(id, state),\n isFirstItem: isFirstItem(id, state)\n })}\n />\n )}\n {allowsDragging && (\n <div className={treeDragButtonContainer}>\n {!isDisabled && <DragHandleButton isFocusVisibleWithin={isFocusVisibleWithin} />}\n </div>\n )}\n {selectionMode !== 'none' &&\n selectionBehavior === 'toggle' &&\n selectionStyle !== 'highlight' && (\n // TODO: add transition?\n <div\n className={treeCheckbox({\n isDisabled:\n isDisabled ||\n !state.selectionManager.canSelectItem(id) ||\n state.disabledKeys.has(id)\n })}>\n <Checkbox slot=\"selection\" />\n </div>\n )}\n <div\n className={style({\n gridArea: 'level-padding',\n width: 'calc(calc(var(--tree-item-level, 0) - 1) * var(--indent))'\n })}\n />\n <ExpandableRowChevron\n isDisabled={isDisabled}\n isExpanded={isExpanded}\n scale={scale}\n isHidden={!hasChildItems}\n />\n <Provider\n values={[\n [TextContext, {styles: treeContent}],\n [\n IconContext,\n {\n render: centerBaseline({slot: 'icon', styles: treeIcon}),\n styles: style({size: fontRelative(20), flexShrink: 0})\n }\n ],\n [ActionButtonGroupContext, {styles: treeActions, isDisabled}],\n [ActionMenuContext, {styles: treeActionMenu, isQuiet: true, isDisabled}]\n ]}>\n {typeof children === 'string' ? <Text>{children}</Text> : children}\n </Provider>\n </div>\n );\n }}\n </TreeItemContent>\n );\n};\n\nconst centeredWrapper = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 'full',\n height: 'full'\n});\n\nexport const TreeViewLoadMoreItem = (props: TreeViewLoadMoreItemProps): ReactNode => {\n let {loadingState, onLoadMore} = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';\n return (\n <TreeLoadMoreItem\n isLoading={isLoading}\n onLoadMore={onLoadMore}\n className={style({width: 'full', marginY: 4})}>\n {() => {\n return (\n <div className={centeredWrapper}>\n <ProgressCircle\n isIndeterminate\n aria-label={stringFormatter.format('table.loadingMore')}\n />\n </div>\n );\n }}\n </TreeLoadMoreItem>\n );\n};\n\ninterface ExpandableRowChevronProps {\n isExpanded?: boolean;\n isDisabled?: boolean;\n isRTL?: boolean;\n scale: 'medium' | 'large';\n isHidden?: boolean;\n}\n\nconst expandButton = style<ExpandableRowChevronProps>({\n gridArea: 'expand-button',\n color: {\n default: 'inherit',\n isDisabled: {\n default: 'disabled',\n forcedColors: 'GrayText'\n }\n },\n height: 40,\n width: 40,\n display: 'flex',\n flexWrap: 'wrap',\n alignContent: 'center',\n justifyContent: 'center',\n outlineStyle: 'none',\n cursor: 'default',\n transform: {\n isExpanded: {\n default: 'rotate(90deg)',\n isRTL: 'rotate(-90deg)'\n }\n },\n padding: 0,\n transition: 'default',\n backgroundColor: 'transparent',\n borderStyle: 'none',\n disableTapHighlight: true,\n visibility: {\n isHidden: 'hidden'\n }\n});\n\nfunction ExpandableRowChevron(props: ExpandableRowChevronProps) {\n let expandButtonRef = useRef<HTMLButtonElement>(null);\n let [fullProps, ref] = useContextProps(\n {...props, slot: 'chevron'},\n expandButtonRef,\n ButtonContext\n );\n let {isExpanded, scale, isHidden} = fullProps;\n let {direction} = useLocale();\n\n return (\n <Button\n {...props}\n ref={ref}\n slot=\"chevron\"\n className={renderProps =>\n expandButton({...renderProps, isExpanded, isRTL: direction === 'rtl', scale, isHidden})\n }>\n <Chevron\n className={style({\n scale: {\n direction: {\n ltr: '1',\n rtl: '-1'\n }\n },\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n }\n })({direction})}\n />\n </Button>\n );\n}\n\nfunction isNextSelected(id: Key | undefined, state: TreeState<unknown>) {\n if (id == null || !state) {\n return false;\n }\n let keyAfter = state.collection.getKeyAfter(id);\n\n // We need to skip non-item nodes because the selection manager will map non-item nodes to their parent before checking selection\n let node = keyAfter != null ? state.collection.getItem(keyAfter) : null;\n while (node && node.type !== 'item' && keyAfter != null) {\n keyAfter = state.collection.getKeyAfter(keyAfter);\n node = keyAfter != null ? state.collection.getItem(keyAfter) : null;\n }\n\n return keyAfter != null && state.selectionManager.isSelected(keyAfter);\n}\n\nfunction isPrevSelected(id: Key | undefined, state: TreeState<unknown>) {\n if (id == null || !state) {\n return false;\n }\n let keyBefore = state.collection.getKeyBefore(id);\n return keyBefore != null && state.selectionManager.isSelected(keyBefore);\n}\n\nfunction isFirstItem(id: Key | undefined, state: TreeState<unknown>) {\n if (id == null || !state) {\n return false;\n }\n return state.collection.getFirstKey() === id;\n}\n"],"names":[],"version":3,"file":"TreeView.mjs.map"}
1
+ {"mappings":"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","sources":["packages/@react-spectrum/s2/src/TreeView.tsx"],"sourcesContent":["/*\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 {ActionButtonGroupContext} from './ActionButtonGroup';\nimport {ActionMenuContext} from './ActionMenu';\nimport {\n baseColor,\n color,\n colorMix,\n focusRing,\n fontRelative,\n style\n} from '../style' with {type: 'macro'};\nimport {Button, ButtonContext} from 'react-aria-components/Button';\nimport {centerBaseline} from './CenterBaseline';\nimport {Checkbox} from './Checkbox';\nimport Chevron from '../ui-icons/Chevron';\nimport {css} from '../style/style-macro' with {type: 'macro'};\nimport {\n DOMRef,\n forwardRefType,\n GlobalDOMAttributes,\n ItemDropTarget,\n Key,\n LoadingState\n} from '@react-types/shared';\nimport {DragHandleButton, InsertionIndicator} from './dnd-utils';\nimport {DragPreview} from './DragPreview';\nimport {\n getAllowedOverrides,\n StylesPropWithHeight,\n UnsafeStyles\n} from './style-utils' with {type: 'macro'};\nimport {IconContext} from './Icon';\nimport intlMessages from '../intl/*.json';\nimport {ProgressCircle} from './ProgressCircle';\nimport {Provider, useContextProps} from 'react-aria-components/slots';\nimport {\n TreeItemProps as RACTreeItemProps,\n TreeProps as RACTreeProps,\n Tree,\n TreeItem,\n TreeItemContent,\n TreeItemContentProps,\n TreeItemRenderProps,\n TreeLoadMoreItem,\n TreeLoadMoreItemProps,\n TreeRenderProps\n} from 'react-aria-components/Tree';\nimport React, {\n createContext,\n forwardRef,\n JSXElementConstructor,\n ReactElement,\n ReactNode,\n useContext,\n useRef\n} from 'react';\nimport {S2ListLayout} from './ListView';\nimport {Text, TextContext} from './Content';\nimport {TreeState} from 'react-stately/useTreeState';\nimport {useActionBarContainer} from './ActionBar';\nimport {useDOMRef} from './useDOMRef';\nimport {useLocale} from 'react-aria/I18nProvider';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useScale} from './utils';\nimport {Virtualizer} from 'react-aria-components/Virtualizer';\n\ninterface S2TreeProps {\n /** Handler that is called when a user performs an action on a row. */\n onAction?: (key: Key) => void;\n /** Provides the ActionBar to display when items are selected in the TreeView. */\n renderActionBar?: (selectedKeys: 'all' | Set<Key>) => ReactElement;\n}\n\ninterface TreeViewStyleProps {\n /**\n * How selection should be displayed. For guidance on when to use which option, refer to the\n * [Spectrum](https://spectrum.adobe.com/page/tree-view/#Checkbox-or-highlight-selection-style)\n * page.\n *\n * @default 'checkbox'\n */\n selectionStyle?: 'highlight' | 'checkbox';\n}\n\nexport interface TreeViewProps<T>\n extends\n Omit<\n RACTreeProps<T>,\n | 'style'\n | 'className'\n | 'render'\n | 'onRowAction'\n | 'selectionBehavior'\n | 'onScroll'\n | 'onCellAction'\n | keyof GlobalDOMAttributes\n >,\n UnsafeStyles,\n S2TreeProps,\n TreeViewStyleProps {\n /** Spectrum-defined styles, returned by the `style()` macro. */\n styles?: StylesPropWithHeight;\n}\n\nexport interface TreeViewItemProps extends Omit<\n RACTreeItemProps,\n 'className' | 'style' | 'render' | 'onClick' | keyof GlobalDOMAttributes\n> {\n /** Whether this item has children, even if not loaded yet. */\n hasChildItems?: boolean;\n}\n\nexport interface TreeViewLoadMoreItemProps extends Pick<TreeLoadMoreItemProps, 'onLoadMore'> {\n /** The current loading state of the TreeView or TreeView row. */\n loadingState?: LoadingState;\n}\n\ninterface TreeRendererContextValue {\n renderer?: (item) => ReactElement<any, string | JSXElementConstructor<any>>;\n}\nconst TreeRendererContext = createContext<TreeRendererContextValue>({});\n\nconst treeViewWrapper = style(\n {\n minHeight: 0,\n height: 'full',\n minWidth: 160,\n display: 'flex',\n isolation: 'isolate',\n disableTapHighlight: true,\n position: 'relative',\n overflow: 'clip',\n '--indicator-level-padding': {\n type: 'width',\n value: {\n // 4 (start gap) + 10 (drag handle) + (hasCheckbox ? 16 + 8 : 0) + 40 (expand button)\n // keep in sync with treeCellGrid gridTemplateColumns\n default: 54,\n hasCheckbox: 78\n }\n },\n '--root-drop-radius': {\n type: 'borderTopStartRadius',\n value: 'sm'\n }\n },\n getAllowedOverrides({height: true})\n);\n\n// TODO: can't use border cuz it means the contents of the tree are no longer\n// flush with its container. Outline and box shadow are affected by the outlineOffset we\n// have in the tree styles and result in the rows clipping the drop outline. This approach\n// avoids that\nconst rootDropOutline = css(`\n &:has([role=\"treegrid\"][data-drop-target])::after {\n content: \"\";\n position: absolute;\n inset: 0;\n pointer-events: none;\n border: 2px solid ${color('blue-800')};\n border-radius: var(--root-drop-radius);\n z-index: 2;\n }\n @media (forced-colors: active) {\n &:has([role=\"treegrid\"][data-drop-target])::after {\n border-color: Highlight;\n }\n }\n`);\n\n// These are the same as ListView. we didn't have v3 tree dnd and dont have designs so to be adjusted later\nconst dropTargetBackground = colorMix('gray-25', 'blue-900', 10);\nconst rootDropSelectedRowBackground = colorMix('gray-25', 'blue-900', 28);\nconst rowDropBackground = colorMix('gray-25', 'blue-900', 10);\nconst rootRowDropStyles = {\n default: dropTargetBackground,\n isSelected: rootDropSelectedRowBackground,\n forcedColors: 'Background'\n} as const;\nconst rowDropStyles = {\n default: rowDropBackground,\n isSelected: rowDropBackground,\n forcedColors: 'Background'\n} as const;\n\n// TODO: the below is needed so the borders of the top and bottom row isn't cut off if the TreeView is wrapped within a container by always reserving the 2px needed for the\n// keyboard focus ring. Perhaps find a different way of rendering the outlines since the top of the item doesn't\n// scroll into view due to how the ring is offset. Alternatively, have the tree render the top/bottom outline like it does in Listview\nconst tree = style<TreeRenderProps>({\n ...focusRing(),\n outlineOffset: -2, // make certain we are visible inside overflow hidden containers\n userSelect: 'none',\n minHeight: 0,\n minWidth: 0,\n width: 'full',\n height: 'full',\n overflow: 'auto',\n boxSizing: 'border-box',\n backgroundColor: {\n isDropTarget: {\n default: dropTargetBackground,\n forcedColors: 'Background'\n }\n },\n justifyContent: {\n isEmpty: 'center'\n },\n alignItems: {\n isEmpty: 'center'\n },\n '--indent': {\n type: 'width',\n value: 16\n }\n});\n\nlet InternalTreeViewContext = createContext<{selectionStyle?: 'highlight' | 'checkbox'}>({});\n\n/**\n * A tree view provides users with a way to navigate nested hierarchical information.\n */\nexport const TreeView = /*#__PURE__*/ (forwardRef as forwardRefType)(function TreeView<T>(\n props: TreeViewProps<T>,\n ref: DOMRef<HTMLDivElement>\n) {\n let {\n children,\n selectionStyle = 'checkbox',\n UNSAFE_className,\n UNSAFE_style,\n dragAndDropHooks\n } = props;\n let scale = useScale();\n\n if (dragAndDropHooks && dragAndDropHooks.renderDragPreview == null) {\n dragAndDropHooks.renderDragPreview = items => <DragPreview items={items} />;\n }\n\n let hasCheckbox = props.selectionMode !== 'none' && selectionStyle !== 'highlight';\n\n if (dragAndDropHooks) {\n dragAndDropHooks.renderDropIndicator = target => (\n <InsertionIndicator target={target as ItemDropTarget} />\n );\n }\n let renderer;\n if (typeof children === 'function') {\n renderer = children;\n }\n\n let domRef = useDOMRef(ref);\n let scrollRef = useRef<HTMLDivElement | null>(null);\n\n let {selectedKeys, onSelectionChange, actionBar, actionBarHeight} = useActionBarContainer({\n ...props,\n scrollRef\n });\n\n return (\n <div\n ref={domRef}\n className={\n (UNSAFE_className ?? '') +\n treeViewWrapper({hasCheckbox}, props.styles) +\n ' ' +\n rootDropOutline\n }\n style={UNSAFE_style}>\n <Virtualizer\n layout={S2ListLayout}\n layoutOptions={{\n rowHeight: scale === 'large' ? 50 : 40,\n dropIndicatorThickness: 0\n }}>\n <TreeRendererContext.Provider value={{renderer}}>\n <InternalTreeViewContext.Provider value={{selectionStyle}}>\n <Tree\n {...props}\n dragAndDropHooks={dragAndDropHooks}\n style={{\n paddingBottom: actionBarHeight > 0 ? actionBarHeight + 8 : 0,\n scrollPaddingBottom: actionBarHeight > 0 ? actionBarHeight + 8 : 0\n }}\n className={renderProps => tree(renderProps)}\n selectionBehavior={selectionStyle === 'highlight' ? 'replace' : 'toggle'}\n selectedKeys={selectedKeys}\n defaultSelectedKeys={undefined}\n onSelectionChange={onSelectionChange}\n ref={scrollRef}>\n {props.children}\n </Tree>\n </InternalTreeViewContext.Provider>\n </TreeRendererContext.Provider>\n </Virtualizer>\n {actionBar}\n </div>\n );\n});\n\nconst rowBackgroundColor = {\n default: '--s2-container-bg',\n isFocusVisibleWithin: colorMix('gray-25', 'gray-900', 7),\n isHovered: colorMix('gray-25', 'gray-900', 7),\n isPressed: colorMix('gray-25', 'gray-900', 7),\n isSelected: {\n default: colorMix('gray-25', 'gray-900', 7),\n isFocusVisibleWithin: colorMix('gray-25', 'gray-900', 10),\n isHovered: colorMix('gray-25', 'gray-900', 10),\n isPressed: colorMix('gray-25', 'gray-900', 10)\n },\n forcedColors: {\n default: 'Background'\n }\n} as const;\n\nconst treeRow = style<TreeItemRenderProps & {isLink?: boolean; isPreviousSelected?: boolean}>({\n outlineStyle: {\n default: 'none',\n isDropTarget: 'solid'\n },\n outlineWidth: {\n isDropTarget: 2\n },\n outlineOffset: {\n isDropTarget: -2\n },\n outlineColor: {\n isDropTarget: 'blue-800',\n forcedColors: {\n isDropTarget: 'Highlight'\n }\n },\n position: 'relative',\n display: 'flex',\n height: 40,\n width: 'full',\n boxSizing: 'border-box',\n font: 'ui',\n color: {\n default: baseColor('neutral-subdued'),\n isSelected: baseColor('neutral'),\n forcedColors: 'ButtonText'\n },\n cursor: {\n default: 'default',\n isLink: 'pointer'\n },\n '--rowBackgroundColor': {\n type: 'backgroundColor',\n value: rowBackgroundColor\n },\n '--borderRadiusTreeItem': {\n type: 'borderTopStartRadius',\n value: 'sm'\n },\n borderRadius: 'sm'\n});\n\nconst treeCellGrid = style({\n display: 'grid',\n width: 'full',\n height: 'full',\n boxSizing: 'border-box',\n borderRadius: 'sm',\n alignContent: 'center',\n alignItems: 'center',\n // TODO: will have to update these to match design\n gridTemplateColumns: [\n 4,\n 'auto',\n 'auto',\n 'auto',\n 'auto',\n 'auto',\n '1fr',\n 'minmax(0, auto)',\n 'auto'\n ],\n gridTemplateRows: '1fr',\n gridTemplateAreas: [\n '. drag-handle checkbox level-padding expand-button icon content actions actionmenu'\n ],\n paddingEnd: 4, // account for any focus rings on the last item in the cell\n color: {\n isDisabled: {\n default: 'gray-400',\n forcedColors: 'GrayText'\n },\n forcedColors: 'ButtonText',\n selectionStyle: {\n highlight: {\n isSelected: {\n forcedColors: 'HighlightText'\n }\n }\n }\n },\n '--rowSelectedBorderColor': {\n type: 'outlineColor',\n value: {\n default: 'gray-800',\n isFocusVisible: 'focus-ring',\n forcedColors: 'Highlight'\n }\n },\n '--rowForcedFocusBorderColor': {\n type: 'outlineColor',\n value: {\n default: 'focus-ring',\n forcedColors: 'Highlight'\n }\n },\n '--borderColor': {\n type: 'borderColor',\n value: {\n default: 'transparent',\n selectionStyle: {\n highlight: 'blue-900'\n },\n forcedColors: 'ButtonBorder'\n }\n },\n forcedColorAdjust: 'none'\n});\n\nconst treeRowBackground = style({\n position: 'absolute',\n zIndex: -1,\n inset: 0,\n backgroundColor: {\n default: '--rowBackgroundColor',\n forcedColors: 'Background',\n selectionStyle: {\n highlight: {\n default: '--rowBackgroundColor',\n isSelected: {\n default: colorMix('gray-25', 'blue-900', 10),\n isHovered: colorMix('gray-25', 'blue-900', 15),\n isPressed: colorMix('gray-25', 'blue-900', 15),\n isFocusVisible: colorMix('gray-25', 'blue-900', 15),\n forcedColors: 'Highlight'\n }\n }\n },\n ':is([role=\"treegrid\"][data-drop-target] *)': rootRowDropStyles,\n isDropTarget: rowDropStyles\n },\n borderTopStartRadius: {\n default: '--borderRadiusTreeItem',\n isPreviousSelected: {\n default: '--borderRadiusTreeItem',\n isSelected: 'none'\n }\n },\n borderTopEndRadius: {\n default: '--borderRadiusTreeItem',\n isPreviousSelected: {\n default: '--borderRadiusTreeItem',\n isSelected: 'none'\n }\n },\n borderBottomStartRadius: {\n default: '--borderRadiusTreeItem',\n isNextSelected: {\n default: '--borderRadiusTreeItem',\n isSelected: 'none'\n }\n },\n borderBottomEndRadius: {\n default: '--borderRadiusTreeItem',\n isNextSelected: {\n default: '--borderRadiusTreeItem',\n isSelected: 'none'\n }\n },\n borderTopWidth: {\n default: 1,\n isPreviousSelected: 0\n },\n borderBottomWidth: {\n default: 1,\n isNextSelected: 0\n },\n borderStartWidth: 1,\n borderEndWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: 'transparent',\n isSelected: '--borderColor'\n }\n});\n\nconst treeCheckbox = style({\n gridArea: 'checkbox',\n marginStart: 8,\n marginEnd: 0,\n paddingEnd: 0,\n visibility: {\n default: 'visible',\n isDisabled: 'hidden'\n }\n});\n\nconst treeIcon = style({\n gridArea: 'icon',\n marginEnd: 'text-to-visual',\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n }\n});\n\nconst treeContent = style({\n gridArea: 'content',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden'\n});\n\nconst treeActions = style({\n gridArea: 'actions',\n /* TODO: I made this one up, confirm desired behavior. These paddings are to make sure the action group has enough padding for the focus ring */\n marginStart: 2,\n marginEnd: 4\n});\n\nconst treeActionMenu = style({\n gridArea: 'actionmenu'\n});\n\nconst treeDragButtonContainer = style({\n gridArea: 'drag-handle',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 10\n});\n\nlet treeRowFocusRing = style({\n ...focusRing(),\n outlineOffset: {\n default: -2,\n forcedColors: -3\n },\n outlineWidth: {\n default: 2,\n forcedColors: '[3px]'\n },\n outlineColor: {\n default: 'focus-ring',\n forcedColors: 'Highlight',\n selectionStyle: {\n highlight: {\n default: 'focus-ring',\n forcedColors: 'ButtonBorder'\n }\n }\n },\n position: 'absolute',\n inset: 0,\n top: {\n default: '[-1px]',\n isFirstItem: 0\n },\n bottom: {\n selectionStyle: {\n checkbox: 0,\n highlight: {\n default: 0,\n isNextSelected: '[-1px]',\n isSelected: {\n default: 0,\n isNextSelected: 0\n }\n }\n }\n },\n borderRadius: 'sm',\n zIndex: 1,\n pointerEvents: 'none'\n});\n\nexport const TreeViewItem = (props: TreeViewItemProps): ReactNode => {\n let {href} = props;\n\n return (\n <TreeItem\n {...props}\n className={renderProps =>\n treeRow({\n ...renderProps,\n isLink: !!href\n })\n }\n />\n );\n};\n\nexport interface TreeViewItemContentProps extends Omit<TreeItemContentProps, 'children'> {\n /** Rendered contents of the tree item or child items. */\n children: ReactNode;\n}\n\nexport const TreeViewItemContent = (props: TreeViewItemContentProps): ReactNode => {\n let {children} = props;\n let scale = useScale();\n\n let {selectionStyle} = useContext(InternalTreeViewContext);\n\n return (\n <TreeItemContent>\n {({\n isExpanded,\n hasChildItems,\n selectionMode,\n selectionBehavior,\n isDisabled,\n isSelected,\n id,\n state,\n isHovered,\n isFocusVisible,\n isFocusVisibleWithin,\n allowsDragging,\n isDropTarget\n }) => {\n return (\n <div\n className={treeCellGrid({\n isDisabled,\n isNextSelected: isNextSelected(id, state),\n isSelected,\n selectionStyle\n })}>\n <div\n className={treeRowBackground({\n isHovered,\n isFocusVisible,\n isSelected,\n selectionStyle,\n isNextSelected: isNextSelected(id, state),\n isPreviousSelected: isPrevSelected(id, state),\n isDropTarget\n })}\n />\n {isFocusVisible && (\n <div\n className={treeRowFocusRing({\n isFocusVisible,\n selectionStyle,\n isSelected,\n isNextSelected: isNextSelected(id, state),\n isFirstItem: isFirstItem(id, state)\n })}\n />\n )}\n {allowsDragging && (\n <div className={treeDragButtonContainer}>\n {!isDisabled && <DragHandleButton isFocusVisibleWithin={isFocusVisibleWithin} />}\n </div>\n )}\n {selectionMode !== 'none' &&\n selectionBehavior === 'toggle' &&\n selectionStyle !== 'highlight' && (\n // TODO: add transition?\n <div\n className={treeCheckbox({\n isDisabled:\n isDisabled ||\n !state.selectionManager.canSelectItem(id) ||\n state.disabledKeys.has(id)\n })}>\n <Checkbox slot=\"selection\" />\n </div>\n )}\n <div\n className={style({\n gridArea: 'level-padding',\n width: 'calc(calc(var(--tree-item-level, 0) - 1) * var(--indent))'\n })}\n />\n <ExpandableRowChevron\n isDisabled={isDisabled}\n isExpanded={isExpanded}\n scale={scale}\n isHidden={!hasChildItems}\n />\n <Provider\n values={[\n [TextContext, {styles: treeContent}],\n [\n IconContext,\n {\n render: centerBaseline({slot: 'icon', styles: treeIcon}),\n styles: style({size: fontRelative(20), flexShrink: 0})\n }\n ],\n [ActionButtonGroupContext, {styles: treeActions, isDisabled}],\n [ActionMenuContext, {styles: treeActionMenu, isQuiet: true, isDisabled}]\n ]}>\n {typeof children === 'string' ? <Text>{children}</Text> : children}\n </Provider>\n </div>\n );\n }}\n </TreeItemContent>\n );\n};\n\nconst centeredWrapper = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 'full',\n height: 'full'\n});\n\nexport const TreeViewLoadMoreItem = (props: TreeViewLoadMoreItemProps): ReactNode => {\n let {loadingState, onLoadMore} = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';\n return (\n <TreeLoadMoreItem\n isLoading={isLoading}\n onLoadMore={onLoadMore}\n className={style({width: 'full', marginY: 4})}>\n {() => {\n return (\n <div className={centeredWrapper}>\n <ProgressCircle\n isIndeterminate\n aria-label={stringFormatter.format('table.loadingMore')}\n />\n </div>\n );\n }}\n </TreeLoadMoreItem>\n );\n};\n\ninterface ExpandableRowChevronProps {\n isExpanded?: boolean;\n isDisabled?: boolean;\n isRTL?: boolean;\n scale: 'medium' | 'large';\n isHidden?: boolean;\n}\n\nconst expandButton = style<ExpandableRowChevronProps>({\n gridArea: 'expand-button',\n color: {\n default: 'inherit',\n isDisabled: {\n default: 'disabled',\n forcedColors: 'GrayText'\n }\n },\n height: 40,\n width: 40,\n display: 'flex',\n flexWrap: 'wrap',\n alignContent: 'center',\n justifyContent: 'center',\n outlineStyle: 'none',\n cursor: 'default',\n transform: {\n isExpanded: {\n default: 'rotate(90deg)',\n isRTL: 'rotate(-90deg)'\n }\n },\n padding: 0,\n transition: 'default',\n backgroundColor: 'transparent',\n borderStyle: 'none',\n disableTapHighlight: true,\n visibility: {\n isHidden: 'hidden'\n }\n});\n\nfunction ExpandableRowChevron(props: ExpandableRowChevronProps) {\n let expandButtonRef = useRef<HTMLButtonElement>(null);\n let [fullProps, ref] = useContextProps(\n {...props, slot: 'chevron'},\n expandButtonRef,\n ButtonContext\n );\n let {isExpanded, scale, isHidden} = fullProps;\n let {direction} = useLocale();\n\n return (\n <Button\n {...props}\n ref={ref}\n slot=\"chevron\"\n className={renderProps =>\n expandButton({...renderProps, isExpanded, isRTL: direction === 'rtl', scale, isHidden})\n }>\n <Chevron\n className={style({\n scale: {\n direction: {\n ltr: '1',\n rtl: '-1'\n }\n },\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n }\n })({direction})}\n />\n </Button>\n );\n}\n\nfunction isNextSelected(id: Key | undefined, state: TreeState<unknown>) {\n if (id == null || !state) {\n return false;\n }\n let keyAfter = state.collection.getKeyAfter(id);\n\n // We need to skip non-item nodes because the selection manager will map non-item nodes to their parent before checking selection\n let node = keyAfter != null ? state.collection.getItem(keyAfter) : null;\n while (node && node.type !== 'item' && keyAfter != null) {\n keyAfter = state.collection.getKeyAfter(keyAfter);\n node = keyAfter != null ? state.collection.getItem(keyAfter) : null;\n }\n\n return keyAfter != null && state.selectionManager.isSelected(keyAfter);\n}\n\nfunction isPrevSelected(id: Key | undefined, state: TreeState<unknown>) {\n if (id == null || !state) {\n return false;\n }\n let keyBefore = state.collection.getKeyBefore(id);\n return keyBefore != null && state.selectionManager.isSelected(keyBefore);\n}\n\nfunction isFirstItem(id: Key | undefined, state: TreeState<unknown>) {\n if (id == null || !state) {\n return false;\n }\n return state.collection.getFirstKey() === id;\n}\n"],"names":[],"version":3,"file":"TreeView.mjs.map"}
@@ -31,22 +31,22 @@ $parcel$export(module.exports, "DragHandleButton", () => $f1f08ef5de95f8eb$expor
31
31
 
32
32
  let $f1f08ef5de95f8eb$var$insertionIndicatorWrapper = function anonymous(props) {
33
33
  let rules = " ";
34
- rules += ' _Pa131';
35
- rules += ' Wr131';
36
- rules += ' _lr131';
37
- rules += ' _Ar131';
38
- rules += ' _zr131';
39
- rules += ' sd131';
40
- rules += ' eb131';
41
- if (props.isRoot) rules += ' Iy131';
42
- else rules += ' IyEbn5c131';
43
- if (props.isDropTarget) rules += ' poPoFpe131';
44
- else rules += ' pw131';
45
- if (props.isDropTarget) rules += ' pld131';
46
- if (props.isDropTarget) rules += ' -_3xYcJd-gX131';
47
- else rules += ' -_3xYcJd-g9131';
48
- if (props.isDropTarget) rules += ' -_3xYcJd-lga131';
49
- rules += ' _yb131';
34
+ rules += ' _Pa151';
35
+ rules += ' Wr151';
36
+ rules += ' _lr151';
37
+ rules += ' _Ar151';
38
+ rules += ' _zr151';
39
+ rules += ' sd151';
40
+ rules += ' eb151';
41
+ if (props.isRoot) rules += ' Iy151';
42
+ else rules += ' IyEbn5c151';
43
+ if (props.isDropTarget) rules += ' poPoFpe151';
44
+ else rules += ' pw151';
45
+ if (props.isDropTarget) rules += ' pld151';
46
+ if (props.isDropTarget) rules += ' -_3xYcJd-gX151';
47
+ else rules += ' -_3xYcJd-g9151';
48
+ if (props.isDropTarget) rules += ' -_3xYcJd-lga151';
49
+ rules += ' _yb151';
50
50
  return rules;
51
51
  };
52
52
  function $f1f08ef5de95f8eb$export$2c0bab5914a9d088({ target: target }) {
@@ -105,32 +105,32 @@ function $f1f08ef5de95f8eb$export$2c0bab5914a9d088({ target: target }) {
105
105
  }
106
106
  let $f1f08ef5de95f8eb$var$dragButton = function anonymous(props) {
107
107
  let rules = " ";
108
- rules += ' p40ub4c131';
109
- rules += ' sd131';
110
- rules += ' eb131';
111
- rules += ' _Ca131';
112
- rules += ' Fo131';
113
- rules += ' Zi131';
114
- rules += ' Td131';
115
- rules += ' Qd131';
116
- rules += ' Sd131';
117
- rules += ' Rd131';
118
- rules += ' Jy131';
119
- rules += ' Gy131';
120
- rules += ' Iy131';
121
- rules += ' Hy131';
122
- rules += ' g9131';
123
- rules += ' _je131';
124
- rules += ' oa131';
125
- rules += ' na131';
126
- rules += ' ka131';
127
- rules += ' ja131';
128
- if (props.isFocusVisible) rules += ' _Lf131';
129
- else rules += ' _Le131';
130
- rules += ' Oh131';
131
- rules += ' Olc131';
132
- rules += ' _Mc131';
133
- rules += ' -_8sjo0b-t5ZbAob131';
108
+ rules += ' p40ub4c151';
109
+ rules += ' sd151';
110
+ rules += ' eb151';
111
+ rules += ' _Ca151';
112
+ rules += ' Fo151';
113
+ rules += ' Zi151';
114
+ rules += ' Td151';
115
+ rules += ' Qd151';
116
+ rules += ' Sd151';
117
+ rules += ' Rd151';
118
+ rules += ' Jy151';
119
+ rules += ' Gy151';
120
+ rules += ' Iy151';
121
+ rules += ' Hy151';
122
+ rules += ' g9151';
123
+ rules += ' _je151';
124
+ rules += ' oa151';
125
+ rules += ' na151';
126
+ rules += ' ka151';
127
+ rules += ' ja151';
128
+ if (props.isFocusVisible) rules += ' _Lf151';
129
+ else rules += ' _Le151';
130
+ rules += ' Oh151';
131
+ rules += ' Olc151';
132
+ rules += ' _Mc151';
133
+ rules += ' -_8sjo0b-t5ZbAob151';
134
134
  return rules;
135
135
  };
136
136
  function $f1f08ef5de95f8eb$export$4c99a519d851f90c({ isFocusVisibleWithin: isFocusVisibleWithin }) {
@@ -1,145 +1,145 @@
1
1
  @layer _.a {
2
- ._Pa131 {
2
+ ._Pa151 {
3
3
  position: absolute;
4
4
  }
5
5
 
6
- .Wr131 {
6
+ .Wr151 {
7
7
  top: 0;
8
8
  }
9
9
 
10
- ._lr131 {
10
+ ._lr151 {
11
11
  bottom: 0;
12
12
  }
13
13
 
14
- ._Ar131 {
14
+ ._Ar151 {
15
15
  inset-inline-start: 0;
16
16
  }
17
17
 
18
- ._zr131 {
18
+ ._zr151 {
19
19
  inset-inline-end: 0;
20
20
  }
21
21
 
22
- .IyEbn5c131 {
22
+ .IyEbn5c151 {
23
23
  margin-inline-start: calc((var(--drop-level, 1) - 1) * var(--indent) + var(--indicator-level-padding));
24
24
  }
25
25
 
26
- .pw131 {
26
+ .pw151 {
27
27
  color: #0000;
28
28
  }
29
29
 
30
- .poPoFpe131 {
30
+ .poPoFpe151 {
31
31
  color: light-dark(#4b75ff, #4069fd);
32
32
  }
33
33
 
34
- .-_3xYcJd-g9131 {
34
+ .-_3xYcJd-g9151 {
35
35
  --indicator-circle-bg: transparent;
36
36
  }
37
37
 
38
- .-_3xYcJd-gX131 {
38
+ .-_3xYcJd-gX151 {
39
39
  --indicator-circle-bg: light-dark(#fff, #111);
40
40
  }
41
41
 
42
- ._yb131 {
42
+ ._yb151 {
43
43
  forced-color-adjust: none;
44
44
  }
45
45
 
46
- .p40ub4c131 {
46
+ .p40ub4c151 {
47
47
  color: inherit;
48
48
  }
49
49
 
50
- .sd131 {
50
+ .sd151 {
51
51
  display: flex;
52
52
  }
53
53
 
54
- .eb131 {
54
+ .eb151 {
55
55
  align-items: center;
56
56
  }
57
57
 
58
- ._Ca131 {
58
+ ._Ca151 {
59
59
  justify-content: center;
60
60
  }
61
61
 
62
- .Fo131 {
62
+ .Fo151 {
63
63
  height: calc(1.375rem * var(--s2-scale));
64
64
  }
65
65
 
66
- .Zi131 {
66
+ .Zi151 {
67
67
  width: calc(.625rem * var(--s2-scale));
68
68
  }
69
69
 
70
- .Td131 {
70
+ .Td151 {
71
71
  padding-top: 0;
72
72
  }
73
73
 
74
- .Qd131 {
74
+ .Qd151 {
75
75
  padding-bottom: 0;
76
76
  }
77
77
 
78
- .Sd131 {
78
+ .Sd151 {
79
79
  padding-inline-start: 0;
80
80
  }
81
81
 
82
- .Rd131 {
82
+ .Rd151 {
83
83
  padding-inline-end: 0;
84
84
  }
85
85
 
86
- .Jy131 {
86
+ .Jy151 {
87
87
  margin-top: 0;
88
88
  }
89
89
 
90
- .Gy131 {
90
+ .Gy151 {
91
91
  margin-bottom: 0;
92
92
  }
93
93
 
94
- .Iy131 {
94
+ .Iy151 {
95
95
  margin-inline-start: 0;
96
96
  }
97
97
 
98
- .Hy131 {
98
+ .Hy151 {
99
99
  margin-inline-end: 0;
100
100
  }
101
101
 
102
- .g9131 {
102
+ .g9151 {
103
103
  background-color: #0000;
104
104
  }
105
105
 
106
- ._je131 {
106
+ ._je151 {
107
107
  border-style: none;
108
108
  }
109
109
 
110
- .oa131 {
110
+ .oa151 {
111
111
  border-start-start-radius: .25rem;
112
112
  }
113
113
 
114
- .na131 {
114
+ .na151 {
115
115
  border-start-end-radius: .25rem;
116
116
  }
117
117
 
118
- .ka131 {
118
+ .ka151 {
119
119
  border-end-start-radius: .25rem;
120
120
  }
121
121
 
122
- .ja131 {
122
+ .ja151 {
123
123
  border-end-end-radius: .25rem;
124
124
  }
125
125
 
126
- ._Le131 {
126
+ ._Le151 {
127
127
  outline-style: none;
128
128
  }
129
129
 
130
- ._Lf131 {
130
+ ._Lf151 {
131
131
  outline-style: solid;
132
132
  }
133
133
 
134
- .Oh131 {
134
+ .Oh151 {
135
135
  outline-color: light-dark(#4b75ff, #4069fd);
136
136
  }
137
137
 
138
- ._Mc131 {
138
+ ._Mc151 {
139
139
  outline-width: 2px;
140
140
  }
141
141
 
142
- .-_8sjo0b-t5ZbAob131 {
142
+ .-_8sjo0b-t5ZbAob151 {
143
143
  --iconPrimary: currentColor;
144
144
  }
145
145
  }
@@ -148,15 +148,15 @@
148
148
 
149
149
  @layer _.b.l {
150
150
  @media (forced-colors: active) {
151
- .pld131 {
151
+ .pld151 {
152
152
  color: highlight;
153
153
  }
154
154
 
155
- .-_3xYcJd-lga131 {
155
+ .-_3xYcJd-lga151 {
156
156
  --indicator-circle-bg: Background;
157
157
  }
158
158
 
159
- .Olc131 {
159
+ .Olc151 {
160
160
  outline-color: highlight;
161
161
  }
162
162
  }
@@ -24,22 +24,22 @@ import {useVisuallyHidden as $7m476$useVisuallyHidden} from "react-aria/Visually
24
24
 
25
25
  let $3c1ab1fd8f31a3e2$var$insertionIndicatorWrapper = function anonymous(props) {
26
26
  let rules = " ";
27
- rules += ' _Pa131';
28
- rules += ' Wr131';
29
- rules += ' _lr131';
30
- rules += ' _Ar131';
31
- rules += ' _zr131';
32
- rules += ' sd131';
33
- rules += ' eb131';
34
- if (props.isRoot) rules += ' Iy131';
35
- else rules += ' IyEbn5c131';
36
- if (props.isDropTarget) rules += ' poPoFpe131';
37
- else rules += ' pw131';
38
- if (props.isDropTarget) rules += ' pld131';
39
- if (props.isDropTarget) rules += ' -_3xYcJd-gX131';
40
- else rules += ' -_3xYcJd-g9131';
41
- if (props.isDropTarget) rules += ' -_3xYcJd-lga131';
42
- rules += ' _yb131';
27
+ rules += ' _Pa151';
28
+ rules += ' Wr151';
29
+ rules += ' _lr151';
30
+ rules += ' _Ar151';
31
+ rules += ' _zr151';
32
+ rules += ' sd151';
33
+ rules += ' eb151';
34
+ if (props.isRoot) rules += ' Iy151';
35
+ else rules += ' IyEbn5c151';
36
+ if (props.isDropTarget) rules += ' poPoFpe151';
37
+ else rules += ' pw151';
38
+ if (props.isDropTarget) rules += ' pld151';
39
+ if (props.isDropTarget) rules += ' -_3xYcJd-gX151';
40
+ else rules += ' -_3xYcJd-g9151';
41
+ if (props.isDropTarget) rules += ' -_3xYcJd-lga151';
42
+ rules += ' _yb151';
43
43
  return rules;
44
44
  };
45
45
  function $3c1ab1fd8f31a3e2$export$2c0bab5914a9d088({ target: target }) {
@@ -98,32 +98,32 @@ function $3c1ab1fd8f31a3e2$export$2c0bab5914a9d088({ target: target }) {
98
98
  }
99
99
  let $3c1ab1fd8f31a3e2$var$dragButton = function anonymous(props) {
100
100
  let rules = " ";
101
- rules += ' p40ub4c131';
102
- rules += ' sd131';
103
- rules += ' eb131';
104
- rules += ' _Ca131';
105
- rules += ' Fo131';
106
- rules += ' Zi131';
107
- rules += ' Td131';
108
- rules += ' Qd131';
109
- rules += ' Sd131';
110
- rules += ' Rd131';
111
- rules += ' Jy131';
112
- rules += ' Gy131';
113
- rules += ' Iy131';
114
- rules += ' Hy131';
115
- rules += ' g9131';
116
- rules += ' _je131';
117
- rules += ' oa131';
118
- rules += ' na131';
119
- rules += ' ka131';
120
- rules += ' ja131';
121
- if (props.isFocusVisible) rules += ' _Lf131';
122
- else rules += ' _Le131';
123
- rules += ' Oh131';
124
- rules += ' Olc131';
125
- rules += ' _Mc131';
126
- rules += ' -_8sjo0b-t5ZbAob131';
101
+ rules += ' p40ub4c151';
102
+ rules += ' sd151';
103
+ rules += ' eb151';
104
+ rules += ' _Ca151';
105
+ rules += ' Fo151';
106
+ rules += ' Zi151';
107
+ rules += ' Td151';
108
+ rules += ' Qd151';
109
+ rules += ' Sd151';
110
+ rules += ' Rd151';
111
+ rules += ' Jy151';
112
+ rules += ' Gy151';
113
+ rules += ' Iy151';
114
+ rules += ' Hy151';
115
+ rules += ' g9151';
116
+ rules += ' _je151';
117
+ rules += ' oa151';
118
+ rules += ' na151';
119
+ rules += ' ka151';
120
+ rules += ' ja151';
121
+ if (props.isFocusVisible) rules += ' _Lf151';
122
+ else rules += ' _Le151';
123
+ rules += ' Oh151';
124
+ rules += ' Olc151';
125
+ rules += ' _Mc151';
126
+ rules += ' -_8sjo0b-t5ZbAob151';
127
127
  return rules;
128
128
  };
129
129
  function $3c1ab1fd8f31a3e2$export$4c99a519d851f90c({ isFocusVisibleWithin: isFocusVisibleWithin }) {
@@ -0,0 +1 @@
1
+ export { CenterBaseline } from '../src/CenterBaseline';
@@ -1,2 +1,2 @@
1
- export { Skeleton, useIsSkeleton } from '../src/Skeleton';
1
+ export { Skeleton, SkeletonContext, useIsSkeleton } from '../src/Skeleton';
2
2
  export type { SkeletonProps } from '../src/Skeleton';
@@ -78,6 +78,7 @@ export { Tooltip, TooltipTrigger } from '../src/Tooltip';
78
78
  export { TreeView, TreeViewItem, TreeViewItemContent, TreeViewLoadMoreItem } from '../src/TreeView';
79
79
  export { pressScale } from '../src/pressScale';
80
80
  export { mergeStyles } from '../style/runtime';
81
+ export { CenterBaseline } from '../src/CenterBaseline';
81
82
  export { Autocomplete } from 'react-aria-components/Autocomplete';
82
83
  export { Collection } from 'react-aria/Collection';
83
84
  export { FileTrigger } from 'react-aria-components/FileTrigger';
@@ -7,6 +7,23 @@ interface CenterBaselineProps extends DOMAttributes {
7
7
  children: ReactNode;
8
8
  slot?: string;
9
9
  }
10
+ /**
11
+ * Vertically centers its children against the surrounding text baseline.
12
+ * Use this to align icons or other inline elements with adjacent text without
13
+ * breaking baseline alignment.
14
+ *
15
+ * @example
16
+ * import {CenterBaseline} from '@react-spectrum/s2/CenterBaseline';
17
+ * import {style} from '@react-spectrum/s2/style' with {type: 'macro'};
18
+ * import CheckmarkIcon from '@react-spectrum/s2/icons/Checkmark';
19
+ *
20
+ * <span className={style({display: 'flex', gap: 4, alignItems: 'baseline'})}>
21
+ * <CenterBaseline>
22
+ * <CheckmarkIcon />
23
+ * </CenterBaseline>
24
+ * <span>Done</span>
25
+ * </span>;
26
+ */
10
27
  export declare function CenterBaseline(props: CenterBaselineProps): ReactNode;
11
28
  export declare const centerBaselineBefore: string;
12
29
  export declare function centerBaseline(props?: Omit<CenterBaselineProps, 'children'>): (icon: ReactNode) => ReactNode;
@@ -5,7 +5,7 @@ import { DialogTriggerProps } from './DialogTrigger';
5
5
  import { Placement } from 'react-aria-components/Popover';
6
6
  import { PopoverDialogProps } from './Popover';
7
7
  import { StyleProps } from './style-utils';
8
- export interface ContextualHelpPopoverProps extends PopoverDialogProps {
8
+ export interface ContextualHelpPopoverProps extends Omit<PopoverDialogProps, 'isNonModal'> {
9
9
  /**
10
10
  * The children of the contextual help popover. Supports Heading, Content, and Footer elements.
11
11
  */
@@ -1,7 +1,7 @@
1
1
  import { AriaLabelingProps, DOMProps, DOMRefValue, GlobalDOMAttributes } from '@react-types/shared';
2
2
  import { ContextValue } from 'react-aria-components/slots';
3
3
  import { DisclosurePanelProps as RACDisclosurePanelProps, DisclosureProps as RACDisclosureProps } from 'react-aria-components/Disclosure';
4
- import { StyleProps, UnsafeStyles } from './style-utils';
4
+ import { StyleProps, StylesPropWithFont, UnsafeStyles } from './style-utils';
5
5
  import React, { ReactNode } from 'react';
6
6
  export interface DisclosureProps extends Omit<RACDisclosureProps, 'className' | 'style' | 'render' | 'children' | keyof GlobalDOMAttributes>, StyleProps {
7
7
  /**
@@ -36,6 +36,11 @@ export interface DisclosureTitleProps extends UnsafeStyles, DOMProps {
36
36
  level?: number;
37
37
  /** The contents of the disclosure header. */
38
38
  children: React.ReactNode;
39
+ /**
40
+ * Spectrum-defined styles, returned by the `style()` macro. Only allows overriding
41
+ * `font`, `fontFamily`, `fontWeight`, `fontSize`, and `lineHeight`.
42
+ */
43
+ styles?: StylesPropWithFont;
39
44
  }
40
45
  interface DisclosureHeaderProps extends UnsafeStyles, DOMProps {
41
46
  children: React.ReactNode;
@@ -6,7 +6,7 @@ import { GridListItemProps, GridListProps } from 'react-aria-components/GridList
6
6
  import { Key } from '@react-types/shared';
7
7
  import { LayoutInfo } from 'react-aria-components/Virtualizer';
8
8
  import { ListLayout } from 'react-stately/useVirtualizerState';
9
- export interface ListViewProps<T> extends Omit<GridListProps<T>, 'className' | 'style' | 'children' | 'selectionBehavior' | 'layout' | 'render' | 'keyboardNavigationBehavior' | 'orientation' | keyof GlobalDOMAttributes>, DOMProps, UnsafeStyles, ListViewStylesProps, SlotProps {
9
+ export interface ListViewProps<T> extends Omit<GridListProps<T>, 'className' | 'style' | 'children' | 'selectionBehavior' | 'layout' | 'render' | 'orientation' | keyof GlobalDOMAttributes>, DOMProps, UnsafeStyles, ListViewStylesProps, SlotProps {
10
10
  /** Spectrum-defined styles, returned by the `style()` macro. */
11
11
  styles?: StylesPropWithHeight;
12
12
  /** The current loading state of the ListView. */
@@ -24,7 +24,7 @@ export interface MenuTriggerProps extends AriaMenuTriggerProps {
24
24
  */
25
25
  shouldFlip?: boolean;
26
26
  }
27
- export interface MenuProps<T> extends Omit<AriaMenuProps<T>, 'children' | 'style' | 'className' | 'render' | 'dependencies' | 'renderEmptyState' | keyof GlobalDOMAttributes>, StyleProps {
27
+ export interface MenuProps<T> extends Omit<AriaMenuProps<T>, 'children' | 'style' | 'className' | 'render' | 'renderEmptyState' | keyof GlobalDOMAttributes>, StyleProps {
28
28
  /**
29
29
  * The size of the Menu.
30
30
  *