@invana/ui 0.0.29 → 0.0.31

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/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { clsx } from 'clsx';
2
- import { extendTailwindMerge } from 'tailwind-merge';
3
- import * as React23 from 'react';
4
- import React23__default, { Component } from 'react';
2
+ import { twMerge } from 'tailwind-merge';
3
+ import * as React25 from 'react';
4
+ import React25__default, { Component } from 'react';
5
5
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
6
- import { ChevronDown, ArrowLeft, ArrowRight, X, Search, ChevronRight, Check, Circle, PanelLeft, MoreHorizontal, ChevronLeft, Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon, Frown, Lock, Construction } from 'lucide-react';
6
+ import { ChevronDown, ArrowLeft, ArrowRight, X, Search, ChevronRight, Check, Circle, PanelLeft, ChevronLeft, MoreHorizontal, Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon, Frown, Lock, Construction } from 'lucide-react';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import { cva } from 'class-variance-authority';
9
9
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
@@ -28,18 +28,11 @@ import * as TogglePrimitive from '@radix-ui/react-toggle';
28
28
  import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
29
29
 
30
30
  // src/lib/utils.ts
31
- var twMerge = extendTailwindMerge({
32
- extend: {
33
- classGroups: {
34
- "font-size": [{ text: ["meta"] }]
35
- }
36
- }
37
- });
38
31
  function cn(...inputs) {
39
32
  return twMerge(clsx(inputs));
40
33
  }
41
34
  var Accordion = AccordionPrimitive.Root;
42
- var AccordionItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
35
+ var AccordionItem = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
43
36
  AccordionPrimitive.Item,
44
37
  {
45
38
  ref,
@@ -48,7 +41,7 @@ var AccordionItem = React23.forwardRef(({ className, ...props }, ref) => /* @__P
48
41
  }
49
42
  ));
50
43
  AccordionItem.displayName = "AccordionItem";
51
- var AccordionTrigger = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
44
+ var AccordionTrigger = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
52
45
  AccordionPrimitive.Trigger,
53
46
  {
54
47
  ref,
@@ -64,7 +57,7 @@ var AccordionTrigger = React23.forwardRef(({ className, children, ...props }, re
64
57
  }
65
58
  ) }));
66
59
  AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
67
- var AccordionContent = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
60
+ var AccordionContent = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
68
61
  AccordionPrimitive.Content,
69
62
  {
70
63
  ref,
@@ -88,7 +81,7 @@ var alertVariants = cva(
88
81
  }
89
82
  }
90
83
  );
91
- var Alert = React23.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx(
84
+ var Alert = React25.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx(
92
85
  "div",
93
86
  {
94
87
  ref,
@@ -98,7 +91,7 @@ var Alert = React23.forwardRef(({ className, variant, ...props }, ref) => /* @__
98
91
  }
99
92
  ));
100
93
  Alert.displayName = "Alert";
101
- var AlertTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
94
+ var AlertTitle = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
102
95
  "h5",
103
96
  {
104
97
  ref,
@@ -107,7 +100,7 @@ var AlertTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE
107
100
  }
108
101
  ));
109
102
  AlertTitle.displayName = "AlertTitle";
110
- var AlertDescription = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
103
+ var AlertDescription = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
111
104
  "div",
112
105
  {
113
106
  ref,
@@ -137,7 +130,7 @@ var buttonVariants = cva(
137
130
  * size-5, which at h-6 leaves no padding at all.
138
131
  */
139
132
  size: {
140
- xs: "h-6 rounded-control px-2 text-meta gap-1 [&_svg]:size-4",
133
+ xs: "h-6 rounded-control px-2 text-sm gap-1 [&_svg]:size-4",
141
134
  default: "h-9 px-4 py-2",
142
135
  sm: "h-8 rounded-control px-3 py-2",
143
136
  lg: "h-12 rounded-control px-8 py-3",
@@ -152,7 +145,7 @@ var buttonVariants = cva(
152
145
  }
153
146
  }
154
147
  );
155
- var Button = React23.forwardRef(
148
+ var Button = React25.forwardRef(
156
149
  ({ className, variant, size, asChild = false, ...props }, ref) => {
157
150
  const Comp = asChild ? Slot : "button";
158
151
  return /* @__PURE__ */ jsx(
@@ -169,7 +162,7 @@ Button.displayName = "Button";
169
162
  var AlertDialog = AlertDialogPrimitive.Root;
170
163
  var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
171
164
  var AlertDialogPortal = AlertDialogPrimitive.Portal;
172
- var AlertDialogOverlay = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
165
+ var AlertDialogOverlay = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
173
166
  AlertDialogPrimitive.Overlay,
174
167
  {
175
168
  className: cn(
@@ -181,7 +174,7 @@ var AlertDialogOverlay = React23.forwardRef(({ className, ...props }, ref) => /*
181
174
  }
182
175
  ));
183
176
  AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
184
- var AlertDialogContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
177
+ var AlertDialogContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
185
178
  /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
186
179
  /* @__PURE__ */ jsx(
187
180
  AlertDialogPrimitive.Content,
@@ -224,7 +217,7 @@ var AlertDialogFooter = ({
224
217
  }
225
218
  );
226
219
  AlertDialogFooter.displayName = "AlertDialogFooter";
227
- var AlertDialogTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
220
+ var AlertDialogTitle = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
228
221
  AlertDialogPrimitive.Title,
229
222
  {
230
223
  ref,
@@ -233,7 +226,7 @@ var AlertDialogTitle = React23.forwardRef(({ className, ...props }, ref) => /* @
233
226
  }
234
227
  ));
235
228
  AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
236
- var AlertDialogDescription = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
229
+ var AlertDialogDescription = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
237
230
  AlertDialogPrimitive.Description,
238
231
  {
239
232
  ref,
@@ -242,7 +235,7 @@ var AlertDialogDescription = React23.forwardRef(({ className, ...props }, ref) =
242
235
  }
243
236
  ));
244
237
  AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
245
- var AlertDialogAction = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
238
+ var AlertDialogAction = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
246
239
  AlertDialogPrimitive.Action,
247
240
  {
248
241
  ref,
@@ -251,7 +244,7 @@ var AlertDialogAction = React23.forwardRef(({ className, ...props }, ref) => /*
251
244
  }
252
245
  ));
253
246
  AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
254
- var AlertDialogCancel = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
247
+ var AlertDialogCancel = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
255
248
  AlertDialogPrimitive.Cancel,
256
249
  {
257
250
  ref,
@@ -264,7 +257,7 @@ var AlertDialogCancel = React23.forwardRef(({ className, ...props }, ref) => /*
264
257
  }
265
258
  ));
266
259
  AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
267
- var Avatar = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
260
+ var Avatar = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
268
261
  AvatarPrimitive.Root,
269
262
  {
270
263
  ref,
@@ -277,7 +270,7 @@ var Avatar = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
277
270
  }
278
271
  ));
279
272
  Avatar.displayName = AvatarPrimitive.Root.displayName;
280
- var AvatarImage = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
273
+ var AvatarImage = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
281
274
  AvatarPrimitive.Image,
282
275
  {
283
276
  ref,
@@ -286,7 +279,7 @@ var AvatarImage = React23.forwardRef(({ className, ...props }, ref) => /* @__PUR
286
279
  }
287
280
  ));
288
281
  AvatarImage.displayName = AvatarPrimitive.Image.displayName;
289
- var AvatarFallback = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
282
+ var AvatarFallback = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
290
283
  AvatarPrimitive.Fallback,
291
284
  {
292
285
  ref,
@@ -318,15 +311,15 @@ var badgeVariants = cva(
318
311
  },
319
312
  size: {
320
313
  /** 18px — inline in a title, or a count against a label. */
321
- xs: "h-[18px] px-1.5 text-meta",
314
+ xs: "h-[18px] px-1.5 text-sm",
322
315
  /** 22px — the row chip: a status beside an entity name. */
323
- sm: "h-[22px] px-2 text-meta",
316
+ sm: "h-[22px] px-2 text-sm",
324
317
  /**
325
318
  * Unchanged from before `size` existed: no explicit height, so it sizes
326
319
  * from its text. Every badge already written keeps rendering exactly as
327
320
  * it did — the two tiers above are additions, not a re-baseline.
328
321
  */
329
- default: "px-2.5 py-0.5 text-meta"
322
+ default: "px-2.5 py-0.5 text-sm"
330
323
  }
331
324
  },
332
325
  defaultVariants: {
@@ -345,9 +338,9 @@ function Badge({ className, variant, tone, size, ...props }) {
345
338
  }
346
339
  );
347
340
  }
348
- var Breadcrumb = React23.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("nav", { ref, "aria-label": "breadcrumb", ...props }));
341
+ var Breadcrumb = React25.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("nav", { ref, "aria-label": "breadcrumb", ...props }));
349
342
  Breadcrumb.displayName = "Breadcrumb";
350
- var BreadcrumbList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
343
+ var BreadcrumbList = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
351
344
  "ol",
352
345
  {
353
346
  ref,
@@ -359,7 +352,7 @@ var BreadcrumbList = React23.forwardRef(({ className, ...props }, ref) => /* @__
359
352
  }
360
353
  ));
361
354
  BreadcrumbList.displayName = "BreadcrumbList";
362
- var BreadcrumbItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
355
+ var BreadcrumbItem = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
363
356
  "li",
364
357
  {
365
358
  ref,
@@ -368,7 +361,7 @@ var BreadcrumbItem = React23.forwardRef(({ className, ...props }, ref) => /* @__
368
361
  }
369
362
  ));
370
363
  BreadcrumbItem.displayName = "BreadcrumbItem";
371
- var BreadcrumbLink = React23.forwardRef(({ asChild, className, ...props }, ref) => {
364
+ var BreadcrumbLink = React25.forwardRef(({ asChild, className, ...props }, ref) => {
372
365
  const Comp = asChild ? Slot : "a";
373
366
  return /* @__PURE__ */ jsx(
374
367
  Comp,
@@ -380,7 +373,7 @@ var BreadcrumbLink = React23.forwardRef(({ asChild, className, ...props }, ref)
380
373
  );
381
374
  });
382
375
  BreadcrumbLink.displayName = "BreadcrumbLink";
383
- var BreadcrumbPage = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
376
+ var BreadcrumbPage = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
384
377
  "span",
385
378
  {
386
379
  ref,
@@ -424,7 +417,7 @@ var BreadcrumbEllipsis = ({
424
417
  }
425
418
  );
426
419
  BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
427
- var Separator = React23.forwardRef(
420
+ var Separator = React25.forwardRef(
428
421
  ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
429
422
  SeparatorPrimitive.Root,
430
423
  {
@@ -506,7 +499,7 @@ function ButtonGroupSeparator({
506
499
  }
507
500
  );
508
501
  }
509
- var Card = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
502
+ var Card = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
510
503
  "div",
511
504
  {
512
505
  ref,
@@ -518,7 +511,7 @@ var Card = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
518
511
  }
519
512
  ));
520
513
  Card.displayName = "Card";
521
- var CardHeader = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
514
+ var CardHeader = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
522
515
  "div",
523
516
  {
524
517
  ref,
@@ -527,7 +520,7 @@ var CardHeader = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE
527
520
  }
528
521
  ));
529
522
  CardHeader.displayName = "CardHeader";
530
- var CardTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
523
+ var CardTitle = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
531
524
  "div",
532
525
  {
533
526
  ref,
@@ -536,7 +529,7 @@ var CardTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE_
536
529
  }
537
530
  ));
538
531
  CardTitle.displayName = "CardTitle";
539
- var CardDescription = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
532
+ var CardDescription = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
540
533
  "div",
541
534
  {
542
535
  ref,
@@ -545,9 +538,9 @@ var CardDescription = React23.forwardRef(({ className, ...props }, ref) => /* @_
545
538
  }
546
539
  ));
547
540
  CardDescription.displayName = "CardDescription";
548
- var CardContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-3 flex-1 overflow-y-auto", className), ...props }));
541
+ var CardContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-3 flex-1 overflow-y-auto", className), ...props }));
549
542
  CardContent.displayName = "CardContent";
550
- var CardFooter = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
543
+ var CardFooter = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
551
544
  "div",
552
545
  {
553
546
  ref,
@@ -556,7 +549,7 @@ var CardFooter = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE
556
549
  }
557
550
  ));
558
551
  CardFooter.displayName = "CardFooter";
559
- var CardWithHeader = React23.forwardRef(
552
+ var CardWithHeader = React25.forwardRef(
560
553
  ({ className, title, description, headerClassName, contentClassName, footerClassName, footer, children, ...props }, ref) => /* @__PURE__ */ jsxs(Card, { ref, className, ...props, children: [
561
554
  /* @__PURE__ */ jsxs(CardHeader, { className: `${headerClassName} rounded-t-md`, children: [
562
555
  typeof title === "string" ? /* @__PURE__ */ jsx(CardTitle, { children: title }) : title,
@@ -567,15 +560,15 @@ var CardWithHeader = React23.forwardRef(
567
560
  ] })
568
561
  );
569
562
  CardWithHeader.displayName = "CardWithHeader";
570
- var CarouselContext = React23.createContext(null);
563
+ var CarouselContext = React25.createContext(null);
571
564
  function useCarousel() {
572
- const context = React23.useContext(CarouselContext);
565
+ const context = React25.useContext(CarouselContext);
573
566
  if (!context) {
574
567
  throw new Error("useCarousel must be used within a <Carousel />");
575
568
  }
576
569
  return context;
577
570
  }
578
- var Carousel = React23.forwardRef(
571
+ var Carousel = React25.forwardRef(
579
572
  ({
580
573
  orientation = "horizontal",
581
574
  opts,
@@ -592,22 +585,22 @@ var Carousel = React23.forwardRef(
592
585
  },
593
586
  plugins
594
587
  );
595
- const [canScrollPrev, setCanScrollPrev] = React23.useState(false);
596
- const [canScrollNext, setCanScrollNext] = React23.useState(false);
597
- const onSelect = React23.useCallback((api2) => {
588
+ const [canScrollPrev, setCanScrollPrev] = React25.useState(false);
589
+ const [canScrollNext, setCanScrollNext] = React25.useState(false);
590
+ const onSelect = React25.useCallback((api2) => {
598
591
  if (!api2) {
599
592
  return;
600
593
  }
601
594
  setCanScrollPrev(api2.canScrollPrev());
602
595
  setCanScrollNext(api2.canScrollNext());
603
596
  }, []);
604
- const scrollPrev = React23.useCallback(() => {
597
+ const scrollPrev = React25.useCallback(() => {
605
598
  api?.scrollPrev();
606
599
  }, [api]);
607
- const scrollNext = React23.useCallback(() => {
600
+ const scrollNext = React25.useCallback(() => {
608
601
  api?.scrollNext();
609
602
  }, [api]);
610
- const handleKeyDown = React23.useCallback(
603
+ const handleKeyDown = React25.useCallback(
611
604
  (event) => {
612
605
  if (event.key === "ArrowLeft") {
613
606
  event.preventDefault();
@@ -619,13 +612,13 @@ var Carousel = React23.forwardRef(
619
612
  },
620
613
  [scrollPrev, scrollNext]
621
614
  );
622
- React23.useEffect(() => {
615
+ React25.useEffect(() => {
623
616
  if (!api || !setApi) {
624
617
  return;
625
618
  }
626
619
  setApi(api);
627
620
  }, [api, setApi]);
628
- React23.useEffect(() => {
621
+ React25.useEffect(() => {
629
622
  if (!api) {
630
623
  return;
631
624
  }
@@ -666,7 +659,7 @@ var Carousel = React23.forwardRef(
666
659
  }
667
660
  );
668
661
  Carousel.displayName = "Carousel";
669
- var CarouselContent = React23.forwardRef(({ className, ...props }, ref) => {
662
+ var CarouselContent = React25.forwardRef(({ className, ...props }, ref) => {
670
663
  const { carouselRef, orientation } = useCarousel();
671
664
  return /* @__PURE__ */ jsx("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx(
672
665
  "div",
@@ -682,7 +675,7 @@ var CarouselContent = React23.forwardRef(({ className, ...props }, ref) => {
682
675
  ) });
683
676
  });
684
677
  CarouselContent.displayName = "CarouselContent";
685
- var CarouselItem = React23.forwardRef(({ className, ...props }, ref) => {
678
+ var CarouselItem = React25.forwardRef(({ className, ...props }, ref) => {
686
679
  const { orientation } = useCarousel();
687
680
  return /* @__PURE__ */ jsx(
688
681
  "div",
@@ -700,7 +693,7 @@ var CarouselItem = React23.forwardRef(({ className, ...props }, ref) => {
700
693
  );
701
694
  });
702
695
  CarouselItem.displayName = "CarouselItem";
703
- var CarouselPrevious = React23.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
696
+ var CarouselPrevious = React25.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
704
697
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
705
698
  return /* @__PURE__ */ jsxs(
706
699
  Button,
@@ -724,7 +717,7 @@ var CarouselPrevious = React23.forwardRef(({ className, variant = "outline", siz
724
717
  );
725
718
  });
726
719
  CarouselPrevious.displayName = "CarouselPrevious";
727
- var CarouselNext = React23.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
720
+ var CarouselNext = React25.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
728
721
  const { orientation, scrollNext, canScrollNext } = useCarousel();
729
722
  return /* @__PURE__ */ jsxs(
730
723
  Button,
@@ -752,7 +745,7 @@ var Dialog = DialogPrimitive.Root;
752
745
  var DialogTrigger = DialogPrimitive.Trigger;
753
746
  var DialogPortal = DialogPrimitive.Portal;
754
747
  var DialogClose = DialogPrimitive.Close;
755
- var DialogOverlay = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
748
+ var DialogOverlay = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
756
749
  DialogPrimitive.Overlay,
757
750
  {
758
751
  ref,
@@ -764,7 +757,7 @@ var DialogOverlay = React23.forwardRef(({ className, ...props }, ref) => /* @__P
764
757
  }
765
758
  ));
766
759
  DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
767
- var DialogContent = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
760
+ var DialogContent = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
768
761
  /* @__PURE__ */ jsx(DialogOverlay, {}),
769
762
  /* @__PURE__ */ jsxs(
770
763
  DialogPrimitive.Content,
@@ -814,7 +807,7 @@ var DialogFooter = ({
814
807
  }
815
808
  );
816
809
  DialogFooter.displayName = "DialogFooter";
817
- var DialogTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
810
+ var DialogTitle = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
818
811
  DialogPrimitive.Title,
819
812
  {
820
813
  ref,
@@ -826,7 +819,7 @@ var DialogTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PUR
826
819
  }
827
820
  ));
828
821
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
829
- var DialogDescription = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
822
+ var DialogDescription = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
830
823
  DialogPrimitive.Description,
831
824
  {
832
825
  ref,
@@ -835,7 +828,7 @@ var DialogDescription = React23.forwardRef(({ className, ...props }, ref) => /*
835
828
  }
836
829
  ));
837
830
  DialogDescription.displayName = DialogPrimitive.Description.displayName;
838
- var Command = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
831
+ var Command = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
839
832
  Command$1,
840
833
  {
841
834
  ref,
@@ -850,7 +843,7 @@ Command.displayName = Command$1.displayName;
850
843
  var CommandDialog = ({ children, ...props }) => {
851
844
  return /* @__PURE__ */ jsx(Dialog, { ...props, children: /* @__PURE__ */ jsx(DialogContent, { className: "overflow-hidden p-0", children: /* @__PURE__ */ jsx(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) }) });
852
845
  };
853
- var CommandInput = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
846
+ var CommandInput = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
854
847
  /* @__PURE__ */ jsx(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
855
848
  /* @__PURE__ */ jsx(
856
849
  Command$1.Input,
@@ -865,7 +858,7 @@ var CommandInput = React23.forwardRef(({ className, ...props }, ref) => /* @__PU
865
858
  )
866
859
  ] }));
867
860
  CommandInput.displayName = Command$1.Input.displayName;
868
- var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
861
+ var CommandList = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
869
862
  Command$1.List,
870
863
  {
871
864
  ref,
@@ -874,7 +867,7 @@ var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PUR
874
867
  }
875
868
  ));
876
869
  CommandList.displayName = Command$1.List.displayName;
877
- var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ jsx(
870
+ var CommandEmpty = React25.forwardRef((props, ref) => /* @__PURE__ */ jsx(
878
871
  Command$1.Empty,
879
872
  {
880
873
  ref,
@@ -883,19 +876,19 @@ var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ jsx(
883
876
  }
884
877
  ));
885
878
  CommandEmpty.displayName = Command$1.Empty.displayName;
886
- var CommandGroup = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
879
+ var CommandGroup = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
887
880
  Command$1.Group,
888
881
  {
889
882
  ref,
890
883
  className: cn(
891
- "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-meta [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
884
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-sm [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
892
885
  className
893
886
  ),
894
887
  ...props
895
888
  }
896
889
  ));
897
890
  CommandGroup.displayName = Command$1.Group.displayName;
898
- var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
891
+ var CommandSeparator = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
899
892
  Command$1.Separator,
900
893
  {
901
894
  ref,
@@ -904,7 +897,7 @@ var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @
904
897
  }
905
898
  ));
906
899
  CommandSeparator.displayName = Command$1.Separator.displayName;
907
- var CommandItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
900
+ var CommandItem = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
908
901
  Command$1.Item,
909
902
  {
910
903
  ref,
@@ -924,7 +917,7 @@ var CommandShortcut = ({
924
917
  "span",
925
918
  {
926
919
  className: cn(
927
- "ml-auto text-meta tracking-widest text-muted-foreground",
920
+ "ml-auto text-sm tracking-widest text-muted-foreground",
928
921
  className
929
922
  ),
930
923
  ...props
@@ -938,7 +931,7 @@ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
938
931
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
939
932
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
940
933
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
941
- var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
934
+ var DropdownMenuSubTrigger = React25.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
942
935
  DropdownMenuPrimitive.SubTrigger,
943
936
  {
944
937
  ref,
@@ -955,7 +948,7 @@ var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, .
955
948
  }
956
949
  ));
957
950
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
958
- var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
951
+ var DropdownMenuSubContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
959
952
  DropdownMenuPrimitive.SubContent,
960
953
  {
961
954
  ref,
@@ -967,7 +960,7 @@ var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) =
967
960
  }
968
961
  ));
969
962
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
970
- var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
963
+ var DropdownMenuContent = React25.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
971
964
  DropdownMenuPrimitive.Content,
972
965
  {
973
966
  ref,
@@ -981,7 +974,7 @@ var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...pr
981
974
  }
982
975
  ) }));
983
976
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
984
- var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
977
+ var DropdownMenuItem = React25.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
985
978
  DropdownMenuPrimitive.Item,
986
979
  {
987
980
  ref,
@@ -994,7 +987,7 @@ var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref)
994
987
  }
995
988
  ));
996
989
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
997
- var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
990
+ var DropdownMenuCheckboxItem = React25.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
998
991
  DropdownMenuPrimitive.CheckboxItem,
999
992
  {
1000
993
  ref,
@@ -1011,7 +1004,7 @@ var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checke
1011
1004
  }
1012
1005
  ));
1013
1006
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
1014
- var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1007
+ var DropdownMenuRadioItem = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1015
1008
  DropdownMenuPrimitive.RadioItem,
1016
1009
  {
1017
1010
  ref,
@@ -1027,7 +1020,7 @@ var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props
1027
1020
  }
1028
1021
  ));
1029
1022
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
1030
- var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1023
+ var DropdownMenuLabel = React25.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1031
1024
  DropdownMenuPrimitive.Label,
1032
1025
  {
1033
1026
  ref,
@@ -1040,7 +1033,7 @@ var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref)
1040
1033
  }
1041
1034
  ));
1042
1035
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
1043
- var DropdownMenuSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1036
+ var DropdownMenuSeparator = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1044
1037
  DropdownMenuPrimitive.Separator,
1045
1038
  {
1046
1039
  ref,
@@ -1056,7 +1049,7 @@ var DropdownMenuShortcut = ({
1056
1049
  return /* @__PURE__ */ jsx(
1057
1050
  "span",
1058
1051
  {
1059
- className: cn("ml-auto text-meta tracking-widest opacity-60", className),
1052
+ className: cn("ml-auto text-sm tracking-widest opacity-60", className),
1060
1053
  ...props
1061
1054
  }
1062
1055
  );
@@ -1064,7 +1057,7 @@ var DropdownMenuShortcut = ({
1064
1057
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1065
1058
  var HoverCard = HoverCardPrimitive.Root;
1066
1059
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
1067
- var HoverCardContent = React23.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
1060
+ var HoverCardContent = React25.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
1068
1061
  HoverCardPrimitive.Content,
1069
1062
  {
1070
1063
  ref,
@@ -1225,7 +1218,7 @@ function ItemDescription({ className, ...props }) {
1225
1218
  className: cn(
1226
1219
  "text-muted-foreground line-clamp-2 text-balance font-normal leading-normal",
1227
1220
  // A dense row's subtitle is one line of meta, not a wrapped paragraph.
1228
- "group-data-[size=xs]/item:line-clamp-1 group-data-[size=xs]/item:text-meta",
1221
+ "group-data-[size=xs]/item:line-clamp-1 group-data-[size=xs]/item:text-sm",
1229
1222
  "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
1230
1223
  className
1231
1224
  ),
@@ -1275,7 +1268,7 @@ function Kbd({ className, ...props }) {
1275
1268
  {
1276
1269
  "data-slot": "kbd",
1277
1270
  className: cn(
1278
- "bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-control px-1 font-sans text-meta font-medium",
1271
+ "bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-control px-1 font-sans text-sm font-medium",
1279
1272
  "[&_svg:not([class*='size-'])]:size-3",
1280
1273
  "[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10",
1281
1274
  className
@@ -1294,6 +1287,32 @@ function KbdGroup({ className, ...props }) {
1294
1287
  }
1295
1288
  );
1296
1289
  }
1290
+ var linkVariants = cva(
1291
+ "underline-offset-4 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-[2px]",
1292
+ {
1293
+ variants: {
1294
+ variant: {
1295
+ default: "text-primary hover:underline",
1296
+ underlined: "text-primary underline",
1297
+ quiet: "text-muted-foreground hover:text-foreground hover:underline"
1298
+ }
1299
+ },
1300
+ defaultVariants: { variant: "default" }
1301
+ }
1302
+ );
1303
+ var Link = React25.forwardRef(
1304
+ ({ className, variant, external, target, rel, ...props }, ref) => /* @__PURE__ */ jsx(
1305
+ "a",
1306
+ {
1307
+ ref,
1308
+ className: cn(linkVariants({ variant }), className),
1309
+ target: external ? "_blank" : target,
1310
+ rel: external ? "noreferrer noopener" : rel,
1311
+ ...props
1312
+ }
1313
+ )
1314
+ );
1315
+ Link.displayName = "Link";
1297
1316
  function MenubarMenu({
1298
1317
  ...props
1299
1318
  }) {
@@ -1319,7 +1338,7 @@ function MenubarSub({
1319
1338
  }) {
1320
1339
  return /* @__PURE__ */ jsx(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
1321
1340
  }
1322
- var Menubar = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1341
+ var Menubar = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1323
1342
  MenubarPrimitive.Root,
1324
1343
  {
1325
1344
  ref,
@@ -1331,7 +1350,7 @@ var Menubar = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__
1331
1350
  }
1332
1351
  ));
1333
1352
  Menubar.displayName = MenubarPrimitive.Root.displayName;
1334
- var MenubarTrigger = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1353
+ var MenubarTrigger = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1335
1354
  MenubarPrimitive.Trigger,
1336
1355
  {
1337
1356
  ref,
@@ -1343,7 +1362,7 @@ var MenubarTrigger = React23.forwardRef(({ className, ...props }, ref) => /* @__
1343
1362
  }
1344
1363
  ));
1345
1364
  MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;
1346
- var MenubarSubTrigger = React23.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1365
+ var MenubarSubTrigger = React25.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1347
1366
  MenubarPrimitive.SubTrigger,
1348
1367
  {
1349
1368
  ref,
@@ -1360,7 +1379,7 @@ var MenubarSubTrigger = React23.forwardRef(({ className, inset, children, ...pro
1360
1379
  }
1361
1380
  ));
1362
1381
  MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
1363
- var MenubarSubContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1382
+ var MenubarSubContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1364
1383
  MenubarPrimitive.SubContent,
1365
1384
  {
1366
1385
  ref,
@@ -1372,7 +1391,7 @@ var MenubarSubContent = React23.forwardRef(({ className, ...props }, ref) => /*
1372
1391
  }
1373
1392
  ));
1374
1393
  MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
1375
- var MenubarContent = React23.forwardRef(
1394
+ var MenubarContent = React25.forwardRef(
1376
1395
  ({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1377
1396
  MenubarPrimitive.Content,
1378
1397
  {
@@ -1389,7 +1408,7 @@ var MenubarContent = React23.forwardRef(
1389
1408
  ) })
1390
1409
  );
1391
1410
  MenubarContent.displayName = MenubarPrimitive.Content.displayName;
1392
- var MenubarItem = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1411
+ var MenubarItem = React25.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1393
1412
  MenubarPrimitive.Item,
1394
1413
  {
1395
1414
  ref,
@@ -1402,7 +1421,7 @@ var MenubarItem = React23.forwardRef(({ className, inset, ...props }, ref) => /*
1402
1421
  }
1403
1422
  ));
1404
1423
  MenubarItem.displayName = MenubarPrimitive.Item.displayName;
1405
- var MenubarCheckboxItem = React23.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
1424
+ var MenubarCheckboxItem = React25.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
1406
1425
  MenubarPrimitive.CheckboxItem,
1407
1426
  {
1408
1427
  ref,
@@ -1419,7 +1438,7 @@ var MenubarCheckboxItem = React23.forwardRef(({ className, children, checked, ..
1419
1438
  }
1420
1439
  ));
1421
1440
  MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName;
1422
- var MenubarRadioItem = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1441
+ var MenubarRadioItem = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1423
1442
  MenubarPrimitive.RadioItem,
1424
1443
  {
1425
1444
  ref,
@@ -1435,7 +1454,7 @@ var MenubarRadioItem = React23.forwardRef(({ className, children, ...props }, re
1435
1454
  }
1436
1455
  ));
1437
1456
  MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName;
1438
- var MenubarLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1457
+ var MenubarLabel = React25.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1439
1458
  MenubarPrimitive.Label,
1440
1459
  {
1441
1460
  ref,
@@ -1448,7 +1467,7 @@ var MenubarLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /
1448
1467
  }
1449
1468
  ));
1450
1469
  MenubarLabel.displayName = MenubarPrimitive.Label.displayName;
1451
- var MenubarSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1470
+ var MenubarSeparator = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1452
1471
  MenubarPrimitive.Separator,
1453
1472
  {
1454
1473
  ref,
@@ -1465,7 +1484,7 @@ var MenubarShortcut = ({
1465
1484
  "span",
1466
1485
  {
1467
1486
  className: cn(
1468
- "ml-auto text-meta tracking-widest text-muted-foreground",
1487
+ "ml-auto text-sm tracking-widest text-muted-foreground",
1469
1488
  className
1470
1489
  ),
1471
1490
  ...props
@@ -1473,7 +1492,7 @@ var MenubarShortcut = ({
1473
1492
  );
1474
1493
  };
1475
1494
  MenubarShortcut.displayname = "MenubarShortcut";
1476
- var NavigationMenu = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1495
+ var NavigationMenu = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1477
1496
  NavigationMenuPrimitive.Root,
1478
1497
  {
1479
1498
  ref,
@@ -1489,7 +1508,7 @@ var NavigationMenu = React23.forwardRef(({ className, children, ...props }, ref)
1489
1508
  }
1490
1509
  ));
1491
1510
  NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
1492
- var NavigationMenuList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1511
+ var NavigationMenuList = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1493
1512
  NavigationMenuPrimitive.List,
1494
1513
  {
1495
1514
  ref,
@@ -1505,7 +1524,7 @@ var NavigationMenuItem = NavigationMenuPrimitive.Item;
1505
1524
  var navigationMenuTriggerStyle = cva(
1506
1525
  "group inline-flex h-10 w-max items-center justify-center rounded-control bg-background px-4 py-2 font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent"
1507
1526
  );
1508
- var NavigationMenuTrigger = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1527
+ var NavigationMenuTrigger = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1509
1528
  NavigationMenuPrimitive.Trigger,
1510
1529
  {
1511
1530
  ref,
@@ -1525,7 +1544,7 @@ var NavigationMenuTrigger = React23.forwardRef(({ className, children, ...props
1525
1544
  }
1526
1545
  ));
1527
1546
  NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
1528
- var NavigationMenuContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1547
+ var NavigationMenuContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1529
1548
  NavigationMenuPrimitive.Content,
1530
1549
  {
1531
1550
  ref,
@@ -1538,7 +1557,7 @@ var NavigationMenuContent = React23.forwardRef(({ className, ...props }, ref) =>
1538
1557
  ));
1539
1558
  NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
1540
1559
  var NavigationMenuLink = NavigationMenuPrimitive.Link;
1541
- var NavigationMenuViewport = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx(
1560
+ var NavigationMenuViewport = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx(
1542
1561
  NavigationMenuPrimitive.Viewport,
1543
1562
  {
1544
1563
  className: cn(
@@ -1550,7 +1569,7 @@ var NavigationMenuViewport = React23.forwardRef(({ className, ...props }, ref) =
1550
1569
  }
1551
1570
  ) }));
1552
1571
  NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
1553
- var NavigationMenuIndicator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1572
+ var NavigationMenuIndicator = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1554
1573
  NavigationMenuPrimitive.Indicator,
1555
1574
  {
1556
1575
  ref,
@@ -1573,7 +1592,7 @@ var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx(
1573
1592
  }
1574
1593
  );
1575
1594
  Pagination.displayName = "Pagination";
1576
- var PaginationContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1595
+ var PaginationContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1577
1596
  "ul",
1578
1597
  {
1579
1598
  ref,
@@ -1582,7 +1601,7 @@ var PaginationContent = React23.forwardRef(({ className, ...props }, ref) => /*
1582
1601
  }
1583
1602
  ));
1584
1603
  PaginationContent.displayName = "PaginationContent";
1585
- var PaginationItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("li", { ref, className: cn("", className), ...props }));
1604
+ var PaginationItem = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("li", { ref, className: cn("", className), ...props }));
1586
1605
  PaginationItem.displayName = "PaginationItem";
1587
1606
  var PaginationLink = ({
1588
1607
  className,
@@ -1656,7 +1675,7 @@ var PaginationEllipsis = ({
1656
1675
  PaginationEllipsis.displayName = "PaginationEllipsis";
1657
1676
  var Popover = PopoverPrimitive.Root;
1658
1677
  var PopoverTrigger = PopoverPrimitive.Trigger;
1659
- var PopoverContent = React23.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1678
+ var PopoverContent = React25.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1660
1679
  PopoverPrimitive.Content,
1661
1680
  {
1662
1681
  ref,
@@ -1670,7 +1689,7 @@ var PopoverContent = React23.forwardRef(({ className, align = "center", sideOffs
1670
1689
  }
1671
1690
  ) }));
1672
1691
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
1673
- var Progress = React23.forwardRef(({ className, value, size = "default", ...props }, ref) => /* @__PURE__ */ jsx(
1692
+ var Progress = React25.forwardRef(({ className, value, size = "default", ...props }, ref) => /* @__PURE__ */ jsx(
1674
1693
  ProgressPrimitive.Root,
1675
1694
  {
1676
1695
  ref,
@@ -1714,7 +1733,7 @@ var ResizableHandle = ({
1714
1733
  /* @__PURE__ */ jsx("div", { className: "z-10 h-6 w-[3px] rounded-full bg-muted-foreground/40" })
1715
1734
  }
1716
1735
  );
1717
- var ScrollArea = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1736
+ var ScrollArea = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1718
1737
  ScrollAreaPrimitive.Root,
1719
1738
  {
1720
1739
  ref,
@@ -1728,7 +1747,7 @@ var ScrollArea = React23.forwardRef(({ className, children, ...props }, ref) =>
1728
1747
  }
1729
1748
  ));
1730
1749
  ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
1731
- var ScrollBar = React23.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx(
1750
+ var ScrollBar = React25.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx(
1732
1751
  ScrollAreaPrimitive.ScrollAreaScrollbar,
1733
1752
  {
1734
1753
  ref,
@@ -1744,11 +1763,90 @@ var ScrollBar = React23.forwardRef(({ className, orientation = "vertical", ...pr
1744
1763
  }
1745
1764
  ));
1746
1765
  ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
1766
+ var SegmentedControl = React25.forwardRef(
1767
+ ({
1768
+ options,
1769
+ value,
1770
+ defaultValue,
1771
+ onValueChange,
1772
+ size = "xs",
1773
+ stretch,
1774
+ className,
1775
+ ...props
1776
+ }, ref) => {
1777
+ const [internal, setInternal] = React25.useState(
1778
+ defaultValue ?? options[0]?.value
1779
+ );
1780
+ const active = value ?? internal;
1781
+ const refs = React25.useRef([]);
1782
+ const select = (next) => {
1783
+ if (value == null) setInternal(next);
1784
+ onValueChange?.(next);
1785
+ };
1786
+ const onKeyDown = (event, index) => {
1787
+ const forward = event.key === "ArrowRight" || event.key === "ArrowDown";
1788
+ const back = event.key === "ArrowLeft" || event.key === "ArrowUp";
1789
+ if (!forward && !back) return;
1790
+ event.preventDefault();
1791
+ const step = forward ? 1 : -1;
1792
+ for (let i = 1; i <= options.length; i += 1) {
1793
+ const next = options[(index + step * i + options.length * i) % options.length];
1794
+ if (next && !next.disabled) {
1795
+ select(next.value);
1796
+ refs.current[options.indexOf(next)]?.focus();
1797
+ return;
1798
+ }
1799
+ }
1800
+ };
1801
+ return /* @__PURE__ */ jsx(
1802
+ "div",
1803
+ {
1804
+ ref,
1805
+ role: "radiogroup",
1806
+ className: cn(
1807
+ "inline-flex overflow-hidden rounded-control border border-border",
1808
+ stretch && "flex w-full",
1809
+ className
1810
+ ),
1811
+ ...props,
1812
+ children: options.map((option, index) => {
1813
+ const on = option.value === active;
1814
+ return /* @__PURE__ */ jsx(
1815
+ "button",
1816
+ {
1817
+ ref: (node) => {
1818
+ refs.current[index] = node;
1819
+ },
1820
+ type: "button",
1821
+ role: "radio",
1822
+ "aria-checked": on,
1823
+ disabled: option.disabled,
1824
+ tabIndex: on ? 0 : -1,
1825
+ onClick: () => select(option.value),
1826
+ onKeyDown: (event) => onKeyDown(event, index),
1827
+ className: cn(
1828
+ "min-w-0 truncate px-2 text-center whitespace-nowrap",
1829
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-ring",
1830
+ size === "xs" ? "h-[22px] text-sm" : "h-[26px]",
1831
+ stretch && "flex-1",
1832
+ on ? "bg-primary/12 font-medium text-primary" : "text-muted-foreground hover:bg-accent hover:text-foreground",
1833
+ option.disabled && "pointer-events-none opacity-50"
1834
+ ),
1835
+ children: option.label
1836
+ },
1837
+ option.value
1838
+ );
1839
+ })
1840
+ }
1841
+ );
1842
+ }
1843
+ );
1844
+ SegmentedControl.displayName = "SegmentedControl";
1747
1845
  var Sheet = DialogPrimitive.Root;
1748
1846
  var SheetTrigger = DialogPrimitive.Trigger;
1749
1847
  var SheetClose = DialogPrimitive.Close;
1750
1848
  var SheetPortal = DialogPrimitive.Portal;
1751
- var SheetOverlay = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1849
+ var SheetOverlay = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1752
1850
  DialogPrimitive.Overlay,
1753
1851
  {
1754
1852
  className: cn(
@@ -1776,7 +1874,7 @@ var sheetVariants = cva(
1776
1874
  }
1777
1875
  }
1778
1876
  );
1779
- var SheetContent = React23.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
1877
+ var SheetContent = React25.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
1780
1878
  /* @__PURE__ */ jsx(SheetOverlay, {}),
1781
1879
  /* @__PURE__ */ jsxs(
1782
1880
  DialogPrimitive.Content,
@@ -1823,7 +1921,7 @@ var SheetFooter = ({
1823
1921
  }
1824
1922
  );
1825
1923
  SheetFooter.displayName = "SheetFooter";
1826
- var SheetTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1924
+ var SheetTitle = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1827
1925
  DialogPrimitive.Title,
1828
1926
  {
1829
1927
  ref,
@@ -1832,7 +1930,7 @@ var SheetTitle = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE
1832
1930
  }
1833
1931
  ));
1834
1932
  SheetTitle.displayName = DialogPrimitive.Title.displayName;
1835
- var SheetDescription = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1933
+ var SheetDescription = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1836
1934
  DialogPrimitive.Description,
1837
1935
  {
1838
1936
  ref,
@@ -1843,8 +1941,8 @@ var SheetDescription = React23.forwardRef(({ className, ...props }, ref) => /* @
1843
1941
  SheetDescription.displayName = DialogPrimitive.Description.displayName;
1844
1942
  var MOBILE_BREAKPOINT = 768;
1845
1943
  function useIsMobile() {
1846
- const [isMobile, setIsMobile] = React23.useState(void 0);
1847
- React23.useEffect(() => {
1944
+ const [isMobile, setIsMobile] = React25.useState(void 0);
1945
+ React25.useEffect(() => {
1848
1946
  const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
1849
1947
  const onChange = () => {
1850
1948
  setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
@@ -1870,7 +1968,7 @@ function Skeleton({
1870
1968
  var TooltipProvider = TooltipPrimitive.Provider;
1871
1969
  var Tooltip = TooltipPrimitive.Root;
1872
1970
  var TooltipTrigger = TooltipPrimitive.Trigger;
1873
- var TooltipContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
1971
+ var TooltipContent = React25.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
1874
1972
  TooltipPrimitive.Content,
1875
1973
  {
1876
1974
  ref,
@@ -1889,15 +1987,15 @@ var SIDEBAR_WIDTH = "16rem";
1889
1987
  var SIDEBAR_WIDTH_MOBILE = "18rem";
1890
1988
  var SIDEBAR_WIDTH_ICON = "3rem";
1891
1989
  var SIDEBAR_KEYBOARD_SHORTCUT = "b";
1892
- var SidebarContext = React23.createContext(null);
1990
+ var SidebarContext = React25.createContext(null);
1893
1991
  function useSidebar() {
1894
- const context = React23.useContext(SidebarContext);
1992
+ const context = React25.useContext(SidebarContext);
1895
1993
  if (!context) {
1896
1994
  throw new Error("useSidebar must be used within a SidebarProvider.");
1897
1995
  }
1898
1996
  return context;
1899
1997
  }
1900
- var SidebarProvider = React23.forwardRef(
1998
+ var SidebarProvider = React25.forwardRef(
1901
1999
  ({
1902
2000
  defaultOpen = true,
1903
2001
  open: openProp,
@@ -1908,10 +2006,10 @@ var SidebarProvider = React23.forwardRef(
1908
2006
  ...props
1909
2007
  }, ref) => {
1910
2008
  const isMobile = useIsMobile();
1911
- const [openMobile, setOpenMobile] = React23.useState(false);
1912
- const [_open, _setOpen] = React23.useState(defaultOpen);
2009
+ const [openMobile, setOpenMobile] = React25.useState(false);
2010
+ const [_open, _setOpen] = React25.useState(defaultOpen);
1913
2011
  const open = openProp ?? _open;
1914
- const setOpen = React23.useCallback(
2012
+ const setOpen = React25.useCallback(
1915
2013
  (value) => {
1916
2014
  const openState = typeof value === "function" ? value(open) : value;
1917
2015
  if (setOpenProp) {
@@ -1923,10 +2021,10 @@ var SidebarProvider = React23.forwardRef(
1923
2021
  },
1924
2022
  [setOpenProp, open]
1925
2023
  );
1926
- const toggleSidebar = React23.useCallback(() => {
2024
+ const toggleSidebar = React25.useCallback(() => {
1927
2025
  return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
1928
2026
  }, [isMobile, setOpen, setOpenMobile]);
1929
- React23.useEffect(() => {
2027
+ React25.useEffect(() => {
1930
2028
  const handleKeyDown = (event) => {
1931
2029
  if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
1932
2030
  event.preventDefault();
@@ -1937,7 +2035,7 @@ var SidebarProvider = React23.forwardRef(
1937
2035
  return () => window.removeEventListener("keydown", handleKeyDown);
1938
2036
  }, [toggleSidebar]);
1939
2037
  const state = open ? "expanded" : "collapsed";
1940
- const contextValue = React23.useMemo(
2038
+ const contextValue = React25.useMemo(
1941
2039
  () => ({
1942
2040
  state,
1943
2041
  open,
@@ -1969,7 +2067,7 @@ var SidebarProvider = React23.forwardRef(
1969
2067
  }
1970
2068
  );
1971
2069
  SidebarProvider.displayName = "SidebarProvider";
1972
- var Sidebar = React23.forwardRef(
2070
+ var Sidebar = React25.forwardRef(
1973
2071
  ({
1974
2072
  side = "left",
1975
2073
  variant = "sidebar",
@@ -2062,7 +2160,7 @@ var Sidebar = React23.forwardRef(
2062
2160
  }
2063
2161
  );
2064
2162
  Sidebar.displayName = "Sidebar";
2065
- var SidebarTrigger = React23.forwardRef(({ className, onClick, ...props }, ref) => {
2163
+ var SidebarTrigger = React25.forwardRef(({ className, onClick, ...props }, ref) => {
2066
2164
  const { toggleSidebar } = useSidebar();
2067
2165
  return /* @__PURE__ */ jsxs(
2068
2166
  Button,
@@ -2085,7 +2183,7 @@ var SidebarTrigger = React23.forwardRef(({ className, onClick, ...props }, ref)
2085
2183
  );
2086
2184
  });
2087
2185
  SidebarTrigger.displayName = "SidebarTrigger";
2088
- var SidebarRail = React23.forwardRef(({ className, ...props }, ref) => {
2186
+ var SidebarRail = React25.forwardRef(({ className, ...props }, ref) => {
2089
2187
  const { toggleSidebar } = useSidebar();
2090
2188
  return /* @__PURE__ */ jsx(
2091
2189
  "button",
@@ -2110,7 +2208,7 @@ var SidebarRail = React23.forwardRef(({ className, ...props }, ref) => {
2110
2208
  );
2111
2209
  });
2112
2210
  SidebarRail.displayName = "SidebarRail";
2113
- var SidebarInset = React23.forwardRef(({ className, ...props }, ref) => {
2211
+ var SidebarInset = React25.forwardRef(({ className, ...props }, ref) => {
2114
2212
  return /* @__PURE__ */ jsx(
2115
2213
  "main",
2116
2214
  {
@@ -2125,7 +2223,7 @@ var SidebarInset = React23.forwardRef(({ className, ...props }, ref) => {
2125
2223
  );
2126
2224
  });
2127
2225
  SidebarInset.displayName = "SidebarInset";
2128
- var SidebarInput = React23.forwardRef(({ className, type, ...props }, ref) => {
2226
+ var SidebarInput = React25.forwardRef(({ className, type, ...props }, ref) => {
2129
2227
  return /* @__PURE__ */ jsx(
2130
2228
  "input",
2131
2229
  {
@@ -2143,7 +2241,7 @@ var SidebarInput = React23.forwardRef(({ className, type, ...props }, ref) => {
2143
2241
  );
2144
2242
  });
2145
2243
  SidebarInput.displayName = "SidebarInput";
2146
- var SidebarHeader = React23.forwardRef(({ className, ...props }, ref) => {
2244
+ var SidebarHeader = React25.forwardRef(({ className, ...props }, ref) => {
2147
2245
  return /* @__PURE__ */ jsx(
2148
2246
  "div",
2149
2247
  {
@@ -2155,7 +2253,7 @@ var SidebarHeader = React23.forwardRef(({ className, ...props }, ref) => {
2155
2253
  );
2156
2254
  });
2157
2255
  SidebarHeader.displayName = "SidebarHeader";
2158
- var SidebarFooter = React23.forwardRef(({ className, ...props }, ref) => {
2256
+ var SidebarFooter = React25.forwardRef(({ className, ...props }, ref) => {
2159
2257
  return /* @__PURE__ */ jsx(
2160
2258
  "div",
2161
2259
  {
@@ -2167,7 +2265,7 @@ var SidebarFooter = React23.forwardRef(({ className, ...props }, ref) => {
2167
2265
  );
2168
2266
  });
2169
2267
  SidebarFooter.displayName = "SidebarFooter";
2170
- var SidebarSeparator = React23.forwardRef(({ className, ...props }, ref) => {
2268
+ var SidebarSeparator = React25.forwardRef(({ className, ...props }, ref) => {
2171
2269
  return /* @__PURE__ */ jsx(
2172
2270
  Separator,
2173
2271
  {
@@ -2179,7 +2277,7 @@ var SidebarSeparator = React23.forwardRef(({ className, ...props }, ref) => {
2179
2277
  );
2180
2278
  });
2181
2279
  SidebarSeparator.displayName = "SidebarSeparator";
2182
- var SidebarContent = React23.forwardRef(({ className, ...props }, ref) => {
2280
+ var SidebarContent = React25.forwardRef(({ className, ...props }, ref) => {
2183
2281
  return /* @__PURE__ */ jsx(
2184
2282
  "div",
2185
2283
  {
@@ -2194,7 +2292,7 @@ var SidebarContent = React23.forwardRef(({ className, ...props }, ref) => {
2194
2292
  );
2195
2293
  });
2196
2294
  SidebarContent.displayName = "SidebarContent";
2197
- var SidebarGroup = React23.forwardRef(({ className, ...props }, ref) => {
2295
+ var SidebarGroup = React25.forwardRef(({ className, ...props }, ref) => {
2198
2296
  return /* @__PURE__ */ jsx(
2199
2297
  "div",
2200
2298
  {
@@ -2206,7 +2304,7 @@ var SidebarGroup = React23.forwardRef(({ className, ...props }, ref) => {
2206
2304
  );
2207
2305
  });
2208
2306
  SidebarGroup.displayName = "SidebarGroup";
2209
- var SidebarGroupLabel = React23.forwardRef(({ className, asChild = false, ...props }, ref) => {
2307
+ var SidebarGroupLabel = React25.forwardRef(({ className, asChild = false, ...props }, ref) => {
2210
2308
  const Comp = asChild ? Slot : "div";
2211
2309
  return /* @__PURE__ */ jsx(
2212
2310
  Comp,
@@ -2214,7 +2312,7 @@ var SidebarGroupLabel = React23.forwardRef(({ className, asChild = false, ...pro
2214
2312
  ref,
2215
2313
  "data-sidebar": "group-label",
2216
2314
  className: cn(
2217
- "flex h-8 shrink-0 items-center rounded-md px-2 text-meta font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
2315
+ "flex h-8 shrink-0 items-center rounded-md px-2 text-sm font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
2218
2316
  "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
2219
2317
  className
2220
2318
  ),
@@ -2223,7 +2321,7 @@ var SidebarGroupLabel = React23.forwardRef(({ className, asChild = false, ...pro
2223
2321
  );
2224
2322
  });
2225
2323
  SidebarGroupLabel.displayName = "SidebarGroupLabel";
2226
- var SidebarGroupAction = React23.forwardRef(({ className, asChild = false, ...props }, ref) => {
2324
+ var SidebarGroupAction = React25.forwardRef(({ className, asChild = false, ...props }, ref) => {
2227
2325
  const Comp = asChild ? Slot : "button";
2228
2326
  return /* @__PURE__ */ jsx(
2229
2327
  Comp,
@@ -2242,7 +2340,7 @@ var SidebarGroupAction = React23.forwardRef(({ className, asChild = false, ...pr
2242
2340
  );
2243
2341
  });
2244
2342
  SidebarGroupAction.displayName = "SidebarGroupAction";
2245
- var SidebarGroupContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2343
+ var SidebarGroupContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2246
2344
  "div",
2247
2345
  {
2248
2346
  ref,
@@ -2252,7 +2350,7 @@ var SidebarGroupContent = React23.forwardRef(({ className, ...props }, ref) => /
2252
2350
  }
2253
2351
  ));
2254
2352
  SidebarGroupContent.displayName = "SidebarGroupContent";
2255
- var SidebarMenu = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2353
+ var SidebarMenu = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2256
2354
  "ul",
2257
2355
  {
2258
2356
  ref,
@@ -2262,7 +2360,7 @@ var SidebarMenu = React23.forwardRef(({ className, ...props }, ref) => /* @__PUR
2262
2360
  }
2263
2361
  ));
2264
2362
  SidebarMenu.displayName = "SidebarMenu";
2265
- var SidebarMenuItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2363
+ var SidebarMenuItem = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2266
2364
  "li",
2267
2365
  {
2268
2366
  ref,
@@ -2292,7 +2390,7 @@ var sidebarMenuButtonVariants = cva(
2292
2390
  }
2293
2391
  }
2294
2392
  );
2295
- var SidebarMenuButton = React23.forwardRef(
2393
+ var SidebarMenuButton = React25.forwardRef(
2296
2394
  ({
2297
2395
  asChild = false,
2298
2396
  isActive = false,
@@ -2338,7 +2436,7 @@ var SidebarMenuButton = React23.forwardRef(
2338
2436
  }
2339
2437
  );
2340
2438
  SidebarMenuButton.displayName = "SidebarMenuButton";
2341
- var SidebarMenuAction = React23.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
2439
+ var SidebarMenuAction = React25.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
2342
2440
  const Comp = asChild ? Slot : "button";
2343
2441
  return /* @__PURE__ */ jsx(
2344
2442
  Comp,
@@ -2361,13 +2459,13 @@ var SidebarMenuAction = React23.forwardRef(({ className, asChild = false, showOn
2361
2459
  );
2362
2460
  });
2363
2461
  SidebarMenuAction.displayName = "SidebarMenuAction";
2364
- var SidebarMenuBadge = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2462
+ var SidebarMenuBadge = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2365
2463
  "div",
2366
2464
  {
2367
2465
  ref,
2368
2466
  "data-sidebar": "menu-badge",
2369
2467
  className: cn(
2370
- "pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-meta font-medium tabular-nums text-sidebar-foreground",
2468
+ "pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-sm font-medium tabular-nums text-sidebar-foreground",
2371
2469
  "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
2372
2470
  "peer-data-[size=sm]/menu-button:top-1",
2373
2471
  "peer-data-[size=default]/menu-button:top-1.5",
@@ -2379,8 +2477,8 @@ var SidebarMenuBadge = React23.forwardRef(({ className, ...props }, ref) => /* @
2379
2477
  }
2380
2478
  ));
2381
2479
  SidebarMenuBadge.displayName = "SidebarMenuBadge";
2382
- var SidebarMenuSkeleton = React23.forwardRef(({ className, showIcon = false, ...props }, ref) => {
2383
- const width = React23.useMemo(() => {
2480
+ var SidebarMenuSkeleton = React25.forwardRef(({ className, showIcon = false, ...props }, ref) => {
2481
+ const width = React25.useMemo(() => {
2384
2482
  return `${Math.floor(Math.random() * 40) + 50}%`;
2385
2483
  }, []);
2386
2484
  return /* @__PURE__ */ jsxs(
@@ -2413,7 +2511,7 @@ var SidebarMenuSkeleton = React23.forwardRef(({ className, showIcon = false, ...
2413
2511
  );
2414
2512
  });
2415
2513
  SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
2416
- var SidebarMenuSub = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2514
+ var SidebarMenuSub = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2417
2515
  "ul",
2418
2516
  {
2419
2517
  ref,
@@ -2427,9 +2525,9 @@ var SidebarMenuSub = React23.forwardRef(({ className, ...props }, ref) => /* @__
2427
2525
  }
2428
2526
  ));
2429
2527
  SidebarMenuSub.displayName = "SidebarMenuSub";
2430
- var SidebarMenuSubItem = React23.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("li", { ref, ...props }));
2528
+ var SidebarMenuSubItem = React25.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("li", { ref, ...props }));
2431
2529
  SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
2432
- var SidebarMenuSubButton = React23.forwardRef(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
2530
+ var SidebarMenuSubButton = React25.forwardRef(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
2433
2531
  const Comp = asChild ? Slot : "a";
2434
2532
  return /* @__PURE__ */ jsx(
2435
2533
  Comp,
@@ -2531,7 +2629,7 @@ var statusDotVariants = cva("inline-block shrink-0 rounded-full", {
2531
2629
  size: "sm"
2532
2630
  }
2533
2631
  });
2534
- var StatusDot = React23.forwardRef(
2632
+ var StatusDot = React25.forwardRef(
2535
2633
  ({ className, tone, size, label, ...props }, ref) => /* @__PURE__ */ jsx(
2536
2634
  "span",
2537
2635
  {
@@ -2545,7 +2643,7 @@ var StatusDot = React23.forwardRef(
2545
2643
  )
2546
2644
  );
2547
2645
  StatusDot.displayName = "StatusDot";
2548
- var Table = React23.forwardRef(({ className, density = "default", ...props }, ref) => /* @__PURE__ */ jsx(
2646
+ var Table = React25.forwardRef(({ className, density = "default", ...props }, ref) => /* @__PURE__ */ jsx(
2549
2647
  "div",
2550
2648
  {
2551
2649
  "data-density": density,
@@ -2561,9 +2659,9 @@ var Table = React23.forwardRef(({ className, density = "default", ...props }, re
2561
2659
  }
2562
2660
  ));
2563
2661
  Table.displayName = "Table";
2564
- var TableHeader = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
2662
+ var TableHeader = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
2565
2663
  TableHeader.displayName = "TableHeader";
2566
- var TableBody = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2664
+ var TableBody = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2567
2665
  "tbody",
2568
2666
  {
2569
2667
  ref,
@@ -2572,7 +2670,7 @@ var TableBody = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE_
2572
2670
  }
2573
2671
  ));
2574
2672
  TableBody.displayName = "TableBody";
2575
- var TableFooter = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2673
+ var TableFooter = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2576
2674
  "tfoot",
2577
2675
  {
2578
2676
  ref,
@@ -2584,7 +2682,7 @@ var TableFooter = React23.forwardRef(({ className, ...props }, ref) => /* @__PUR
2584
2682
  }
2585
2683
  ));
2586
2684
  TableFooter.displayName = "TableFooter";
2587
- var TableRow = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2685
+ var TableRow = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2588
2686
  "tr",
2589
2687
  {
2590
2688
  ref,
@@ -2596,7 +2694,7 @@ var TableRow = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__
2596
2694
  }
2597
2695
  ));
2598
2696
  TableRow.displayName = "TableRow";
2599
- var TableHead = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2697
+ var TableHead = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2600
2698
  "th",
2601
2699
  {
2602
2700
  ref,
@@ -2606,14 +2704,14 @@ var TableHead = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE_
2606
2704
  // every cell follows from there. One prop on the table rather than a
2607
2705
  // size on <TableHead> and <TableCell> individually — four places to
2608
2706
  // forget, and a table with two densities in it is always a mistake.
2609
- "group-data-[density=compact]/table:h-[26px] group-data-[density=compact]/table:text-meta",
2707
+ "group-data-[density=compact]/table:h-[26px] group-data-[density=compact]/table:text-sm",
2610
2708
  className
2611
2709
  ),
2612
2710
  ...props
2613
2711
  }
2614
2712
  ));
2615
2713
  TableHead.displayName = "TableHead";
2616
- var TableCell = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2714
+ var TableCell = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2617
2715
  "td",
2618
2716
  {
2619
2717
  ref,
@@ -2626,7 +2724,7 @@ var TableCell = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE_
2626
2724
  }
2627
2725
  ));
2628
2726
  TableCell.displayName = "TableCell";
2629
- var TableCaption = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2727
+ var TableCaption = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2630
2728
  "caption",
2631
2729
  {
2632
2730
  ref,
@@ -2635,11 +2733,11 @@ var TableCaption = React23.forwardRef(({ className, ...props }, ref) => /* @__PU
2635
2733
  }
2636
2734
  ));
2637
2735
  TableCaption.displayName = "TableCaption";
2638
- var TabsSizeContext = React23.createContext("default");
2639
- var Tabs = React23.forwardRef(({ size = "default", ...props }, ref) => /* @__PURE__ */ jsx(TabsSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsx(TabsPrimitive.Root, { ref, ...props }) }));
2736
+ var TabsSizeContext = React25.createContext("default");
2737
+ var Tabs = React25.forwardRef(({ size = "default", ...props }, ref) => /* @__PURE__ */ jsx(TabsSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsx(TabsPrimitive.Root, { ref, ...props }) }));
2640
2738
  Tabs.displayName = TabsPrimitive.Root.displayName;
2641
- var TabsList = React23.forwardRef(({ className, ...props }, ref) => {
2642
- const size = React23.useContext(TabsSizeContext);
2739
+ var TabsList = React25.forwardRef(({ className, ...props }, ref) => {
2740
+ const size = React25.useContext(TabsSizeContext);
2643
2741
  return /* @__PURE__ */ jsx(
2644
2742
  TabsPrimitive.List,
2645
2743
  {
@@ -2654,14 +2752,14 @@ var TabsList = React23.forwardRef(({ className, ...props }, ref) => {
2654
2752
  );
2655
2753
  });
2656
2754
  TabsList.displayName = TabsPrimitive.List.displayName;
2657
- var TabsTrigger = React23.forwardRef(({ className, ...props }, ref) => {
2658
- const size = React23.useContext(TabsSizeContext);
2755
+ var TabsTrigger = React25.forwardRef(({ className, ...props }, ref) => {
2756
+ const size = React25.useContext(TabsSizeContext);
2659
2757
  return /* @__PURE__ */ jsx(
2660
2758
  TabsPrimitive.Trigger,
2661
2759
  {
2662
2760
  ref,
2663
2761
  className: cn(
2664
- size === "sm" ? "h-[26px] px-2 text-meta" : "px-3 py-1",
2762
+ size === "sm" ? "h-[26px] px-2 text-sm" : "px-3 py-1",
2665
2763
  "inline-flex items-center justify-center whitespace-nowrap rounded-control font-medium ring-offset-background transition-colors text-muted-foreground hover:text-foreground hover:bg-background/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-primary/15 data-[state=active]:text-primary data-[state=active]:ring-1 data-[state=active]:ring-primary/25 data-[state=active]:shadow-sm",
2666
2764
  className
2667
2765
  ),
@@ -2670,7 +2768,7 @@ var TabsTrigger = React23.forwardRef(({ className, ...props }, ref) => {
2670
2768
  );
2671
2769
  });
2672
2770
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
2673
- var TabsContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2771
+ var TabsContent = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2674
2772
  TabsPrimitive.Content,
2675
2773
  {
2676
2774
  ref,
@@ -2702,7 +2800,7 @@ var toggleVariants = cva(
2702
2800
  }
2703
2801
  }
2704
2802
  );
2705
- var Toggle = React23.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx(
2803
+ var Toggle = React25.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx(
2706
2804
  TogglePrimitive.Root,
2707
2805
  {
2708
2806
  ref,
@@ -2711,11 +2809,11 @@ var Toggle = React23.forwardRef(({ className, variant, size, ...props }, ref) =>
2711
2809
  }
2712
2810
  ));
2713
2811
  Toggle.displayName = TogglePrimitive.Root.displayName;
2714
- var ToggleGroupContext = React23.createContext({
2812
+ var ToggleGroupContext = React25.createContext({
2715
2813
  size: "default",
2716
2814
  variant: "default"
2717
2815
  });
2718
- var ToggleGroup = React23.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx(
2816
+ var ToggleGroup = React25.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx(
2719
2817
  ToggleGroupPrimitive.Root,
2720
2818
  {
2721
2819
  ref,
@@ -2725,8 +2823,8 @@ var ToggleGroup = React23.forwardRef(({ className, variant, size, children, ...p
2725
2823
  }
2726
2824
  ));
2727
2825
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
2728
- var ToggleGroupItem = React23.forwardRef(({ className, children, variant, size, ...props }, ref) => {
2729
- const context = React23.useContext(ToggleGroupContext);
2826
+ var ToggleGroupItem = React25.forwardRef(({ className, children, variant, size, ...props }, ref) => {
2827
+ const context = React25.useContext(ToggleGroupContext);
2730
2828
  return /* @__PURE__ */ jsx(
2731
2829
  ToggleGroupPrimitive.Item,
2732
2830
  {
@@ -2744,6 +2842,26 @@ var ToggleGroupItem = React23.forwardRef(({ className, children, variant, size,
2744
2842
  );
2745
2843
  });
2746
2844
  ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
2845
+ var WORD = {
2846
+ unrecorded: "nothing recorded",
2847
+ purged: "purged",
2848
+ "declared-none": "none declared"
2849
+ };
2850
+ var AbsenceNote = React25.forwardRef(
2851
+ ({ reason, label, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2852
+ "div",
2853
+ {
2854
+ ref,
2855
+ className: cn("flex flex-col gap-1 px-2.5 py-2", className),
2856
+ ...props,
2857
+ children: [
2858
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-xs tracking-wide text-muted-foreground", children: label ?? WORD[reason] }),
2859
+ /* @__PURE__ */ jsx("span", { className: "text-sm leading-relaxed text-muted-foreground", children })
2860
+ ]
2861
+ }
2862
+ )
2863
+ );
2864
+ AbsenceNote.displayName = "AbsenceNote";
2747
2865
  var TONE = {
2748
2866
  allowed: "text-foreground",
2749
2867
  denied: "text-destructive",
@@ -2755,7 +2873,7 @@ function split(address) {
2755
2873
  if (cut < 0) return { head: "", tail: address };
2756
2874
  return { head: address.slice(0, cut + 1), tail: address.slice(cut + 1) };
2757
2875
  }
2758
- var AddressChip = React23.forwardRef(
2876
+ var AddressChip = React25.forwardRef(
2759
2877
  ({ address, tone = "allowed", onOpen, className, ...props }, ref) => {
2760
2878
  const { head, tail } = split(address);
2761
2879
  const body = /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -2777,8 +2895,8 @@ var AddressChip = React23.forwardRef(
2777
2895
  /* @__PURE__ */ jsx("span", { className: "min-w-0 shrink truncate", children: tail })
2778
2896
  ] });
2779
2897
  const shell = cn(
2780
- "inline-flex min-w-0 max-w-full items-baseline font-mono text-meta",
2781
- TONE[tone],
2898
+ "inline-flex min-w-0 max-w-full items-baseline font-mono text-sm",
2899
+ TONE[tone] ?? "text-foreground",
2782
2900
  className
2783
2901
  );
2784
2902
  if (onOpen) {
@@ -2801,7 +2919,7 @@ var AddressChip = React23.forwardRef(
2801
2919
  );
2802
2920
  AddressChip.displayName = "AddressChip";
2803
2921
  var agentChipVariants = cva(
2804
- "inline-flex max-w-full shrink-0 items-center gap-1 rounded-control border px-1.5 text-meta [&_svg]:size-3 [&_svg]:shrink-0",
2922
+ "inline-flex max-w-full shrink-0 items-center gap-1 rounded-control border px-1.5 text-sm [&_svg]:size-3 [&_svg]:shrink-0",
2805
2923
  {
2806
2924
  variants: {
2807
2925
  /**
@@ -2822,7 +2940,7 @@ var agentChipVariants = cva(
2822
2940
  defaultVariants: { kind: "agent", inactive: false }
2823
2941
  }
2824
2942
  );
2825
- var AgentChip = React23.forwardRef(
2943
+ var AgentChip = React25.forwardRef(
2826
2944
  ({ icon, name, kind, inactive, className, ...props }, ref) => /* @__PURE__ */ jsxs(
2827
2945
  "span",
2828
2946
  {
@@ -2849,13 +2967,13 @@ var stateVariants = cva("inline-flex shrink-0 items-center gap-1.5 font-medium",
2849
2967
  },
2850
2968
  defaultVariants: { tone: "active" }
2851
2969
  });
2852
- var AppStatusBar = React23.forwardRef(
2970
+ var AppStatusBar = React25.forwardRef(
2853
2971
  ({ state, tone, end, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2854
2972
  "div",
2855
2973
  {
2856
2974
  ref,
2857
2975
  className: cn(
2858
- "flex h-[25px] shrink-0 items-center gap-2 border-t border-border px-2 text-meta text-muted-foreground",
2976
+ "flex h-[25px] shrink-0 items-center gap-2 border-t border-border px-2 text-sm text-muted-foreground",
2859
2977
  className
2860
2978
  ),
2861
2979
  ...props,
@@ -2877,7 +2995,94 @@ var AppStatusBar = React23.forwardRef(
2877
2995
  )
2878
2996
  );
2879
2997
  AppStatusBar.displayName = "AppStatusBar";
2880
- var BarChartH = React23.forwardRef(
2998
+ var ArtifactTable = React25.forwardRef(({ files, onOpen, onDownload, renderActions, className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col", className), ...props, children: /* @__PURE__ */ jsxs(Table, { density: "compact", children: [
2999
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
3000
+ /* @__PURE__ */ jsx(TableHead, { children: "file" }),
3001
+ /* @__PURE__ */ jsx(TableHead, { className: "w-[7rem]", children: "kind" }),
3002
+ /* @__PURE__ */ jsx(TableHead, { className: "w-[5rem]", children: "size" }),
3003
+ /* @__PURE__ */ jsx(TableHead, { className: "w-[7rem]", children: "digest" }),
3004
+ /* @__PURE__ */ jsx(TableHead, { className: "w-[5.5rem]", children: "written" }),
3005
+ /* @__PURE__ */ jsx(TableHead, { className: "w-[9.5rem]", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "actions" }) })
3006
+ ] }) }),
3007
+ /* @__PURE__ */ jsx(TableBody, { children: files.map((file, index) => /* @__PURE__ */ jsxs(TableRow, { children: [
3008
+ /* @__PURE__ */ jsx(
3009
+ TableCell,
3010
+ {
3011
+ className: cn(
3012
+ "font-mono",
3013
+ file.gone && "text-muted-foreground line-through"
3014
+ ),
3015
+ children: file.name
3016
+ }
3017
+ ),
3018
+ /* @__PURE__ */ jsx(TableCell, { children: file.kind }),
3019
+ /* @__PURE__ */ jsx(TableCell, { className: "tabular-nums", children: file.size }),
3020
+ /* @__PURE__ */ jsx(TableCell, { className: "font-mono text-muted-foreground", children: file.digest }),
3021
+ /* @__PURE__ */ jsx(TableCell, { className: "font-mono tabular-nums", children: file.written }),
3022
+ /* @__PURE__ */ jsx(TableCell, { children: renderActions ? renderActions(file, index) : /* @__PURE__ */ jsxs("span", { className: "flex gap-1", children: [
3023
+ /* @__PURE__ */ jsx(
3024
+ Button,
3025
+ {
3026
+ type: "button",
3027
+ variant: "outline",
3028
+ size: "xs",
3029
+ disabled: file.gone || !onOpen,
3030
+ onClick: () => onOpen?.(file, index),
3031
+ children: "Open"
3032
+ }
3033
+ ),
3034
+ /* @__PURE__ */ jsx(
3035
+ Button,
3036
+ {
3037
+ type: "button",
3038
+ variant: "outline",
3039
+ size: "xs",
3040
+ disabled: file.gone || !onDownload,
3041
+ onClick: () => onDownload?.(file, index),
3042
+ children: "Download"
3043
+ }
3044
+ )
3045
+ ] }) })
3046
+ ] }, index)) })
3047
+ ] }) }));
3048
+ ArtifactTable.displayName = "ArtifactTable";
3049
+ var TONE2 = {
3050
+ muted: "text-muted-foreground",
3051
+ info: "text-info",
3052
+ success: "text-success",
3053
+ warning: "text-warning",
3054
+ destructive: "text-destructive"
3055
+ };
3056
+ var AttemptClock = React25.forwardRef(
3057
+ ({ rows, summary, className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col", className), ...props, children: [
3058
+ /* @__PURE__ */ jsxs(Table, { density: "compact", children: [
3059
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
3060
+ /* @__PURE__ */ jsx(TableHead, { className: "w-[7rem]", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "what" }) }),
3061
+ /* @__PURE__ */ jsx(TableHead, { className: "w-[6rem]", children: "started" }),
3062
+ /* @__PURE__ */ jsx(TableHead, { className: "w-[5.5rem]", children: "took" }),
3063
+ /* @__PURE__ */ jsx(TableHead, { children: "what happened" })
3064
+ ] }) }),
3065
+ /* @__PURE__ */ jsx(TableBody, { children: rows.map((row, index) => {
3066
+ const tone = row.tone ? TONE2[row.tone] : void 0;
3067
+ return /* @__PURE__ */ jsxs(TableRow, { children: [
3068
+ /* @__PURE__ */ jsx(TableCell, { className: cn(tone, row.struck && "line-through"), children: row.label }),
3069
+ /* @__PURE__ */ jsx(TableCell, { className: "font-mono tabular-nums text-muted-foreground", children: row.started }),
3070
+ /* @__PURE__ */ jsx(TableCell, { className: cn("font-mono tabular-nums", tone), children: row.took }),
3071
+ /* @__PURE__ */ jsx(
3072
+ TableCell,
3073
+ {
3074
+ className: cn(row.struck && ["line-through", tone]),
3075
+ children: row.what
3076
+ }
3077
+ )
3078
+ ] }, index);
3079
+ }) })
3080
+ ] }),
3081
+ summary != null ? /* @__PURE__ */ jsx("div", { className: "border-border border-t px-2.5 py-1.5 text-sm text-muted-foreground", children: summary }) : null
3082
+ ] })
3083
+ );
3084
+ AttemptClock.displayName = "AttemptClock";
3085
+ var BarChartH = React25.forwardRef(
2881
3086
  ({
2882
3087
  data,
2883
3088
  max,
@@ -2889,12 +3094,12 @@ var BarChartH = React23.forwardRef(
2889
3094
  }, ref) => {
2890
3095
  const ceiling = max ?? (Math.max(...data.map((d) => d.value), 0) || 1);
2891
3096
  return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col gap-1", className), ...props, children: [
2892
- caption != null ? /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: caption }) : null,
3097
+ caption != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: caption }) : null,
2893
3098
  data.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "flex h-4 items-center gap-2", children: [
2894
3099
  /* @__PURE__ */ jsx(
2895
3100
  "span",
2896
3101
  {
2897
- className: "shrink-0 truncate text-meta text-muted-foreground",
3102
+ className: "shrink-0 truncate text-sm text-muted-foreground",
2898
3103
  style: { width: labelWidth },
2899
3104
  children: d.label
2900
3105
  }
@@ -2911,14 +3116,14 @@ var BarChartH = React23.forwardRef(
2911
3116
  }
2912
3117
  }
2913
3118
  ),
2914
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-meta tabular-nums", children: d.display ?? d.value })
3119
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm tabular-nums", children: d.display ?? d.value })
2915
3120
  ] })
2916
3121
  ] }, i))
2917
3122
  ] });
2918
3123
  }
2919
3124
  );
2920
3125
  BarChartH.displayName = "BarChartH";
2921
- var BarChartV = React23.forwardRef(
3126
+ var BarChartV = React25.forwardRef(
2922
3127
  ({
2923
3128
  data,
2924
3129
  max,
@@ -2936,7 +3141,7 @@ var BarChartV = React23.forwardRef(
2936
3141
  const emphasis = highlightIndex ?? data.length - 1;
2937
3142
  const labelled = (i) => labelMode === "all" || labelMode === "last" && i === emphasis;
2938
3143
  return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col gap-1", className), ...props, children: [
2939
- caption != null ? /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: caption }) : null,
3144
+ caption != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: caption }) : null,
2940
3145
  /* @__PURE__ */ jsxs("div", { className: "relative mt-2", style: { height }, children: [
2941
3146
  gridlines.map((g) => /* @__PURE__ */ jsxs(
2942
3147
  "div",
@@ -2946,7 +3151,7 @@ var BarChartV = React23.forwardRef(
2946
3151
  style: { bottom: `${g / ceiling * 100}%` },
2947
3152
  children: [
2948
3153
  /* @__PURE__ */ jsx("span", { className: "h-px flex-1 bg-border" }),
2949
- /* @__PURE__ */ jsx("span", { className: "pl-1 text-meta tabular-nums text-muted-foreground", children: g })
3154
+ /* @__PURE__ */ jsx("span", { className: "pl-1 text-sm tabular-nums text-muted-foreground", children: g })
2950
3155
  ]
2951
3156
  },
2952
3157
  g
@@ -2956,7 +3161,7 @@ var BarChartV = React23.forwardRef(
2956
3161
  {
2957
3162
  className: "flex h-full min-w-0 flex-1 flex-col items-center justify-end gap-1",
2958
3163
  children: [
2959
- labelled(i) ? /* @__PURE__ */ jsx("span", { className: "text-meta tabular-nums", children: d.display ?? d.value }) : null,
3164
+ labelled(i) ? /* @__PURE__ */ jsx("span", { className: "text-sm tabular-nums", children: d.display ?? d.value }) : null,
2960
3165
  /* @__PURE__ */ jsx(
2961
3166
  "span",
2962
3167
  {
@@ -2975,38 +3180,34 @@ var BarChartV = React23.forwardRef(
2975
3180
  )) })
2976
3181
  ] }),
2977
3182
  /* @__PURE__ */ jsx("div", { className: "flex justify-between gap-2", children: data.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col items-center", children: [
2978
- /* @__PURE__ */ jsx("span", { className: "truncate text-meta text-muted-foreground", children: d.label }),
2979
- d.sublabel != null ? /* @__PURE__ */ jsx("span", { className: "truncate text-meta text-muted-foreground/70", children: d.sublabel }) : null
3183
+ /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-muted-foreground", children: d.label }),
3184
+ d.sublabel != null ? /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-muted-foreground/70", children: d.sublabel }) : null
2980
3185
  ] }, i)) })
2981
3186
  ] });
2982
3187
  }
2983
3188
  );
2984
3189
  BarChartV.displayName = "BarChartV";
2985
- var SWATCH = {
2986
- none: "bg-muted-foreground",
2987
- network: "bg-warning",
2988
- graph_read: "bg-success",
2989
- graph_write: "bg-data-2",
2990
- schema_write: "bg-data-4",
2991
- ingest: "bg-info",
2992
- llm: "bg-data-7",
2993
- plan_write: "bg-data-5",
2994
- work_write: "bg-destructive"
2995
- };
2996
- var BoundChip = React23.forwardRef(
2997
- ({ bound, swatchOnly, className, ...props }, ref) => /* @__PURE__ */ jsxs(
3190
+ var UNPAINTED = "bg-muted-foreground";
3191
+ var BoundChip = React25.forwardRef(
3192
+ ({ bound, swatchOnly, label, swatch, palette, className, ...props }, ref) => /* @__PURE__ */ jsxs(
2998
3193
  "span",
2999
3194
  {
3000
3195
  ref,
3001
3196
  className: cn(
3002
- "inline-flex max-w-full shrink-0 items-center gap-1.5 font-mono text-meta text-muted-foreground",
3197
+ "inline-flex max-w-full shrink-0 items-center gap-1.5 font-mono text-sm text-muted-foreground",
3003
3198
  className
3004
3199
  ),
3005
3200
  "aria-label": swatchOnly ? `bound: ${bound}` : void 0,
3006
3201
  ...props,
3007
3202
  children: [
3008
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("size-1.5 shrink-0", SWATCH[bound]) }),
3009
- swatchOnly ? null : /* @__PURE__ */ jsx("span", { className: "truncate", children: bound })
3203
+ /* @__PURE__ */ jsx(
3204
+ "span",
3205
+ {
3206
+ "aria-hidden": true,
3207
+ className: cn("size-1.5 shrink-0", swatch ?? palette?.[bound] ?? UNPAINTED)
3208
+ }
3209
+ ),
3210
+ swatchOnly ? null : /* @__PURE__ */ jsx("span", { className: "truncate", children: label ?? bound })
3010
3211
  ]
3011
3212
  }
3012
3213
  )
@@ -3018,7 +3219,7 @@ function ButtonWithTooltip(props) {
3018
3219
  /* @__PURE__ */ jsx(TooltipContent, { children: props.tooltip })
3019
3220
  ] }) });
3020
3221
  }
3021
- var CannotAnswerCard = React23.forwardRef(({ label = "cannot answer", remedy, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3222
+ var CannotAnswerCard = React25.forwardRef(({ label = "cannot answer", remedy, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3022
3223
  "div",
3023
3224
  {
3024
3225
  ref,
@@ -3028,9 +3229,9 @@ var CannotAnswerCard = React23.forwardRef(({ label = "cannot answer", remedy, cl
3028
3229
  ),
3029
3230
  ...props,
3030
3231
  children: [
3031
- /* @__PURE__ */ jsx("span", { className: "text-meta font-medium text-muted-foreground", children: label }),
3232
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
3032
3233
  /* @__PURE__ */ jsx("span", { children }),
3033
- remedy != null ? /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: remedy }) : null
3234
+ remedy != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: remedy }) : null
3034
3235
  ]
3035
3236
  }
3036
3237
  ));
@@ -3042,7 +3243,7 @@ var PURPOSE = {
3042
3243
  judge: "scores an output \u2014 often local",
3043
3244
  embed: "text in, vector out"
3044
3245
  };
3045
- var CastTable = React23.forwardRef(
3246
+ var CastTable = React25.forwardRef(
3046
3247
  ({ cast = {}, resolved, readOnly, className, ...props }, ref) => {
3047
3248
  const byRole = new Map((resolved ?? []).map((r) => [r.role, r]));
3048
3249
  return /* @__PURE__ */ jsxs("div", { ref, className: cn("min-w-0", className), ...props, children: [
@@ -3057,15 +3258,15 @@ var CastTable = React23.forwardRef(
3057
3258
  const address = hit ? hit.address : cast[role] ?? null;
3058
3259
  const denied = hit ? !hit.allowed : false;
3059
3260
  return /* @__PURE__ */ jsxs(TableRow, { "data-role": role, children: [
3060
- /* @__PURE__ */ jsx(TableCell, { className: "font-mono text-meta text-muted-foreground", children: role }),
3261
+ /* @__PURE__ */ jsx(TableCell, { className: "font-mono text-sm text-muted-foreground", children: role }),
3061
3262
  /* @__PURE__ */ jsx(TableCell, { className: "min-w-0", children: address ? /* @__PURE__ */ jsx(
3062
3263
  AddressChip,
3063
3264
  {
3064
3265
  address,
3065
3266
  tone: denied ? "denied" : "allowed"
3066
3267
  }
3067
- ) : /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground/70", children: "nothing casts it" }) }),
3068
- /* @__PURE__ */ jsx(TableCell, { className: "text-meta text-muted-foreground", children: denied ? /* @__PURE__ */ jsxs("span", { className: "text-destructive", children: [
3268
+ ) : /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground/70", children: "nothing casts it" }) }),
3269
+ /* @__PURE__ */ jsx(TableCell, { className: "text-sm text-muted-foreground", children: denied ? /* @__PURE__ */ jsxs("span", { className: "text-destructive", children: [
3069
3270
  "denied by ",
3070
3271
  hit?.ruleMatched ?? "this world"
3071
3272
  ] }) : hit?.source ? /* @__PURE__ */ jsx("span", { children: hit.source !== "shipped" ? `set on the ${hit.source}` : address ? "shipped default" : (
@@ -3077,7 +3278,7 @@ var CastTable = React23.forwardRef(
3077
3278
  ] }, role);
3078
3279
  }) })
3079
3280
  ] }),
3080
- readOnly ? null : /* @__PURE__ */ jsx("p", { className: "px-2 pt-1 text-meta text-muted-foreground/70", children: "A cast picks within the rules \u2014 it never widens them." })
3281
+ readOnly ? null : /* @__PURE__ */ jsx("p", { className: "px-2 pt-1 text-sm text-muted-foreground/70", children: "A cast picks within the rules \u2014 it never widens them." })
3081
3282
  ] });
3082
3283
  }
3083
3284
  );
@@ -3091,20 +3292,20 @@ function ChatSession({
3091
3292
  className,
3092
3293
  bodyClassName
3093
3294
  }) {
3094
- const rootRef = React23.useRef(null);
3095
- const contentRef = React23.useRef(null);
3096
- const pinnedRef = React23.useRef(true);
3097
- const getViewport = React23.useCallback(
3295
+ const rootRef = React25.useRef(null);
3296
+ const contentRef = React25.useRef(null);
3297
+ const pinnedRef = React25.useRef(true);
3298
+ const getViewport = React25.useCallback(
3098
3299
  () => rootRef.current?.querySelector(
3099
3300
  "[data-radix-scroll-area-viewport]"
3100
3301
  ) ?? null,
3101
3302
  []
3102
3303
  );
3103
- const scrollToBottom = React23.useCallback(() => {
3304
+ const scrollToBottom = React25.useCallback(() => {
3104
3305
  const viewport = getViewport();
3105
3306
  if (viewport) viewport.scrollTop = viewport.scrollHeight;
3106
3307
  }, [getViewport]);
3107
- React23.useEffect(() => {
3308
+ React25.useEffect(() => {
3108
3309
  const viewport = getViewport();
3109
3310
  if (!viewport) return;
3110
3311
  const handleScroll = () => {
@@ -3114,7 +3315,7 @@ function ChatSession({
3114
3315
  viewport.addEventListener("scroll", handleScroll, { passive: true });
3115
3316
  return () => viewport.removeEventListener("scroll", handleScroll);
3116
3317
  }, [getViewport, followThreshold]);
3117
- React23.useEffect(() => {
3318
+ React25.useEffect(() => {
3118
3319
  const content = contentRef.current;
3119
3320
  if (!content || typeof ResizeObserver === "undefined") return;
3120
3321
  const observer = new ResizeObserver(() => {
@@ -3123,11 +3324,11 @@ function ChatSession({
3123
3324
  observer.observe(content);
3124
3325
  return () => observer.disconnect();
3125
3326
  }, [scrollToBottom]);
3126
- React23.useEffect(() => {
3327
+ React25.useEffect(() => {
3127
3328
  pinnedRef.current = true;
3128
3329
  scrollToBottom();
3129
3330
  }, [autoScrollKey, scrollToBottom]);
3130
- const isEmpty = React23.Children.count(children) === 0;
3331
+ const isEmpty = React25.Children.count(children) === 0;
3131
3332
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col h-full min-h-0", className), children: [
3132
3333
  /* @__PURE__ */ jsx(
3133
3334
  ScrollArea,
@@ -3220,12 +3421,12 @@ function useOverflowItems({
3220
3421
  pinnedIndex,
3221
3422
  reserve = 32
3222
3423
  }) {
3223
- const containerEl = React23.useRef(null);
3224
- const itemEls = React23.useRef([]);
3225
- const widths = React23.useRef([]);
3226
- const itemRefs = React23.useRef([]);
3227
- const [hidden, setHidden] = React23.useState(NONE);
3228
- const fit = React23.useCallback(() => {
3424
+ const containerEl = React25.useRef(null);
3425
+ const itemEls = React25.useRef([]);
3426
+ const widths = React25.useRef([]);
3427
+ const itemRefs = React25.useRef([]);
3428
+ const [hidden, setHidden] = React25.useState(NONE);
3429
+ const fit = React25.useCallback(() => {
3229
3430
  const el = containerEl.current;
3230
3431
  if (!el || !enabled) {
3231
3432
  setHidden((prev) => prev === NONE ? prev : NONE);
@@ -3254,12 +3455,12 @@ function useOverflowItems({
3254
3455
  }
3255
3456
  setHidden((prev) => same(prev, next) ? prev : next);
3256
3457
  }, [count, enabled, pinnedIndex, reserve]);
3257
- React23.useLayoutEffect(() => {
3458
+ React25.useLayoutEffect(() => {
3258
3459
  widths.current = [];
3259
3460
  itemEls.current.length = count;
3260
3461
  setHidden((prev) => prev === NONE ? prev : NONE);
3261
3462
  }, [count]);
3262
- React23.useLayoutEffect(() => {
3463
+ React25.useLayoutEffect(() => {
3263
3464
  fit();
3264
3465
  if (!enabled || typeof ResizeObserver === "undefined") return;
3265
3466
  const observer = new ResizeObserver(() => fit());
@@ -3267,10 +3468,10 @@ function useOverflowItems({
3267
3468
  for (const item of itemEls.current) if (item) observer.observe(item);
3268
3469
  return () => observer.disconnect();
3269
3470
  }, [fit, enabled, hidden]);
3270
- const containerRef = React23.useCallback((el) => {
3471
+ const containerRef = React25.useCallback((el) => {
3271
3472
  containerEl.current = el;
3272
3473
  }, []);
3273
- const itemRef = React23.useCallback((index) => {
3474
+ const itemRef = React25.useCallback((index) => {
3274
3475
  let fn = itemRefs.current[index];
3275
3476
  if (!fn) {
3276
3477
  fn = (el) => {
@@ -3280,7 +3481,7 @@ function useOverflowItems({
3280
3481
  }
3281
3482
  return fn;
3282
3483
  }, []);
3283
- const isHidden = React23.useCallback(
3484
+ const isHidden = React25.useCallback(
3284
3485
  (index) => hidden.includes(index),
3285
3486
  [hidden]
3286
3487
  );
@@ -3333,15 +3534,15 @@ var NavItems = ({
3333
3534
  const isVertical = orientation === "vertical";
3334
3535
  const isTabs = selectionMode === "tabs";
3335
3536
  const V = VARIANT[variant];
3336
- const [internalActive, setInternalActive] = React23__default.useState(
3537
+ const [internalActive, setInternalActive] = React25__default.useState(
3337
3538
  null
3338
3539
  );
3339
3540
  const isControlled = activeKey !== void 0;
3340
3541
  const currentKey = isControlled ? activeKey : internalActive;
3341
3542
  const activeIndex = items.findIndex((item) => keyOf(item) === currentKey);
3342
- const nodes = React23__default.useRef({});
3343
- const pendingFocus = React23__default.useRef(null);
3344
- React23__default.useEffect(() => {
3543
+ const nodes = React25__default.useRef({});
3544
+ const pendingFocus = React25__default.useRef(null);
3545
+ React25__default.useEffect(() => {
3345
3546
  const key = pendingFocus.current;
3346
3547
  if (!key) return;
3347
3548
  const node = nodes.current[key];
@@ -3354,7 +3555,7 @@ var NavItems = ({
3354
3555
  enabled: overflow && !isVertical,
3355
3556
  pinnedIndex: activeIndex >= 0 ? activeIndex : void 0
3356
3557
  });
3357
- const select = React23__default.useCallback(
3558
+ const select = React25__default.useCallback(
3358
3559
  (item) => {
3359
3560
  if (item.disabled) return;
3360
3561
  const key = keyOf(item);
@@ -3424,6 +3625,7 @@ var NavItems = ({
3424
3625
  }
3425
3626
  );
3426
3627
  const label = item.label && /* @__PURE__ */ jsx("span", { className: item.labelClassName, children: item.label });
3628
+ const a11y = label ? {} : { "aria-label": item.name };
3427
3629
  const badge = item.badge != null && /* @__PURE__ */ jsx(
3428
3630
  "span",
3429
3631
  {
@@ -3463,6 +3665,7 @@ var NavItems = ({
3463
3665
  {
3464
3666
  ref: setNode,
3465
3667
  ...tabProps,
3668
+ ...a11y,
3466
3669
  style: item.style,
3467
3670
  onClick: () => select(item),
3468
3671
  className: itemClass,
@@ -3473,6 +3676,7 @@ var NavItems = ({
3473
3676
  {
3474
3677
  ref: setNode,
3475
3678
  href: item.href,
3679
+ ...a11y,
3476
3680
  style: item.style,
3477
3681
  onClick: () => select(item),
3478
3682
  className: itemClass,
@@ -3485,6 +3689,7 @@ var NavItems = ({
3485
3689
  type: "button",
3486
3690
  disabled: item.disabled,
3487
3691
  ...tabProps,
3692
+ ...a11y,
3488
3693
  style: item.style,
3489
3694
  onClick: () => {
3490
3695
  if (hasMenu) item.onClick?.();
@@ -3498,7 +3703,7 @@ var NavItems = ({
3498
3703
  /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: hasMenu && !asCaret ? /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: control }) : control }),
3499
3704
  /* @__PURE__ */ jsx(TooltipContent, { side: item.tooltipSide || tooltipSide, children: item.tooltip || item.name })
3500
3705
  ] });
3501
- return /* @__PURE__ */ jsxs(React23__default.Fragment, { children: [
3706
+ return /* @__PURE__ */ jsxs(React25__default.Fragment, { children: [
3502
3707
  hasMenu ? /* @__PURE__ */ jsxs(DropdownMenu, { children: [
3503
3708
  withTooltip,
3504
3709
  /* @__PURE__ */ jsx(
@@ -3588,7 +3793,7 @@ function renderMenuRows(menuItems) {
3588
3793
  const gutter = menuItems?.some((m) => m.icon);
3589
3794
  return menuItems?.map((menuItem) => {
3590
3795
  const MenuIcon = menuItem.icon;
3591
- return /* @__PURE__ */ jsxs(React23__default.Fragment, { children: [
3796
+ return /* @__PURE__ */ jsxs(React25__default.Fragment, { children: [
3592
3797
  menuItem.separatorBefore && /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
3593
3798
  /* @__PURE__ */ jsxs(
3594
3799
  DropdownMenuItem,
@@ -3907,7 +4112,7 @@ function ChatSessionDisclosure({
3907
4112
  className,
3908
4113
  contentClassName
3909
4114
  }) {
3910
- const [uncontrolledOpen, setUncontrolledOpen] = React23.useState(defaultOpen);
4115
+ const [uncontrolledOpen, setUncontrolledOpen] = React25.useState(defaultOpen);
3911
4116
  const isOpen = open ?? uncontrolledOpen;
3912
4117
  const toggle = () => {
3913
4118
  const next = !isOpen;
@@ -4038,7 +4243,7 @@ function ChatSessionContextChip({
4038
4243
  "div",
4039
4244
  {
4040
4245
  className: cn(
4041
- "flex min-h-[26px] items-center gap-1.5 border border-border bg-muted/40 px-1.5 text-meta",
4246
+ "flex min-h-[26px] items-center gap-1.5 border border-border bg-muted/40 px-1.5 text-sm",
4042
4247
  className
4043
4248
  ),
4044
4249
  ...props,
@@ -4059,9 +4264,9 @@ function ChatSessionContextChip({
4059
4264
  }
4060
4265
  );
4061
4266
  }
4062
- var CitationList = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx("ul", { ref, className: cn("flex flex-col", className), ...props, children }));
4267
+ var CitationList = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx("ul", { ref, className: cn("flex flex-col", className), ...props, children }));
4063
4268
  CitationList.displayName = "CitationList";
4064
- var CitationRow = React23.forwardRef(
4269
+ var CitationRow = React25.forwardRef(
4065
4270
  ({ kind, source, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4066
4271
  "li",
4067
4272
  {
@@ -4069,15 +4274,15 @@ var CitationRow = React23.forwardRef(
4069
4274
  className: cn("flex min-h-[26px] items-center gap-2 py-0.5", className),
4070
4275
  ...props,
4071
4276
  children: [
4072
- /* @__PURE__ */ jsx("span", { className: "shrink-0 border border-border px-1 text-meta text-muted-foreground", children: kind }),
4277
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 border border-border px-1 text-sm text-muted-foreground", children: kind }),
4073
4278
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children }),
4074
- source != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-meta text-muted-foreground", children: source }) : null
4279
+ source != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm text-muted-foreground", children: source }) : null
4075
4280
  ]
4076
4281
  }
4077
4282
  )
4078
4283
  );
4079
4284
  CitationRow.displayName = "CitationRow";
4080
- var ClampedText = React23.forwardRef(
4285
+ var ClampedText = React25.forwardRef(
4081
4286
  ({
4082
4287
  lines = 3,
4083
4288
  moreLabel = "Show more",
@@ -4086,10 +4291,10 @@ var ClampedText = React23.forwardRef(
4086
4291
  children,
4087
4292
  ...props
4088
4293
  }, ref) => {
4089
- const [expanded, setExpanded] = React23.useState(false);
4090
- const [clipped, setClipped] = React23.useState(false);
4091
- const bodyRef = React23.useRef(null);
4092
- React23.useLayoutEffect(() => {
4294
+ const [expanded, setExpanded] = React25.useState(false);
4295
+ const [clipped, setClipped] = React25.useState(false);
4296
+ const bodyRef = React25.useRef(null);
4297
+ React25.useLayoutEffect(() => {
4093
4298
  const el = bodyRef.current;
4094
4299
  if (!el || expanded) return;
4095
4300
  const measure = () => setClipped(el.scrollHeight - el.clientHeight > 1);
@@ -4127,7 +4332,7 @@ var ClampedText = React23.forwardRef(
4127
4332
  }
4128
4333
  );
4129
4334
  ClampedText.displayName = "ClampedText";
4130
- var ClarifyCard = React23.forwardRef(
4335
+ var ClarifyCard = React25.forwardRef(
4131
4336
  ({
4132
4337
  step,
4133
4338
  waiting,
@@ -4140,7 +4345,7 @@ var ClarifyCard = React23.forwardRef(
4140
4345
  className,
4141
4346
  ...props
4142
4347
  }, ref) => {
4143
- const name = React23.useId();
4348
+ const name = React25.useId();
4144
4349
  return /* @__PURE__ */ jsxs(
4145
4350
  "div",
4146
4351
  {
@@ -4148,7 +4353,7 @@ var ClarifyCard = React23.forwardRef(
4148
4353
  className: cn("flex flex-col overflow-hidden border border-border bg-card", className),
4149
4354
  ...props,
4150
4355
  children: [
4151
- /* @__PURE__ */ jsxs("div", { className: "flex h-6 shrink-0 items-center gap-2 border-b border-border bg-muted/40 px-2 text-meta", children: [
4356
+ /* @__PURE__ */ jsxs("div", { className: "flex h-6 shrink-0 items-center gap-2 border-b border-border bg-muted/40 px-2 text-sm", children: [
4152
4357
  /* @__PURE__ */ jsx("span", { className: "shrink-0 font-medium", children: "question" }),
4153
4358
  step != null ? /* @__PURE__ */ jsx("span", { className: "truncate text-muted-foreground", children: step }) : null,
4154
4359
  /* @__PURE__ */ jsx("span", { className: "flex-1" }),
@@ -4191,7 +4396,7 @@ var ClarifyCard = React23.forwardRef(
4191
4396
  }
4192
4397
  ),
4193
4398
  /* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: o.label }),
4194
- o.detail != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono text-meta text-muted-foreground", children: o.detail }) : null
4399
+ o.detail != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono text-sm text-muted-foreground", children: o.detail }) : null
4195
4400
  ]
4196
4401
  },
4197
4402
  o.value
@@ -4199,7 +4404,7 @@ var ClarifyCard = React23.forwardRef(
4199
4404
  }) }),
4200
4405
  actions || footnote != null ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
4201
4406
  actions,
4202
- footnote != null ? /* @__PURE__ */ jsx("span", { className: "flex-1 text-meta text-muted-foreground", children: footnote }) : null
4407
+ footnote != null ? /* @__PURE__ */ jsx("span", { className: "flex-1 text-sm text-muted-foreground", children: footnote }) : null
4203
4408
  ] }) : null
4204
4409
  ] })
4205
4410
  ]
@@ -4208,13 +4413,13 @@ var ClarifyCard = React23.forwardRef(
4208
4413
  }
4209
4414
  );
4210
4415
  ClarifyCard.displayName = "ClarifyCard";
4211
- var ContextBar = React23.forwardRef(
4416
+ var ContextBar = React25.forwardRef(
4212
4417
  ({ counters, hint, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4213
4418
  "div",
4214
4419
  {
4215
4420
  ref,
4216
4421
  className: cn(
4217
- "flex h-7 shrink-0 items-center gap-3 border-t border-border px-2 text-meta",
4422
+ "flex h-7 shrink-0 items-center gap-3 border-t border-border px-2 text-sm",
4218
4423
  className
4219
4424
  ),
4220
4425
  ...props,
@@ -4227,22 +4432,22 @@ var ContextBar = React23.forwardRef(
4227
4432
  )
4228
4433
  );
4229
4434
  ContextBar.displayName = "ContextBar";
4230
- var DiagnosisCard = React23.forwardRef(({ code, attempted, target, actions, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4435
+ var DiagnosisCard = React25.forwardRef(({ code, attempted, target, actions, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4231
4436
  "div",
4232
4437
  {
4233
4438
  ref,
4234
4439
  className: cn("flex flex-col gap-2 border border-destructive/40 bg-card p-2", className),
4235
4440
  ...props,
4236
4441
  children: [
4237
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-meta", children: [
4442
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
4238
4443
  /* @__PURE__ */ jsx("span", { className: "shrink-0 font-medium text-destructive", children: "diagnosis" }),
4239
4444
  /* @__PURE__ */ jsx("span", { className: "truncate font-mono text-muted-foreground", children: code })
4240
4445
  ] }),
4241
4446
  children != null ? /* @__PURE__ */ jsx("div", { children }) : null,
4242
4447
  attempted != null || target != null ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 border border-border bg-muted/40 p-1.5", children: [
4243
- /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: "what was tried" }),
4244
- attempted != null ? /* @__PURE__ */ jsx("code", { className: "whitespace-pre-wrap break-all font-mono text-meta", children: attempted }) : null,
4245
- target != null ? /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: target }) : null
4448
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "what was tried" }),
4449
+ attempted != null ? /* @__PURE__ */ jsx("code", { className: "whitespace-pre-wrap break-all font-mono text-sm", children: attempted }) : null,
4450
+ target != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: target }) : null
4246
4451
  ] }) : null,
4247
4452
  actions ? /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", children: actions }) : null
4248
4453
  ]
@@ -4255,19 +4460,19 @@ var OP_CLASS = {
4255
4460
  remove: "text-destructive",
4256
4461
  change: "text-warning"
4257
4462
  };
4258
- var DiffList = React23.forwardRef(
4463
+ var DiffList = React25.forwardRef(
4259
4464
  ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx("ul", { ref, className: cn("flex flex-col", className), ...props, children })
4260
4465
  );
4261
4466
  DiffList.displayName = "DiffList";
4262
- var DiffRow = React23.forwardRef(
4467
+ var DiffRow = React25.forwardRef(
4263
4468
  ({ op = "add", kind, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4264
4469
  "li",
4265
4470
  {
4266
4471
  ref,
4267
- className: cn("flex items-baseline gap-2 py-0.5 text-meta", className),
4472
+ className: cn("flex items-baseline gap-2 py-0.5 text-sm", className),
4268
4473
  ...props,
4269
4474
  children: [
4270
- /* @__PURE__ */ jsx("span", { className: cn("w-3 shrink-0 text-center font-mono", OP_CLASS[op]), children: OP_SIGN[op] }),
4475
+ /* @__PURE__ */ jsx("span", { className: cn("w-3 shrink-0 text-center font-mono", OP_CLASS[op] ?? "text-muted-foreground"), children: OP_SIGN[op] }),
4271
4476
  kind != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-muted-foreground", children: kind }) : null,
4272
4477
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children })
4273
4478
  ]
@@ -4275,7 +4480,7 @@ var DiffRow = React23.forwardRef(
4275
4480
  )
4276
4481
  );
4277
4482
  DiffRow.displayName = "DiffRow";
4278
- var DivergingBar = React23.forwardRef(
4483
+ var DivergingBar = React25.forwardRef(
4279
4484
  ({
4280
4485
  data,
4281
4486
  max,
@@ -4288,7 +4493,7 @@ var DivergingBar = React23.forwardRef(
4288
4493
  }, ref) => {
4289
4494
  const ceiling = max ?? (Math.max(...data.map((d) => Math.abs(d.value)), 0) || 1);
4290
4495
  return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col gap-1", className), ...props, children: [
4291
- caption != null ? /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: caption }) : null,
4496
+ caption != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: caption }) : null,
4292
4497
  data.map((d, i) => {
4293
4498
  const positive = d.value >= 0;
4294
4499
  const width = `${Math.abs(d.value) / ceiling * 50}%`;
@@ -4296,7 +4501,7 @@ var DivergingBar = React23.forwardRef(
4296
4501
  /* @__PURE__ */ jsx(
4297
4502
  "span",
4298
4503
  {
4299
- className: "shrink-0 truncate text-meta text-muted-foreground",
4504
+ className: "shrink-0 truncate text-sm text-muted-foreground",
4300
4505
  style: { width: labelWidth },
4301
4506
  children: d.label
4302
4507
  }
@@ -4326,14 +4531,14 @@ var DivergingBar = React23.forwardRef(
4326
4531
  }
4327
4532
  ) : null })
4328
4533
  ] }),
4329
- /* @__PURE__ */ jsx("span", { className: "w-8 shrink-0 text-right text-meta tabular-nums", children: d.display ?? (d.value > 0 ? `+${d.value}` : d.value) })
4534
+ /* @__PURE__ */ jsx("span", { className: "w-8 shrink-0 text-right text-sm tabular-nums", children: d.display ?? (d.value > 0 ? `+${d.value}` : d.value) })
4330
4535
  ] }, i);
4331
4536
  })
4332
4537
  ] });
4333
4538
  }
4334
4539
  );
4335
4540
  DivergingBar.displayName = "DivergingBar";
4336
- var EgressList = React23.forwardRef(
4541
+ var EgressList = React25.forwardRef(
4337
4542
  ({ to, classes = [], cut = [], className, ...props }, ref) => /* @__PURE__ */ jsxs(
4338
4543
  "div",
4339
4544
  {
@@ -4343,7 +4548,7 @@ var EgressList = React23.forwardRef(
4343
4548
  children: [
4344
4549
  /* @__PURE__ */ jsx(AddressChip, { address: to }),
4345
4550
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-0.5 pl-3", children: [
4346
- classes.length === 0 ? /* @__PURE__ */ jsx("span", { className: "text-meta text-destructive", children: "nothing may be sent" }) : /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-wrap items-center gap-1 text-meta text-muted-foreground", children: [
4551
+ classes.length === 0 ? /* @__PURE__ */ jsx("span", { className: "text-sm text-destructive", children: "nothing may be sent" }) : /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-wrap items-center gap-1 text-sm text-muted-foreground", children: [
4347
4552
  /* @__PURE__ */ jsx("span", { className: "shrink-0", children: "may send" }),
4348
4553
  classes.map((c) => /* @__PURE__ */ jsx(
4349
4554
  "span",
@@ -4354,7 +4559,7 @@ var EgressList = React23.forwardRef(
4354
4559
  c
4355
4560
  ))
4356
4561
  ] }),
4357
- cut.length ? /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-wrap items-center gap-1 text-meta text-muted-foreground", children: [
4562
+ cut.length ? /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-wrap items-center gap-1 text-sm text-muted-foreground", children: [
4358
4563
  /* @__PURE__ */ jsx("span", { className: "shrink-0", children: "cut" }),
4359
4564
  cut.map((c) => /* @__PURE__ */ jsx(
4360
4565
  "span",
@@ -4371,12 +4576,12 @@ var EgressList = React23.forwardRef(
4371
4576
  )
4372
4577
  );
4373
4578
  EgressList.displayName = "EgressList";
4374
- var EmissionHeader = React23.forwardRef(({ kind, template, citation, note, actions, className, ...props }, ref) => /* @__PURE__ */ jsxs(
4579
+ var EmissionHeader = React25.forwardRef(({ kind, template, citation, note, actions, className, ...props }, ref) => /* @__PURE__ */ jsxs(
4375
4580
  "div",
4376
4581
  {
4377
4582
  ref,
4378
4583
  className: cn(
4379
- "flex h-6 shrink-0 items-center gap-2 border-b border-border bg-muted/40 px-2 text-meta",
4584
+ "flex h-6 shrink-0 items-center gap-2 border-b border-border bg-muted/40 px-2 text-sm",
4380
4585
  className
4381
4586
  ),
4382
4587
  ...props,
@@ -4391,7 +4596,7 @@ var EmissionHeader = React23.forwardRef(({ kind, template, citation, note, actio
4391
4596
  }
4392
4597
  ));
4393
4598
  EmissionHeader.displayName = "EmissionHeader";
4394
- var EmissionCard = React23.forwardRef(
4599
+ var EmissionCard = React25.forwardRef(
4395
4600
  ({
4396
4601
  kind,
4397
4602
  template,
@@ -4426,7 +4631,7 @@ var EmissionCard = React23.forwardRef(
4426
4631
  )
4427
4632
  );
4428
4633
  EmissionCard.displayName = "EmissionCard";
4429
- var CitationMarker = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
4634
+ var CitationMarker = React25.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
4430
4635
  "sup",
4431
4636
  {
4432
4637
  ref,
@@ -4436,7 +4641,7 @@ var CitationMarker = React23.forwardRef(({ className, children, ...props }, ref)
4436
4641
  }
4437
4642
  ));
4438
4643
  CitationMarker.displayName = "CitationMarker";
4439
- var EmptyState = React23.forwardRef(
4644
+ var EmptyState = React25.forwardRef(
4440
4645
  ({ icon, title, description, actions, locks, className, ...props }, ref) => /* @__PURE__ */ jsxs(
4441
4646
  "div",
4442
4647
  {
@@ -4457,12 +4662,12 @@ var EmptyState = React23.forwardRef(
4457
4662
  )
4458
4663
  );
4459
4664
  EmptyState.displayName = "EmptyState";
4460
- var EmptyStateLock = React23.forwardRef(({ icon, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4665
+ var EmptyStateLock = React25.forwardRef(({ icon, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4461
4666
  "span",
4462
4667
  {
4463
4668
  ref,
4464
4669
  className: cn(
4465
- "inline-flex h-6 items-center gap-1.5 border border-dashed border-border px-2 text-meta text-muted-foreground [&_svg]:size-3",
4670
+ "inline-flex h-6 items-center gap-1.5 border border-dashed border-border px-2 text-sm text-muted-foreground [&_svg]:size-3",
4466
4671
  className
4467
4672
  ),
4468
4673
  ...props,
@@ -4494,13 +4699,80 @@ var ErrorBoundary = class extends Component {
4494
4699
  return this.props.children;
4495
4700
  }
4496
4701
  };
4497
- var Eyebrow = React23.forwardRef(
4702
+ function Bubble({
4703
+ who,
4704
+ rail,
4705
+ children,
4706
+ note
4707
+ }) {
4708
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-1 border-l-2 px-2.5 py-2", rail), children: [
4709
+ who != null ? /* @__PURE__ */ jsx("span", { className: "font-mono text-xs font-semibold", children: who }) : null,
4710
+ /* @__PURE__ */ jsx("span", { className: "leading-relaxed", children }),
4711
+ note != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: note }) : null
4712
+ ] });
4713
+ }
4714
+ var ExchangeRecord = React25.forwardRef(
4715
+ ({
4716
+ asker,
4717
+ question,
4718
+ why,
4719
+ options,
4720
+ answerer,
4721
+ answer,
4722
+ answerNote,
4723
+ className,
4724
+ ...props
4725
+ }, ref) => /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col", className), ...props, children: [
4726
+ /* @__PURE__ */ jsx(Bubble, { who: asker, rail: "border-l-warning bg-warning/5", note: why, children: question }),
4727
+ options?.length ? /* @__PURE__ */ jsx("ul", { className: "flex flex-col", children: options.map((option, index) => /* @__PURE__ */ jsxs(
4728
+ "li",
4729
+ {
4730
+ className: "flex items-center gap-2 border-border/55 border-t px-2.5 py-1",
4731
+ children: [
4732
+ /* @__PURE__ */ jsx(
4733
+ "span",
4734
+ {
4735
+ "aria-hidden": true,
4736
+ className: cn(
4737
+ "size-2.5 shrink-0 rounded-full border-[1.5px]",
4738
+ option.chosen ? "border-primary bg-primary" : "border-border bg-transparent"
4739
+ )
4740
+ }
4741
+ ),
4742
+ /* @__PURE__ */ jsx(
4743
+ "span",
4744
+ {
4745
+ className: cn(
4746
+ "min-w-0 flex-1 truncate font-mono text-sm",
4747
+ option.chosen ? "text-foreground" : "text-muted-foreground"
4748
+ ),
4749
+ children: option.label
4750
+ }
4751
+ ),
4752
+ option.chosen ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs text-primary", children: "chosen" }) : null
4753
+ ]
4754
+ },
4755
+ index
4756
+ )) }) : null,
4757
+ answer != null ? /* @__PURE__ */ jsx(
4758
+ Bubble,
4759
+ {
4760
+ who: answerer,
4761
+ rail: "border-l-primary bg-primary/5 border-t border-t-border/55",
4762
+ note: answerNote,
4763
+ children: answer
4764
+ }
4765
+ ) : null
4766
+ ] })
4767
+ );
4768
+ ExchangeRecord.displayName = "ExchangeRecord";
4769
+ var Eyebrow = React25.forwardRef(
4498
4770
  ({ aside, tone = "muted", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4499
4771
  "div",
4500
4772
  {
4501
4773
  ref,
4502
4774
  className: cn(
4503
- "flex items-baseline gap-2 text-meta font-semibold uppercase tracking-wide",
4775
+ "flex items-baseline gap-2 text-sm font-semibold uppercase tracking-wide",
4504
4776
  tone === "muted" && "text-muted-foreground",
4505
4777
  tone === "foreground" && "text-foreground",
4506
4778
  tone === "accent" && "text-primary",
@@ -4515,7 +4787,7 @@ var Eyebrow = React23.forwardRef(
4515
4787
  )
4516
4788
  );
4517
4789
  Eyebrow.displayName = "Eyebrow";
4518
- var FilterBar = React23.forwardRef(
4790
+ var FilterBar = React25.forwardRef(
4519
4791
  ({ summary, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
4520
4792
  "div",
4521
4793
  {
@@ -4528,39 +4800,61 @@ var FilterBar = React23.forwardRef(
4528
4800
  children: [
4529
4801
  children,
4530
4802
  /* @__PURE__ */ jsx("span", { className: "flex-1" }),
4531
- summary != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-meta text-muted-foreground", children: summary }) : null
4803
+ summary != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm text-muted-foreground", children: summary }) : null
4532
4804
  ]
4533
4805
  }
4534
4806
  )
4535
4807
  );
4536
4808
  FilterBar.displayName = "FilterBar";
4537
- var FilterChip = React23.forwardRef(
4538
- ({ label, value, active, className, ...props }, ref) => /* @__PURE__ */ jsxs(
4539
- Button,
4540
- {
4541
- ref,
4542
- type: "button",
4543
- variant: "outline",
4544
- size: "xs",
4545
- "data-active": active || void 0,
4546
- className: cn(
4547
- "h-[22px] gap-1 px-1.5 font-normal",
4548
- active && "border-primary/40 text-primary",
4549
- className
4550
- ),
4551
- ...props,
4552
- children: [
4553
- /* @__PURE__ */ jsx("span", { className: cn(value != null && "text-muted-foreground"), children: label }),
4554
- value != null ? /* @__PURE__ */ jsx("span", { className: "truncate", children: value }) : null,
4555
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "text-muted-foreground", children: "\u25BE" })
4556
- ]
4557
- }
4558
- )
4809
+ var FilterChip = React25.forwardRef(
4810
+ ({ label, value, active, onRemove, removeLabel, className, ...props }, ref) => {
4811
+ const chip = /* @__PURE__ */ jsxs(
4812
+ Button,
4813
+ {
4814
+ ref,
4815
+ type: "button",
4816
+ variant: "outline",
4817
+ size: "xs",
4818
+ "data-active": active || void 0,
4819
+ className: cn(
4820
+ "h-[22px] gap-1 px-1.5 font-normal",
4821
+ active && "border-primary/40 text-primary",
4822
+ onRemove && "rounded-r-none border-r-0",
4823
+ className
4824
+ ),
4825
+ ...props,
4826
+ children: [
4827
+ /* @__PURE__ */ jsx("span", { className: cn(value != null && "text-muted-foreground"), children: label }),
4828
+ value != null ? /* @__PURE__ */ jsx("span", { className: "truncate", children: value }) : null,
4829
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "text-muted-foreground", children: "\u25BE" })
4830
+ ]
4831
+ }
4832
+ );
4833
+ if (!onRemove) return chip;
4834
+ return /* @__PURE__ */ jsxs("span", { className: "inline-flex min-w-0 items-center", children: [
4835
+ chip,
4836
+ /* @__PURE__ */ jsx(
4837
+ Button,
4838
+ {
4839
+ type: "button",
4840
+ variant: "outline",
4841
+ size: "xs",
4842
+ onClick: onRemove,
4843
+ "aria-label": removeLabel ?? `Clear ${typeof label === "string" ? label : "filter"}`,
4844
+ className: cn(
4845
+ "h-[22px] rounded-l-none px-1 font-normal text-muted-foreground hover:text-foreground",
4846
+ active && "border-primary/40"
4847
+ ),
4848
+ children: /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: "\xD7" })
4849
+ }
4850
+ )
4851
+ ] });
4852
+ }
4559
4853
  );
4560
4854
  FilterChip.displayName = "FilterChip";
4561
- var HeatStrip = React23.forwardRef(
4855
+ var HeatStrip = React25.forwardRef(
4562
4856
  ({ cells, states, ticks, cellSize = 14, className, ...props }, ref) => {
4563
- const byKey = React23.useMemo(
4857
+ const byKey = React25.useMemo(
4564
4858
  () => new Map(states.map((s) => [s.key, s])),
4565
4859
  [states]
4566
4860
  );
@@ -4587,14 +4881,14 @@ var HeatStrip = React23.forwardRef(
4587
4881
  return /* @__PURE__ */ jsx(
4588
4882
  "span",
4589
4883
  {
4590
- className: "shrink-0 text-meta tabular-nums text-muted-foreground",
4884
+ className: "shrink-0 text-sm tabular-nums text-muted-foreground",
4591
4885
  style: { width: cellSize },
4592
4886
  children: tick ? tick.label : ""
4593
4887
  },
4594
4888
  i
4595
4889
  );
4596
4890
  }) }) : null,
4597
- /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 text-meta", children: states.map((s) => /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
4891
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 text-sm", children: states.map((s) => /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
4598
4892
  /* @__PURE__ */ jsx(
4599
4893
  "span",
4600
4894
  {
@@ -4612,54 +4906,75 @@ var HeatStrip = React23.forwardRef(
4612
4906
  }
4613
4907
  );
4614
4908
  HeatStrip.displayName = "HeatStrip";
4615
- var LABEL = {
4616
- graph_data: "graph data",
4617
- llm: "llm",
4618
- third_party: "third party",
4619
- cache: "cache",
4620
- human: "human",
4621
- agent: "agent"
4622
- };
4623
- var SWATCH2 = {
4624
- graph_data: "bg-data-1",
4625
- llm: "bg-data-7",
4626
- third_party: "bg-data-8",
4627
- cache: "bg-data-3",
4628
- human: "bg-data-6",
4629
- agent: "bg-muted-foreground"
4630
- };
4631
- var LayerChip = React23.forwardRef(
4632
- ({ layer, count, dim, className, ...props }, ref) => /* @__PURE__ */ jsxs(
4909
+ var KindChip = React25.forwardRef(
4910
+ ({ kind, dim, className, ...props }, ref) => /* @__PURE__ */ jsx(
4633
4911
  "span",
4634
4912
  {
4635
4913
  ref,
4636
4914
  className: cn(
4637
- "inline-flex max-w-full shrink-0 items-center gap-1.5 font-mono text-meta",
4638
- dim ? "text-muted-foreground/70" : "text-muted-foreground",
4915
+ "inline-flex h-[17px] shrink-0 items-center rounded-control px-1.5",
4916
+ "bg-muted font-mono text-xs tracking-wide text-muted-foreground",
4917
+ dim && "opacity-60",
4639
4918
  className
4640
4919
  ),
4641
4920
  ...props,
4642
- children: [
4643
- /* @__PURE__ */ jsx(
4644
- "span",
4645
- {
4646
- "aria-hidden": true,
4647
- className: cn(
4648
- "size-1.5 shrink-0",
4649
- dim ? "bg-muted-foreground/50" : SWATCH2[layer]
4650
- )
4651
- }
4652
- ),
4653
- /* @__PURE__ */ jsx("span", { className: "truncate", children: LABEL[layer] }),
4654
- count != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 tabular-nums opacity-70", children: count }) : null
4655
- ]
4921
+ children: kind
4656
4922
  }
4657
4923
  )
4658
4924
  );
4925
+ KindChip.displayName = "KindChip";
4926
+ var layerLabel = (layer) => layer.replace(/_/g, " ");
4927
+ var UNPAINTED2 = {
4928
+ swatch: "bg-muted-foreground",
4929
+ // Edge only, no ground: a bar's identity is its rail and its address, and a
4930
+ // wash under every bar turns a track into a stack of coloured blocks. A
4931
+ // consumer that wants the ground says so in its own `tint`.
4932
+ tint: "border-border",
4933
+ // Unpainted type is ordinary type. A muted address would say *subordinate*,
4934
+ // which is not what "nobody gave this layer a colour" means.
4935
+ text: "text-foreground"
4936
+ };
4937
+ var layerPaint = (palette, layer) => ({ ...UNPAINTED2, ...palette?.[layer] });
4938
+ var LayerChip = React25.forwardRef(
4939
+ ({ layer, count, label, dim, swatch, palette, className, ...props }, ref) => {
4940
+ const paint = layerPaint(palette, layer);
4941
+ return /* @__PURE__ */ jsxs(
4942
+ "span",
4943
+ {
4944
+ ref,
4945
+ className: cn(
4946
+ // A layer is a **name**, not an address. `graph data` has a space in
4947
+ // it — it is already prose — so it takes the body face at the root
4948
+ // size, and mono is reserved for the thing that really is an address
4949
+ // (`model/Orders@v2` on the row below it). Small muted bold mono made
4950
+ // a row heading look like a technical footnote.
4951
+ "inline-flex max-w-full shrink-0 items-center gap-1.5",
4952
+ dim ? "text-muted-foreground/70" : "text-foreground",
4953
+ className
4954
+ ),
4955
+ ...props,
4956
+ children: [
4957
+ /* @__PURE__ */ jsx(
4958
+ "span",
4959
+ {
4960
+ "aria-hidden": true,
4961
+ className: cn(
4962
+ "size-1.5 shrink-0",
4963
+ dim ? "bg-muted-foreground/50" : swatch ?? paint.swatch
4964
+ )
4965
+ }
4966
+ ),
4967
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: label ?? layerLabel(layer) }),
4968
+ count != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm tabular-nums text-muted-foreground", children: count }) : null
4969
+ ]
4970
+ }
4971
+ );
4972
+ }
4973
+ );
4659
4974
  LayerChip.displayName = "LayerChip";
4660
- var LayerSection = React23.forwardRef(
4661
- ({ layer, summary, count, dim, className, children, ...props }, ref) => {
4662
- const empty = React23.Children.count(children) === 0;
4975
+ var LayerSection = React25.forwardRef(
4976
+ ({ layer, summary, count, dim, palette, className, children, ...props }, ref) => {
4977
+ const empty = React25.Children.count(children) === 0;
4663
4978
  return /* @__PURE__ */ jsxs(
4664
4979
  "section",
4665
4980
  {
@@ -4668,140 +4983,599 @@ var LayerSection = React23.forwardRef(
4668
4983
  ...props,
4669
4984
  children: [
4670
4985
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-baseline gap-2 border-b border-border pb-1", children: [
4671
- /* @__PURE__ */ jsx(LayerChip, { layer, count, dim }),
4672
- summary != null ? /* @__PURE__ */ jsx("span", { className: "ml-auto min-w-0 shrink truncate text-meta text-muted-foreground", children: summary }) : null
4986
+ /* @__PURE__ */ jsx(LayerChip, { layer, count, dim, palette }),
4987
+ summary != null ? /* @__PURE__ */ jsx("span", { className: "ml-auto min-w-0 shrink truncate text-sm text-muted-foreground", children: summary }) : null
4673
4988
  ] }),
4674
- empty ? /* @__PURE__ */ jsx("p", { className: "px-1 py-1 text-meta text-muted-foreground/70", children: "no rules in this layer" }) : /* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-col", dim && "opacity-60"), children })
4989
+ empty ? /* @__PURE__ */ jsx("p", { className: "px-1 py-1 text-sm text-muted-foreground/70", children: "no rules in this layer" }) : /* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-col", dim && "opacity-60"), children })
4675
4990
  ]
4676
4991
  }
4677
4992
  );
4678
4993
  }
4679
4994
  );
4680
4995
  LayerSection.displayName = "LayerSection";
4681
- var MARK = {
4682
- out: "bg-primary",
4683
- in: "bg-data-1",
4684
- refused: "bg-destructive",
4685
- skipped: "bg-muted-foreground/30"
4686
- };
4687
- var MARK_LABEL = {
4996
+ var STATE_LABEL = {
4997
+ declared: "declared",
4688
4998
  out: "sent",
4689
4999
  in: "read",
4690
5000
  refused: "refused",
4691
5001
  skipped: "skipped"
4692
5002
  };
4693
- var LayerStrip = React23.forwardRef(
5003
+ var STATE_BAR = {
5004
+ declared: "border-dashed",
5005
+ out: "",
5006
+ in: "",
5007
+ refused: "border-destructive bg-background",
5008
+ skipped: "border-dashed opacity-60"
5009
+ };
5010
+ var stateLabel = (state) => STATE_LABEL[state] ?? state;
5011
+ var formatElapsed = (ms) => {
5012
+ if (ms < 1e3) return `${Math.round(ms)}ms`;
5013
+ if (ms < 6e4) return `${(ms / 1e3).toFixed(ms < 1e4 ? 1 : 0)}s`;
5014
+ const m = Math.floor(ms / 6e4);
5015
+ return `${m}m ${Math.round(ms % 6e4 / 1e3)}s`;
5016
+ };
5017
+ var LayerStrip = React25.forwardRef(
4694
5018
  ({
4695
5019
  bands,
4696
- steps,
4697
- onSelectStep,
4698
- selectedStep,
5020
+ items,
5021
+ scale = "seq",
5022
+ domain,
5023
+ ticks,
5024
+ formatTick,
5025
+ brackets,
5026
+ seams,
5027
+ onSelectItem,
5028
+ selectedItem,
5029
+ hoverDetail = true,
5030
+ itemDetail,
5031
+ defaultCollapsed,
5032
+ collapsed,
5033
+ onCollapsedChange,
5034
+ collapsible = true,
4699
5035
  frozenLabels = true,
5036
+ labelWidth = 15.5,
5037
+ minTrackWidth = 26,
5038
+ minSlotWidth = 6,
5039
+ palette,
4700
5040
  className,
4701
5041
  ...props
4702
5042
  }, ref) => {
4703
- const byBand = (layer) => steps.map((step) => ({
4704
- step,
4705
- touch: step.touches.find((t) => t.layer === layer)
4706
- }));
4707
- return /* @__PURE__ */ jsx(
5043
+ const [ownCollapsed, setOwnCollapsed] = React25.useState(
5044
+ defaultCollapsed ?? []
5045
+ );
5046
+ const shut = collapsed ?? ownCollapsed;
5047
+ const setShut = (next) => {
5048
+ if (collapsed == null) setOwnCollapsed(next);
5049
+ onCollapsedChange?.(next);
5050
+ };
5051
+ const withParts = bands.filter((b) => (b.parts?.length ?? 0) > 0);
5052
+ const allShut = withParts.length > 0 && withParts.every((b) => shut.includes(b.layer));
5053
+ const ends = items.map((i) => i.end ?? i.start + (scale === "seq" ? 1 : 0));
5054
+ const starts = items.map((i) => i.start);
5055
+ const d0 = domain?.[0] ?? (starts.length ? Math.min(...starts) : 0);
5056
+ const d1 = domain?.[1] ?? (ends.length ? Math.max(...ends) : d0 + 1);
5057
+ const span = d1 - d0 || 1;
5058
+ const pct = (value) => (value - d0) / span * 100;
5059
+ const axisTicks = ticks ?? (scale === "seq" ? Array.from({ length: Math.ceil(span) }, (_, n) => d0 + n) : Array.from({ length: 5 }, (_, n) => d0 + span / 4 * n));
5060
+ const tickLabel = formatTick ?? ((value) => scale === "seq" ? `${Math.round(value)}` : formatElapsed(value - d0));
5061
+ const label = (content, extra, indent, dim) => /* @__PURE__ */ jsx(
4708
5062
  "div",
4709
5063
  {
4710
- ref,
5064
+ style: { width: `${labelWidth}rem` },
4711
5065
  className: cn(
4712
- "min-w-0 overflow-x-auto rounded-control border border-border",
4713
- className
5066
+ "flex shrink-0 items-center gap-2 border-border border-r px-2.5 py-1.5",
5067
+ // A frozen label is normally opaque, or the bars it is parked over
5068
+ // would scroll through it. A dim row has no bars — that is what dim
5069
+ // means — so it can go transparent and let the row's own muted ground
5070
+ // run the full width. Without this the label column paints `bg-card`
5071
+ // straight over the tint and only the empty track reads as unspent,
5072
+ // which is the half a reader is least likely to look at.
5073
+ dim ? "bg-transparent" : "bg-card",
5074
+ indent && "pl-5",
5075
+ frozenLabels && "sticky left-0 z-10",
5076
+ extra
4714
5077
  ),
4715
- ...props,
4716
- children: /* @__PURE__ */ jsxs(
4717
- "div",
4718
- {
4719
- className: "grid min-w-max",
4720
- style: {
4721
- gridTemplateColumns: `9rem repeat(${steps.length}, minmax(2.5rem, 1fr))`
4722
- },
4723
- children: [
4724
- /* @__PURE__ */ jsx(
4725
- "div",
4726
- {
4727
- className: cn(
4728
- "border-b border-border bg-background px-2 py-1",
4729
- frozenLabels && "sticky left-0 z-20"
4730
- ),
4731
- children: /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: "layer" })
4732
- }
4733
- ),
4734
- steps.map((step) => /* @__PURE__ */ jsx(
4735
- "button",
4736
- {
4737
- type: "button",
4738
- onClick: () => onSelectStep?.(step.id),
4739
- title: step.seq != null ? `${step.label} \xB7 seq ${step.seq}` : step.label,
4740
- className: cn(
4741
- "border-b border-l border-border px-1 py-1 text-meta",
4742
- "truncate text-muted-foreground",
4743
- onSelectStep && "cursor-pointer hover:bg-accent",
4744
- selectedStep === step.id && "bg-accent text-foreground",
4745
- "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
4746
- ),
4747
- children: step.label
4748
- },
4749
- step.id
4750
- )),
4751
- bands.map((band) => /* @__PURE__ */ jsxs(React23.Fragment, { children: [
4752
- /* @__PURE__ */ jsx(
4753
- "div",
4754
- {
4755
- className: cn(
4756
- "flex items-center border-b border-border bg-background px-2 py-1",
4757
- frozenLabels && "sticky left-0 z-10"
4758
- ),
4759
- children: band.label ?? /* @__PURE__ */ jsx(LayerChip, { layer: band.layer })
4760
- }
4761
- ),
4762
- byBand(band.layer).map(({ step, touch }) => /* @__PURE__ */ jsx(
4763
- "div",
4764
- {
4765
- title: touch ? `${step.label} \xB7 ${MARK_LABEL[touch.direction]}${touch.address ? ` \xB7 ${touch.address}` : ""}${touch.ruleMatched ? ` \xB7 ${touch.ruleMatched}` : ""}` : void 0,
4766
- className: cn(
4767
- "flex items-center justify-center border-b border-l border-border px-1 py-1",
4768
- selectedStep === step.id && "bg-accent"
4769
- ),
4770
- children: touch ? /* @__PURE__ */ jsx(
4771
- "span",
4772
- {
4773
- "aria-label": MARK_LABEL[touch.direction],
4774
- className: cn(
4775
- "h-1.5 w-full max-w-6 rounded-full",
4776
- MARK[touch.direction],
4777
- // Struck in place: the mark stays so the cell is not
4778
- // mistaken for a step that never reached here.
4779
- touch.direction === "refused" && "relative after:absolute after:inset-x-0 after:top-1/2 after:h-px after:-translate-y-1/2 after:bg-destructive-foreground/70"
4780
- )
4781
- }
4782
- ) : /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "text-muted-foreground/25", children: "\xB7" })
4783
- },
4784
- `${band.layer}-${step.id}`
4785
- ))
4786
- ] }, band.layer))
4787
- ]
4788
- }
4789
- )
5078
+ children: content
4790
5079
  }
4791
5080
  );
4792
- }
4793
- );
4794
- LayerStrip.displayName = "LayerStrip";
4795
- function Swatch({ kind = "dot", color }) {
4796
- const style = { color };
4797
- if (kind === "dot")
4798
- return /* @__PURE__ */ jsx(
4799
- "span",
5081
+ const trackFloor = Math.max(minTrackWidth, axisTicks.length * minSlotWidth);
5082
+ const row = (key, head, track, dim) => /* @__PURE__ */ jsxs(
5083
+ "div",
4800
5084
  {
4801
- "aria-hidden": true,
4802
- style,
4803
- className: "size-2 shrink-0 rounded-full bg-current"
4804
- }
5085
+ className: cn(
5086
+ "flex min-h-12 border-border border-b last:border-b-0",
5087
+ // Muting the text alone said *this row is quiet*; the row has to say
5088
+ // *nothing spends this layer*, which is a band, not a weight.
5089
+ dim && "bg-muted/60"
5090
+ ),
5091
+ children: [
5092
+ head,
5093
+ /* @__PURE__ */ jsx(
5094
+ "div",
5095
+ {
5096
+ style: { minWidth: `${trackFloor}rem` },
5097
+ className: "relative min-w-0 flex-1",
5098
+ children: track
5099
+ }
5100
+ )
5101
+ ]
5102
+ },
5103
+ key
5104
+ );
5105
+ const partOf = (item) => item.part ? bands.find((b) => b.layer === item.layer)?.parts?.find((p) => p.id === item.part) : void 0;
5106
+ const spanLabel = (item) => {
5107
+ const end = item.end ?? item.start + (scale === "seq" ? 1 : 0);
5108
+ if (scale === "seq") {
5109
+ return end - item.start <= 1 ? `step ${item.start}` : `steps ${item.start}\u2013${end - 1}`;
5110
+ }
5111
+ return `${formatElapsed(item.start - d0)} \u2192 ${formatElapsed(
5112
+ end - d0
5113
+ )} \xB7 ${formatElapsed(end - item.start)}`;
5114
+ };
5115
+ const detail = (item) => {
5116
+ if (itemDetail) return itemDetail(item);
5117
+ const state = item.state ?? "declared";
5118
+ const part = partOf(item);
5119
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
5120
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
5121
+ /* @__PURE__ */ jsx(
5122
+ "span",
5123
+ {
5124
+ className: cn(
5125
+ "min-w-0 flex-1 truncate font-mono text-base",
5126
+ state === "refused" && "text-destructive line-through"
5127
+ ),
5128
+ children: item.label
5129
+ }
5130
+ ),
5131
+ /* @__PURE__ */ jsx(
5132
+ "span",
5133
+ {
5134
+ className: cn(
5135
+ "shrink-0 text-sm",
5136
+ state === "refused" ? "text-destructive" : "text-muted-foreground"
5137
+ ),
5138
+ children: stateLabel(state)
5139
+ }
5140
+ )
5141
+ ] }),
5142
+ /* @__PURE__ */ jsxs("dl", { className: "grid grid-cols-[auto_1fr] gap-x-2 gap-y-1 text-sm", children: [
5143
+ /* @__PURE__ */ jsx("dt", { className: "text-muted-foreground", children: "layer" }),
5144
+ /* @__PURE__ */ jsx("dd", { className: "min-w-0", children: /* @__PURE__ */ jsx(LayerChip, { layer: item.layer, palette }) }),
5145
+ part ? /* @__PURE__ */ jsxs(Fragment, { children: [
5146
+ /* @__PURE__ */ jsx("dt", { className: "text-muted-foreground", children: "participant" }),
5147
+ /* @__PURE__ */ jsx("dd", { className: "min-w-0 break-all font-mono", children: part.label })
5148
+ ] }) : null,
5149
+ /* @__PURE__ */ jsx("dt", { className: "text-muted-foreground", children: "when" }),
5150
+ /* @__PURE__ */ jsx("dd", { className: "min-w-0 tabular-nums", children: spanLabel(item) }),
5151
+ item.note ? /* @__PURE__ */ jsxs(Fragment, { children: [
5152
+ /* @__PURE__ */ jsx("dt", { className: "text-muted-foreground", children: "what it does" }),
5153
+ /* @__PURE__ */ jsx("dd", { className: "min-w-0 font-mono", children: item.note })
5154
+ ] }) : null,
5155
+ item.forecast ? /* @__PURE__ */ jsxs(Fragment, { children: [
5156
+ /* @__PURE__ */ jsx("dt", { className: "text-muted-foreground", children: "usually" }),
5157
+ /* @__PURE__ */ jsxs("dd", { className: "min-w-0 tabular-nums", children: [
5158
+ scale === "elapsed" ? formatElapsed(item.forecast.p50) : item.forecast.p50,
5159
+ item.forecast.note ? ` \xB7 ${item.forecast.note}` : ""
5160
+ ] })
5161
+ ] }) : null,
5162
+ item.ruleMatched ? /* @__PURE__ */ jsxs(Fragment, { children: [
5163
+ /* @__PURE__ */ jsx("dt", { className: "text-muted-foreground", children: "refused by" }),
5164
+ /* @__PURE__ */ jsx("dd", { className: "min-w-0 break-all font-mono text-destructive", children: item.ruleMatched })
5165
+ ] }) : null
5166
+ ] })
5167
+ ] });
5168
+ };
5169
+ const bar = (item, compact = false) => {
5170
+ const state = item.state ?? "declared";
5171
+ const end = item.end ?? item.start + (scale === "seq" ? 1 : 0);
5172
+ const min = compact ? "0.75rem" : "4.5rem";
5173
+ const Tag = onSelectItem ? "button" : "div";
5174
+ const drawn = /* @__PURE__ */ jsxs(
5175
+ Tag,
5176
+ {
5177
+ ...onSelectItem ? { type: "button", onClick: () => onSelectItem(item.id) } : {},
5178
+ title: hoverDetail ? void 0 : [item.label, stateLabel(state), item.note, item.ruleMatched].filter(Boolean).join(" \xB7 "),
5179
+ style: (
5180
+ // A bar is at least readable-wide, and one near the end grows
5181
+ // inwards rather than off the track: anchor whichever edge is
5182
+ // nearer its own end of the axis, so the moment it names stays
5183
+ // true where the reader is looking.
5184
+ pct(item.start) > 50 ? {
5185
+ right: `${100 - pct(end)}%`,
5186
+ width: `max(${min}, calc(${pct(end) - pct(item.start)}% - 3px))`
5187
+ } : {
5188
+ left: `${pct(item.start)}%`,
5189
+ width: `max(${min}, calc(${pct(end) - pct(item.start)}% - 3px))`
5190
+ }
5191
+ ),
5192
+ className: cn(
5193
+ "-translate-y-1/2 absolute top-1/2 flex min-w-0 items-stretch overflow-hidden rounded-xs border py-0.5 text-left",
5194
+ compact ? "gap-1 pr-1" : "gap-1.5 pr-1.5",
5195
+ // Chosen, not merged. `twMerge` would resolve the kit's own tints
5196
+ // against `border-destructive` correctly, but the tint is a
5197
+ // consumer's string now: a project that paints a layer with its own
5198
+ // utility class (`layer-llm`, a plugin's output) hands `cn` two
5199
+ // classes it cannot see a conflict between, and stylesheet order
5200
+ // would decide whether a refusal reads as refused.
5201
+ state === "refused" ? null : layerPaint(palette, item.layer).tint,
5202
+ STATE_BAR[state] ?? "",
5203
+ onSelectItem && "cursor-pointer hover:bg-accent",
5204
+ selectedItem === item.id && "ring-1 ring-ring",
5205
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
5206
+ ),
5207
+ children: [
5208
+ /* @__PURE__ */ jsx(
5209
+ "span",
5210
+ {
5211
+ "aria-hidden": true,
5212
+ className: cn(
5213
+ "w-1 shrink-0",
5214
+ layerPaint(palette, item.layer).swatch
5215
+ )
5216
+ }
5217
+ ),
5218
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col justify-center", children: [
5219
+ /* @__PURE__ */ jsx(
5220
+ "span",
5221
+ {
5222
+ className: cn(
5223
+ "truncate font-mono text-sm",
5224
+ state === "refused" && "text-destructive line-through"
5225
+ ),
5226
+ children: item.label
5227
+ }
5228
+ ),
5229
+ compact ? null : /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-muted-foreground", children: item.note ?? (item.forecast ? `p50 ${scale === "elapsed" ? formatElapsed(item.forecast.p50) : item.forecast.p50}${item.forecast.note ? ` \xB7 ${item.forecast.note}` : ""}` : state === "declared" ? null : stateLabel(state)) })
5230
+ ] })
5231
+ ]
5232
+ },
5233
+ item.id
5234
+ );
5235
+ const forecastMark = item.forecast ? /* @__PURE__ */ jsx(
5236
+ "span",
5237
+ {
5238
+ "aria-hidden": true,
5239
+ style: { left: `${pct(item.start + item.forecast.p50)}%` },
5240
+ className: "-translate-y-1/2 pointer-events-none absolute top-1/2 h-5 border-muted-foreground/70 border-l border-dashed"
5241
+ },
5242
+ `${item.id}-p50`
5243
+ ) : null;
5244
+ const withMark = (node) => forecastMark ? /* @__PURE__ */ jsxs(React25.Fragment, { children: [
5245
+ forecastMark,
5246
+ node
5247
+ ] }, item.id) : node;
5248
+ if (!hoverDetail) return withMark(drawn);
5249
+ return withMark(
5250
+ /* @__PURE__ */ jsxs(HoverCard, { openDelay: 140, closeDelay: 80, children: [
5251
+ /* @__PURE__ */ jsx(HoverCardTrigger, { asChild: true, children: drawn }),
5252
+ /* @__PURE__ */ jsx(
5253
+ HoverCardContent,
5254
+ {
5255
+ align: "start",
5256
+ side: "top",
5257
+ className: "w-auto max-w-80 p-3",
5258
+ children: detail(item)
5259
+ }
5260
+ )
5261
+ ] }, item.id)
5262
+ );
5263
+ };
5264
+ const bracketLanes = React25.useMemo(() => {
5265
+ const lanes = [];
5266
+ const ordered = [...brackets ?? []].sort(
5267
+ (a, b) => b.end - b.start - (a.end - a.start)
5268
+ );
5269
+ for (const bracket of ordered) {
5270
+ const lane = lanes.find(
5271
+ (existing) => existing.every(
5272
+ (other) => bracket.end <= other.start || bracket.start >= other.end
5273
+ )
5274
+ );
5275
+ if (lane) lane.push(bracket);
5276
+ else lanes.push([bracket]);
5277
+ }
5278
+ return lanes;
5279
+ }, [brackets]);
5280
+ const seamLines = React25.useMemo(() => {
5281
+ const placed = (seams ?? []).filter((seam) => seam.at != null);
5282
+ const loose = (seams ?? []).filter((seam) => seam.at == null);
5283
+ return [...placed.length ? [placed] : [], ...loose.map((s2) => [s2])];
5284
+ }, [seams]);
5285
+ const itemsOf = (layer, part) => items.filter(
5286
+ (i) => i.layer === layer && (part ? i.part === part : !i.part)
5287
+ );
5288
+ const allOf = (layer) => items.filter((i) => i.layer === layer);
5289
+ return /* @__PURE__ */ jsx(
5290
+ "div",
5291
+ {
5292
+ ref,
5293
+ className: cn(
5294
+ "min-w-0 overflow-x-auto rounded-control border border-border bg-card",
5295
+ className
5296
+ ),
5297
+ ...props,
5298
+ children: /* @__PURE__ */ jsxs("div", { className: "relative min-w-max", children: [
5299
+ seams?.length ? /* @__PURE__ */ jsx(
5300
+ "div",
5301
+ {
5302
+ "aria-hidden": true,
5303
+ style: { left: `${labelWidth}rem` },
5304
+ className: "pointer-events-none absolute inset-y-0 right-0",
5305
+ children: seams.map(
5306
+ (seam) => seam.at == null ? null : /* @__PURE__ */ jsx(
5307
+ "span",
5308
+ {
5309
+ style: { left: `${pct(seam.at)}%` },
5310
+ className: cn(
5311
+ "absolute inset-y-0 border-l",
5312
+ seam.conditional || seam.noEstimate ? "border-dashed border-muted-foreground/45" : "border-muted-foreground/60"
5313
+ )
5314
+ },
5315
+ seam.id
5316
+ )
5317
+ )
5318
+ }
5319
+ ) : null,
5320
+ row(
5321
+ "axis",
5322
+ label(
5323
+ /* @__PURE__ */ jsxs(Fragment, { children: [
5324
+ collapsible && withParts.length > 0 ? /* @__PURE__ */ jsxs(
5325
+ "button",
5326
+ {
5327
+ type: "button",
5328
+ onClick: () => setShut(allShut ? [] : withParts.map((b) => b.layer)),
5329
+ className: "-ml-1 flex items-center gap-0.5 rounded-xs px-1 text-sm text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
5330
+ children: [
5331
+ allShut ? /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": true, className: "size-3 shrink-0" }) : /* @__PURE__ */ jsx(ChevronDown, { "aria-hidden": true, className: "size-3 shrink-0" }),
5332
+ allShut ? "expand all" : "collapse all"
5333
+ ]
5334
+ }
5335
+ ) : /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "layer" }),
5336
+ /* @__PURE__ */ jsx("span", { className: "ml-auto text-sm text-muted-foreground/70", children: scale === "seq" ? "step" : "elapsed" })
5337
+ ] }),
5338
+ "min-h-0 py-1"
5339
+ ),
5340
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0", children: axisTicks.map((value) => {
5341
+ const atEnd = pct(value) > 99;
5342
+ return /* @__PURE__ */ jsx(
5343
+ "span",
5344
+ {
5345
+ style: atEnd ? { right: 0 } : { left: `${pct(value)}%` },
5346
+ className: cn(
5347
+ "absolute inset-y-0 text-sm text-muted-foreground",
5348
+ atEnd ? "border-border/60 border-r pr-1" : "border-border/60 border-l pl-1"
5349
+ ),
5350
+ children: tickLabel(value)
5351
+ },
5352
+ value
5353
+ );
5354
+ }) })
5355
+ ),
5356
+ bracketLanes.map(
5357
+ (lane, laneIndex) => row(
5358
+ `brackets-${laneIndex}`,
5359
+ label(
5360
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: laneIndex === 0 ? "its bound" : "" }),
5361
+ "min-h-0 py-1"
5362
+ ),
5363
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 py-1", children: lane.map((bracket) => /* @__PURE__ */ jsx(
5364
+ "span",
5365
+ {
5366
+ style: {
5367
+ left: `${pct(bracket.start)}%`,
5368
+ width: `${pct(bracket.end) - pct(bracket.start)}%`
5369
+ },
5370
+ className: "absolute inset-y-1 flex items-center justify-center truncate rounded-xs border border-border border-dashed px-1 text-sm text-muted-foreground",
5371
+ children: bracket.label
5372
+ },
5373
+ bracket.id
5374
+ )) })
5375
+ )
5376
+ ),
5377
+ seamLines.map(
5378
+ (line, lineIndex) => row(
5379
+ `seams-${lineIndex}`,
5380
+ label(
5381
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: lineIndex === 0 ? "its gates" : "" })
5382
+ ),
5383
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0", children: line.map((seam) => {
5384
+ const named = /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col justify-center", children: [
5385
+ /* @__PURE__ */ jsx("span", { className: "truncate text-sm", children: seam.label }),
5386
+ seam.note ? /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-muted-foreground", children: seam.note }) : null
5387
+ ] });
5388
+ if (seam.at == null)
5389
+ return /* @__PURE__ */ jsx(
5390
+ "span",
5391
+ {
5392
+ className: "absolute inset-x-0 inset-y-1.5 flex items-center justify-center rounded-xs border border-dotted border-muted-foreground/45 px-1.5 text-muted-foreground",
5393
+ children: named
5394
+ },
5395
+ seam.id
5396
+ );
5397
+ const after = seam.edge === "after";
5398
+ const neighbours = line.map((other) => other.at).filter((value) => value != null);
5399
+ const bound = after ? pct(seam.at) - Math.max(
5400
+ ...neighbours.filter((v) => v < (seam.at ?? 0)).map(pct),
5401
+ 0
5402
+ ) : Math.min(
5403
+ ...neighbours.filter((v) => v > (seam.at ?? 0)).map(pct),
5404
+ 100
5405
+ ) - pct(seam.at);
5406
+ return /* @__PURE__ */ jsx(
5407
+ "span",
5408
+ {
5409
+ style: {
5410
+ maxWidth: `${Math.max(bound, 12)}%`,
5411
+ ...after ? { right: `${100 - pct(seam.at)}%` } : { left: `${pct(seam.at)}%` }
5412
+ },
5413
+ className: cn(
5414
+ // The label hangs off the side the cost falls on:
5415
+ // before the line, nothing is spent; after it, the
5416
+ // pass is already paid for.
5417
+ "absolute inset-y-1.5 flex items-center bg-card px-1.5 text-muted-foreground",
5418
+ after ? "border-r-2 text-right" : "border-l-2",
5419
+ seam.conditional || seam.noEstimate ? "border-dashed border-muted-foreground/45" : "border-muted-foreground/70"
5420
+ ),
5421
+ children: named
5422
+ },
5423
+ seam.id
5424
+ );
5425
+ }) })
5426
+ )
5427
+ ),
5428
+ bands.map((band) => {
5429
+ const own = itemsOf(band.layer);
5430
+ const parts = band.parts ?? [];
5431
+ const dim = allOf(band.layer).length === 0;
5432
+ const spine = band.spine ?? false;
5433
+ const foldable = collapsible && parts.length > 0;
5434
+ const isShut = foldable && shut.includes(band.layer);
5435
+ const onLine = isShut ? allOf(band.layer) : own;
5436
+ return /* @__PURE__ */ jsxs(React25.Fragment, { children: [
5437
+ row(
5438
+ band.layer,
5439
+ label(
5440
+ /* @__PURE__ */ jsxs(Fragment, { children: [
5441
+ foldable ? /* @__PURE__ */ jsxs(
5442
+ "button",
5443
+ {
5444
+ type: "button",
5445
+ "aria-expanded": !isShut,
5446
+ "aria-label": `${isShut ? "Show" : "Hide"} the ${parts.length} participants under ${band.layer}`,
5447
+ onClick: () => setShut(
5448
+ isShut ? shut.filter((l) => l !== band.layer) : [...shut, band.layer]
5449
+ ),
5450
+ className: "-ml-1 flex shrink-0 items-center gap-1 rounded-xs px-1 hover:bg-accent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
5451
+ children: [
5452
+ isShut ? /* @__PURE__ */ jsx(
5453
+ ChevronRight,
5454
+ {
5455
+ "aria-hidden": true,
5456
+ className: "size-3 shrink-0 text-muted-foreground"
5457
+ }
5458
+ ) : /* @__PURE__ */ jsx(
5459
+ ChevronDown,
5460
+ {
5461
+ "aria-hidden": true,
5462
+ className: "size-3 shrink-0 text-muted-foreground"
5463
+ }
5464
+ ),
5465
+ band.label ?? /* @__PURE__ */ jsx(
5466
+ LayerChip,
5467
+ {
5468
+ layer: band.layer,
5469
+ dim,
5470
+ palette
5471
+ }
5472
+ )
5473
+ ]
5474
+ }
5475
+ ) : /* @__PURE__ */ jsx("span", { className: "shrink-0 pl-4", children: band.label ?? /* @__PURE__ */ jsx(
5476
+ LayerChip,
5477
+ {
5478
+ layer: band.layer,
5479
+ dim,
5480
+ palette
5481
+ }
5482
+ ) }),
5483
+ band.note ? /* @__PURE__ */ jsx(
5484
+ "span",
5485
+ {
5486
+ title: band.note,
5487
+ className: cn(
5488
+ "ml-auto min-w-0 truncate text-sm",
5489
+ dim ? "text-muted-foreground/70" : "text-muted-foreground"
5490
+ ),
5491
+ children: band.note
5492
+ }
5493
+ ) : null
5494
+ ] }),
5495
+ void 0,
5496
+ false,
5497
+ dim
5498
+ ),
5499
+ /* @__PURE__ */ jsxs(Fragment, { children: [
5500
+ spine ? /* @__PURE__ */ jsx(
5501
+ "span",
5502
+ {
5503
+ "aria-hidden": true,
5504
+ className: "-translate-y-1/2 absolute inset-x-0 top-1/2 border-border border-t"
5505
+ }
5506
+ ) : null,
5507
+ onLine.map((item) => bar(item, isShut))
5508
+ ] }),
5509
+ dim
5510
+ ),
5511
+ (isShut ? [] : parts).map((part) => {
5512
+ const spent = itemsOf(band.layer, part.id);
5513
+ const unspent = spent.length === 0;
5514
+ return row(
5515
+ `${band.layer}-${part.id}`,
5516
+ label(
5517
+ /* @__PURE__ */ jsxs(
5518
+ "span",
5519
+ {
5520
+ className: "flex min-w-0 flex-col",
5521
+ title: part.label,
5522
+ children: [
5523
+ /* @__PURE__ */ jsx(
5524
+ "span",
5525
+ {
5526
+ className: cn(
5527
+ "truncate font-mono text-sm",
5528
+ // The address wears its layer, so the row and the
5529
+ // band's dot are visibly one thing. Unspent
5530
+ // overrides it: *this was never reached* outranks
5531
+ // *this is graph data*.
5532
+ unspent ? "text-muted-foreground/70" : layerPaint(palette, band.layer).text
5533
+ ),
5534
+ children: part.label
5535
+ }
5536
+ ),
5537
+ part.note ? /* @__PURE__ */ jsx(
5538
+ "span",
5539
+ {
5540
+ className: cn(
5541
+ // What the participant owes sits a rung under the
5542
+ // address that owes it. At the same size the two
5543
+ // lines read as one wrapped label.
5544
+ "truncate text-xs",
5545
+ unspent ? "text-muted-foreground/70" : "text-muted-foreground"
5546
+ ),
5547
+ children: part.note
5548
+ }
5549
+ ) : null
5550
+ ]
5551
+ }
5552
+ ),
5553
+ void 0,
5554
+ true,
5555
+ unspent
5556
+ ),
5557
+ spent.map((item) => bar(item)),
5558
+ unspent
5559
+ );
5560
+ })
5561
+ ] }, band.layer);
5562
+ })
5563
+ ] })
5564
+ }
5565
+ );
5566
+ }
5567
+ );
5568
+ LayerStrip.displayName = "LayerStrip";
5569
+ function Swatch({ kind = "dot", color }) {
5570
+ const style = { color };
5571
+ if (kind === "dot")
5572
+ return /* @__PURE__ */ jsx(
5573
+ "span",
5574
+ {
5575
+ "aria-hidden": true,
5576
+ style,
5577
+ className: "size-2 shrink-0 rounded-full bg-current"
5578
+ }
4805
5579
  );
4806
5580
  if (kind === "ring")
4807
5581
  return /* @__PURE__ */ jsx(
@@ -4814,6 +5588,26 @@ function Swatch({ kind = "dot", color }) {
4814
5588
  );
4815
5589
  if (kind === "line")
4816
5590
  return /* @__PURE__ */ jsx("span", { "aria-hidden": true, style, className: "h-0.5 w-4 shrink-0 bg-current" });
5591
+ if (kind === "stripe")
5592
+ return /* @__PURE__ */ jsx("span", { "aria-hidden": true, style, className: "h-3 w-[3px] shrink-0 bg-current" });
5593
+ if (kind === "bracket")
5594
+ return /* @__PURE__ */ jsx(
5595
+ "span",
5596
+ {
5597
+ "aria-hidden": true,
5598
+ style,
5599
+ className: "h-3 w-3.5 shrink-0 border-l-2 border-current bg-current/10"
5600
+ }
5601
+ );
5602
+ if (kind === "rule")
5603
+ return /* @__PURE__ */ jsx(
5604
+ "span",
5605
+ {
5606
+ "aria-hidden": true,
5607
+ style,
5608
+ className: "relative h-3 w-4 shrink-0 before:absolute before:inset-x-0 before:top-1.5 before:border-t-2 before:border-current after:absolute after:left-0.5 after:top-[3px] after:size-1.5 after:bg-current"
5609
+ }
5610
+ );
4817
5611
  if (kind === "dashed")
4818
5612
  return /* @__PURE__ */ jsx(
4819
5613
  "span",
@@ -4839,14 +5633,14 @@ function Swatch({ kind = "dot", color }) {
4839
5633
  }
4840
5634
  );
4841
5635
  }
4842
- var Legend = React23.forwardRef(
5636
+ var Legend = React25.forwardRef(
4843
5637
  ({ orientation = "row", className, children, ...props }, ref) => /* @__PURE__ */ jsx(
4844
5638
  "div",
4845
5639
  {
4846
5640
  ref,
4847
5641
  role: "list",
4848
5642
  className: cn(
4849
- "flex gap-x-3 gap-y-1 text-meta",
5643
+ "flex gap-x-3 gap-y-1 text-sm",
4850
5644
  orientation === "row" ? "flex-wrap items-center" : "flex-col",
4851
5645
  className
4852
5646
  ),
@@ -4856,7 +5650,7 @@ var Legend = React23.forwardRef(
4856
5650
  )
4857
5651
  );
4858
5652
  Legend.displayName = "Legend";
4859
- var LegendItem = React23.forwardRef(
5653
+ var LegendItem = React25.forwardRef(
4860
5654
  ({ kind, color, label, count, className, ...props }, ref) => /* @__PURE__ */ jsxs(
4861
5655
  "div",
4862
5656
  {
@@ -4873,7 +5667,7 @@ var LegendItem = React23.forwardRef(
4873
5667
  )
4874
5668
  );
4875
5669
  LegendItem.displayName = "LegendItem";
4876
- var LensChip = React23.forwardRef(
5670
+ var LensChip = React25.forwardRef(
4877
5671
  ({ lens, onPick, className, ...props }, ref) => {
4878
5672
  const label = lens?.name ?? "Everything";
4879
5673
  const unset = lens == null;
@@ -4892,7 +5686,7 @@ var LensChip = React23.forwardRef(
4892
5686
  ] });
4893
5687
  const shell = cn(
4894
5688
  "inline-flex min-w-0 max-w-full items-center gap-1.5 rounded-control",
4895
- "border border-border px-1.5 py-0.5 text-meta",
5689
+ "border border-border px-1.5 py-0.5 text-sm",
4896
5690
  unset ? "text-muted-foreground" : "text-foreground",
4897
5691
  className
4898
5692
  );
@@ -4916,7 +5710,7 @@ var LensChip = React23.forwardRef(
4916
5710
  }
4917
5711
  );
4918
5712
  LensChip.displayName = "LensChip";
4919
- function describe(n) {
5713
+ function describe(n, palette) {
4920
5714
  switch (n.kind) {
4921
5715
  case "allow":
4922
5716
  return `${n.count} allow`;
@@ -4931,12 +5725,12 @@ function describe(n) {
4931
5725
  case "closes":
4932
5726
  return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
4933
5727
  "closes",
4934
- n.layers.map((layer) => /* @__PURE__ */ jsx(LayerChip, { layer }, layer))
5728
+ n.layers.map((layer) => /* @__PURE__ */ jsx(LayerChip, { layer, palette }, layer))
4935
5729
  ] });
4936
5730
  }
4937
5731
  }
4938
- var LensRow = React23.forwardRef(
4939
- ({ name, narrows = [], usage, selected, onSelect, className, ...props }, ref) => {
5732
+ var LensRow = React25.forwardRef(
5733
+ ({ name, narrows = [], usage, selected, onSelect, palette, className, ...props }, ref) => {
4940
5734
  const interactive = Boolean(onSelect);
4941
5735
  return /* @__PURE__ */ jsxs(
4942
5736
  "div",
@@ -4962,8 +5756,8 @@ var LensRow = React23.forwardRef(
4962
5756
  ...props,
4963
5757
  children: [
4964
5758
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-baseline gap-2", children: [
4965
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-sm font-medium text-foreground", children: name }),
4966
- usage ? /* @__PURE__ */ jsxs("span", { className: "ml-auto shrink-0 text-meta text-muted-foreground", children: [
5759
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-base font-medium text-foreground", children: name }),
5760
+ usage ? /* @__PURE__ */ jsxs("span", { className: "ml-auto shrink-0 text-sm text-muted-foreground", children: [
4967
5761
  "used in ",
4968
5762
  usage.runs,
4969
5763
  " run",
@@ -4971,17 +5765,41 @@ var LensRow = React23.forwardRef(
4971
5765
  usage.lastUsed ? ` \xB7 last ${usage.lastUsed}` : ""
4972
5766
  ] }) : null
4973
5767
  ] }),
4974
- narrows.length ? /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 text-meta text-muted-foreground", children: narrows.map((n, i) => /* @__PURE__ */ jsxs(React23.Fragment, { children: [
5768
+ narrows.length ? /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 text-sm text-muted-foreground", children: narrows.map((n, i) => /* @__PURE__ */ jsxs(React25.Fragment, { children: [
4975
5769
  i > 0 ? /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "opacity-40", children: "\xB7" }) : null,
4976
- /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: describe(n) })
4977
- ] }, `${n.kind}-${i}`)) }) : /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground/70", children: "narrows nothing \u2014 the whole model, inside the guardrails" })
5770
+ /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: describe(n, palette) })
5771
+ ] }, `${n.kind}-${i}`)) }) : /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground/70", children: "narrows nothing \u2014 the whole model, inside the guardrails" })
4978
5772
  ]
4979
5773
  }
4980
5774
  );
4981
5775
  }
4982
5776
  );
4983
5777
  LensRow.displayName = "LensRow";
4984
- var MatchPreview = React23.forwardRef(
5778
+ var TONE3 = {
5779
+ muted: "border-muted-foreground/50 text-muted-foreground",
5780
+ info: "border-info/60 text-info",
5781
+ success: "border-success/60 text-success",
5782
+ warning: "border-warning/60 text-warning",
5783
+ destructive: "border-destructive/60 text-destructive"
5784
+ };
5785
+ var MarkChip = React25.forwardRef(
5786
+ ({ tone = "warning", className, children, ...props }, ref) => /* @__PURE__ */ jsx(
5787
+ "span",
5788
+ {
5789
+ ref,
5790
+ className: cn(
5791
+ "inline-flex shrink-0 items-center rounded-control border px-1 py-px",
5792
+ "font-mono text-xs whitespace-nowrap",
5793
+ TONE3[tone],
5794
+ className
5795
+ ),
5796
+ ...props,
5797
+ children
5798
+ }
5799
+ )
5800
+ );
5801
+ MarkChip.displayName = "MarkChip";
5802
+ var MatchPreview = React25.forwardRef(
4985
5803
  ({ pattern, matches = [], loading, limit = 8, className, ...props }, ref) => {
4986
5804
  const hits = matches.filter((m) => m.matched);
4987
5805
  const misses = matches.filter((m) => !m.matched);
@@ -4998,14 +5816,14 @@ var MatchPreview = React23.forwardRef(
4998
5816
  ...props,
4999
5817
  children: [
5000
5818
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-baseline gap-2", children: [
5001
- /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: "what this matches" }),
5002
- /* @__PURE__ */ jsx("span", { className: "ml-auto shrink-0 text-meta tabular-nums text-muted-foreground", children: loading ? "\u2026" : `${hits.length} of ${matches.length}` })
5819
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "what this matches" }),
5820
+ /* @__PURE__ */ jsx("span", { className: "ml-auto shrink-0 text-sm tabular-nums text-muted-foreground", children: loading ? "\u2026" : `${hits.length} of ${matches.length}` })
5003
5821
  ] }),
5004
5822
  loading ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 py-0.5", children: [
5005
5823
  /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-3/5" }),
5006
5824
  /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-2/5" }),
5007
5825
  /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-1/2" })
5008
- ] }) : matches.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-meta text-muted-foreground/70", children: "nothing in this Graph to match \u2014 the layer has no participants yet" }) : hits.length === 0 ? /* @__PURE__ */ jsxs("p", { className: "text-meta text-destructive", children: [
5826
+ ] }) : matches.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground/70", children: "nothing in this Graph to match \u2014 the layer has no participants yet" }) : hits.length === 0 ? /* @__PURE__ */ jsxs("p", { className: "text-sm text-destructive", children: [
5009
5827
  /* @__PURE__ */ jsx("span", { className: "font-mono", children: pattern }),
5010
5828
  " matches nothing here"
5011
5829
  ] }) : null,
@@ -5018,7 +5836,7 @@ var MatchPreview = React23.forwardRef(
5018
5836
  },
5019
5837
  m.address
5020
5838
  )),
5021
- hidden > 0 ? /* @__PURE__ */ jsxs("span", { className: "pt-0.5 text-meta text-muted-foreground/70", children: [
5839
+ hidden > 0 ? /* @__PURE__ */ jsxs("span", { className: "pt-0.5 text-sm text-muted-foreground/70", children: [
5022
5840
  "and ",
5023
5841
  hidden,
5024
5842
  " more"
@@ -5090,14 +5908,14 @@ var MenuItem = ({
5090
5908
  )
5091
5909
  ] });
5092
5910
  };
5093
- var TONE2 = {
5911
+ var TONE4 = {
5094
5912
  running: "text-info",
5095
5913
  success: "text-success",
5096
5914
  warning: "text-warning",
5097
5915
  error: "text-destructive",
5098
5916
  info: "text-info"
5099
5917
  };
5100
- var MetricTile = React23.forwardRef(
5918
+ var MetricTile = React25.forwardRef(
5101
5919
  ({ label, value, caption, tone, meter, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
5102
5920
  "div",
5103
5921
  {
@@ -5108,7 +5926,7 @@ var MetricTile = React23.forwardRef(
5108
5926
  ),
5109
5927
  ...props,
5110
5928
  children: [
5111
- /* @__PURE__ */ jsx("span", { className: "truncate text-meta font-semibold uppercase tracking-wide text-muted-foreground", children: label }),
5929
+ /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-semibold uppercase tracking-wide text-muted-foreground", children: label }),
5112
5930
  /* @__PURE__ */ jsx(
5113
5931
  "span",
5114
5932
  {
@@ -5117,12 +5935,12 @@ var MetricTile = React23.forwardRef(
5117
5935
  // `1,880` and `2 / 5` in adjacent tiles sit at different widths, and
5118
5936
  // a strip of six stops reading as one row of numbers.
5119
5937
  "font-mono text-lg font-semibold leading-tight",
5120
- tone ? TONE2[tone] : void 0
5938
+ tone ? TONE4[tone] ?? "text-foreground" : void 0
5121
5939
  ),
5122
5940
  children: value
5123
5941
  }
5124
5942
  ),
5125
- caption != null ? /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: caption }) : null,
5943
+ caption != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: caption }) : null,
5126
5944
  meter != null ? (
5127
5945
  // Not a <Progress>: that is a control-sized, rounded, animated bar for
5128
5946
  // work in flight. This is a 4px rule that says how much of a ceiling is
@@ -5136,7 +5954,7 @@ var MetricTile = React23.forwardRef(
5136
5954
  children: /* @__PURE__ */ jsx(
5137
5955
  "div",
5138
5956
  {
5139
- className: cn("h-full", tone ? TONE2[tone] : "text-primary", "bg-current"),
5957
+ className: cn("h-full", tone ? TONE4[tone] ?? "text-foreground" : "text-primary", "bg-current"),
5140
5958
  style: { width: `${Math.min(Math.max(meter, 0), 1) * 100}%` }
5141
5959
  }
5142
5960
  )
@@ -5149,7 +5967,7 @@ var MetricTile = React23.forwardRef(
5149
5967
  )
5150
5968
  );
5151
5969
  MetricTile.displayName = "MetricTile";
5152
- var MetricGrid = React23.forwardRef(
5970
+ var MetricGrid = React25.forwardRef(
5153
5971
  ({ minTileWidth = 120, gap = 6, className, style, children, ...props }, ref) => /* @__PURE__ */ jsx(
5154
5972
  "div",
5155
5973
  {
@@ -5208,7 +6026,7 @@ var NestedMenu = (props) => {
5208
6026
  }
5209
6027
  );
5210
6028
  };
5211
- var PanelBox = React23.forwardRef(
6029
+ var PanelBox = React25.forwardRef(
5212
6030
  ({ title, aside, flush, className, headerClassName, bodyClassName, children, ...props }, ref) => /* @__PURE__ */ jsxs(
5213
6031
  Card,
5214
6032
  {
@@ -5299,13 +6117,13 @@ function PanelStack({
5299
6117
  headerClassName,
5300
6118
  bodyClassName
5301
6119
  }) {
5302
- const groupRef = React23.useRef(null);
5303
- const refs = React23.useRef({});
5304
- const [collapsed, setCollapsed] = React23.useState(
6120
+ const groupRef = React25.useRef(null);
6121
+ const refs = React25.useRef({});
6122
+ const [collapsed, setCollapsed] = React25.useState(
5305
6123
  () => Object.fromEntries(sections.map((s) => [s.id, !!s.defaultCollapsed]))
5306
6124
  );
5307
- const didInit = React23.useRef(false);
5308
- React23.useLayoutEffect(() => {
6125
+ const didInit = React25.useRef(false);
6126
+ React25.useLayoutEffect(() => {
5309
6127
  if (didInit.current) return;
5310
6128
  didInit.current = true;
5311
6129
  const targets = sections.filter((s) => s.defaultCollapsed);
@@ -5337,18 +6155,18 @@ function PanelStack({
5337
6155
  for (const s of targets) refs.current[s.id]?.collapse();
5338
6156
  group.setLayout(next);
5339
6157
  }, []);
5340
- const notify = React23.useRef(onCollapsedChange);
5341
- React23.useEffect(() => {
6158
+ const notify = React25.useRef(onCollapsedChange);
6159
+ React25.useEffect(() => {
5342
6160
  notify.current = onCollapsedChange;
5343
6161
  }, [onCollapsedChange]);
5344
- const collapsedRef = React23.useRef(collapsed);
6162
+ const collapsedRef = React25.useRef(collapsed);
5345
6163
  collapsedRef.current = collapsed;
5346
- const collapsePanel = React23.useCallback((id) => {
6164
+ const collapsePanel = React25.useCallback((id) => {
5347
6165
  const ref = refs.current[id];
5348
6166
  if (!ref || ref.isCollapsed()) return;
5349
6167
  ref.collapse();
5350
6168
  }, []);
5351
- const expandPanel = React23.useCallback((id) => {
6169
+ const expandPanel = React25.useCallback((id) => {
5352
6170
  const ref = refs.current[id];
5353
6171
  if (!ref || !ref.isCollapsed()) return;
5354
6172
  ref.expand();
@@ -5366,7 +6184,7 @@ function PanelStack({
5366
6184
  [donorId]: donorPct - share
5367
6185
  });
5368
6186
  }, []);
5369
- const toggle = React23.useCallback(
6187
+ const toggle = React25.useCallback(
5370
6188
  (id) => {
5371
6189
  const ref = refs.current[id];
5372
6190
  if (!ref) return;
@@ -5375,7 +6193,7 @@ function PanelStack({
5375
6193
  },
5376
6194
  [expandPanel, collapsePanel]
5377
6195
  );
5378
- React23.useImperativeHandle(
6196
+ React25.useImperativeHandle(
5379
6197
  stackRef,
5380
6198
  () => ({
5381
6199
  expand: expandPanel,
@@ -5399,7 +6217,7 @@ function PanelStack({
5399
6217
  const Icon = section.icon;
5400
6218
  const isCollapsed = collapsed[section.id];
5401
6219
  const flush = index > 0 && (isCollapsed || collapsed[sections[index - 1].id]);
5402
- return /* @__PURE__ */ jsxs(React23.Fragment, { children: [
6220
+ return /* @__PURE__ */ jsxs(React25.Fragment, { children: [
5403
6221
  index > 0 && /* @__PURE__ */ jsx(
5404
6222
  ResizableHandle,
5405
6223
  {
@@ -5453,7 +6271,7 @@ function PanelStack({
5453
6271
  children: [
5454
6272
  isCollapsed ? /* @__PURE__ */ jsx(ChevronRight, { className: "h-5 w-5 shrink-0" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "h-5 w-5 shrink-0" }),
5455
6273
  Icon && /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5 shrink-0" }),
5456
- typeof section.title === "string" ? /* @__PURE__ */ jsx("span", { className: "truncate text-meta font-semibold uppercase tracking-wide", children: section.title }) : (
6274
+ typeof section.title === "string" ? /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-semibold uppercase tracking-wide", children: section.title }) : (
5457
6275
  // Custom node: rendered as-is so the consumer owns the
5458
6276
  // styling (icon, casing, colour, badges…).
5459
6277
  /* @__PURE__ */ jsx("span", { className: "flex min-w-0 flex-1 items-center", children: section.title })
@@ -5495,7 +6313,52 @@ function PanelStack({
5495
6313
  ) })
5496
6314
  );
5497
6315
  }
5498
- var PropertyList = React23.forwardRef(
6316
+ var TONE5 = {
6317
+ success: "text-success",
6318
+ muted: "text-muted-foreground",
6319
+ warning: "text-warning",
6320
+ destructive: "text-destructive"
6321
+ };
6322
+ var DEFAULT_TONE = {
6323
+ touched: "success",
6324
+ refused: "destructive",
6325
+ denied: "destructive"
6326
+ };
6327
+ var ADDRESS_TONE = {
6328
+ touched: "allowed",
6329
+ refused: "refused",
6330
+ denied: "denied",
6331
+ "never touched": "untouched",
6332
+ miss: "untouched"
6333
+ };
6334
+ var ParticipantRow = React25.forwardRef(({ address, verdict, note, tone, addressTone, className, ...props }, ref) => {
6335
+ const resolved = tone ?? DEFAULT_TONE[verdict] ?? "muted";
6336
+ return /* @__PURE__ */ jsxs(
6337
+ "div",
6338
+ {
6339
+ ref,
6340
+ className: cn(
6341
+ "flex min-w-0 items-baseline gap-2 border-border/55 border-t py-1 first:border-t-0",
6342
+ className
6343
+ ),
6344
+ ...props,
6345
+ children: [
6346
+ /* @__PURE__ */ jsx(
6347
+ AddressChip,
6348
+ {
6349
+ address,
6350
+ tone: addressTone ?? ADDRESS_TONE[verdict] ?? "allowed",
6351
+ className: "min-w-0 flex-1"
6352
+ }
6353
+ ),
6354
+ /* @__PURE__ */ jsx("span", { className: cn("shrink-0 text-sm", TONE5[resolved]), children: verdict }),
6355
+ note != null ? /* @__PURE__ */ jsx("span", { className: "max-w-[18rem] shrink-0 truncate text-sm text-muted-foreground", children: note }) : null
6356
+ ]
6357
+ }
6358
+ );
6359
+ });
6360
+ ParticipantRow.displayName = "ParticipantRow";
6361
+ var PropertyList = React25.forwardRef(
5499
6362
  ({ labelWidth = 78, className, style, children, ...props }, ref) => /* @__PURE__ */ jsx(
5500
6363
  "dl",
5501
6364
  {
@@ -5511,7 +6374,7 @@ var PropertyList = React23.forwardRef(
5511
6374
  )
5512
6375
  );
5513
6376
  PropertyList.displayName = "PropertyList";
5514
- var PropertyRow = React23.forwardRef(
6377
+ var PropertyRow = React25.forwardRef(
5515
6378
  ({ label, mono, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
5516
6379
  "div",
5517
6380
  {
@@ -5519,14 +6382,14 @@ var PropertyRow = React23.forwardRef(
5519
6382
  className: cn("flex items-baseline gap-2 py-1", className),
5520
6383
  ...props,
5521
6384
  children: [
5522
- /* @__PURE__ */ jsx("dt", { className: "shrink-0 truncate text-meta text-muted-foreground [width:var(--property-label-width,78px)]", children: label }),
5523
- /* @__PURE__ */ jsx("dd", { className: cn("min-w-0 flex-1", mono && "font-mono text-meta"), children })
6385
+ /* @__PURE__ */ jsx("dt", { className: "shrink-0 truncate text-sm text-muted-foreground [width:var(--property-label-width,78px)]", children: label }),
6386
+ /* @__PURE__ */ jsx("dd", { className: cn("min-w-0 flex-1", mono && "font-mono text-sm"), children })
5524
6387
  ]
5525
6388
  }
5526
6389
  )
5527
6390
  );
5528
6391
  PropertyRow.displayName = "PropertyRow";
5529
- var ProposalCard = React23.forwardRef(
6392
+ var ProposalCard = React25.forwardRef(
5530
6393
  ({
5531
6394
  title,
5532
6395
  source,
@@ -5542,23 +6405,23 @@ var ProposalCard = React23.forwardRef(
5542
6405
  /* @__PURE__ */ jsxs("section", { className: "flex flex-col gap-1", children: [
5543
6406
  /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
5544
6407
  /* @__PURE__ */ jsx("h4", { className: "font-medium", children: title }),
5545
- source != null ? /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: source }) : null
6408
+ source != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: source }) : null
5546
6409
  ] }),
5547
6410
  /* @__PURE__ */ jsx("div", { className: "border border-border bg-muted/30 p-2", children })
5548
6411
  ] }),
5549
6412
  evidence ? /* @__PURE__ */ jsxs("section", { className: "flex flex-col gap-1", children: [
5550
6413
  /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
5551
6414
  /* @__PURE__ */ jsx("h4", { className: "font-medium", children: evidenceTitle }),
5552
- evidenceMeta != null ? /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: evidenceMeta }) : null
6415
+ evidenceMeta != null ? /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: evidenceMeta }) : null
5553
6416
  ] }),
5554
6417
  /* @__PURE__ */ jsx("div", { className: "overflow-hidden border border-border", children: evidence })
5555
6418
  ] }) : null,
5556
- consequence != null ? /* @__PURE__ */ jsx("p", { className: "text-meta text-muted-foreground", children: consequence }) : null,
6419
+ consequence != null ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: consequence }) : null,
5557
6420
  actions ? /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-1.5", children: actions }) : null
5558
6421
  ] })
5559
6422
  );
5560
6423
  ProposalCard.displayName = "ProposalCard";
5561
- var DotRating = React23.forwardRef(
6424
+ var DotRating = React25.forwardRef(
5562
6425
  ({ value, max = 3, onChange, readOnly, label, className, ...props }, ref) => /* @__PURE__ */ jsx(
5563
6426
  "div",
5564
6427
  {
@@ -5603,7 +6466,7 @@ var DotRating = React23.forwardRef(
5603
6466
  )
5604
6467
  );
5605
6468
  DotRating.displayName = "DotRating";
5606
- var RatingControl = React23.forwardRef(
6469
+ var RatingControl = React25.forwardRef(
5607
6470
  ({
5608
6471
  verdict,
5609
6472
  onVerdictChange,
@@ -5622,7 +6485,7 @@ var RatingControl = React23.forwardRef(
5622
6485
  className: cn("flex flex-col gap-2 border border-border bg-card p-2", className),
5623
6486
  ...props,
5624
6487
  children: [
5625
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-meta", children: [
6488
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
5626
6489
  /* @__PURE__ */ jsx("span", { className: "font-medium", children: "Your verdict" }),
5627
6490
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "becomes a Learning" }),
5628
6491
  /* @__PURE__ */ jsx("span", { className: "flex-1" }),
@@ -5637,7 +6500,7 @@ var RatingControl = React23.forwardRef(
5637
6500
  "aria-checked": verdict === v,
5638
6501
  onClick: () => onVerdictChange?.(v),
5639
6502
  className: cn(
5640
- "h-[22px] px-2 text-meta capitalize",
6503
+ "h-[22px] px-2 text-sm capitalize",
5641
6504
  verdict === v ? v === "appreciate" ? "bg-success text-success-foreground" : "bg-warning text-warning-foreground" : "text-muted-foreground hover:bg-accent"
5642
6505
  ),
5643
6506
  children: v
@@ -5645,11 +6508,11 @@ var RatingControl = React23.forwardRef(
5645
6508
  v
5646
6509
  )) }),
5647
6510
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
5648
- /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: "weight" }),
6511
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "weight" }),
5649
6512
  /* @__PURE__ */ jsx(DotRating, { value: weight, max: maxWeight, onChange: onWeightChange }),
5650
- /* @__PURE__ */ jsx("span", { className: "text-meta tabular-nums", children: weight })
6513
+ /* @__PURE__ */ jsx("span", { className: "text-sm tabular-nums", children: weight })
5651
6514
  ] }),
5652
- refines != null ? /* @__PURE__ */ jsxs("span", { className: "text-meta text-muted-foreground", children: [
6515
+ refines != null ? /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
5653
6516
  "refines ",
5654
6517
  /* @__PURE__ */ jsx("span", { className: "text-foreground", children: refines })
5655
6518
  ] }) : null
@@ -5660,7 +6523,7 @@ var RatingControl = React23.forwardRef(
5660
6523
  )
5661
6524
  );
5662
6525
  RatingControl.displayName = "RatingControl";
5663
- var RecordHeader = React23.forwardRef(
6526
+ var RecordHeader = React25.forwardRef(
5664
6527
  ({ tone, crumbs, chips, actions, className, ...props }, ref) => /* @__PURE__ */ jsxs(
5665
6528
  "div",
5666
6529
  {
@@ -5674,7 +6537,7 @@ var RecordHeader = React23.forwardRef(
5674
6537
  tone ? /* @__PURE__ */ jsx(StatusDot, { tone, size: "lg" }) : null,
5675
6538
  /* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-1.5", children: crumbs.map((crumb, i) => {
5676
6539
  const last = i === crumbs.length - 1;
5677
- return /* @__PURE__ */ jsxs(React23.Fragment, { children: [
6540
+ return /* @__PURE__ */ jsxs(React25.Fragment, { children: [
5678
6541
  i > 0 ? /* @__PURE__ */ jsx(
5679
6542
  ChevronRight,
5680
6543
  {
@@ -5686,8 +6549,13 @@ var RecordHeader = React23.forwardRef(
5686
6549
  "span",
5687
6550
  {
5688
6551
  className: cn(
5689
- "min-w-0 truncate font-mono",
5690
- last ? "text-base font-semibold text-foreground" : "text-muted-foreground"
6552
+ "truncate font-mono",
6553
+ // The **last** crumb gives way first. It is the record's own
6554
+ // name and the longest of them, and the reader is already on
6555
+ // it; the parents are what say *which dashboard this is*, and
6556
+ // at four characters `runs` truncated to `ru…` leaves the one
6557
+ // question a crumb trail exists to answer unanswered.
6558
+ last ? "min-w-[6ch] shrink-[999] text-base font-semibold text-foreground" : "min-w-[3ch] text-muted-foreground"
5691
6559
  ),
5692
6560
  children: crumb
5693
6561
  }
@@ -5701,13 +6569,61 @@ var RecordHeader = React23.forwardRef(
5701
6569
  )
5702
6570
  );
5703
6571
  RecordHeader.displayName = "RecordHeader";
5704
- var RepairNote = React23.forwardRef(
6572
+ var RecordPager = React25.forwardRef(
6573
+ ({
6574
+ position,
6575
+ onPrevious,
6576
+ onNext,
6577
+ previousLabel = "Previous",
6578
+ nextLabel = "Next",
6579
+ className,
6580
+ ...props
6581
+ }, ref) => /* @__PURE__ */ jsxs(
6582
+ "div",
6583
+ {
6584
+ ref,
6585
+ className: cn("flex items-center gap-1.5", className),
6586
+ ...props,
6587
+ children: [
6588
+ position != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm text-muted-foreground", children: position }) : null,
6589
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
6590
+ /* @__PURE__ */ jsx(
6591
+ Button,
6592
+ {
6593
+ type: "button",
6594
+ variant: "ghost",
6595
+ size: "icon-xs",
6596
+ "aria-label": previousLabel,
6597
+ disabled: !onPrevious,
6598
+ onClick: onPrevious,
6599
+ children: /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": true })
6600
+ }
6601
+ ),
6602
+ /* @__PURE__ */ jsx(
6603
+ Button,
6604
+ {
6605
+ type: "button",
6606
+ variant: "ghost",
6607
+ size: "icon-xs",
6608
+ "aria-label": nextLabel,
6609
+ disabled: !onNext,
6610
+ onClick: onNext,
6611
+ children: /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": true })
6612
+ }
6613
+ )
6614
+ ] })
6615
+ ]
6616
+ }
6617
+ )
6618
+ );
6619
+ RecordPager.displayName = "RecordPager";
6620
+ var RepairNote = React25.forwardRef(
5705
6621
  ({ from, to, className, ...props }, ref) => /* @__PURE__ */ jsxs(
5706
6622
  "div",
5707
6623
  {
5708
6624
  ref,
5709
6625
  className: cn(
5710
- "flex flex-wrap items-center gap-1 py-0.5 pl-4 text-meta text-muted-foreground",
6626
+ "flex flex-wrap items-center gap-1 py-0.5 pl-4 text-sm text-muted-foreground",
5711
6627
  className
5712
6628
  ),
5713
6629
  ...props,
@@ -5720,13 +6636,13 @@ var RepairNote = React23.forwardRef(
5720
6636
  )
5721
6637
  );
5722
6638
  RepairNote.displayName = "RepairNote";
5723
- var RetryNote = React23.forwardRef(
6639
+ var RetryNote = React25.forwardRef(
5724
6640
  ({ attempt, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
5725
6641
  "div",
5726
6642
  {
5727
6643
  ref,
5728
6644
  className: cn(
5729
- "flex flex-wrap items-baseline gap-1.5 py-0.5 pl-4 text-meta text-muted-foreground",
6645
+ "flex flex-wrap items-baseline gap-1.5 py-0.5 pl-4 text-sm text-muted-foreground",
5730
6646
  className
5731
6647
  ),
5732
6648
  ...props,
@@ -5746,7 +6662,7 @@ function OptionRow({ option }) {
5746
6662
  /* @__PURE__ */ jsx("span", { className: "truncate", children: option.label }),
5747
6663
  option.badge != null && /* @__PURE__ */ jsx("span", { className: "ml-auto pl-2", children: option.badge })
5748
6664
  ] }),
5749
- option.description != null && /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: option.description })
6665
+ option.description != null && /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: option.description })
5750
6666
  ] });
5751
6667
  }
5752
6668
  function RichSelect({
@@ -5887,7 +6803,7 @@ function describeSlice(select, declared) {
5887
6803
  }
5888
6804
  return out;
5889
6805
  }
5890
- var SliceSummary = React23.forwardRef(
6806
+ var SliceSummary = React25.forwardRef(
5891
6807
  ({ select, declaredAxes, modelLabel, variant = "line", className, ...props }, ref) => {
5892
6808
  const lines = select ? describeSlice(select, declaredAxes) : [];
5893
6809
  if (!lines.length) {
@@ -5895,7 +6811,7 @@ var SliceSummary = React23.forwardRef(
5895
6811
  "div",
5896
6812
  {
5897
6813
  ref,
5898
- className: cn("text-meta text-muted-foreground/70", className),
6814
+ className: cn("text-sm text-muted-foreground/70", className),
5899
6815
  ...props,
5900
6816
  children: "not sliced \u2014 the whole model"
5901
6817
  }
@@ -5916,13 +6832,13 @@ var SliceSummary = React23.forwardRef(
5916
6832
  "span",
5917
6833
  {
5918
6834
  className: cn(
5919
- "truncate text-meta",
6835
+ "truncate text-sm",
5920
6836
  line.undeclared ? "text-destructive line-through decoration-destructive/50" : "text-muted-foreground"
5921
6837
  ),
5922
6838
  children: line.text
5923
6839
  }
5924
6840
  ),
5925
- line.undeclared ? /* @__PURE__ */ jsxs("span", { className: "text-meta text-destructive", children: [
6841
+ line.undeclared ? /* @__PURE__ */ jsxs("span", { className: "text-sm text-destructive", children: [
5926
6842
  modelLabel ?? "this model",
5927
6843
  " declares no ",
5928
6844
  line.axisKind,
@@ -5934,7 +6850,7 @@ var SliceSummary = React23.forwardRef(
5934
6850
  }
5935
6851
  );
5936
6852
  SliceSummary.displayName = "SliceSummary";
5937
- var RuleRow = React23.forwardRef(
6853
+ var RuleRow = React25.forwardRef(
5938
6854
  ({ match, allow, properties, select, egress, readOnly, className, ...props }, ref) => {
5939
6855
  const excluded = properties?.exclude ?? [];
5940
6856
  const sends = egress?.may_send ?? [];
@@ -5961,7 +6877,7 @@ var RuleRow = React23.forwardRef(
5961
6877
  "span",
5962
6878
  {
5963
6879
  className: cn(
5964
- "font-mono text-meta",
6880
+ "font-mono text-sm",
5965
6881
  allow ? "text-muted-foreground" : "font-semibold text-destructive"
5966
6882
  ),
5967
6883
  children: allow ? "allow" : "deny"
@@ -5976,12 +6892,12 @@ var RuleRow = React23.forwardRef(
5976
6892
  }
5977
6893
  ),
5978
6894
  excluded.length || sliced || sends.length ? /* @__PURE__ */ jsxs("div", { className: "col-start-2 flex min-w-0 flex-col gap-0.5", children: [
5979
- excluded.length ? /* @__PURE__ */ jsxs("span", { className: "truncate text-meta text-muted-foreground", children: [
6895
+ excluded.length ? /* @__PURE__ */ jsxs("span", { className: "truncate text-sm text-muted-foreground", children: [
5980
6896
  "excludes ",
5981
6897
  excluded.join(", ")
5982
6898
  ] }) : null,
5983
6899
  sliced ? /* @__PURE__ */ jsx(SliceSummary, { select, variant: "line" }) : null,
5984
- sends.length ? /* @__PURE__ */ jsxs("span", { className: "truncate text-meta text-muted-foreground", children: [
6900
+ sends.length ? /* @__PURE__ */ jsxs("span", { className: "truncate text-sm text-muted-foreground", children: [
5985
6901
  "may send ",
5986
6902
  sends.join(", ")
5987
6903
  ] }) : null
@@ -5992,6 +6908,111 @@ var RuleRow = React23.forwardRef(
5992
6908
  }
5993
6909
  );
5994
6910
  RuleRow.displayName = "RuleRow";
6911
+ var TONE6 = {
6912
+ queued: "queued",
6913
+ running: "running",
6914
+ succeeded: "success",
6915
+ failed: "error",
6916
+ cancelled: "muted",
6917
+ cannot_answer: "warning",
6918
+ awaiting_approval: "warning",
6919
+ skipped: "muted",
6920
+ held: "muted",
6921
+ purged: "muted"
6922
+ };
6923
+ var TEXT = {
6924
+ running: "text-info",
6925
+ success: "text-success",
6926
+ warning: "text-warning",
6927
+ error: "text-destructive",
6928
+ info: "text-info",
6929
+ queued: "text-muted-foreground",
6930
+ muted: "text-muted-foreground"
6931
+ };
6932
+ var RunStatusText = React25.forwardRef(({ status, tone, dot, label, className, ...props }, ref) => {
6933
+ const resolved = tone ?? TONE6[status] ?? "muted";
6934
+ return /* @__PURE__ */ jsxs(
6935
+ "span",
6936
+ {
6937
+ ref,
6938
+ className: cn(
6939
+ "inline-flex min-w-0 items-center gap-1.5",
6940
+ TEXT[resolved],
6941
+ className
6942
+ ),
6943
+ ...props,
6944
+ children: [
6945
+ dot ? /* @__PURE__ */ jsx(StatusDot, { tone: resolved }) : null,
6946
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: label ?? status })
6947
+ ]
6948
+ }
6949
+ );
6950
+ });
6951
+ RunStatusText.displayName = "RunStatusText";
6952
+ var RunRow = React25.forwardRef(
6953
+ ({
6954
+ status,
6955
+ tone,
6956
+ kind,
6957
+ address,
6958
+ title,
6959
+ meta,
6960
+ aside,
6961
+ depth = 0,
6962
+ selected,
6963
+ onSelect,
6964
+ className,
6965
+ ...props
6966
+ }, ref) => {
6967
+ const Row = onSelect ? "button" : "div";
6968
+ return /* @__PURE__ */ jsx(
6969
+ "div",
6970
+ {
6971
+ ref,
6972
+ className: cn(
6973
+ "border-b border-border/55",
6974
+ selected && "bg-accent shadow-[inset_2px_0_0_var(--color-primary)]",
6975
+ className
6976
+ ),
6977
+ ...props,
6978
+ children: /* @__PURE__ */ jsxs(
6979
+ Row,
6980
+ {
6981
+ type: onSelect ? "button" : void 0,
6982
+ onClick: onSelect,
6983
+ "aria-current": onSelect && selected ? "true" : void 0,
6984
+ style: { paddingLeft: 12 + depth * 18 },
6985
+ className: cn(
6986
+ "flex w-full items-start gap-2 py-1.5 pr-3 text-left",
6987
+ onSelect && "cursor-pointer hover:bg-accent/60 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-ring"
6988
+ ),
6989
+ children: [
6990
+ /* @__PURE__ */ jsx(
6991
+ StatusDot,
6992
+ {
6993
+ tone: tone ?? TONE6[status] ?? "muted",
6994
+ size: "md",
6995
+ className: "mt-1.5",
6996
+ label: typeof status === "string" ? status : void 0
6997
+ }
6998
+ ),
6999
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col", children: [
7000
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5", children: [
7001
+ kind ? /* @__PURE__ */ jsx(KindChip, { kind }) : null,
7002
+ address != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono", children: address }) : null,
7003
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: title })
7004
+ ] }),
7005
+ meta != null ? /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-muted-foreground", children: meta }) : null
7006
+ ] }),
7007
+ aside != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 pt-0.5 text-sm text-muted-foreground", children: aside }) : null
7008
+ ]
7009
+ }
7010
+ )
7011
+ }
7012
+ );
7013
+ }
7014
+ );
7015
+ RunRow.displayName = "RunRow";
5995
7016
  var SearchInput = ({
5996
7017
  value,
5997
7018
  onChange,
@@ -6011,14 +7032,14 @@ var SearchInput = ({
6011
7032
  "flex w-full rounded-control border border-input bg-background ring-offset-background",
6012
7033
  "placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2",
6013
7034
  "focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
6014
- inputSize === "sm" ? "h-[26px] px-2 py-0 text-meta" : "h-10 px-3 py-2 text-base",
7035
+ inputSize === "sm" ? "h-[26px] px-2 py-0 text-sm" : "h-10 px-3 py-2 text-base",
6015
7036
  className
6016
7037
  ),
6017
7038
  ...props
6018
7039
  }
6019
7040
  );
6020
7041
  };
6021
- var SectionHeader = React23.forwardRef(({ icon, title, count, actions, bare, className, ...props }, ref) => /* @__PURE__ */ jsxs(
7042
+ var SectionHeader = React25.forwardRef(({ icon, title, count, actions, bare, className, ...props }, ref) => /* @__PURE__ */ jsxs(
6022
7043
  "div",
6023
7044
  {
6024
7045
  ref,
@@ -6031,13 +7052,13 @@ var SectionHeader = React23.forwardRef(({ icon, title, count, actions, bare, cla
6031
7052
  children: [
6032
7053
  icon ? /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center text-muted-foreground [&_svg]:size-3.5", children: icon }) : null,
6033
7054
  /* @__PURE__ */ jsx("span", { className: "flex-1 truncate font-medium", children: title }),
6034
- count != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-meta text-muted-foreground", children: count }) : null,
7055
+ count != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm text-muted-foreground", children: count }) : null,
6035
7056
  actions ? /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center gap-1", children: actions }) : null
6036
7057
  ]
6037
7058
  }
6038
7059
  ));
6039
7060
  SectionHeader.displayName = "SectionHeader";
6040
- var Sparkline = React23.forwardRef(
7061
+ var Sparkline = React25.forwardRef(
6041
7062
  ({
6042
7063
  values,
6043
7064
  width = 72,
@@ -6124,7 +7145,7 @@ function TabbedPanel({
6124
7145
  footerClassName,
6125
7146
  footerContent
6126
7147
  }) {
6127
- const [internalTab, setInternalTab] = React23__default.useState(defaultTab || tabs[0]?.value);
7148
+ const [internalTab, setInternalTab] = React25__default.useState(defaultTab || tabs[0]?.value);
6128
7149
  const currentTab = activeTab !== void 0 ? activeTab : internalTab;
6129
7150
  const handleTabChange = (value) => {
6130
7151
  if (activeTab === void 0) {
@@ -6132,9 +7153,9 @@ function TabbedPanel({
6132
7153
  }
6133
7154
  onTabChange?.(value);
6134
7155
  };
6135
- const uid = React23__default.useId();
7156
+ const uid = React25__default.useId();
6136
7157
  const panelId = (value) => `${uid}-panel-${value}`;
6137
- const items = React23__default.useMemo(
7158
+ const items = React25__default.useMemo(
6138
7159
  () => tabs.map((tab) => ({
6139
7160
  key: tab.value,
6140
7161
  name: tab.name ?? (typeof tab.label === "string" ? tab.label : tab.value),
@@ -6220,9 +7241,9 @@ var STATUS_LABEL = {
6220
7241
  };
6221
7242
  function renderResult(result) {
6222
7243
  if (result == null) return null;
6223
- if (React23.isValidElement(result)) return result;
7244
+ if (React25.isValidElement(result)) return result;
6224
7245
  if (typeof result !== "object") {
6225
- return /* @__PURE__ */ jsx("span", { className: "font-mono text-meta", children: String(result) });
7246
+ return /* @__PURE__ */ jsx("span", { className: "font-mono text-sm", children: String(result) });
6226
7247
  }
6227
7248
  const entries = Object.entries(result);
6228
7249
  const scalars = entries.filter(([, v]) => v == null || typeof v !== "object");
@@ -6230,12 +7251,12 @@ function renderResult(result) {
6230
7251
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6231
7252
  scalars.length ? /* @__PURE__ */ jsx(PropertyList, { labelWidth: 96, children: scalars.map(([k, v]) => /* @__PURE__ */ jsx(PropertyRow, { label: k, mono: true, className: "py-0.5", children: v == null ? "\u2014" : String(v) }, k)) }) : null,
6232
7253
  nested.map(([k, v]) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
6233
- /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: k }),
6234
- /* @__PURE__ */ jsx("pre", { className: "max-h-40 overflow-auto border border-border bg-muted/40 p-1.5 font-mono text-meta", children: JSON.stringify(v, null, 2) })
7254
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: k }),
7255
+ /* @__PURE__ */ jsx("pre", { className: "max-h-40 overflow-auto border border-border bg-muted/40 p-1.5 font-mono text-sm", children: JSON.stringify(v, null, 2) })
6235
7256
  ] }, k))
6236
7257
  ] });
6237
7258
  }
6238
- var TaskGanttDetailCard = React23.forwardRef(({ task, elapsedMs, formatDuration = defaultFormatDuration, className, ...props }, ref) => {
7259
+ var TaskGanttDetailCard = React25.forwardRef(({ task, elapsedMs, formatDuration = defaultFormatDuration, className, ...props }, ref) => {
6239
7260
  const status = task.status ?? "succeeded";
6240
7261
  const ms = task.durationMs ?? elapsedMs;
6241
7262
  const duration = task.duration ?? (ms != null ? formatDuration(ms) : "\u2014");
@@ -6243,17 +7264,17 @@ var TaskGanttDetailCard = React23.forwardRef(({ task, elapsedMs, formatDuration
6243
7264
  return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col gap-2", className), ...props, children: [
6244
7265
  /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
6245
7266
  /* @__PURE__ */ jsx(StatusDot, { tone: DOT[status], size: "md", className: "translate-y-px" }),
6246
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-mono text-meta font-medium", children: task.key }),
6247
- /* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono text-meta text-muted-foreground tabular-nums", children: duration })
7267
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-mono text-sm font-medium", children: task.key }),
7268
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono text-sm text-muted-foreground tabular-nums", children: duration })
6248
7269
  ] }),
6249
- /* @__PURE__ */ jsxs("div", { className: "text-meta text-muted-foreground", children: [
7270
+ /* @__PURE__ */ jsxs("div", { className: "text-sm text-muted-foreground", children: [
6250
7271
  STATUS_LABEL[status],
6251
7272
  task.summary != null ? /* @__PURE__ */ jsxs(Fragment, { children: [
6252
7273
  " \xB7 ",
6253
7274
  task.summary
6254
7275
  ] }) : null
6255
7276
  ] }),
6256
- attempts.length ? /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5", children: attempts.map((a, i) => /* @__PURE__ */ jsxs("span", { className: "text-meta text-muted-foreground", children: [
7277
+ attempts.length ? /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5", children: attempts.map((a, i) => /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
6257
7278
  /* @__PURE__ */ jsxs("span", { className: "font-medium text-warning", children: [
6258
7279
  "attempt ",
6259
7280
  i + 1
@@ -6267,14 +7288,14 @@ var TaskGanttDetailCard = React23.forwardRef(({ task, elapsedMs, formatDuration
6267
7288
  style: { borderColor: "var(--color-destructive)" },
6268
7289
  className: "border-l-2 bg-destructive/10 px-2 py-1.5",
6269
7290
  children: [
6270
- task.error.code != null ? /* @__PURE__ */ jsx("div", { className: "font-mono text-meta font-medium text-destructive", children: task.error.code }) : null,
6271
- task.error.message != null ? /* @__PURE__ */ jsx("div", { className: "text-meta", children: task.error.message }) : null,
6272
- task.error.detail != null ? /* @__PURE__ */ jsx("pre", { className: "mt-1 max-h-32 overflow-auto whitespace-pre-wrap font-mono text-meta text-muted-foreground", children: task.error.detail }) : null
7291
+ task.error.code != null ? /* @__PURE__ */ jsx("div", { className: "font-mono text-sm font-medium text-destructive", children: task.error.code }) : null,
7292
+ task.error.message != null ? /* @__PURE__ */ jsx("div", { className: "text-sm", children: task.error.message }) : null,
7293
+ task.error.detail != null ? /* @__PURE__ */ jsx("pre", { className: "mt-1 max-h-32 overflow-auto whitespace-pre-wrap font-mono text-sm text-muted-foreground", children: task.error.detail }) : null
6273
7294
  ]
6274
7295
  }
6275
7296
  ) : null,
6276
7297
  task.result != null ? renderResult(task.result) : null,
6277
- task.log != null ? /* @__PURE__ */ jsx("div", { className: "border-t border-border pt-1.5 font-mono text-meta text-muted-foreground", children: task.log }) : null
7298
+ task.log != null ? /* @__PURE__ */ jsx("div", { className: "border-t border-border pt-1.5 font-mono text-sm text-muted-foreground", children: task.log }) : null
6278
7299
  ] });
6279
7300
  });
6280
7301
  TaskGanttDetailCard.displayName = "TaskGanttDetailCard";
@@ -6301,7 +7322,7 @@ function place(seg, origin) {
6301
7322
  }
6302
7323
  return { start, duration: duration != null && duration > 0 ? duration : 0 };
6303
7324
  }
6304
- var TaskGantt = React23.forwardRef(
7325
+ var TaskGantt = React25.forwardRef(
6305
7326
  ({
6306
7327
  tasks,
6307
7328
  origin,
@@ -6323,7 +7344,7 @@ var TaskGantt = React23.forwardRef(
6323
7344
  }, ref) => {
6324
7345
  const barHeight = density === "compact" ? 11 : 13;
6325
7346
  const durationWidth = 40;
6326
- const rows = React23.useMemo(() => {
7347
+ const rows = React25.useMemo(() => {
6327
7348
  const stamps = [];
6328
7349
  for (const t of [...tasks, ...tasks.flatMap((t2) => t2.attempts ?? [])]) {
6329
7350
  if (t.startedAt != null) stamps.push(toMs(t.startedAt));
@@ -6369,7 +7390,7 @@ var TaskGantt = React23.forwardRef(
6369
7390
  /* @__PURE__ */ jsx("span", { className: "flex flex-1", children: axis.slice(0, -1).map((label, i) => /* @__PURE__ */ jsx(
6370
7391
  "span",
6371
7392
  {
6372
- className: "flex-1 border-l border-border pl-1 text-meta text-muted-foreground tabular-nums",
7393
+ className: "flex-1 border-l border-border pl-1 text-sm text-muted-foreground tabular-nums",
6373
7394
  children: label
6374
7395
  },
6375
7396
  i
@@ -6377,7 +7398,7 @@ var TaskGantt = React23.forwardRef(
6377
7398
  /* @__PURE__ */ jsx(
6378
7399
  "span",
6379
7400
  {
6380
- className: "shrink-0 text-right text-meta text-muted-foreground tabular-nums",
7401
+ className: "shrink-0 text-right text-sm text-muted-foreground tabular-nums",
6381
7402
  style: { width: durationWidth },
6382
7403
  children: lastLabel
6383
7404
  }
@@ -6395,7 +7416,7 @@ var TaskGantt = React23.forwardRef(
6395
7416
  "span",
6396
7417
  {
6397
7418
  className: cn(
6398
- "shrink-0 truncate font-mono text-meta",
7419
+ "shrink-0 truncate font-mono text-sm",
6399
7420
  neverRan && "text-muted-foreground"
6400
7421
  ),
6401
7422
  style: { width: labelWidth },
@@ -6436,7 +7457,7 @@ var TaskGantt = React23.forwardRef(
6436
7457
  /* @__PURE__ */ jsx(
6437
7458
  "span",
6438
7459
  {
6439
- className: "shrink-0 text-right font-mono text-meta text-muted-foreground tabular-nums",
7460
+ className: "shrink-0 text-right font-mono text-sm text-muted-foreground tabular-nums",
6440
7461
  style: { width: durationWidth },
6441
7462
  children: duration
6442
7463
  }
@@ -6484,8 +7505,23 @@ var TaskGantt = React23.forwardRef(
6484
7505
  }
6485
7506
  );
6486
7507
  TaskGantt.displayName = "TaskGantt";
6487
- var TaskNode = React23.forwardRef(
6488
- ({ taskKey, bound, status, tags, meta, selected, gate, dim, ghost, className, ...props }, ref) => {
7508
+ var TaskNode = React25.forwardRef(
7509
+ ({
7510
+ taskKey,
7511
+ bound,
7512
+ boundSwatch,
7513
+ boundPalette,
7514
+ status,
7515
+ tags,
7516
+ meta,
7517
+ selected,
7518
+ readOnly,
7519
+ gate,
7520
+ dim,
7521
+ ghost,
7522
+ className,
7523
+ ...props
7524
+ }, ref) => {
6489
7525
  if (ghost) {
6490
7526
  return /* @__PURE__ */ jsxs(
6491
7527
  "div",
@@ -6493,7 +7529,7 @@ var TaskNode = React23.forwardRef(
6493
7529
  ref,
6494
7530
  className: cn(
6495
7531
  "flex w-[146px] flex-col gap-1 border border-dashed border-border p-2",
6496
- "text-meta text-muted-foreground",
7532
+ "text-sm text-muted-foreground",
6497
7533
  className
6498
7534
  ),
6499
7535
  ...props,
@@ -6519,7 +7555,7 @@ var TaskNode = React23.forwardRef(
6519
7555
  ),
6520
7556
  ...props,
6521
7557
  children: [
6522
- selected ? ["-left-1 -top-1", "-right-1 -top-1", "-bottom-1 -left-1", "-bottom-1 -right-1"].map(
7558
+ selected && !readOnly ? ["-left-1 -top-1", "-right-1 -top-1", "-bottom-1 -left-1", "-bottom-1 -right-1"].map(
6523
7559
  (pos) => /* @__PURE__ */ jsx(
6524
7560
  "span",
6525
7561
  {
@@ -6534,12 +7570,12 @@ var TaskNode = React23.forwardRef(
6534
7570
  /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate font-mono", children: taskKey })
6535
7571
  ] }),
6536
7572
  /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
6537
- /* @__PURE__ */ jsx(BoundChip, { bound }),
7573
+ /* @__PURE__ */ jsx(BoundChip, { bound, swatch: boundSwatch, palette: boundPalette }),
6538
7574
  tags?.map((tag, i) => /* @__PURE__ */ jsx(
6539
7575
  "span",
6540
7576
  {
6541
7577
  className: cn(
6542
- "shrink-0 border px-1 text-meta",
7578
+ "shrink-0 border px-1 text-sm",
6543
7579
  tag.tone === "warning" ? "border-warning/40 text-warning" : "border-border text-muted-foreground"
6544
7580
  ),
6545
7581
  children: tag.label
@@ -6551,7 +7587,7 @@ var TaskNode = React23.forwardRef(
6551
7587
  "div",
6552
7588
  {
6553
7589
  className: cn(
6554
- "truncate text-meta",
7590
+ "truncate text-sm",
6555
7591
  gate ? "text-warning" : "text-muted-foreground"
6556
7592
  ),
6557
7593
  children: meta
@@ -6563,14 +7599,14 @@ var TaskNode = React23.forwardRef(
6563
7599
  }
6564
7600
  );
6565
7601
  TaskNode.displayName = "TaskNode";
6566
- var TemplatePicker = React23.forwardRef(({ heading, options, value, onSelect, footnote, className, ...props }, ref) => /* @__PURE__ */ jsxs(
7602
+ var TemplatePicker = React25.forwardRef(({ heading, options, value, onSelect, footnote, className, ...props }, ref) => /* @__PURE__ */ jsxs(
6567
7603
  "div",
6568
7604
  {
6569
7605
  ref,
6570
7606
  className: cn("flex w-full flex-col border border-border bg-card", className),
6571
7607
  ...props,
6572
7608
  children: [
6573
- heading != null ? /* @__PURE__ */ jsx("div", { className: "flex h-6 shrink-0 items-center border-b border-border px-2 text-meta text-muted-foreground", children: heading }) : null,
7609
+ heading != null ? /* @__PURE__ */ jsx("div", { className: "flex h-6 shrink-0 items-center border-b border-border px-2 text-sm text-muted-foreground", children: heading }) : null,
6574
7610
  /* @__PURE__ */ jsx("div", { role: "listbox", className: "flex flex-col", children: options.map((o) => {
6575
7611
  const disabled = o.unavailable != null;
6576
7612
  const selected = value === o.id;
@@ -6589,16 +7625,16 @@ var TemplatePicker = React23.forwardRef(({ heading, options, value, onSelect, fo
6589
7625
  ),
6590
7626
  children: [
6591
7627
  /* @__PURE__ */ jsx("span", { className: "w-3 shrink-0 text-primary", children: selected ? "\u2022" : "" }),
6592
- /* @__PURE__ */ jsx("span", { className: "truncate font-mono text-meta", children: o.id }),
6593
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-meta text-muted-foreground", children: o.kind }),
7628
+ /* @__PURE__ */ jsx("span", { className: "truncate font-mono text-sm", children: o.id }),
7629
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm text-muted-foreground", children: o.kind }),
6594
7630
  /* @__PURE__ */ jsx("span", { className: "flex-1" }),
6595
- /* @__PURE__ */ jsx("span", { className: "shrink-0 truncate text-meta text-muted-foreground", children: o.unavailable ?? o.note })
7631
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 truncate text-sm text-muted-foreground", children: o.unavailable ?? o.note })
6596
7632
  ]
6597
7633
  },
6598
7634
  o.id
6599
7635
  );
6600
7636
  }) }),
6601
- footnote != null ? /* @__PURE__ */ jsx("div", { className: "border-t border-border px-2 py-1 text-meta text-muted-foreground", children: footnote }) : null
7637
+ footnote != null ? /* @__PURE__ */ jsx("div", { className: "border-t border-border px-2 py-1 text-sm text-muted-foreground", children: footnote }) : null
6602
7638
  ]
6603
7639
  }
6604
7640
  ));
@@ -6614,14 +7650,14 @@ var MARKER = {
6614
7650
  output: "\u2192",
6615
7651
  comment: "#"
6616
7652
  };
6617
- var Terminal = React23.forwardRef(
7653
+ var Terminal = React25.forwardRef(
6618
7654
  ({ cursor, columnTemplate = "150px minmax(0,1fr) auto auto", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
6619
7655
  "div",
6620
7656
  {
6621
7657
  ref,
6622
7658
  style: { "--terminal-cols": columnTemplate },
6623
7659
  className: cn(
6624
- "overflow-x-auto border border-border bg-muted/40 p-2 font-mono text-meta",
7660
+ "overflow-x-auto border border-border bg-muted/40 p-2 font-mono text-sm",
6625
7661
  className
6626
7662
  ),
6627
7663
  ...props,
@@ -6639,7 +7675,7 @@ var Terminal = React23.forwardRef(
6639
7675
  )
6640
7676
  );
6641
7677
  Terminal.displayName = "Terminal";
6642
- var TerminalLine = React23.forwardRef(
7678
+ var TerminalLine = React25.forwardRef(
6643
7679
  ({ kind = "output", level, levelColumn = 1, columns, className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
6644
7680
  "div",
6645
7681
  {
@@ -6670,7 +7706,7 @@ var TerminalLine = React23.forwardRef(
6670
7706
  "min-w-0 truncate",
6671
7707
  // A log tints its level cell and greys everything that is not the
6672
7708
  // message; a transcript greys only its trailing cell.
6673
- level ? i === levelColumn ? LEVEL[level] : i === columns.length - 1 ? void 0 : "text-muted-foreground" : i === columns.length - 1 && "text-muted-foreground"
7709
+ level ? i === levelColumn ? LEVEL[level] ?? "text-muted-foreground" : i === columns.length - 1 ? void 0 : "text-muted-foreground" : i === columns.length - 1 && "text-muted-foreground"
6674
7710
  ),
6675
7711
  children: c
6676
7712
  },
@@ -6681,10 +7717,10 @@ var TerminalLine = React23.forwardRef(
6681
7717
  )
6682
7718
  );
6683
7719
  TerminalLine.displayName = "TerminalLine";
6684
- var TimelineVariantContext = React23.createContext("columns");
7720
+ var TimelineVariantContext = React25.createContext("columns");
6685
7721
  var RAIL_MARKER_OFFSET = "h-[0.692rem]";
6686
7722
  var RAIL_FOOTER_TAIL = "h-[1.067rem]";
6687
- var TimelineList = React23.forwardRef(({ className, variant = "columns", children, ...props }, ref) => /* @__PURE__ */ jsx(TimelineVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx("ol", { ref, className: cn("flex flex-col", className), ...props, children }) }));
7723
+ var TimelineList = React25.forwardRef(({ className, variant = "columns", children, ...props }, ref) => /* @__PURE__ */ jsx(TimelineVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx("ol", { ref, className: cn("flex flex-col", className), ...props, children }) }));
6688
7724
  TimelineList.displayName = "TimelineList";
6689
7725
  function RailGutter({ marker }) {
6690
7726
  return /* @__PURE__ */ jsxs("span", { className: "flex w-2.5 shrink-0 flex-col items-center", children: [
@@ -6708,8 +7744,8 @@ function RailGutter({ marker }) {
6708
7744
  )
6709
7745
  ] });
6710
7746
  }
6711
- var TimelineEntry = React23.forwardRef(({ when, title, marker, className, children, ...props }, ref) => {
6712
- const variant = React23.useContext(TimelineVariantContext);
7747
+ var TimelineEntry = React25.forwardRef(({ when, title, marker, className, children, ...props }, ref) => {
7748
+ const variant = React25.useContext(TimelineVariantContext);
6713
7749
  if (variant === "rail") {
6714
7750
  return /* @__PURE__ */ jsxs(
6715
7751
  "li",
@@ -6720,7 +7756,7 @@ var TimelineEntry = React23.forwardRef(({ when, title, marker, className, childr
6720
7756
  children: [
6721
7757
  /* @__PURE__ */ jsx(RailGutter, { marker }),
6722
7758
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5 pb-4 group-last/entry:pb-0", children: [
6723
- /* @__PURE__ */ jsx("span", { className: "text-meta text-muted-foreground", children: when }),
7759
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: when }),
6724
7760
  title != null ? /* @__PURE__ */ jsx("span", { className: "font-medium", children: title }) : null,
6725
7761
  children
6726
7762
  ] })
@@ -6735,7 +7771,7 @@ var TimelineEntry = React23.forwardRef(({ when, title, marker, className, childr
6735
7771
  className: cn("flex gap-2 border-b border-border py-1.5 last:border-b-0", className),
6736
7772
  ...props,
6737
7773
  children: [
6738
- /* @__PURE__ */ jsxs("span", { className: "flex w-[72px] shrink-0 items-baseline gap-1.5 text-meta text-muted-foreground", children: [
7774
+ /* @__PURE__ */ jsxs("span", { className: "flex w-[72px] shrink-0 items-baseline gap-1.5 text-sm text-muted-foreground", children: [
6739
7775
  marker ? /* @__PURE__ */ jsx("span", { className: "translate-y-1", children: marker }) : null,
6740
7776
  /* @__PURE__ */ jsx("span", { className: "truncate", children: when })
6741
7777
  ] }),
@@ -6748,8 +7784,8 @@ var TimelineEntry = React23.forwardRef(({ when, title, marker, className, childr
6748
7784
  );
6749
7785
  });
6750
7786
  TimelineEntry.displayName = "TimelineEntry";
6751
- var TimelineFooter = React23.forwardRef(({ className, children, ...props }, ref) => {
6752
- const variant = React23.useContext(TimelineVariantContext);
7787
+ var TimelineFooter = React25.forwardRef(({ className, children, ...props }, ref) => {
7788
+ const variant = React25.useContext(TimelineVariantContext);
6753
7789
  if (variant === "rail") {
6754
7790
  return /* @__PURE__ */ jsxs(
6755
7791
  "li",
@@ -6786,6 +7822,66 @@ var Toolbar = () => {
6786
7822
  /* @__PURE__ */ jsx("div", { children: "Source" })
6787
7823
  ] });
6788
7824
  };
7825
+ var TouchStrip = React25.forwardRef(
7826
+ ({ items, palette, className, ...props }, ref) => /* @__PURE__ */ jsx(
7827
+ "div",
7828
+ {
7829
+ ref,
7830
+ role: "list",
7831
+ className: cn("flex flex-wrap gap-2", className),
7832
+ ...props,
7833
+ children: items.map((item) => {
7834
+ const paint = layerPaint(palette, item.layer);
7835
+ return /* @__PURE__ */ jsxs(
7836
+ "div",
7837
+ {
7838
+ role: "listitem",
7839
+ className: cn(
7840
+ "flex min-w-0 flex-1 flex-col gap-px rounded-control border border-border bg-card px-2 py-1",
7841
+ item.dim && "opacity-55"
7842
+ ),
7843
+ children: [
7844
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5", children: [
7845
+ /* @__PURE__ */ jsx(
7846
+ "span",
7847
+ {
7848
+ "aria-hidden": true,
7849
+ className: cn(
7850
+ "size-1.5 shrink-0 rounded-full",
7851
+ item.dim ? "bg-muted-foreground" : paint.swatch
7852
+ )
7853
+ }
7854
+ ),
7855
+ /* @__PURE__ */ jsx(
7856
+ "span",
7857
+ {
7858
+ className: cn(
7859
+ "min-w-0 truncate",
7860
+ item.dim && "text-muted-foreground"
7861
+ ),
7862
+ children: item.label ?? layerLabel(item.layer)
7863
+ }
7864
+ )
7865
+ ] }),
7866
+ item.note != null ? /* @__PURE__ */ jsx(
7867
+ "span",
7868
+ {
7869
+ className: cn(
7870
+ "truncate font-mono text-xs text-muted-foreground",
7871
+ item.refused && "line-through"
7872
+ ),
7873
+ children: item.note
7874
+ }
7875
+ ) : null
7876
+ ]
7877
+ },
7878
+ String(item.layer)
7879
+ );
7880
+ })
7881
+ }
7882
+ )
7883
+ );
7884
+ TouchStrip.displayName = "TouchStrip";
6789
7885
  function useTour(options) {
6790
7886
  const {
6791
7887
  steps,
@@ -6795,11 +7891,11 @@ function useTour(options) {
6795
7891
  onComplete,
6796
7892
  onExit
6797
7893
  } = options;
6798
- const [current, setCurrent] = React23.useState(initialStep);
7894
+ const [current, setCurrent] = React25.useState(initialStep);
6799
7895
  const total = steps.length;
6800
7896
  const lastIndex = Math.max(total - 1, 0);
6801
7897
  const clamped = Math.min(Math.max(current, 0), lastIndex);
6802
- const goTo = React23.useCallback(
7898
+ const goTo = React25.useCallback(
6803
7899
  (index) => {
6804
7900
  setCurrent((prev2) => {
6805
7901
  const next2 = Math.min(Math.max(index, 0), lastIndex);
@@ -6809,7 +7905,7 @@ function useTour(options) {
6809
7905
  },
6810
7906
  [lastIndex, onStepChange]
6811
7907
  );
6812
- const next = React23.useCallback(() => {
7908
+ const next = React25.useCallback(() => {
6813
7909
  setCurrent((prev2) => {
6814
7910
  if (prev2 >= lastIndex) {
6815
7911
  if (loop && total > 0) {
@@ -6823,7 +7919,7 @@ function useTour(options) {
6823
7919
  return prev2 + 1;
6824
7920
  });
6825
7921
  }, [lastIndex, total, loop, onComplete, onStepChange]);
6826
- const prev = React23.useCallback(() => {
7922
+ const prev = React25.useCallback(() => {
6827
7923
  setCurrent((p) => {
6828
7924
  if (p <= 0) {
6829
7925
  if (loop && total > 0) {
@@ -6836,10 +7932,10 @@ function useTour(options) {
6836
7932
  return p - 1;
6837
7933
  });
6838
7934
  }, [lastIndex, total, loop, onStepChange]);
6839
- const exit = React23.useCallback(() => {
7935
+ const exit = React25.useCallback(() => {
6840
7936
  onExit?.();
6841
7937
  }, [onExit]);
6842
- return React23.useMemo(
7938
+ return React25.useMemo(
6843
7939
  () => ({
6844
7940
  step: steps[clamped],
6845
7941
  current: clamped,
@@ -6897,7 +7993,7 @@ function Tour({
6897
7993
  /* @__PURE__ */ jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 p-3", children: [
6898
7994
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
6899
7995
  /* @__PURE__ */ jsx(Badge, { variant: "soft", className: "tracking-wider", children: badgeLabel }),
6900
- showCounter && /* @__PURE__ */ jsxs("span", { className: "text-meta text-muted-foreground", children: [
7996
+ showCounter && /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
6901
7997
  current + 1,
6902
7998
  " / ",
6903
7999
  total
@@ -6908,7 +8004,7 @@ function Tour({
6908
8004
  {
6909
8005
  variant: "ghost",
6910
8006
  size: "sm",
6911
- className: "-mr-1 h-7 gap-1 px-2 text-meta text-muted-foreground [&_svg]:size-3.5",
8007
+ className: "-mr-1 h-7 gap-1 px-2 text-sm text-muted-foreground [&_svg]:size-3.5",
6912
8008
  onClick: ctrl.exit,
6913
8009
  children: [
6914
8010
  /* @__PURE__ */ jsx(X, {}),
@@ -7001,8 +8097,222 @@ function Tour({
7001
8097
  }
7002
8098
  ) });
7003
8099
  }
8100
+ var TraceList = React25.forwardRef(
8101
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
8102
+ "div",
8103
+ {
8104
+ ref,
8105
+ role: "list",
8106
+ className: cn("flex flex-col [&>*:first-child]:border-t-0", className),
8107
+ ...props,
8108
+ children
8109
+ }
8110
+ )
8111
+ );
8112
+ TraceList.displayName = "TraceList";
8113
+ var TraceStep = React25.forwardRef(
8114
+ ({
8115
+ seq,
8116
+ name,
8117
+ description,
8118
+ layer,
8119
+ role,
8120
+ duration,
8121
+ note,
8122
+ mark,
8123
+ palette,
8124
+ depth = 0,
8125
+ dim,
8126
+ struck,
8127
+ selected,
8128
+ onSelect,
8129
+ className,
8130
+ ...props
8131
+ }, ref) => {
8132
+ const paint = layer ? layerPaint(palette, layer) : void 0;
8133
+ const Row = onSelect ? "button" : "div";
8134
+ return /* @__PURE__ */ jsxs(
8135
+ "div",
8136
+ {
8137
+ ref,
8138
+ role: "listitem",
8139
+ className: cn(
8140
+ "flex min-h-[46px] items-stretch border-t border-border/55",
8141
+ selected && "bg-accent shadow-[inset_2px_0_0_var(--color-primary)]",
8142
+ dim && "opacity-50",
8143
+ className
8144
+ ),
8145
+ ...props,
8146
+ children: [
8147
+ /* @__PURE__ */ jsx(
8148
+ "span",
8149
+ {
8150
+ "aria-hidden": true,
8151
+ className: cn(
8152
+ "w-[3px] shrink-0",
8153
+ struck ? "bg-destructive" : paint?.swatch ?? "bg-muted-foreground"
8154
+ )
8155
+ }
8156
+ ),
8157
+ /* @__PURE__ */ jsxs(
8158
+ Row,
8159
+ {
8160
+ type: onSelect ? "button" : void 0,
8161
+ onClick: onSelect,
8162
+ className: cn(
8163
+ "flex min-w-0 flex-1 items-center gap-2 pr-3 text-left",
8164
+ onSelect && "cursor-pointer hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-ring"
8165
+ ),
8166
+ children: [
8167
+ /* @__PURE__ */ jsx(
8168
+ "span",
8169
+ {
8170
+ style: { width: 26 + depth * 18 },
8171
+ className: "shrink-0 text-right font-mono text-xs text-muted-foreground",
8172
+ children: seq
8173
+ }
8174
+ ),
8175
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-px py-1.5 pl-2", children: [
8176
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5", children: [
8177
+ /* @__PURE__ */ jsx(
8178
+ "span",
8179
+ {
8180
+ className: cn(
8181
+ "min-w-0 truncate font-mono font-semibold",
8182
+ struck && "text-destructive line-through"
8183
+ ),
8184
+ children: name
8185
+ }
8186
+ ),
8187
+ mark
8188
+ ] }),
8189
+ description != null ? /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-muted-foreground", children: description }) : null
8190
+ ] }),
8191
+ layer != null ? (
8192
+ // The layer is never the part that gives way: it is one of six short
8193
+ // words and it is what the row is *about*. The role is the longer,
8194
+ // subordinate string, so it truncates first.
8195
+ /* @__PURE__ */ jsxs("span", { className: "flex w-[10.5rem] shrink-0 items-center justify-end gap-1.5", children: [
8196
+ /* @__PURE__ */ jsx(
8197
+ "span",
8198
+ {
8199
+ "aria-hidden": true,
8200
+ className: cn(
8201
+ "size-1.5 shrink-0 rounded-full",
8202
+ dim ? "bg-muted-foreground" : paint?.swatch
8203
+ )
8204
+ }
8205
+ ),
8206
+ /* @__PURE__ */ jsx(
8207
+ "span",
8208
+ {
8209
+ className: cn(
8210
+ "shrink-0 text-sm whitespace-nowrap",
8211
+ dim && "text-muted-foreground"
8212
+ ),
8213
+ children: layerLabel(layer)
8214
+ }
8215
+ ),
8216
+ role != null ? /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate font-mono text-xs text-muted-foreground", children: role }) : null
8217
+ ] })
8218
+ ) : null,
8219
+ /* @__PURE__ */ jsxs("span", { className: "flex w-[6rem] shrink-0 flex-col items-end", children: [
8220
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-sm", children: duration }),
8221
+ note != null ? /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: note }) : null
8222
+ ] })
8223
+ ]
8224
+ }
8225
+ )
8226
+ ]
8227
+ }
8228
+ );
8229
+ }
8230
+ );
8231
+ TraceStep.displayName = "TraceStep";
8232
+ var LOOP_TONE = {
8233
+ warning: { box: "border-l-warning bg-warning/5", label: "text-warning" },
8234
+ info: { box: "border-l-info bg-info/5", label: "text-info" },
8235
+ muted: { box: "border-l-muted-foreground bg-muted/40", label: "text-muted-foreground" }
8236
+ };
8237
+ var TraceLoop = React25.forwardRef(
8238
+ ({ label, summary, tone = "warning", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
8239
+ "div",
8240
+ {
8241
+ ref,
8242
+ role: "group",
8243
+ "aria-label": typeof label === "string" ? label : void 0,
8244
+ className: cn("border-l-2", LOOP_TONE[tone].box, className),
8245
+ ...props,
8246
+ children: [
8247
+ /* @__PURE__ */ jsxs("div", { className: "flex h-[25px] items-center gap-2 border-t border-border/55 px-3", children: [
8248
+ /* @__PURE__ */ jsx(
8249
+ "span",
8250
+ {
8251
+ className: cn(
8252
+ "truncate font-mono text-xs font-semibold",
8253
+ LOOP_TONE[tone].label
8254
+ ),
8255
+ children: label
8256
+ }
8257
+ ),
8258
+ /* @__PURE__ */ jsx("span", { className: "flex-1" }),
8259
+ summary != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: summary }) : null
8260
+ ] }),
8261
+ /* @__PURE__ */ jsx("div", { className: "[&>*:first-child]:border-t-0", children })
8262
+ ]
8263
+ }
8264
+ )
8265
+ );
8266
+ TraceLoop.displayName = "TraceLoop";
8267
+ var GATE_TONE = {
8268
+ destructive: "border-destructive text-destructive",
8269
+ warning: "border-warning text-warning",
8270
+ muted: "border-muted-foreground text-muted-foreground"
8271
+ };
8272
+ var TraceGate = React25.forwardRef(
8273
+ ({ label, note, tone = "destructive", edge = "before", className, ...props }, ref) => /* @__PURE__ */ jsxs(
8274
+ "div",
8275
+ {
8276
+ ref,
8277
+ role: "separator",
8278
+ "aria-label": typeof label === "string" ? label : void 0,
8279
+ className: cn("relative flex h-[38px] items-center", className),
8280
+ ...props,
8281
+ children: [
8282
+ /* @__PURE__ */ jsx(
8283
+ "span",
8284
+ {
8285
+ "aria-hidden": true,
8286
+ className: cn(
8287
+ "absolute inset-x-0 border-t-2",
8288
+ GATE_TONE[tone],
8289
+ edge === "before" ? "top-[18px]" : "bottom-[18px]"
8290
+ )
8291
+ }
8292
+ ),
8293
+ /* @__PURE__ */ jsxs(
8294
+ "span",
8295
+ {
8296
+ className: cn(
8297
+ "relative ml-8 flex items-center gap-2 rounded-control border bg-card px-2 py-0.5",
8298
+ GATE_TONE[tone]
8299
+ ),
8300
+ children: [
8301
+ /* @__PURE__ */ jsxs("span", { className: "font-mono text-xs font-semibold whitespace-nowrap", children: [
8302
+ "\u25C8 ",
8303
+ label
8304
+ ] }),
8305
+ note != null ? /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-xs text-muted-foreground", children: note }) : null
8306
+ ]
8307
+ }
8308
+ )
8309
+ ]
8310
+ }
8311
+ )
8312
+ );
8313
+ TraceGate.displayName = "TraceGate";
7004
8314
  var TreeView = ({ searchable = false, ...props }) => {
7005
- const [searchQuery, setSearchQuery] = React23.useState("");
8315
+ const [searchQuery, setSearchQuery] = React25.useState("");
7006
8316
  const filterItems = (items, query) => {
7007
8317
  if (!query) return items;
7008
8318
  return items.map((item) => ({
@@ -7025,7 +8335,7 @@ var TreeView = ({ searchable = false, ...props }) => {
7025
8335
  );
7026
8336
  };
7027
8337
  var TreeItem = ({ item }) => {
7028
- const [isExpanded, setIsExpanded] = React23.useState(item.isExpanded || true);
8338
+ const [isExpanded, setIsExpanded] = React25.useState(item.isExpanded || true);
7029
8339
  const hasChildren = item.children && item.children.length > 0;
7030
8340
  return /* @__PURE__ */ jsxs("div", { children: [
7031
8341
  /* @__PURE__ */ jsxs(
@@ -7094,7 +8404,7 @@ function UnderDevelopment({
7094
8404
  /* @__PURE__ */ jsx("span", { className: "mt-4 px-3 py-1 bg-yellow-100 text-yellow-800", children: "Coming Soon" })
7095
8405
  ] });
7096
8406
  }
7097
- var TypographyH1 = React23.forwardRef(
8407
+ var TypographyH1 = React25.forwardRef(
7098
8408
  ({ className, ...props }, ref) => {
7099
8409
  return /* @__PURE__ */ jsx(
7100
8410
  "h1",
@@ -7110,7 +8420,7 @@ var TypographyH1 = React23.forwardRef(
7110
8420
  }
7111
8421
  );
7112
8422
  TypographyH1.displayName = "TypographyH1";
7113
- var TypographyH2 = React23.forwardRef(
8423
+ var TypographyH2 = React25.forwardRef(
7114
8424
  ({ className, ...props }, ref) => {
7115
8425
  return /* @__PURE__ */ jsx(
7116
8426
  "h2",
@@ -7126,7 +8436,7 @@ var TypographyH2 = React23.forwardRef(
7126
8436
  }
7127
8437
  );
7128
8438
  TypographyH2.displayName = "TypographyH2";
7129
- var TypographyH3 = React23.forwardRef(
8439
+ var TypographyH3 = React25.forwardRef(
7130
8440
  ({ className, ...props }, ref) => {
7131
8441
  return /* @__PURE__ */ jsx(
7132
8442
  "h3",
@@ -7142,7 +8452,7 @@ var TypographyH3 = React23.forwardRef(
7142
8452
  }
7143
8453
  );
7144
8454
  TypographyH3.displayName = "TypographyH3";
7145
- var TypographyH4 = React23.forwardRef(
8455
+ var TypographyH4 = React25.forwardRef(
7146
8456
  ({ className, ...props }, ref) => {
7147
8457
  return /* @__PURE__ */ jsx(
7148
8458
  "h4",
@@ -7158,7 +8468,7 @@ var TypographyH4 = React23.forwardRef(
7158
8468
  }
7159
8469
  );
7160
8470
  TypographyH4.displayName = "TypographyH4";
7161
- var TypographyH5 = React23.forwardRef(
8471
+ var TypographyH5 = React25.forwardRef(
7162
8472
  ({ className, ...props }, ref) => {
7163
8473
  return /* @__PURE__ */ jsx(
7164
8474
  "h5",
@@ -7174,7 +8484,7 @@ var TypographyH5 = React23.forwardRef(
7174
8484
  }
7175
8485
  );
7176
8486
  TypographyH5.displayName = "TypographyH5";
7177
- var TypographyH6 = React23.forwardRef(
8487
+ var TypographyH6 = React25.forwardRef(
7178
8488
  ({ className, ...props }, ref) => {
7179
8489
  return /* @__PURE__ */ jsx(
7180
8490
  "h6",
@@ -7190,7 +8500,7 @@ var TypographyH6 = React23.forwardRef(
7190
8500
  }
7191
8501
  );
7192
8502
  TypographyH6.displayName = "TypographyH6";
7193
- var TypographyP = React23.forwardRef(
8503
+ var TypographyP = React25.forwardRef(
7194
8504
  ({ className, ...props }, ref) => {
7195
8505
  return /* @__PURE__ */ jsx(
7196
8506
  "p",
@@ -7206,7 +8516,7 @@ var TypographyP = React23.forwardRef(
7206
8516
  }
7207
8517
  );
7208
8518
  TypographyP.displayName = "TypographyP";
7209
- var TypographyBlockquote = React23.forwardRef(
8519
+ var TypographyBlockquote = React25.forwardRef(
7210
8520
  ({ className, ...props }, ref) => {
7211
8521
  return /* @__PURE__ */ jsx(
7212
8522
  "blockquote",
@@ -7222,14 +8532,14 @@ var TypographyBlockquote = React23.forwardRef(
7222
8532
  }
7223
8533
  );
7224
8534
  TypographyBlockquote.displayName = "TypographyBlockquote";
7225
- var TypographyInlineCode = React23.forwardRef(
8535
+ var TypographyInlineCode = React25.forwardRef(
7226
8536
  ({ className, ...props }, ref) => {
7227
8537
  return /* @__PURE__ */ jsx(
7228
8538
  "code",
7229
8539
  {
7230
8540
  ref,
7231
8541
  className: cn(
7232
- "relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-meta font-semibold",
8542
+ "relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold",
7233
8543
  className
7234
8544
  ),
7235
8545
  ...props
@@ -7238,7 +8548,7 @@ var TypographyInlineCode = React23.forwardRef(
7238
8548
  }
7239
8549
  );
7240
8550
  TypographyInlineCode.displayName = "TypographyInlineCode";
7241
- var TypographyLead = React23.forwardRef(
8551
+ var TypographyLead = React25.forwardRef(
7242
8552
  ({ className, ...props }, ref) => {
7243
8553
  return /* @__PURE__ */ jsx(
7244
8554
  "p",
@@ -7254,7 +8564,7 @@ var TypographyLead = React23.forwardRef(
7254
8564
  }
7255
8565
  );
7256
8566
  TypographyLead.displayName = "TypographyLead";
7257
- var TypographyLarge = React23.forwardRef(
8567
+ var TypographyLarge = React25.forwardRef(
7258
8568
  ({ className, ...props }, ref) => {
7259
8569
  return /* @__PURE__ */ jsx(
7260
8570
  "div",
@@ -7270,14 +8580,14 @@ var TypographyLarge = React23.forwardRef(
7270
8580
  }
7271
8581
  );
7272
8582
  TypographyLarge.displayName = "TypographyLarge";
7273
- var TypographySmall = React23.forwardRef(
8583
+ var TypographySmall = React25.forwardRef(
7274
8584
  ({ className, ...props }, ref) => {
7275
8585
  return /* @__PURE__ */ jsx(
7276
8586
  "small",
7277
8587
  {
7278
8588
  ref,
7279
8589
  className: cn(
7280
- "text-meta font-medium leading-none",
8590
+ "text-sm font-medium leading-none",
7281
8591
  className
7282
8592
  ),
7283
8593
  ...props
@@ -7286,7 +8596,7 @@ var TypographySmall = React23.forwardRef(
7286
8596
  }
7287
8597
  );
7288
8598
  TypographySmall.displayName = "TypographySmall";
7289
- var TypographyMuted = React23.forwardRef(
8599
+ var TypographyMuted = React25.forwardRef(
7290
8600
  ({ className, ...props }, ref) => {
7291
8601
  return /* @__PURE__ */ jsx(
7292
8602
  "p",
@@ -7302,7 +8612,7 @@ var TypographyMuted = React23.forwardRef(
7302
8612
  }
7303
8613
  );
7304
8614
  TypographyMuted.displayName = "TypographyMuted";
7305
- var TypographyList = React23.forwardRef(
8615
+ var TypographyList = React25.forwardRef(
7306
8616
  ({ className, ...props }, ref) => {
7307
8617
  return /* @__PURE__ */ jsx(
7308
8618
  "ul",
@@ -7318,7 +8628,7 @@ var TypographyList = React23.forwardRef(
7318
8628
  }
7319
8629
  );
7320
8630
  TypographyList.displayName = "TypographyList";
7321
- var TypographyPre = React23.forwardRef(
8631
+ var TypographyPre = React25.forwardRef(
7322
8632
  ({ className, ...props }, ref) => {
7323
8633
  return /* @__PURE__ */ jsx(
7324
8634
  "pre",
@@ -7354,6 +8664,6 @@ var Typography = {
7354
8664
  Pre: TypographyPre
7355
8665
  };
7356
8666
 
7357
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AddressChip, AgentChip, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppStatusBar, Avatar, AvatarFallback, AvatarImage, Badge, BarChartH, BarChartV, BoundChip, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, ButtonWithTooltip, CAST_ROLES, CannotAnswerCard, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardWithHeader, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CastTable, ChatSession, ChatSessionActivityRow, ChatSessionActivitySubLine, ChatSessionComposer, ChatSessionContextChip, ChatSessionDisclosure, ChatSessionMessage, ChatSessionMessageOptions, ChatSessionProgressLine, ChatSessionPromptRow, ChatSessionStatusBar, ChatSessionTaskGroup, ChatSessionTaskRow, CitationList, CitationMarker, CitationRow, ClampedText, ClarifyCard, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextBar, DiagnosisCard, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffList, DiffRow, DivergingBar, DotRating, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EgressList, EmissionCard, EmissionHeader, EmptyState, EmptyStateLock, ErrorBoundary, Eyebrow, FilterBar, FilterChip, HeatStrip, HoverCard, HoverCardContent, HoverCardTrigger, Item3 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, LayerChip, LayerSection, LayerStrip, Legend, LegendItem, LensChip, LensRow, MatchPreview, MenuItem, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricGrid, MetricTile, NavBase, NavHorizontal, NavHorizontalItems, NavItems, NavVertical, NavVerticalItems, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NestedMenu, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PanelBox, PanelContent, PanelStack, Popover, PopoverContent, PopoverTrigger, Progress, PropertyList, PropertyRow, ProposalCard, RatingControl, RecordHeader, RepairNote, ResizableHandle, ResizablePanel, ResizablePanelGroup, RetryNote, RichSelect, RuleRow, ScrollArea, ScrollBar, SearchInput, SectionHeader, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, SliceSummary, Sparkline, Spinner, StatusDot, TabbedPanel, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TaskGantt, TaskGanttDetailCard, TaskNode, TemplatePicker, Terminal, TerminalLine, TimelineEntry, TimelineFooter, TimelineList, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Tour, TreeItem, TreeView, Typography, TypographyBlockquote, TypographyH1, TypographyH2, TypographyH3, TypographyH4, TypographyH5, TypographyH6, TypographyInlineCode, TypographyLarge, TypographyLead, TypographyList, TypographyMuted, TypographyP, TypographyPre, TypographySmall, UnderDevelopment, agentChipVariants, badgeVariants, SWATCH as boundSwatch, buttonGroupVariants, buttonVariants, chatSessionGutterClass, cn, describeSlice, LABEL as layerLabel, SWATCH2 as layerSwatch, navigationMenuTriggerStyle, split as splitAddress, statusDotVariants, toggleVariants, MARK_LABEL as touchLabel, useOverflowItems, useSidebar, useTour };
8667
+ export { AbsenceNote, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AddressChip, AgentChip, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppStatusBar, ArtifactTable, AttemptClock, Avatar, AvatarFallback, AvatarImage, Badge, BarChartH, BarChartV, BoundChip, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, ButtonWithTooltip, CAST_ROLES, CannotAnswerCard, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardWithHeader, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CastTable, ChatSession, ChatSessionActivityRow, ChatSessionActivitySubLine, ChatSessionComposer, ChatSessionContextChip, ChatSessionDisclosure, ChatSessionMessage, ChatSessionMessageOptions, ChatSessionProgressLine, ChatSessionPromptRow, ChatSessionStatusBar, ChatSessionTaskGroup, ChatSessionTaskRow, CitationList, CitationMarker, CitationRow, ClampedText, ClarifyCard, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextBar, DiagnosisCard, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffList, DiffRow, DivergingBar, DotRating, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EgressList, EmissionCard, EmissionHeader, EmptyState, EmptyStateLock, ErrorBoundary, ExchangeRecord, Eyebrow, FilterBar, FilterChip, HeatStrip, HoverCard, HoverCardContent, HoverCardTrigger, Item3 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, KindChip, LayerChip, LayerSection, LayerStrip, Legend, LegendItem, LensChip, LensRow, Link, MarkChip, MatchPreview, MenuItem, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricGrid, MetricTile, NavBase, NavHorizontal, NavHorizontalItems, NavItems, NavVertical, NavVerticalItems, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NestedMenu, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PanelBox, PanelContent, PanelStack, ParticipantRow, Popover, PopoverContent, PopoverTrigger, Progress, PropertyList, PropertyRow, ProposalCard, RatingControl, RecordHeader, RecordPager, RepairNote, ResizableHandle, ResizablePanel, ResizablePanelGroup, RetryNote, RichSelect, RuleRow, RunRow, RunStatusText, ScrollArea, ScrollBar, SearchInput, SectionHeader, SegmentedControl, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, SliceSummary, Sparkline, Spinner, StatusDot, TabbedPanel, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TaskGantt, TaskGanttDetailCard, TaskNode, TemplatePicker, Terminal, TerminalLine, TimelineEntry, TimelineFooter, TimelineList, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TouchStrip, Tour, TraceGate, TraceList, TraceLoop, TraceStep, TreeItem, TreeView, Typography, TypographyBlockquote, TypographyH1, TypographyH2, TypographyH3, TypographyH4, TypographyH5, TypographyH6, TypographyInlineCode, TypographyLarge, TypographyLead, TypographyList, TypographyMuted, TypographyP, TypographyPre, TypographySmall, UnderDevelopment, agentChipVariants, badgeVariants, buttonGroupVariants, buttonVariants, chatSessionGutterClass, cn, describeSlice, stateLabel as layerItemLabel, layerLabel, layerPaint, linkVariants, navigationMenuTriggerStyle, TONE6 as runStatusTones, split as splitAddress, statusDotVariants, toggleVariants, useOverflowItems, useSidebar, useTour };
7358
8668
  //# sourceMappingURL=index.js.map
7359
8669
  //# sourceMappingURL=index.js.map