@assure-one/design-system 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2120,6 +2120,74 @@ function FilterIcon({ size = 24, ...props }) {
2120
2120
  }
2121
2121
  ) });
2122
2122
  }
2123
+ function CheckCircleSolidIcon({ size = 24, ...props }) {
2124
+ return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
2125
+ "path",
2126
+ {
2127
+ fillRule: "evenodd",
2128
+ clipRule: "evenodd",
2129
+ fill: "currentColor",
2130
+ d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 0 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z"
2131
+ }
2132
+ ) });
2133
+ }
2134
+ function XCircleSolidIcon({ size = 24, ...props }) {
2135
+ return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
2136
+ "path",
2137
+ {
2138
+ fillRule: "evenodd",
2139
+ clipRule: "evenodd",
2140
+ fill: "currentColor",
2141
+ d: "M12 2.25C6.615 2.25 2.25 6.615 2.25 12s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm-1.72 6.97a.75.75 0 0 0-1.06 1.06L10.94 12l-1.72 1.72a.75.75 0 1 0 1.06 1.06L12 13.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L13.06 12l1.72-1.72a.75.75 0 1 0-1.06-1.06L12 10.94l-1.72-1.72Z"
2142
+ }
2143
+ ) });
2144
+ }
2145
+ function AlertTriangleSolidIcon({ size = 24, ...props }) {
2146
+ return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
2147
+ "path",
2148
+ {
2149
+ fillRule: "evenodd",
2150
+ clipRule: "evenodd",
2151
+ fill: "currentColor",
2152
+ d: "M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003ZM12 8.25a.75.75 0 0 1 .75.75v3.75a.75.75 0 0 1-1.5 0V9a.75.75 0 0 1 .75-.75Zm0 8.25a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z"
2153
+ }
2154
+ ) });
2155
+ }
2156
+ function InfoCircleSolidIcon({ size = 24, ...props }) {
2157
+ return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
2158
+ "path",
2159
+ {
2160
+ fillRule: "evenodd",
2161
+ clipRule: "evenodd",
2162
+ fill: "currentColor",
2163
+ d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.342l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.341l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z"
2164
+ }
2165
+ ) });
2166
+ }
2167
+ function TrendingUpIcon({ size = 24, ...props }) {
2168
+ return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
2169
+ "path",
2170
+ {
2171
+ d: "M2 17l6.5-6.5 5 5L22 7M16 7h6v6",
2172
+ stroke: "currentColor",
2173
+ strokeWidth: "1.5",
2174
+ strokeLinecap: "round",
2175
+ strokeLinejoin: "round"
2176
+ }
2177
+ ) });
2178
+ }
2179
+ function TrendingDownIcon({ size = 24, ...props }) {
2180
+ return /* @__PURE__ */ jsx(Icon, { size, ...props, children: /* @__PURE__ */ jsx(
2181
+ "path",
2182
+ {
2183
+ d: "M2 7l6.5 6.5 5-5L22 17M16 17h6v-6",
2184
+ stroke: "currentColor",
2185
+ strokeWidth: "1.5",
2186
+ strokeLinecap: "round",
2187
+ strokeLinejoin: "round"
2188
+ }
2189
+ ) });
2190
+ }
2123
2191
  var Accordion = React36.forwardRef(function Accordion2({ className, ...props }, ref) {
2124
2192
  return /* @__PURE__ */ jsx(
2125
2193
  AccordionPrimitive.Root,
@@ -2622,12 +2690,18 @@ var buttonVariants = cva(
2622
2690
  ghost: "bg-transparent text-fg-2 hover:bg-bg-2 hover:text-fg",
2623
2691
  outline: "border border-rule-strong bg-bg text-fg-2 hover:bg-bg-2 hover:border-fg-4",
2624
2692
  link: "bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto",
2625
- accent: "bg-accent text-fg-on-accent hover:bg-accent-hover active:bg-accent-active"
2693
+ accent: "bg-accent text-fg-on-accent hover:bg-accent-hover active:bg-accent-active",
2694
+ dashed: "border-2 border-dashed border-rule bg-transparent text-fg-3 hover:border-fg-4 hover:bg-bg-2 hover:text-fg"
2626
2695
  },
2627
2696
  size: {
2628
2697
  sm: "h-8 px-3 text-sm gap-1.5",
2629
2698
  md: "h-10 px-4 text-sm gap-2",
2630
2699
  lg: "h-12 px-6 text-base gap-2",
2700
+ // Icon-only sizes. Hit target ≥ 24px (WCAG 2.5.5 floor).
2701
+ // `icon-xs` / `icon-sm` are for dense in-row action stacks where
2702
+ // `size="icon"` (40×40) would visually crowd the row.
2703
+ "icon-xs": "size-6 [&_svg]:size-3.5",
2704
+ "icon-sm": "size-7 [&_svg]:size-4",
2631
2705
  icon: "size-10"
2632
2706
  }
2633
2707
  },
@@ -3065,8 +3139,8 @@ function Select({
3065
3139
  children: /* @__PURE__ */ jsx(SelectValue, { placeholder })
3066
3140
  }
3067
3141
  ),
3068
- /* @__PURE__ */ jsx(SelectContent, { className: contentClassName, children: options.map((opt) => /* @__PURE__ */ jsx(SelectItem, { value: opt.value, disabled: opt.disabled, children: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5 truncate", children: [
3069
- opt.label,
3142
+ /* @__PURE__ */ jsx(SelectContent, { className: contentClassName, children: options.map((opt) => /* @__PURE__ */ jsx(SelectItem, { value: opt.value, disabled: opt.disabled, children: /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5", children: [
3143
+ /* @__PURE__ */ jsx("span", { className: "line-clamp-1", children: opt.label }),
3070
3144
  opt.labelSuffix
3071
3145
  ] }) }, opt.value)) })
3072
3146
  ]
@@ -3084,16 +3158,17 @@ function ClientSelect({
3084
3158
  placeholder = "Select a client..."
3085
3159
  }) {
3086
3160
  const radixValue = value ?? void 0;
3161
+ const selected = value ? clients.find((c) => c.id === value) : void 0;
3087
3162
  const handleChange = (next) => {
3088
3163
  onChange(next === "" ? null : next);
3089
3164
  };
3090
3165
  return /* @__PURE__ */ jsxs("div", { className: cn("relative w-full", className), children: [
3091
3166
  /* @__PURE__ */ jsx("input", { type: "hidden", name, value: value ?? "" }),
3092
3167
  /* @__PURE__ */ jsxs(SelectRoot, { value: radixValue, onValueChange: handleChange, children: [
3093
- /* @__PURE__ */ jsx(SelectTrigger, { "aria-invalid": !!error || void 0, "aria-label": placeholder, children: /* @__PURE__ */ jsx(SelectValue, { placeholder }) }),
3094
- /* @__PURE__ */ jsx(SelectContent, { children: clients.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-fg-3 px-3 py-6 text-center text-xs", children: "No clients yet" }) : clients.map((c) => /* @__PURE__ */ jsx(SelectItem, { value: c.id, children: /* @__PURE__ */ jsxs("span", { className: "flex flex-col", children: [
3095
- /* @__PURE__ */ jsx("span", { className: "text-fg text-[13px] font-medium", children: c.label }),
3096
- c.email && /* @__PURE__ */ jsx("span", { className: "text-fg-3 text-xs", children: c.email })
3168
+ /* @__PURE__ */ jsx(SelectTrigger, { "aria-invalid": !!error || void 0, "aria-label": placeholder, children: /* @__PURE__ */ jsx(SelectValue, { placeholder, children: selected?.label ?? "" }) }),
3169
+ /* @__PURE__ */ jsx(SelectContent, { children: clients.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-fg-3 px-3 py-6 text-center text-xs", children: "No clients yet" }) : clients.map((c) => /* @__PURE__ */ jsx(SelectItem, { value: c.id, children: /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
3170
+ /* @__PURE__ */ jsx("span", { className: "text-fg line-clamp-1 text-[13px] font-medium", children: c.label }),
3171
+ c.email && /* @__PURE__ */ jsx("span", { className: "text-fg-3 line-clamp-1 text-xs", children: c.email })
3097
3172
  ] }) }, c.id)) })
3098
3173
  ] }),
3099
3174
  error && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-danger-fg mt-1.5 text-xs", children: error })
@@ -3430,7 +3505,7 @@ function CommandPalette({
3430
3505
  ),
3431
3506
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
3432
3507
  /* @__PURE__ */ jsx("div", { className: "text-fg text-sm font-medium", children: item.label }),
3433
- item.description && /* @__PURE__ */ jsx("div", { className: "text-fg-3 truncate text-xs", children: item.description })
3508
+ item.description && /* @__PURE__ */ jsx("div", { className: "text-fg-3 line-clamp-1 text-xs", children: item.description })
3434
3509
  ] }),
3435
3510
  item.shortcut && /* @__PURE__ */ jsx("kbd", { className: cn(kbdClass, "hidden shrink-0 sm:inline-flex"), children: item.shortcut })
3436
3511
  ]
@@ -4276,6 +4351,19 @@ function FormSuccess({ children, className, ...props }) {
4276
4351
  }
4277
4352
  );
4278
4353
  }
4354
+ var FormSection = forwardRef(function FormSection2({ title, description, action, headSpacing = "mt-4", className, children, ...props }, ref) {
4355
+ return /* @__PURE__ */ jsxs("fieldset", { ref, className: cn("min-w-0", className), ...props, children: [
4356
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
4357
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
4358
+ /* @__PURE__ */ jsx("legend", { className: "text-fg text-sm font-semibold", children: title }),
4359
+ description && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-xs leading-relaxed", children: description })
4360
+ ] }),
4361
+ action && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
4362
+ ] }),
4363
+ /* @__PURE__ */ jsx("div", { className: headSpacing, children })
4364
+ ] });
4365
+ });
4366
+ FormSection.displayName = "FormSection";
4279
4367
  var HoverCard = HoverCardPrimitive.Root;
4280
4368
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
4281
4369
  var HoverCardPortal = HoverCardPrimitive.Portal;
@@ -4398,67 +4486,45 @@ var Input = forwardRef(function Input2({
4398
4486
  ] });
4399
4487
  });
4400
4488
  Input.displayName = "Input";
4401
- var SHORTCUT_SECTIONS = [
4402
- {
4403
- title: "Create",
4404
- icon: /* @__PURE__ */ jsx(CornerDownLeftIcon, { className: "size-3" }),
4405
- shortcuts: [
4406
- { keys: ["C"], description: "New Client" },
4407
- { keys: ["T"], description: "Create Task" },
4408
- { keys: ["E"], description: "New Engagement" },
4409
- { keys: ["M"], description: "Compose Message" }
4410
- ]
4411
- },
4412
- {
4413
- title: "Go to",
4414
- icon: null,
4415
- shortcuts: [
4416
- { keys: ["G", "O"], description: "Overview" },
4417
- { keys: ["G", "C"], description: "Clients" },
4418
- { keys: ["G", "W"], description: "Workflow" },
4419
- { keys: ["G", "D"], description: "Documents" },
4420
- { keys: ["G", "B"], description: "Billing" },
4421
- { keys: ["G", "M"], description: "Communications" },
4422
- { keys: ["G", "A"], description: "Calendar" },
4423
- { keys: ["G", "R"], description: "Reports" },
4424
- { keys: ["G", "S"], description: "Settings" }
4425
- ]
4426
- },
4427
- {
4428
- title: "General",
4429
- icon: /* @__PURE__ */ jsx(CommandIcon, { className: "size-3" }),
4430
- shortcuts: [
4431
- { keys: ["\u2318", "K"], description: "Command palette" },
4432
- { keys: ["/"], description: "Focus search" },
4433
- { keys: ["?"], description: "Keyboard shortcuts" },
4434
- { keys: ["Esc"], description: "Close / go back" }
4435
- ]
4436
- }
4437
- ];
4489
+ var GENERAL_SECTION = {
4490
+ title: "General",
4491
+ icon: /* @__PURE__ */ jsx(CommandIcon, { className: "size-3" }),
4492
+ shortcuts: [
4493
+ { keys: ["\u2318", "K"], description: "Command palette" },
4494
+ { keys: ["/"], description: "Focus search" },
4495
+ { keys: ["?"], description: "Keyboard shortcuts" },
4496
+ { keys: ["Esc"], description: "Close / go back" }
4497
+ ]
4498
+ };
4438
4499
  var kbdClass2 = cn(
4439
4500
  "inline-flex items-center justify-center min-w-[18px] h-[18px] px-[5px]",
4440
4501
  "font-mono text-[10.5px] text-fg-3 bg-bg-2 border border-rule rounded-icon",
4441
4502
  "[border-bottom-width:1.5px]"
4442
4503
  );
4443
- function KeyboardShortcutsDialog() {
4504
+ function KeyboardShortcutsDialog({
4505
+ sections,
4506
+ hotkey = "?"
4507
+ } = {}) {
4444
4508
  const [open, setOpen] = React36.useState(false);
4445
4509
  React36.useEffect(() => {
4510
+ if (hotkey === null) return;
4446
4511
  function handleKeyDown(e) {
4447
4512
  const target = e.target;
4448
4513
  if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement || target?.isContentEditable) {
4449
4514
  return;
4450
4515
  }
4451
- if (e.key === "?" && !e.metaKey && !e.ctrlKey && !e.altKey) {
4516
+ if (e.key === hotkey && !e.metaKey && !e.ctrlKey && !e.altKey) {
4452
4517
  e.preventDefault();
4453
4518
  setOpen((prev) => !prev);
4454
4519
  }
4455
4520
  }
4456
4521
  document.addEventListener("keydown", handleKeyDown);
4457
4522
  return () => document.removeEventListener("keydown", handleKeyDown);
4458
- }, []);
4523
+ }, [hotkey]);
4524
+ const allSections = sections ? [...sections, GENERAL_SECTION] : [GENERAL_SECTION];
4459
4525
  return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs(DialogContent, { size: "md", className: "p-0", children: [
4460
4526
  /* @__PURE__ */ jsx(DialogHeader, { className: "border-rule mb-0 border-b px-5 py-4 pr-12", children: /* @__PURE__ */ jsx(DialogTitle, { className: "text-sm font-semibold", children: "Keyboard Shortcuts" }) }),
4461
- /* @__PURE__ */ jsx("div", { className: "scrollbar-thin max-h-[60vh] overflow-y-auto px-5 py-4", children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-x-6 gap-y-5", children: SHORTCUT_SECTIONS.map((section) => /* @__PURE__ */ jsxs("div", { className: cn(section.title === "Go to" && "row-span-2"), children: [
4527
+ /* @__PURE__ */ jsx("div", { className: "scrollbar-thin max-h-[60vh] overflow-y-auto px-5 py-4", children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-x-6 gap-y-5", children: allSections.map((section) => /* @__PURE__ */ jsxs("div", { className: cn(section.wide && "row-span-2"), children: [
4462
4528
  /* @__PURE__ */ jsxs(
4463
4529
  "h3",
4464
4530
  {
@@ -4489,7 +4555,7 @@ function KeyboardShortcutsDialog() {
4489
4555
  ] }, section.title)) }) }),
4490
4556
  /* @__PURE__ */ jsx("div", { className: "border-rule bg-bg-2/40 border-t px-5 py-3", children: /* @__PURE__ */ jsxs("p", { className: "text-fg-3 text-[11px]", children: [
4491
4557
  "Press ",
4492
- /* @__PURE__ */ jsx("kbd", { className: kbdClass2, children: "?" }),
4558
+ /* @__PURE__ */ jsx("kbd", { className: kbdClass2, children: hotkey ?? "?" }),
4493
4559
  " anytime to toggle this dialog"
4494
4560
  ] }) })
4495
4561
  ] }) });
@@ -4506,23 +4572,106 @@ var Label4 = React36.forwardRef(
4506
4572
  }
4507
4573
  );
4508
4574
  Label4.displayName = LabelPrimitive.Root.displayName;
4509
- var LinkButton = forwardRef(function LinkButton2({ href, variant = "primary", size = "md", iconLeft, iconRight, children, className, ...props }, ref) {
4510
- return /* @__PURE__ */ jsxs(
4511
- Link,
4575
+ var LinkButton = forwardRef(function LinkButton2({
4576
+ href,
4577
+ variant = "primary",
4578
+ size = "md",
4579
+ iconLeft,
4580
+ iconRight,
4581
+ children,
4582
+ className,
4583
+ external,
4584
+ target,
4585
+ rel,
4586
+ ...props
4587
+ }, ref) {
4588
+ const classes = cn(buttonVariants({ variant, size }), className);
4589
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
4590
+ iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
4591
+ children,
4592
+ iconRight && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconRight })
4593
+ ] });
4594
+ if (external) {
4595
+ const safeRel = rel ?? (target === "_blank" ? "noopener noreferrer" : void 0);
4596
+ return /* @__PURE__ */ jsx(
4597
+ "a",
4598
+ {
4599
+ ref,
4600
+ href,
4601
+ className: classes,
4602
+ target,
4603
+ rel: safeRel,
4604
+ ...props,
4605
+ children: content
4606
+ }
4607
+ );
4608
+ }
4609
+ return /* @__PURE__ */ jsx(Link, { ref, href, className: classes, target, rel, ...props, children: content });
4610
+ });
4611
+ LinkButton.displayName = "LinkButton";
4612
+ var Skeleton = forwardRef(function Skeleton2({ className, ...props }, ref) {
4613
+ return /* @__PURE__ */ jsx(
4614
+ "div",
4512
4615
  {
4513
4616
  ref,
4514
- href,
4515
- className: cn(buttonVariants({ variant, size }), className),
4617
+ className: cn("skeleton bg-bg-3 rounded-icon animate-pulse", className),
4618
+ "aria-hidden": "true",
4619
+ ...props
4620
+ }
4621
+ );
4622
+ });
4623
+ Skeleton.displayName = "Skeleton";
4624
+ var SkeletonText = forwardRef(function SkeletonText2({ lines = 3, className, ...props }, ref) {
4625
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("space-y-2", className), "aria-hidden": "true", ...props, children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx(
4626
+ "div",
4627
+ {
4628
+ className: cn(
4629
+ "skeleton bg-bg-3 rounded-icon h-4 animate-pulse",
4630
+ i === lines - 1 && "w-3/4"
4631
+ )
4632
+ },
4633
+ i
4634
+ )) });
4635
+ });
4636
+ SkeletonText.displayName = "SkeletonText";
4637
+ var SkeletonCircle = forwardRef(
4638
+ function SkeletonCircle2({ size = 40, className, ...props }, ref) {
4639
+ return /* @__PURE__ */ jsx(
4640
+ "div",
4641
+ {
4642
+ ref,
4643
+ className: cn("skeleton bg-bg-3 animate-pulse rounded-full", className),
4644
+ style: { width: size, height: size },
4645
+ "aria-hidden": "true",
4646
+ ...props
4647
+ }
4648
+ );
4649
+ }
4650
+ );
4651
+ SkeletonCircle.displayName = "SkeletonCircle";
4652
+ var LoadingRows = forwardRef(function LoadingRows2({
4653
+ count = 3,
4654
+ rowHeight = "h-14",
4655
+ gap = "gap-2",
4656
+ rowClassName,
4657
+ label = "Loading",
4658
+ className,
4659
+ ...props
4660
+ }, ref) {
4661
+ return /* @__PURE__ */ jsx(
4662
+ "div",
4663
+ {
4664
+ ref,
4665
+ role: "status",
4666
+ "aria-busy": "true",
4667
+ "aria-label": label,
4668
+ className: cn("flex flex-col", gap, className),
4516
4669
  ...props,
4517
- children: [
4518
- iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
4519
- children,
4520
- iconRight && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconRight })
4521
- ]
4670
+ children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsx(Skeleton, { className: cn(rowHeight, "w-full", rowClassName) }, i))
4522
4671
  }
4523
4672
  );
4524
4673
  });
4525
- LinkButton.displayName = "LinkButton";
4674
+ LoadingRows.displayName = "LoadingRows";
4526
4675
  var sizeStyles = {
4527
4676
  sm: { icon: 20, text: "text-sm", gap: "gap-2" },
4528
4677
  md: { icon: 24, text: "text-[17px]", gap: "gap-2.5" },
@@ -4535,15 +4684,17 @@ function Logo({
4535
4684
  className,
4536
4685
  iconClassName,
4537
4686
  textClassName,
4687
+ productName = "Pro",
4538
4688
  inverted = false
4539
4689
  }) {
4540
4690
  const s = sizeStyles[size];
4691
+ const ariaLabel = productName ? `Assure ${productName}` : "Assure";
4541
4692
  return /* @__PURE__ */ jsxs(
4542
4693
  Link,
4543
4694
  {
4544
4695
  href,
4545
4696
  className: cn("inline-flex items-center", s.gap, className),
4546
- "aria-label": "Assure Pro",
4697
+ "aria-label": ariaLabel,
4547
4698
  children: [
4548
4699
  /* @__PURE__ */ jsx(
4549
4700
  Image2,
@@ -4567,8 +4718,10 @@ function Logo({
4567
4718
  ),
4568
4719
  children: [
4569
4720
  /* @__PURE__ */ jsx("span", { children: "Assure" }),
4570
- " ",
4571
- /* @__PURE__ */ jsx("span", { className: cn("font-medium", inverted ? "text-pro-fg" : "text-pro-fg"), children: "Pro" })
4721
+ productName && /* @__PURE__ */ jsxs(Fragment, { children: [
4722
+ " ",
4723
+ /* @__PURE__ */ jsx("span", { className: "text-pro-fg font-medium", children: productName })
4724
+ ] })
4572
4725
  ]
4573
4726
  }
4574
4727
  )
@@ -4599,7 +4752,7 @@ function MultiFilterPill({
4599
4752
  ),
4600
4753
  children: [
4601
4754
  icon && /* @__PURE__ */ jsx("span", { className: "[&>svg]:size-3.5", "aria-hidden": "true", children: icon }),
4602
- /* @__PURE__ */ jsx("span", { className: "truncate", children: displayLabel }),
4755
+ /* @__PURE__ */ jsx("span", { className: "line-clamp-1", children: displayLabel }),
4603
4756
  active ? /* @__PURE__ */ jsx(
4604
4757
  "span",
4605
4758
  {
@@ -4679,7 +4832,7 @@ function MultiFilterPill({
4679
4832
  "aria-hidden": "true"
4680
4833
  }
4681
4834
  ),
4682
- /* @__PURE__ */ jsx("span", { className: "truncate", children: opt.label })
4835
+ /* @__PURE__ */ jsx("span", { className: "line-clamp-1", children: opt.label })
4683
4836
  ]
4684
4837
  }
4685
4838
  ) }, opt.key);
@@ -5478,7 +5631,7 @@ function SearchSelect({
5478
5631
  ),
5479
5632
  children: [
5480
5633
  /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 shrink-0 text-transparent", "aria-hidden": "true" }),
5481
- /* @__PURE__ */ jsx("span", { className: "truncate", children: option.label })
5634
+ /* @__PURE__ */ jsx("span", { className: "line-clamp-1", children: option.label })
5482
5635
  ]
5483
5636
  },
5484
5637
  option.id
@@ -5498,7 +5651,7 @@ function SearchSelect({
5498
5651
  ),
5499
5652
  children: [
5500
5653
  /* @__PURE__ */ jsx(PlusIcon, { className: "size-4 shrink-0", "aria-hidden": "true" }),
5501
- /* @__PURE__ */ jsxs("span", { className: "truncate", children: [
5654
+ /* @__PURE__ */ jsxs("span", { className: "line-clamp-1", children: [
5502
5655
  "Create \u201C",
5503
5656
  trimmedSearch,
5504
5657
  "\u201D"
@@ -5790,7 +5943,7 @@ function SideDrawer({
5790
5943
  function SideDrawerHeader({ title, subtitle, onClose, className }) {
5791
5944
  return /* @__PURE__ */ jsx("div", { className: cn("border-rule bg-surface shrink-0 border-b px-6 py-4", className), children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
5792
5945
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
5793
- /* @__PURE__ */ jsx("h2", { className: "font-display text-fg truncate text-base leading-tight font-medium tracking-tight", children: title }),
5946
+ /* @__PURE__ */ jsx("h2", { className: "font-display text-fg line-clamp-1 text-base leading-tight font-medium tracking-tight", children: title }),
5794
5947
  subtitle && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-1 text-sm", children: subtitle })
5795
5948
  ] }),
5796
5949
  onClose && /* @__PURE__ */ jsx(
@@ -5829,46 +5982,6 @@ function SideDrawerFooter({ children, className }) {
5829
5982
  SideDrawer.Header = SideDrawerHeader;
5830
5983
  SideDrawer.Body = SideDrawerBody;
5831
5984
  SideDrawer.Footer = SideDrawerFooter;
5832
- var Skeleton = forwardRef(function Skeleton2({ className, ...props }, ref) {
5833
- return /* @__PURE__ */ jsx(
5834
- "div",
5835
- {
5836
- ref,
5837
- className: cn("skeleton bg-bg-3 rounded-icon animate-pulse", className),
5838
- "aria-hidden": "true",
5839
- ...props
5840
- }
5841
- );
5842
- });
5843
- Skeleton.displayName = "Skeleton";
5844
- var SkeletonText = forwardRef(function SkeletonText2({ lines = 3, className, ...props }, ref) {
5845
- return /* @__PURE__ */ jsx("div", { ref, className: cn("space-y-2", className), "aria-hidden": "true", ...props, children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx(
5846
- "div",
5847
- {
5848
- className: cn(
5849
- "skeleton bg-bg-3 rounded-icon h-4 animate-pulse",
5850
- i === lines - 1 && "w-3/4"
5851
- )
5852
- },
5853
- i
5854
- )) });
5855
- });
5856
- SkeletonText.displayName = "SkeletonText";
5857
- var SkeletonCircle = forwardRef(
5858
- function SkeletonCircle2({ size = 40, className, ...props }, ref) {
5859
- return /* @__PURE__ */ jsx(
5860
- "div",
5861
- {
5862
- ref,
5863
- className: cn("skeleton bg-bg-3 animate-pulse rounded-full", className),
5864
- style: { width: size, height: size },
5865
- "aria-hidden": "true",
5866
- ...props
5867
- }
5868
- );
5869
- }
5870
- );
5871
- SkeletonCircle.displayName = "SkeletonCircle";
5872
5985
  var Slider = React36.forwardRef(
5873
5986
  function Slider2({
5874
5987
  className,
@@ -6575,32 +6688,55 @@ function ToastProvider({ children }) {
6575
6688
  )
6576
6689
  ] });
6577
6690
  }
6578
- var variantStyles = {
6579
- default: "bg-surface border-rule text-fg",
6580
- success: "bg-success-bg border-success-line text-success-fg",
6581
- destructive: "bg-danger-bg border-danger-line text-danger-fg",
6582
- warning: "bg-warning-bg border-warning-line text-warning-fg"
6691
+ var variantConfig = {
6692
+ default: { chip: "bg-pro-bg", icon: "text-pro-fg", bar: "bg-pro-fg", Icon: InfoCircleSolidIcon },
6693
+ success: {
6694
+ chip: "bg-success-bg",
6695
+ icon: "text-success-fg",
6696
+ bar: "bg-success-fg",
6697
+ Icon: CheckCircleSolidIcon
6698
+ },
6699
+ destructive: {
6700
+ chip: "bg-danger-bg",
6701
+ icon: "text-danger-fg",
6702
+ bar: "bg-danger-fg",
6703
+ Icon: XCircleSolidIcon
6704
+ },
6705
+ warning: {
6706
+ chip: "bg-warning-bg",
6707
+ icon: "text-warning-fg",
6708
+ bar: "bg-warning-fg",
6709
+ Icon: AlertTriangleSolidIcon
6710
+ }
6583
6711
  };
6584
6712
  function ToastItem({ toast, onDismiss }) {
6585
6713
  const timerRef = useRef(void 0);
6586
6714
  const [exiting, setExiting] = useState(false);
6715
+ const [filled, setFilled] = useState(false);
6716
+ const duration = toast.duration ?? 5e3;
6717
+ const showProgress = duration > 0;
6587
6718
  const close = useCallback(() => {
6588
6719
  setExiting(true);
6589
6720
  setTimeout(() => onDismiss(toast.id), 150);
6590
6721
  }, [toast.id, onDismiss]);
6591
6722
  useEffect(() => {
6592
- const duration = toast.duration ?? 5e3;
6593
- if (duration <= 0) return;
6723
+ if (!showProgress) return;
6594
6724
  timerRef.current = setTimeout(close, duration);
6595
6725
  return () => clearTimeout(timerRef.current);
6596
- }, [toast.duration, close]);
6597
- return /* @__PURE__ */ jsx(
6726
+ }, [showProgress, duration, close]);
6727
+ useEffect(() => {
6728
+ if (!showProgress) return;
6729
+ const raf = requestAnimationFrame(() => setFilled(true));
6730
+ return () => cancelAnimationFrame(raf);
6731
+ }, [showProgress]);
6732
+ const { chip, icon, bar, Icon: Icon3 } = variantConfig[toast.variant ?? "default"];
6733
+ return /* @__PURE__ */ jsxs(
6598
6734
  "div",
6599
6735
  {
6600
6736
  role: "status",
6601
6737
  "data-state": exiting ? "closed" : "open",
6602
6738
  className: cn(
6603
- "rounded-card shadow-card pointer-events-auto w-80 border p-4",
6739
+ "bg-surface border-rule text-fg rounded-card shadow-card pointer-events-auto relative w-80 overflow-hidden border p-4",
6604
6740
  "font-body",
6605
6741
  // Unified data-state animation (spec §5.27) — same model as Dialog/Tooltip:
6606
6742
  // open → fade+slide in over --duration-overlay (200ms), ease-out-quart
@@ -6609,29 +6745,68 @@ function ToastItem({ toast, onDismiss }) {
6609
6745
  "data-[state=open]:duration-[var(--duration-overlay)] data-[state=open]:ease-[var(--ease-out-quart)]",
6610
6746
  "data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right-8 data-[state=closed]:fade-out-0",
6611
6747
  "data-[state=closed]:duration-[var(--duration-fast)] data-[state=closed]:ease-[var(--ease-in)]",
6612
- "motion-reduce:animate-none",
6613
- variantStyles[toast.variant ?? "default"]
6748
+ "motion-reduce:animate-none"
6614
6749
  ),
6615
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
6616
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
6617
- /* @__PURE__ */ jsx("p", { className: "text-sm leading-tight font-semibold", children: toast.title }),
6618
- toast.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm leading-snug opacity-80", children: toast.description })
6750
+ children: [
6751
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
6752
+ /* @__PURE__ */ jsx(
6753
+ "span",
6754
+ {
6755
+ className: cn(
6756
+ "inline-flex size-8 shrink-0 items-center justify-center rounded-[9px]",
6757
+ chip,
6758
+ icon
6759
+ ),
6760
+ "aria-hidden": "true",
6761
+ children: /* @__PURE__ */ jsx(Icon3, { className: "size-5" })
6762
+ }
6763
+ ),
6764
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
6765
+ /* @__PURE__ */ jsx("p", { className: "text-fg text-sm leading-tight font-semibold", children: toast.title }),
6766
+ toast.description && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-sm leading-snug", children: toast.description }),
6767
+ toast.action && /* @__PURE__ */ jsx(
6768
+ "button",
6769
+ {
6770
+ type: "button",
6771
+ onClick: () => {
6772
+ toast.action?.onClick();
6773
+ close();
6774
+ },
6775
+ className: cn(
6776
+ "text-pro-fg mt-2 text-sm font-semibold",
6777
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:underline motion-reduce:transition-none",
6778
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] rounded-sm focus-visible:outline-none"
6779
+ ),
6780
+ children: toast.action.label
6781
+ }
6782
+ )
6783
+ ] }),
6784
+ /* @__PURE__ */ jsx(
6785
+ "button",
6786
+ {
6787
+ type: "button",
6788
+ onClick: close,
6789
+ className: cn(
6790
+ "text-fg-4 hover:text-fg-2 rounded-icon -mr-1 inline-flex size-5 shrink-0 items-center justify-center",
6791
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
6792
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
6793
+ ),
6794
+ "aria-label": "Dismiss",
6795
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5", "aria-hidden": "true" })
6796
+ }
6797
+ )
6619
6798
  ] }),
6620
- /* @__PURE__ */ jsx(
6621
- "button",
6799
+ showProgress && /* @__PURE__ */ jsx("div", { className: "bg-rule absolute inset-x-0 bottom-0 h-1", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
6800
+ "div",
6622
6801
  {
6623
- type: "button",
6624
- onClick: close,
6625
6802
  className: cn(
6626
- "rounded-icon inline-flex size-5 shrink-0 items-center justify-center",
6627
- "opacity-70 transition-opacity duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:opacity-100 motion-reduce:transition-none",
6628
- "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
6803
+ "h-full transition-[width] ease-linear motion-reduce:transition-none",
6804
+ bar
6629
6805
  ),
6630
- "aria-label": "Dismiss",
6631
- children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5", "aria-hidden": "true" })
6806
+ style: { width: filled ? "100%" : "0%", transitionDuration: `${duration}ms` }
6632
6807
  }
6633
- )
6634
- ] })
6808
+ ) })
6809
+ ]
6635
6810
  }
6636
6811
  );
6637
6812
  }
@@ -6774,11 +6949,9 @@ function SidebarProvider({
6774
6949
  storageKey,
6775
6950
  shortcut = DEFAULT_SHORTCUT
6776
6951
  }) {
6777
- const [uncontrolled, setUncontrolled] = React36.useState(() => {
6778
- if (controlled !== void 0) return controlled;
6779
- const stored = readStorage(storageKey);
6780
- return stored ?? defaultState;
6781
- });
6952
+ const [uncontrolled, setUncontrolled] = React36.useState(
6953
+ controlled ?? defaultState
6954
+ );
6782
6955
  React36.useEffect(() => {
6783
6956
  if (controlled !== void 0) return;
6784
6957
  const stored = readStorage(storageKey);
@@ -6890,7 +7063,6 @@ var Sidebar = React36.forwardRef(function Sidebar2({ className, collapsible = fa
6890
7063
  "data-peek": peek ? "true" : void 0,
6891
7064
  "data-labels": labelsHidden ? "hide" : "show",
6892
7065
  "data-collapsible": collapsible ? "true" : void 0,
6893
- suppressHydrationWarning: true,
6894
7066
  onMouseEnter: handleEnter,
6895
7067
  onMouseLeave: handleLeave,
6896
7068
  style: { width: effectiveWidth, ...style },
@@ -6980,7 +7152,9 @@ var SidebarBrandText = React36.forwardRef(
6980
7152
  ref,
6981
7153
  "aria-hidden": "false",
6982
7154
  className: cn(
6983
- "min-w-0 truncate",
7155
+ // line-clamp-1 (not `truncate`) so multi-word wordmarks clip at a
7156
+ // word boundary instead of mid-word when the rail is narrow.
7157
+ "min-w-0 line-clamp-1",
6984
7158
  // Smooth fade + width collapse on rail. Keeps the wordmark
6985
7159
  // legible up to the moment the column reaches rail width, then
6986
7160
  // fully drops out (visibility:hidden cuts hit-testing).
@@ -7098,7 +7272,10 @@ var SidebarLink = React36.forwardRef(
7098
7272
  "span",
7099
7273
  {
7100
7274
  className: cn(
7101
- "min-w-0 flex-1 truncate",
7275
+ // line-clamp-1 (not `truncate`) so multi-word labels clip at a
7276
+ // word boundary; collapses cleanly with the rail-mode max-width
7277
+ // animation since both rules only constrain visible content.
7278
+ "min-w-0 flex-1 line-clamp-1",
7102
7279
  "transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
7103
7280
  "max-w-full opacity-100",
7104
7281
  "group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible"
@@ -7119,7 +7296,10 @@ var SidebarLinkLabel = React36.forwardRef(
7119
7296
  {
7120
7297
  ref,
7121
7298
  className: cn(
7122
- "min-w-0 flex-1 truncate",
7299
+ // line-clamp-1 (not `truncate`) so multi-word labels clip at a
7300
+ // word boundary; collapses cleanly with the rail-mode max-width
7301
+ // animation since both rules only constrain visible content.
7302
+ "min-w-0 flex-1 line-clamp-1",
7123
7303
  // Fade + collapse instead of hard display:none so a single
7124
7304
  // 180ms opacity tween covers all labels in lockstep with the
7125
7305
  // 220ms aside-width transition — no snap on the last frame.
@@ -7237,7 +7417,10 @@ var SidebarLinkGroup = React36.forwardRef(
7237
7417
  "span",
7238
7418
  {
7239
7419
  className: cn(
7240
- "min-w-0 flex-1 truncate",
7420
+ // line-clamp-1 (not `truncate`) so multi-word labels clip at a
7421
+ // word boundary; collapses cleanly with the rail-mode max-width
7422
+ // animation since both rules only constrain visible content.
7423
+ "min-w-0 flex-1 line-clamp-1",
7241
7424
  "transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
7242
7425
  "max-w-full opacity-100",
7243
7426
  "group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible"
@@ -7331,8 +7514,8 @@ var SidebarUser = React36.forwardRef(function SidebarUser2({ name, subtitle, ava
7331
7514
  "group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible"
7332
7515
  ),
7333
7516
  children: [
7334
- /* @__PURE__ */ jsx("div", { className: "text-fg truncate text-[13px] font-medium", children: name }),
7335
- subtitle != null && /* @__PURE__ */ jsx("div", { className: "text-fg-4 truncate font-mono text-[10.5px]", children: subtitle })
7517
+ /* @__PURE__ */ jsx("div", { className: "text-fg line-clamp-1 text-[13px] font-medium", children: name }),
7518
+ subtitle != null && /* @__PURE__ */ jsx("div", { className: "text-fg-4 line-clamp-1 font-mono text-[10.5px]", children: subtitle })
7336
7519
  ]
7337
7520
  }
7338
7521
  )
@@ -7401,7 +7584,7 @@ var AppHeaderSearch = forwardRef(
7401
7584
  ...props,
7402
7585
  children: [
7403
7586
  /* @__PURE__ */ jsx(SearchIcon, { className: "size-[13px] shrink-0", strokeWidth: 1.8, "aria-hidden": "true" }),
7404
- /* @__PURE__ */ jsx("span", { className: "truncate text-left", children: placeholder }),
7587
+ /* @__PURE__ */ jsx("span", { className: "line-clamp-1 text-left", children: placeholder }),
7405
7588
  shortcut !== null && shortcut !== void 0 && shortcut !== "" && /* @__PURE__ */ jsx(
7406
7589
  "kbd",
7407
7590
  {
@@ -7424,11 +7607,15 @@ var AppHeaderActions = forwardRef(
7424
7607
  }
7425
7608
  );
7426
7609
  AppHeaderActions.displayName = "AppHeaderActions";
7427
- var PageHeader = forwardRef(function PageHeader2({ eyebrow, title, meta, className, ...props }, ref) {
7610
+ var PageHeader = forwardRef(function PageHeader2({ eyebrow, title, description, actions, meta, className, ...props }, ref) {
7428
7611
  return /* @__PURE__ */ jsxs("header", { ref, className: cn("mb-7", className), ...props, children: [
7429
7612
  eyebrow && /* @__PURE__ */ jsx("div", { className: "mb-1.5", children: eyebrow }),
7430
- /* @__PURE__ */ jsx("h1", { className: "font-display text-fg text-[26px] leading-tight tracking-tight", children: title }),
7431
- meta && /* @__PURE__ */ jsx("div", { className: "text-fg-3 mt-2 flex items-center gap-2 text-sm", children: meta })
7613
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-start justify-between gap-3", children: [
7614
+ /* @__PURE__ */ jsx("h1", { className: "font-display text-fg text-[26px] leading-tight tracking-tight", children: title }),
7615
+ actions && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2", children: actions })
7616
+ ] }),
7617
+ description && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-2 max-w-2xl text-sm leading-relaxed", children: description }),
7618
+ meta && /* @__PURE__ */ jsx("div", { className: "text-fg-3 mt-2 flex flex-wrap items-center gap-2 text-sm", children: meta })
7432
7619
  ] });
7433
7620
  });
7434
7621
  PageHeader.displayName = "PageHeader";
@@ -7460,6 +7647,173 @@ var PageHeaderSep = forwardRef(function PageHeaderSep2({ children, className, ..
7460
7647
  );
7461
7648
  });
7462
7649
  PageHeaderSep.displayName = "PageHeaderSep";
7650
+ var columnsToGridCols = {
7651
+ 1: "grid-cols-1",
7652
+ 2: "grid-cols-2",
7653
+ 3: "grid-cols-3",
7654
+ 4: "grid-cols-4"
7655
+ };
7656
+ var MetadataGrid = forwardRef(function MetadataGrid2({ columns = 2, gapX = "gap-x-6", gapY = "gap-y-3", className, children, ...props }, ref) {
7657
+ return /* @__PURE__ */ jsx(
7658
+ "dl",
7659
+ {
7660
+ ref,
7661
+ className: cn("grid", columnsToGridCols[columns], gapX, gapY, className),
7662
+ ...props,
7663
+ children
7664
+ }
7665
+ );
7666
+ });
7667
+ MetadataGrid.displayName = "MetadataGrid";
7668
+ var spanToColSpan = {
7669
+ 1: "col-span-1",
7670
+ 2: "col-span-2",
7671
+ 3: "col-span-3",
7672
+ 4: "col-span-4"
7673
+ };
7674
+ function DataItem({ label, value, span = 1, className }) {
7675
+ return /* @__PURE__ */ jsxs("div", { className: cn("min-w-0", spanToColSpan[span], className), children: [
7676
+ /* @__PURE__ */ jsx("dt", { className: "text-fg-4 text-[11px] font-medium uppercase tracking-wider", children: label }),
7677
+ /* @__PURE__ */ jsx("dd", { className: "text-fg mt-0.5 break-words text-sm", children: value })
7678
+ ] });
7679
+ }
7680
+ var toneToTile = {
7681
+ info: "bg-info/10 text-info",
7682
+ success: "bg-success-fg/10 text-success-fg",
7683
+ warning: "bg-warning-fg/10 text-warning-fg",
7684
+ destructive: "bg-danger-fg/10 text-danger-fg",
7685
+ accent: "bg-accent/10 text-accent",
7686
+ muted: "bg-bg-3 text-fg-3"
7687
+ };
7688
+ var toneToValue = {
7689
+ info: "text-info",
7690
+ success: "text-success-fg",
7691
+ warning: "text-warning-fg",
7692
+ destructive: "text-danger-fg",
7693
+ accent: "text-accent",
7694
+ muted: "text-fg"
7695
+ };
7696
+ var sentimentChip = {
7697
+ positive: "bg-success-bg text-success-fg",
7698
+ negative: "bg-danger-bg text-danger-fg",
7699
+ neutral: "bg-bg-3 text-fg-3"
7700
+ };
7701
+ var sentimentText = {
7702
+ positive: "text-success-fg",
7703
+ negative: "text-danger-fg",
7704
+ neutral: "text-fg-3"
7705
+ };
7706
+ var directionToSentiment = {
7707
+ up: "positive",
7708
+ down: "negative",
7709
+ flat: "neutral"
7710
+ };
7711
+ var directionToIcon = {
7712
+ up: TrendingUpIcon,
7713
+ down: TrendingDownIcon,
7714
+ flat: MinusIcon
7715
+ };
7716
+ var directionToSrLabel = {
7717
+ up: "Up",
7718
+ down: "Down",
7719
+ flat: "No change"
7720
+ };
7721
+ function Sparkline({ data, className }) {
7722
+ if (data.length < 2) return null;
7723
+ const w = 100;
7724
+ const h = 28;
7725
+ const min = Math.min(...data);
7726
+ const max = Math.max(...data);
7727
+ const range = max - min || 1;
7728
+ const coords = data.map((d, i) => {
7729
+ const x = i / (data.length - 1) * w;
7730
+ const y = h - (d - min) / range * (h - 2) - 1;
7731
+ return [x, y];
7732
+ });
7733
+ const line = coords.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`).join(" ");
7734
+ const area = `0,${h} ${line} ${w},${h}`;
7735
+ return /* @__PURE__ */ jsxs(
7736
+ "svg",
7737
+ {
7738
+ viewBox: `0 0 ${w} ${h}`,
7739
+ preserveAspectRatio: "none",
7740
+ className: cn("h-7 w-full", className),
7741
+ "aria-hidden": "true",
7742
+ children: [
7743
+ /* @__PURE__ */ jsx("polygon", { points: area, fill: "currentColor", className: "opacity-10" }),
7744
+ /* @__PURE__ */ jsx(
7745
+ "polyline",
7746
+ {
7747
+ points: line,
7748
+ fill: "none",
7749
+ stroke: "currentColor",
7750
+ strokeWidth: "2",
7751
+ strokeLinecap: "round",
7752
+ strokeLinejoin: "round",
7753
+ vectorEffect: "non-scaling-stroke"
7754
+ }
7755
+ )
7756
+ ]
7757
+ }
7758
+ );
7759
+ }
7760
+ var KpiCard = forwardRef(function KpiCard2({ label, value, icon, tone = "muted", delta, trend, hint, action, toneValue, className, ...props }, ref) {
7761
+ const deltaSentiment = delta ? delta.sentiment ?? directionToSentiment[delta.direction] : null;
7762
+ const DeltaIcon = delta ? directionToIcon[delta.direction] : null;
7763
+ const sparkColor = deltaSentiment ? sentimentText[deltaSentiment] : toneToValue[tone];
7764
+ return /* @__PURE__ */ jsxs(Card, { ref, className: cn("p-4", className), ...props, children: [
7765
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
7766
+ icon && /* @__PURE__ */ jsx(
7767
+ "div",
7768
+ {
7769
+ "aria-hidden": "true",
7770
+ className: cn(
7771
+ "flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg]:size-5",
7772
+ toneToTile[tone]
7773
+ ),
7774
+ children: icon
7775
+ }
7776
+ ),
7777
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
7778
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-baseline gap-x-2 gap-y-1", children: [
7779
+ /* @__PURE__ */ jsx(
7780
+ "p",
7781
+ {
7782
+ className: cn(
7783
+ "text-2xl font-bold tracking-tight tabular-nums",
7784
+ toneValue ? toneToValue[tone] : "text-fg"
7785
+ ),
7786
+ children: value
7787
+ }
7788
+ ),
7789
+ delta && DeltaIcon && deltaSentiment && /* @__PURE__ */ jsxs(
7790
+ "span",
7791
+ {
7792
+ className: cn(
7793
+ "inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[11px] font-semibold tabular-nums",
7794
+ sentimentChip[deltaSentiment]
7795
+ ),
7796
+ children: [
7797
+ /* @__PURE__ */ jsx(DeltaIcon, { className: "size-3" }),
7798
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
7799
+ directionToSrLabel[delta.direction],
7800
+ " "
7801
+ ] }),
7802
+ delta.value
7803
+ ]
7804
+ }
7805
+ )
7806
+ ] }),
7807
+ /* @__PURE__ */ jsx("p", { className: "text-fg-3 text-xs", children: label }),
7808
+ delta?.label && /* @__PURE__ */ jsx("p", { className: "text-fg-4 mt-0.5 text-[11px]", children: delta.label }),
7809
+ hint && /* @__PURE__ */ jsx("p", { className: "text-fg-4 mt-0.5 text-[11px]", children: hint })
7810
+ ] }),
7811
+ action && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
7812
+ ] }),
7813
+ trend && trend.length > 1 && /* @__PURE__ */ jsx(Sparkline, { data: trend, className: cn("mt-3", sparkColor) })
7814
+ ] });
7815
+ });
7816
+ KpiCard.displayName = "KpiCard";
7463
7817
  var DataTable = forwardRef(function DataTable2({ withToolbar, className, children, ...props }, ref) {
7464
7818
  return /* @__PURE__ */ jsx(
7465
7819
  "div",
@@ -7830,7 +8184,7 @@ var DetailSpineHeader = forwardRef(
7830
8184
  }
7831
8185
  ),
7832
8186
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
7833
- /* @__PURE__ */ jsx("div", { className: "font-display text-fg truncate text-base leading-tight font-medium", children: title }),
8187
+ /* @__PURE__ */ jsx("div", { className: "font-display text-fg line-clamp-1 text-base leading-tight font-medium", children: title }),
7834
8188
  /* @__PURE__ */ jsx("div", { className: "font-spec text-fg-4 text-[11px]", children: subtitle })
7835
8189
  ] })
7836
8190
  ] });
@@ -7909,27 +8263,51 @@ var KanbanColumn = forwardRef(function KanbanColumn2({ title, count, className,
7909
8263
  );
7910
8264
  });
7911
8265
  KanbanColumn.displayName = "KanbanColumn";
7912
- var kanbanCardVariants = cva(
7913
- cn(
7914
- "bg-surface border border-rule rounded-card shadow-quiet p-3 space-y-2 cursor-grab",
7915
- "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none"
7916
- ),
7917
- {
7918
- variants: {
7919
- variant: {
7920
- default: "",
7921
- pro: "border-l-2 border-l-pro-fg",
7922
- warn: "border-l-2 border-l-warning-fg",
7923
- danger: "border-l-2 border-l-danger-fg"
7924
- }
7925
- },
7926
- defaultVariants: {
7927
- variant: "default"
7928
- }
7929
- }
8266
+ var kanbanCardBase = cn(
8267
+ "bg-surface border border-rule rounded-card shadow-quiet p-3 space-y-2 cursor-grab",
8268
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:border-rule-strong motion-reduce:transition-none"
7930
8269
  );
7931
- var KanbanCard = forwardRef(function KanbanCard2({ variant, className, children, ...props }, ref) {
7932
- return /* @__PURE__ */ jsx("div", { ref, className: cn(kanbanCardVariants({ variant }), className), ...props, children });
8270
+ var priorityConfig = {
8271
+ high: { label: "High", variant: "destructive" },
8272
+ medium: { label: "Med", variant: "warning" },
8273
+ low: { label: "Low", variant: "secondary" }
8274
+ };
8275
+ var dueStatusClass = {
8276
+ overdue: "text-danger-fg font-semibold",
8277
+ soon: "text-warning-fg font-semibold",
8278
+ default: "text-fg-3 font-medium"
8279
+ };
8280
+ var KanbanCard = forwardRef(function KanbanCard2({ className, label, title, client, priority, dueDate, dueStatus, assignee, children, ...props }, ref) {
8281
+ const isRich = title !== void 0;
8282
+ const pri = priority ? priorityConfig[priority] : null;
8283
+ const hasFooter = Boolean(dueDate || assignee);
8284
+ return /* @__PURE__ */ jsx("div", { ref, className: cn(kanbanCardBase, className), ...props, children: isRich ? /* @__PURE__ */ jsxs("div", { children: [
8285
+ (label || pri) && /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-start justify-between gap-2", children: [
8286
+ label ? /* @__PURE__ */ jsx(Badge, { variant: "info", size: "sm", children: label }) : /* @__PURE__ */ jsx("span", {}),
8287
+ pri && /* @__PURE__ */ jsx(Badge, { variant: pri.variant, size: "sm", children: pri.label })
8288
+ ] }),
8289
+ /* @__PURE__ */ jsx("p", { className: "text-fg text-[13px] leading-snug font-semibold", children: title }),
8290
+ client && /* @__PURE__ */ jsxs("p", { className: "text-fg-3 mt-1 flex items-center gap-1.5 text-xs", children: [
8291
+ /* @__PURE__ */ jsx(UserIcon, { className: "size-3 shrink-0", "aria-hidden": "true" }),
8292
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: client })
8293
+ ] }),
8294
+ hasFooter && /* @__PURE__ */ jsxs("div", { className: "border-rule-soft mt-3 flex items-center justify-between border-t pt-2.5", children: [
8295
+ dueDate ? /* @__PURE__ */ jsxs(
8296
+ "span",
8297
+ {
8298
+ className: cn(
8299
+ "flex items-center gap-1 text-xs",
8300
+ dueStatusClass[dueStatus ?? "default"]
8301
+ ),
8302
+ children: [
8303
+ /* @__PURE__ */ jsx(CalendarIcon, { className: "size-3 shrink-0", "aria-hidden": "true" }),
8304
+ dueDate
8305
+ ]
8306
+ }
8307
+ ) : /* @__PURE__ */ jsx("span", {}),
8308
+ assignee && /* @__PURE__ */ jsx(Avatar, { size: "xs", name: assignee.name, src: assignee.src, title: assignee.name })
8309
+ ] })
8310
+ ] }) : children });
7933
8311
  });
7934
8312
  KanbanCard.displayName = "KanbanCard";
7935
8313
  var Toolbar = forwardRef(function Toolbar2({ className, children, ...props }, ref) {
@@ -8059,6 +8437,6 @@ var KbdHint = forwardRef(function KbdHint2({ className, children, ...props }, re
8059
8437
  });
8060
8438
  KbdHint.displayName = "KbdHint";
8061
8439
 
8062
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityItem, ActivityList, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, AtSignIcon, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, Button, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatBubbleIcon, CheckCircle2Icon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton, Content15 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DatePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DocumentIcon, DollarSignIcon, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EyeIcon, EyeOffIcon, Eyebrow, FileIcon, FileReturnIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FormError, FormSuccess, GlobeIcon, GoogleBrandIcon, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, InboxIcon, InfoIcon, Input, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, KbdHint, KeyIcon, KeyboardShortcutsDialog, Label4 as Label, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MenuIcon, MessageCircleIcon, MessageCircleWarningIcon, MicrosoftBrandIcon, MinusIcon, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoveIcon, MultiFilterPill, MultiSelectField, MutedSpec, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PenSignIcon, PencilIcon, PhoneIcon, PhoneInput, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, ProgressBar, ProgressRing, RadioGroup3 as RadioGroup, RadioGroupItem, ReceiptIcon, ReplyIcon, RotateCcwIcon, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SendIcon, Separator4 as Separator, SettingsIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Shell, ShieldIcon, SideDrawer, Sidebar, SidebarBrand, SidebarBrandText, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, StarIcon, StarRating, Stat, Stepper, StrikethroughIcon, SubmitButton, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TeamIcon, TeamMemberSelect, Textarea, ToastProvider, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Trash2Icon, TrashIcon, UnderlineIcon, UploadIcon, UserCircleIcon, UserIcon, UsersIcon, VisuallyHidden, WorkflowIcon, XIcon, ZoomInIcon, ZoomOutIcon, alertVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, displayToIso, filterChipVariants, inputVariants, isoToDisplay, kanbanCardVariants, labelVariants, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, shadows, sidebarLinkBadgeVariants, spacing, starRatingVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarState, useToast };
8440
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityItem, ActivityList, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AlertTriangleSolidIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, AtSignIcon, Avatar, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, Button, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton, Content15 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DatePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DocumentIcon, DollarSignIcon, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EyeIcon, EyeOffIcon, Eyebrow, FileIcon, FileReturnIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FormError, FormSection, FormSuccess, GlobeIcon, GoogleBrandIcon, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, InboxIcon, InfoCircleSolidIcon, InfoIcon, Input, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, KbdHint, KeyIcon, KeyboardShortcutsDialog, KpiCard, Label4 as Label, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LoadingRows, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MenuIcon, MessageCircleIcon, MessageCircleWarningIcon, MetadataGrid, MicrosoftBrandIcon, MinusIcon, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoveIcon, MultiFilterPill, MultiSelectField, MutedSpec, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PenSignIcon, PencilIcon, PhoneIcon, PhoneInput, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, ProgressBar, ProgressRing, RadioGroup3 as RadioGroup, RadioGroupItem, ReceiptIcon, ReplyIcon, RotateCcwIcon, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SendIcon, Separator4 as Separator, SettingsIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Shell, ShieldIcon, SideDrawer, Sidebar, SidebarBrand, SidebarBrandText, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, StarIcon, StarRating, Stat, Stepper, StrikethroughIcon, SubmitButton, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TeamIcon, TeamMemberSelect, Textarea, ToastProvider, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Trash2Icon, TrashIcon, TrendingDownIcon, TrendingUpIcon, UnderlineIcon, UploadIcon, UserCircleIcon, UserIcon, UsersIcon, VisuallyHidden, WorkflowIcon, XCircleSolidIcon, XIcon, ZoomInIcon, ZoomOutIcon, alertVariants, badgeVariants, buttonVariants, cardVariants, cn, colors, displayToIso, filterChipVariants, inputVariants, isoToDisplay, labelVariants, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, shadows, sidebarLinkBadgeVariants, spacing, starRatingVariants, surfaces, systemTokens, textareaVariants, typography, useSidebarState, useToast };
8063
8441
  //# sourceMappingURL=index.js.map
8064
8442
  //# sourceMappingURL=index.js.map