@react-spectrum/s2 3.0.0-nightly-adae13c78-241218 → 3.0.0-nightly-50c7ada5d-241220

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 (201) hide show
  1. package/dist/ActionBar.cjs +262 -0
  2. package/dist/ActionBar.cjs.map +1 -0
  3. package/dist/ActionBar.css +284 -0
  4. package/dist/ActionBar.css.map +1 -0
  5. package/dist/ActionBar.mjs +255 -0
  6. package/dist/ActionBar.mjs.map +1 -0
  7. package/dist/ActionButtonGroup.cjs.map +1 -1
  8. package/dist/ActionButtonGroup.css.map +1 -1
  9. package/dist/ActionButtonGroup.mjs.map +1 -1
  10. package/dist/Button.cjs +49 -9
  11. package/dist/Button.cjs.map +1 -1
  12. package/dist/Button.css +42 -18
  13. package/dist/Button.css.map +1 -1
  14. package/dist/Button.mjs +49 -9
  15. package/dist/Button.mjs.map +1 -1
  16. package/dist/CardView.cjs +33 -6
  17. package/dist/CardView.cjs.map +1 -1
  18. package/dist/CardView.css +28 -4
  19. package/dist/CardView.css.map +1 -1
  20. package/dist/CardView.mjs +35 -8
  21. package/dist/CardView.mjs.map +1 -1
  22. package/dist/CheckboxGroup.cjs +2 -1
  23. package/dist/CheckboxGroup.cjs.map +1 -1
  24. package/dist/CheckboxGroup.css.map +1 -1
  25. package/dist/CheckboxGroup.mjs +2 -1
  26. package/dist/CheckboxGroup.mjs.map +1 -1
  27. package/dist/CloseButton.cjs +9 -10
  28. package/dist/CloseButton.cjs.map +1 -1
  29. package/dist/CloseButton.css +4 -4
  30. package/dist/CloseButton.css.map +1 -1
  31. package/dist/CloseButton.mjs +9 -10
  32. package/dist/CloseButton.mjs.map +1 -1
  33. package/dist/TableView.cjs +54 -29
  34. package/dist/TableView.cjs.map +1 -1
  35. package/dist/TableView.css +12 -12
  36. package/dist/TableView.css.map +1 -1
  37. package/dist/TableView.mjs +55 -30
  38. package/dist/TableView.mjs.map +1 -1
  39. package/dist/ar-AE.cjs +10 -2
  40. package/dist/ar-AE.cjs.map +1 -1
  41. package/dist/ar-AE.mjs +10 -2
  42. package/dist/ar-AE.mjs.map +1 -1
  43. package/dist/bg-BG.cjs +11 -2
  44. package/dist/bg-BG.cjs.map +1 -1
  45. package/dist/bg-BG.mjs +11 -2
  46. package/dist/bg-BG.mjs.map +1 -1
  47. package/dist/cs-CZ.cjs +7 -2
  48. package/dist/cs-CZ.cjs.map +1 -1
  49. package/dist/cs-CZ.mjs +7 -2
  50. package/dist/cs-CZ.mjs.map +1 -1
  51. package/dist/da-DK.cjs +12 -4
  52. package/dist/da-DK.cjs.map +1 -1
  53. package/dist/da-DK.mjs +12 -4
  54. package/dist/da-DK.mjs.map +1 -1
  55. package/dist/de-DE.cjs +11 -2
  56. package/dist/de-DE.cjs.map +1 -1
  57. package/dist/de-DE.mjs +11 -2
  58. package/dist/de-DE.mjs.map +1 -1
  59. package/dist/el-GR.cjs +11 -2
  60. package/dist/el-GR.cjs.map +1 -1
  61. package/dist/el-GR.mjs +11 -2
  62. package/dist/el-GR.mjs.map +1 -1
  63. package/dist/en-US.cjs +8 -0
  64. package/dist/en-US.cjs.map +1 -1
  65. package/dist/en-US.mjs +8 -0
  66. package/dist/en-US.mjs.map +1 -1
  67. package/dist/es-ES.cjs +11 -2
  68. package/dist/es-ES.cjs.map +1 -1
  69. package/dist/es-ES.mjs +11 -2
  70. package/dist/es-ES.mjs.map +1 -1
  71. package/dist/et-EE.cjs +10 -2
  72. package/dist/et-EE.cjs.map +1 -1
  73. package/dist/et-EE.mjs +10 -2
  74. package/dist/et-EE.mjs.map +1 -1
  75. package/dist/fi-FI.cjs +10 -2
  76. package/dist/fi-FI.cjs.map +1 -1
  77. package/dist/fi-FI.mjs +10 -2
  78. package/dist/fi-FI.mjs.map +1 -1
  79. package/dist/fr-FR.cjs +11 -2
  80. package/dist/fr-FR.cjs.map +1 -1
  81. package/dist/fr-FR.mjs +11 -2
  82. package/dist/fr-FR.mjs.map +1 -1
  83. package/dist/he-IL.cjs +11 -2
  84. package/dist/he-IL.cjs.map +1 -1
  85. package/dist/he-IL.mjs +11 -2
  86. package/dist/he-IL.mjs.map +1 -1
  87. package/dist/hr-HR.cjs +7 -2
  88. package/dist/hr-HR.cjs.map +1 -1
  89. package/dist/hr-HR.mjs +7 -2
  90. package/dist/hr-HR.mjs.map +1 -1
  91. package/dist/hu-HU.cjs +10 -2
  92. package/dist/hu-HU.cjs.map +1 -1
  93. package/dist/hu-HU.mjs +10 -2
  94. package/dist/hu-HU.mjs.map +1 -1
  95. package/dist/it-IT.cjs +11 -2
  96. package/dist/it-IT.cjs.map +1 -1
  97. package/dist/it-IT.mjs +11 -2
  98. package/dist/it-IT.mjs.map +1 -1
  99. package/dist/ja-JP.cjs +10 -2
  100. package/dist/ja-JP.cjs.map +1 -1
  101. package/dist/ja-JP.mjs +10 -2
  102. package/dist/ja-JP.mjs.map +1 -1
  103. package/dist/ko-KR.cjs +12 -4
  104. package/dist/ko-KR.cjs.map +1 -1
  105. package/dist/ko-KR.mjs +12 -4
  106. package/dist/ko-KR.mjs.map +1 -1
  107. package/dist/lt-LT.cjs +9 -4
  108. package/dist/lt-LT.cjs.map +1 -1
  109. package/dist/lt-LT.mjs +9 -4
  110. package/dist/lt-LT.mjs.map +1 -1
  111. package/dist/lv-LV.cjs +11 -3
  112. package/dist/lv-LV.cjs.map +1 -1
  113. package/dist/lv-LV.mjs +11 -3
  114. package/dist/lv-LV.mjs.map +1 -1
  115. package/dist/main.cjs +4 -0
  116. package/dist/main.cjs.map +1 -1
  117. package/dist/module.mjs +3 -1
  118. package/dist/module.mjs.map +1 -1
  119. package/dist/nb-NO.cjs +9 -4
  120. package/dist/nb-NO.cjs.map +1 -1
  121. package/dist/nb-NO.mjs +9 -4
  122. package/dist/nb-NO.mjs.map +1 -1
  123. package/dist/nl-NL.cjs +10 -2
  124. package/dist/nl-NL.cjs.map +1 -1
  125. package/dist/nl-NL.mjs +10 -2
  126. package/dist/nl-NL.mjs.map +1 -1
  127. package/dist/pl-PL.cjs +8 -3
  128. package/dist/pl-PL.cjs.map +1 -1
  129. package/dist/pl-PL.mjs +8 -3
  130. package/dist/pl-PL.mjs.map +1 -1
  131. package/dist/pt-BR.cjs +11 -2
  132. package/dist/pt-BR.cjs.map +1 -1
  133. package/dist/pt-BR.mjs +11 -2
  134. package/dist/pt-BR.mjs.map +1 -1
  135. package/dist/pt-PT.cjs +11 -2
  136. package/dist/pt-PT.cjs.map +1 -1
  137. package/dist/pt-PT.mjs +11 -2
  138. package/dist/pt-PT.mjs.map +1 -1
  139. package/dist/ro-RO.cjs +12 -3
  140. package/dist/ro-RO.cjs.map +1 -1
  141. package/dist/ro-RO.mjs +12 -3
  142. package/dist/ro-RO.mjs.map +1 -1
  143. package/dist/ru-RU.cjs +7 -2
  144. package/dist/ru-RU.cjs.map +1 -1
  145. package/dist/ru-RU.mjs +7 -2
  146. package/dist/ru-RU.mjs.map +1 -1
  147. package/dist/sk-SK.cjs +7 -2
  148. package/dist/sk-SK.cjs.map +1 -1
  149. package/dist/sk-SK.mjs +7 -2
  150. package/dist/sk-SK.mjs.map +1 -1
  151. package/dist/sl-SI.cjs +7 -2
  152. package/dist/sl-SI.cjs.map +1 -1
  153. package/dist/sl-SI.mjs +7 -2
  154. package/dist/sl-SI.mjs.map +1 -1
  155. package/dist/sr-SP.cjs +7 -2
  156. package/dist/sr-SP.cjs.map +1 -1
  157. package/dist/sr-SP.mjs +7 -2
  158. package/dist/sr-SP.mjs.map +1 -1
  159. package/dist/sv-SE.cjs +11 -2
  160. package/dist/sv-SE.cjs.map +1 -1
  161. package/dist/sv-SE.mjs +11 -2
  162. package/dist/sv-SE.mjs.map +1 -1
  163. package/dist/tr-TR.cjs +10 -2
  164. package/dist/tr-TR.cjs.map +1 -1
  165. package/dist/tr-TR.mjs +10 -2
  166. package/dist/tr-TR.mjs.map +1 -1
  167. package/dist/types.d.ts +34 -18
  168. package/dist/types.d.ts.map +1 -1
  169. package/dist/uk-UA.cjs +7 -2
  170. package/dist/uk-UA.cjs.map +1 -1
  171. package/dist/uk-UA.mjs +7 -2
  172. package/dist/uk-UA.mjs.map +1 -1
  173. package/dist/zh-CN.cjs +10 -2
  174. package/dist/zh-CN.cjs.map +1 -1
  175. package/dist/zh-CN.mjs +10 -2
  176. package/dist/zh-CN.mjs.map +1 -1
  177. package/dist/zh-TW.cjs +10 -2
  178. package/dist/zh-TW.cjs.map +1 -1
  179. package/dist/zh-TW.mjs +10 -2
  180. package/dist/zh-TW.mjs.map +1 -1
  181. package/package.json +19 -18
  182. package/src/ActionBar.tsx +235 -0
  183. package/src/ActionButtonGroup.tsx +3 -2
  184. package/src/Button.tsx +56 -7
  185. package/src/CardView.tsx +35 -8
  186. package/src/CheckboxGroup.tsx +1 -1
  187. package/src/CloseButton.tsx +4 -5
  188. package/src/TableView.tsx +32 -18
  189. package/src/index.ts +2 -0
  190. package/style/dist/main.cjs +1 -0
  191. package/style/dist/main.cjs.map +1 -1
  192. package/style/dist/module.mjs +2 -2
  193. package/style/dist/module.mjs.map +1 -1
  194. package/style/dist/spectrum-theme.cjs +4 -0
  195. package/style/dist/spectrum-theme.cjs.map +1 -1
  196. package/style/dist/spectrum-theme.mjs +4 -1
  197. package/style/dist/spectrum-theme.mjs.map +1 -1
  198. package/style/dist/types.d.ts +1 -0
  199. package/style/dist/types.d.ts.map +1 -1
  200. package/style/index.ts +1 -1
  201. package/style/spectrum-theme.ts +4 -0
@@ -0,0 +1,262 @@
1
+ require("./ActionBar.css");
2
+ var $7a26131f6144af2b$exports = require("./ActionButtonGroup.cjs");
3
+ var $2f907cb84c6e9e75$exports = require("./CloseButton.cjs");
4
+ var $4526404114e78c80$exports = require("./intlStrings.cjs");
5
+ var $ac757a4c2bd72aee$exports = require("../icons/useSpectrumContextProps.cjs");
6
+ var $cRsNx$reactjsxruntime = require("react/jsx-runtime");
7
+ var $cRsNx$reactarialiveannouncer = require("@react-aria/live-announcer");
8
+ var $cRsNx$react = require("react");
9
+ var $cRsNx$reactaria = require("react-aria");
10
+ var $cRsNx$reactstatelyutils = require("@react-stately/utils");
11
+ var $cRsNx$reactspectrumutils = require("@react-spectrum/utils");
12
+ var $cRsNx$reactariautils = require("@react-aria/utils");
13
+ var $cRsNx$reactariai18n = require("@react-aria/i18n");
14
+
15
+
16
+ function $parcel$interopDefault(a) {
17
+ return a && a.__esModule ? a.default : a;
18
+ }
19
+
20
+ function $parcel$export(e, n, v, s) {
21
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
22
+ }
23
+
24
+ $parcel$export(module.exports, "ActionBarContext", () => $85bf454149fe9ddc$export$9f306827c48feef4);
25
+ $parcel$export(module.exports, "ActionBar", () => $85bf454149fe9ddc$export$e213cebad6250b4a);
26
+ $parcel$export(module.exports, "useActionBarContainer", () => $85bf454149fe9ddc$export$13f32e21845e01d0);
27
+ /*
28
+ * Copyright 2024 Adobe. All rights reserved.
29
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
30
+ * you may not use this file except in compliance with the License. You may obtain a copy
31
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
32
+ *
33
+ * Unless required by applicable law or agreed to in writing, software distributed under
34
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
35
+ * OF ANY KIND, either express or implied. See the License for the specific language
36
+ * governing permissions and limitations under the License.
37
+ */
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+ const $85bf454149fe9ddc$var$slideIn = "-d9bqcx";
50
+ const $85bf454149fe9ddc$var$slideOut = "-e7i2y9";
51
+ const $85bf454149fe9ddc$var$actionBarStyles = function anonymous(props) {
52
+ let rules = " .";
53
+ rules += ' _vd';
54
+ rules += ' _wd';
55
+ rules += ' _xd';
56
+ rules += ' _yd';
57
+ if (props.isEmphasized) {
58
+ if (props.isPressed) rules += ' -_1de2x0q_b-o';
59
+ else if (props.isFocusVisible) rules += ' -_1de2x0q_b-o';
60
+ else if (props.isHovered) rules += ' -_1de2x0q_b-o';
61
+ else rules += ' -_1de2x0q_b-n';
62
+ } else rules += ' -_1de2x0q_b-______x';
63
+ rules += ' b-1de2x0q';
64
+ rules += ' _tb';
65
+ rules += ' __na';
66
+ rules += ' _Lb';
67
+ rules += ' _Nb';
68
+ rules += ' _M-3hmpv';
69
+ rules += ' da_____I';
70
+ if (props.isEmphasized) rules += ' da';
71
+ else rules += ' dh';
72
+ rules += ' Cd';
73
+ rules += ' Dd';
74
+ rules += ' Ee';
75
+ rules += ' Fe';
76
+ rules += ' _Zd';
77
+ rules += ' if';
78
+ rules += ' jf';
79
+ rules += ' _1c';
80
+ if (props.isInContainer) rules += ' Ua';
81
+ rules += ' Zd';
82
+ rules += ' Vd';
83
+ rules += ' -w2j5q1_W-d';
84
+ if (props.isInContainer) rules += ' la';
85
+ else rules += ' lb';
86
+ rules += ' y_d';
87
+ rules += ' z_d';
88
+ rules += ' r_______________T';
89
+ if (props.isExiting) rules += ' _S-y93obf';
90
+ else if (props.isInContainer) rules += ' _S-xn3rp9';
91
+ rules += ' _T-375xx3';
92
+ if (props.isExiting) rules += ' _Ya';
93
+ else if (props.isInContainer) rules += ' _Ya';
94
+ return rules;
95
+ };
96
+ const $85bf454149fe9ddc$export$9f306827c48feef4 = /*#__PURE__*/ (0, $cRsNx$react.createContext)(null);
97
+ const $85bf454149fe9ddc$export$e213cebad6250b4a = /*#__PURE__*/ (0, $cRsNx$react.forwardRef)(function ActionBar(props, ref) {
98
+ [props, ref] = (0, $ac757a4c2bd72aee$exports.useSpectrumContextProps)(props, ref, $85bf454149fe9ddc$export$9f306827c48feef4);
99
+ let domRef = (0, $cRsNx$reactspectrumutils.useDOMRef)(ref);
100
+ let isOpen = props.selectedItemCount !== 0;
101
+ let isExiting = (0, $cRsNx$reactariautils.useExitAnimation)(domRef, isOpen && props.scrollRef != null);
102
+ if (!isOpen && !isExiting) return null;
103
+ return /*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsx)($85bf454149fe9ddc$var$ActionBarInner, {
104
+ ...props,
105
+ ref: domRef,
106
+ isExiting: isExiting
107
+ });
108
+ });
109
+ const $85bf454149fe9ddc$var$ActionBarInner = /*#__PURE__*/ (0, $cRsNx$react.forwardRef)(function ActionBarInner(props1, ref) {
110
+ let { isEmphasized: isEmphasized, selectedItemCount: selectedItemCount = 0, children: children, onClearSelection: onClearSelection, isExiting: isExiting } = props1;
111
+ let stringFormatter = (0, $cRsNx$reactariai18n.useLocalizedStringFormatter)((0, ($parcel$interopDefault($4526404114e78c80$exports))), '@react-spectrum/s2');
112
+ // Store the last count greater than zero so that we can retain it while rendering the fade-out animation.
113
+ let [lastCount, setLastCount] = (0, $cRsNx$react.useState)(selectedItemCount);
114
+ if ((selectedItemCount === 'all' || selectedItemCount > 0) && selectedItemCount !== lastCount) setLastCount(selectedItemCount);
115
+ // Measure the width of the collection's scrollbar and offset the action bar by that amount.
116
+ let scrollRef = props1.scrollRef;
117
+ let [scrollbarWidth, setScrollbarWidth] = (0, $cRsNx$react.useState)(0);
118
+ let updateScrollbarWidth = (0, $cRsNx$react.useCallback)(()=>{
119
+ let el = scrollRef?.current;
120
+ if (el) {
121
+ let w = el.offsetWidth - el.clientWidth;
122
+ setScrollbarWidth(w);
123
+ }
124
+ }, [
125
+ scrollRef
126
+ ]);
127
+ (0, $cRsNx$reactariautils.useResizeObserver)({
128
+ ref: scrollRef,
129
+ onResize: updateScrollbarWidth
130
+ });
131
+ let { keyboardProps: keyboardProps } = (0, $cRsNx$reactaria.useKeyboard)({
132
+ onKeyDown (e) {
133
+ if (e.key === 'Escape') {
134
+ e.preventDefault();
135
+ onClearSelection?.();
136
+ } else e.continuePropagation();
137
+ }
138
+ });
139
+ // Announce "actions available" on mount.
140
+ let isInitial = (0, $cRsNx$react.useRef)(true);
141
+ (0, $cRsNx$react.useEffect)(()=>{
142
+ if (isInitial.current && scrollRef) {
143
+ isInitial.current = false;
144
+ (0, $cRsNx$reactarialiveannouncer.announce)(stringFormatter.format('actionbar.actionsAvailable'));
145
+ }
146
+ }, [
147
+ stringFormatter,
148
+ scrollRef
149
+ ]);
150
+ return /*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsx)((0, $cRsNx$reactaria.FocusScope), {
151
+ restoreFocus: true,
152
+ children: /*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsxs)("div", {
153
+ ref: ref,
154
+ ...keyboardProps,
155
+ className: $85bf454149fe9ddc$var$actionBarStyles({
156
+ isEmphasized: isEmphasized,
157
+ isInContainer: !!scrollRef,
158
+ isExiting: isExiting
159
+ }),
160
+ style: {
161
+ insetInlineEnd: `calc(var(--insetEnd) + ${scrollbarWidth}px)`
162
+ },
163
+ children: [
164
+ /*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsx)("div", {
165
+ className: " . __A-3t1y y_d",
166
+ children: /*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsx)((0, $7a26131f6144af2b$exports.ActionButtonGroup), {
167
+ staticColor: isEmphasized ? 'auto' : undefined,
168
+ isQuiet: true,
169
+ "aria-label": stringFormatter.format('actionbar.actions'),
170
+ children: children
171
+ })
172
+ }),
173
+ /*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsxs)("div", {
174
+ className: " . __A-3t1x _Zd _1c ic jc",
175
+ children: [
176
+ /*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsx)((0, $2f907cb84c6e9e75$exports.CloseButton), {
177
+ staticColor: isEmphasized ? 'auto' : undefined,
178
+ "aria-label": stringFormatter.format('actionbar.clearSelection'),
179
+ onPress: ()=>onClearSelection?.()
180
+ }),
181
+ /*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsx)("span", {
182
+ className: function anonymous(props) {
183
+ let rules = " .";
184
+ rules += ' _c-bc1l9oh';
185
+ rules += ' _c-1uotwbwg';
186
+ rules += ' _c-eo0c6sf';
187
+ rules += ' _c-enzzrge';
188
+ rules += ' _c-enzykdd';
189
+ rules += ' _c-enzwzjc';
190
+ rules += ' _c-enzrfpb';
191
+ rules += ' _ca';
192
+ rules += ' _dbf';
193
+ rules += ' _de';
194
+ rules += ' _eb';
195
+ rules += ' _f-1x99dlob';
196
+ rules += ' _fa';
197
+ if (props.isEmphasized) rules += ' ad';
198
+ else {
199
+ if (props.isPressed) rules += ' ao';
200
+ else if (props.isFocusVisible) rules += ' ao';
201
+ else if (props.isHovered) rules += ' ao';
202
+ else rules += ' an';
203
+ }
204
+ return rules;
205
+ }({
206
+ isEmphasized: isEmphasized
207
+ }),
208
+ children: lastCount === 'all' ? stringFormatter.format('actionbar.selectedAll') : stringFormatter.format('actionbar.selected', {
209
+ count: lastCount
210
+ })
211
+ })
212
+ ]
213
+ })
214
+ ]
215
+ })
216
+ });
217
+ });
218
+ function $85bf454149fe9ddc$export$13f32e21845e01d0(props) {
219
+ let { renderActionBar: renderActionBar, scrollRef: scrollRef } = props;
220
+ let [selectedKeys, setSelectedKeys] = (0, $cRsNx$reactstatelyutils.useControlledState)(props.selectedKeys, props.defaultSelectedKeys || new Set(), props.onSelectionChange);
221
+ let selectedKeysSet = (0, $cRsNx$react.useMemo)(()=>selectedKeys === 'all' ? selectedKeys : new Set(selectedKeys), [
222
+ selectedKeys
223
+ ]);
224
+ let actionBar = (0, $cRsNx$react.useMemo)(()=>renderActionBar?.(selectedKeysSet), [
225
+ renderActionBar,
226
+ selectedKeysSet
227
+ ]);
228
+ let selectedItemCount = selectedKeysSet === 'all' ? 'all' : selectedKeysSet.size;
229
+ let [actionBarHeight, setActionBarHeight] = (0, $cRsNx$react.useState)(0);
230
+ let actionBarRef = (0, $cRsNx$react.useCallback)((ref)=>{
231
+ let actionBar = ref?.UNSAFE_getDOMNode();
232
+ if (actionBar) setActionBarHeight(actionBar.offsetHeight + 8);
233
+ else setActionBarHeight(0);
234
+ }, []);
235
+ let actionBarContext = (0, $cRsNx$react.useMemo)(()=>({
236
+ ref: actionBarRef,
237
+ scrollRef: scrollRef,
238
+ selectedItemCount: selectedItemCount,
239
+ onClearSelection: ()=>setSelectedKeys(new Set())
240
+ }), [
241
+ scrollRef,
242
+ actionBarRef,
243
+ selectedItemCount,
244
+ setSelectedKeys
245
+ ]);
246
+ let wrappedActionBar = (0, $cRsNx$react.useMemo)(()=>/*#__PURE__*/ (0, $cRsNx$reactjsxruntime.jsx)($85bf454149fe9ddc$export$9f306827c48feef4.Provider, {
247
+ value: actionBarContext,
248
+ children: actionBar
249
+ }), [
250
+ actionBarContext,
251
+ actionBar
252
+ ]);
253
+ return {
254
+ selectedKeys: selectedKeys,
255
+ onSelectionChange: setSelectedKeys,
256
+ actionBar: wrappedActionBar,
257
+ actionBarHeight: actionBarHeight
258
+ };
259
+ }
260
+
261
+
262
+ //# sourceMappingURL=ActionBar.cjs.map
@@ -0,0 +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/live-announcer';\nimport {CloseButton} from './CloseButton';\nimport {ContextValue, SlotProps} from 'react-aria-components';\nimport {createContext, ForwardedRef, forwardRef, ReactElement, ReactNode, RefObject, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {DOMRef, DOMRefValue, Key} from '@react-types/shared';\nimport {FocusScope, useKeyboard} from 'react-aria';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {keyframes} from '../style/style-macro' with {type: 'macro'};\nimport {style} from '../style' with {type: 'macro'};\nimport {useControlledState} from '@react-stately/utils';\nimport {useDOMRef} from '@react-spectrum/utils';\nimport {useExitAnimation, useResizeObserver} from '@react-aria/utils';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\nconst slideIn = keyframes(`\n from { transform: translateY(100%); opacity: 0 }\n to { transform: translateY(0px); opacity: 1 }\n`);\n\nconst slideOut = keyframes(`\n from { transform: translateY(0px); opacity: 1 }\n to { transform: translateY(100%); opacity: 0 }\n`);\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 outlineOffset: -1,\n outlineColor: {\n default: '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: 8,\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 animation: {\n isInContainer: slideIn,\n isExiting: slideOut\n },\n animationDuration: 200\n});\n\nexport interface ActionBarProps extends SlotProps {\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 /** The number of selected items that the ActionBar is currently linked to. If 0, the ActionBar is hidden. */\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 = createContext<ContextValue<Partial<ActionBarProps>, DOMRefValue<HTMLDivElement>>>(null);\n\nexport const ActionBar = forwardRef(function ActionBar(props: ActionBarProps, ref: DOMRef<HTMLDivElement>) {\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(props: ActionBarProps & {isExiting: boolean}, ref: ForwardedRef<HTMLDivElement | null>) {\n let {isEmphasized, selectedItemCount = 0, children, onClearSelection, isExiting} = 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 scrollRef = props.scrollRef;\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 return (\n <FocusScope restoreFocus>\n <div\n ref={ref}\n {...keyboardProps}\n className={actionBarStyles({isEmphasized, isInContainer: !!scrollRef, isExiting})}\n style={{insetInlineEnd: `calc(var(--insetEnd) + ${scrollbarWidth}px)`}}>\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 <span className={style({font: 'ui', color: {default: 'neutral', isEmphasized: 'gray-25'}})({isEmphasized})}>\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\nexport function useActionBarContainer(props: ActionBarContainerHookProps) {\n let {renderActionBar, scrollRef} = props;\n let [selectedKeys, setSelectedKeys] = useControlledState(props.selectedKeys, props.defaultSelectedKeys || new Set(), props.onSelectionChange);\n let selectedKeysSet = useMemo(() => selectedKeys === 'all' ? selectedKeys as 'all' : new Set(selectedKeys), [selectedKeys]);\n let actionBar = useMemo(() => renderActionBar?.(selectedKeysSet), [renderActionBar, selectedKeysSet]);\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 ref: actionBarRef,\n scrollRef,\n selectedItemCount,\n onClearSelection: () => setSelectedKeys(new Set())\n }), [scrollRef, actionBarRef, selectedItemCount, setSelectedKeys]);\n\n let wrappedActionBar = useMemo(() => (\n <ActionBarContext.Provider value={actionBarContext}>\n {actionBar}\n </ActionBarContext.Provider>\n ), [actionBarContext, actionBar]);\n\n return {\n selectedKeys,\n onSelectionChange: setSelectedKeys,\n actionBar: wrappedActionBar,\n actionBarHeight\n };\n}\n"],"names":[],"version":3,"file":"ActionBar.cjs.map"}
@@ -0,0 +1,284 @@
1
+ @keyframes -d9bqcx {
2
+ from {
3
+ opacity: 0;
4
+ transform: translateY(100%);
5
+ }
6
+
7
+ to {
8
+ opacity: 1;
9
+ transform: translateY(0);
10
+ }
11
+ }
12
+
13
+ @keyframes -e7i2y9 {
14
+ from {
15
+ opacity: 1;
16
+ transform: translateY(0);
17
+ }
18
+
19
+ to {
20
+ opacity: 0;
21
+ transform: translateY(100%);
22
+ }
23
+ }
24
+
25
+ @layer _.a {
26
+ ._vd {
27
+ border-start-start-radius: .625rem;
28
+ }
29
+
30
+ ._wd {
31
+ border-start-end-radius: .625rem;
32
+ }
33
+
34
+ ._xd {
35
+ border-end-start-radius: .625rem;
36
+ }
37
+
38
+ ._yd {
39
+ border-end-end-radius: .625rem;
40
+ }
41
+
42
+ .-_1de2x0q_b-______x {
43
+ --s2-container-bg: var(--lightningcss-light, #fff) var(--lightningcss-dark, #222);
44
+ }
45
+
46
+ .-_1de2x0q_b-n {
47
+ --s2-container-bg: var(--lightningcss-light, #292929) var(--lightningcss-dark, #dbdbdb);
48
+ }
49
+
50
+ .-_1de2x0q_b-o {
51
+ --s2-container-bg: var(--lightningcss-light, #131313) var(--lightningcss-dark, #f2f2f2);
52
+ }
53
+
54
+ .b-1de2x0q {
55
+ background-color: var(--s2-container-bg);
56
+ }
57
+
58
+ ._tb {
59
+ box-shadow: 0 2px 8px var(--lightningcss-light, #00000029) var(--lightningcss-dark, #0000007a);
60
+ }
61
+
62
+ .__na {
63
+ box-sizing: border-box;
64
+ }
65
+
66
+ ._Lb {
67
+ outline-style: solid;
68
+ }
69
+
70
+ ._Nb {
71
+ outline-width: 1px;
72
+ }
73
+
74
+ ._M-3hmpv {
75
+ outline-offset: -1px;
76
+ }
77
+
78
+ .dh {
79
+ outline-color: var(--lightningcss-light, #e1e1e1) var(--lightningcss-dark, #323232);
80
+ }
81
+
82
+ .da {
83
+ outline-color: #0000;
84
+ }
85
+
86
+ .Cd {
87
+ padding-inline-start: .5rem;
88
+ }
89
+
90
+ .Dd {
91
+ padding-inline-end: .5rem;
92
+ }
93
+
94
+ .Ee {
95
+ padding-top: .75rem;
96
+ }
97
+
98
+ .Fe {
99
+ padding-bottom: .75rem;
100
+ }
101
+
102
+ .if {
103
+ row-gap: 1rem;
104
+ }
105
+
106
+ .jf {
107
+ column-gap: 1rem;
108
+ }
109
+
110
+ .Ua {
111
+ position: absolute;
112
+ }
113
+
114
+ .Zd {
115
+ bottom: .5rem;
116
+ }
117
+
118
+ .Vd {
119
+ inset-inline-start: .5rem;
120
+ }
121
+
122
+ .-w2j5q1_W-d {
123
+ --insetEnd: .5rem;
124
+ }
125
+
126
+ .lb {
127
+ width: 100%;
128
+ }
129
+
130
+ .la {
131
+ width: auto;
132
+ }
133
+
134
+ .z_d {
135
+ margin-inline-end: auto;
136
+ }
137
+
138
+ .r_______________T {
139
+ max-width: calc(60rem * var(--s2-scale));
140
+ }
141
+
142
+ ._S-xn3rp9 {
143
+ animation-name: -d9bqcx;
144
+ }
145
+
146
+ ._S-y93obf {
147
+ animation-name: -e7i2y9;
148
+ }
149
+
150
+ ._T-375xx3 {
151
+ animation-duration: .2s;
152
+ }
153
+
154
+ ._Ya {
155
+ animation-timing-function: cubic-bezier(.45, 0, .4, 1);
156
+ }
157
+
158
+ .__A-3t1y {
159
+ order: 1;
160
+ }
161
+
162
+ .y_d {
163
+ margin-inline-start: auto;
164
+ }
165
+
166
+ .__A-3t1x {
167
+ order: 0;
168
+ }
169
+
170
+ ._Zd {
171
+ display: flex;
172
+ }
173
+
174
+ ._1c {
175
+ align-items: center;
176
+ }
177
+
178
+ .ic {
179
+ row-gap: .25rem;
180
+ }
181
+
182
+ .jc {
183
+ column-gap: .25rem;
184
+ }
185
+
186
+ ._ca {
187
+ font-family: adobe-clean-variable, adobe-clean, ui-sans-serif, system-ui, sans-serif;
188
+ }
189
+
190
+ ._de {
191
+ font-size: .875rem;
192
+ }
193
+
194
+ ._eb {
195
+ font-variation-settings: "wght" 400;
196
+ font-synthesis-weight: none;
197
+ font-weight: 400;
198
+ }
199
+
200
+ ._fa {
201
+ line-height: 1.3;
202
+ }
203
+
204
+ .an {
205
+ color: var(--lightningcss-light, #292929) var(--lightningcss-dark, #dbdbdb);
206
+ }
207
+
208
+ .ao {
209
+ color: var(--lightningcss-light, #131313) var(--lightningcss-dark, #f2f2f2);
210
+ }
211
+
212
+ .ad {
213
+ color: var(--lightningcss-light, #fff) var(--lightningcss-dark, #111);
214
+ }
215
+ }
216
+
217
+ @layer _.b {
218
+ ._c-enzrfpb:lang(ar) {
219
+ font-family: myriad-arabic, ui-sans-serif, system-ui, sans-serif;
220
+ }
221
+
222
+ ._f-1x99dlob:is(:lang(ja), :lang(ko), :lang(zh), :lang(zh-Hant), :lang(zh-Hans)) {
223
+ line-height: 1.5;
224
+ }
225
+ }
226
+
227
+ @layer UNSAFE_overrides;
228
+
229
+ @layer _.b.a {
230
+ @media (forced-colors: active) {
231
+ .da_____I {
232
+ outline-color: buttonborder;
233
+ }
234
+ }
235
+ }
236
+
237
+ .\.:not(#a#b) {
238
+ all: revert-layer;
239
+ }
240
+
241
+ @layer _.c {
242
+ ._c-enzwzjc:lang(he) {
243
+ font-family: myriad-hebrew, ui-sans-serif, system-ui, sans-serif;
244
+ }
245
+ }
246
+
247
+ @layer _.d {
248
+ ._c-enzykdd:lang(ja) {
249
+ font-family: adobe-clean-han-japanese, Hiragino Kaku Gothic ProN, ヒラギノ角ゴ ProN W3, Osaka, YuGothic, Yu Gothic, メイリオ, Meiryo, MS Pゴシック, MS PGothic, sans-serif;
250
+ }
251
+ }
252
+
253
+ @layer _.e {
254
+ ._c-enzzrge:lang(ko) {
255
+ font-family: adobe-clean-han-korean, source-han-korean, Malgun Gothic, Apple Gothic, sans-serif;
256
+ }
257
+ }
258
+
259
+ @layer _.f {
260
+ ._c-eo0c6sf:lang(zh) {
261
+ font-family: adobe-clean-han-traditional, source-han-traditional, MingLiu, Heiti TC Light, sans-serif;
262
+ }
263
+ }
264
+
265
+ @layer _.g {
266
+ ._c-1uotwbwg:lang(zh-hant) {
267
+ font-family: adobe-clean-han-traditional, source-han-traditional, MingLiu, Microsoft JhengHei UI, Microsoft JhengHei, Heiti TC Light, sans-serif;
268
+ }
269
+ }
270
+
271
+ @layer _.h {
272
+ ._c-bc1l9oh:is(:lang(zh-Hans), :lang(zh-CN), :lang(zh-SG)) {
273
+ font-family: adobe-clean-han-simplified-c, source-han-simplified-c, SimSun, Heiti SC Light, sans-serif;
274
+ }
275
+ }
276
+
277
+ @layer _.b.b {
278
+ @media not ((hover: hover) and (pointer: fine)) {
279
+ ._dbf {
280
+ font-size: 1.0625rem;
281
+ }
282
+ }
283
+ }
284
+ /*# sourceMappingURL=ActionBar.css.map */
@@ -0,0 +1 @@
1
+ {"mappings":"AC6BgB;;;;;;;;;;;;AAKC;;;;;;;;;;;;AAKO;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;;;;EAgIA;;;;EAAA;;;;EAQA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAKG;;;;EAAA;;;;EAAA;;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AA7IH;EA6IG;;;;EAAA;;;;;AA7IH;;AAAA;EAAA;IAAA;;;;;;AAgIA;;;;AAaG;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;IAAA","sources":["a1b352514784d267","packages/@react-spectrum/s2/src/ActionBar.tsx"],"sourcesContent":["@import \"ae871d7b3899fe46\";\n@import \"b12d7526a8920c7d\";\n@import \"ac539ec7d1ef9296\";\n@import \"e8e91cecf3846843\";\n@import \"c4ab5756a1b19858\";\n@import \"8a738eda46f0e432\";\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/live-announcer';\nimport {CloseButton} from './CloseButton';\nimport {ContextValue, SlotProps} from 'react-aria-components';\nimport {createContext, ForwardedRef, forwardRef, ReactElement, ReactNode, RefObject, useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {DOMRef, DOMRefValue, Key} from '@react-types/shared';\nimport {FocusScope, useKeyboard} from 'react-aria';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {keyframes} from '../style/style-macro' with {type: 'macro'};\nimport {style} from '../style' with {type: 'macro'};\nimport {useControlledState} from '@react-stately/utils';\nimport {useDOMRef} from '@react-spectrum/utils';\nimport {useExitAnimation, useResizeObserver} from '@react-aria/utils';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\nconst slideIn = keyframes(`\n from { transform: translateY(100%); opacity: 0 }\n to { transform: translateY(0px); opacity: 1 }\n`);\n\nconst slideOut = keyframes(`\n from { transform: translateY(0px); opacity: 1 }\n to { transform: translateY(100%); opacity: 0 }\n`);\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 outlineOffset: -1,\n outlineColor: {\n default: '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: 8,\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 animation: {\n isInContainer: slideIn,\n isExiting: slideOut\n },\n animationDuration: 200\n});\n\nexport interface ActionBarProps extends SlotProps {\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 /** The number of selected items that the ActionBar is currently linked to. If 0, the ActionBar is hidden. */\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 = createContext<ContextValue<Partial<ActionBarProps>, DOMRefValue<HTMLDivElement>>>(null);\n\nexport const ActionBar = forwardRef(function ActionBar(props: ActionBarProps, ref: DOMRef<HTMLDivElement>) {\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(props: ActionBarProps & {isExiting: boolean}, ref: ForwardedRef<HTMLDivElement | null>) {\n let {isEmphasized, selectedItemCount = 0, children, onClearSelection, isExiting} = 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 scrollRef = props.scrollRef;\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 return (\n <FocusScope restoreFocus>\n <div\n ref={ref}\n {...keyboardProps}\n className={actionBarStyles({isEmphasized, isInContainer: !!scrollRef, isExiting})}\n style={{insetInlineEnd: `calc(var(--insetEnd) + ${scrollbarWidth}px)`}}>\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 <span className={style({font: 'ui', color: {default: 'neutral', isEmphasized: 'gray-25'}})({isEmphasized})}>\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\nexport function useActionBarContainer(props: ActionBarContainerHookProps) {\n let {renderActionBar, scrollRef} = props;\n let [selectedKeys, setSelectedKeys] = useControlledState(props.selectedKeys, props.defaultSelectedKeys || new Set(), props.onSelectionChange);\n let selectedKeysSet = useMemo(() => selectedKeys === 'all' ? selectedKeys as 'all' : new Set(selectedKeys), [selectedKeys]);\n let actionBar = useMemo(() => renderActionBar?.(selectedKeysSet), [renderActionBar, selectedKeysSet]);\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 ref: actionBarRef,\n scrollRef,\n selectedItemCount,\n onClearSelection: () => setSelectedKeys(new Set())\n }), [scrollRef, actionBarRef, selectedItemCount, setSelectedKeys]);\n\n let wrappedActionBar = useMemo(() => (\n <ActionBarContext.Provider value={actionBarContext}>\n {actionBar}\n </ActionBarContext.Provider>\n ), [actionBarContext, actionBar]);\n\n return {\n selectedKeys,\n onSelectionChange: setSelectedKeys,\n actionBar: wrappedActionBar,\n actionBarHeight\n };\n}\n"],"names":[],"version":3,"file":"ActionBar.css.map"}