@epilot/zenith-react 0.1.0-next.0 → 0.1.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.
- package/README.md +95 -15
- package/dist/components/appearance-boundary/appearance-boundary.js +32 -34
- package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
- package/dist/components/badge/badge.js +1 -1
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +10 -10
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/button/button.js +28 -28
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/button-group/button-group.js.map +1 -1
- package/dist/components/callout/callout.js +13 -13
- package/dist/components/callout/callout.js.map +1 -1
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +13 -13
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/code-block/code-block.js +6 -6
- package/dist/components/code-block/code-block.js.map +1 -1
- package/dist/components/code-editor/code-editor.js +1 -1
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/code-editor/indent.js.map +1 -1
- package/dist/components/command/command.js +7 -13
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/data-table/data-table-body.js +120 -66
- package/dist/components/data-table/data-table-body.js.map +1 -1
- package/dist/components/data-table/data-table-column-header.js +7 -7
- package/dist/components/data-table/data-table-column-header.js.map +1 -1
- package/dist/components/data-table/data-table-column-order.js +277 -0
- package/dist/components/data-table/data-table-column-order.js.map +1 -0
- package/dist/components/data-table/data-table-content.js +72 -58
- package/dist/components/data-table/data-table-content.js.map +1 -1
- package/dist/components/data-table/data-table-context.js +8 -4
- package/dist/components/data-table/data-table-context.js.map +1 -1
- package/dist/components/data-table/data-table-footer.js +31 -0
- package/dist/components/data-table/data-table-footer.js.map +1 -0
- package/dist/components/data-table/data-table-header-draggable.js +151 -0
- package/dist/components/data-table/data-table-header-draggable.js.map +1 -0
- package/dist/components/data-table/data-table-header.js +130 -57
- package/dist/components/data-table/data-table-header.js.map +1 -1
- package/dist/components/data-table/data-table-resize-handle.js +137 -0
- package/dist/components/data-table/data-table-resize-handle.js.map +1 -0
- package/dist/components/data-table/data-table.js +184 -156
- package/dist/components/data-table/data-table.js.map +1 -1
- package/dist/components/data-table/hooks/use-data-table-virtualizer.js +9 -0
- package/dist/components/data-table/hooks/use-data-table-virtualizer.js.map +1 -0
- package/dist/components/date-range-picker/date-range-picker.js +197 -195
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-time-picker/calendar.js +29 -29
- package/dist/components/date-time-picker/calendar.js.map +1 -1
- package/dist/components/date-time-picker/time-picker.js +55 -55
- package/dist/components/date-time-picker/time-picker.js.map +1 -1
- package/dist/components/density-provider/density-provider.js.map +1 -1
- package/dist/components/dialog/dialog.js +1 -1
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js +5 -5
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.js +36 -36
- package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/field/field-combobox.js +4 -4
- package/dist/components/field/field-combobox.js.map +1 -1
- package/dist/components/field/field.js +40 -40
- package/dist/components/field/field.js.map +1 -1
- package/dist/components/label/label.js +0 -28
- package/dist/components/label/label.js.map +1 -1
- package/dist/components/list/list.js +42 -52
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/option-card/option-card.js +27 -25
- package/dist/components/option-card/option-card.js.map +1 -1
- package/dist/components/pill/pill.js +9 -9
- package/dist/components/pill/pill.js.map +1 -1
- package/dist/components/radio/radio.js +14 -14
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/scroll-area/scroll-area.js +9 -9
- package/dist/components/scroll-area/scroll-area.js.map +1 -1
- package/dist/components/segmented-control/segmented-control.js +1 -1
- package/dist/components/segmented-control/segmented-control.js.map +1 -1
- package/dist/components/select/select.js +11 -11
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/separator/separator.js.map +1 -1
- package/dist/components/skeleton/skeleton.js.map +1 -1
- package/dist/components/slot/compose-as-child.js.map +1 -1
- package/dist/components/spinner/spinner.js.map +1 -1
- package/dist/components/switch/switch.js +11 -11
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/table/table-pagination.js +1 -1
- package/dist/components/table/table-pagination.js.map +1 -1
- package/dist/components/table/table.js +15 -15
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/text/text.js +10 -1
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/toast/toast.js +30 -32
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toggle/toggle.js +20 -20
- package/dist/components/toggle/toggle.js.map +1 -1
- package/dist/delivery/index.d.ts +10 -44
- package/dist/delivery/index.js +5 -9
- package/dist/index.d.ts +1994 -2272
- package/dist/index.js +133 -121
- package/dist/index.js.map +1 -1
- package/dist/lib/clear-button.js.map +1 -1
- package/dist/lib/code-highlight.js.map +1 -1
- package/dist/lib/code-tokens.js.map +1 -1
- package/dist/lib/pagination.js.map +1 -1
- package/dist/packages/tokens/dist/delivery/index.js +18 -48
- package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
- package/dist/packages/tokens/dist/generated/core.generated.js +18 -0
- package/dist/packages/tokens/dist/generated/core.generated.js.map +1 -0
- package/dist/packages/tokens/dist/generated/palette.generated.js +5 -5
- package/dist/packages/tokens/dist/generated/palette.generated.js.map +1 -1
- package/dist/packages/tokens/dist/install.js +9 -9
- package/dist/packages/tokens/dist/install.js.map +1 -1
- package/dist/styles/document-context.js.map +1 -1
- package/dist/styles/make-styles.js.map +1 -1
- package/dist/tokens/core.meta.generated.js +2 -2
- package/dist/tokens/core.meta.generated.js.map +1 -1
- package/dist/tokens/index.d.ts +1029 -1104
- package/dist/tokens/index.js +1031 -1106
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/palette.generated.js +2 -2
- package/dist/tokens/palette.generated.js.map +1 -1
- package/dist/tokens/use-palette-tokens.js.map +1 -1
- package/dist/tokens.json +605 -755
- package/dist/vendor/.bun/@dnd-kit_core@6.3.1_6f4b9a1cfb20c0ae/vendor/@dnd-kit/core/dist/core.esm.js +385 -340
- package/dist/vendor/.bun/@dnd-kit_core@6.3.1_6f4b9a1cfb20c0ae/vendor/@dnd-kit/core/dist/core.esm.js.map +1 -1
- package/dist/vendor/.bun/@dnd-kit_sortable@10.0.0_1d291640e1250bbe/vendor/@dnd-kit/sortable/dist/sortable.esm.js +344 -229
- package/dist/vendor/.bun/@dnd-kit_sortable@10.0.0_1d291640e1250bbe/vendor/@dnd-kit/sortable/dist/sortable.esm.js.map +1 -1
- package/dist/vendor/.bun/@dnd-kit_utilities@3.2.2_62547eec5a2188e3/vendor/@dnd-kit/utilities/dist/utilities.esm.js +1 -1
- package/dist/vendor/.bun/@tanstack_react-virtual@3.11.2_6f4b9a1cfb20c0ae/vendor/@tanstack/react-virtual/dist/esm/index.js +36 -0
- package/dist/vendor/.bun/@tanstack_react-virtual@3.11.2_6f4b9a1cfb20c0ae/vendor/@tanstack/react-virtual/dist/esm/index.js.map +1 -0
- package/dist/vendor/.bun/@tanstack_virtual-core@3.11.2/vendor/@tanstack/virtual-core/dist/esm/index.js +450 -0
- package/dist/vendor/.bun/@tanstack_virtual-core@3.11.2/vendor/@tanstack/virtual-core/dist/esm/index.js.map +1 -0
- package/dist/vendor/.bun/@tanstack_virtual-core@3.11.2/vendor/@tanstack/virtual-core/dist/esm/utils.js +50 -0
- package/dist/vendor/.bun/@tanstack_virtual-core@3.11.2/vendor/@tanstack/virtual-core/dist/esm/utils.js.map +1 -0
- package/package.json +5 -4
- package/scripts/migration-diagnostics-core.mjs +19 -90
- package/scripts/migration-diagnostics.mjs +1 -16
- package/scripts/migration-sweep.mjs +2 -12
- package/ADOPTING.md +0 -73
- package/dist/packages/tokens/dist/delivery/internal.js +0 -181
- package/dist/packages/tokens/dist/delivery/internal.js.map +0 -1
- package/dist/packages/tokens/dist/generated/core.meta.generated.js +0 -10
- package/dist/packages/tokens/dist/generated/core.meta.generated.js.map +0 -1
- package/dist/token-assets/core/5cd4072decf5df2a664f0b1d5f2ec250a3309101ded3056c1f87c8bbe3738d50.css +0 -22
|
@@ -2,9 +2,9 @@ import { jsx as t, jsxs as D } from "react/jsx-runtime";
|
|
|
2
2
|
import * as i from "react";
|
|
3
3
|
import { useSensors as Q, useSensor as j, DndContext as tt, closestCenter as et, DragOverlay as ot, KeyboardSensor as rt, PointerSensor as nt } from "../../vendor/.bun/@dnd-kit_core@6.3.1_6f4b9a1cfb20c0ae/vendor/@dnd-kit/core/dist/core.esm.js";
|
|
4
4
|
import { SortableContext as it, verticalListSortingStrategy as st, arrayMove as at, useSortable as lt } from "../../vendor/.bun/@dnd-kit_sortable@10.0.0_1d291640e1250bbe/vendor/@dnd-kit/sortable/dist/sortable.esm.js";
|
|
5
|
-
import { mergeClasses as f, SLOT_ATTR as
|
|
5
|
+
import { mergeClasses as f, SLOT_ATTR as m, shorthands as p } from "@epilot/zenith-runtime/v1";
|
|
6
6
|
import { makeZenithStyles as ct } from "../../styles/make-styles.js";
|
|
7
|
-
import {
|
|
7
|
+
import { successLight as dt, warningLight as ut, errorLight as pt, spacingGroup2 as F, grayA12 as V, fontWeightSemibold as gt, leadingSm as X, textSm as $, grayA10 as mt, fontWeightMedium as ft, accentSolid as ht, accentA8 as xt, grayA11 as G, grayA8 as vt, leadingXs as yt, textXs as bt, listIndexPaddingX as K, listItemPaddingX as Z, listItemPaddingY as B, listIndexMinWidth as wt, grayA2 as _, radiusMd as P, successSoftHover as It, warningSoftHover as St, errorSoftHover as Lt, accentSoft as kt, successDefault as Ct, successSoft as Dt, warningDefault as Tt, warningSoft as Wt, errorDefault as Nt, errorSoft as Et, listItemMinHeight as Ot, spacingElement3 as At, grayA5 as Gt, spacingElement1 as Bt, spacingElement2 as Pt, listItemGap as Rt } from "../../tokens/index.js";
|
|
8
8
|
const Ht = (n) => /* @__PURE__ */ D(
|
|
9
9
|
"svg",
|
|
10
10
|
{
|
|
@@ -83,12 +83,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
83
83
|
...p.padding(0),
|
|
84
84
|
...p.margin(0)
|
|
85
85
|
},
|
|
86
|
-
// ListItem base — density-bound (DENSITY-SPEC.md §2.2, WP9B2A-ACCEPTANCE-LIST).
|
|
87
|
-
// a compact/relaxed pair: the three CSS tiers are resolved by [data-density] inheritance, so
|
|
88
|
-
// there is no longer a JS branch to pick between "compact" and "everything else" — normal
|
|
89
|
-
// resolves to the same values `itemRelaxed` used to hardcode, and an explicit `relaxed` is
|
|
90
|
-
// normalized to the DOM's canonical `data-density="normal"` before it ever reaches this class,
|
|
91
|
-
// so it resolves through the identical selector. Typography is unchanged across every tier.
|
|
86
|
+
// ListItem base — density-bound (DENSITY-SPEC.md §2.2, WP9B2A-ACCEPTANCE-LIST).
|
|
92
87
|
item: {
|
|
93
88
|
position: "relative",
|
|
94
89
|
display: "flex",
|
|
@@ -99,7 +94,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
99
94
|
transitionProperty: "color, background-color, border-color, text-decoration-color, fill, stroke",
|
|
100
95
|
transitionDuration: "150ms",
|
|
101
96
|
transitionTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)",
|
|
102
|
-
minHeight:
|
|
97
|
+
minHeight: Ot,
|
|
103
98
|
...p.gap(Rt),
|
|
104
99
|
...p.padding(B, Z),
|
|
105
100
|
fontSize: $,
|
|
@@ -113,8 +108,8 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
113
108
|
// Status variants
|
|
114
109
|
statusDefault: {},
|
|
115
110
|
statusError: {
|
|
116
|
-
backgroundColor:
|
|
117
|
-
color:
|
|
111
|
+
backgroundColor: Et,
|
|
112
|
+
color: Nt
|
|
118
113
|
},
|
|
119
114
|
statusWarning: {
|
|
120
115
|
backgroundColor: Wt,
|
|
@@ -162,12 +157,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
162
157
|
itemDragging: {
|
|
163
158
|
opacity: 0.4
|
|
164
159
|
},
|
|
165
|
-
// Index gutter — density-bound.
|
|
166
|
-
// padding to keep the index flush to the row edge at every tier; `calc(-1 * var(...))`
|
|
167
|
-
// (WP9B2A-ACCEPTANCE-LIST: "negative token expressions for that existing cancellation are
|
|
168
|
-
// authorized") tracks whichever tier is active without a separate JS branch, same reasoning as
|
|
169
|
-
// `item` above. `index-padding-x` is the one matrix completion this slice adds (DENSITY-SPEC.md
|
|
170
|
-
// §2.2): 6/8/8px — comfortable reuses the normal inset, no separate source value exists for it.
|
|
160
|
+
// Index gutter — density-bound.
|
|
171
161
|
indexBase: {
|
|
172
162
|
display: "flex",
|
|
173
163
|
flexShrink: 0,
|
|
@@ -327,7 +317,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
327
317
|
width: "1rem",
|
|
328
318
|
height: "1rem",
|
|
329
319
|
flexShrink: 0,
|
|
330
|
-
color:
|
|
320
|
+
color: mt,
|
|
331
321
|
transitionProperty: "transform",
|
|
332
322
|
transitionDuration: "150ms",
|
|
333
323
|
transitionTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)"
|
|
@@ -348,10 +338,10 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
348
338
|
marginTop: F,
|
|
349
339
|
display: "block",
|
|
350
340
|
listStyleType: "none",
|
|
351
|
-
...p.padding("0.375rem",
|
|
341
|
+
...p.padding("0.375rem", At),
|
|
352
342
|
fontSize: $,
|
|
353
343
|
lineHeight: X,
|
|
354
|
-
fontWeight:
|
|
344
|
+
fontWeight: gt,
|
|
355
345
|
color: V,
|
|
356
346
|
"&:first-child": {
|
|
357
347
|
marginTop: 0
|
|
@@ -417,23 +407,23 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
417
407
|
i.isValidElement
|
|
418
408
|
), T = I.map(
|
|
419
409
|
(d, C) => d.type === U ? i.cloneElement(d, { index: C }) : d
|
|
420
|
-
), h = I.filter((d) => d.type === U), a = h.map((d) => d.props.value).filter((d) => typeof d == "string"), [S, W] = i.useState(null), L = S ? a.indexOf(S) : -1, k = S != null ? h.find((d) => d.props.value === S) : void 0,
|
|
410
|
+
), h = I.filter((d) => d.type === U), a = h.map((d) => d.props.value).filter((d) => typeof d == "string"), [S, W] = i.useState(null), L = S ? a.indexOf(S) : -1, k = S != null ? h.find((d) => d.props.value === S) : void 0, N = Q(
|
|
421
411
|
j(nt, { activationConstraint: { distance: 3 } }),
|
|
422
412
|
j(rt)
|
|
423
|
-
),
|
|
413
|
+
), E = (d) => {
|
|
424
414
|
W(d.active.id);
|
|
425
|
-
},
|
|
415
|
+
}, A = (d) => {
|
|
426
416
|
W(null);
|
|
427
|
-
const { active: C, over:
|
|
428
|
-
if (!
|
|
429
|
-
const z = a.indexOf(C.id), M = a.indexOf(
|
|
417
|
+
const { active: C, over: g } = d;
|
|
418
|
+
if (!g || C.id === g.id) return;
|
|
419
|
+
const z = a.indexOf(C.id), M = a.indexOf(g.id);
|
|
430
420
|
z === -1 || M === -1 || r == null || r(at(a, z, M));
|
|
431
|
-
},
|
|
421
|
+
}, O = /* @__PURE__ */ t(
|
|
432
422
|
"ol",
|
|
433
423
|
{
|
|
434
424
|
ref: w,
|
|
435
425
|
"data-slot": "list",
|
|
436
|
-
[
|
|
426
|
+
[m]: "list",
|
|
437
427
|
...u !== void 0 ? { "data-density": u } : {},
|
|
438
428
|
className: f(v.list, o),
|
|
439
429
|
...b,
|
|
@@ -443,10 +433,10 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
443
433
|
return /* @__PURE__ */ t(Y.Provider, { value: { striped: e, showIndex: c, sortable: s }, children: s ? /* @__PURE__ */ D(
|
|
444
434
|
tt,
|
|
445
435
|
{
|
|
446
|
-
sensors:
|
|
436
|
+
sensors: N,
|
|
447
437
|
collisionDetection: et,
|
|
448
|
-
onDragStart:
|
|
449
|
-
onDragEnd:
|
|
438
|
+
onDragStart: E,
|
|
439
|
+
onDragEnd: A,
|
|
450
440
|
onDragCancel: () => W(null),
|
|
451
441
|
children: [
|
|
452
442
|
/* @__PURE__ */ t(
|
|
@@ -454,7 +444,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
454
444
|
{
|
|
455
445
|
items: a,
|
|
456
446
|
strategy: st,
|
|
457
|
-
children:
|
|
447
|
+
children: O
|
|
458
448
|
}
|
|
459
449
|
),
|
|
460
450
|
/* @__PURE__ */ t(ot, { children: k ? /* @__PURE__ */ t(
|
|
@@ -470,7 +460,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
470
460
|
) : null })
|
|
471
461
|
]
|
|
472
462
|
}
|
|
473
|
-
) :
|
|
463
|
+
) : O });
|
|
474
464
|
}), Vt = i.forwardRef(function({ className: o, children: l, ...e }, c) {
|
|
475
465
|
const s = y();
|
|
476
466
|
return /* @__PURE__ */ t(
|
|
@@ -478,7 +468,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
478
468
|
{
|
|
479
469
|
ref: c,
|
|
480
470
|
"data-slot": "list-item-actions",
|
|
481
|
-
[
|
|
471
|
+
[m]: "list-item-actions",
|
|
482
472
|
onPointerDown: (r) => r.stopPropagation(),
|
|
483
473
|
className: f(s.actions, o),
|
|
484
474
|
...e,
|
|
@@ -492,7 +482,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
492
482
|
{
|
|
493
483
|
ref: e,
|
|
494
484
|
"data-slot": "list-item-text",
|
|
495
|
-
[
|
|
485
|
+
[m]: "list-item-text",
|
|
496
486
|
className: f(c.text, o),
|
|
497
487
|
...l
|
|
498
488
|
}
|
|
@@ -504,7 +494,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
504
494
|
{
|
|
505
495
|
ref: e,
|
|
506
496
|
"data-slot": "list-item-description",
|
|
507
|
-
[
|
|
497
|
+
[m]: "list-item-description",
|
|
508
498
|
className: f(c.description, o),
|
|
509
499
|
...l
|
|
510
500
|
}
|
|
@@ -525,21 +515,21 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
525
515
|
attributes: I,
|
|
526
516
|
...T
|
|
527
517
|
}, h) {
|
|
528
|
-
const a = y(), { striped: S, showIndex: W, sortable: L } = J(), k = L && !w,
|
|
529
|
-
(
|
|
530
|
-
),
|
|
531
|
-
(
|
|
532
|
-
r == null || r(
|
|
518
|
+
const a = y(), { striped: S, showIndex: W, sortable: L } = J(), k = L && !w, N = i.Children.toArray(s), E = N.find(
|
|
519
|
+
(g) => i.isValidElement(g) && g.type === Vt
|
|
520
|
+
), A = N.filter((g) => g !== E), O = i.useCallback(
|
|
521
|
+
(g) => {
|
|
522
|
+
r == null || r(g), typeof h == "function" ? h(g) : h && (h.current = g);
|
|
533
523
|
},
|
|
534
524
|
[r, h]
|
|
535
525
|
), d = e === "error" ? a.statusError : e === "warning" ? a.statusWarning : e === "success" ? a.statusSuccess : a.statusDefault, C = k ? e === "error" ? a.interactiveError : e === "warning" ? a.interactiveWarning : e === "success" ? a.interactiveSuccess : a.interactiveDefault : void 0;
|
|
536
526
|
return /* @__PURE__ */ D(
|
|
537
527
|
"li",
|
|
538
528
|
{
|
|
539
|
-
ref:
|
|
529
|
+
ref: O,
|
|
540
530
|
style: b,
|
|
541
531
|
"data-slot": "list-item",
|
|
542
|
-
[
|
|
532
|
+
[m]: "list-item",
|
|
543
533
|
"data-status": e,
|
|
544
534
|
"data-value": l,
|
|
545
535
|
onPointerDown: L ? u == null ? void 0 : u.onPointerDown : void 0,
|
|
@@ -558,7 +548,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
558
548
|
"span",
|
|
559
549
|
{
|
|
560
550
|
"data-slot": "list-drop-indicator",
|
|
561
|
-
[
|
|
551
|
+
[m]: "list-drop-indicator",
|
|
562
552
|
"aria-hidden": "true",
|
|
563
553
|
className: f(
|
|
564
554
|
a.dropIndicator,
|
|
@@ -570,7 +560,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
570
560
|
"span",
|
|
571
561
|
{
|
|
572
562
|
"data-slot": "list-item-index",
|
|
573
|
-
[
|
|
563
|
+
[m]: "list-item-index",
|
|
574
564
|
"aria-hidden": "true",
|
|
575
565
|
className: a.indexBase,
|
|
576
566
|
children: (c ?? 0) + 1
|
|
@@ -580,13 +570,13 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
580
570
|
"span",
|
|
581
571
|
{
|
|
582
572
|
"data-slot": "list-item-content",
|
|
583
|
-
[
|
|
573
|
+
[m]: "list-item-content",
|
|
584
574
|
className: a.content,
|
|
585
|
-
children:
|
|
575
|
+
children: A
|
|
586
576
|
}
|
|
587
577
|
),
|
|
588
578
|
/* @__PURE__ */ t(jt, { status: e }),
|
|
589
|
-
|
|
579
|
+
E,
|
|
590
580
|
L && /* @__PURE__ */ t(
|
|
591
581
|
"button",
|
|
592
582
|
{
|
|
@@ -658,7 +648,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
658
648
|
{
|
|
659
649
|
ref: x,
|
|
660
650
|
"data-slot": "list-group",
|
|
661
|
-
[
|
|
651
|
+
[m]: "list-group",
|
|
662
652
|
"data-state": u ? "open" : "closed",
|
|
663
653
|
className: f(b.group, c),
|
|
664
654
|
...r,
|
|
@@ -674,7 +664,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
674
664
|
ref: c,
|
|
675
665
|
type: "button",
|
|
676
666
|
"data-slot": "list-group-trigger",
|
|
677
|
-
[
|
|
667
|
+
[m]: "list-group-trigger",
|
|
678
668
|
"aria-expanded": r.open,
|
|
679
669
|
"aria-controls": r.contentId,
|
|
680
670
|
onClick: () => r.setOpen(!r.open),
|
|
@@ -703,7 +693,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
703
693
|
{
|
|
704
694
|
ref: c,
|
|
705
695
|
"data-slot": "list-group-label",
|
|
706
|
-
[
|
|
696
|
+
[m]: "list-group-label",
|
|
707
697
|
className: f(s.standaloneGroupLabel, o),
|
|
708
698
|
children: l
|
|
709
699
|
}
|
|
@@ -714,7 +704,7 @@ const Ht = (n) => /* @__PURE__ */ D(
|
|
|
714
704
|
{
|
|
715
705
|
ref: c,
|
|
716
706
|
"data-slot": "list-group-content",
|
|
717
|
-
[
|
|
707
|
+
[m]: "list-group-content",
|
|
718
708
|
className: f(s.list, s.groupContentList, o),
|
|
719
709
|
...e,
|
|
720
710
|
children: l
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sources":["../../../src/components/list/list.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {\n DndContext,\n DragOverlay,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n type DraggableAttributes,\n type DraggableSyntheticListeners,\n} from \"@dnd-kit/core\"\nimport {\n SortableContext,\n verticalListSortingStrategy,\n arrayMove,\n useSortable,\n} from \"@dnd-kit/sortable\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * `relaxed` is a permanent compatibility alias for `normal` (DENSITY-SPEC.md §4.2,\n * WP9B2A-ACCEPTANCE-LIST) — identical geometry, forever, not deprecated. `compact`/`normal`/\n * `comfortable` are the three canonical CSS density tiers (`[data-density]`); `relaxed` never\n * appears as a DOM attribute value — an explicit `density=\"relaxed\"` normalizes to the DOM's\n * canonical `data-density=\"normal\"` (§ List, below), since the generator's three selector blocks\n * only ever match those three literal strings.\n */\nexport type ListDensity = \"compact\" | \"normal\" | \"comfortable\" | \"relaxed\"\nexport type ListItemStatus = \"default\" | \"error\" | \"warning\" | \"success\"\n\n// ── Icons ──────────────────────────────────────────────────────────────────\n\nconst GripVerticalIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx=\"9\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"19\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"19\" r=\"1.5\" />\n </svg>\n)\n\nconst WarningIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n)\n\nconst CheckCircleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n)\n\n// ── Styles ─────────────────────────────────────────────────────────────────\n\nconst useStyles = makeZenithStyles({\n list: {\n display: \"flex\",\n width: \"100%\",\n listStyleType: \"none\",\n flexDirection: \"column\",\n ...shorthands.gap(0),\n ...shorthands.padding(0),\n ...shorthands.margin(0),\n },\n\n // ListItem base — density-bound (DENSITY-SPEC.md §2.2, WP9B2A-ACCEPTANCE-LIST). One style, not\n // a compact/relaxed pair: the three CSS tiers are resolved by [data-density] inheritance, so\n // there is no longer a JS branch to pick between \"compact\" and \"everything else\" — normal\n // resolves to the same values `itemRelaxed` used to hardcode, and an explicit `relaxed` is\n // normalized to the DOM's canonical `data-density=\"normal\"` before it ever reaches this class,\n // so it resolves through the identical selector. Typography is unchanged across every tier.\n item: {\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n ...shorthands.borderRadius(tokens.radiusMd),\n color: tokens.grayA12,\n transitionProperty:\n \"color, background-color, border-color, text-decoration-color, fill, stroke\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n minHeight: tokens.listItemMinHeight,\n ...shorthands.gap(tokens.listItemGap),\n ...shorthands.padding(tokens.listItemPaddingY, tokens.listItemPaddingX),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n \"& > svg\": {\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n\n // Status variants\n statusDefault: {},\n statusError: {\n backgroundColor: tokens.semErrorSoft,\n color: tokens.semErrorDefault,\n },\n statusWarning: {\n backgroundColor: tokens.semWarningSoft,\n color: tokens.semWarningDefault,\n },\n statusSuccess: {\n backgroundColor: tokens.semSuccessSoft,\n color: tokens.semSuccessDefault,\n },\n\n // Striped variant (only neutral rows)\n stripedEven: {\n \"&:nth-child(even)\": {\n backgroundColor: tokens.grayA2,\n },\n },\n\n // Interactive hovers\n interactiveDefault: {\n \":hover\": {\n backgroundColor: tokens.semAccentSoft,\n },\n },\n interactiveError: {\n \":hover\": {\n backgroundColor: tokens.semErrorSoftHover,\n },\n },\n interactiveWarning: {\n \":hover\": {\n backgroundColor: tokens.semWarningSoftHover,\n },\n },\n interactiveSuccess: {\n \":hover\": {\n backgroundColor: tokens.semSuccessSoftHover,\n },\n },\n\n // Sortable modifiers\n sortableItem: {\n cursor: \"grab\",\n touchAction: \"none\",\n \":active\": {\n cursor: \"grabbing\",\n },\n },\n itemDragging: {\n opacity: 0.4,\n },\n\n // Index gutter — density-bound. The negative margins cancel the ITEM's own (now density-bound)\n // padding to keep the index flush to the row edge at every tier; `calc(-1 * var(...))`\n // (WP9B2A-ACCEPTANCE-LIST: \"negative token expressions for that existing cancellation are\n // authorized\") tracks whichever tier is active without a separate JS branch, same reasoning as\n // `item` above. `index-padding-x` is the one matrix completion this slice adds (DENSITY-SPEC.md\n // §2.2): 6/8/8px — comfortable reuses the normal inset, no separate source value exists for it.\n indexBase: {\n display: \"flex\",\n flexShrink: 0,\n userSelect: \"none\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"stretch\",\n borderTopLeftRadius: tokens.radiusMd,\n borderBottomLeftRadius: tokens.radiusMd,\n backgroundColor: tokens.grayA2,\n textAlign: \"center\",\n color: tokens.grayA11,\n fontVariantNumeric: \"tabular-nums\",\n minWidth: tokens.listIndexMinWidth,\n marginTop: `calc(-1 * ${tokens.listItemPaddingY})`,\n marginBottom: `calc(-1 * ${tokens.listItemPaddingY})`,\n marginLeft: `calc(-1 * ${tokens.listItemPaddingX})`,\n paddingLeft: tokens.listIndexPaddingX,\n paddingRight: tokens.listIndexPaddingX,\n },\n\n // Content\n content: {\n display: \"flex\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n \"& > svg\": {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n },\n },\n\n // Actions\n actions: {\n position: \"relative\",\n zIndex: 10,\n display: \"flex\",\n flexShrink: 0,\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n },\n\n // Text\n text: {\n display: \"flex\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n flexDirection: \"column\",\n ...shorthands.gap(\"0.125rem\"),\n },\n\n // Description\n description: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n color: tokens.grayA11,\n },\n\n // Drag handle button\n dragHandle: {\n position: \"relative\",\n zIndex: 10,\n display: \"inline-flex\",\n flexShrink: 0,\n cursor: \"grab\",\n alignItems: \"center\",\n color: tokens.grayA8,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \":hover\": {\n color: tokens.grayA11,\n },\n \":active\": {\n cursor: \"grabbing\",\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \"& svg\": {\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n\n // Drop indicator line\n dropIndicator: {\n pointerEvents: \"none\",\n position: \"absolute\",\n left: 0,\n right: 0,\n zIndex: 10,\n height: \"0.125rem\",\n transformOrigin: \"center\",\n ...shorthands.borderRadius(\"9999px\"),\n backgroundColor: tokens.semAccentSolid,\n animationName: {\n from: {\n transform: \"scaleX(0)\",\n opacity: 0,\n },\n to: {\n transform: \"scaleX(1)\",\n opacity: 1,\n },\n },\n animationDuration: \"160ms\",\n animationTimingFunction: \"ease-out\",\n },\n dropIndicatorTop: {\n top: \"-0.125rem\",\n },\n dropIndicatorBottom: {\n bottom: \"-0.125rem\",\n },\n\n // DragOverlay ghost\n dragOverlayItem: {\n transformOrigin: \"center\",\n transform: \"scale(0.95)\",\n cursor: \"grabbing\",\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA5),\n backgroundColor: \"rgb(255 255 255 / 55%)\",\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n backdropFilter: \"blur(12px)\",\n animationName: {\n from: { transform: \"scale(1)\" },\n to: { transform: \"scale(0.95)\" },\n },\n animationDuration: \"160ms\",\n animationTimingFunction: \"ease-out\",\n \":hover\": {\n backgroundColor: \"rgb(255 255 255 / 55%)\",\n },\n },\n\n // Group\n group: {\n listStyleType: \"none\",\n },\n groupTrigger: {\n cursor: \"pointer\",\n textAlign: \"left\",\n fontWeight: tokens.fontWeightMedium,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n },\n groupChevron: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.grayA10,\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n groupChevronOpen: {\n transform: \"rotate(90deg)\",\n },\n groupTriggerText: {\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n standaloneGroupLabel: {\n marginTop: tokens.spacingGroup2,\n display: \"block\",\n listStyleType: \"none\",\n ...shorthands.padding(\"0.375rem\", tokens.spacingElement3),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n \"&:first-child\": {\n marginTop: 0,\n },\n },\n groupContentList: {\n paddingLeft: tokens.spacingGroup2,\n },\n collapseWrapper: {\n display: \"grid\",\n gridTemplateRows: \"0fr\",\n transitionProperty: \"grid-template-rows\",\n transitionDuration: \"200ms\",\n transitionTimingFunction: \"cubic-bezier(0, 0, 0.2, 1)\",\n \"&[data-state='open']\": {\n gridTemplateRows: \"1fr\",\n },\n },\n collapseWrapperOpen: {\n gridTemplateRows: \"1fr\",\n },\n collapseInner: {\n minHeight: 0,\n overflow: \"hidden\",\n },\n\n // Status icons\n statusIconError: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semErrorLight,\n },\n statusIconWarning: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semWarningLight,\n },\n statusIconSuccess: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semSuccessLight,\n },\n})\n\n// ── Status Icons Helper ────────────────────────────────────────────────────\n\nconst StatusIcon = ({ status }: { status: ListItemStatus }) => {\n const styles = useStyles()\n if (status === \"error\") {\n return <WarningIcon className={styles.statusIconError} />\n }\n if (status === \"warning\") {\n return <WarningIcon className={styles.statusIconWarning} />\n }\n if (status === \"success\") {\n return <CheckCircleIcon className={styles.statusIconSuccess} />\n }\n return null\n}\n\n// ── Context ────────────────────────────────────────────────────────────────\n\n/**\n * `density` is deliberately NOT here — every downstream consumer (`ListItemBody`,\n * `ListGroupLabel`'s collapsible-trigger branch) now reads geometry from CSS custom properties via\n * `[data-density]` inheritance, not from this context. `ListContext` is private/unexported (unlike\n * `TableDensityContext`), so it never had the public-`Provider`-compatibility problem Table\n * had — there is no external raw Provider to reconcile with, so no marker/comparison mechanism\n * is needed here.\n */\ntype ListContextValue = {\n striped: boolean\n showIndex: boolean\n sortable: boolean\n}\n\nconst ListContext = React.createContext<ListContextValue>({\n striped: false,\n showIndex: false,\n sortable: false,\n})\n\nconst useListContext = () => React.useContext(ListContext)\n\n/**\n * `undefined` (density omitted) stays `undefined` — no implicit normal stamp, so the `<ol>`\n * inherits ambient CSS density through ordinary DOM inheritance. Explicit `relaxed` normalizes to\n * the canonical DOM value `\"normal\"`: the generator's three selector blocks\n * (`packages/tokens/scripts/lib/model.ts`, `densitySelector`) only ever match the literal strings\n * `\"compact\"`/`\"normal\"`/`\"comfortable\"`, so a raw `data-density=\"relaxed\"` attribute would match\n * none of them and silently fall through to whatever ancestor happens to be there — not the\n * pixel-identical-to-normal geometry `relaxed` promises. Every other explicit value passes through\n * unchanged.\n */\nconst canonicalDomDensity = (\n density: ListDensity | undefined\n): \"compact\" | \"normal\" | \"comfortable\" | undefined =>\n density === undefined ? undefined : density === \"relaxed\" ? \"normal\" : density\n\n// ── List ───────────────────────────────────────────────────────────────────\n\nexport type ListProps = Omit<React.ComponentProps<\"ol\">, \"onReorder\"> & {\n /**\n * Row density. Omitted inherits the ambient shell `[data-density]` (no stamp is written).\n * `\"relaxed\"` is a permanent alias for `\"normal\"` — identical geometry, normalized to\n * `data-density=\"normal\"` in the DOM. An explicit value (including `\"relaxed\"`) creates a\n * canonical density boundary for this list's subtree and its `DragOverlay`.\n */\n density?: ListDensity\n /** Alternating background on neutral rows. Default: false */\n striped?: boolean\n /** Show a 1-based position number on each item. Default: false */\n showIndex?: boolean\n /** Enable drag-and-drop reordering. Each `ListItem` must have a `value`. */\n sortable?: boolean\n /** Called with the new order of `ListItem` values after a drag. */\n onReorder?: (values: string[]) => void\n}\n\nexport const List = React.forwardRef<HTMLOListElement, ListProps>(function List(\n {\n className,\n density,\n striped = false,\n showIndex = false,\n sortable = false,\n onReorder,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const domDensity = canonicalDomDensity(density)\n\n const items = React.Children.toArray(children).filter(\n React.isValidElement\n ) as React.ReactElement<ListItemProps>[]\n\n const indexedItems = items.map((child, index) =>\n child.type === ListItem ? React.cloneElement(child, { index }) : child\n )\n\n const sortableItems = items.filter((child) => child.type === ListItem)\n const values = sortableItems\n .map((child) => child.props.value)\n .filter((v): v is string => typeof v === \"string\")\n\n const [activeId, setActiveId] = React.useState<string | null>(null)\n const activeIndex = activeId ? values.indexOf(activeId) : -1\n const activeItem =\n activeId != null\n ? sortableItems.find((child) => child.props.value === activeId)\n : undefined\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 3 } }),\n useSensor(KeyboardSensor)\n )\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id as string)\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n setActiveId(null)\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const oldIndex = values.indexOf(active.id as string)\n const newIndex = values.indexOf(over.id as string)\n if (oldIndex === -1 || newIndex === -1) return\n\n onReorder?.(arrayMove(values, oldIndex, newIndex))\n }\n\n const listElement = (\n <ol\n ref={ref}\n data-slot=\"list\"\n {...{ [SLOT_ATTR]: \"list\" }}\n {...(domDensity !== undefined ? { \"data-density\": domDensity } : {})}\n className={mergeClasses(styles.list, className)}\n {...props}\n >\n {indexedItems}\n </ol>\n )\n\n return (\n <ListContext.Provider value={{ striped, showIndex, sortable }}>\n {sortable ? (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={values}\n strategy={verticalListSortingStrategy}\n >\n {listElement}\n </SortableContext>\n <DragOverlay>\n {activeItem ? (\n <ListItemBody\n value={activeItem.props.value}\n status={activeItem.props.status}\n index={activeIndex}\n className={styles.dragOverlayItem}\n // Reasserted only for an EXPLICIT density: DragOverlay is an ordinary DOM\n // sibling of `listElement`, not a portal\n // (dnd-kit's `PositionedOverlay` renders in place — confirmed from the installed\n // source), so an omitted/ambient density already reaches it correctly through the\n // real DOM tree with no stamp at all. Stamping the resolved value unconditionally\n // would mask a correct ambient value with a stale JS default. The boundary lands\n // directly on this existing `ListItemBody` root, not a new wrapper.\n {...(domDensity !== undefined\n ? { \"data-density\": domDensity }\n : {})}\n >\n {activeItem.props.children}\n </ListItemBody>\n ) : null}\n </DragOverlay>\n </DndContext>\n ) : (\n listElement\n )}\n </ListContext.Provider>\n )\n})\n\n// ── ListItemActions ────────────────────────────────────────────────────────\n\nexport type ListItemActionsProps = React.ComponentProps<\"span\">\n\nexport const ListItemActions = React.forwardRef<\n HTMLSpanElement,\n ListItemActionsProps\n>(function ListItemActions({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-actions\"\n {...{ [SLOT_ATTR]: \"list-item-actions\" }}\n onPointerDown={(e) => e.stopPropagation()}\n className={mergeClasses(styles.actions, className)}\n {...props}\n >\n {children}\n </span>\n )\n})\n\n// ── ListItemText ───────────────────────────────────────────────────────────\n\nexport type ListItemTextProps = React.ComponentProps<\"span\">\n\nexport const ListItemText = React.forwardRef<\n HTMLSpanElement,\n ListItemTextProps\n>(function ListItemText({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-text\"\n {...{ [SLOT_ATTR]: \"list-item-text\" }}\n className={mergeClasses(styles.text, className)}\n {...props}\n />\n )\n})\n\n// ── ListItemDescription ────────────────────────────────────────────────────\n\nexport type ListItemDescriptionProps = React.ComponentProps<\"span\">\n\nexport const ListItemDescription = React.forwardRef<\n HTMLSpanElement,\n ListItemDescriptionProps\n>(function ListItemDescription({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-description\"\n {...{ [SLOT_ATTR]: \"list-item-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n />\n )\n})\n\n// ── ListItemBody ───────────────────────────────────────────────────────────\n\nexport type ListItemProps = React.ComponentProps<\"li\"> & {\n /** Stable id used for drag-and-drop. Required when the `List` is `sortable`. */\n value?: string\n /** System status. Tints the row and shows a trailing status icon. */\n status?: ListItemStatus\n /** Injected by `List` — the 0-based position. */\n index?: number\n}\n\ntype ListItemBodyProps = ListItemProps & {\n setNodeRef?: (node: HTMLElement | null) => void\n setActivatorNodeRef?: (node: HTMLElement | null) => void\n style?: React.CSSProperties\n isDragging?: boolean\n /** Insertion indicator edge while another item is dragged over this one. */\n dropEdge?: \"top\" | \"bottom\" | null\n /** dnd-kit listeners — pointer activation goes on the row, keyboard on the handle. */\n listeners?: DraggableSyntheticListeners\n /** dnd-kit a11y attributes for the keyboard drag handle. */\n attributes?: DraggableAttributes\n}\n\nconst ListItemBody = React.forwardRef<HTMLLIElement, ListItemBodyProps>(\n function ListItemBody(\n {\n className,\n value,\n status = \"default\",\n index,\n children,\n setNodeRef,\n setActivatorNodeRef,\n style,\n isDragging,\n dropEdge,\n listeners,\n attributes,\n ...props\n },\n forwardedRef\n ) {\n const styles = useStyles()\n const { striped, showIndex, sortable } = useListContext()\n const interactive = sortable && !isDragging\n\n const childArray = React.Children.toArray(children)\n const actionsSlot = childArray.find(\n (child): child is React.ReactElement =>\n React.isValidElement(child) && child.type === ListItemActions\n )\n const contentChildren = childArray.filter((child) => child !== actionsSlot)\n\n // Combined ref for dnd-kit setNodeRef + caller's forwardedRef\n const handleRef = React.useCallback(\n (node: HTMLLIElement | null) => {\n setNodeRef?.(node)\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node)\n } else if (forwardedRef) {\n ;(\n forwardedRef as React.MutableRefObject<HTMLLIElement | null>\n ).current = node\n }\n },\n [setNodeRef, forwardedRef]\n )\n\n const statusStyle =\n status === \"error\"\n ? styles.statusError\n : status === \"warning\"\n ? styles.statusWarning\n : status === \"success\"\n ? styles.statusSuccess\n : styles.statusDefault\n\n const interactiveStyle = interactive\n ? status === \"error\"\n ? styles.interactiveError\n : status === \"warning\"\n ? styles.interactiveWarning\n : status === \"success\"\n ? styles.interactiveSuccess\n : styles.interactiveDefault\n : undefined\n\n return (\n <li\n ref={handleRef}\n style={style}\n data-slot=\"list-item\"\n {...{ [SLOT_ATTR]: \"list-item\" }}\n data-status={status}\n data-value={value}\n onPointerDown={\n sortable\n ? (listeners?.onPointerDown as\n React.PointerEventHandler<HTMLLIElement> | undefined)\n : undefined\n }\n className={mergeClasses(\n styles.item,\n statusStyle,\n striped && status === \"default\" && styles.stripedEven,\n interactiveStyle,\n sortable && styles.sortableItem,\n isDragging && styles.itemDragging,\n className\n )}\n {...props}\n >\n {dropEdge && (\n <span\n data-slot=\"list-drop-indicator\"\n {...{ [SLOT_ATTR]: \"list-drop-indicator\" }}\n aria-hidden=\"true\"\n className={mergeClasses(\n styles.dropIndicator,\n dropEdge === \"top\"\n ? styles.dropIndicatorTop\n : styles.dropIndicatorBottom\n )}\n />\n )}\n\n {showIndex && (\n <span\n data-slot=\"list-item-index\"\n {...{ [SLOT_ATTR]: \"list-item-index\" }}\n aria-hidden=\"true\"\n className={styles.indexBase}\n >\n {(index ?? 0) + 1}\n </span>\n )}\n\n <span\n data-slot=\"list-item-content\"\n {...{ [SLOT_ATTR]: \"list-item-content\" }}\n className={styles.content}\n >\n {contentChildren}\n </span>\n\n <StatusIcon status={status} />\n\n {actionsSlot}\n\n {sortable && (\n <button\n ref={setActivatorNodeRef}\n type=\"button\"\n aria-label={`Drag to reorder ${value ?? \"item\"}`}\n className={styles.dragHandle}\n {...attributes}\n onKeyDown={\n listeners?.onKeyDown as\n React.KeyboardEventHandler<HTMLButtonElement> | undefined\n }\n >\n <GripVerticalIcon />\n </button>\n )}\n </li>\n )\n }\n)\n\n// ── SortableListItem ───────────────────────────────────────────────────────\n\nconst SortableListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function SortableListItem(props, ref) {\n const fallbackId = React.useId()\n\n if (process.env.NODE_ENV !== \"production\" && props.value === undefined) {\n console.warn(\n \"List: a sortable `ListItem` is missing a `value`. \" +\n \"Give each sortable item a unique `value` so it can be reordered — \" +\n \"items without one are excluded from `onReorder`.\"\n )\n }\n\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n isDragging,\n isOver,\n activeIndex,\n overIndex,\n } = useSortable({\n id: props.value ?? fallbackId,\n animateLayoutChanges: () => false,\n })\n\n const dropEdge: \"top\" | \"bottom\" | null =\n isOver && !isDragging && activeIndex !== -1\n ? activeIndex < overIndex\n ? \"bottom\"\n : \"top\"\n : null\n\n return (\n <ListItemBody\n ref={ref}\n {...props}\n setNodeRef={setNodeRef}\n setActivatorNodeRef={setActivatorNodeRef}\n isDragging={isDragging}\n dropEdge={dropEdge}\n listeners={listeners}\n attributes={attributes}\n />\n )\n }\n)\n\n// ── ListItem ───────────────────────────────────────────────────────────────\n\nexport const ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function ListItem(props, ref) {\n const { sortable } = useListContext()\n\n if (sortable) {\n return <SortableListItem ref={ref} {...props} />\n }\n\n return <ListItemBody ref={ref} {...props} />\n }\n)\n\n// ── ListGroup ──────────────────────────────────────────────────────────────\n\ntype ListGroupContextValue = {\n open: boolean\n setOpen: (open: boolean) => void\n contentId: string\n}\n\nconst ListGroupContext = React.createContext<ListGroupContextValue | null>(null)\n\nexport type ListGroupProps = Omit<React.ComponentProps<\"li\">, \"onChange\"> & {\n /** Controlled open state of the collapsible group. */\n open?: boolean\n /** Initial open state when uncontrolled. Default: false */\n defaultOpen?: boolean\n /** Called when the group is expanded or collapsed. */\n onOpenChange?: (open: boolean) => void\n}\n\nexport const ListGroup = React.forwardRef<HTMLLIElement, ListGroupProps>(\n function ListGroup(\n {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n className,\n children,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const open = openProp ?? uncontrolledOpen\n const contentId = React.useId()\n\n const setOpen = (next: boolean) => {\n if (openProp === undefined) setUncontrolledOpen(next)\n onOpenChange?.(next)\n }\n\n return (\n <ListGroupContext.Provider value={{ open, setOpen, contentId }}>\n <li\n ref={ref}\n data-slot=\"list-group\"\n {...{ [SLOT_ATTR]: \"list-group\" }}\n data-state={open ? \"open\" : \"closed\"}\n className={mergeClasses(styles.group, className)}\n {...props}\n >\n {children}\n </li>\n </ListGroupContext.Provider>\n )\n }\n)\n\n// ── ListGroupLabel ─────────────────────────────────────────────────────────\n\nexport type ListGroupLabelProps = React.ComponentProps<\"button\"> & {\n asListItem?: boolean\n}\n\nexport const ListGroupLabel = React.forwardRef<\n HTMLElement,\n ListGroupLabelProps\n>(function ListGroupLabel({ className, children, ...props }, ref) {\n const styles = useStyles()\n const group = React.useContext(ListGroupContext)\n\n if (group) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n data-slot=\"list-group-trigger\"\n {...{ [SLOT_ATTR]: \"list-group-trigger\" }}\n aria-expanded={group.open}\n aria-controls={group.contentId}\n onClick={() => group.setOpen(!group.open)}\n className={mergeClasses(\n styles.item,\n styles.interactiveDefault,\n styles.groupTrigger,\n className\n )}\n {...props}\n >\n <ChevronRightIcon\n className={mergeClasses(\n styles.groupChevron,\n group.open && styles.groupChevronOpen\n )}\n />\n <span className={styles.groupTriggerText}>{children}</span>\n </button>\n )\n }\n\n return (\n <li\n ref={ref as React.Ref<HTMLLIElement>}\n data-slot=\"list-group-label\"\n {...{ [SLOT_ATTR]: \"list-group-label\" }}\n className={mergeClasses(styles.standaloneGroupLabel, className)}\n >\n {children}\n </li>\n )\n})\n\n// ── ListGroupContent ───────────────────────────────────────────────────────\n\nexport type ListGroupContentProps = React.ComponentProps<\"ul\">\n\nexport const ListGroupContent = React.forwardRef<\n HTMLUListElement,\n ListGroupContentProps\n>(function ListGroupContent({ className, children, ...props }, ref) {\n const styles = useStyles()\n const group = React.useContext(ListGroupContext)\n\n const items = (\n <ul\n ref={ref}\n data-slot=\"list-group-content\"\n {...{ [SLOT_ATTR]: \"list-group-content\" }}\n className={mergeClasses(styles.list, styles.groupContentList, className)}\n {...props}\n >\n {children}\n </ul>\n )\n\n if (!group) return items\n\n return (\n <div\n id={group.contentId}\n data-state={group.open ? \"open\" : \"closed\"}\n className={mergeClasses(\n styles.collapseWrapper,\n group.open && styles.collapseWrapperOpen\n )}\n >\n <div className={styles.collapseInner}>{items}</div>\n </div>\n )\n})\n"],"names":["GripVerticalIcon","props","jsxs","jsx","WarningIcon","CheckCircleIcon","ChevronRightIcon","useStyles","makeZenithStyles","shorthands","tokens.radiusMd","tokens.grayA12","tokens.listItemMinHeight","tokens.listItemGap","tokens.listItemPaddingY","tokens.listItemPaddingX","tokens.textSm","tokens.leadingSm","tokens.semErrorSoft","tokens.semErrorDefault","tokens.semWarningSoft","tokens.semWarningDefault","tokens.semSuccessSoft","tokens.semSuccessDefault","tokens.grayA2","tokens.semAccentSoft","tokens.semErrorSoftHover","tokens.semWarningSoftHover","tokens.semSuccessSoftHover","tokens.grayA11","tokens.listIndexMinWidth","tokens.listIndexPaddingX","tokens.spacingElement2","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.grayA8","tokens.accentA8","tokens.semAccentSolid","tokens.grayA5","tokens.fontWeightMedium","tokens.grayA10","tokens.spacingGroup2","tokens.spacingElement3","tokens.fontWeightSemibold","tokens.semErrorLight","tokens.semWarningLight","tokens.semSuccessLight","StatusIcon","status","styles","ListContext","React","useListContext","canonicalDomDensity","density","List","className","striped","showIndex","sortable","onReorder","children","ref","domDensity","items","indexedItems","child","index","ListItem","sortableItems","values","v","activeId","setActiveId","activeIndex","activeItem","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","handleDragStart","event","handleDragEnd","active","over","oldIndex","newIndex","arrayMove","listElement","SLOT_ATTR","mergeClasses","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","ListItemBody","ListItemActions","e","ListItemText","ListItemDescription","value","setNodeRef","setActivatorNodeRef","style","isDragging","dropEdge","listeners","attributes","forwardedRef","interactive","childArray","actionsSlot","contentChildren","handleRef","node","statusStyle","interactiveStyle","SortableListItem","fallbackId","isOver","overIndex","useSortable","ListGroupContext","ListGroup","openProp","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","open","contentId","setOpen","next","ListGroupLabel","group","ListGroupContent"],"mappings":";;;;;;;AAuCA,MAAMA,KAAmB,CAACC,MACxB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,eAAY;AAAA,IACX,GAAGD;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAE,EAAC,YAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM;AAAA,wBAC7B,UAAA,EAAO,IAAG,MAAK,IAAG,KAAI,GAAE,OAAM;AAAA,wBAC9B,UAAA,EAAO,IAAG,KAAI,IAAG,MAAK,GAAE,OAAM;AAAA,wBAC9B,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,OAAM;AAAA,wBAC/B,UAAA,EAAO,IAAG,KAAI,IAAG,MAAK,GAAE,OAAM;AAAA,wBAC9B,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAA,CAAM;AAAA,IAAA;AAAA,EAAA;AAClC,GAGIC,IAAc,CAACH,MACnB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,IACf,eAAY;AAAA,IACX,GAAGD;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAE,EAAC,QAAA,EAAK,GAAE,2FAAA,CAA2F;AAAA,MACnG,gBAAAA,EAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,KAAA,CAAK;AAAA,MACrC,gBAAAA,EAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,SAAQ,IAAG,KAAA,CAAK;AAAA,IAAA;AAAA,EAAA;AAC3C,GAGIE,KAAkB,CAACJ,MACvB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,IACf,eAAY;AAAA,IACX,GAAGD;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAE,EAAC,QAAA,EAAK,GAAE,qCAAA,CAAqC;AAAA,MAC7C,gBAAAA,EAAC,YAAA,EAAS,QAAO,wBAAA,CAAwB;AAAA,IAAA;AAAA,EAAA;AAC3C,GAGIG,KAAmB,CAACL,MACxB,gBAAAE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,IACf,eAAY;AAAA,IACX,GAAGF;AAAA,IAEJ,UAAA,gBAAAE,EAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,EAAA;AACpC,GAKII,IAAYC,GAAiB;AAAA,EACjC,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,eAAe;AAAA,IACf,eAAe;AAAA,IACf,GAAGC,EAAW,IAAI,CAAC;AAAA,IACnB,GAAGA,EAAW,QAAQ,CAAC;AAAA,IACvB,GAAGA,EAAW,OAAO,CAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxB,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,GAAGA,EAAW,aAAaC,CAAe;AAAA,IAC1C,OAAOC;AAAAA,IACP,oBACE;AAAA,IACF,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,WAAWC;AAAAA,IACX,GAAGH,EAAW,IAAII,EAAkB;AAAA,IACpC,GAAGJ,EAAW,QAAQK,GAAyBC,CAAuB;AAAA,IACtE,UAAUC;AAAAA,IACV,YAAYC;AAAAA,IACZ,WAAW;AAAA,MACT,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA;AAAA,EAIF,eAAe,CAAA;AAAA,EACf,aAAa;AAAA,IACX,iBAAiBC;AAAAA,IACjB,OAAOC;AAAAA,EAAO;AAAA,EAEhB,eAAe;AAAA,IACb,iBAAiBC;AAAAA,IACjB,OAAOC;AAAAA,EAAO;AAAA,EAEhB,eAAe;AAAA,IACb,iBAAiBC;AAAAA,IACjB,OAAOC;AAAAA,EAAO;AAAA;AAAA,EAIhB,aAAa;AAAA,IACX,qBAAqB;AAAA,MACnB,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA;AAAA,EAIF,oBAAoB;AAAA,IAClB,UAAU;AAAA,MACR,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA,EAEF,kBAAkB;AAAA,IAChB,UAAU;AAAA,MACR,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA,EAEF,oBAAoB;AAAA,IAClB,UAAU;AAAA,MACR,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA,EAEF,oBAAoB;AAAA,IAClB,UAAU;AAAA,MACR,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA;AAAA,EAIF,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,WAAW;AAAA,MACT,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEF,cAAc;AAAA,IACZ,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASX,WAAW;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,qBAAqBlB;AAAAA,IACrB,wBAAwBA;AAAAA,IACxB,iBAAiBc;AAAAA,IACjB,WAAW;AAAA,IACX,OAAOK;AAAAA,IACP,oBAAoB;AAAA,IACpB,UAAUC;AAAAA,IACV,WAAW,aAAahB,CAAuB;AAAA,IAC/C,cAAc,aAAaA,CAAuB;AAAA,IAClD,YAAY,aAAaC,CAAuB;AAAA,IAChD,aAAagB;AAAAA,IACb,cAAcA;AAAAA,EAAO;AAAA;AAAA,EAIvB,SAAS;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,GAAGtB,EAAW,IAAIuB,EAAsB;AAAA,IACxC,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,IAAA;AAAA,EACd;AAAA;AAAA,EAIF,SAAS;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,GAAGvB,EAAW,IAAIwB,EAAsB;AAAA,EAAA;AAAA;AAAA,EAI1C,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,GAAGxB,EAAW,IAAI,UAAU;AAAA,EAAA;AAAA;AAAA,EAI9B,aAAa;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,UAAUyB;AAAAA,IACV,YAAYC;AAAAA,IACZ,OAAON;AAAAA,EAAO;AAAA;AAAA,EAIhB,YAAY;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAOO;AAAAA,IACP,iBAAiB;AAAA,IACjB,GAAG3B,EAAW,OAAO,GAAG;AAAA,IACxB,GAAGA,EAAW,QAAQ,CAAC;AAAA,IACvB,UAAU;AAAA,MACR,OAAOoB;AAAAA,IAAO;AAAA,IAEhB,WAAW;AAAA,MACT,QAAQ;AAAA,IAAA;AAAA,IAEV,kBAAkB;AAAA,MAChB,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,cAAcQ;AAAAA,IAAO;AAAA,IAEvB,SAAS;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA;AAAA,EAIF,eAAe;AAAA,IACb,eAAe;AAAA,IACf,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,GAAG5B,EAAW,aAAa,QAAQ;AAAA,IACnC,iBAAiB6B;AAAAA,IACjB,eAAe;AAAA,MACb,MAAM;AAAA,QACJ,WAAW;AAAA,QACX,SAAS;AAAA,MAAA;AAAA,MAEX,IAAI;AAAA,QACF,WAAW;AAAA,QACX,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,EAAA;AAAA,EAE3B,kBAAkB;AAAA,IAChB,KAAK;AAAA,EAAA;AAAA,EAEP,qBAAqB;AAAA,IACnB,QAAQ;AAAA,EAAA;AAAA;AAAA,EAIV,iBAAiB;AAAA,IACf,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,GAAG7B,EAAW,OAAO,OAAO,SAAS8B,EAAa;AAAA,IAClD,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,eAAe;AAAA,MACb,MAAM,EAAE,WAAW,WAAA;AAAA,MACnB,IAAI,EAAE,WAAW,cAAA;AAAA,IAAc;AAAA,IAEjC,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,UAAU;AAAA,MACR,iBAAiB;AAAA,IAAA;AAAA,EACnB;AAAA;AAAA,EAIF,OAAO;AAAA,IACL,eAAe;AAAA,EAAA;AAAA,EAEjB,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAYC;AAAAA,IACZ,iBAAiB;AAAA,IACjB,GAAG/B,EAAW,OAAO,GAAG;AAAA,EAAA;AAAA,EAE1B,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAOgC;AAAAA,IACP,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,EAAA;AAAA,EAE5B,kBAAkB;AAAA,IAChB,WAAW;AAAA,EAAA;AAAA,EAEb,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,EAAA;AAAA,EAEd,sBAAsB;AAAA,IACpB,WAAWC;AAAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,IACf,GAAGjC,EAAW,QAAQ,YAAYkC,EAAsB;AAAA,IACxD,UAAU3B;AAAAA,IACV,YAAYC;AAAAA,IACZ,YAAY2B;AAAAA,IACZ,OAAOjC;AAAAA,IACP,iBAAiB;AAAA,MACf,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,kBAAkB;AAAA,IAChB,aAAa+B;AAAAA,EAAO;AAAA,EAEtB,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,wBAAwB;AAAA,MACtB,kBAAkB;AAAA,IAAA;AAAA,EACpB;AAAA,EAEF,qBAAqB;AAAA,IACnB,kBAAkB;AAAA,EAAA;AAAA,EAEpB,eAAe;AAAA,IACb,WAAW;AAAA,IACX,UAAU;AAAA,EAAA;AAAA;AAAA,EAIZ,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAOG;AAAAA,EAAO;AAAA,EAEhB,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAOC;AAAAA,EAAO;AAAA,EAEhB,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAOC;AAAAA,EAAO;AAElB,CAAC,GAIKC,KAAa,CAAC,EAAE,QAAAC,QAAyC;AAC7D,QAAMC,IAAS3C,EAAA;AACf,SAAI0C,MAAW,UACN,gBAAA9C,EAACC,GAAA,EAAY,WAAW8C,EAAO,gBAAA,CAAiB,IAErDD,MAAW,YACN,gBAAA9C,EAACC,GAAA,EAAY,WAAW8C,EAAO,kBAAA,CAAmB,IAEvDD,MAAW,YACN,gBAAA9C,EAACE,IAAA,EAAgB,WAAW6C,EAAO,kBAAA,CAAmB,IAExD;AACT,GAkBMC,IAAcC,EAAM,cAAgC;AAAA,EACxD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AACZ,CAAC,GAEKC,IAAiB,MAAMD,EAAM,WAAWD,CAAW,GAYnDG,KAAsB,CAC1BC,MAEAA,MAAY,SAAY,SAAYA,MAAY,YAAY,WAAWA,GAsB5DC,KAAOJ,EAAM,WAAwC,SAChE;AAAA,EACE,WAAAK;AAAA,EACA,SAAAF;AAAA,EACA,SAAAG,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAG7D;AACL,GACA8D,GACA;AACA,QAAMb,IAAS3C,EAAA,GACTyD,IAAaV,GAAoBC,CAAO,GAExCU,IAAQb,EAAM,SAAS,QAAQU,CAAQ,EAAE;AAAA,IAC7CV,EAAM;AAAA,EAAA,GAGFc,IAAeD,EAAM;AAAA,IAAI,CAACE,GAAOC,MACrCD,EAAM,SAASE,IAAWjB,EAAM,aAAae,GAAO,EAAE,OAAAC,EAAA,CAAO,IAAID;AAAA,EAAA,GAG7DG,IAAgBL,EAAM,OAAO,CAACE,MAAUA,EAAM,SAASE,CAAQ,GAC/DE,IAASD,EACZ,IAAI,CAACH,MAAUA,EAAM,MAAM,KAAK,EAChC,OAAO,CAACK,MAAmB,OAAOA,KAAM,QAAQ,GAE7C,CAACC,GAAUC,CAAW,IAAItB,EAAM,SAAwB,IAAI,GAC5DuB,IAAcF,IAAWF,EAAO,QAAQE,CAAQ,IAAI,IACpDG,IACJH,KAAY,OACRH,EAAc,KAAK,CAACH,MAAUA,EAAM,MAAM,UAAUM,CAAQ,IAC5D,QAEAI,IAAUC;AAAA,IACdC,EAAUC,IAAe,EAAE,sBAAsB,EAAE,UAAU,EAAA,GAAK;AAAA,IAClED,EAAUE,EAAc;AAAA,EAAA,GAGpBC,IAAkB,CAACC,MAA0B;AACjD,IAAAT,EAAYS,EAAM,OAAO,EAAY;AAAA,EACvC,GAEMC,IAAgB,CAACD,MAAwB;AAC7C,IAAAT,EAAY,IAAI;AAChB,UAAM,EAAE,QAAAW,GAAQ,MAAAC,EAAA,IAASH;AACzB,QAAI,CAACG,KAAQD,EAAO,OAAOC,EAAK,GAAI;AAEpC,UAAMC,IAAWhB,EAAO,QAAQc,EAAO,EAAY,GAC7CG,IAAWjB,EAAO,QAAQe,EAAK,EAAY;AACjD,IAAIC,MAAa,MAAMC,MAAa,MAEpC3B,KAAA,QAAAA,EAAY4B,GAAUlB,GAAQgB,GAAUC,CAAQ;AAAA,EAClD,GAEME,IACJ,gBAAAvF;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA4D;AAAA,MACA,aAAU;AAAA,MACJ,CAAC4B,CAAS,GAAG;AAAA,MAClB,GAAI3B,MAAe,SAAY,EAAE,gBAAgBA,EAAA,IAAe,CAAA;AAAA,MACjE,WAAW4B,EAAa1C,EAAO,MAAMO,CAAS;AAAA,MAC7C,GAAGxD;AAAA,MAEH,UAAAiE;AAAA,IAAA;AAAA,EAAA;AAIL,SACE,gBAAA/D,EAACgD,EAAY,UAAZ,EAAqB,OAAO,EAAE,SAAAO,GAAS,WAAAC,GAAW,UAAAC,EAAA,GAChD,UAAAA,IACC,gBAAA1D;AAAA,IAAC2F;AAAA,IAAA;AAAA,MACC,SAAAhB;AAAA,MACA,oBAAoBiB;AAAA,MACpB,aAAaZ;AAAA,MACb,WAAWE;AAAA,MACX,cAAc,MAAMV,EAAY,IAAI;AAAA,MAEpC,UAAA;AAAA,QAAA,gBAAAvE;AAAA,UAAC4F;AAAA,UAAA;AAAA,YACC,OAAOxB;AAAA,YACP,UAAUyB;AAAA,YAET,UAAAN;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAAvF,EAAC8F,MACE,UAAArB,IACC,gBAAAzE;AAAA,UAAC+F;AAAA,UAAA;AAAA,YACC,OAAOtB,EAAW,MAAM;AAAA,YACxB,QAAQA,EAAW,MAAM;AAAA,YACzB,OAAOD;AAAA,YACP,WAAWzB,EAAO;AAAA,YAQjB,GAAIc,MAAe,SAChB,EAAE,gBAAgBA,EAAA,IAClB,CAAA;AAAA,YAEH,YAAW,MAAM;AAAA,UAAA;AAAA,QAAA,IAElB,KAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAGF0B,EAAA,CAEJ;AAEJ,CAAC,GAMYS,KAAkB/C,EAAM,WAGnC,SAAyB,EAAE,WAAAK,GAAW,UAAAK,GAAU,GAAG7D,EAAA,GAAS8D,GAAK;AACjE,QAAMb,IAAS3C,EAAA;AAEf,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA4D;AAAA,MACA,aAAU;AAAA,MACJ,CAAC4B,CAAS,GAAG;AAAA,MACnB,eAAe,CAACS,MAAMA,EAAE,gBAAA;AAAA,MACxB,WAAWR,EAAa1C,EAAO,SAASO,CAAS;AAAA,MAChD,GAAGxD;AAAA,MAEH,UAAA6D;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC,GAMYuC,KAAejD,EAAM,WAGhC,SAAsB,EAAE,WAAAK,GAAW,GAAGxD,EAAA,GAAS8D,GAAK;AACpD,QAAMb,IAAS3C,EAAA;AAEf,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA4D;AAAA,MACA,aAAU;AAAA,MACJ,CAAC4B,CAAS,GAAG;AAAA,MACnB,WAAWC,EAAa1C,EAAO,MAAMO,CAAS;AAAA,MAC7C,GAAGxD;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAMYqG,KAAsBlD,EAAM,WAGvC,SAA6B,EAAE,WAAAK,GAAW,GAAGxD,EAAA,GAAS8D,GAAK;AAC3D,QAAMb,IAAS3C,EAAA;AAEf,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA4D;AAAA,MACA,aAAU;AAAA,MACJ,CAAC4B,CAAS,GAAG;AAAA,MACnB,WAAWC,EAAa1C,EAAO,aAAaO,CAAS;AAAA,MACpD,GAAGxD;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GA0BKiG,IAAe9C,EAAM;AAAA,EACzB,SACE;AAAA,IACE,WAAAK;AAAA,IACA,OAAA8C;AAAA,IACA,QAAAtD,IAAS;AAAA,IACT,OAAAmB;AAAA,IACA,UAAAN;AAAA,IACA,YAAA0C;AAAA,IACA,qBAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,YAAAC;AAAA,IACA,GAAG7G;AAAA,EAAA,GAEL8G,GACA;AACA,UAAM7D,IAAS3C,EAAA,GACT,EAAE,SAAAmD,GAAS,WAAAC,GAAW,UAAAC,EAAA,IAAaP,EAAA,GACnC2D,IAAcpD,KAAY,CAAC+C,GAE3BM,IAAa7D,EAAM,SAAS,QAAQU,CAAQ,GAC5CoD,IAAcD,EAAW;AAAA,MAC7B,CAAC9C,MACCf,EAAM,eAAee,CAAK,KAAKA,EAAM,SAASgC;AAAA,IAAA,GAE5CgB,IAAkBF,EAAW,OAAO,CAAC9C,MAAUA,MAAU+C,CAAW,GAGpEE,IAAYhE,EAAM;AAAA,MACtB,CAACiE,MAA+B;AAC9B,QAAAb,KAAA,QAAAA,EAAaa,IACT,OAAON,KAAiB,aAC1BA,EAAaM,CAAI,IACRN,MAEPA,EACA,UAAUM;AAAA,MAEhB;AAAA,MACA,CAACb,GAAYO,CAAY;AAAA,IAAA,GAGrBO,IACJrE,MAAW,UACPC,EAAO,cACPD,MAAW,YACTC,EAAO,gBACPD,MAAW,YACTC,EAAO,gBACPA,EAAO,eAEXqE,IAAmBP,IACrB/D,MAAW,UACTC,EAAO,mBACPD,MAAW,YACTC,EAAO,qBACPD,MAAW,YACTC,EAAO,qBACPA,EAAO,qBACb;AAEJ,WACE,gBAAAhD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKkH;AAAA,QACL,OAAAV;AAAA,QACA,aAAU;AAAA,QACJ,CAACf,CAAS,GAAG;AAAA,QACnB,eAAa1C;AAAA,QACb,cAAYsD;AAAA,QACZ,eACE3C,IACKiD,KAAA,gBAAAA,EAAW,gBAEZ;AAAA,QAEN,WAAWjB;AAAA,UACT1C,EAAO;AAAA,UACPoE;AAAA,UACA5D,KAAWT,MAAW,aAAaC,EAAO;AAAA,UAC1CqE;AAAA,UACA3D,KAAYV,EAAO;AAAA,UACnByD,KAAczD,EAAO;AAAA,UACrBO;AAAA,QAAA;AAAA,QAED,GAAGxD;AAAA,QAEH,UAAA;AAAA,UAAA2G,KACC,gBAAAzG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAU;AAAA,cACJ,CAACwF,CAAS,GAAG;AAAA,cACnB,eAAY;AAAA,cACZ,WAAWC;AAAA,gBACT1C,EAAO;AAAA,gBACP0D,MAAa,QACT1D,EAAO,mBACPA,EAAO;AAAA,cAAA;AAAA,YACb;AAAA,UAAA;AAAA,UAIHS,KACC,gBAAAxD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAU;AAAA,cACJ,CAACwF,CAAS,GAAG;AAAA,cACnB,eAAY;AAAA,cACZ,WAAWzC,EAAO;AAAA,cAEhB,gBAAS,KAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAIpB,gBAAA/C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAU;AAAA,cACJ,CAACwF,CAAS,GAAG;AAAA,cACnB,WAAWzC,EAAO;AAAA,cAEjB,UAAAiE;AAAA,YAAA;AAAA,UAAA;AAAA,UAGH,gBAAAhH,EAAC6C,MAAW,QAAAC,GAAgB;AAAA,UAE3BiE;AAAA,UAEAtD,KACC,gBAAAzD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKsG;AAAA,cACL,MAAK;AAAA,cACL,cAAY,mBAAmBF,KAAS,MAAM;AAAA,cAC9C,WAAWrD,EAAO;AAAA,cACjB,GAAG4D;AAAA,cACJ,WACED,KAAA,gBAAAA,EAAW;AAAA,cAIb,4BAAC7G,IAAA,CAAA,CAAiB;AAAA,YAAA;AAAA,UAAA;AAAA,QACpB;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF,GAIMwH,KAAmBpE,EAAM;AAAA,EAC7B,SAA0BnD,GAAO8D,GAAK;AACpC,UAAM0D,IAAarE,EAAM,MAAA;AAEzB,IAAI,QAAQ,IAAI,aAAa,gBAAgBnD,EAAM,UAAU,UAC3D,QAAQ;AAAA,MACN;AAAA,IAAA;AAMJ,UAAM;AAAA,MACJ,YAAA6G;AAAA,MACA,WAAAD;AAAA,MACA,YAAAL;AAAA,MACA,qBAAAC;AAAA,MACA,YAAAE;AAAA,MACA,QAAAe;AAAA,MACA,aAAA/C;AAAA,MACA,WAAAgD;AAAA,IAAA,IACEC,GAAY;AAAA,MACd,IAAI3H,EAAM,SAASwH;AAAA,MACnB,sBAAsB,MAAM;AAAA,IAAA,CAC7B,GAEKb,IACJc,KAAU,CAACf,KAAchC,MAAgB,KACrCA,IAAcgD,IACZ,WACA,QACF;AAEN,WACE,gBAAAxH;AAAA,MAAC+F;AAAA,MAAA;AAAA,QACC,KAAAnC;AAAA,QACC,GAAG9D;AAAA,QACJ,YAAAuG;AAAA,QACA,qBAAAC;AAAA,QACA,YAAAE;AAAA,QACA,UAAAC;AAAA,QACA,WAAAC;AAAA,QACA,YAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,GAIazC,IAAWjB,EAAM;AAAA,EAC5B,SAAkBnD,GAAO8D,GAAK;AAC5B,UAAM,EAAE,UAAAH,EAAA,IAAaP,EAAA;AAErB,WAAIO,IACK,gBAAAzD,EAACqH,IAAA,EAAiB,KAAAzD,GAAW,GAAG9D,EAAA,CAAO,IAGzC,gBAAAE,EAAC+F,GAAA,EAAa,KAAAnC,GAAW,GAAG9D,EAAA,CAAO;AAAA,EAC5C;AACF,GAUM4H,IAAmBzE,EAAM,cAA4C,IAAI,GAWlE0E,KAAY1E,EAAM;AAAA,EAC7B,SACE;AAAA,IACE,MAAM2E;AAAA,IACN,aAAAC,IAAc;AAAA,IACd,cAAAC;AAAA,IACA,WAAAxE;AAAA,IACA,UAAAK;AAAA,IACA,GAAG7D;AAAA,EAAA,GAEL8D,GACA;AACA,UAAMb,IAAS3C,EAAA,GACT,CAAC2H,GAAkBC,CAAmB,IAAI/E,EAAM,SAAS4E,CAAW,GACpEI,IAAOL,KAAYG,GACnBG,IAAYjF,EAAM,MAAA,GAElBkF,IAAU,CAACC,MAAkB;AACjC,MAAIR,MAAa,UAAWI,EAAoBI,CAAI,GACpDN,KAAA,QAAAA,EAAeM;AAAA,IACjB;AAEA,WACE,gBAAApI,EAAC0H,EAAiB,UAAjB,EAA0B,OAAO,EAAE,MAAAO,GAAM,SAAAE,GAAS,WAAAD,KACjD,UAAA,gBAAAlI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA4D;AAAA,QACA,aAAU;AAAA,QACJ,CAAC4B,CAAS,GAAG;AAAA,QACnB,cAAYyC,IAAO,SAAS;AAAA,QAC5B,WAAWxC,EAAa1C,EAAO,OAAOO,CAAS;AAAA,QAC9C,GAAGxD;AAAA,QAEH,UAAA6D;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,EAEJ;AACF,GAQa0E,KAAiBpF,EAAM,WAGlC,SAAwB,EAAE,WAAAK,GAAW,UAAAK,GAAU,GAAG7D,EAAA,GAAS8D,GAAK;AAChE,QAAMb,IAAS3C,EAAA,GACTkI,IAAQrF,EAAM,WAAWyE,CAAgB;AAE/C,SAAIY,IAEA,gBAAAvI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA6D;AAAA,MACA,MAAK;AAAA,MACL,aAAU;AAAA,MACJ,CAAC4B,CAAS,GAAG;AAAA,MACnB,iBAAe8C,EAAM;AAAA,MACrB,iBAAeA,EAAM;AAAA,MACrB,SAAS,MAAMA,EAAM,QAAQ,CAACA,EAAM,IAAI;AAAA,MACxC,WAAW7C;AAAA,QACT1C,EAAO;AAAA,QACPA,EAAO;AAAA,QACPA,EAAO;AAAA,QACPO;AAAA,MAAA;AAAA,MAED,GAAGxD;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,WAAWsF;AAAA,cACT1C,EAAO;AAAA,cACPuF,EAAM,QAAQvF,EAAO;AAAA,YAAA;AAAA,UACvB;AAAA,QAAA;AAAA,QAEF,gBAAA/C,EAAC,QAAA,EAAK,WAAW+C,EAAO,kBAAmB,UAAAY,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAMxD,gBAAA3D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA4D;AAAA,MACA,aAAU;AAAA,MACJ,CAAC4B,CAAS,GAAG;AAAA,MACnB,WAAWC,EAAa1C,EAAO,sBAAsBO,CAAS;AAAA,MAE7D,UAAAK;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC,GAMY4E,KAAmBtF,EAAM,WAGpC,SAA0B,EAAE,WAAAK,GAAW,UAAAK,GAAU,GAAG7D,EAAA,GAAS8D,GAAK;AAClE,QAAMb,IAAS3C,EAAA,GACTkI,IAAQrF,EAAM,WAAWyE,CAAgB,GAEzC5D,IACJ,gBAAA9D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA4D;AAAA,MACA,aAAU;AAAA,MACJ,CAAC4B,CAAS,GAAG;AAAA,MACnB,WAAWC,EAAa1C,EAAO,MAAMA,EAAO,kBAAkBO,CAAS;AAAA,MACtE,GAAGxD;AAAA,MAEH,UAAA6D;AAAA,IAAA;AAAA,EAAA;AAIL,SAAK2E,IAGH,gBAAAtI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAIsI,EAAM;AAAA,MACV,cAAYA,EAAM,OAAO,SAAS;AAAA,MAClC,WAAW7C;AAAA,QACT1C,EAAO;AAAA,QACPuF,EAAM,QAAQvF,EAAO;AAAA,MAAA;AAAA,MAGvB,UAAA,gBAAA/C,EAAC,OAAA,EAAI,WAAW+C,EAAO,eAAgB,UAAAe,EAAA,CAAM;AAAA,IAAA;AAAA,EAAA,IAX9BA;AAcrB,CAAC;"}
|
|
1
|
+
{"version":3,"file":"list.js","sources":["../../../src/components/list/list.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {\n DndContext,\n DragOverlay,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n type DraggableAttributes,\n type DraggableSyntheticListeners,\n} from \"@dnd-kit/core\"\nimport {\n SortableContext,\n verticalListSortingStrategy,\n arrayMove,\n useSortable,\n} from \"@dnd-kit/sortable\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * `relaxed` is a permanent compatibility alias for `normal` (DENSITY-SPEC.md §4.2,\n * WP9B2A-ACCEPTANCE-LIST) — identical geometry, forever, not deprecated.\n */\nexport type ListDensity = \"compact\" | \"normal\" | \"comfortable\" | \"relaxed\"\nexport type ListItemStatus = \"default\" | \"error\" | \"warning\" | \"success\"\n\n// ── Icons ──────────────────────────────────────────────────────────────────\n\nconst GripVerticalIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx=\"9\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"19\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"19\" r=\"1.5\" />\n </svg>\n)\n\nconst WarningIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n)\n\nconst CheckCircleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n)\n\n// ── Styles ─────────────────────────────────────────────────────────────────\n\nconst useStyles = makeZenithStyles({\n list: {\n display: \"flex\",\n width: \"100%\",\n listStyleType: \"none\",\n flexDirection: \"column\",\n ...shorthands.gap(0),\n ...shorthands.padding(0),\n ...shorthands.margin(0),\n },\n\n // ListItem base — density-bound (DENSITY-SPEC.md §2.2, WP9B2A-ACCEPTANCE-LIST).\n item: {\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n ...shorthands.borderRadius(tokens.radiusMd),\n color: tokens.grayA12,\n transitionProperty:\n \"color, background-color, border-color, text-decoration-color, fill, stroke\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n minHeight: tokens.listItemMinHeight,\n ...shorthands.gap(tokens.listItemGap),\n ...shorthands.padding(tokens.listItemPaddingY, tokens.listItemPaddingX),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n \"& > svg\": {\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n\n // Status variants\n statusDefault: {},\n statusError: {\n backgroundColor: tokens.errorSoft,\n color: tokens.errorDefault,\n },\n statusWarning: {\n backgroundColor: tokens.warningSoft,\n color: tokens.warningDefault,\n },\n statusSuccess: {\n backgroundColor: tokens.successSoft,\n color: tokens.successDefault,\n },\n\n // Striped variant (only neutral rows)\n stripedEven: {\n \"&:nth-child(even)\": {\n backgroundColor: tokens.grayA2,\n },\n },\n\n // Interactive hovers\n interactiveDefault: {\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n },\n interactiveError: {\n \":hover\": {\n backgroundColor: tokens.errorSoftHover,\n },\n },\n interactiveWarning: {\n \":hover\": {\n backgroundColor: tokens.warningSoftHover,\n },\n },\n interactiveSuccess: {\n \":hover\": {\n backgroundColor: tokens.successSoftHover,\n },\n },\n\n // Sortable modifiers\n sortableItem: {\n cursor: \"grab\",\n touchAction: \"none\",\n \":active\": {\n cursor: \"grabbing\",\n },\n },\n itemDragging: {\n opacity: 0.4,\n },\n\n // Index gutter — density-bound.\n indexBase: {\n display: \"flex\",\n flexShrink: 0,\n userSelect: \"none\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"stretch\",\n borderTopLeftRadius: tokens.radiusMd,\n borderBottomLeftRadius: tokens.radiusMd,\n backgroundColor: tokens.grayA2,\n textAlign: \"center\",\n color: tokens.grayA11,\n fontVariantNumeric: \"tabular-nums\",\n minWidth: tokens.listIndexMinWidth,\n marginTop: `calc(-1 * ${tokens.listItemPaddingY})`,\n marginBottom: `calc(-1 * ${tokens.listItemPaddingY})`,\n marginLeft: `calc(-1 * ${tokens.listItemPaddingX})`,\n paddingLeft: tokens.listIndexPaddingX,\n paddingRight: tokens.listIndexPaddingX,\n },\n\n // Content\n content: {\n display: \"flex\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n \"& > svg\": {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n },\n },\n\n // Actions\n actions: {\n position: \"relative\",\n zIndex: 10,\n display: \"flex\",\n flexShrink: 0,\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n },\n\n // Text\n text: {\n display: \"flex\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n flexDirection: \"column\",\n ...shorthands.gap(\"0.125rem\"),\n },\n\n // Description\n description: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n color: tokens.grayA11,\n },\n\n // Drag handle button\n dragHandle: {\n position: \"relative\",\n zIndex: 10,\n display: \"inline-flex\",\n flexShrink: 0,\n cursor: \"grab\",\n alignItems: \"center\",\n color: tokens.grayA8,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \":hover\": {\n color: tokens.grayA11,\n },\n \":active\": {\n cursor: \"grabbing\",\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \"& svg\": {\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n\n // Drop indicator line\n dropIndicator: {\n pointerEvents: \"none\",\n position: \"absolute\",\n left: 0,\n right: 0,\n zIndex: 10,\n height: \"0.125rem\",\n transformOrigin: \"center\",\n ...shorthands.borderRadius(\"9999px\"),\n backgroundColor: tokens.accentSolid,\n animationName: {\n from: {\n transform: \"scaleX(0)\",\n opacity: 0,\n },\n to: {\n transform: \"scaleX(1)\",\n opacity: 1,\n },\n },\n animationDuration: \"160ms\",\n animationTimingFunction: \"ease-out\",\n },\n dropIndicatorTop: {\n top: \"-0.125rem\",\n },\n dropIndicatorBottom: {\n bottom: \"-0.125rem\",\n },\n\n // DragOverlay ghost\n dragOverlayItem: {\n transformOrigin: \"center\",\n transform: \"scale(0.95)\",\n cursor: \"grabbing\",\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA5),\n backgroundColor: \"rgb(255 255 255 / 55%)\",\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n backdropFilter: \"blur(12px)\",\n animationName: {\n from: { transform: \"scale(1)\" },\n to: { transform: \"scale(0.95)\" },\n },\n animationDuration: \"160ms\",\n animationTimingFunction: \"ease-out\",\n \":hover\": {\n backgroundColor: \"rgb(255 255 255 / 55%)\",\n },\n },\n\n // Group\n group: {\n listStyleType: \"none\",\n },\n groupTrigger: {\n cursor: \"pointer\",\n textAlign: \"left\",\n fontWeight: tokens.fontWeightMedium,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n },\n groupChevron: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.grayA10,\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n groupChevronOpen: {\n transform: \"rotate(90deg)\",\n },\n groupTriggerText: {\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n standaloneGroupLabel: {\n marginTop: tokens.spacingGroup2,\n display: \"block\",\n listStyleType: \"none\",\n ...shorthands.padding(\"0.375rem\", tokens.spacingElement3),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n \"&:first-child\": {\n marginTop: 0,\n },\n },\n groupContentList: {\n paddingLeft: tokens.spacingGroup2,\n },\n collapseWrapper: {\n display: \"grid\",\n gridTemplateRows: \"0fr\",\n transitionProperty: \"grid-template-rows\",\n transitionDuration: \"200ms\",\n transitionTimingFunction: \"cubic-bezier(0, 0, 0.2, 1)\",\n \"&[data-state='open']\": {\n gridTemplateRows: \"1fr\",\n },\n },\n collapseWrapperOpen: {\n gridTemplateRows: \"1fr\",\n },\n collapseInner: {\n minHeight: 0,\n overflow: \"hidden\",\n },\n\n // Status icons\n statusIconError: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.errorLight,\n },\n statusIconWarning: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.warningLight,\n },\n statusIconSuccess: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.successLight,\n },\n})\n\n// ── Status Icons Helper ────────────────────────────────────────────────────\n\nconst StatusIcon = ({ status }: { status: ListItemStatus }) => {\n const styles = useStyles()\n if (status === \"error\") {\n return <WarningIcon className={styles.statusIconError} />\n }\n if (status === \"warning\") {\n return <WarningIcon className={styles.statusIconWarning} />\n }\n if (status === \"success\") {\n return <CheckCircleIcon className={styles.statusIconSuccess} />\n }\n return null\n}\n\n// ── Context ────────────────────────────────────────────────────────────────\n\n/**\n * `density` is deliberately NOT here — every downstream consumer (`ListItemBody`,\n * `ListGroupLabel`'s collapsible-trigger branch) now reads geometry from CSS custom properties via\n * `[data-density]` inheritance, not from this context.\n */\ntype ListContextValue = {\n striped: boolean\n showIndex: boolean\n sortable: boolean\n}\n\nconst ListContext = React.createContext<ListContextValue>({\n striped: false,\n showIndex: false,\n sortable: false,\n})\n\nconst useListContext = () => React.useContext(ListContext)\n\n/**\n * `undefined` (density omitted) stays `undefined` — no implicit normal stamp, so the `<ol>`\n * inherits ambient CSS density through ordinary DOM inheritance.\n */\nconst canonicalDomDensity = (\n density: ListDensity | undefined\n): \"compact\" | \"normal\" | \"comfortable\" | undefined =>\n density === undefined ? undefined : density === \"relaxed\" ? \"normal\" : density\n\n// ── List ───────────────────────────────────────────────────────────────────\n\nexport type ListProps = Omit<React.ComponentProps<\"ol\">, \"onReorder\"> & {\n /**\n * Row density. Omitted inherits the ambient shell `[data-density]` (no stamp is written).\n * `\"relaxed\"` is a permanent alias for `\"normal\"` — identical geometry, normalized to\n * `data-density=\"normal\"` in the DOM. An explicit value (including `\"relaxed\"`) creates a\n * canonical density boundary for this list's subtree and its `DragOverlay`.\n */\n density?: ListDensity\n /** Alternating background on neutral rows. Default: false */\n striped?: boolean\n /** Show a 1-based position number on each item. Default: false */\n showIndex?: boolean\n /** Enable drag-and-drop reordering. Each `ListItem` must have a `value`. */\n sortable?: boolean\n /** Called with the new order of `ListItem` values after a drag. */\n onReorder?: (values: string[]) => void\n}\n\nexport const List = React.forwardRef<HTMLOListElement, ListProps>(function List(\n {\n className,\n density,\n striped = false,\n showIndex = false,\n sortable = false,\n onReorder,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const domDensity = canonicalDomDensity(density)\n\n const items = React.Children.toArray(children).filter(\n React.isValidElement\n ) as React.ReactElement<ListItemProps>[]\n\n const indexedItems = items.map((child, index) =>\n child.type === ListItem ? React.cloneElement(child, { index }) : child\n )\n\n const sortableItems = items.filter((child) => child.type === ListItem)\n const values = sortableItems\n .map((child) => child.props.value)\n .filter((v): v is string => typeof v === \"string\")\n\n const [activeId, setActiveId] = React.useState<string | null>(null)\n const activeIndex = activeId ? values.indexOf(activeId) : -1\n const activeItem =\n activeId != null\n ? sortableItems.find((child) => child.props.value === activeId)\n : undefined\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 3 } }),\n useSensor(KeyboardSensor)\n )\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id as string)\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n setActiveId(null)\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const oldIndex = values.indexOf(active.id as string)\n const newIndex = values.indexOf(over.id as string)\n if (oldIndex === -1 || newIndex === -1) return\n\n onReorder?.(arrayMove(values, oldIndex, newIndex))\n }\n\n const listElement = (\n <ol\n ref={ref}\n data-slot=\"list\"\n {...{ [SLOT_ATTR]: \"list\" }}\n {...(domDensity !== undefined ? { \"data-density\": domDensity } : {})}\n className={mergeClasses(styles.list, className)}\n {...props}\n >\n {indexedItems}\n </ol>\n )\n\n return (\n <ListContext.Provider value={{ striped, showIndex, sortable }}>\n {sortable ? (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={values}\n strategy={verticalListSortingStrategy}\n >\n {listElement}\n </SortableContext>\n <DragOverlay>\n {activeItem ? (\n <ListItemBody\n value={activeItem.props.value}\n status={activeItem.props.status}\n index={activeIndex}\n className={styles.dragOverlayItem}\n // Reasserted only for an EXPLICIT density: DragOverlay is an ordinary DOM sibling\n // of `listElement`, not a portal (dnd-kit's `PositionedOverlay` renders in place —\n // confirmed from the installed source), so an omitted/ambient density already\n // reaches it correctly through the real DOM tree with no stamp at all.\n {...(domDensity !== undefined\n ? { \"data-density\": domDensity }\n : {})}\n >\n {activeItem.props.children}\n </ListItemBody>\n ) : null}\n </DragOverlay>\n </DndContext>\n ) : (\n listElement\n )}\n </ListContext.Provider>\n )\n})\n\n// ── ListItemActions ────────────────────────────────────────────────────────\n\nexport type ListItemActionsProps = React.ComponentProps<\"span\">\n\nexport const ListItemActions = React.forwardRef<\n HTMLSpanElement,\n ListItemActionsProps\n>(function ListItemActions({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-actions\"\n {...{ [SLOT_ATTR]: \"list-item-actions\" }}\n onPointerDown={(e) => e.stopPropagation()}\n className={mergeClasses(styles.actions, className)}\n {...props}\n >\n {children}\n </span>\n )\n})\n\n// ── ListItemText ───────────────────────────────────────────────────────────\n\nexport type ListItemTextProps = React.ComponentProps<\"span\">\n\nexport const ListItemText = React.forwardRef<\n HTMLSpanElement,\n ListItemTextProps\n>(function ListItemText({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-text\"\n {...{ [SLOT_ATTR]: \"list-item-text\" }}\n className={mergeClasses(styles.text, className)}\n {...props}\n />\n )\n})\n\n// ── ListItemDescription ────────────────────────────────────────────────────\n\nexport type ListItemDescriptionProps = React.ComponentProps<\"span\">\n\nexport const ListItemDescription = React.forwardRef<\n HTMLSpanElement,\n ListItemDescriptionProps\n>(function ListItemDescription({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-description\"\n {...{ [SLOT_ATTR]: \"list-item-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n />\n )\n})\n\n// ── ListItemBody ───────────────────────────────────────────────────────────\n\nexport type ListItemProps = React.ComponentProps<\"li\"> & {\n /** Stable id used for drag-and-drop. Required when the `List` is `sortable`. */\n value?: string\n /** System status. Tints the row and shows a trailing status icon. */\n status?: ListItemStatus\n /** Injected by `List` — the 0-based position. */\n index?: number\n}\n\ntype ListItemBodyProps = ListItemProps & {\n setNodeRef?: (node: HTMLElement | null) => void\n setActivatorNodeRef?: (node: HTMLElement | null) => void\n style?: React.CSSProperties\n isDragging?: boolean\n /** Insertion indicator edge while another item is dragged over this one. */\n dropEdge?: \"top\" | \"bottom\" | null\n /** dnd-kit listeners — pointer activation goes on the row, keyboard on the handle. */\n listeners?: DraggableSyntheticListeners\n /** dnd-kit a11y attributes for the keyboard drag handle. */\n attributes?: DraggableAttributes\n}\n\nconst ListItemBody = React.forwardRef<HTMLLIElement, ListItemBodyProps>(\n function ListItemBody(\n {\n className,\n value,\n status = \"default\",\n index,\n children,\n setNodeRef,\n setActivatorNodeRef,\n style,\n isDragging,\n dropEdge,\n listeners,\n attributes,\n ...props\n },\n forwardedRef\n ) {\n const styles = useStyles()\n const { striped, showIndex, sortable } = useListContext()\n const interactive = sortable && !isDragging\n\n const childArray = React.Children.toArray(children)\n const actionsSlot = childArray.find(\n (child): child is React.ReactElement =>\n React.isValidElement(child) && child.type === ListItemActions\n )\n const contentChildren = childArray.filter((child) => child !== actionsSlot)\n\n // Combined ref for dnd-kit setNodeRef + caller's forwardedRef\n const handleRef = React.useCallback(\n (node: HTMLLIElement | null) => {\n setNodeRef?.(node)\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node)\n } else if (forwardedRef) {\n ;(\n forwardedRef as React.MutableRefObject<HTMLLIElement | null>\n ).current = node\n }\n },\n [setNodeRef, forwardedRef]\n )\n\n const statusStyle =\n status === \"error\"\n ? styles.statusError\n : status === \"warning\"\n ? styles.statusWarning\n : status === \"success\"\n ? styles.statusSuccess\n : styles.statusDefault\n\n const interactiveStyle = interactive\n ? status === \"error\"\n ? styles.interactiveError\n : status === \"warning\"\n ? styles.interactiveWarning\n : status === \"success\"\n ? styles.interactiveSuccess\n : styles.interactiveDefault\n : undefined\n\n return (\n <li\n ref={handleRef}\n style={style}\n data-slot=\"list-item\"\n {...{ [SLOT_ATTR]: \"list-item\" }}\n data-status={status}\n data-value={value}\n onPointerDown={\n sortable\n ? (listeners?.onPointerDown as\n React.PointerEventHandler<HTMLLIElement> | undefined)\n : undefined\n }\n className={mergeClasses(\n styles.item,\n statusStyle,\n striped && status === \"default\" && styles.stripedEven,\n interactiveStyle,\n sortable && styles.sortableItem,\n isDragging && styles.itemDragging,\n className\n )}\n {...props}\n >\n {dropEdge && (\n <span\n data-slot=\"list-drop-indicator\"\n {...{ [SLOT_ATTR]: \"list-drop-indicator\" }}\n aria-hidden=\"true\"\n className={mergeClasses(\n styles.dropIndicator,\n dropEdge === \"top\"\n ? styles.dropIndicatorTop\n : styles.dropIndicatorBottom\n )}\n />\n )}\n\n {showIndex && (\n <span\n data-slot=\"list-item-index\"\n {...{ [SLOT_ATTR]: \"list-item-index\" }}\n aria-hidden=\"true\"\n className={styles.indexBase}\n >\n {(index ?? 0) + 1}\n </span>\n )}\n\n <span\n data-slot=\"list-item-content\"\n {...{ [SLOT_ATTR]: \"list-item-content\" }}\n className={styles.content}\n >\n {contentChildren}\n </span>\n\n <StatusIcon status={status} />\n\n {actionsSlot}\n\n {sortable && (\n <button\n ref={setActivatorNodeRef}\n type=\"button\"\n aria-label={`Drag to reorder ${value ?? \"item\"}`}\n className={styles.dragHandle}\n {...attributes}\n onKeyDown={\n listeners?.onKeyDown as\n React.KeyboardEventHandler<HTMLButtonElement> | undefined\n }\n >\n <GripVerticalIcon />\n </button>\n )}\n </li>\n )\n }\n)\n\n// ── SortableListItem ───────────────────────────────────────────────────────\n\nconst SortableListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function SortableListItem(props, ref) {\n const fallbackId = React.useId()\n\n if (process.env.NODE_ENV !== \"production\" && props.value === undefined) {\n console.warn(\n \"List: a sortable `ListItem` is missing a `value`. \" +\n \"Give each sortable item a unique `value` so it can be reordered — \" +\n \"items without one are excluded from `onReorder`.\"\n )\n }\n\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n isDragging,\n isOver,\n activeIndex,\n overIndex,\n } = useSortable({\n id: props.value ?? fallbackId,\n animateLayoutChanges: () => false,\n })\n\n const dropEdge: \"top\" | \"bottom\" | null =\n isOver && !isDragging && activeIndex !== -1\n ? activeIndex < overIndex\n ? \"bottom\"\n : \"top\"\n : null\n\n return (\n <ListItemBody\n ref={ref}\n {...props}\n setNodeRef={setNodeRef}\n setActivatorNodeRef={setActivatorNodeRef}\n isDragging={isDragging}\n dropEdge={dropEdge}\n listeners={listeners}\n attributes={attributes}\n />\n )\n }\n)\n\n// ── ListItem ───────────────────────────────────────────────────────────────\n\nexport const ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function ListItem(props, ref) {\n const { sortable } = useListContext()\n\n if (sortable) {\n return <SortableListItem ref={ref} {...props} />\n }\n\n return <ListItemBody ref={ref} {...props} />\n }\n)\n\n// ── ListGroup ──────────────────────────────────────────────────────────────\n\ntype ListGroupContextValue = {\n open: boolean\n setOpen: (open: boolean) => void\n contentId: string\n}\n\nconst ListGroupContext = React.createContext<ListGroupContextValue | null>(null)\n\nexport type ListGroupProps = Omit<React.ComponentProps<\"li\">, \"onChange\"> & {\n /** Controlled open state of the collapsible group. */\n open?: boolean\n /** Initial open state when uncontrolled. Default: false */\n defaultOpen?: boolean\n /** Called when the group is expanded or collapsed. */\n onOpenChange?: (open: boolean) => void\n}\n\nexport const ListGroup = React.forwardRef<HTMLLIElement, ListGroupProps>(\n function ListGroup(\n {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n className,\n children,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const open = openProp ?? uncontrolledOpen\n const contentId = React.useId()\n\n const setOpen = (next: boolean) => {\n if (openProp === undefined) setUncontrolledOpen(next)\n onOpenChange?.(next)\n }\n\n return (\n <ListGroupContext.Provider value={{ open, setOpen, contentId }}>\n <li\n ref={ref}\n data-slot=\"list-group\"\n {...{ [SLOT_ATTR]: \"list-group\" }}\n data-state={open ? \"open\" : \"closed\"}\n className={mergeClasses(styles.group, className)}\n {...props}\n >\n {children}\n </li>\n </ListGroupContext.Provider>\n )\n }\n)\n\n// ── ListGroupLabel ─────────────────────────────────────────────────────────\n\nexport type ListGroupLabelProps = React.ComponentProps<\"button\"> & {\n asListItem?: boolean\n}\n\nexport const ListGroupLabel = React.forwardRef<\n HTMLElement,\n ListGroupLabelProps\n>(function ListGroupLabel({ className, children, ...props }, ref) {\n const styles = useStyles()\n const group = React.useContext(ListGroupContext)\n\n if (group) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n data-slot=\"list-group-trigger\"\n {...{ [SLOT_ATTR]: \"list-group-trigger\" }}\n aria-expanded={group.open}\n aria-controls={group.contentId}\n onClick={() => group.setOpen(!group.open)}\n className={mergeClasses(\n styles.item,\n styles.interactiveDefault,\n styles.groupTrigger,\n className\n )}\n {...props}\n >\n <ChevronRightIcon\n className={mergeClasses(\n styles.groupChevron,\n group.open && styles.groupChevronOpen\n )}\n />\n <span className={styles.groupTriggerText}>{children}</span>\n </button>\n )\n }\n\n return (\n <li\n ref={ref as React.Ref<HTMLLIElement>}\n data-slot=\"list-group-label\"\n {...{ [SLOT_ATTR]: \"list-group-label\" }}\n className={mergeClasses(styles.standaloneGroupLabel, className)}\n >\n {children}\n </li>\n )\n})\n\n// ── ListGroupContent ───────────────────────────────────────────────────────\n\nexport type ListGroupContentProps = React.ComponentProps<\"ul\">\n\nexport const ListGroupContent = React.forwardRef<\n HTMLUListElement,\n ListGroupContentProps\n>(function ListGroupContent({ className, children, ...props }, ref) {\n const styles = useStyles()\n const group = React.useContext(ListGroupContext)\n\n const items = (\n <ul\n ref={ref}\n data-slot=\"list-group-content\"\n {...{ [SLOT_ATTR]: \"list-group-content\" }}\n className={mergeClasses(styles.list, styles.groupContentList, className)}\n {...props}\n >\n {children}\n </ul>\n )\n\n if (!group) return items\n\n return (\n <div\n id={group.contentId}\n data-state={group.open ? \"open\" : \"closed\"}\n className={mergeClasses(\n styles.collapseWrapper,\n group.open && styles.collapseWrapperOpen\n )}\n >\n <div className={styles.collapseInner}>{items}</div>\n </div>\n )\n})\n"],"names":["GripVerticalIcon","props","jsxs","jsx","WarningIcon","CheckCircleIcon","ChevronRightIcon","useStyles","makeZenithStyles","shorthands","tokens.radiusMd","tokens.grayA12","tokens.listItemMinHeight","tokens.listItemGap","tokens.listItemPaddingY","tokens.listItemPaddingX","tokens.textSm","tokens.leadingSm","tokens.errorSoft","tokens.errorDefault","tokens.warningSoft","tokens.warningDefault","tokens.successSoft","tokens.successDefault","tokens.grayA2","tokens.accentSoft","tokens.errorSoftHover","tokens.warningSoftHover","tokens.successSoftHover","tokens.grayA11","tokens.listIndexMinWidth","tokens.listIndexPaddingX","tokens.spacingElement2","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.grayA8","tokens.accentA8","tokens.accentSolid","tokens.grayA5","tokens.fontWeightMedium","tokens.grayA10","tokens.spacingGroup2","tokens.spacingElement3","tokens.fontWeightSemibold","tokens.errorLight","tokens.warningLight","tokens.successLight","StatusIcon","status","styles","ListContext","React","useListContext","canonicalDomDensity","density","List","className","striped","showIndex","sortable","onReorder","children","ref","domDensity","items","indexedItems","child","index","ListItem","sortableItems","values","v","activeId","setActiveId","activeIndex","activeItem","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","handleDragStart","event","handleDragEnd","active","over","oldIndex","newIndex","arrayMove","listElement","SLOT_ATTR","mergeClasses","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","ListItemBody","ListItemActions","e","ListItemText","ListItemDescription","value","setNodeRef","setActivatorNodeRef","style","isDragging","dropEdge","listeners","attributes","forwardedRef","interactive","childArray","actionsSlot","contentChildren","handleRef","node","statusStyle","interactiveStyle","SortableListItem","fallbackId","isOver","overIndex","useSortable","ListGroupContext","ListGroup","openProp","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","open","contentId","setOpen","next","ListGroupLabel","group","ListGroupContent"],"mappings":"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"}
|