@salt-ds/core 1.73.0 → 1.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/css/salt-core.css +269 -28
  3. package/dist-cjs/drawer/Drawer.css.js +1 -1
  4. package/dist-cjs/drawer/Drawer.js +54 -6
  5. package/dist-cjs/drawer/Drawer.js.map +1 -1
  6. package/dist-cjs/drawer/DrawerContext.js +2 -0
  7. package/dist-cjs/drawer/DrawerContext.js.map +1 -1
  8. package/dist-cjs/drawer/DrawerFooter.css.js +1 -1
  9. package/dist-cjs/drawer/DrawerHeader.css.js +1 -1
  10. package/dist-cjs/drawer/DrawerHeader.js +6 -3
  11. package/dist-cjs/drawer/DrawerHeader.js.map +1 -1
  12. package/dist-cjs/drawer/internal/DrawerResizeGuide.css.js +6 -0
  13. package/dist-cjs/drawer/internal/DrawerResizeGuide.css.js.map +1 -0
  14. package/dist-cjs/drawer/internal/DrawerResizeGuide.js +44 -0
  15. package/dist-cjs/drawer/internal/DrawerResizeGuide.js.map +1 -0
  16. package/dist-cjs/drawer/internal/DrawerResizeHandle.css.js +6 -0
  17. package/dist-cjs/drawer/internal/DrawerResizeHandle.css.js.map +1 -0
  18. package/dist-cjs/drawer/internal/DrawerResizeHandle.js +43 -0
  19. package/dist-cjs/drawer/internal/DrawerResizeHandle.js.map +1 -0
  20. package/dist-cjs/drawer/internal/useDrawerResize.js +519 -0
  21. package/dist-cjs/drawer/internal/useDrawerResize.js.map +1 -0
  22. package/dist-cjs/link-button/LinkButton.css.js +1 -1
  23. package/dist-cjs/menu/MenuAlignmentContext.js +55 -0
  24. package/dist-cjs/menu/MenuAlignmentContext.js.map +1 -0
  25. package/dist-cjs/menu/MenuBase.js +9 -3
  26. package/dist-cjs/menu/MenuBase.js.map +1 -1
  27. package/dist-cjs/menu/MenuGroup.js +42 -3
  28. package/dist-cjs/menu/MenuGroup.js.map +1 -1
  29. package/dist-cjs/menu/MenuGroupContext.js +27 -0
  30. package/dist-cjs/menu/MenuGroupContext.js.map +1 -0
  31. package/dist-cjs/menu/MenuItem.css.js +1 -1
  32. package/dist-cjs/menu/MenuItem.js +176 -50
  33. package/dist-cjs/menu/MenuItem.js.map +1 -1
  34. package/dist-cjs/menu/MenuPanel.js +12 -3
  35. package/dist-cjs/menu/MenuPanel.js.map +1 -1
  36. package/dist-cjs/menu/MenuPanelContext.js +3 -1
  37. package/dist-cjs/menu/MenuPanelContext.js.map +1 -1
  38. package/dist-cjs/toggle-button/ToggleButton.css.js +1 -1
  39. package/dist-cjs/tree/TreeNodeTrigger.css.js +1 -1
  40. package/dist-cjs/tree/TreeNodeTrigger.js +0 -1
  41. package/dist-cjs/tree/TreeNodeTrigger.js.map +1 -1
  42. package/dist-es/drawer/Drawer.css.js +1 -1
  43. package/dist-es/drawer/Drawer.js +54 -6
  44. package/dist-es/drawer/Drawer.js.map +1 -1
  45. package/dist-es/drawer/DrawerContext.js +2 -0
  46. package/dist-es/drawer/DrawerContext.js.map +1 -1
  47. package/dist-es/drawer/DrawerFooter.css.js +1 -1
  48. package/dist-es/drawer/DrawerHeader.css.js +1 -1
  49. package/dist-es/drawer/DrawerHeader.js +6 -3
  50. package/dist-es/drawer/DrawerHeader.js.map +1 -1
  51. package/dist-es/drawer/internal/DrawerResizeGuide.css.js +4 -0
  52. package/dist-es/drawer/internal/DrawerResizeGuide.css.js.map +1 -0
  53. package/dist-es/drawer/internal/DrawerResizeGuide.js +42 -0
  54. package/dist-es/drawer/internal/DrawerResizeGuide.js.map +1 -0
  55. package/dist-es/drawer/internal/DrawerResizeHandle.css.js +4 -0
  56. package/dist-es/drawer/internal/DrawerResizeHandle.css.js.map +1 -0
  57. package/dist-es/drawer/internal/DrawerResizeHandle.js +41 -0
  58. package/dist-es/drawer/internal/DrawerResizeHandle.js.map +1 -0
  59. package/dist-es/drawer/internal/useDrawerResize.js +517 -0
  60. package/dist-es/drawer/internal/useDrawerResize.js.map +1 -0
  61. package/dist-es/link-button/LinkButton.css.js +1 -1
  62. package/dist-es/menu/MenuAlignmentContext.js +50 -0
  63. package/dist-es/menu/MenuAlignmentContext.js.map +1 -0
  64. package/dist-es/menu/MenuBase.js +9 -3
  65. package/dist-es/menu/MenuBase.js.map +1 -1
  66. package/dist-es/menu/MenuGroup.js +44 -5
  67. package/dist-es/menu/MenuGroup.js.map +1 -1
  68. package/dist-es/menu/MenuGroupContext.js +23 -0
  69. package/dist-es/menu/MenuGroupContext.js.map +1 -0
  70. package/dist-es/menu/MenuItem.css.js +1 -1
  71. package/dist-es/menu/MenuItem.js +177 -51
  72. package/dist-es/menu/MenuItem.js.map +1 -1
  73. package/dist-es/menu/MenuPanel.js +12 -3
  74. package/dist-es/menu/MenuPanel.js.map +1 -1
  75. package/dist-es/menu/MenuPanelContext.js +3 -1
  76. package/dist-es/menu/MenuPanelContext.js.map +1 -1
  77. package/dist-es/toggle-button/ToggleButton.css.js +1 -1
  78. package/dist-es/tree/TreeNodeTrigger.css.js +1 -1
  79. package/dist-es/tree/TreeNodeTrigger.js +0 -1
  80. package/dist-es/tree/TreeNodeTrigger.js.map +1 -1
  81. package/dist-types/drawer/Drawer.d.ts +6 -0
  82. package/dist-types/drawer/DrawerContext.d.ts +3 -0
  83. package/dist-types/drawer/DrawerHeader.d.ts +1 -1
  84. package/dist-types/drawer/internal/DrawerResizeGuide.d.ts +7 -0
  85. package/dist-types/drawer/internal/DrawerResizeHandle.d.ts +8 -0
  86. package/dist-types/drawer/internal/index.d.ts +3 -0
  87. package/dist-types/drawer/internal/useDrawerResize.d.ts +34 -0
  88. package/dist-types/menu/MenuAlignmentContext.d.ts +14 -0
  89. package/dist-types/menu/MenuGroup.d.ts +26 -4
  90. package/dist-types/menu/MenuGroupContext.d.ts +10 -0
  91. package/dist-types/menu/MenuItem.d.ts +4 -0
  92. package/dist-types/menu/MenuPanelContext.d.ts +2 -0
  93. package/package.json +1 -1
@@ -0,0 +1,519 @@
1
+ 'use strict';
2
+
3
+ var window = require('@salt-ds/window');
4
+ var React = require('react');
5
+ require('clsx');
6
+ require('react/jsx-runtime');
7
+ var useEventCallback = require('../../utils/useEventCallback.js');
8
+ require('../../utils/useFloatingUI/useFloatingUI.js');
9
+ require('../../utils/useId.js');
10
+ var useIsomorphicLayoutEffect = require('../../utils/useIsomorphicLayoutEffect.js');
11
+ require('../../salt-provider/SaltProvider.js');
12
+ require('../../viewport/ViewportProvider.js');
13
+
14
+ const KEYBOARD_STEP = 8;
15
+ const PROBE_SIZE = 1e6;
16
+ const CLICK_THRESHOLD = 4;
17
+ const isElement = (target) => target !== null && target.nodeType === 1;
18
+ const focusWithoutRing = (element) => element == null ? void 0 : element.focus({
19
+ preventScroll: true,
20
+ focusVisible: false
21
+ });
22
+ const setDocumentCursor = (ownerDocument, cursor) => {
23
+ const view = ownerDocument.defaultView;
24
+ if (!view || !ownerDocument.adoptedStyleSheets) return void 0;
25
+ const sheet = new view.CSSStyleSheet();
26
+ sheet.replaceSync(`*, *:hover { cursor: ${cursor} !important; }`);
27
+ ownerDocument.adoptedStyleSheets = [
28
+ ...ownerDocument.adoptedStyleSheets,
29
+ sheet
30
+ ];
31
+ return () => {
32
+ ownerDocument.adoptedStyleSheets = ownerDocument.adoptedStyleSheets.filter(
33
+ (adopted) => adopted !== sheet
34
+ );
35
+ };
36
+ };
37
+ const isHorizontal = (position) => position === "left" || position === "right";
38
+ const growsWithCoordinate = (position) => position === "left" || position === "top";
39
+ const measure = (element, horizontal) => {
40
+ const { width, height } = element.getBoundingClientRect();
41
+ return horizontal ? width : height;
42
+ };
43
+ const restoreStyle = (style, property, value, priority) => {
44
+ if (value) {
45
+ style.setProperty(property, value, priority);
46
+ } else {
47
+ style.removeProperty(property);
48
+ }
49
+ };
50
+ const probeBounds = (element, horizontal) => {
51
+ const property = horizontal ? "width" : "height";
52
+ const { style } = element;
53
+ const previousValue = style.getPropertyValue(property);
54
+ const previousPriority = style.getPropertyPriority(property);
55
+ const previousTransition = style.getPropertyValue("transition-property");
56
+ const previousTransitionPriority = style.getPropertyPriority(
57
+ "transition-property"
58
+ );
59
+ style.setProperty("transition-property", "none", "important");
60
+ style.setProperty(property, "0px", "important");
61
+ const min = measure(element, horizontal);
62
+ style.setProperty(property, `${PROBE_SIZE}px`, "important");
63
+ const max = measure(element, horizontal);
64
+ restoreStyle(style, property, previousValue, previousPriority);
65
+ measure(element, horizontal);
66
+ restoreStyle(
67
+ style,
68
+ "transition-property",
69
+ previousTransition,
70
+ previousTransitionPriority
71
+ );
72
+ return { min, max: Math.max(min, max) };
73
+ };
74
+ const clamp = (value, { min, max }) => Math.min(Math.max(value, min), max);
75
+ const sizeFromPoint = (rect, position, { clientX: x, clientY: y }) => {
76
+ switch (position) {
77
+ case "left":
78
+ return x - rect.left;
79
+ case "right":
80
+ return rect.right - x;
81
+ case "top":
82
+ return y - rect.top;
83
+ case "bottom":
84
+ return rect.bottom - y;
85
+ }
86
+ };
87
+ const edgeFromSize = (rect, position, size) => {
88
+ switch (position) {
89
+ case "left":
90
+ return rect.left + size;
91
+ case "right":
92
+ return rect.right - size;
93
+ case "top":
94
+ return rect.top + size;
95
+ case "bottom":
96
+ return rect.bottom - size;
97
+ }
98
+ };
99
+ function useDrawerResize({
100
+ enabled,
101
+ position,
102
+ element
103
+ }) {
104
+ const horizontal = isHorizontal(position);
105
+ const targetWindow = window.useWindow();
106
+ const [sizeState, setSizeState] = React.useState(void 0);
107
+ const [sizeAxisHorizontal, setSizeAxisHorizontal] = React.useState(horizontal);
108
+ const size = enabled && sizeAxisHorizontal === horizontal ? sizeState : void 0;
109
+ const [interaction, setInteraction] = React.useState("inactive");
110
+ const [metrics, setMetrics] = React.useState(
111
+ null
112
+ );
113
+ const dragRef = React.useRef(null);
114
+ const placingRef = React.useRef(null);
115
+ const handleRef = React.useRef(null);
116
+ const guideRef = React.useRef(null);
117
+ const cancelResizeEventRef = React.useRef(null);
118
+ const restoreSizeRef = React.useRef(null);
119
+ const initialSizeRef = React.useRef(null);
120
+ const axisRef = React.useRef(horizontal);
121
+ const boundsRef = React.useRef(null);
122
+ const readMetrics = useEventCallback.useEventCallback((reuseBounds = false) => {
123
+ if (!element) return null;
124
+ const bounds = reuseBounds && boundsRef.current ? boundsRef.current : probeBounds(element, horizontal);
125
+ boundsRef.current = bounds;
126
+ const current = clamp(measure(element, horizontal), bounds);
127
+ const next = { ...bounds, current };
128
+ setMetrics(next);
129
+ return next;
130
+ });
131
+ const applySize = (nextSize) => {
132
+ setSizeState(nextSize);
133
+ setSizeAxisHorizontal(horizontal);
134
+ };
135
+ const isOverHandle = ({
136
+ clientX: x,
137
+ clientY: y
138
+ }) => {
139
+ var _a;
140
+ const rect = (_a = handleRef.current) == null ? void 0 : _a.getBoundingClientRect();
141
+ return rect !== void 0 && x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
142
+ };
143
+ const isHandle = useEventCallback.useEventCallback(
144
+ (target) => {
145
+ var _a;
146
+ return enabled && isElement(target) && ((_a = handleRef.current) == null ? void 0 : _a.contains(target)) === true;
147
+ }
148
+ );
149
+ const startDrag = useEventCallback.useEventCallback((event) => {
150
+ const current = readMetrics();
151
+ if (!current) return;
152
+ event.preventDefault();
153
+ dragRef.current = {
154
+ pointerId: event.pointerId,
155
+ startX: event.clientX,
156
+ startY: event.clientY,
157
+ originSize: current.current,
158
+ previousSize: current.current,
159
+ cancelSize: size,
160
+ min: current.min,
161
+ max: current.max,
162
+ moved: false
163
+ };
164
+ focusWithoutRing(handleRef.current);
165
+ setInteraction("active");
166
+ });
167
+ const moveDrag = useEventCallback.useEventCallback((event, drag) => {
168
+ var _a;
169
+ if (!drag.moved) {
170
+ if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < CLICK_THRESHOLD) {
171
+ return;
172
+ }
173
+ drag.moved = true;
174
+ try {
175
+ (_a = handleRef.current) == null ? void 0 : _a.setPointerCapture(event.pointerId);
176
+ } catch {
177
+ }
178
+ }
179
+ const coordinate = horizontal ? event.clientX : event.clientY;
180
+ const origin = horizontal ? drag.startX : drag.startY;
181
+ const direction = growsWithCoordinate(position) ? 1 : -1;
182
+ const nextSize = clamp(
183
+ drag.originSize + (coordinate - origin) * direction,
184
+ drag
185
+ );
186
+ if (nextSize !== drag.previousSize) {
187
+ drag.previousSize = nextSize;
188
+ applySize(nextSize);
189
+ }
190
+ });
191
+ const moveGuide = (offset) => {
192
+ var _a;
193
+ const placing = placingRef.current;
194
+ if (!placing) return;
195
+ placing.guideOffset = offset;
196
+ (_a = guideRef.current) == null ? void 0 : _a.style.setProperty(
197
+ "--drawerResizeGuide-offset",
198
+ `${offset}px`
199
+ );
200
+ };
201
+ const setGuide = React.useCallback((node) => {
202
+ guideRef.current = node;
203
+ const placing = placingRef.current;
204
+ if (node && placing) {
205
+ node.style.setProperty(
206
+ "--drawerResizeGuide-offset",
207
+ `${placing.guideOffset}px`
208
+ );
209
+ }
210
+ }, []);
211
+ const startPlacing = useEventCallback.useEventCallback((drag) => {
212
+ if (!element) return;
213
+ placingRef.current = {
214
+ min: drag.min,
215
+ max: drag.max,
216
+ guideOffset: edgeFromSize(
217
+ element.getBoundingClientRect(),
218
+ position,
219
+ drag.originSize
220
+ ),
221
+ pressed: false
222
+ };
223
+ setInteraction("placing");
224
+ });
225
+ const stopPlacing = useEventCallback.useEventCallback(() => {
226
+ if (!placingRef.current) return;
227
+ placingRef.current = null;
228
+ setInteraction("inactive");
229
+ });
230
+ const endDrag = useEventCallback.useEventCallback((event) => {
231
+ var _a;
232
+ const drag = dragRef.current;
233
+ if (!drag) return;
234
+ dragRef.current = null;
235
+ const pointer = event;
236
+ const stillHovered = "pointerType" in event && pointer.pointerType !== "touch" && isHandle(
237
+ ((_a = handleRef.current) == null ? void 0 : _a.ownerDocument.elementFromPoint(
238
+ pointer.clientX,
239
+ pointer.clientY
240
+ )) ?? null
241
+ );
242
+ setInteraction(stillHovered ? "hover" : "inactive");
243
+ });
244
+ const cancelDrag = useEventCallback.useEventCallback((event) => {
245
+ const drag = dragRef.current;
246
+ if (!drag) return;
247
+ const handle = handleRef.current;
248
+ if (handle == null ? void 0 : handle.hasPointerCapture(drag.pointerId)) {
249
+ handle.releasePointerCapture(drag.pointerId);
250
+ }
251
+ setSizeState(drag.cancelSize);
252
+ endDrag(event);
253
+ });
254
+ const sizeToPlace = (target, rect, point, bounds) => clamp(
255
+ isOverHandle(point) ? measure(target, horizontal) : sizeFromPoint(rect, position, point),
256
+ bounds
257
+ );
258
+ const moveGuideToPointer = (event) => {
259
+ const placing = placingRef.current;
260
+ if (!placing || !element) return;
261
+ const rect = element.getBoundingClientRect();
262
+ moveGuide(
263
+ edgeFromSize(rect, position, sizeToPlace(element, rect, event, placing))
264
+ );
265
+ };
266
+ const onGuidePointerDown = useEventCallback.useEventCallback(
267
+ (event) => {
268
+ const placing = placingRef.current;
269
+ if (!placing) return;
270
+ if (event.pointerType === "mouse" && event.button > 0) {
271
+ stopPlacing();
272
+ return;
273
+ }
274
+ event.preventDefault();
275
+ event.stopPropagation();
276
+ placing.pressed = true;
277
+ moveGuideToPointer(event);
278
+ }
279
+ );
280
+ const onGuidePointerMove = useEventCallback.useEventCallback(
281
+ (event) => {
282
+ moveGuideToPointer(event);
283
+ }
284
+ );
285
+ const onGuideClick = useEventCallback.useEventCallback(
286
+ (event) => {
287
+ const placing = placingRef.current;
288
+ if (!(placing == null ? void 0 : placing.pressed) || !element) return;
289
+ event.stopPropagation();
290
+ stopPlacing();
291
+ const rect = element.getBoundingClientRect();
292
+ const nextSize = sizeToPlace(element, rect, event, placing);
293
+ const current = clamp(measure(element, horizontal), placing);
294
+ if (nextSize !== current) {
295
+ applySize(nextSize);
296
+ }
297
+ focusWithoutRing(handleRef.current);
298
+ }
299
+ );
300
+ React.useEffect(() => {
301
+ if (!enabled || !element || !targetWindow) return;
302
+ const ownerDocument = targetWindow.document;
303
+ const onPointerDown = (event) => {
304
+ if (event.defaultPrevented || !event.isPrimary) return;
305
+ if (event.pointerType === "mouse" && event.button > 0) return;
306
+ if (placingRef.current || dragRef.current || !isHandle(event.target)) {
307
+ return;
308
+ }
309
+ startDrag(event);
310
+ };
311
+ const onPointerMove = (event) => {
312
+ if (event.defaultPrevented) return;
313
+ if (placingRef.current) return;
314
+ const drag = dragRef.current;
315
+ if (!drag) {
316
+ if (event.pointerType !== "touch") {
317
+ setInteraction(isHandle(event.target) ? "hover" : "inactive");
318
+ }
319
+ return;
320
+ }
321
+ if (event.pointerId !== drag.pointerId) return;
322
+ if (event.buttons === 0) {
323
+ endDrag(event);
324
+ return;
325
+ }
326
+ moveDrag(event, drag);
327
+ };
328
+ const onPointerUp = (event) => {
329
+ if (event.defaultPrevented) return;
330
+ if (event.pointerType === "mouse" && event.button > 0) return;
331
+ const drag = dragRef.current;
332
+ if ((drag == null ? void 0 : drag.pointerId) !== event.pointerId) return;
333
+ event.preventDefault();
334
+ if (!drag.moved) {
335
+ dragRef.current = null;
336
+ startPlacing(drag);
337
+ return;
338
+ }
339
+ endDrag(event);
340
+ };
341
+ const onPointerCancel = (event) => {
342
+ var _a;
343
+ if (((_a = dragRef.current) == null ? void 0 : _a.pointerId) === event.pointerId) endDrag(event);
344
+ };
345
+ const onContextMenu = (event) => {
346
+ if (!event.defaultPrevented) endDrag(event);
347
+ };
348
+ const onKeyDown2 = (event) => {
349
+ if (event.key !== "Escape" || !dragRef.current) return;
350
+ event.preventDefault();
351
+ cancelResizeEventRef.current = event;
352
+ cancelDrag(event);
353
+ };
354
+ const onBlur = (event) => {
355
+ endDrag(event);
356
+ stopPlacing();
357
+ };
358
+ const onPointerOut = (event) => {
359
+ if (!dragRef.current && isElement(event.relatedTarget) && event.relatedTarget.tagName === "IFRAME") {
360
+ setInteraction("inactive");
361
+ }
362
+ };
363
+ ownerDocument.addEventListener("pointerdown", onPointerDown, true);
364
+ ownerDocument.addEventListener("pointermove", onPointerMove);
365
+ ownerDocument.addEventListener("pointerup", onPointerUp, true);
366
+ ownerDocument.addEventListener("pointercancel", onPointerCancel);
367
+ ownerDocument.addEventListener("contextmenu", onContextMenu, true);
368
+ ownerDocument.addEventListener("keydown", onKeyDown2, true);
369
+ ownerDocument.addEventListener("pointerout", onPointerOut);
370
+ targetWindow.addEventListener("blur", onBlur);
371
+ return () => {
372
+ ownerDocument.removeEventListener("pointerdown", onPointerDown, true);
373
+ ownerDocument.removeEventListener("pointermove", onPointerMove);
374
+ ownerDocument.removeEventListener("pointerup", onPointerUp, true);
375
+ ownerDocument.removeEventListener("pointercancel", onPointerCancel);
376
+ ownerDocument.removeEventListener("contextmenu", onContextMenu, true);
377
+ ownerDocument.removeEventListener("keydown", onKeyDown2, true);
378
+ ownerDocument.removeEventListener("pointerout", onPointerOut);
379
+ targetWindow.removeEventListener("blur", onBlur);
380
+ dragRef.current = null;
381
+ placingRef.current = null;
382
+ setInteraction("inactive");
383
+ };
384
+ }, [
385
+ enabled,
386
+ element,
387
+ targetWindow,
388
+ isHandle,
389
+ startDrag,
390
+ moveDrag,
391
+ endDrag,
392
+ cancelDrag,
393
+ startPlacing,
394
+ stopPlacing
395
+ ]);
396
+ const showResizeCursor = interaction !== "inactive";
397
+ React.useEffect(() => {
398
+ if (!showResizeCursor || !targetWindow) return;
399
+ return setDocumentCursor(
400
+ targetWindow.document,
401
+ horizontal ? "var(--salt-cursor-drag-ew, ew-resize)" : "var(--salt-cursor-drag-ns, ns-resize)"
402
+ );
403
+ }, [showResizeCursor, targetWindow, horizontal]);
404
+ const onKeyDown = useEventCallback.useEventCallback(
405
+ (event) => {
406
+ const { key } = event;
407
+ if (placingRef.current) {
408
+ stopPlacing();
409
+ if (key === "Escape") {
410
+ event.preventDefault();
411
+ cancelResizeEventRef.current = event.nativeEvent;
412
+ return;
413
+ }
414
+ }
415
+ const resizeKeys = horizontal ? ["ArrowLeft", "ArrowRight"] : ["ArrowUp", "ArrowDown"];
416
+ if (!resizeKeys.includes(key) && key !== "Home" && key !== "End" && key !== "Enter") {
417
+ return;
418
+ }
419
+ const current = readMetrics(true);
420
+ if (!current) return;
421
+ event.preventDefault();
422
+ const collapsed = current.current <= current.min + 1;
423
+ let nextSize;
424
+ if (key === "Home") {
425
+ if (!collapsed) {
426
+ restoreSizeRef.current = current.current;
427
+ }
428
+ nextSize = current.min;
429
+ } else if (key === "End") {
430
+ nextSize = current.max;
431
+ } else if (key === "Enter") {
432
+ if (collapsed) {
433
+ nextSize = restoreSizeRef.current ?? initialSizeRef.current ?? current.max;
434
+ } else {
435
+ restoreSizeRef.current = current.current;
436
+ nextSize = current.min;
437
+ }
438
+ } else {
439
+ const towardsHigherCoordinate = key === "ArrowRight" || key === "ArrowDown";
440
+ const direction = towardsHigherCoordinate === growsWithCoordinate(position) ? 1 : -1;
441
+ nextSize = current.current + KEYBOARD_STEP * direction;
442
+ }
443
+ nextSize = clamp(nextSize, current);
444
+ if (nextSize === current.current) return;
445
+ applySize(nextSize);
446
+ }
447
+ );
448
+ const isCancelResizeEvent = React.useCallback(
449
+ (event) => event !== void 0 && event === cancelResizeEventRef.current,
450
+ []
451
+ );
452
+ const onFocus = React.useCallback(() => {
453
+ if (!dragRef.current) readMetrics();
454
+ }, [readMetrics]);
455
+ const setHandle = React.useCallback((node) => {
456
+ handleRef.current = node;
457
+ }, []);
458
+ React.useEffect(() => {
459
+ if (!enabled) {
460
+ setSizeState(void 0);
461
+ setMetrics(null);
462
+ restoreSizeRef.current = null;
463
+ initialSizeRef.current = null;
464
+ }
465
+ }, [enabled]);
466
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
467
+ if (!enabled || !element) return;
468
+ if (axisRef.current !== horizontal) {
469
+ axisRef.current = horizontal;
470
+ restoreSizeRef.current = null;
471
+ initialSizeRef.current = null;
472
+ }
473
+ const next = readMetrics();
474
+ if (next && initialSizeRef.current === null) {
475
+ initialSizeRef.current = next.current;
476
+ }
477
+ }, [enabled, element, horizontal, readMetrics]);
478
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
479
+ if (!enabled || !element) return;
480
+ readMetrics(true);
481
+ }, [enabled, element, size, readMetrics]);
482
+ React.useEffect(() => {
483
+ if (!enabled || !element || !targetWindow) return;
484
+ const onResize = () => {
485
+ stopPlacing();
486
+ readMetrics();
487
+ };
488
+ targetWindow.addEventListener("resize", onResize);
489
+ return () => targetWindow.removeEventListener("resize", onResize);
490
+ }, [enabled, element, targetWindow, readMetrics, stopPlacing]);
491
+ return {
492
+ sizeStyle: size !== void 0 ? { [horizontal ? "width" : "height"]: size } : void 0,
493
+ isResizing: interaction === "active" || interaction === "placing",
494
+ isHovered: interaction === "hover",
495
+ isPlacing: interaction === "placing",
496
+ isCancelResizeEvent,
497
+ separatorProps: {
498
+ role: "separator",
499
+ tabIndex: 0,
500
+ ref: setHandle,
501
+ "aria-orientation": horizontal ? "vertical" : "horizontal",
502
+ "aria-valuenow": metrics ? Math.round(metrics.current) : void 0,
503
+ "aria-valuemin": metrics ? Math.round(metrics.min) : void 0,
504
+ "aria-valuemax": metrics ? Math.round(metrics.max) : void 0,
505
+ onKeyDown,
506
+ onFocus
507
+ },
508
+ guideProps: {
509
+ ref: setGuide,
510
+ onPointerDown: onGuidePointerDown,
511
+ onPointerMove: onGuidePointerMove,
512
+ onClick: onGuideClick,
513
+ onContextMenu: stopPlacing
514
+ }
515
+ };
516
+ }
517
+
518
+ exports.useDrawerResize = useDrawerResize;
519
+ //# sourceMappingURL=useDrawerResize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDrawerResize.js","sources":["../src/drawer/internal/useDrawerResize.ts"],"sourcesContent":["import { useWindow } from \"@salt-ds/window\";\nimport type {\n AriaAttributes,\n CSSProperties,\n KeyboardEvent as ReactKeyboardEvent,\n MouseEvent as ReactMouseEvent,\n PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useEventCallback, useIsomorphicLayoutEffect } from \"../../utils\";\nimport type { DrawerProps } from \"../Drawer\";\n\ntype DrawerPosition = NonNullable<DrawerProps[\"position\"]>;\n\ninterface Bounds {\n min: number;\n max: number;\n}\n\ninterface DragState extends Bounds {\n pointerId: number;\n startX: number;\n startY: number;\n originSize: number;\n previousSize: number;\n cancelSize: number | undefined;\n moved: boolean;\n}\n\n/** Click-to-place resizing */\ninterface PlacingState extends Bounds {\n /** In viewport coordinates. */\n guideOffset: number;\n /** The placing press started on the guide layer. */\n pressed: boolean;\n}\n\ntype Interaction = \"inactive\" | \"hover\" | \"active\" | \"placing\";\n\nexport interface SeparatorProps\n extends Pick<\n AriaAttributes,\n \"aria-orientation\" | \"aria-valuenow\" | \"aria-valuemin\" | \"aria-valuemax\"\n > {\n role: \"separator\";\n tabIndex: number;\n ref: (element: HTMLElement | null) => void;\n onKeyDown: (event: ReactKeyboardEvent<HTMLElement>) => void;\n onFocus: () => void;\n}\n\nexport interface GuideProps {\n ref: (element: HTMLElement | null) => void;\n onPointerDown: (event: ReactPointerEvent<HTMLElement>) => void;\n onPointerMove: (event: ReactPointerEvent<HTMLElement>) => void;\n onClick: (event: ReactMouseEvent<HTMLElement>) => void;\n onContextMenu: () => void;\n}\n\nexport interface UseDrawerResizeProps {\n enabled: boolean;\n position: DrawerPosition;\n element: HTMLElement | null | undefined;\n}\n\nexport interface UseDrawerResizeResult {\n sizeStyle: CSSProperties | undefined;\n isResizing: boolean;\n isHovered: boolean;\n isPlacing: boolean;\n /** Whether the event is the Escape that cancelled a resize, so it shouldn't close the drawer. */\n isCancelResizeEvent: (event?: Event) => boolean;\n separatorProps: SeparatorProps;\n guideProps: GuideProps;\n}\n\nconst KEYBOARD_STEP = 8;\nconst PROBE_SIZE = 1e6;\n// A press that moves less than this is a click on the handle, not a drag.\nconst CLICK_THRESHOLD = 4;\n\nconst isElement = (target: EventTarget | null): target is Element =>\n target !== null && (target as Node).nodeType === 1;\n\nconst focusWithoutRing = (element: HTMLElement | null) =>\n element?.focus({\n preventScroll: true,\n focusVisible: false,\n } as FocusOptions);\n\n/** Shows the cursor everywhere in the document, over any element's own cursor. */\nconst setDocumentCursor = (ownerDocument: Document, cursor: string) => {\n const view = ownerDocument.defaultView as (Window & typeof globalThis) | null;\n if (!view || !ownerDocument.adoptedStyleSheets) return undefined;\n const sheet = new view.CSSStyleSheet();\n sheet.replaceSync(`*, *:hover { cursor: ${cursor} !important; }`);\n ownerDocument.adoptedStyleSheets = [\n ...ownerDocument.adoptedStyleSheets,\n sheet,\n ];\n return () => {\n ownerDocument.adoptedStyleSheets = ownerDocument.adoptedStyleSheets.filter(\n (adopted) => adopted !== sheet,\n );\n };\n};\n\nconst isHorizontal = (position: DrawerPosition) =>\n position === \"left\" || position === \"right\";\n\nconst growsWithCoordinate = (position: DrawerPosition) =>\n position === \"left\" || position === \"top\";\n\nconst measure = (element: HTMLElement, horizontal: boolean) => {\n const { width, height } = element.getBoundingClientRect();\n return horizontal ? width : height;\n};\n\nconst restoreStyle = (\n style: CSSStyleDeclaration,\n property: string,\n value: string,\n priority: string,\n) => {\n if (value) {\n style.setProperty(property, value, priority);\n } else {\n style.removeProperty(property);\n }\n};\n\n/** Resolves the drawer's CSS min/max size by briefly forcing it to both extremes. */\nconst probeBounds = (element: HTMLElement, horizontal: boolean): Bounds => {\n const property = horizontal ? \"width\" : \"height\";\n const { style } = element;\n const previousValue = style.getPropertyValue(property);\n const previousPriority = style.getPropertyPriority(property);\n const previousTransition = style.getPropertyValue(\"transition-property\");\n const previousTransitionPriority = style.getPropertyPriority(\n \"transition-property\",\n );\n\n // A transition would report the current size at both extremes.\n style.setProperty(\"transition-property\", \"none\", \"important\");\n style.setProperty(property, \"0px\", \"important\");\n const min = measure(element, horizontal);\n style.setProperty(property, `${PROBE_SIZE}px`, \"important\");\n const max = measure(element, horizontal);\n\n restoreStyle(style, property, previousValue, previousPriority);\n // Applies the restored size before transitions return, so it doesn't animate.\n measure(element, horizontal);\n restoreStyle(\n style,\n \"transition-property\",\n previousTransition,\n previousTransitionPriority,\n );\n\n return { min, max: Math.max(min, max) };\n};\n\nconst clamp = (value: number, { min, max }: Bounds) =>\n Math.min(Math.max(value, min), max);\n\n/** Size the drawer needs for its moving edge to sit at the given point. */\nconst sizeFromPoint = (\n rect: DOMRect,\n position: DrawerPosition,\n { clientX: x, clientY: y }: Pick<MouseEvent, \"clientX\" | \"clientY\">,\n) => {\n switch (position) {\n case \"left\":\n return x - rect.left;\n case \"right\":\n return rect.right - x;\n case \"top\":\n return y - rect.top;\n case \"bottom\":\n return rect.bottom - y;\n }\n};\n\n/** Viewport coordinate of the moving edge for a given size. */\nconst edgeFromSize = (\n rect: DOMRect,\n position: DrawerPosition,\n size: number,\n) => {\n switch (position) {\n case \"left\":\n return rect.left + size;\n case \"right\":\n return rect.right - size;\n case \"top\":\n return rect.top + size;\n case \"bottom\":\n return rect.bottom - size;\n }\n};\n\nexport function useDrawerResize({\n enabled,\n position,\n element,\n}: UseDrawerResizeProps): UseDrawerResizeResult {\n const horizontal = isHorizontal(position);\n const targetWindow = useWindow();\n\n // Unset until the user resizes, so the drawer keeps its CSS size.\n const [sizeState, setSizeState] = useState<number | undefined>(undefined);\n // Drop the size when `position` switches axis.\n const [sizeAxisHorizontal, setSizeAxisHorizontal] = useState(horizontal);\n const size =\n enabled && sizeAxisHorizontal === horizontal ? sizeState : undefined;\n\n const [interaction, setInteraction] = useState<Interaction>(\"inactive\");\n const [metrics, setMetrics] = useState<(Bounds & { current: number }) | null>(\n null,\n );\n const dragRef = useRef<DragState | null>(null);\n const placingRef = useRef<PlacingState | null>(null);\n const handleRef = useRef<HTMLElement | null>(null);\n const guideRef = useRef<HTMLElement | null>(null);\n const cancelResizeEventRef = useRef<Event | null>(null);\n const restoreSizeRef = useRef<number | null>(null);\n const initialSizeRef = useRef<number | null>(null);\n const axisRef = useRef(horizontal);\n\n // Probing forces layout, so key presses reuse the last bounds.\n const boundsRef = useRef<Bounds | null>(null);\n\n const readMetrics = useEventCallback((reuseBounds = false) => {\n if (!element) return null;\n const bounds =\n reuseBounds && boundsRef.current\n ? boundsRef.current\n : probeBounds(element, horizontal);\n boundsRef.current = bounds;\n const current = clamp(measure(element, horizontal), bounds);\n const next = { ...bounds, current };\n setMetrics(next);\n return next;\n });\n\n const applySize = (nextSize: number) => {\n setSizeState(nextSize);\n setSizeAxisHorizontal(horizontal);\n };\n\n const isOverHandle = ({\n clientX: x,\n clientY: y,\n }: Pick<MouseEvent, \"clientX\" | \"clientY\">) => {\n const rect = handleRef.current?.getBoundingClientRect();\n return (\n rect !== undefined &&\n x >= rect.left &&\n x <= rect.right &&\n y >= rect.top &&\n y <= rect.bottom\n );\n };\n\n const isHandle = useEventCallback(\n (target: EventTarget | null) =>\n enabled &&\n isElement(target) &&\n handleRef.current?.contains(target) === true,\n );\n\n const startDrag = useEventCallback((event: PointerEvent) => {\n const current = readMetrics();\n if (!current) return;\n\n event.preventDefault();\n dragRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n originSize: current.current,\n previousSize: current.current,\n cancelSize: size,\n min: current.min,\n max: current.max,\n moved: false,\n };\n focusWithoutRing(handleRef.current);\n setInteraction(\"active\");\n });\n\n const moveDrag = useEventCallback((event: PointerEvent, drag: DragState) => {\n // Small movement keeps the press a click, so it can start placing the edge by click.\n if (!drag.moved) {\n if (\n Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) <\n CLICK_THRESHOLD\n ) {\n return;\n }\n drag.moved = true;\n try {\n handleRef.current?.setPointerCapture(event.pointerId);\n } catch {\n // The pointer is no longer active.\n }\n }\n\n const coordinate = horizontal ? event.clientX : event.clientY;\n const origin = horizontal ? drag.startX : drag.startY;\n const direction = growsWithCoordinate(position) ? 1 : -1;\n const nextSize = clamp(\n drag.originSize + (coordinate - origin) * direction,\n drag,\n );\n if (nextSize !== drag.previousSize) {\n drag.previousSize = nextSize;\n applySize(nextSize);\n }\n });\n\n // Set directly, to avoid a re-render on every pointer move.\n const moveGuide = (offset: number) => {\n const placing = placingRef.current;\n if (!placing) return;\n placing.guideOffset = offset;\n guideRef.current?.style.setProperty(\n \"--drawerResizeGuide-offset\",\n `${offset}px`,\n );\n };\n\n const setGuide = useCallback((node: HTMLElement | null) => {\n guideRef.current = node;\n const placing = placingRef.current;\n if (node && placing) {\n node.style.setProperty(\n \"--drawerResizeGuide-offset\",\n `${placing.guideOffset}px`,\n );\n }\n }, []);\n\n const startPlacing = useEventCallback((drag: DragState) => {\n if (!element) return;\n placingRef.current = {\n min: drag.min,\n max: drag.max,\n guideOffset: edgeFromSize(\n element.getBoundingClientRect(),\n position,\n drag.originSize,\n ),\n pressed: false,\n };\n setInteraction(\"placing\");\n });\n\n const stopPlacing = useEventCallback(() => {\n if (!placingRef.current) return;\n placingRef.current = null;\n setInteraction(\"inactive\");\n });\n\n const endDrag = useEventCallback((event: Event) => {\n const drag = dragRef.current;\n if (!drag) return;\n dragRef.current = null;\n // Pointer capture retargets the release to the handle.\n const pointer = event as PointerEvent;\n const stillHovered =\n \"pointerType\" in event &&\n pointer.pointerType !== \"touch\" &&\n isHandle(\n handleRef.current?.ownerDocument.elementFromPoint(\n pointer.clientX,\n pointer.clientY,\n ) ?? null,\n );\n setInteraction(stillHovered ? \"hover\" : \"inactive\");\n });\n\n const cancelDrag = useEventCallback((event: KeyboardEvent) => {\n const drag = dragRef.current;\n if (!drag) return;\n const handle = handleRef.current;\n if (handle?.hasPointerCapture(drag.pointerId)) {\n handle.releasePointerCapture(drag.pointerId);\n }\n setSizeState(drag.cancelSize);\n endDrag(event);\n });\n\n const sizeToPlace = (\n target: HTMLElement,\n rect: DOMRect,\n point: Pick<MouseEvent, \"clientX\" | \"clientY\">,\n bounds: Bounds,\n ) =>\n clamp(\n isOverHandle(point)\n ? measure(target, horizontal)\n : sizeFromPoint(rect, position, point),\n bounds,\n );\n\n const moveGuideToPointer = (\n event: Pick<MouseEvent, \"clientX\" | \"clientY\">,\n ) => {\n const placing = placingRef.current;\n if (!placing || !element) return;\n const rect = element.getBoundingClientRect();\n moveGuide(\n edgeFromSize(rect, position, sizeToPlace(element, rect, event, placing)),\n );\n };\n\n const onGuidePointerDown = useEventCallback(\n (event: ReactPointerEvent<HTMLElement>) => {\n const placing = placingRef.current;\n if (!placing) return;\n if (event.pointerType === \"mouse\" && event.button > 0) {\n stopPlacing();\n return;\n }\n // Keeps focus on the handle.\n event.preventDefault();\n // React bubbles events from the portal up to the drawer.\n event.stopPropagation();\n placing.pressed = true;\n moveGuideToPointer(event);\n },\n );\n\n const onGuidePointerMove = useEventCallback(\n (event: ReactPointerEvent<HTMLElement>) => {\n moveGuideToPointer(event);\n },\n );\n\n const onGuideClick = useEventCallback(\n (event: ReactMouseEvent<HTMLElement>) => {\n const placing = placingRef.current;\n // Ignores the click that started placing.\n if (!placing?.pressed || !element) return;\n event.stopPropagation();\n stopPlacing();\n // The drawer may have moved since placing started, e.g. while sliding in.\n const rect = element.getBoundingClientRect();\n const nextSize = sizeToPlace(element, rect, event, placing);\n const current = clamp(measure(element, horizontal), placing);\n if (nextSize !== current) {\n applySize(nextSize);\n }\n focusWithoutRing(handleRef.current);\n },\n );\n\n useEffect(() => {\n if (!enabled || !element || !targetWindow) return;\n const ownerDocument = targetWindow.document;\n\n const onPointerDown = (event: PointerEvent) => {\n if (event.defaultPrevented || !event.isPrimary) return;\n if (event.pointerType === \"mouse\" && event.button > 0) return;\n if (placingRef.current || dragRef.current || !isHandle(event.target)) {\n return;\n }\n startDrag(event);\n };\n\n const onPointerMove = (event: PointerEvent) => {\n if (event.defaultPrevented) return;\n if (placingRef.current) return;\n const drag = dragRef.current;\n if (!drag) {\n // Touch has no hover, so it would leave the hover state behind.\n if (event.pointerType !== \"touch\") {\n setInteraction(isHandle(event.target) ? \"hover\" : \"inactive\");\n }\n return;\n }\n if (event.pointerId !== drag.pointerId) return;\n // No buttons pressed means the release was missed, e.g. over an iframe.\n if (event.buttons === 0) {\n endDrag(event);\n return;\n }\n moveDrag(event, drag);\n };\n\n const onPointerUp = (event: PointerEvent) => {\n if (event.defaultPrevented) return;\n if (event.pointerType === \"mouse\" && event.button > 0) return;\n const drag = dragRef.current;\n if (drag?.pointerId !== event.pointerId) return;\n event.preventDefault();\n if (!drag.moved) {\n dragRef.current = null;\n startPlacing(drag);\n return;\n }\n endDrag(event);\n };\n\n const onPointerCancel = (event: PointerEvent) => {\n if (dragRef.current?.pointerId === event.pointerId) endDrag(event);\n };\n\n const onContextMenu = (event: MouseEvent) => {\n if (!event.defaultPrevented) endDrag(event);\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !dragRef.current) return;\n event.preventDefault();\n cancelResizeEventRef.current = event;\n cancelDrag(event);\n };\n\n const onBlur = (event: FocusEvent) => {\n endDrag(event);\n stopPlacing();\n };\n\n // \"pointerout\" doesn't fire when the pointer moves into an iframe, so hover would stick.\n const onPointerOut = (event: PointerEvent) => {\n if (\n !dragRef.current &&\n isElement(event.relatedTarget) &&\n event.relatedTarget.tagName === \"IFRAME\"\n ) {\n setInteraction(\"inactive\");\n }\n };\n\n ownerDocument.addEventListener(\"pointerdown\", onPointerDown, true);\n ownerDocument.addEventListener(\"pointermove\", onPointerMove);\n ownerDocument.addEventListener(\"pointerup\", onPointerUp, true);\n ownerDocument.addEventListener(\"pointercancel\", onPointerCancel);\n ownerDocument.addEventListener(\"contextmenu\", onContextMenu, true);\n // Capture, to run before the drawer closes on Escape.\n ownerDocument.addEventListener(\"keydown\", onKeyDown, true);\n ownerDocument.addEventListener(\"pointerout\", onPointerOut);\n targetWindow.addEventListener(\"blur\", onBlur);\n return () => {\n ownerDocument.removeEventListener(\"pointerdown\", onPointerDown, true);\n ownerDocument.removeEventListener(\"pointermove\", onPointerMove);\n ownerDocument.removeEventListener(\"pointerup\", onPointerUp, true);\n ownerDocument.removeEventListener(\"pointercancel\", onPointerCancel);\n ownerDocument.removeEventListener(\"contextmenu\", onContextMenu, true);\n ownerDocument.removeEventListener(\"keydown\", onKeyDown, true);\n ownerDocument.removeEventListener(\"pointerout\", onPointerOut);\n targetWindow.removeEventListener(\"blur\", onBlur);\n dragRef.current = null;\n placingRef.current = null;\n setInteraction(\"inactive\");\n };\n }, [\n enabled,\n element,\n targetWindow,\n isHandle,\n startDrag,\n moveDrag,\n endDrag,\n cancelDrag,\n startPlacing,\n stopPlacing,\n ]);\n\n const showResizeCursor = interaction !== \"inactive\";\n useEffect(() => {\n if (!showResizeCursor || !targetWindow) return;\n return setDocumentCursor(\n targetWindow.document,\n horizontal\n ? \"var(--salt-cursor-drag-ew, ew-resize)\"\n : \"var(--salt-cursor-drag-ns, ns-resize)\",\n );\n }, [showResizeCursor, targetWindow, horizontal]);\n\n const onKeyDown = useEventCallback(\n (event: ReactKeyboardEvent<HTMLElement>) => {\n const { key } = event;\n if (placingRef.current) {\n stopPlacing();\n if (key === \"Escape\") {\n event.preventDefault();\n cancelResizeEventRef.current = event.nativeEvent;\n return;\n }\n }\n const resizeKeys = horizontal\n ? [\"ArrowLeft\", \"ArrowRight\"]\n : [\"ArrowUp\", \"ArrowDown\"];\n if (\n !resizeKeys.includes(key) &&\n key !== \"Home\" &&\n key !== \"End\" &&\n key !== \"Enter\"\n ) {\n return;\n }\n\n const current = readMetrics(true);\n if (!current) return;\n\n event.preventDefault();\n\n const collapsed = current.current <= current.min + 1;\n let nextSize: number;\n if (key === \"Home\") {\n if (!collapsed) {\n restoreSizeRef.current = current.current;\n }\n nextSize = current.min;\n } else if (key === \"End\") {\n nextSize = current.max;\n } else if (key === \"Enter\") {\n if (collapsed) {\n nextSize =\n restoreSizeRef.current ?? initialSizeRef.current ?? current.max;\n } else {\n restoreSizeRef.current = current.current;\n nextSize = current.min;\n }\n } else {\n const towardsHigherCoordinate =\n key === \"ArrowRight\" || key === \"ArrowDown\";\n const direction =\n towardsHigherCoordinate === growsWithCoordinate(position) ? 1 : -1;\n nextSize = current.current + KEYBOARD_STEP * direction;\n }\n\n nextSize = clamp(nextSize, current);\n if (nextSize === current.current) return;\n applySize(nextSize);\n },\n );\n\n const isCancelResizeEvent = useCallback(\n (event?: Event) =>\n event !== undefined && event === cancelResizeEventRef.current,\n [],\n );\n\n const onFocus = useCallback(() => {\n if (!dragRef.current) readMetrics();\n }, [readMetrics]);\n\n const setHandle = useCallback((node: HTMLElement | null) => {\n handleRef.current = node;\n }, []);\n\n useEffect(() => {\n if (!enabled) {\n setSizeState(undefined);\n setMetrics(null);\n restoreSizeRef.current = null;\n initialSizeRef.current = null;\n }\n }, [enabled]);\n\n useIsomorphicLayoutEffect(() => {\n if (!enabled || !element) return;\n if (axisRef.current !== horizontal) {\n axisRef.current = horizontal;\n restoreSizeRef.current = null;\n initialSizeRef.current = null;\n }\n const next = readMetrics();\n if (next && initialSizeRef.current === null) {\n initialSizeRef.current = next.current;\n }\n }, [enabled, element, horizontal, readMetrics]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: re-syncs the separator's aria values whenever the size changes.\n useIsomorphicLayoutEffect(() => {\n if (!enabled || !element) return;\n readMetrics(true);\n }, [enabled, element, size, readMetrics]);\n\n useEffect(() => {\n if (!enabled || !element || !targetWindow) return;\n const onResize = () => {\n // The size limits stored for placing are stale after the window resizes.\n stopPlacing();\n readMetrics();\n };\n targetWindow.addEventListener(\"resize\", onResize);\n return () => targetWindow.removeEventListener(\"resize\", onResize);\n }, [enabled, element, targetWindow, readMetrics, stopPlacing]);\n\n return {\n sizeStyle:\n size !== undefined\n ? { [horizontal ? \"width\" : \"height\"]: size }\n : undefined,\n isResizing: interaction === \"active\" || interaction === \"placing\",\n isHovered: interaction === \"hover\",\n isPlacing: interaction === \"placing\",\n isCancelResizeEvent,\n separatorProps: {\n role: \"separator\",\n tabIndex: 0,\n ref: setHandle,\n \"aria-orientation\": horizontal ? \"vertical\" : \"horizontal\",\n \"aria-valuenow\": metrics ? Math.round(metrics.current) : undefined,\n \"aria-valuemin\": metrics ? Math.round(metrics.min) : undefined,\n \"aria-valuemax\": metrics ? Math.round(metrics.max) : undefined,\n onKeyDown,\n onFocus,\n },\n guideProps: {\n ref: setGuide,\n onPointerDown: onGuidePointerDown,\n onPointerMove: onGuidePointerMove,\n onClick: onGuideClick,\n onContextMenu: stopPlacing,\n },\n };\n}\n"],"names":["useWindow","useState","useRef","useEventCallback","useCallback","useEffect","onKeyDown","useIsomorphicLayoutEffect"],"mappings":";;;;;;;;;;;;;AA4EA,MAAM,aAAA,GAAgB,CAAA;AACtB,MAAM,UAAA,GAAa,GAAA;AAEnB,MAAM,eAAA,GAAkB,CAAA;AAExB,MAAM,YAAY,CAAC,MAAA,KACjB,MAAA,KAAW,IAAA,IAAS,OAAgB,QAAA,KAAa,CAAA;AAEnD,MAAM,gBAAA,GAAmB,CAAC,OAAA,KACxB,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,KAAA,CAAM;AAAA,EACb,aAAA,EAAe,IAAA;AAAA,EACf,YAAA,EAAc;AAChB,CAAA,CAAA;AAGF,MAAM,iBAAA,GAAoB,CAAC,aAAA,EAAyB,MAAA,KAAmB;AACrE,EAAA,MAAM,OAAO,aAAA,CAAc,WAAA;AAC3B,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,aAAA,CAAc,oBAAoB,OAAO,MAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,aAAA,EAAc;AACrC,EAAA,KAAA,CAAM,WAAA,CAAY,CAAA,qBAAA,EAAwB,MAAM,CAAA,cAAA,CAAgB,CAAA;AAChE,EAAA,aAAA,CAAc,kBAAA,GAAqB;AAAA,IACjC,GAAG,aAAA,CAAc,kBAAA;AAAA,IACjB;AAAA,GACF;AACA,EAAA,OAAO,MAAM;AACX,IAAA,aAAA,CAAc,kBAAA,GAAqB,cAAc,kBAAA,CAAmB,MAAA;AAAA,MAClE,CAAC,YAAY,OAAA,KAAY;AAAA,KAC3B;AAAA,EACF,CAAA;AACF,CAAA;AAEA,MAAM,YAAA,GAAe,CAAC,QAAA,KACpB,QAAA,KAAa,UAAU,QAAA,KAAa,OAAA;AAEtC,MAAM,mBAAA,GAAsB,CAAC,QAAA,KAC3B,QAAA,KAAa,UAAU,QAAA,KAAa,KAAA;AAEtC,MAAM,OAAA,GAAU,CAAC,OAAA,EAAsB,UAAA,KAAwB;AAC7D,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,QAAQ,qBAAA,EAAsB;AACxD,EAAA,OAAO,aAAa,KAAA,GAAQ,MAAA;AAC9B,CAAA;AAEA,MAAM,YAAA,GAAe,CACnB,KAAA,EACA,QAAA,EACA,OACA,QAAA,KACG;AACH,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,KAAA,EAAO,QAAQ,CAAA;AAAA,EAC7C,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,eAAe,QAAQ,CAAA;AAAA,EAC/B;AACF,CAAA;AAGA,MAAM,WAAA,GAAc,CAAC,OAAA,EAAsB,UAAA,KAAgC;AACzE,EAAA,MAAM,QAAA,GAAW,aAAa,OAAA,GAAU,QAAA;AACxC,EAAA,MAAM,EAAE,OAAM,GAAI,OAAA;AAClB,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,gBAAA,CAAiB,QAAQ,CAAA;AACrD,EAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,mBAAA,CAAoB,QAAQ,CAAA;AAC3D,EAAA,MAAM,kBAAA,GAAqB,KAAA,CAAM,gBAAA,CAAiB,qBAAqB,CAAA;AACvE,EAAA,MAAM,6BAA6B,KAAA,CAAM,mBAAA;AAAA,IACvC;AAAA,GACF;AAGA,EAAA,KAAA,CAAM,WAAA,CAAY,qBAAA,EAAuB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,KAAA,EAAO,WAAW,CAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,EAAS,UAAU,CAAA;AACvC,EAAA,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA,EAAG,UAAU,MAAM,WAAW,CAAA;AAC1D,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,EAAS,UAAU,CAAA;AAEvC,EAAA,YAAA,CAAa,KAAA,EAAO,QAAA,EAAU,aAAA,EAAe,gBAAgB,CAAA;AAE7D,EAAA,OAAA,CAAQ,SAAS,UAAU,CAAA;AAC3B,EAAA,YAAA;AAAA,IACE,KAAA;AAAA,IACA,qBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,EAAE,GAAA,EAAK,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA,EAAK,GAAG,CAAA,EAAE;AACxC,CAAA;AAEA,MAAM,KAAA,GAAQ,CAAC,KAAA,EAAe,EAAE,KAAK,GAAA,EAAI,KACvC,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,GAAG,GAAG,GAAG,CAAA;AAGpC,MAAM,aAAA,GAAgB,CACpB,IAAA,EACA,QAAA,EACA,EAAE,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,CAAA,EAAE,KACtB;AACH,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,MAAA;AACH,MAAA,OAAO,IAAI,IAAA,CAAK,IAAA;AAAA,IAClB,KAAK,OAAA;AACH,MAAA,OAAO,KAAK,KAAA,GAAQ,CAAA;AAAA,IACtB,KAAK,KAAA;AACH,MAAA,OAAO,IAAI,IAAA,CAAK,GAAA;AAAA,IAClB,KAAK,QAAA;AACH,MAAA,OAAO,KAAK,MAAA,GAAS,CAAA;AAAA;AAE3B,CAAA;AAGA,MAAM,YAAA,GAAe,CACnB,IAAA,EACA,QAAA,EACA,IAAA,KACG;AACH,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,MAAA;AACH,MAAA,OAAO,KAAK,IAAA,GAAO,IAAA;AAAA,IACrB,KAAK,OAAA;AACH,MAAA,OAAO,KAAK,KAAA,GAAQ,IAAA;AAAA,IACtB,KAAK,KAAA;AACH,MAAA,OAAO,KAAK,GAAA,GAAM,IAAA;AAAA,IACpB,KAAK,QAAA;AACH,MAAA,OAAO,KAAK,MAAA,GAAS,IAAA;AAAA;AAE3B,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAgD;AAC9C,EAAA,MAAM,UAAA,GAAa,aAAa,QAAQ,CAAA;AACxC,EAAA,MAAM,eAAeA,gBAAA,EAAU;AAG/B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAA6B,MAAS,CAAA;AAExE,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,eAAS,UAAU,CAAA;AACvE,EAAA,MAAM,IAAA,GACJ,OAAA,IAAW,kBAAA,KAAuB,UAAA,GAAa,SAAA,GAAY,MAAA;AAE7D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAsB,UAAU,CAAA;AACtE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAA;AAAA,IAC5B;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAUC,aAAyB,IAAI,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAaA,aAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,SAAA,GAAYA,aAA2B,IAAI,CAAA;AACjD,EAAA,MAAM,QAAA,GAAWA,aAA2B,IAAI,CAAA;AAChD,EAAA,MAAM,oBAAA,GAAuBA,aAAqB,IAAI,CAAA;AACtD,EAAA,MAAM,cAAA,GAAiBA,aAAsB,IAAI,CAAA;AACjD,EAAA,MAAM,cAAA,GAAiBA,aAAsB,IAAI,CAAA;AACjD,EAAA,MAAM,OAAA,GAAUA,aAAO,UAAU,CAAA;AAGjC,EAAA,MAAM,SAAA,GAAYA,aAAsB,IAAI,CAAA;AAE5C,EAAA,MAAM,WAAA,GAAcC,iCAAA,CAAiB,CAAC,WAAA,GAAc,KAAA,KAAU;AAC5D,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,MAAM,MAAA,GACJ,eAAe,SAAA,CAAU,OAAA,GACrB,UAAU,OAAA,GACV,WAAA,CAAY,SAAS,UAAU,CAAA;AACrC,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,UAAU,GAAG,MAAM,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAQ;AAClC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,SAAA,GAAY,CAAC,QAAA,KAAqB;AACtC,IAAA,YAAA,CAAa,QAAQ,CAAA;AACrB,IAAA,qBAAA,CAAsB,UAAU,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,MAAM,eAAe,CAAC;AAAA,IACpB,OAAA,EAAS,CAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,KAA+C;AA7PjD,IAAA,IAAA,EAAA;AA8PI,IAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,SAAA,CAAU,OAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,qBAAA,EAAA;AAChC,IAAA,OACE,IAAA,KAAS,MAAA,IACT,CAAA,IAAK,IAAA,CAAK,IAAA,IACV,CAAA,IAAK,IAAA,CAAK,KAAA,IACV,CAAA,IAAK,IAAA,CAAK,GAAA,IACV,CAAA,IAAK,IAAA,CAAK,MAAA;AAAA,EAEd,CAAA;AAEA,EAAA,MAAM,QAAA,GAAWA,iCAAA;AAAA,IACf,CAAC,MAAA,KAA4B;AAzQjC,MAAA,IAAA,EAAA;AA0QM,MAAA,OAAA,OAAA,IACA,UAAU,MAAM,CAAA,IAAA,CAAA,CAChB,eAAU,OAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,SAAS,MAAA,CAAA,MAAY,IAAA;AAAA,IAAA;AAAA,GAC5C;AAEA,EAAA,MAAM,SAAA,GAAYA,iCAAA,CAAiB,CAAC,KAAA,KAAwB;AAC1D,IAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,OAAA,CAAQ,OAAA,GAAU;AAAA,MAChB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,QAAQ,KAAA,CAAM,OAAA;AAAA,MACd,QAAQ,KAAA,CAAM,OAAA;AAAA,MACd,YAAY,OAAA,CAAQ,OAAA;AAAA,MACpB,cAAc,OAAA,CAAQ,OAAA;AAAA,MACtB,UAAA,EAAY,IAAA;AAAA,MACZ,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,KAAA,EAAO;AAAA,KACT;AACA,IAAA,gBAAA,CAAiB,UAAU,OAAO,CAAA;AAClC,IAAA,cAAA,CAAe,QAAQ,CAAA;AAAA,EACzB,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAWA,iCAAA,CAAiB,CAAC,KAAA,EAAqB,IAAA,KAAoB;AAnS9E,IAAA,IAAA,EAAA;AAqSI,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,IACE,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,MAAM,CAAA,GACnE,eAAA,EACA;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,MAAA,IAAI;AACF,QAAA,CAAA,EAAA,GAAA,SAAA,CAAU,OAAA,KAAV,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,iBAAA,CAAkB,KAAA,CAAM,SAAA,CAAA;AAAA,MAC7C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,UAAA,GAAa,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,OAAA;AACtD,IAAA,MAAM,MAAA,GAAS,UAAA,GAAa,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA;AAC/C,IAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,QAAQ,CAAA,GAAI,CAAA,GAAI,EAAA;AACtD,IAAA,MAAM,QAAA,GAAW,KAAA;AAAA,MACf,IAAA,CAAK,UAAA,GAAA,CAAc,UAAA,GAAa,MAAA,IAAU,SAAA;AAAA,MAC1C;AAAA,KACF;AACA,IAAA,IAAI,QAAA,KAAa,KAAK,YAAA,EAAc;AAClC,MAAA,IAAA,CAAK,YAAA,GAAe,QAAA;AACpB,MAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,IACpB;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,KAAmB;AAlUxC,IAAA,IAAA,EAAA;AAmUI,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,OAAA,CAAQ,WAAA,GAAc,MAAA;AACtB,IAAA,CAAA,EAAA,GAAA,QAAA,CAAS,OAAA,KAAT,mBAAkB,KAAA,CAAM,WAAA;AAAA,MACtB,4BAAA;AAAA,MACA,GAAG,MAAM,CAAA,EAAA;AAAA,KAAA;AAAA,EAEb,CAAA;AAEA,EAAA,MAAM,QAAA,GAAWC,iBAAA,CAAY,CAAC,IAAA,KAA6B;AACzD,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,IAAA,CAAK,KAAA,CAAM,WAAA;AAAA,QACT,4BAAA;AAAA,QACA,CAAA,EAAG,QAAQ,WAAW,CAAA,EAAA;AAAA,OACxB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeD,iCAAA,CAAiB,CAAC,IAAA,KAAoB;AACzD,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,UAAA,CAAW,OAAA,GAAU;AAAA,MACnB,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,WAAA,EAAa,YAAA;AAAA,QACX,QAAQ,qBAAA,EAAsB;AAAA,QAC9B,QAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AACA,IAAA,cAAA,CAAe,SAAS,CAAA;AAAA,EAC1B,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GAAcA,kCAAiB,MAAM;AACzC,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACzB,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,cAAA,CAAe,UAAU,CAAA;AAAA,EAC3B,CAAC,CAAA;AAED,EAAA,MAAM,OAAA,GAAUA,iCAAA,CAAiB,CAAC,KAAA,KAAiB;AA5WrD,IAAA,IAAA,EAAA;AA6WI,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAElB,IAAA,MAAM,OAAA,GAAU,KAAA;AAChB,IAAA,MAAM,YAAA,GACJ,aAAA,IAAiB,KAAA,IACjB,OAAA,CAAQ,gBAAgB,OAAA,IACxB,QAAA;AAAA,MAAA,CAAA,CACE,EAAA,GAAA,SAAA,CAAU,OAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,aAAA,CAAc,gBAAA;AAAA,QAC/B,OAAA,CAAQ,OAAA;AAAA,QACR,OAAA,CAAQ;AAAA,OAAA,KACL;AAAA,KACP;AACF,IAAA,cAAA,CAAe,YAAA,GAAe,UAAU,UAAU,CAAA;AAAA,EACpD,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,GAAaA,iCAAA,CAAiB,CAAC,KAAA,KAAyB;AAC5D,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,iBAAA,CAAkB,IAAA,CAAK,SAAA,CAAA,EAAY;AAC7C,MAAA,MAAA,CAAO,qBAAA,CAAsB,KAAK,SAAS,CAAA;AAAA,IAC7C;AACA,IAAA,YAAA,CAAa,KAAK,UAAU,CAAA;AAC5B,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GAAc,CAClB,MAAA,EACA,IAAA,EACA,OACA,MAAA,KAEA,KAAA;AAAA,IACE,YAAA,CAAa,KAAK,CAAA,GACd,OAAA,CAAQ,MAAA,EAAQ,UAAU,CAAA,GAC1B,aAAA,CAAc,IAAA,EAAM,QAAA,EAAU,KAAK,CAAA;AAAA,IACvC;AAAA,GACF;AAEF,EAAA,MAAM,kBAAA,GAAqB,CACzB,KAAA,KACG;AACH,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AAC1B,IAAA,MAAM,IAAA,GAAO,QAAQ,qBAAA,EAAsB;AAC3C,IAAA,SAAA;AAAA,MACE,YAAA,CAAa,MAAM,QAAA,EAAU,WAAA,CAAY,SAAS,IAAA,EAAM,KAAA,EAAO,OAAO,CAAC;AAAA,KACzE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqBA,iCAAA;AAAA,IACzB,CAAC,KAAA,KAA0C;AACzC,MAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,IAAI,KAAA,CAAM,WAAA,KAAgB,OAAA,IAAW,KAAA,CAAM,SAAS,CAAA,EAAG;AACrD,QAAA,WAAA,EAAY;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,cAAA,EAAe;AAErB,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,IAC1B;AAAA,GACF;AAEA,EAAA,MAAM,kBAAA,GAAqBA,iCAAA;AAAA,IACzB,CAAC,KAAA,KAA0C;AACzC,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,IAC1B;AAAA,GACF;AAEA,EAAA,MAAM,YAAA,GAAeA,iCAAA;AAAA,IACnB,CAAC,KAAA,KAAwC;AACvC,MAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAE3B,MAAA,IAAI,EAAC,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,OAAA,CAAA,IAAW,CAAC,OAAA,EAAS;AACnC,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,WAAA,EAAY;AAEZ,MAAA,MAAM,IAAA,GAAO,QAAQ,qBAAA,EAAsB;AAC3C,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,OAAA,EAAS,IAAA,EAAM,OAAO,OAAO,CAAA;AAC1D,MAAA,MAAM,UAAU,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,UAAU,GAAG,OAAO,CAAA;AAC3D,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,MACpB;AACA,MAAA,gBAAA,CAAiB,UAAU,OAAO,CAAA;AAAA,IACpC;AAAA,GACF;AAEA,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,IAAW,CAAC,YAAA,EAAc;AAC3C,IAAA,MAAM,gBAAgB,YAAA,CAAa,QAAA;AAEnC,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,MAAA,IAAI,KAAA,CAAM,gBAAA,IAAoB,CAAC,KAAA,CAAM,SAAA,EAAW;AAChD,MAAA,IAAI,KAAA,CAAM,WAAA,KAAgB,OAAA,IAAW,KAAA,CAAM,SAAS,CAAA,EAAG;AACvD,MAAA,IAAI,UAAA,CAAW,WAAW,OAAA,CAAQ,OAAA,IAAW,CAAC,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,EAAG;AACpE,QAAA;AAAA,MACF;AACA,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,MAAA,IAAI,MAAM,gBAAA,EAAkB;AAC5B,MAAA,IAAI,WAAW,OAAA,EAAS;AACxB,MAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,MAAA,IAAI,CAAC,IAAA,EAAM;AAET,QAAA,IAAI,KAAA,CAAM,gBAAgB,OAAA,EAAS;AACjC,UAAA,cAAA,CAAe,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,GAAI,UAAU,UAAU,CAAA;AAAA,QAC9D;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,SAAA,KAAc,IAAA,CAAK,SAAA,EAAW;AAExC,MAAA,IAAI,KAAA,CAAM,YAAY,CAAA,EAAG;AACvB,QAAA,OAAA,CAAQ,KAAK,CAAA;AACb,QAAA;AAAA,MACF;AACA,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAwB;AAC3C,MAAA,IAAI,MAAM,gBAAA,EAAkB;AAC5B,MAAA,IAAI,KAAA,CAAM,WAAA,KAAgB,OAAA,IAAW,KAAA,CAAM,SAAS,CAAA,EAAG;AACvD,MAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,MAAA,IAAA,CAAI,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,SAAA,MAAc,KAAA,CAAM,SAAA,EAAW;AACzC,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,QAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAwB;AAzfrD,MAAA,IAAA,EAAA;AA0fM,MAAA,IAAA,CAAA,CAAI,aAAQ,OAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,eAAc,KAAA,CAAM,SAAA,UAAmB,KAAK,CAAA;AAAA,IACnE,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAsB;AAC3C,MAAA,IAAI,CAAC,KAAA,CAAM,gBAAA,EAAkB,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC5C,CAAA;AAEA,IAAA,MAAMC,UAAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,CAAC,QAAQ,OAAA,EAAS;AAChD,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,oBAAA,CAAqB,OAAA,GAAU,KAAA;AAC/B,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAAsB;AACpC,MAAA,OAAA,CAAQ,KAAK,CAAA;AACb,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AAGA,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAwB;AAC5C,MAAA,IACE,CAAC,OAAA,CAAQ,OAAA,IACT,SAAA,CAAU,KAAA,CAAM,aAAa,CAAA,IAC7B,KAAA,CAAM,aAAA,CAAc,OAAA,KAAY,QAAA,EAChC;AACA,QAAA,cAAA,CAAe,UAAU,CAAA;AAAA,MAC3B;AAAA,IACF,CAAA;AAEA,IAAA,aAAA,CAAc,gBAAA,CAAiB,aAAA,EAAe,aAAA,EAAe,IAAI,CAAA;AACjE,IAAA,aAAA,CAAc,gBAAA,CAAiB,eAAe,aAAa,CAAA;AAC3D,IAAA,aAAA,CAAc,gBAAA,CAAiB,WAAA,EAAa,WAAA,EAAa,IAAI,CAAA;AAC7D,IAAA,aAAA,CAAc,gBAAA,CAAiB,iBAAiB,eAAe,CAAA;AAC/D,IAAA,aAAA,CAAc,gBAAA,CAAiB,aAAA,EAAe,aAAA,EAAe,IAAI,CAAA;AAEjE,IAAA,aAAA,CAAc,gBAAA,CAAiB,SAAA,EAAWA,UAAAA,EAAW,IAAI,CAAA;AACzD,IAAA,aAAA,CAAc,gBAAA,CAAiB,cAAc,YAAY,CAAA;AACzD,IAAA,YAAA,CAAa,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AAC5C,IAAA,OAAO,MAAM;AACX,MAAA,aAAA,CAAc,mBAAA,CAAoB,aAAA,EAAe,aAAA,EAAe,IAAI,CAAA;AACpE,MAAA,aAAA,CAAc,mBAAA,CAAoB,eAAe,aAAa,CAAA;AAC9D,MAAA,aAAA,CAAc,mBAAA,CAAoB,WAAA,EAAa,WAAA,EAAa,IAAI,CAAA;AAChE,MAAA,aAAA,CAAc,mBAAA,CAAoB,iBAAiB,eAAe,CAAA;AAClE,MAAA,aAAA,CAAc,mBAAA,CAAoB,aAAA,EAAe,aAAA,EAAe,IAAI,CAAA;AACpE,MAAA,aAAA,CAAc,mBAAA,CAAoB,SAAA,EAAWA,UAAAA,EAAW,IAAI,CAAA;AAC5D,MAAA,aAAA,CAAc,mBAAA,CAAoB,cAAc,YAAY,CAAA;AAC5D,MAAA,YAAA,CAAa,mBAAA,CAAoB,QAAQ,MAAM,CAAA;AAC/C,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,MAAA,cAAA,CAAe,UAAU,CAAA;AAAA,IAC3B,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,OAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,mBAAmB,WAAA,KAAgB,UAAA;AACzC,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,gBAAA,IAAoB,CAAC,YAAA,EAAc;AACxC,IAAA,OAAO,iBAAA;AAAA,MACL,YAAA,CAAa,QAAA;AAAA,MACb,aACI,uCAAA,GACA;AAAA,KACN;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,YAAA,EAAc,UAAU,CAAC,CAAA;AAE/C,EAAA,MAAM,SAAA,GAAYF,iCAAA;AAAA,IAChB,CAAC,KAAA,KAA2C;AAC1C,MAAA,MAAM,EAAE,KAAI,GAAI,KAAA;AAChB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,WAAA,EAAY;AACZ,QAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,oBAAA,CAAqB,UAAU,KAAA,CAAM,WAAA;AACrC,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAM,UAAA,GAAa,aACf,CAAC,WAAA,EAAa,YAAY,CAAA,GAC1B,CAAC,WAAW,WAAW,CAAA;AAC3B,MAAA,IACE,CAAC,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,IACxB,QAAQ,MAAA,IACR,GAAA,KAAQ,KAAA,IACR,GAAA,KAAQ,OAAA,EACR;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,YAAY,IAAI,CAAA;AAChC,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,KAAA,CAAM,cAAA,EAAe;AAErB,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,GAAA,GAAM,CAAA;AACnD,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,cAAA,CAAe,UAAU,OAAA,CAAQ,OAAA;AAAA,QACnC;AACA,QAAA,QAAA,GAAW,OAAA,CAAQ,GAAA;AAAA,MACrB,CAAA,MAAA,IAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,QAAA,GAAW,OAAA,CAAQ,GAAA;AAAA,MACrB,CAAA,MAAA,IAAW,QAAQ,OAAA,EAAS;AAC1B,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,QAAA,GACE,cAAA,CAAe,OAAA,IAAW,cAAA,CAAe,OAAA,IAAW,OAAA,CAAQ,GAAA;AAAA,QAChE,CAAA,MAAO;AACL,UAAA,cAAA,CAAe,UAAU,OAAA,CAAQ,OAAA;AACjC,UAAA,QAAA,GAAW,OAAA,CAAQ,GAAA;AAAA,QACrB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,uBAAA,GACJ,GAAA,KAAQ,YAAA,IAAgB,GAAA,KAAQ,WAAA;AAClC,QAAA,MAAM,SAAA,GACJ,uBAAA,KAA4B,mBAAA,CAAoB,QAAQ,IAAI,CAAA,GAAI,EAAA;AAClE,QAAA,QAAA,GAAW,OAAA,CAAQ,UAAU,aAAA,GAAgB,SAAA;AAAA,MAC/C;AAEA,MAAA,QAAA,GAAW,KAAA,CAAM,UAAU,OAAO,CAAA;AAClC,MAAA,IAAI,QAAA,KAAa,QAAQ,OAAA,EAAS;AAClC,MAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,IACpB;AAAA,GACF;AAEA,EAAA,MAAM,mBAAA,GAAsBC,iBAAA;AAAA,IAC1B,CAAC,KAAA,KACC,KAAA,KAAU,MAAA,IAAa,UAAU,oBAAA,CAAqB,OAAA;AAAA,IACxD;AAAC,GACH;AAEA,EAAA,MAAM,OAAA,GAAUA,kBAAY,MAAM;AAChC,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,EAAS,WAAA,EAAY;AAAA,EACpC,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,SAAA,GAAYA,iBAAA,CAAY,CAAC,IAAA,KAA6B;AAC1D,IAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,YAAA,CAAa,MAAS,CAAA;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAE,mDAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AAC1B,IAAA,IAAI,OAAA,CAAQ,YAAY,UAAA,EAAY;AAClC,MAAA,OAAA,CAAQ,OAAA,GAAU,UAAA;AAClB,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,IAC3B;AACA,IAAA,MAAM,OAAO,WAAA,EAAY;AACzB,IAAA,IAAI,IAAA,IAAQ,cAAA,CAAe,OAAA,KAAY,IAAA,EAAM;AAC3C,MAAA,cAAA,CAAe,UAAU,IAAA,CAAK,OAAA;AAAA,IAChC;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,OAAA,EAAS,UAAA,EAAY,WAAW,CAAC,CAAA;AAG9C,EAAAA,mDAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AAC1B,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,GAAG,CAAC,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,WAAW,CAAC,CAAA;AAExC,EAAAF,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,IAAW,CAAC,YAAA,EAAc;AAC3C,IAAA,MAAM,WAAW,MAAM;AAErB,MAAA,WAAA,EAAY;AACZ,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AACA,IAAA,YAAA,CAAa,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AAChD,IAAA,OAAO,MAAM,YAAA,CAAa,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EAClE,GAAG,CAAC,OAAA,EAAS,SAAS,YAAA,EAAc,WAAA,EAAa,WAAW,CAAC,CAAA;AAE7D,EAAA,OAAO;AAAA,IACL,SAAA,EACE,IAAA,KAAS,MAAA,GACL,EAAE,CAAC,aAAa,OAAA,GAAU,QAAQ,GAAG,IAAA,EAAK,GAC1C,MAAA;AAAA,IACN,UAAA,EAAY,WAAA,KAAgB,QAAA,IAAY,WAAA,KAAgB,SAAA;AAAA,IACxD,WAAW,WAAA,KAAgB,OAAA;AAAA,IAC3B,WAAW,WAAA,KAAgB,SAAA;AAAA,IAC3B,mBAAA;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,CAAA;AAAA,MACV,GAAA,EAAK,SAAA;AAAA,MACL,kBAAA,EAAoB,aAAa,UAAA,GAAa,YAAA;AAAA,MAC9C,iBAAiB,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA;AAAA,MACzD,iBAAiB,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AAAA,MACrD,iBAAiB,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AAAA,MACrD,SAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,GAAA,EAAK,QAAA;AAAA,MACL,aAAA,EAAe,kBAAA;AAAA,MACf,aAAA,EAAe,kBAAA;AAAA,MACf,OAAA,EAAS,YAAA;AAAA,MACT,aAAA,EAAe;AAAA;AACjB,GACF;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltLinkButton {\n --linkButton-borderWidth: var(--salt-size-fixed-100);\n\n align-items: var(--saltLinkButton-alignItems, center);\n appearance: none;\n background: var(--saltLinkButton-background, var(--linkButton-background));\n border-color: var(--saltLinkButton-borderColor, var(--linkButton-borderColor, transparent));\n border-style: var(--saltLinkButton-borderStyle, solid);\n border-width: var(--saltLinkButton-borderWidth, var(--linkButton-borderWidth));\n border-radius: var(--saltLinkButton-borderRadius, var(--salt-palette-corner-weak, 0));\n color: var(--saltLinkButton-text-color, var(--linkButton-text-color));\n display: inline-flex;\n gap: var(--salt-spacing-50);\n justify-content: var(--saltLinkButton-justifyContent, center);\n font-size: var(--saltLinkButton-fontSize, var(--salt-text-fontSize));\n font-family: var(--saltLinkButton-fontFamily, var(--salt-text-action-fontFamily));\n line-height: var(--saltLinkButton-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--saltLinkButton-letterSpacing, var(--salt-text-action-letterSpacing));\n text-transform: var(--saltLinkButton-textTransform, var(--salt-text-action-textTransform));\n padding: 0 var(--saltLinkButton-padding, calc(var(--salt-spacing-100) - var(--saltLinkButton-borderWidth, var(--linkButton-borderWidth))));\n margin: var(--saltLinkButton-margin, 0);\n height: var(--saltLinkButton-height, var(--salt-size-base));\n min-width: var(--saltLinkButton-minWidth, unset);\n position: relative;\n text-align: var(--saltLinkButton-textAlign, var(--salt-text-action-textAlign));\n text-decoration: var(--linkButton-textDecoration, var(--salt-typography-textDecoration-underline));\n text-underline-offset: var(--salt-spacing-fixed-200);\n transition: none;\n width: var(--saltLinkButton-width, auto);\n -webkit-appearance: none;\n -webkit-tap-highlight-color: transparent;\n /* Styles applied to align children*/\n font-weight: var(--saltLinkButton-fontWeight, var(--salt-text-action-fontWeight));\n}\n\n.saltLinkButton-underlineDefault {\n --linkButton-textDecoration: var(--salt-typography-textDecoration-underline);\n --linkButton-textDecoration-hover: var(--salt-typography-textDecoration-none);\n --linkButton-textDecoration-focus: var(--linkButton-textDecoration-hover);\n}\n\n.saltLinkButton-underlineNever {\n --linkButton-textDecoration: var(--salt-typography-textDecoration-none);\n --linkButton-textDecoration-hover: var(--salt-typography-textDecoration-none);\n --linkButton-textDecoration-focus: var(--salt-typography-textDecoration-none);\n}\n\n/* Class for ADA content - visually hidden but accessible to screen readers.\n Uses clip-path and prevents user selection so the text isn't included\n when users copy the link button's visible content. */\n.saltLinkButton-externalLinkADA {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n user-select: none;\n -webkit-user-select: none;\n}\n\n@media (hover: hover) {\n /* Pseudo-class applied to the root element on hover when LinkButton is not active or disabled */\n .saltLinkButton:hover {\n background: var(--saltLinkButton-background-hover, var(--linkButton-background-hover));\n color: var(--saltLinkButton-text-color-hover, var(--linkButton-text-color-hover));\n border-color: var(--saltLinkButton-borderColor-hover, var(--linkButton-borderColor-hover));\n cursor: var(--salt-cursor-hover);\n text-decoration: var(--linkButton-textDecoration-hover, var(--salt-typography-textDecoration-none));\n }\n}\n\n/* Pseudo-class applied to the root element on focus */\n.saltLinkButton:focus-visible {\n outline: var(--salt-focused-outline);\n\n background: var(--saltLinkButton-background-hover, var(--linkButton-background-hover));\n color: var(--saltLinkButton-text-color-hover, var(--linkButton-text-color-hover));\n border-color: var(--saltLinkButton-borderColor-hover, var(--linkButton-borderColor-hover));\n text-decoration: var(--linkButton-textDecoration-focus, var(--salt-typography-textDecoration-none));\n}\n\n/* Pseudo-class applied to the root element when LinkButton is active */\n.saltLinkButton.saltLinkButton-active:focus-visible,\n.saltLinkButton:focus-visible:active,\n.saltLinkButton:active,\n.saltLinkButton.saltLinkButton-active {\n background: var(--saltLinkButton-background-active, var(--linkButton-background-active));\n color: var(--saltLinkButton-text-color-active, var(--linkButton-text-color-active));\n border-color: var(--saltLinkButton-borderColor-active, var(--linkButton-borderColor-active));\n cursor: var(--salt-cursor-active);\n}\n\n.saltLinkButton-neutral {\n --linkButton-text-color: var(--salt-actionable-subtle-foreground);\n --linkButton-text-color-hover: var(--salt-actionable-subtle-foreground-hover);\n --linkButton-text-color-active: var(--salt-actionable-subtle-foreground-active);\n --linkButton-background: var(--salt-actionable-subtle-background);\n --linkButton-background-hover: var(--salt-actionable-subtle-background-hover);\n --linkButton-background-active: var(--salt-actionable-subtle-background-active);\n --linkButton-borderColor: var(--salt-actionable-subtle-borderColor);\n --linkButton-borderColor-hover: var(--salt-actionable-subtle-borderColor-hover);\n --linkButton-borderColor-active: var(--salt-actionable-subtle-borderColor-active);\n}\n\n.saltLinkButton-accented {\n --linkButton-text-color: var(--salt-actionable-accented-subtle-foreground);\n --linkButton-text-color-hover: var(--salt-actionable-accented-subtle-foreground-hover);\n --linkButton-text-color-active: var(--salt-actionable-accented-subtle-foreground-active);\n --linkButton-background: var(--salt-actionable-accented-subtle-background);\n --linkButton-background-hover: var(--salt-actionable-accented-subtle-background-hover);\n --linkButton-background-active: var(--salt-actionable-accented-subtle-background-active);\n --linkButton-borderColor: var(--salt-actionable-accented-subtle-borderColor);\n --linkButton-borderColor-hover: var(--salt-actionable-accented-subtle-borderColor-hover);\n --linkButton-borderColor-active: var(--salt-actionable-accented-subtle-borderColor-active);\n}\n";
3
+ var css_248z = ".saltLinkButton {\n --linkButton-borderWidth: var(--salt-size-fixed-100);\n\n align-items: var(--saltLinkButton-alignItems, center);\n appearance: none;\n background: var(--saltLinkButton-background, var(--linkButton-background));\n border-color: var(--saltLinkButton-borderColor, var(--linkButton-borderColor, transparent));\n border-style: var(--saltLinkButton-borderStyle, solid);\n border-width: var(--saltLinkButton-borderWidth, var(--linkButton-borderWidth));\n border-radius: var(--saltLinkButton-borderRadius, var(--salt-palette-corner-weak, 0));\n box-sizing: border-box;\n color: var(--saltLinkButton-text-color, var(--linkButton-text-color));\n display: inline-flex;\n gap: var(--salt-spacing-50);\n justify-content: var(--saltLinkButton-justifyContent, center);\n font-size: var(--saltLinkButton-fontSize, var(--salt-text-fontSize));\n font-family: var(--saltLinkButton-fontFamily, var(--salt-text-action-fontFamily));\n line-height: var(--saltLinkButton-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--saltLinkButton-letterSpacing, var(--salt-text-action-letterSpacing));\n text-transform: var(--saltLinkButton-textTransform, var(--salt-text-action-textTransform));\n padding: 0 var(--saltLinkButton-padding, calc(var(--salt-spacing-100) - var(--saltLinkButton-borderWidth, var(--linkButton-borderWidth))));\n margin: var(--saltLinkButton-margin, 0);\n height: var(--saltLinkButton-height, var(--salt-size-base));\n min-width: var(--saltLinkButton-minWidth, unset);\n position: relative;\n text-align: var(--saltLinkButton-textAlign, var(--salt-text-action-textAlign));\n text-decoration: var(--linkButton-textDecoration, var(--salt-typography-textDecoration-underline));\n text-underline-offset: var(--salt-spacing-fixed-200);\n transition: none;\n width: var(--saltLinkButton-width, auto);\n -webkit-appearance: none;\n -webkit-tap-highlight-color: transparent;\n /* Styles applied to align children*/\n font-weight: var(--saltLinkButton-fontWeight, var(--salt-text-action-fontWeight));\n}\n\n.saltLinkButton-underlineDefault {\n --linkButton-textDecoration: var(--salt-typography-textDecoration-underline);\n --linkButton-textDecoration-hover: var(--salt-typography-textDecoration-none);\n --linkButton-textDecoration-focus: var(--linkButton-textDecoration-hover);\n}\n\n.saltLinkButton-underlineNever {\n --linkButton-textDecoration: var(--salt-typography-textDecoration-none);\n --linkButton-textDecoration-hover: var(--salt-typography-textDecoration-none);\n --linkButton-textDecoration-focus: var(--salt-typography-textDecoration-none);\n}\n\n/* Class for ADA content - visually hidden but accessible to screen readers.\n Uses clip-path and prevents user selection so the text isn't included\n when users copy the link button's visible content. */\n.saltLinkButton-externalLinkADA {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n user-select: none;\n -webkit-user-select: none;\n}\n\n@media (hover: hover) {\n /* Pseudo-class applied to the root element on hover when LinkButton is not active or disabled */\n .saltLinkButton:hover {\n background: var(--saltLinkButton-background-hover, var(--linkButton-background-hover));\n color: var(--saltLinkButton-text-color-hover, var(--linkButton-text-color-hover));\n border-color: var(--saltLinkButton-borderColor-hover, var(--linkButton-borderColor-hover));\n cursor: var(--salt-cursor-hover);\n text-decoration: var(--linkButton-textDecoration-hover, var(--salt-typography-textDecoration-none));\n }\n}\n\n/* Pseudo-class applied to the root element on focus */\n.saltLinkButton:focus-visible {\n outline: var(--salt-focused-outline);\n\n background: var(--saltLinkButton-background-hover, var(--linkButton-background-hover));\n color: var(--saltLinkButton-text-color-hover, var(--linkButton-text-color-hover));\n border-color: var(--saltLinkButton-borderColor-hover, var(--linkButton-borderColor-hover));\n text-decoration: var(--linkButton-textDecoration-focus, var(--salt-typography-textDecoration-none));\n}\n\n/* Pseudo-class applied to the root element when LinkButton is active */\n.saltLinkButton.saltLinkButton-active:focus-visible,\n.saltLinkButton:focus-visible:active,\n.saltLinkButton:active,\n.saltLinkButton.saltLinkButton-active {\n background: var(--saltLinkButton-background-active, var(--linkButton-background-active));\n color: var(--saltLinkButton-text-color-active, var(--linkButton-text-color-active));\n border-color: var(--saltLinkButton-borderColor-active, var(--linkButton-borderColor-active));\n cursor: var(--salt-cursor-active);\n}\n\n.saltLinkButton-neutral {\n --linkButton-text-color: var(--salt-actionable-subtle-foreground);\n --linkButton-text-color-hover: var(--salt-actionable-subtle-foreground-hover);\n --linkButton-text-color-active: var(--salt-actionable-subtle-foreground-active);\n --linkButton-background: var(--salt-actionable-subtle-background);\n --linkButton-background-hover: var(--salt-actionable-subtle-background-hover);\n --linkButton-background-active: var(--salt-actionable-subtle-background-active);\n --linkButton-borderColor: var(--salt-actionable-subtle-borderColor);\n --linkButton-borderColor-hover: var(--salt-actionable-subtle-borderColor-hover);\n --linkButton-borderColor-active: var(--salt-actionable-subtle-borderColor-active);\n}\n\n.saltLinkButton-accented {\n --linkButton-text-color: var(--salt-actionable-accented-subtle-foreground);\n --linkButton-text-color-hover: var(--salt-actionable-accented-subtle-foreground-hover);\n --linkButton-text-color-active: var(--salt-actionable-accented-subtle-foreground-active);\n --linkButton-background: var(--salt-actionable-accented-subtle-background);\n --linkButton-background-hover: var(--salt-actionable-accented-subtle-background-hover);\n --linkButton-background-active: var(--salt-actionable-accented-subtle-background-active);\n --linkButton-borderColor: var(--salt-actionable-accented-subtle-borderColor);\n --linkButton-borderColor-hover: var(--salt-actionable-accented-subtle-borderColor-hover);\n --linkButton-borderColor-active: var(--salt-actionable-accented-subtle-borderColor-active);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=LinkButton.css.js.map