@salt-ds/lab 1.0.0-alpha.93 → 1.0.0-alpha.94

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 (131) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/css/salt-lab.css +163 -122
  3. package/dist-cjs/index.js +6 -8
  4. package/dist-cjs/index.js.map +1 -1
  5. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js +6 -0
  6. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js.map +1 -0
  7. package/dist-cjs/toolbar-next/ToolbarContentNext.js +32 -0
  8. package/dist-cjs/toolbar-next/ToolbarContentNext.js.map +1 -0
  9. package/dist-cjs/toolbar-next/ToolbarNext.css.js +6 -0
  10. package/dist-cjs/toolbar-next/ToolbarNext.css.js.map +1 -0
  11. package/dist-cjs/toolbar-next/ToolbarNext.js +394 -0
  12. package/dist-cjs/toolbar-next/ToolbarNext.js.map +1 -0
  13. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js +6 -0
  14. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js.map +1 -0
  15. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +705 -0
  16. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +1 -0
  17. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +165 -0
  18. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +1 -0
  19. package/dist-cjs/toolbar-next/TooltrayNext.css.js +6 -0
  20. package/dist-cjs/toolbar-next/TooltrayNext.css.js.map +1 -0
  21. package/dist-cjs/toolbar-next/TooltrayNext.js +55 -0
  22. package/dist-cjs/toolbar-next/TooltrayNext.js.map +1 -0
  23. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +391 -0
  24. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -0
  25. package/dist-cjs/toolbar-next/toolbarNextUtils.js +215 -0
  26. package/dist-cjs/toolbar-next/toolbarNextUtils.js.map +1 -0
  27. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +334 -0
  28. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -0
  29. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +743 -0
  30. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +1 -0
  31. package/dist-es/index.js +3 -4
  32. package/dist-es/index.js.map +1 -1
  33. package/dist-es/toolbar-next/ToolbarContentNext.css.js +4 -0
  34. package/dist-es/toolbar-next/ToolbarContentNext.css.js.map +1 -0
  35. package/dist-es/toolbar-next/ToolbarContentNext.js +30 -0
  36. package/dist-es/toolbar-next/ToolbarContentNext.js.map +1 -0
  37. package/dist-es/toolbar-next/ToolbarNext.css.js +4 -0
  38. package/dist-es/toolbar-next/ToolbarNext.css.js.map +1 -0
  39. package/dist-es/toolbar-next/ToolbarNext.js +392 -0
  40. package/dist-es/toolbar-next/ToolbarNext.js.map +1 -0
  41. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js +4 -0
  42. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js.map +1 -0
  43. package/dist-es/toolbar-next/ToolbarNextOverflow.js +700 -0
  44. package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +1 -0
  45. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +159 -0
  46. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +1 -0
  47. package/dist-es/toolbar-next/TooltrayNext.css.js +4 -0
  48. package/dist-es/toolbar-next/TooltrayNext.css.js.map +1 -0
  49. package/dist-es/toolbar-next/TooltrayNext.js +53 -0
  50. package/dist-es/toolbar-next/TooltrayNext.js.map +1 -0
  51. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +372 -0
  52. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -0
  53. package/dist-es/toolbar-next/toolbarNextUtils.js +211 -0
  54. package/dist-es/toolbar-next/toolbarNextUtils.js.map +1 -0
  55. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +332 -0
  56. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -0
  57. package/dist-es/toolbar-next/useToolbarNextOverflow.js +741 -0
  58. package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +1 -0
  59. package/dist-types/index.d.ts +1 -1
  60. package/dist-types/toolbar-next/ToolbarContentNext.d.ts +11 -0
  61. package/dist-types/toolbar-next/ToolbarNext.d.ts +12 -0
  62. package/dist-types/toolbar-next/ToolbarNextOverflow.d.ts +34 -0
  63. package/dist-types/toolbar-next/ToolbarNextOverflowFloatingBoundary.d.ts +16 -0
  64. package/dist-types/toolbar-next/TooltrayNext.d.ts +37 -0
  65. package/dist-types/toolbar-next/index.d.ts +3 -0
  66. package/dist-types/toolbar-next/toolbarNextKeyboardUtils.d.ts +39 -0
  67. package/dist-types/toolbar-next/toolbarNextUtils.d.ts +42 -0
  68. package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +41 -0
  69. package/dist-types/toolbar-next/useToolbarNextOverflow.d.ts +37 -0
  70. package/package.json +2 -2
  71. package/dist-cjs/tree/Tree.css.js +0 -6
  72. package/dist-cjs/tree/Tree.css.js.map +0 -1
  73. package/dist-cjs/tree/Tree.js +0 -303
  74. package/dist-cjs/tree/Tree.js.map +0 -1
  75. package/dist-cjs/tree/TreeContext.js +0 -31
  76. package/dist-cjs/tree/TreeContext.js.map +0 -1
  77. package/dist-cjs/tree/TreeNode.css.js +0 -6
  78. package/dist-cjs/tree/TreeNode.css.js.map +0 -1
  79. package/dist-cjs/tree/TreeNode.js +0 -103
  80. package/dist-cjs/tree/TreeNode.js.map +0 -1
  81. package/dist-cjs/tree/TreeNodeExpansionIcon.css.js +0 -6
  82. package/dist-cjs/tree/TreeNodeExpansionIcon.css.js.map +0 -1
  83. package/dist-cjs/tree/TreeNodeExpansionIcon.js +0 -62
  84. package/dist-cjs/tree/TreeNodeExpansionIcon.js.map +0 -1
  85. package/dist-cjs/tree/TreeNodeLabel.css.js +0 -6
  86. package/dist-cjs/tree/TreeNodeLabel.css.js.map +0 -1
  87. package/dist-cjs/tree/TreeNodeLabel.js +0 -26
  88. package/dist-cjs/tree/TreeNodeLabel.js.map +0 -1
  89. package/dist-cjs/tree/TreeNodeTrigger.css.js +0 -6
  90. package/dist-cjs/tree/TreeNodeTrigger.css.js.map +0 -1
  91. package/dist-cjs/tree/TreeNodeTrigger.js +0 -153
  92. package/dist-cjs/tree/TreeNodeTrigger.js.map +0 -1
  93. package/dist-cjs/tree/treeModel.js +0 -61
  94. package/dist-cjs/tree/treeModel.js.map +0 -1
  95. package/dist-cjs/tree/useTree.js +0 -337
  96. package/dist-cjs/tree/useTree.js.map +0 -1
  97. package/dist-es/tree/Tree.css.js +0 -4
  98. package/dist-es/tree/Tree.css.js.map +0 -1
  99. package/dist-es/tree/Tree.js +0 -301
  100. package/dist-es/tree/Tree.js.map +0 -1
  101. package/dist-es/tree/TreeContext.js +0 -26
  102. package/dist-es/tree/TreeContext.js.map +0 -1
  103. package/dist-es/tree/TreeNode.css.js +0 -4
  104. package/dist-es/tree/TreeNode.css.js.map +0 -1
  105. package/dist-es/tree/TreeNode.js +0 -101
  106. package/dist-es/tree/TreeNode.js.map +0 -1
  107. package/dist-es/tree/TreeNodeExpansionIcon.css.js +0 -4
  108. package/dist-es/tree/TreeNodeExpansionIcon.css.js.map +0 -1
  109. package/dist-es/tree/TreeNodeExpansionIcon.js +0 -60
  110. package/dist-es/tree/TreeNodeExpansionIcon.js.map +0 -1
  111. package/dist-es/tree/TreeNodeLabel.css.js +0 -4
  112. package/dist-es/tree/TreeNodeLabel.css.js.map +0 -1
  113. package/dist-es/tree/TreeNodeLabel.js +0 -24
  114. package/dist-es/tree/TreeNodeLabel.js.map +0 -1
  115. package/dist-es/tree/TreeNodeTrigger.css.js +0 -4
  116. package/dist-es/tree/TreeNodeTrigger.css.js.map +0 -1
  117. package/dist-es/tree/TreeNodeTrigger.js +0 -151
  118. package/dist-es/tree/TreeNodeTrigger.js.map +0 -1
  119. package/dist-es/tree/treeModel.js +0 -57
  120. package/dist-es/tree/treeModel.js.map +0 -1
  121. package/dist-es/tree/useTree.js +0 -335
  122. package/dist-es/tree/useTree.js.map +0 -1
  123. package/dist-types/tree/Tree.d.ts +0 -36
  124. package/dist-types/tree/TreeContext.d.ts +0 -77
  125. package/dist-types/tree/TreeNode.d.ts +0 -25
  126. package/dist-types/tree/TreeNodeExpansionIcon.d.ts +0 -4
  127. package/dist-types/tree/TreeNodeLabel.d.ts +0 -4
  128. package/dist-types/tree/TreeNodeTrigger.d.ts +0 -8
  129. package/dist-types/tree/index.d.ts +0 -4
  130. package/dist-types/tree/treeModel.d.ts +0 -24
  131. package/dist-types/tree/useTree.d.ts +0 -68
@@ -0,0 +1,394 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var ToolbarNext$1 = require('./ToolbarNext.css.js');
10
+ var ToolbarNextOverflow = require('./ToolbarNextOverflow.js');
11
+ var ToolbarNextOverflowFloatingBoundary = require('./ToolbarNextOverflowFloatingBoundary.js');
12
+ var toolbarNextKeyboardUtils = require('./toolbarNextKeyboardUtils.js');
13
+ var toolbarNextUtils = require('./toolbarNextUtils.js');
14
+ var useToolbarNextKeyboardNavigation = require('./useToolbarNextKeyboardNavigation.js');
15
+ var useToolbarNextOverflow = require('./useToolbarNextOverflow.js');
16
+
17
+ const withBaseName = core.makePrefixer("saltToolbarNext");
18
+ const withOverflowBaseName = core.makePrefixer("saltToolbarNextOverflow");
19
+ const bandPositions = ["start", "center", "end"];
20
+ function cloneMeasureDecorations(itemId, slot, decorations) {
21
+ return decorations.map((decoration, index) => {
22
+ return react.cloneElement(decoration, {
23
+ key: `${itemId}-${slot}-measurement-${String(decoration.key ?? index)}`
24
+ });
25
+ });
26
+ }
27
+ const ToolbarNext = react.forwardRef(
28
+ function ToolbarNext2({
29
+ children,
30
+ className,
31
+ onBlurCapture,
32
+ onFocusCapture,
33
+ onKeyDownCapture,
34
+ onPointerDownCapture,
35
+ appearance = "bordered",
36
+ variant = "primary",
37
+ ...rest
38
+ }, ref) {
39
+ const targetWindow = window.useWindow();
40
+ styles.useComponentCssInjection({
41
+ testId: "salt-toolbar-next",
42
+ css: ToolbarNext$1,
43
+ window: targetWindow
44
+ });
45
+ const { mode, content } = toolbarNextUtils.normalizeToolbarChildren(children);
46
+ const overflowContent = react.useMemo(
47
+ () => toolbarNextUtils.normalizeToolbarChildren(children).content,
48
+ [children]
49
+ );
50
+ const allItems = react.useMemo(
51
+ () => content.flatMap((contentArea) => contentArea.items),
52
+ [content]
53
+ );
54
+ const {
55
+ containerRef,
56
+ getBandRef,
57
+ getItemRef,
58
+ getNamedTriggerMeasureRef,
59
+ getNamedTriggerRef,
60
+ getContentRef,
61
+ getTriggerMeasureRef,
62
+ overflowGroups,
63
+ overflowTriggerGroups,
64
+ overflowedIds
65
+ } = useToolbarNextOverflow.useToolbarNextOverflow({ content: overflowContent });
66
+ const handleRef = core.useForkRef(ref, containerRef);
67
+ const invalidCompositionWarnedRef = react.useRef(false);
68
+ const itemHostRefCallbacks = react.useRef(
69
+ /* @__PURE__ */ new Map()
70
+ );
71
+ const [itemHostNodes, setItemHostNodes] = react.useState({});
72
+ const sharedOverflowGroups = react.useMemo(
73
+ () => overflowGroups.filter((group) => !group.named),
74
+ [overflowGroups]
75
+ );
76
+ const namedOverflowGroups = react.useMemo(
77
+ () => overflowGroups.filter((group) => group.named),
78
+ [overflowGroups]
79
+ );
80
+ const overflowTriggerGroupByKey = react.useMemo(
81
+ () => new Map(
82
+ overflowTriggerGroups.map((group) => [group.key, group])
83
+ ),
84
+ [overflowTriggerGroups]
85
+ );
86
+ const namedTriggerMeasureItems = react.useMemo(
87
+ () => allItems.filter((item) => {
88
+ return item.overflowMode !== "none" && item.overflowGroup !== "shared";
89
+ }),
90
+ [allItems]
91
+ );
92
+ const bandsByPosition = react.useMemo(() => {
93
+ return bandPositions.reduce(
94
+ (bands, position) => {
95
+ bands[position] = content.filter(
96
+ (contentArea) => contentArea.position === position
97
+ );
98
+ return bands;
99
+ },
100
+ {
101
+ start: [],
102
+ center: [],
103
+ end: []
104
+ }
105
+ );
106
+ }, [content]);
107
+ const hasCenteredLayout = bandsByPosition.center.length > 0;
108
+ const keyboardNavigation = useToolbarNextKeyboardNavigation.useToolbarNextKeyboardNavigation({
109
+ items: allItems,
110
+ overflowedIds,
111
+ scopeRef: containerRef
112
+ });
113
+ const overflowedIdsKey = react.useMemo(
114
+ () => Array.from(overflowedIds).sort().join("\0"),
115
+ [overflowedIds]
116
+ );
117
+ const previousOverflowedIdsKeyRef = react.useRef(overflowedIdsKey);
118
+ const getItemHostRef = react.useCallback(
119
+ (id, kind) => {
120
+ const callbackKey = `${id}:${kind}`;
121
+ const existing = itemHostRefCallbacks.current.get(callbackKey);
122
+ if (existing) {
123
+ return existing;
124
+ }
125
+ const callback = (node) => {
126
+ setItemHostNodes((previous) => {
127
+ var _a;
128
+ if (((_a = previous[id]) == null ? void 0 : _a[kind]) === node) {
129
+ return previous;
130
+ }
131
+ return {
132
+ ...previous,
133
+ [id]: {
134
+ ...previous[id],
135
+ [kind]: node
136
+ }
137
+ };
138
+ });
139
+ };
140
+ itemHostRefCallbacks.current.set(callbackKey, callback);
141
+ return callback;
142
+ },
143
+ []
144
+ );
145
+ const itemOwnerHostNodes = react.useMemo(() => {
146
+ return allItems.reduce(
147
+ (hosts, item) => {
148
+ const nodes = itemHostNodes[item.id];
149
+ hosts[item.id] = (nodes == null ? void 0 : nodes.overflow) ?? (nodes == null ? void 0 : nodes.main) ?? (nodes == null ? void 0 : nodes.measurement) ?? null;
150
+ return hosts;
151
+ },
152
+ {}
153
+ );
154
+ }, [allItems, itemHostNodes]);
155
+ const overflowedMeasurementItems = react.useMemo(() => {
156
+ return allItems.filter((item) => {
157
+ var _a;
158
+ return overflowedIds.has(item.id) && !((_a = itemHostNodes[item.id]) == null ? void 0 : _a.overflow);
159
+ });
160
+ }, [allItems, itemHostNodes, overflowedIds]);
161
+ core.useIsomorphicLayoutEffect(() => {
162
+ const overflowChanged = previousOverflowedIdsKeyRef.current !== overflowedIdsKey;
163
+ previousOverflowedIdsKeyRef.current = overflowedIdsKey;
164
+ if (!overflowChanged) {
165
+ return;
166
+ }
167
+ const doc = targetWindow == null ? void 0 : targetWindow.document;
168
+ const rememberedFocus = keyboardNavigation.rememberedFocusRef.current;
169
+ if (!doc || !rememberedFocus) {
170
+ return;
171
+ }
172
+ const activeElement = doc.activeElement;
173
+ const focusWasLost = !activeElement || activeElement === doc.body || activeElement === doc.documentElement || !activeElement.isConnected;
174
+ const target = keyboardNavigation.getEntryFocusable();
175
+ if (!focusWasLost) {
176
+ return;
177
+ }
178
+ if (!target) {
179
+ return;
180
+ }
181
+ const focusTarget = () => {
182
+ if (target.isConnected) {
183
+ target.focus({ preventScroll: true });
184
+ }
185
+ };
186
+ if (targetWindow == null ? void 0 : targetWindow.requestAnimationFrame) {
187
+ const frame = targetWindow.requestAnimationFrame(focusTarget);
188
+ return () => {
189
+ targetWindow.cancelAnimationFrame(frame);
190
+ };
191
+ }
192
+ queueMicrotask(focusTarget);
193
+ }, [
194
+ keyboardNavigation.getEntryFocusable,
195
+ keyboardNavigation.rememberedFocusRef,
196
+ overflowedIdsKey,
197
+ targetWindow
198
+ ]);
199
+ react.useEffect(() => {
200
+ if (process.env.NODE_ENV !== "production") {
201
+ if (mode === "invalid" && !invalidCompositionWarnedRef.current) {
202
+ console.warn(
203
+ "ToolbarNext children must be authored in one composition model: either TooltrayNext/Divider children directly in ToolbarNext, or ToolbarContentNext children containing TooltrayNext/Divider items."
204
+ );
205
+ invalidCompositionWarnedRef.current = true;
206
+ }
207
+ if (mode !== "invalid") {
208
+ invalidCompositionWarnedRef.current = false;
209
+ }
210
+ }
211
+ }, [mode]);
212
+ return /* @__PURE__ */ jsxRuntime.jsx(
213
+ "div",
214
+ {
215
+ className: clsx.clsx(
216
+ withBaseName(),
217
+ {
218
+ [withBaseName("fallback")]: mode === "invalid",
219
+ [withBaseName("layout")]: mode !== "invalid"
220
+ },
221
+ withBaseName(variant),
222
+ withBaseName(appearance),
223
+ className
224
+ ),
225
+ ...rest,
226
+ "data-centered": mode !== "invalid" && hasCenteredLayout ? "" : void 0,
227
+ "data-mode": mode,
228
+ ...{ [toolbarNextKeyboardUtils.TOOLBAR_NEXT_SCOPE_ROOT_ATTR]: "main" },
229
+ ref: handleRef,
230
+ onBlurCapture: (event) => {
231
+ keyboardNavigation.handleBlurCapture(event);
232
+ onBlurCapture == null ? void 0 : onBlurCapture(event);
233
+ },
234
+ onFocusCapture: (event) => {
235
+ keyboardNavigation.handleFocusCapture(event);
236
+ onFocusCapture == null ? void 0 : onFocusCapture(event);
237
+ },
238
+ onKeyDownCapture: (event) => {
239
+ keyboardNavigation.handleKeyDownCapture(event);
240
+ onKeyDownCapture == null ? void 0 : onKeyDownCapture(event);
241
+ },
242
+ onPointerDownCapture: (event) => {
243
+ keyboardNavigation.handlePointerDownCapture(event);
244
+ onPointerDownCapture == null ? void 0 : onPointerDownCapture(event);
245
+ },
246
+ role: "toolbar",
247
+ "aria-orientation": "horizontal",
248
+ children: mode === "invalid" ? children : /* @__PURE__ */ jsxRuntime.jsxs(ToolbarNextOverflowFloatingBoundary.ToolbarNextOverflowFloatingBoundaryProvider, { children: [
249
+ /* @__PURE__ */ jsxRuntime.jsx(
250
+ ToolbarNextOverflow.ToolbarNextOverflowOwners,
251
+ {
252
+ hostNodes: itemOwnerHostNodes,
253
+ items: allItems
254
+ }
255
+ ),
256
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "aria-hidden": true, className: withBaseName("measurements"), children: [
257
+ overflowTriggerGroups.filter((group) => !group.named).map((group) => /* @__PURE__ */ jsxRuntime.jsx(
258
+ core.Button,
259
+ {
260
+ appearance: "transparent",
261
+ className: withBaseName("measureTrigger"),
262
+ ref: getTriggerMeasureRef(group.key),
263
+ sentiment: "neutral",
264
+ tabIndex: -1,
265
+ children: /* @__PURE__ */ jsxRuntime.jsx(
266
+ ToolbarNextOverflow.ToolbarNextOverflowTriggerContent,
267
+ {
268
+ label: group.label,
269
+ named: group.named
270
+ }
271
+ )
272
+ },
273
+ group.id
274
+ )),
275
+ namedTriggerMeasureItems.map((item) => {
276
+ const group = overflowTriggerGroupByKey.get(
277
+ item.overflowGroupKey
278
+ );
279
+ if (!group) {
280
+ return null;
281
+ }
282
+ return /* @__PURE__ */ jsxRuntime.jsxs(
283
+ "div",
284
+ {
285
+ className: withOverflowBaseName("slot"),
286
+ ref: getNamedTriggerMeasureRef(item.id),
287
+ children: [
288
+ cloneMeasureDecorations(
289
+ item.id,
290
+ "leading",
291
+ item.leadingDecorations
292
+ ),
293
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: withOverflowBaseName("item"), children: /* @__PURE__ */ jsxRuntime.jsx(
294
+ core.Button,
295
+ {
296
+ appearance: "transparent",
297
+ className: withOverflowBaseName("trigger"),
298
+ sentiment: "neutral",
299
+ tabIndex: -1,
300
+ children: /* @__PURE__ */ jsxRuntime.jsx(
301
+ ToolbarNextOverflow.ToolbarNextOverflowTriggerContent,
302
+ {
303
+ label: group.label,
304
+ named: group.named
305
+ }
306
+ )
307
+ }
308
+ ) })
309
+ ]
310
+ },
311
+ `measure-${item.id}`
312
+ );
313
+ }),
314
+ overflowedMeasurementItems.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
315
+ "div",
316
+ {
317
+ className: withOverflowBaseName("slot"),
318
+ ref: getItemRef(item.id),
319
+ children: [
320
+ cloneMeasureDecorations(
321
+ item.id,
322
+ "leading",
323
+ item.leadingDecorations
324
+ ),
325
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: withOverflowBaseName("item"), children: /* @__PURE__ */ jsxRuntime.jsx(
326
+ "div",
327
+ {
328
+ className: withOverflowBaseName("itemHost"),
329
+ ref: getItemHostRef(item.id, "measurement")
330
+ }
331
+ ) }),
332
+ cloneMeasureDecorations(
333
+ item.id,
334
+ "trailing",
335
+ item.trailingDecorations
336
+ )
337
+ ]
338
+ },
339
+ `measure-item-${item.id}`
340
+ ))
341
+ ] }),
342
+ bandPositions.map((position) => {
343
+ const bandContent = bandsByPosition[position];
344
+ const shouldRenderBand = hasCenteredLayout ? true : position === "end" ? bandContent.length > 0 || sharedOverflowGroups.length > 0 : bandContent.length > 0;
345
+ if (!shouldRenderBand) {
346
+ return null;
347
+ }
348
+ return /* @__PURE__ */ jsxRuntime.jsxs(
349
+ "div",
350
+ {
351
+ className: withBaseName("band"),
352
+ "data-band-position": position,
353
+ ref: getBandRef(position),
354
+ children: [
355
+ bandContent.map((contentArea) => /* @__PURE__ */ jsxRuntime.jsx(
356
+ ToolbarNextOverflow.ToolbarNextOverflowContent,
357
+ {
358
+ focusMemoryRef: keyboardNavigation.rememberedFocusRef,
359
+ getItemHostRef,
360
+ getItemRef,
361
+ getNamedTriggerRef,
362
+ getContentRef,
363
+ onItemFocus: keyboardNavigation.rememberItemFocus,
364
+ overflowGroups: namedOverflowGroups.filter(
365
+ (group) => group.contentKey === contentArea.key
366
+ ),
367
+ overflowedIds,
368
+ content: contentArea
369
+ },
370
+ contentArea.key
371
+ )),
372
+ position === "end" ? sharedOverflowGroups.map((group) => /* @__PURE__ */ jsxRuntime.jsx(
373
+ ToolbarNextOverflow.ToolbarNextOverflowMenu,
374
+ {
375
+ focusMemoryRef: keyboardNavigation.rememberedFocusRef,
376
+ getItemHostRef,
377
+ group,
378
+ onItemFocus: keyboardNavigation.rememberItemFocus
379
+ },
380
+ group.id
381
+ )) : null
382
+ ]
383
+ },
384
+ position
385
+ );
386
+ })
387
+ ] })
388
+ }
389
+ );
390
+ }
391
+ );
392
+
393
+ exports.ToolbarNext = ToolbarNext;
394
+ //# sourceMappingURL=ToolbarNext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolbarNext.js","sources":["../src/toolbar-next/ToolbarNext.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { ToolbarContentNextPosition } from \"./ToolbarContentNext\";\nimport toolbarNextCss from \"./ToolbarNext.css\";\nimport {\n type ToolbarNextItemHostKind,\n ToolbarNextOverflowContent,\n ToolbarNextOverflowMenu,\n ToolbarNextOverflowOwners,\n ToolbarNextOverflowTriggerContent,\n} from \"./ToolbarNextOverflow\";\nimport { ToolbarNextOverflowFloatingBoundaryProvider } from \"./ToolbarNextOverflowFloatingBoundary\";\nimport { TOOLBAR_NEXT_SCOPE_ROOT_ATTR } from \"./toolbarNextKeyboardUtils\";\nimport {\n normalizeToolbarChildren,\n type ToolbarNextOverflowItem,\n} from \"./toolbarNextUtils\";\nimport { useToolbarNextKeyboardNavigation } from \"./useToolbarNextKeyboardNavigation\";\nimport { useToolbarNextOverflow } from \"./useToolbarNextOverflow\";\n\nexport interface ToolbarNextProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Visual treatment of the toolbar. Defaults to `\"bordered\"`.\n */\n appearance?: \"bordered\" | \"transparent\";\n /**\n * Styling variant. Defaults to `\"primary\"`.\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n}\n\nconst withBaseName = makePrefixer(\"saltToolbarNext\");\nconst withOverflowBaseName = makePrefixer(\"saltToolbarNextOverflow\");\nconst bandPositions: ToolbarContentNextPosition[] = [\"start\", \"center\", \"end\"];\n\ntype ToolbarNextItemHostNodes = Partial<\n Record<ToolbarNextItemHostKind, HTMLDivElement | null>\n>;\n\nfunction cloneMeasureDecorations(\n itemId: string,\n slot: \"leading\" | \"trailing\",\n decorations: ToolbarNextOverflowItem[\"leadingDecorations\"],\n) {\n return decorations.map((decoration, index) => {\n return cloneElement(decoration, {\n key: `${itemId}-${slot}-measurement-${String(decoration.key ?? index)}`,\n });\n });\n}\n\nexport const ToolbarNext = forwardRef<HTMLDivElement, ToolbarNextProps>(\n function ToolbarNext(\n {\n children,\n className,\n onBlurCapture,\n onFocusCapture,\n onKeyDownCapture,\n onPointerDownCapture,\n appearance = \"bordered\",\n variant = \"primary\",\n ...rest\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toolbar-next\",\n css: toolbarNextCss,\n window: targetWindow,\n });\n\n const { mode, content } = normalizeToolbarChildren(children);\n const overflowContent = useMemo(\n () => normalizeToolbarChildren(children).content,\n [children],\n );\n\n const allItems = useMemo(\n () => content.flatMap((contentArea) => contentArea.items),\n [content],\n );\n\n const {\n containerRef,\n getBandRef,\n getItemRef,\n getNamedTriggerMeasureRef,\n getNamedTriggerRef,\n getContentRef,\n getTriggerMeasureRef,\n overflowGroups,\n overflowTriggerGroups,\n overflowedIds,\n } = useToolbarNextOverflow({ content: overflowContent });\n\n const handleRef = useForkRef(ref, containerRef);\n const invalidCompositionWarnedRef = useRef(false);\n const itemHostRefCallbacks = useRef(\n new Map<string, (node: HTMLDivElement | null) => void>(),\n );\n const [itemHostNodes, setItemHostNodes] = useState<\n Record<string, ToolbarNextItemHostNodes>\n >({});\n\n const sharedOverflowGroups = useMemo(\n () => overflowGroups.filter((group) => !group.named),\n [overflowGroups],\n );\n\n const namedOverflowGroups = useMemo(\n () => overflowGroups.filter((group) => group.named),\n [overflowGroups],\n );\n\n const overflowTriggerGroupByKey = useMemo(\n () =>\n new Map(\n overflowTriggerGroups.map((group) => [group.key, group] as const),\n ),\n [overflowTriggerGroups],\n );\n\n const namedTriggerMeasureItems = useMemo(\n () =>\n allItems.filter((item) => {\n return (\n item.overflowMode !== \"none\" && item.overflowGroup !== \"shared\"\n );\n }),\n [allItems],\n );\n\n const bandsByPosition = useMemo(() => {\n return bandPositions.reduce<\n Record<ToolbarContentNextPosition, typeof content>\n >(\n (bands, position) => {\n bands[position] = content.filter(\n (contentArea) => contentArea.position === position,\n );\n return bands;\n },\n {\n start: [],\n center: [],\n end: [],\n },\n );\n }, [content]);\n const hasCenteredLayout = bandsByPosition.center.length > 0;\n const keyboardNavigation = useToolbarNextKeyboardNavigation({\n items: allItems,\n overflowedIds,\n scopeRef: containerRef,\n });\n const overflowedIdsKey = useMemo(\n () => Array.from(overflowedIds).sort().join(\"\\0\"),\n [overflowedIds],\n );\n const previousOverflowedIdsKeyRef = useRef(overflowedIdsKey);\n\n const getItemHostRef = useCallback(\n (id: string, kind: ToolbarNextItemHostKind) => {\n const callbackKey = `${id}:${kind}`;\n const existing = itemHostRefCallbacks.current.get(callbackKey);\n\n if (existing) {\n return existing;\n }\n\n const callback = (node: HTMLDivElement | null) => {\n setItemHostNodes((previous) => {\n if (previous[id]?.[kind] === node) {\n return previous;\n }\n\n return {\n ...previous,\n [id]: {\n ...previous[id],\n [kind]: node,\n },\n };\n });\n };\n\n itemHostRefCallbacks.current.set(callbackKey, callback);\n return callback;\n },\n [],\n );\n\n const itemOwnerHostNodes = useMemo(() => {\n return allItems.reduce<Record<string, HTMLDivElement | null>>(\n (hosts, item) => {\n const nodes = itemHostNodes[item.id];\n\n hosts[item.id] =\n nodes?.overflow ?? nodes?.main ?? nodes?.measurement ?? null;\n return hosts;\n },\n {},\n );\n }, [allItems, itemHostNodes]);\n\n const overflowedMeasurementItems = useMemo(() => {\n return allItems.filter((item) => {\n return overflowedIds.has(item.id) && !itemHostNodes[item.id]?.overflow;\n });\n }, [allItems, itemHostNodes, overflowedIds]);\n\n useIsomorphicLayoutEffect(() => {\n const overflowChanged =\n previousOverflowedIdsKeyRef.current !== overflowedIdsKey;\n previousOverflowedIdsKeyRef.current = overflowedIdsKey;\n\n if (!overflowChanged) {\n return;\n }\n\n const doc = targetWindow?.document;\n const rememberedFocus = keyboardNavigation.rememberedFocusRef.current;\n\n if (!doc || !rememberedFocus) {\n return;\n }\n\n const activeElement = doc.activeElement;\n const focusWasLost =\n !activeElement ||\n activeElement === doc.body ||\n activeElement === doc.documentElement ||\n !activeElement.isConnected;\n const target = keyboardNavigation.getEntryFocusable();\n\n if (!focusWasLost) {\n return;\n }\n\n if (!target) {\n return;\n }\n\n const focusTarget = () => {\n if (target.isConnected) {\n target.focus({ preventScroll: true });\n }\n };\n\n if (targetWindow?.requestAnimationFrame) {\n const frame = targetWindow.requestAnimationFrame(focusTarget);\n\n return () => {\n targetWindow.cancelAnimationFrame(frame);\n };\n }\n\n queueMicrotask(focusTarget);\n }, [\n keyboardNavigation.getEntryFocusable,\n keyboardNavigation.rememberedFocusRef,\n overflowedIdsKey,\n targetWindow,\n ]);\n\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (mode === \"invalid\" && !invalidCompositionWarnedRef.current) {\n console.warn(\n \"ToolbarNext children must be authored in one composition model: either TooltrayNext/Divider children directly in ToolbarNext, or ToolbarContentNext children containing TooltrayNext/Divider items.\",\n );\n invalidCompositionWarnedRef.current = true;\n }\n\n if (mode !== \"invalid\") {\n invalidCompositionWarnedRef.current = false;\n }\n }\n }, [mode]);\n\n return (\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"fallback\")]: mode === \"invalid\",\n [withBaseName(\"layout\")]: mode !== \"invalid\",\n },\n withBaseName(variant),\n withBaseName(appearance),\n className,\n )}\n {...rest}\n data-centered={mode !== \"invalid\" && hasCenteredLayout ? \"\" : undefined}\n data-mode={mode}\n {...{ [TOOLBAR_NEXT_SCOPE_ROOT_ATTR]: \"main\" }}\n ref={handleRef}\n onBlurCapture={(event) => {\n keyboardNavigation.handleBlurCapture(event);\n onBlurCapture?.(event);\n }}\n onFocusCapture={(event) => {\n keyboardNavigation.handleFocusCapture(event);\n onFocusCapture?.(event);\n }}\n onKeyDownCapture={(event) => {\n keyboardNavigation.handleKeyDownCapture(event);\n onKeyDownCapture?.(event);\n }}\n onPointerDownCapture={(event) => {\n keyboardNavigation.handlePointerDownCapture(event);\n onPointerDownCapture?.(event);\n }}\n role=\"toolbar\"\n aria-orientation=\"horizontal\"\n >\n {mode === \"invalid\" ? (\n children\n ) : (\n <ToolbarNextOverflowFloatingBoundaryProvider>\n <ToolbarNextOverflowOwners\n hostNodes={itemOwnerHostNodes}\n items={allItems}\n />\n <div aria-hidden className={withBaseName(\"measurements\")}>\n {overflowTriggerGroups\n .filter((group) => !group.named)\n .map((group) => (\n <Button\n appearance=\"transparent\"\n className={withBaseName(\"measureTrigger\")}\n key={group.id}\n ref={getTriggerMeasureRef(group.key)}\n sentiment=\"neutral\"\n tabIndex={-1}\n >\n <ToolbarNextOverflowTriggerContent\n label={group.label}\n named={group.named}\n />\n </Button>\n ))}\n {namedTriggerMeasureItems.map((item) => {\n const group = overflowTriggerGroupByKey.get(\n item.overflowGroupKey,\n );\n\n if (!group) {\n return null;\n }\n\n return (\n <div\n className={withOverflowBaseName(\"slot\")}\n key={`measure-${item.id}`}\n ref={getNamedTriggerMeasureRef(item.id)}\n >\n {cloneMeasureDecorations(\n item.id,\n \"leading\",\n item.leadingDecorations,\n )}\n <div className={withOverflowBaseName(\"item\")}>\n <Button\n appearance=\"transparent\"\n className={withOverflowBaseName(\"trigger\")}\n sentiment=\"neutral\"\n tabIndex={-1}\n >\n <ToolbarNextOverflowTriggerContent\n label={group.label}\n named={group.named}\n />\n </Button>\n </div>\n </div>\n );\n })}\n {overflowedMeasurementItems.map((item) => (\n <div\n className={withOverflowBaseName(\"slot\")}\n key={`measure-item-${item.id}`}\n ref={getItemRef(item.id)}\n >\n {cloneMeasureDecorations(\n item.id,\n \"leading\",\n item.leadingDecorations,\n )}\n <div className={withOverflowBaseName(\"item\")}>\n <div\n className={withOverflowBaseName(\"itemHost\")}\n ref={getItemHostRef(item.id, \"measurement\")}\n />\n </div>\n {cloneMeasureDecorations(\n item.id,\n \"trailing\",\n item.trailingDecorations,\n )}\n </div>\n ))}\n </div>\n {bandPositions.map((position) => {\n const bandContent = bandsByPosition[position];\n const shouldRenderBand = hasCenteredLayout\n ? true\n : position === \"end\"\n ? bandContent.length > 0 || sharedOverflowGroups.length > 0\n : bandContent.length > 0;\n\n if (!shouldRenderBand) {\n return null;\n }\n\n return (\n <div\n className={withBaseName(\"band\")}\n data-band-position={position}\n key={position}\n ref={getBandRef(position)}\n >\n {bandContent.map((contentArea) => (\n <ToolbarNextOverflowContent\n focusMemoryRef={keyboardNavigation.rememberedFocusRef}\n getItemHostRef={getItemHostRef}\n getItemRef={getItemRef}\n getNamedTriggerRef={getNamedTriggerRef}\n getContentRef={getContentRef}\n key={contentArea.key}\n onItemFocus={keyboardNavigation.rememberItemFocus}\n overflowGroups={namedOverflowGroups.filter(\n (group) => group.contentKey === contentArea.key,\n )}\n overflowedIds={overflowedIds}\n content={contentArea}\n />\n ))}\n {position === \"end\"\n ? sharedOverflowGroups.map((group) => (\n <ToolbarNextOverflowMenu\n focusMemoryRef={keyboardNavigation.rememberedFocusRef}\n getItemHostRef={getItemHostRef}\n group={group}\n key={group.id}\n onItemFocus={keyboardNavigation.rememberItemFocus}\n />\n ))\n : null}\n </div>\n );\n })}\n </ToolbarNextOverflowFloatingBoundaryProvider>\n )}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","cloneElement","forwardRef","ToolbarNext","useWindow","useComponentCssInjection","toolbarNextCss","normalizeToolbarChildren","useMemo","useToolbarNextOverflow","useForkRef","useRef","useState","useToolbarNextKeyboardNavigation","useCallback","useIsomorphicLayoutEffect","useEffect","jsx","clsx","TOOLBAR_NEXT_SCOPE_ROOT_ATTR","jsxs","ToolbarNextOverflowFloatingBoundaryProvider","ToolbarNextOverflowOwners","Button","ToolbarNextOverflowTriggerContent","ToolbarNextOverflowContent","ToolbarNextOverflowMenu"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltToolbarNextOverflow-content {\n position: relative;\n}\n\n.saltToolbarNextOverflow-slot,\n.saltToolbarNextOverflow-panelItem {\n align-items: center;\n display: flex;\n flex-shrink: 0;\n gap: var(--salt-spacing-100);\n min-width: 0;\n}\n\n.saltToolbarNextOverflow-slot[data-align=\"end\"] {\n margin-inline-start: auto;\n}\n\n.saltToolbarNextOverflow-slot[data-align=\"center\"] {\n margin-inline-start: auto;\n margin-inline-end: auto;\n}\n\n.saltToolbarNextOverflow-item {\n align-items: center;\n display: flex;\n flex-shrink: 0;\n min-width: 0;\n}\n\n.saltToolbarNextOverflow-menu {\n display: flex;\n flex-shrink: 0;\n}\n\n.saltToolbarNextOverflow-itemHost,\n.saltToolbarNextOverflow-contentHost {\n display: contents;\n}\n\n.saltToolbarNextOverflow-trigger {\n white-space: nowrap;\n}\n\n.saltToolbarNextOverflow-panel {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-radius: var(--salt-palette-corner, 0);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n max-width: min(32rem, calc(100vw - var(--salt-spacing-300)));\n overflow: auto;\n position: absolute;\n z-index: var(--salt-zIndex-flyover);\n}\n\n/* TODO: improve this as brittle */\n.saltToolbarNextOverflow-floatingDescendant.saltToolbarNextOverflow-floatingDescendant {\n z-index: calc(var(--salt-zIndex-flyover) + var(--salt-zIndex-default));\n}\n\n.saltToolbarNextOverflow-panelContent {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n gap: var(--salt-spacing-100);\n max-width: inherit;\n min-width: max-content;\n padding: var(--salt-spacing-100);\n}\n\n.saltToolbarNextOverflow-panel .saltTooltrayNext[data-align=\"center\"],\n.saltToolbarNextOverflow-panel .saltTooltrayNext[data-align=\"end\"] {\n margin-inline-start: 0;\n margin-inline-end: 0;\n}\n\n.saltToolbarNextOverflow-panel .saltTooltrayNext > * {\n inline-size: auto;\n}\n\n.saltToolbarNextOverflow-content > .saltToolbarNextOverflow-slot .saltTooltrayNext[data-align=\"center\"],\n.saltToolbarNextOverflow-content > .saltToolbarNextOverflow-slot .saltTooltrayNext[data-align=\"end\"] {\n margin-inline-start: 0;\n margin-inline-end: 0;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=ToolbarNextOverflow.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolbarNextOverflow.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}