@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,253 +1,253 @@
1
1
  @layer _.a {
2
- .oc131 {
2
+ .oc151 {
3
3
  border-start-start-radius: .625rem;
4
4
  }
5
5
 
6
- .nc131 {
6
+ .nc151 {
7
7
  border-start-end-radius: .625rem;
8
8
  }
9
9
 
10
- .kc131 {
10
+ .kc151 {
11
11
  border-end-start-radius: .625rem;
12
12
  }
13
13
 
14
- .jc131 {
14
+ .jc151 {
15
15
  border-end-end-radius: .625rem;
16
16
  }
17
17
 
18
- .-Ovbhqd-g_g131 {
18
+ .-Ovbhqd-g_g151 {
19
19
  --s2-container-bg: light-dark(#fff, #222);
20
20
  }
21
21
 
22
- .-Ovbhqd-g0131 {
22
+ .-Ovbhqd-g0151 {
23
23
  --s2-container-bg: light-dark(#292929, #dbdbdb);
24
24
  }
25
25
 
26
- .gEzkoQe131 {
26
+ .gEzkoQe151 {
27
27
  background-color: var(--s2-container-bg);
28
28
  }
29
29
 
30
- ._nLeasBb131 {
30
+ ._nLeasBb151 {
31
31
  box-shadow: 0 4px 12px light-dark(#00000014, #0000003d), 0 2px 6px light-dark(#0000000a, #0000001f), 0 0 2px light-dark(#0000001f, #0000005c);
32
32
  }
33
33
 
34
- ._oa131 {
34
+ ._oa151 {
35
35
  box-sizing: border-box;
36
36
  }
37
37
 
38
- ._Lf131 {
38
+ ._Lf151 {
39
39
  outline-style: solid;
40
40
  }
41
41
 
42
- ._Mb131 {
42
+ ._Mb151 {
43
43
  outline-width: 1px;
44
44
  }
45
45
 
46
- .Oye39g131 {
46
+ .Oye39g151 {
47
47
  outline-color: light-dark(#fff0, #323232);
48
48
  }
49
49
 
50
- .Oj131 {
50
+ .Oj151 {
51
51
  outline-color: #0000;
52
52
  }
53
53
 
54
- .St131 {
54
+ .St151 {
55
55
  padding-inline-start: 8px;
56
56
  }
57
57
 
58
- .Rt131 {
58
+ .Rt151 {
59
59
  padding-inline-end: 8px;
60
60
  }
61
61
 
62
- .Te131 {
62
+ .Te151 {
63
63
  padding-top: 12px;
64
64
  }
65
65
 
66
- .Qe131 {
66
+ .Qe151 {
67
67
  padding-bottom: 12px;
68
68
  }
69
69
 
70
- .Ul131 {
70
+ .Ul151 {
71
71
  row-gap: 1rem;
72
72
  }
73
73
 
74
- .ql131 {
74
+ .ql151 {
75
75
  column-gap: 1rem;
76
76
  }
77
77
 
78
- ._Pa131 {
78
+ ._Pa151 {
79
79
  position: absolute;
80
80
  }
81
81
 
82
- ._lr131 {
82
+ ._lr151 {
83
83
  bottom: 0;
84
84
  }
85
85
 
86
- ._AI131 {
86
+ ._AI151 {
87
87
  inset-inline-start: 8px;
88
88
  }
89
89
 
90
- .-F3Iohc-_zI131 {
90
+ .-F3Iohc-_zI151 {
91
91
  --insetEnd: 8px;
92
92
  }
93
93
 
94
- .Za131 {
94
+ .Za151 {
95
95
  width: 100%;
96
96
  }
97
97
 
98
- .Zd131 {
98
+ .Zd151 {
99
99
  width: auto;
100
100
  }
101
101
 
102
- .HM131 {
102
+ .HM151 {
103
103
  margin-inline-end: auto;
104
104
  }
105
105
 
106
- .Ll131 {
106
+ .Ll151 {
107
107
  max-width: calc(60rem * var(--s2-scale));
108
108
  }
109
109
 
110
- .Yg131 {
110
+ .Yg151 {
111
111
  transition-property: transform, translate, scale, rotate;
112
112
  }
113
113
 
114
- .Xc131 {
114
+ .Xc151 {
115
115
  transition-duration: .2s;
116
116
  }
117
117
 
118
- ._2b131 {
118
+ ._2b151 {
119
119
  transition-timing-function: cubic-bezier(.45, 0, .4, 1);
120
120
  }
121
121
 
122
- .-_8PloMd-q131 {
122
+ .-_8PloMd-q151 {
123
123
  --translateY: -8px;
124
124
  }
125
125
 
126
- .-_8PloMd-t131 {
126
+ .-_8PloMd-t151 {
127
127
  --translateY: 100%;
128
128
  }
129
129
 
130
- .__Ya131 {
130
+ .__Ya151 {
131
131
  translate: var(--translateX, 0) var(--translateY, 0);
132
132
  }
133
133
 
134
- ._Jb131 {
134
+ ._Jb151 {
135
135
  order: 1;
136
136
  }
137
137
 
138
- .IM131 {
138
+ .IM151 {
139
139
  margin-inline-start: auto;
140
140
  }
141
141
 
142
- ._Ja131 {
142
+ ._Ja151 {
143
143
  order: 0;
144
144
  }
145
145
 
146
- .sd131 {
146
+ .sd151 {
147
147
  display: flex;
148
148
  }
149
149
 
150
- .eb131 {
150
+ .eb151 {
151
151
  align-items: center;
152
152
  }
153
153
 
154
- .Ub131 {
154
+ .Ub151 {
155
155
  row-gap: .25rem;
156
156
  }
157
157
 
158
- .qb131 {
158
+ .qb151 {
159
159
  column-gap: .25rem;
160
160
  }
161
161
 
162
- .uk131 {
162
+ .uk151 {
163
163
  font-family: var(--s2-font-family-sans, adobe-clean-spectrum-vf), adobe-clean-variable, adobe-clean, ui-sans-serif, system-ui, sans-serif;
164
164
  }
165
165
 
166
- .-_6BNtrc-c131 {
166
+ .-_6BNtrc-c151 {
167
167
  --fs: pow(1.125, 0);
168
168
  }
169
169
 
170
- .vx131 {
170
+ .vx151 {
171
171
  font-size: round(var(--s2-font-size-base, 14) * var(--fs) / 16 * 1rem, 1px);
172
172
  }
173
173
 
174
- .xb131 {
174
+ .xb151 {
175
175
  font-weight: 400;
176
176
  }
177
177
 
178
- ._xa131 {
178
+ ._xa151 {
179
179
  font-synthesis-weight: none;
180
180
  }
181
181
 
182
- ._Fd131 {
182
+ ._Fd151 {
183
183
  line-height: round(1em * (1.15 + (1 - ((min(32, var(--s2-font-size-base, 14) * var(--fs)) - 10)) / 22) * .15), 2px);
184
184
  }
185
185
 
186
- .pt131 {
186
+ .pt151 {
187
187
  color: light-dark(#292929, #dbdbdb);
188
188
  }
189
189
 
190
- .pr131 {
190
+ .pr151 {
191
191
  color: light-dark(#fff, #111);
192
192
  }
193
193
  }
194
194
 
195
195
  @layer _.b {
196
- .ucJ9TBTb131:lang(ar) {
196
+ .ucJ9TBTb151:lang(ar) {
197
197
  font-family: adobe-clean-arabic, myriad-arabic, ui-sans-serif, system-ui, sans-serif;
198
198
  }
199
199
 
200
- ._FnuYUweb131:is(:lang(ja), :lang(ko), :lang(zh), :lang(zh-Hant), :lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
200
+ ._FnuYUweb151:is(:lang(ja), :lang(ko), :lang(zh), :lang(zh-Hant), :lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
201
201
  line-height: 1.5;
202
202
  }
203
203
  }
204
204
 
205
205
  @layer _.b.l {
206
206
  @media (forced-colors: active) {
207
- .Ola131 {
207
+ .Ola151 {
208
208
  outline-color: buttonborder;
209
209
  }
210
210
  }
211
211
  }
212
212
 
213
213
  @layer _.c {
214
- .ud3Euai131:lang(he) {
214
+ .ud3Euai151:lang(he) {
215
215
  font-family: adobe-clean-hebrew, myriad-hebrew, ui-sans-serif, system-ui, sans-serif;
216
216
  }
217
217
  }
218
218
 
219
219
  @layer _.d {
220
- .uea131:lang(ja) {
220
+ .uea151:lang(ja) {
221
221
  font-family: adobe-clean-han-japanese, Hiragino Kaku Gothic ProN, ヒラギノ角ゴ ProN W3, Osaka, YuGothic, Yu Gothic, メイリオ, Meiryo, MS Pゴシック, MS PGothic, sans-serif;
222
222
  }
223
223
  }
224
224
 
225
225
  @layer _.e {
226
- .ugb131:lang(ko) {
226
+ .ugb151:lang(ko) {
227
227
  font-family: adobe-clean-han-korean, source-han-korean, Malgun Gothic, Apple Gothic, sans-serif;
228
228
  }
229
229
  }
230
230
 
231
231
  @layer _.f {
232
- .uhd131:lang(zh) {
232
+ .uhd151:lang(zh) {
233
233
  font-family: adobe-clean-han-traditional, source-han-traditional, MingLiu, Heiti TC Light, sans-serif;
234
234
  }
235
235
  }
236
236
 
237
237
  @layer _.g {
238
- .uje131:lang(zh-hant) {
238
+ .uje151:lang(zh-hant) {
239
239
  font-family: adobe-clean-han-traditional, source-han-traditional, MingLiu, Microsoft JhengHei UI, Microsoft JhengHei, Heiti TC Light, sans-serif;
240
240
  }
241
241
  }
242
242
 
243
243
  @layer _.h {
244
- .u2NhKxcl131:lang(zh-HK) {
244
+ .u2NhKxcl151:lang(zh-HK) {
245
245
  font-family: adobe-clean-han-hong-kong, source-han-hong-kong, MingLiu, Microsoft JhengHei UI, Microsoft JhengHei, Heiti TC Light, sans-serif;
246
246
  }
247
247
  }
248
248
 
249
249
  @layer _.i {
250
- .uic131:is(:lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
250
+ .uic151:is(:lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
251
251
  font-family: adobe-clean-han-simplified-c, source-han-simplified-c, SimSun, Heiti SC Light, sans-serif;
252
252
  }
253
253
  }
@@ -1 +1 @@
1
- {"mappings":"AC4CwB;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAkKA;;;;EAAA;;;;EAQA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAOD;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AAjLC;EAiLD;;;;EAAA;;;;;AAjLC;EAAA;IAAA;;;;;;AAiLD;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA","sources":["a1b352514784d267","packages/@react-spectrum/s2/src/ActionBar.tsx"],"sourcesContent":["@import \"ae871d7b3899fe46\";\n@import \"b12d7526a8920c7d\";\n@import \"ac539ec7d1ef9296\";\n@import \"e8e91cecf3846843\";\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 {ActionButtonGroup} from './ActionButtonGroup';\nimport {announce} from 'react-aria/private/live-announcer/LiveAnnouncer';\nimport {CloseButton} from './CloseButton';\nimport {ContextValue, SlotProps} from 'react-aria-components/slots';\nimport {\n createContext,\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {DOMProps, DOMRef, DOMRefValue, Key} from '@react-types/shared';\nimport {FocusScope} from 'react-aria/FocusScope';\nimport intlMessages from '../intl/*.json';\n// @ts-ignore\nimport {lightDark, style} from '../style' with {type: 'macro'};\nimport {StyleProps} from './style-utils' with {type: 'macro'};\nimport {useControlledState} from 'react-stately/useControlledState';\nimport {useDOMRef} from './useDOMRef';\nimport {useEnterAnimation, useExitAnimation} from 'react-aria/private/utils/animation';\nimport {useKeyboard} from 'react-aria/useKeyboard';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useObjectRef} from 'react-aria/useObjectRef';\nimport {useResizeObserver} from 'react-aria/private/utils/useResizeObserver';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\nconst actionBarStyles = style({\n borderRadius: 'lg',\n '--s2-container-bg': {\n type: 'backgroundColor',\n value: {\n default: 'elevated',\n isEmphasized: 'neutral'\n }\n },\n backgroundColor: '--s2-container-bg',\n boxShadow: 'elevated',\n boxSizing: 'border-box',\n outlineStyle: 'solid',\n outlineWidth: 1,\n outlineColor: {\n default: lightDark('transparent-white-25', 'gray-200'),\n isEmphasized: 'transparent',\n forcedColors: 'ButtonBorder'\n },\n paddingX: 8,\n paddingY: 12,\n display: 'flex',\n gap: 16,\n alignItems: 'center',\n position: {\n isInContainer: 'absolute'\n },\n bottom: 0,\n insetStart: 8,\n '--insetEnd': {\n type: 'insetEnd',\n value: 8\n },\n width: {\n default: 'full',\n isInContainer: 'auto'\n },\n marginX: 'auto',\n maxWidth: 960,\n transition: 'transform',\n transitionDuration: 200,\n translateY: {\n default: -8,\n isEntering: 'full',\n isExiting: 'full'\n }\n});\n\nexport interface ActionBarProps extends SlotProps, StyleProps, DOMProps {\n /** A list of ActionButtons to display. */\n children: ReactNode;\n /** Whether the ActionBar should be displayed with a emphasized style. */\n isEmphasized?: boolean;\n /**\n * The number of selected items that the ActionBar is currently linked to. If 0, the ActionBar is\n * hidden.\n */\n selectedItemCount?: number | 'all';\n /** Handler that is called when the ActionBar clear button is pressed. */\n onClearSelection?: () => void;\n /** A ref to the scrollable element the ActionBar appears above. */\n scrollRef?: RefObject<HTMLElement | null>;\n}\n\nexport const ActionBarContext =\n createContext<ContextValue<Partial<ActionBarProps>, DOMRefValue<HTMLDivElement>>>(null);\n\n/**\n * Action bars are used for single and bulk selection patterns when a user needs to perform actions\n * on one or more items at the same time.\n */\nexport const ActionBar = forwardRef(function ActionBar(\n props: ActionBarProps,\n ref: DOMRef<HTMLDivElement>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, ActionBarContext);\n let domRef = useDOMRef(ref);\n\n let isOpen = props.selectedItemCount !== 0;\n let isExiting = useExitAnimation(domRef, isOpen && props.scrollRef != null);\n if (!isOpen && !isExiting) {\n return null;\n }\n\n return <ActionBarInner {...props} ref={domRef} isExiting={isExiting} />;\n});\n\nconst ActionBarInner = forwardRef(function ActionBarInner(\n props: ActionBarProps & {isExiting: boolean},\n ref: ForwardedRef<HTMLDivElement | null>\n) {\n let {\n isEmphasized,\n selectedItemCount = 0,\n children,\n onClearSelection,\n isExiting,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n slot,\n scrollRef,\n ...otherProps\n } = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n\n // Store the last count greater than zero so that we can retain it while rendering the fade-out animation.\n let [lastCount, setLastCount] = useState(selectedItemCount);\n if ((selectedItemCount === 'all' || selectedItemCount > 0) && selectedItemCount !== lastCount) {\n setLastCount(selectedItemCount);\n }\n\n // Measure the width of the collection's scrollbar and offset the action bar by that amount.\n let [scrollbarWidth, setScrollbarWidth] = useState(0);\n let updateScrollbarWidth = useCallback(() => {\n let el = scrollRef?.current;\n if (el) {\n let w = el.offsetWidth - el.clientWidth;\n setScrollbarWidth(w);\n }\n }, [scrollRef]);\n\n useResizeObserver({\n ref: scrollRef,\n onResize: updateScrollbarWidth\n });\n\n let {keyboardProps} = useKeyboard({\n onKeyDown(e) {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClearSelection?.();\n } else {\n e.continuePropagation();\n }\n }\n });\n\n // Announce \"actions available\" on mount.\n let isInitial = useRef(true);\n useEffect(() => {\n if (isInitial.current && scrollRef) {\n isInitial.current = false;\n announce(stringFormatter.format('actionbar.actionsAvailable'));\n }\n }, [stringFormatter, scrollRef]);\n\n let objectRef = useObjectRef(ref);\n let isEntering = useEnterAnimation(objectRef, !!scrollRef);\n\n return (\n <FocusScope restoreFocus>\n <div\n ref={objectRef}\n {...otherProps}\n {...keyboardProps}\n className={\n (props.UNSAFE_className || '') +\n actionBarStyles({isEmphasized, isInContainer: !!scrollRef, isEntering, isExiting})\n }\n style={{\n insetInlineEnd: `calc(var(--insetEnd) + ${scrollbarWidth}px)`,\n ...props.UNSAFE_style\n }}>\n <div className={style({order: 1, marginStart: 'auto'})}>\n <ActionButtonGroup\n staticColor={isEmphasized ? 'auto' : undefined}\n isQuiet\n aria-label={stringFormatter.format('actionbar.actions')}>\n {children}\n </ActionButtonGroup>\n </div>\n <div className={style({order: 0, display: 'flex', alignItems: 'center', gap: 4})}>\n <CloseButton\n staticColor={isEmphasized ? 'auto' : undefined}\n aria-label={stringFormatter.format('actionbar.clearSelection')}\n onPress={() => onClearSelection?.()}\n />\n <span\n className={style({font: 'ui', color: {default: 'neutral', isEmphasized: 'gray-25'}})({\n isEmphasized\n })}>\n {lastCount === 'all'\n ? stringFormatter.format('actionbar.selectedAll')\n : stringFormatter.format('actionbar.selected', {count: lastCount})}\n </span>\n </div>\n </div>\n </FocusScope>\n );\n});\n\ninterface ActionBarContainerHookProps {\n selectedKeys?: 'all' | Iterable<Key>;\n defaultSelectedKeys?: 'all' | Iterable<Key>;\n onSelectionChange?: (keys: Set<Key>) => void;\n renderActionBar?: (selectedKeys: 'all' | Set<Key>) => ReactElement;\n scrollRef?: RefObject<HTMLElement | null>;\n}\n\ninterface ActionBarContainerHookResult {\n selectedKeys: 'all' | Iterable<Key>;\n onSelectionChange: (keys: 'all' | Iterable<Key>) => void;\n actionBar: ReactElement;\n actionBarHeight: number;\n}\n\nexport function useActionBarContainer(\n props: ActionBarContainerHookProps\n): ActionBarContainerHookResult {\n let {renderActionBar, scrollRef} = props;\n let [selectedKeys, setSelectedKeys] = useControlledState(\n props.selectedKeys,\n props.defaultSelectedKeys || new Set(),\n props.onSelectionChange\n );\n let selectedKeysSet = useMemo(\n () => (selectedKeys === 'all' ? (selectedKeys as 'all') : new Set(selectedKeys)),\n [selectedKeys]\n );\n let actionBar = useMemo(\n () => renderActionBar?.(selectedKeysSet),\n [renderActionBar, selectedKeysSet]\n );\n let selectedItemCount = selectedKeysSet === 'all' ? ('all' as const) : selectedKeysSet.size;\n let [actionBarHeight, setActionBarHeight] = useState(0);\n let actionBarRef = useCallback((ref: DOMRefValue | null) => {\n let actionBar = ref?.UNSAFE_getDOMNode();\n if (actionBar) {\n setActionBarHeight(actionBar.offsetHeight + 8);\n } else {\n setActionBarHeight(0);\n }\n }, []);\n\n let actionBarContext = useMemo(\n () => ({\n ref: actionBarRef,\n scrollRef,\n selectedItemCount,\n onClearSelection: () => setSelectedKeys(new Set())\n }),\n [scrollRef, actionBarRef, selectedItemCount, setSelectedKeys]\n );\n\n let wrappedActionBar = useMemo(\n () => (\n <ActionBarContext.Provider value={actionBarContext}>{actionBar}</ActionBarContext.Provider>\n ),\n [actionBarContext, actionBar]\n );\n\n return {\n selectedKeys,\n onSelectionChange: setSelectedKeys,\n actionBar: wrappedActionBar,\n actionBarHeight\n };\n}\n"],"names":[],"version":3,"file":"ActionBar.css.map"}
1
+ {"mappings":"AC2CwB;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAkKA;;;;EAAA;;;;EAQA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAOD;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AAjLC;EAiLD;;;;EAAA;;;;;AAjLC;EAAA;IAAA;;;;;;AAiLD;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA","sources":["a1b352514784d267","packages/@react-spectrum/s2/src/ActionBar.tsx"],"sourcesContent":["@import \"ae871d7b3899fe46\";\n@import \"b12d7526a8920c7d\";\n@import \"ac539ec7d1ef9296\";\n@import \"e8e91cecf3846843\";\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 {ActionButtonGroup} from './ActionButtonGroup';\nimport {announce} from 'react-aria/private/live-announcer/LiveAnnouncer';\nimport {CloseButton} from './CloseButton';\nimport {ContextValue, SlotProps} from 'react-aria-components/slots';\nimport {\n createContext,\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {DOMProps, DOMRef, DOMRefValue, Key} from '@react-types/shared';\nimport {FocusScope} from 'react-aria/FocusScope';\nimport intlMessages from '../intl/*.json';\nimport {lightDark, style} from '../style' with {type: 'macro'};\nimport {StyleProps} from './style-utils' with {type: 'macro'};\nimport {useControlledState} from 'react-stately/useControlledState';\nimport {useDOMRef} from './useDOMRef';\nimport {useEnterAnimation, useExitAnimation} from 'react-aria/private/utils/animation';\nimport {useKeyboard} from 'react-aria/useKeyboard';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useObjectRef} from 'react-aria/useObjectRef';\nimport {useResizeObserver} from 'react-aria/private/utils/useResizeObserver';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\nconst actionBarStyles = style({\n borderRadius: 'lg',\n '--s2-container-bg': {\n type: 'backgroundColor',\n value: {\n default: 'elevated',\n isEmphasized: 'neutral'\n }\n },\n backgroundColor: '--s2-container-bg',\n boxShadow: 'elevated',\n boxSizing: 'border-box',\n outlineStyle: 'solid',\n outlineWidth: 1,\n outlineColor: {\n default: lightDark('transparent-white-25', 'gray-200'),\n isEmphasized: 'transparent',\n forcedColors: 'ButtonBorder'\n },\n paddingX: 8,\n paddingY: 12,\n display: 'flex',\n gap: 16,\n alignItems: 'center',\n position: {\n isInContainer: 'absolute'\n },\n bottom: 0,\n insetStart: 8,\n '--insetEnd': {\n type: 'insetEnd',\n value: 8\n },\n width: {\n default: 'full',\n isInContainer: 'auto'\n },\n marginX: 'auto',\n maxWidth: 960,\n transition: 'transform',\n transitionDuration: 200,\n translateY: {\n default: -8,\n isEntering: 'full',\n isExiting: 'full'\n }\n});\n\nexport interface ActionBarProps extends SlotProps, StyleProps, DOMProps {\n /** A list of ActionButtons to display. */\n children: ReactNode;\n /** Whether the ActionBar should be displayed with a emphasized style. */\n isEmphasized?: boolean;\n /**\n * The number of selected items that the ActionBar is currently linked to. If 0, the ActionBar is\n * hidden.\n */\n selectedItemCount?: number | 'all';\n /** Handler that is called when the ActionBar clear button is pressed. */\n onClearSelection?: () => void;\n /** A ref to the scrollable element the ActionBar appears above. */\n scrollRef?: RefObject<HTMLElement | null>;\n}\n\nexport const ActionBarContext =\n createContext<ContextValue<Partial<ActionBarProps>, DOMRefValue<HTMLDivElement>>>(null);\n\n/**\n * Action bars are used for single and bulk selection patterns when a user needs to perform actions\n * on one or more items at the same time.\n */\nexport const ActionBar = forwardRef(function ActionBar(\n props: ActionBarProps,\n ref: DOMRef<HTMLDivElement>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, ActionBarContext);\n let domRef = useDOMRef(ref);\n\n let isOpen = props.selectedItemCount !== 0;\n let isExiting = useExitAnimation(domRef, isOpen && props.scrollRef != null);\n if (!isOpen && !isExiting) {\n return null;\n }\n\n return <ActionBarInner {...props} ref={domRef} isExiting={isExiting} />;\n});\n\nconst ActionBarInner = forwardRef(function ActionBarInner(\n props: ActionBarProps & {isExiting: boolean},\n ref: ForwardedRef<HTMLDivElement | null>\n) {\n let {\n isEmphasized,\n selectedItemCount = 0,\n children,\n onClearSelection,\n isExiting,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n slot,\n scrollRef,\n ...otherProps\n } = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n\n // Store the last count greater than zero so that we can retain it while rendering the fade-out animation.\n let [lastCount, setLastCount] = useState(selectedItemCount);\n if ((selectedItemCount === 'all' || selectedItemCount > 0) && selectedItemCount !== lastCount) {\n setLastCount(selectedItemCount);\n }\n\n // Measure the width of the collection's scrollbar and offset the action bar by that amount.\n let [scrollbarWidth, setScrollbarWidth] = useState(0);\n let updateScrollbarWidth = useCallback(() => {\n let el = scrollRef?.current;\n if (el) {\n let w = el.offsetWidth - el.clientWidth;\n setScrollbarWidth(w);\n }\n }, [scrollRef]);\n\n useResizeObserver({\n ref: scrollRef,\n onResize: updateScrollbarWidth\n });\n\n let {keyboardProps} = useKeyboard({\n onKeyDown(e) {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClearSelection?.();\n } else {\n e.continuePropagation();\n }\n }\n });\n\n // Announce \"actions available\" on mount.\n let isInitial = useRef(true);\n useEffect(() => {\n if (isInitial.current && scrollRef) {\n isInitial.current = false;\n announce(stringFormatter.format('actionbar.actionsAvailable'));\n }\n }, [stringFormatter, scrollRef]);\n\n let objectRef = useObjectRef(ref);\n let isEntering = useEnterAnimation(objectRef, !!scrollRef);\n\n return (\n <FocusScope restoreFocus>\n <div\n ref={objectRef}\n {...otherProps}\n {...keyboardProps}\n className={\n (props.UNSAFE_className || '') +\n actionBarStyles({isEmphasized, isInContainer: !!scrollRef, isEntering, isExiting})\n }\n style={{\n insetInlineEnd: `calc(var(--insetEnd) + ${scrollbarWidth}px)`,\n ...props.UNSAFE_style\n }}>\n <div className={style({order: 1, marginStart: 'auto'})}>\n <ActionButtonGroup\n staticColor={isEmphasized ? 'auto' : undefined}\n isQuiet\n aria-label={stringFormatter.format('actionbar.actions')}>\n {children}\n </ActionButtonGroup>\n </div>\n <div className={style({order: 0, display: 'flex', alignItems: 'center', gap: 4})}>\n <CloseButton\n staticColor={isEmphasized ? 'auto' : undefined}\n aria-label={stringFormatter.format('actionbar.clearSelection')}\n onPress={() => onClearSelection?.()}\n />\n <span\n className={style({font: 'ui', color: {default: 'neutral', isEmphasized: 'gray-25'}})({\n isEmphasized\n })}>\n {lastCount === 'all'\n ? stringFormatter.format('actionbar.selectedAll')\n : stringFormatter.format('actionbar.selected', {count: lastCount})}\n </span>\n </div>\n </div>\n </FocusScope>\n );\n});\n\ninterface ActionBarContainerHookProps {\n selectedKeys?: 'all' | Iterable<Key>;\n defaultSelectedKeys?: 'all' | Iterable<Key>;\n onSelectionChange?: (keys: Set<Key>) => void;\n renderActionBar?: (selectedKeys: 'all' | Set<Key>) => ReactElement;\n scrollRef?: RefObject<HTMLElement | null>;\n}\n\ninterface ActionBarContainerHookResult {\n selectedKeys: 'all' | Iterable<Key>;\n onSelectionChange: (keys: 'all' | Iterable<Key>) => void;\n actionBar: ReactElement;\n actionBarHeight: number;\n}\n\nexport function useActionBarContainer(\n props: ActionBarContainerHookProps\n): ActionBarContainerHookResult {\n let {renderActionBar, scrollRef} = props;\n let [selectedKeys, setSelectedKeys] = useControlledState(\n props.selectedKeys,\n props.defaultSelectedKeys || new Set(),\n props.onSelectionChange\n );\n let selectedKeysSet = useMemo(\n () => (selectedKeys === 'all' ? (selectedKeys as 'all') : new Set(selectedKeys)),\n [selectedKeys]\n );\n let actionBar = useMemo(\n () => renderActionBar?.(selectedKeysSet),\n [renderActionBar, selectedKeysSet]\n );\n let selectedItemCount = selectedKeysSet === 'all' ? ('all' as const) : selectedKeysSet.size;\n let [actionBarHeight, setActionBarHeight] = useState(0);\n let actionBarRef = useCallback((ref: DOMRefValue | null) => {\n let actionBar = ref?.UNSAFE_getDOMNode();\n if (actionBar) {\n setActionBarHeight(actionBar.offsetHeight + 8);\n } else {\n setActionBarHeight(0);\n }\n }, []);\n\n let actionBarContext = useMemo(\n () => ({\n ref: actionBarRef,\n scrollRef,\n selectedItemCount,\n onClearSelection: () => setSelectedKeys(new Set())\n }),\n [scrollRef, actionBarRef, selectedItemCount, setSelectedKeys]\n );\n\n let wrappedActionBar = useMemo(\n () => (\n <ActionBarContext.Provider value={actionBarContext}>{actionBar}</ActionBarContext.Provider>\n ),\n [actionBarContext, actionBar]\n );\n\n return {\n selectedKeys,\n onSelectionChange: setSelectedKeys,\n actionBar: wrappedActionBar,\n actionBarHeight\n };\n}\n"],"names":[],"version":3,"file":"ActionBar.css.map"}
@@ -46,49 +46,49 @@ function $parcel$interopDefault(a) {
46
46
 
47
47
  const $f21f2186348fbc5b$var$actionBarStyles = function anonymous(props) {
48
48
  let rules = " ";
49
- rules += ' oc131';
50
- rules += ' nc131';
51
- rules += ' kc131';
52
- rules += ' jc131';
53
- if (props.isEmphasized) rules += ' -Ovbhqd-g0131';
54
- else rules += ' -Ovbhqd-g_g131';
55
- rules += ' gEzkoQe131';
56
- rules += ' _nLeasBb131';
57
- rules += ' _oa131';
58
- rules += ' _Lf131';
59
- rules += ' _Mb131';
60
- if (props.isEmphasized) rules += ' Oj131';
61
- else rules += ' Oye39g131';
62
- rules += ' Ola131';
63
- rules += ' St131';
64
- rules += ' Rt131';
65
- rules += ' Te131';
66
- rules += ' Qe131';
67
- rules += ' sd131';
68
- rules += ' Ul131';
69
- rules += ' ql131';
70
- rules += ' eb131';
71
- if (props.isInContainer) rules += ' _Pa131';
72
- rules += ' _lr131';
73
- rules += ' _AI131';
74
- rules += ' -F3Iohc-_zI131';
75
- if (props.isInContainer) rules += ' Zd131';
76
- else rules += ' Za131';
77
- rules += ' IM131';
78
- rules += ' HM131';
79
- rules += ' Ll131';
80
- rules += ' Yg131';
81
- rules += ' Xc131';
82
- rules += ' _2b131';
49
+ rules += ' oc151';
50
+ rules += ' nc151';
51
+ rules += ' kc151';
52
+ rules += ' jc151';
53
+ if (props.isEmphasized) rules += ' -Ovbhqd-g0151';
54
+ else rules += ' -Ovbhqd-g_g151';
55
+ rules += ' gEzkoQe151';
56
+ rules += ' _nLeasBb151';
57
+ rules += ' _oa151';
58
+ rules += ' _Lf151';
59
+ rules += ' _Mb151';
60
+ if (props.isEmphasized) rules += ' Oj151';
61
+ else rules += ' Oye39g151';
62
+ rules += ' Ola151';
63
+ rules += ' St151';
64
+ rules += ' Rt151';
65
+ rules += ' Te151';
66
+ rules += ' Qe151';
67
+ rules += ' sd151';
68
+ rules += ' Ul151';
69
+ rules += ' ql151';
70
+ rules += ' eb151';
71
+ if (props.isInContainer) rules += ' _Pa151';
72
+ rules += ' _lr151';
73
+ rules += ' _AI151';
74
+ rules += ' -F3Iohc-_zI151';
75
+ if (props.isInContainer) rules += ' Zd151';
76
+ else rules += ' Za151';
77
+ rules += ' IM151';
78
+ rules += ' HM151';
79
+ rules += ' Ll151';
80
+ rules += ' Yg151';
81
+ rules += ' Xc151';
82
+ rules += ' _2b151';
83
83
  if (props.isExiting) {
84
- rules += ' -_8PloMd-t131';
85
- rules += ' __Ya131';
84
+ rules += ' -_8PloMd-t151';
85
+ rules += ' __Ya151';
86
86
  } else if (props.isEntering) {
87
- rules += ' -_8PloMd-t131';
88
- rules += ' __Ya131';
87
+ rules += ' -_8PloMd-t151';
88
+ rules += ' __Ya151';
89
89
  } else {
90
- rules += ' -_8PloMd-q131';
91
- rules += ' __Ya131';
90
+ rules += ' -_8PloMd-q151';
91
+ rules += ' __Ya151';
92
92
  }
93
93
  return rules;
94
94
  };
@@ -166,7 +166,7 @@ const $f21f2186348fbc5b$var$ActionBarInner = /*#__PURE__*/ (0, $kxwJw$forwardRef
166
166
  },
167
167
  children: [
168
168
  /*#__PURE__*/ (0, $kxwJw$jsx)("div", {
169
- className: " _Jb131 IM131",
169
+ className: " _Jb151 IM151",
170
170
  children: /*#__PURE__*/ (0, $kxwJw$jsx)((0, $10401bdc118cbc90$export$73d695ae27330056), {
171
171
  staticColor: isEmphasized ? 'auto' : undefined,
172
172
  isQuiet: true,
@@ -175,7 +175,7 @@ const $f21f2186348fbc5b$var$ActionBarInner = /*#__PURE__*/ (0, $kxwJw$forwardRef
175
175
  })
176
176
  }),
177
177
  /*#__PURE__*/ (0, $kxwJw$jsxs)("div", {
178
- className: " _Ja131 sd131 eb131 Ub131 qb131",
178
+ className: " _Ja151 sd151 eb151 Ub151 qb151",
179
179
  children: [
180
180
  /*#__PURE__*/ (0, $kxwJw$jsx)((0, $a9cda54c4f47ce52$export$de65de8213222d10), {
181
181
  staticColor: isEmphasized ? 'auto' : undefined,
@@ -185,23 +185,23 @@ const $f21f2186348fbc5b$var$ActionBarInner = /*#__PURE__*/ (0, $kxwJw$forwardRef
185
185
  /*#__PURE__*/ (0, $kxwJw$jsx)("span", {
186
186
  className: function anonymous(props) {
187
187
  let rules = " ";
188
- rules += ' uk131';
189
- rules += ' ucJ9TBTb131';
190
- rules += ' ud3Euai131';
191
- rules += ' uea131';
192
- rules += ' ugb131';
193
- rules += ' uhd131';
194
- rules += ' uje131';
195
- rules += ' u2NhKxcl131';
196
- rules += ' uic131';
197
- rules += ' -_6BNtrc-c131';
198
- rules += ' vx131';
199
- rules += ' xb131';
200
- rules += ' _xa131';
201
- rules += ' _Fd131';
202
- rules += ' _FnuYUweb131';
203
- if (props.isEmphasized) rules += ' pr131';
204
- else rules += ' pt131';
188
+ rules += ' uk151';
189
+ rules += ' ucJ9TBTb151';
190
+ rules += ' ud3Euai151';
191
+ rules += ' uea151';
192
+ rules += ' ugb151';
193
+ rules += ' uhd151';
194
+ rules += ' uje151';
195
+ rules += ' u2NhKxcl151';
196
+ rules += ' uic151';
197
+ rules += ' -_6BNtrc-c151';
198
+ rules += ' vx151';
199
+ rules += ' xb151';
200
+ rules += ' _xa151';
201
+ rules += ' _Fd151';
202
+ rules += ' _FnuYUweb151';
203
+ if (props.isEmphasized) rules += ' pr151';
204
+ else rules += ' pt151';
205
205
  return rules;
206
206
  }({
207
207
  isEmphasized: isEmphasized
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-spectrum/s2/src/ActionBar.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 {ActionButtonGroup} from './ActionButtonGroup';\nimport {announce} from 'react-aria/private/live-announcer/LiveAnnouncer';\nimport {CloseButton} from './CloseButton';\nimport {ContextValue, SlotProps} from 'react-aria-components/slots';\nimport {\n createContext,\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {DOMProps, DOMRef, DOMRefValue, Key} from '@react-types/shared';\nimport {FocusScope} from 'react-aria/FocusScope';\nimport intlMessages from '../intl/*.json';\n// @ts-ignore\nimport {lightDark, style} from '../style' with {type: 'macro'};\nimport {StyleProps} from './style-utils' with {type: 'macro'};\nimport {useControlledState} from 'react-stately/useControlledState';\nimport {useDOMRef} from './useDOMRef';\nimport {useEnterAnimation, useExitAnimation} from 'react-aria/private/utils/animation';\nimport {useKeyboard} from 'react-aria/useKeyboard';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useObjectRef} from 'react-aria/useObjectRef';\nimport {useResizeObserver} from 'react-aria/private/utils/useResizeObserver';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\nconst actionBarStyles = style({\n borderRadius: 'lg',\n '--s2-container-bg': {\n type: 'backgroundColor',\n value: {\n default: 'elevated',\n isEmphasized: 'neutral'\n }\n },\n backgroundColor: '--s2-container-bg',\n boxShadow: 'elevated',\n boxSizing: 'border-box',\n outlineStyle: 'solid',\n outlineWidth: 1,\n outlineColor: {\n default: lightDark('transparent-white-25', 'gray-200'),\n isEmphasized: 'transparent',\n forcedColors: 'ButtonBorder'\n },\n paddingX: 8,\n paddingY: 12,\n display: 'flex',\n gap: 16,\n alignItems: 'center',\n position: {\n isInContainer: 'absolute'\n },\n bottom: 0,\n insetStart: 8,\n '--insetEnd': {\n type: 'insetEnd',\n value: 8\n },\n width: {\n default: 'full',\n isInContainer: 'auto'\n },\n marginX: 'auto',\n maxWidth: 960,\n transition: 'transform',\n transitionDuration: 200,\n translateY: {\n default: -8,\n isEntering: 'full',\n isExiting: 'full'\n }\n});\n\nexport interface ActionBarProps extends SlotProps, StyleProps, DOMProps {\n /** A list of ActionButtons to display. */\n children: ReactNode;\n /** Whether the ActionBar should be displayed with a emphasized style. */\n isEmphasized?: boolean;\n /**\n * The number of selected items that the ActionBar is currently linked to. If 0, the ActionBar is\n * hidden.\n */\n selectedItemCount?: number | 'all';\n /** Handler that is called when the ActionBar clear button is pressed. */\n onClearSelection?: () => void;\n /** A ref to the scrollable element the ActionBar appears above. */\n scrollRef?: RefObject<HTMLElement | null>;\n}\n\nexport const ActionBarContext =\n createContext<ContextValue<Partial<ActionBarProps>, DOMRefValue<HTMLDivElement>>>(null);\n\n/**\n * Action bars are used for single and bulk selection patterns when a user needs to perform actions\n * on one or more items at the same time.\n */\nexport const ActionBar = forwardRef(function ActionBar(\n props: ActionBarProps,\n ref: DOMRef<HTMLDivElement>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, ActionBarContext);\n let domRef = useDOMRef(ref);\n\n let isOpen = props.selectedItemCount !== 0;\n let isExiting = useExitAnimation(domRef, isOpen && props.scrollRef != null);\n if (!isOpen && !isExiting) {\n return null;\n }\n\n return <ActionBarInner {...props} ref={domRef} isExiting={isExiting} />;\n});\n\nconst ActionBarInner = forwardRef(function ActionBarInner(\n props: ActionBarProps & {isExiting: boolean},\n ref: ForwardedRef<HTMLDivElement | null>\n) {\n let {\n isEmphasized,\n selectedItemCount = 0,\n children,\n onClearSelection,\n isExiting,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n slot,\n scrollRef,\n ...otherProps\n } = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n\n // Store the last count greater than zero so that we can retain it while rendering the fade-out animation.\n let [lastCount, setLastCount] = useState(selectedItemCount);\n if ((selectedItemCount === 'all' || selectedItemCount > 0) && selectedItemCount !== lastCount) {\n setLastCount(selectedItemCount);\n }\n\n // Measure the width of the collection's scrollbar and offset the action bar by that amount.\n let [scrollbarWidth, setScrollbarWidth] = useState(0);\n let updateScrollbarWidth = useCallback(() => {\n let el = scrollRef?.current;\n if (el) {\n let w = el.offsetWidth - el.clientWidth;\n setScrollbarWidth(w);\n }\n }, [scrollRef]);\n\n useResizeObserver({\n ref: scrollRef,\n onResize: updateScrollbarWidth\n });\n\n let {keyboardProps} = useKeyboard({\n onKeyDown(e) {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClearSelection?.();\n } else {\n e.continuePropagation();\n }\n }\n });\n\n // Announce \"actions available\" on mount.\n let isInitial = useRef(true);\n useEffect(() => {\n if (isInitial.current && scrollRef) {\n isInitial.current = false;\n announce(stringFormatter.format('actionbar.actionsAvailable'));\n }\n }, [stringFormatter, scrollRef]);\n\n let objectRef = useObjectRef(ref);\n let isEntering = useEnterAnimation(objectRef, !!scrollRef);\n\n return (\n <FocusScope restoreFocus>\n <div\n ref={objectRef}\n {...otherProps}\n {...keyboardProps}\n className={\n (props.UNSAFE_className || '') +\n actionBarStyles({isEmphasized, isInContainer: !!scrollRef, isEntering, isExiting})\n }\n style={{\n insetInlineEnd: `calc(var(--insetEnd) + ${scrollbarWidth}px)`,\n ...props.UNSAFE_style\n }}>\n <div className={style({order: 1, marginStart: 'auto'})}>\n <ActionButtonGroup\n staticColor={isEmphasized ? 'auto' : undefined}\n isQuiet\n aria-label={stringFormatter.format('actionbar.actions')}>\n {children}\n </ActionButtonGroup>\n </div>\n <div className={style({order: 0, display: 'flex', alignItems: 'center', gap: 4})}>\n <CloseButton\n staticColor={isEmphasized ? 'auto' : undefined}\n aria-label={stringFormatter.format('actionbar.clearSelection')}\n onPress={() => onClearSelection?.()}\n />\n <span\n className={style({font: 'ui', color: {default: 'neutral', isEmphasized: 'gray-25'}})({\n isEmphasized\n })}>\n {lastCount === 'all'\n ? stringFormatter.format('actionbar.selectedAll')\n : stringFormatter.format('actionbar.selected', {count: lastCount})}\n </span>\n </div>\n </div>\n </FocusScope>\n );\n});\n\ninterface ActionBarContainerHookProps {\n selectedKeys?: 'all' | Iterable<Key>;\n defaultSelectedKeys?: 'all' | Iterable<Key>;\n onSelectionChange?: (keys: Set<Key>) => void;\n renderActionBar?: (selectedKeys: 'all' | Set<Key>) => ReactElement;\n scrollRef?: RefObject<HTMLElement | null>;\n}\n\ninterface ActionBarContainerHookResult {\n selectedKeys: 'all' | Iterable<Key>;\n onSelectionChange: (keys: 'all' | Iterable<Key>) => void;\n actionBar: ReactElement;\n actionBarHeight: number;\n}\n\nexport function useActionBarContainer(\n props: ActionBarContainerHookProps\n): ActionBarContainerHookResult {\n let {renderActionBar, scrollRef} = props;\n let [selectedKeys, setSelectedKeys] = useControlledState(\n props.selectedKeys,\n props.defaultSelectedKeys || new Set(),\n props.onSelectionChange\n );\n let selectedKeysSet = useMemo(\n () => (selectedKeys === 'all' ? (selectedKeys as 'all') : new Set(selectedKeys)),\n [selectedKeys]\n );\n let actionBar = useMemo(\n () => renderActionBar?.(selectedKeysSet),\n [renderActionBar, selectedKeysSet]\n );\n let selectedItemCount = selectedKeysSet === 'all' ? ('all' as const) : selectedKeysSet.size;\n let [actionBarHeight, setActionBarHeight] = useState(0);\n let actionBarRef = useCallback((ref: DOMRefValue | null) => {\n let actionBar = ref?.UNSAFE_getDOMNode();\n if (actionBar) {\n setActionBarHeight(actionBar.offsetHeight + 8);\n } else {\n setActionBarHeight(0);\n }\n }, []);\n\n let actionBarContext = useMemo(\n () => ({\n ref: actionBarRef,\n scrollRef,\n selectedItemCount,\n onClearSelection: () => setSelectedKeys(new Set())\n }),\n [scrollRef, actionBarRef, selectedItemCount, setSelectedKeys]\n );\n\n let wrappedActionBar = useMemo(\n () => (\n <ActionBarContext.Provider value={actionBarContext}>{actionBar}</ActionBarContext.Provider>\n ),\n [actionBarContext, actionBar]\n );\n\n return {\n selectedKeys,\n onSelectionChange: setSelectedKeys,\n actionBar: wrappedActionBar,\n actionBarHeight\n };\n}\n"],"names":[],"version":3,"file":"ActionBar.mjs.map"}
1
+ {"mappings":"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","sources":["packages/@react-spectrum/s2/src/ActionBar.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 {ActionButtonGroup} from './ActionButtonGroup';\nimport {announce} from 'react-aria/private/live-announcer/LiveAnnouncer';\nimport {CloseButton} from './CloseButton';\nimport {ContextValue, SlotProps} from 'react-aria-components/slots';\nimport {\n createContext,\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {DOMProps, DOMRef, DOMRefValue, Key} from '@react-types/shared';\nimport {FocusScope} from 'react-aria/FocusScope';\nimport intlMessages from '../intl/*.json';\nimport {lightDark, style} from '../style' with {type: 'macro'};\nimport {StyleProps} from './style-utils' with {type: 'macro'};\nimport {useControlledState} from 'react-stately/useControlledState';\nimport {useDOMRef} from './useDOMRef';\nimport {useEnterAnimation, useExitAnimation} from 'react-aria/private/utils/animation';\nimport {useKeyboard} from 'react-aria/useKeyboard';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useObjectRef} from 'react-aria/useObjectRef';\nimport {useResizeObserver} from 'react-aria/private/utils/useResizeObserver';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\nconst actionBarStyles = style({\n borderRadius: 'lg',\n '--s2-container-bg': {\n type: 'backgroundColor',\n value: {\n default: 'elevated',\n isEmphasized: 'neutral'\n }\n },\n backgroundColor: '--s2-container-bg',\n boxShadow: 'elevated',\n boxSizing: 'border-box',\n outlineStyle: 'solid',\n outlineWidth: 1,\n outlineColor: {\n default: lightDark('transparent-white-25', 'gray-200'),\n isEmphasized: 'transparent',\n forcedColors: 'ButtonBorder'\n },\n paddingX: 8,\n paddingY: 12,\n display: 'flex',\n gap: 16,\n alignItems: 'center',\n position: {\n isInContainer: 'absolute'\n },\n bottom: 0,\n insetStart: 8,\n '--insetEnd': {\n type: 'insetEnd',\n value: 8\n },\n width: {\n default: 'full',\n isInContainer: 'auto'\n },\n marginX: 'auto',\n maxWidth: 960,\n transition: 'transform',\n transitionDuration: 200,\n translateY: {\n default: -8,\n isEntering: 'full',\n isExiting: 'full'\n }\n});\n\nexport interface ActionBarProps extends SlotProps, StyleProps, DOMProps {\n /** A list of ActionButtons to display. */\n children: ReactNode;\n /** Whether the ActionBar should be displayed with a emphasized style. */\n isEmphasized?: boolean;\n /**\n * The number of selected items that the ActionBar is currently linked to. If 0, the ActionBar is\n * hidden.\n */\n selectedItemCount?: number | 'all';\n /** Handler that is called when the ActionBar clear button is pressed. */\n onClearSelection?: () => void;\n /** A ref to the scrollable element the ActionBar appears above. */\n scrollRef?: RefObject<HTMLElement | null>;\n}\n\nexport const ActionBarContext =\n createContext<ContextValue<Partial<ActionBarProps>, DOMRefValue<HTMLDivElement>>>(null);\n\n/**\n * Action bars are used for single and bulk selection patterns when a user needs to perform actions\n * on one or more items at the same time.\n */\nexport const ActionBar = forwardRef(function ActionBar(\n props: ActionBarProps,\n ref: DOMRef<HTMLDivElement>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, ActionBarContext);\n let domRef = useDOMRef(ref);\n\n let isOpen = props.selectedItemCount !== 0;\n let isExiting = useExitAnimation(domRef, isOpen && props.scrollRef != null);\n if (!isOpen && !isExiting) {\n return null;\n }\n\n return <ActionBarInner {...props} ref={domRef} isExiting={isExiting} />;\n});\n\nconst ActionBarInner = forwardRef(function ActionBarInner(\n props: ActionBarProps & {isExiting: boolean},\n ref: ForwardedRef<HTMLDivElement | null>\n) {\n let {\n isEmphasized,\n selectedItemCount = 0,\n children,\n onClearSelection,\n isExiting,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n slot,\n scrollRef,\n ...otherProps\n } = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n\n // Store the last count greater than zero so that we can retain it while rendering the fade-out animation.\n let [lastCount, setLastCount] = useState(selectedItemCount);\n if ((selectedItemCount === 'all' || selectedItemCount > 0) && selectedItemCount !== lastCount) {\n setLastCount(selectedItemCount);\n }\n\n // Measure the width of the collection's scrollbar and offset the action bar by that amount.\n let [scrollbarWidth, setScrollbarWidth] = useState(0);\n let updateScrollbarWidth = useCallback(() => {\n let el = scrollRef?.current;\n if (el) {\n let w = el.offsetWidth - el.clientWidth;\n setScrollbarWidth(w);\n }\n }, [scrollRef]);\n\n useResizeObserver({\n ref: scrollRef,\n onResize: updateScrollbarWidth\n });\n\n let {keyboardProps} = useKeyboard({\n onKeyDown(e) {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClearSelection?.();\n } else {\n e.continuePropagation();\n }\n }\n });\n\n // Announce \"actions available\" on mount.\n let isInitial = useRef(true);\n useEffect(() => {\n if (isInitial.current && scrollRef) {\n isInitial.current = false;\n announce(stringFormatter.format('actionbar.actionsAvailable'));\n }\n }, [stringFormatter, scrollRef]);\n\n let objectRef = useObjectRef(ref);\n let isEntering = useEnterAnimation(objectRef, !!scrollRef);\n\n return (\n <FocusScope restoreFocus>\n <div\n ref={objectRef}\n {...otherProps}\n {...keyboardProps}\n className={\n (props.UNSAFE_className || '') +\n actionBarStyles({isEmphasized, isInContainer: !!scrollRef, isEntering, isExiting})\n }\n style={{\n insetInlineEnd: `calc(var(--insetEnd) + ${scrollbarWidth}px)`,\n ...props.UNSAFE_style\n }}>\n <div className={style({order: 1, marginStart: 'auto'})}>\n <ActionButtonGroup\n staticColor={isEmphasized ? 'auto' : undefined}\n isQuiet\n aria-label={stringFormatter.format('actionbar.actions')}>\n {children}\n </ActionButtonGroup>\n </div>\n <div className={style({order: 0, display: 'flex', alignItems: 'center', gap: 4})}>\n <CloseButton\n staticColor={isEmphasized ? 'auto' : undefined}\n aria-label={stringFormatter.format('actionbar.clearSelection')}\n onPress={() => onClearSelection?.()}\n />\n <span\n className={style({font: 'ui', color: {default: 'neutral', isEmphasized: 'gray-25'}})({\n isEmphasized\n })}>\n {lastCount === 'all'\n ? stringFormatter.format('actionbar.selectedAll')\n : stringFormatter.format('actionbar.selected', {count: lastCount})}\n </span>\n </div>\n </div>\n </FocusScope>\n );\n});\n\ninterface ActionBarContainerHookProps {\n selectedKeys?: 'all' | Iterable<Key>;\n defaultSelectedKeys?: 'all' | Iterable<Key>;\n onSelectionChange?: (keys: Set<Key>) => void;\n renderActionBar?: (selectedKeys: 'all' | Set<Key>) => ReactElement;\n scrollRef?: RefObject<HTMLElement | null>;\n}\n\ninterface ActionBarContainerHookResult {\n selectedKeys: 'all' | Iterable<Key>;\n onSelectionChange: (keys: 'all' | Iterable<Key>) => void;\n actionBar: ReactElement;\n actionBarHeight: number;\n}\n\nexport function useActionBarContainer(\n props: ActionBarContainerHookProps\n): ActionBarContainerHookResult {\n let {renderActionBar, scrollRef} = props;\n let [selectedKeys, setSelectedKeys] = useControlledState(\n props.selectedKeys,\n props.defaultSelectedKeys || new Set(),\n props.onSelectionChange\n );\n let selectedKeysSet = useMemo(\n () => (selectedKeys === 'all' ? (selectedKeys as 'all') : new Set(selectedKeys)),\n [selectedKeys]\n );\n let actionBar = useMemo(\n () => renderActionBar?.(selectedKeysSet),\n [renderActionBar, selectedKeysSet]\n );\n let selectedItemCount = selectedKeysSet === 'all' ? ('all' as const) : selectedKeysSet.size;\n let [actionBarHeight, setActionBarHeight] = useState(0);\n let actionBarRef = useCallback((ref: DOMRefValue | null) => {\n let actionBar = ref?.UNSAFE_getDOMNode();\n if (actionBar) {\n setActionBarHeight(actionBar.offsetHeight + 8);\n } else {\n setActionBarHeight(0);\n }\n }, []);\n\n let actionBarContext = useMemo(\n () => ({\n ref: actionBarRef,\n scrollRef,\n selectedItemCount,\n onClearSelection: () => setSelectedKeys(new Set())\n }),\n [scrollRef, actionBarRef, selectedItemCount, setSelectedKeys]\n );\n\n let wrappedActionBar = useMemo(\n () => (\n <ActionBarContext.Provider value={actionBarContext}>{actionBar}</ActionBarContext.Provider>\n ),\n [actionBarContext, actionBar]\n );\n\n return {\n selectedKeys,\n onSelectionChange: setSelectedKeys,\n actionBar: wrappedActionBar,\n actionBarHeight\n };\n}\n"],"names":[],"version":3,"file":"ActionBar.mjs.map"}