@assure-one/design-system 1.31.0 → 1.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +61 -6
  2. package/codemods/0.2.0-radix-migration.mjs +315 -0
  3. package/codemods/README.md +365 -0
  4. package/codemods/lib/css-selectors.mjs +33 -0
  5. package/codemods/lib/css-values.mjs +223 -0
  6. package/codemods/lib/ds-stylesheet.mjs +168 -0
  7. package/codemods/lib/environment.mjs +72 -0
  8. package/codemods/lib/files.mjs +100 -0
  9. package/codemods/lib/forms.mjs +253 -0
  10. package/codemods/lib/jsx.mjs +0 -0
  11. package/codemods/lib/ledger.mjs +84 -0
  12. package/codemods/lib/registry.mjs +32 -0
  13. package/codemods/lib/report.mjs +119 -0
  14. package/codemods/lib/runner.mjs +164 -0
  15. package/codemods/run.mjs +161 -0
  16. package/codemods/transforms/cm-14-hidden-mirrors.mjs +275 -0
  17. package/codemods/transforms/cm-15-dom-selectors.mjs +573 -0
  18. package/codemods/transforms/cm-16-globals-css.mjs +487 -0
  19. package/codemods/transforms/cm-20-select-sentinels.mjs +442 -0
  20. package/dist/css/base.css +60 -0
  21. package/dist/css/components.css +7 -0
  22. package/dist/css/legacy-aliases.css +665 -0
  23. package/dist/css/shadcn.css +155 -0
  24. package/dist/css/tailwind.css +296 -0
  25. package/dist/css/tokens.css +630 -0
  26. package/dist/index.d.ts +807 -27
  27. package/dist/index.js +2038 -683
  28. package/dist/index.js.map +1 -1
  29. package/dist/styles.css +1 -1
  30. package/dist/system-BDU18fVg.d.ts +559 -0
  31. package/dist/testing/index.cjs +458 -0
  32. package/dist/testing/index.d.cts +253 -0
  33. package/dist/testing/index.d.ts +253 -0
  34. package/dist/testing/index.js +452 -0
  35. package/dist/testing/setup.cjs +123 -0
  36. package/dist/testing/setup.js +121 -0
  37. package/dist/testing/style-stub.cjs +7 -0
  38. package/dist/testing/style-stub.js +5 -0
  39. package/dist/tokens/index.d.ts +50 -439
  40. package/dist/tokens/index.js +557 -50
  41. package/dist/tokens/index.js.map +1 -1
  42. package/package.json +74 -5
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import * as React39 from 'react';
3
- import { forwardRef, useId, useRef, useState, useEffect, useCallback, useImperativeHandle, useMemo, createContext, Fragment as Fragment$1, useContext } from 'react';
3
+ import { forwardRef, useId, useRef, useState, useEffect, useCallback, useImperativeHandle, useMemo, createContext, Fragment as Fragment$1, useSyncExternalStore, useContext } from 'react';
4
4
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
5
5
  import { clsx } from 'clsx';
6
- import { twMerge } from 'tailwind-merge';
6
+ import { extendTailwindMerge } from 'tailwind-merge';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
9
9
  import { cva } from 'class-variance-authority';
@@ -11,13 +11,13 @@ import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
11
11
  import { Slot } from '@radix-ui/react-slot';
12
12
  import * as AvatarPrimitive from '@radix-ui/react-avatar';
13
13
  import { DayPicker } from 'react-day-picker';
14
- import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
14
+ import { parse, isValid, format, startOfMonth, startOfYear, subYears, endOfMonth, endOfYear, addYears } from 'date-fns';
15
15
  import * as SelectPrimitive from '@radix-ui/react-select';
16
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
16
17
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
17
18
  import { Command } from 'cmdk';
18
19
  import * as DialogPrimitive from '@radix-ui/react-dialog';
19
20
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
20
- import { parse, isValid, format } from 'date-fns';
21
21
  import * as PopoverPrimitive from '@radix-ui/react-popover';
22
22
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
23
23
  import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
@@ -42,52 +42,52 @@ import * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';
42
42
  // src/tokens/reference.ts
43
43
  var colors = {
44
44
  /* Surfaces */
45
- bg: "#FDFDFC",
46
- bg2: "#F7F7F5",
47
- bg3: "#F0F0ED",
48
- surface: "#FFFFFF",
49
- surface2: "#FAFAF8",
45
+ bg: "#ffffff",
46
+ bg2: "#f1f3f8",
47
+ bg3: "#e7eaf1",
48
+ surface: "#ffffff",
49
+ surface2: "#f7f8fc",
50
50
  /* Foreground */
51
- fg: "#0A0A0A",
52
- fg2: "#38383B",
53
- fg3: "#6B6B70",
54
- fg4: "#9A9AA0",
55
- fg5: "#C4C4C8",
51
+ fg: "#0a0a0a",
52
+ fg2: "#38383b",
53
+ fg3: "#5f5f64",
54
+ fg4: "#6b6b70",
55
+ fg5: "#9a9aa0",
56
56
  /* Rules */
57
- rule: "#EAEAE6",
58
- ruleSoft: "#F0F0EC",
59
- ruleStrong: "#DADAD4",
57
+ rule: "#e4e7ef",
58
+ ruleSoft: "#eef0f5",
59
+ ruleStrong: "#d3d8e3",
60
60
  /* Accent (cyan) */
61
- accent: "#0066FF",
62
- accent2: "#0052CC",
63
- accentTint: "#E8F0FF",
64
- accentHover: "#005BE6",
65
- accentActive: "#004FCC",
61
+ accent: "#6c42f8",
62
+ accent2: "#5127e8",
63
+ accentTint: "#efeaff",
64
+ accentHover: "#5e35f2",
65
+ accentActive: "#5127e8",
66
66
  /* Pro (purple) */
67
- proBg: "#F4F1FF",
68
- proBgHover: "#EEE9FF",
69
- proBgActive: "#E4DDFF",
70
- proFg: "#6C42F8",
71
- proHover: "#5E35F2",
72
- proActive: "#5127E8",
73
- proDisabled: "#B7A7F3",
74
- proLine: "#7B5BD8",
67
+ proBg: "#f4f1ff",
68
+ proBgHover: "#eee9ff",
69
+ proBgActive: "#e4ddff",
70
+ proFg: "#6c42f8",
71
+ proHover: "#5e35f2",
72
+ proActive: "#5127e8",
73
+ proDisabled: "#b7a7f3",
74
+ proLine: "#7b5bd8",
75
75
  /* Disabled */
76
- fgDisabled: "#A7A7AC",
77
- bgDisabled: "#F3F3F1",
76
+ fgDisabled: "#a7a7ac",
77
+ bgDisabled: "#f3f3f1",
78
78
  /* Status */
79
- successFg: "#1F7A3D",
80
- successBg: "#EAF6EE",
81
- successLine: "#C5E5CF",
82
- warningFg: "#B45F0A",
83
- warningBg: "#FFF3E5",
84
- warningLine: "#F5D5A8",
85
- dangerFg: "#C43838",
86
- dangerBg: "#FBEAEA",
87
- dangerLine: "#ECC5C5",
79
+ successFg: "#1f7a3d",
80
+ successBg: "#eaf6ee",
81
+ successLine: "#c5e5cf",
82
+ warningFg: "#8a4606",
83
+ warningBg: "#fff3e5",
84
+ warningLine: "#f5d5a8",
85
+ dangerFg: "#c43838",
86
+ dangerBg: "#fbeaea",
87
+ dangerLine: "#ecc5c5",
88
88
  /* On-brand */
89
- fgOnAccent: "#FFFFFF",
90
- fgOnPro: "#FFFFFF"
89
+ fgOnAccent: "#ffffff",
90
+ fgOnPro: "#ffffff"
91
91
  };
92
92
  var typography = {
93
93
  family: {
@@ -113,17 +113,17 @@ var radii = {
113
113
  full: "9999px"
114
114
  };
115
115
  var shadows = {
116
- quiet: "0 1px 2px rgba(10,10,10,0.03)",
117
- card: "0 12px 28px -16px rgba(10,10,10,0.18), 0 1px 2px rgba(10,10,10,0.04)",
118
- pop: "0 30px 80px -30px rgba(10,10,10,0.18), 0 8px 24px -8px rgba(10,10,10,0.06)",
119
- focusRing: "0 0 0 2px rgba(0, 102, 255, 0.18)"
116
+ quiet: "0 1px 2px rgba(16, 20, 36, 0.05)",
117
+ card: "0 1px 2px rgba(16, 20, 36, 0.04), 0 4px 12px -4px rgba(16, 20, 36, 0.08)",
118
+ pop: "0 0 0 1px rgba(16, 20, 36, 0.03), 0 2px 4px -1px rgba(16, 20, 36, 0.06), 0 12px 28px -6px rgba(16, 20, 36, 0.14)",
119
+ focusRing: "0 0 0 2px #ffffff, 0 0 0 4px #6c42f8"
120
120
  };
121
121
  var overlays = {
122
122
  hover: "rgba(10, 10, 10, 0.03)",
123
123
  active: "rgba(10, 10, 10, 0.05)"
124
124
  };
125
125
  var layout = {
126
- shellSidebarWidth: "256px",
126
+ shellSidebarWidth: "200px",
127
127
  shellHeaderHeight: "56px",
128
128
  contentPad: "32px"
129
129
  };
@@ -144,10 +144,10 @@ var spacing = {
144
144
  180: "180px"
145
145
  };
146
146
  var surfaces = {
147
- bg: "#FDFDFC",
148
- bg2: "#F7F7F5",
149
- surface: "#FFFFFF",
150
- surface2: "#FAFAF8"
147
+ bg: "#ffffff",
148
+ bg2: "#f1f3f8",
149
+ surface: "#ffffff",
150
+ surface2: "#f7f8fc"
151
151
  };
152
152
  var motion = {
153
153
  ease: {
@@ -163,6 +163,28 @@ var motion = {
163
163
  slow: "400ms"
164
164
  }
165
165
  };
166
+ var iconSizes = {
167
+ xs: "12px",
168
+ sm: "14px",
169
+ md: "16px",
170
+ lg: "20px"
171
+ };
172
+ var zIndex = {
173
+ base: 0,
174
+ sticky: 100,
175
+ overlay: 200,
176
+ modal: 300,
177
+ popover: 400,
178
+ toast: 500,
179
+ tooltip: 600
180
+ };
181
+ var breakpoints = {
182
+ sm: "40rem",
183
+ md: "48rem",
184
+ lg: "64rem",
185
+ xl: "80rem",
186
+ "2xl": "96rem"
187
+ };
166
188
  var reference = {
167
189
  colors,
168
190
  typography,
@@ -172,7 +194,10 @@ var reference = {
172
194
  layout,
173
195
  motion,
174
196
  spacing,
175
- surfaces
197
+ surfaces,
198
+ iconSizes,
199
+ zIndex,
200
+ breakpoints
176
201
  };
177
202
 
178
203
  // src/tokens/system.ts
@@ -370,6 +395,54 @@ var systemTokens = {
370
395
  }
371
396
  }
372
397
  },
398
+ /**
399
+ * Control sizing (amendment A1, W2-03). One outer height per size name, with
400
+ * the padding, gap, label size and glyph size derived from it.
401
+ *
402
+ * **Nothing reads these yet** and the numbers are gated on decision D5
403
+ * (implementation plan §3) — what each control renders *today* is in
404
+ * `docs/design-system/control-sizes.md`, and W2-05 is the task that unifies
405
+ * them. Referencing the scale here is also what keeps the custom properties
406
+ * in the published stylesheet, so `[data-ds-density="compact"]` has something
407
+ * to re-point.
408
+ */
409
+ control: {
410
+ height: {
411
+ xs: "var(--control-height-xs)",
412
+ sm: "var(--control-height-sm)",
413
+ md: "var(--control-height-md)",
414
+ lg: "var(--control-height-lg)",
415
+ xl: "var(--control-height-xl)"
416
+ },
417
+ paddingX: {
418
+ xs: "var(--control-padding-x-xs)",
419
+ sm: "var(--control-padding-x-sm)",
420
+ md: "var(--control-padding-x-md)",
421
+ lg: "var(--control-padding-x-lg)",
422
+ xl: "var(--control-padding-x-xl)"
423
+ },
424
+ gap: {
425
+ xs: "var(--control-gap-xs)",
426
+ sm: "var(--control-gap-sm)",
427
+ md: "var(--control-gap-md)",
428
+ lg: "var(--control-gap-lg)",
429
+ xl: "var(--control-gap-xl)"
430
+ },
431
+ fontSize: {
432
+ xs: "var(--control-font-size-xs)",
433
+ sm: "var(--control-font-size-sm)",
434
+ md: "var(--control-font-size-md)",
435
+ lg: "var(--control-font-size-lg)",
436
+ xl: "var(--control-font-size-xl)"
437
+ },
438
+ icon: {
439
+ xs: "var(--control-icon-xs)",
440
+ sm: "var(--control-icon-sm)",
441
+ md: "var(--control-icon-md)",
442
+ lg: "var(--control-icon-lg)",
443
+ xl: "var(--control-icon-xl)"
444
+ }
445
+ },
373
446
  layout: {
374
447
  shellSidebarWidth: "var(--shell-sidebar-w)",
375
448
  shellSidebarRailWidth: "var(--shell-sidebar-w-rail)",
@@ -386,6 +459,35 @@ var systemTokens = {
386
459
  tooltip: "var(--z-tooltip)"
387
460
  }
388
461
  };
462
+ var split = (values) => values.split(" ");
463
+ var DS_RADIUS = split(
464
+ "badges btn buttons card cards general icon input inputs pill control surface surface-sm badge"
465
+ );
466
+ var DS_SHADOW = split("card focus focus-ring focus-ring-field pop quiet subtle flat raised floating overlay");
467
+ var DS_EASE = split("out-quart");
468
+ var DS_FONT = split("body display");
469
+ var DS_TEXT = split(
470
+ "display title-page title-section title-sub body body-sm label helper caption micro overline code"
471
+ );
472
+ var DS_ANIMATE = split("accordion-down accordion-up collapsible-down collapsible-up pulse-soft");
473
+ var isDsShadowVar = (value) => /^\[var\(--shadow-[a-z0-9-]*\)\]$/.test(value);
474
+ var dsMergeConfig = {
475
+ extend: {
476
+ theme: {
477
+ radius: DS_RADIUS,
478
+ shadow: DS_SHADOW,
479
+ ease: DS_EASE,
480
+ font: DS_FONT,
481
+ text: DS_TEXT,
482
+ animate: DS_ANIMATE
483
+ },
484
+ classGroups: {
485
+ shadow: [{ shadow: [isDsShadowVar] }]
486
+ }
487
+ }
488
+ };
489
+ var extendMerge = extendTailwindMerge;
490
+ var twMerge = extendMerge(dsMergeConfig);
389
491
  function cn(...inputs) {
390
492
  return twMerge(clsx(inputs));
391
493
  }
@@ -2454,6 +2556,261 @@ var AccordionContent = React39.forwardRef(function AccordionContent2({ children,
2454
2556
  );
2455
2557
  });
2456
2558
  AccordionContent.displayName = AccordionPrimitive.Content.displayName;
2559
+
2560
+ // src/foundation/anatomy/define.ts
2561
+ var ROOT_PART = "root";
2562
+ var NAME_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
2563
+ var registry = /* @__PURE__ */ new Map();
2564
+ function assertName(value, what) {
2565
+ if (!NAME_PATTERN.test(value)) {
2566
+ throw new TypeError(
2567
+ `anatomy: ${what} must be lower-case kebab-case, received ${JSON.stringify(value)}`
2568
+ );
2569
+ }
2570
+ }
2571
+ function defineAnatomy(name, parts) {
2572
+ assertName(name, "component name");
2573
+ if (parts.length === 0) {
2574
+ throw new TypeError(`anatomy: ${name} must declare at least one part`);
2575
+ }
2576
+ const seen = /* @__PURE__ */ new Set();
2577
+ for (const part of parts) {
2578
+ assertName(part, `part name of ${name}`);
2579
+ if (seen.has(part)) {
2580
+ throw new TypeError(`anatomy: ${name} declares the part ${JSON.stringify(part)} twice`);
2581
+ }
2582
+ seen.add(part);
2583
+ }
2584
+ if (registry.has(name)) {
2585
+ throw new TypeError(`anatomy: ${name} is already registered`);
2586
+ }
2587
+ const attr = (part) => part === ROOT_PART ? name : `${name}-${String(part)}`;
2588
+ const anatomy = {
2589
+ name,
2590
+ parts: [...parts],
2591
+ attrs: parts.map((part) => attr(part)),
2592
+ attr,
2593
+ has: (part) => seen.has(part)
2594
+ };
2595
+ registry.set(name, anatomy);
2596
+ return anatomy;
2597
+ }
2598
+
2599
+ // src/foundation/anatomy/slots.ts
2600
+ defineAnatomy("agreement-viewer", ["root"]);
2601
+ defineAnatomy("message-composer", [
2602
+ "root",
2603
+ "header",
2604
+ "chips",
2605
+ "editor",
2606
+ "below-editor",
2607
+ "footer"
2608
+ ]);
2609
+ var codeAnatomy = defineAnatomy("code", ["root", "content"]);
2610
+ var kbdAnatomy = defineAnatomy("kbd", ["root"]);
2611
+ var buttonAnatomy = defineAnatomy("button", ["root", "icon-start", "icon-end", "spinner"]);
2612
+ var linkButtonAnatomy = defineAnatomy("link-button", ["root", "icon-start", "icon-end"]);
2613
+ var badgeAnatomy = defineAnatomy("badge", ["root", "dot", "icon"]);
2614
+ var inputAnatomy = defineAnatomy("input", [
2615
+ "root",
2616
+ "label",
2617
+ "icon-start",
2618
+ "icon-end",
2619
+ "password-toggle",
2620
+ "error"
2621
+ ]);
2622
+ var textareaAnatomy = defineAnatomy("textarea", ["root", "label", "error", "count"]);
2623
+ var searchInputAnatomy = defineAnatomy("search-input", [
2624
+ "root",
2625
+ "control",
2626
+ "icon",
2627
+ "clear"
2628
+ ]);
2629
+ var selectAnatomy = defineAnatomy("select", [
2630
+ "trigger",
2631
+ "icon",
2632
+ "content",
2633
+ "viewport",
2634
+ "item",
2635
+ "item-indicator",
2636
+ "label",
2637
+ "separator",
2638
+ "scroll-up-button",
2639
+ "scroll-down-button"
2640
+ ]);
2641
+ var checkboxAnatomy = defineAnatomy("checkbox", ["root", "indicator", "label"]);
2642
+ var radioGroupAnatomy = defineAnatomy("radio-group", [
2643
+ "root",
2644
+ "item",
2645
+ "indicator",
2646
+ "label"
2647
+ ]);
2648
+ var switchAnatomy = defineAnatomy("switch", ["root", "thumb", "label"]);
2649
+ var labelAnatomy = defineAnatomy("label", ["root", "required"]);
2650
+ var fileUploadAnatomy = defineAnatomy("file-upload", [
2651
+ "root",
2652
+ "dropzone",
2653
+ "input",
2654
+ "error"
2655
+ ]);
2656
+ var dialogAnatomy = defineAnatomy("dialog", [
2657
+ "overlay",
2658
+ "content",
2659
+ "header",
2660
+ "title",
2661
+ "description",
2662
+ "footer",
2663
+ "close"
2664
+ ]);
2665
+ var alertDialogAnatomy = defineAnatomy("alert-dialog", [
2666
+ "overlay",
2667
+ "content",
2668
+ "header",
2669
+ "title",
2670
+ "description",
2671
+ "footer",
2672
+ "action",
2673
+ "cancel"
2674
+ ]);
2675
+ var sheetAnatomy = defineAnatomy("sheet", [
2676
+ "overlay",
2677
+ "content",
2678
+ "header",
2679
+ "title",
2680
+ "description",
2681
+ "footer",
2682
+ "close"
2683
+ ]);
2684
+ var sideDrawerAnatomy = defineAnatomy("side-drawer", [
2685
+ "overlay",
2686
+ "root",
2687
+ "header",
2688
+ "heading",
2689
+ "subtitle",
2690
+ "close",
2691
+ "body",
2692
+ "footer"
2693
+ ]);
2694
+ var popoverAnatomy = defineAnatomy("popover", ["content"]);
2695
+ var dropdownMenuAnatomy = defineAnatomy("dropdown-menu", [
2696
+ "content",
2697
+ "item",
2698
+ "checkbox-item",
2699
+ "radio-item",
2700
+ "item-indicator",
2701
+ "label",
2702
+ "separator",
2703
+ "shortcut",
2704
+ "sub-trigger",
2705
+ "sub-content"
2706
+ ]);
2707
+ var contextMenuAnatomy = defineAnatomy("context-menu", [
2708
+ "content",
2709
+ "item",
2710
+ "checkbox-item",
2711
+ "radio-item",
2712
+ "item-indicator",
2713
+ "label",
2714
+ "separator",
2715
+ "shortcut",
2716
+ "sub-trigger",
2717
+ "sub-content"
2718
+ ]);
2719
+ var tooltipAnatomy = defineAnatomy("tooltip", ["content"]);
2720
+ var toastAnatomy = defineAnatomy("toast", [
2721
+ "region",
2722
+ "root",
2723
+ "icon",
2724
+ "title",
2725
+ "description",
2726
+ "action",
2727
+ "close"
2728
+ ]);
2729
+ var tableAnatomy = defineAnatomy("table", [
2730
+ "root",
2731
+ "wrapper",
2732
+ "header",
2733
+ "body",
2734
+ "footer",
2735
+ "row",
2736
+ "head",
2737
+ "cell",
2738
+ "caption"
2739
+ ]);
2740
+ var dataTableAnatomy = defineAnatomy("data-table", [
2741
+ "root",
2742
+ "toolbar",
2743
+ "spacer",
2744
+ "results-count",
2745
+ "header",
2746
+ "body",
2747
+ "row",
2748
+ "head",
2749
+ "head-button",
2750
+ "head-indicator",
2751
+ "cell",
2752
+ "checkbox-cell"
2753
+ ]);
2754
+ var paginationAnatomy = defineAnatomy("pagination", [
2755
+ "root",
2756
+ "label",
2757
+ "pages",
2758
+ "previous",
2759
+ "next",
2760
+ "page",
2761
+ "ellipsis"
2762
+ ]);
2763
+ var shellAnatomy = defineAnatomy("shell", ["root", "main", "content"]);
2764
+ var sidebarAnatomy = defineAnatomy("sidebar", [
2765
+ "root",
2766
+ "trigger",
2767
+ "pin",
2768
+ "brand",
2769
+ "brand-text",
2770
+ "section",
2771
+ "section-header",
2772
+ "section-label",
2773
+ "link",
2774
+ "link-label",
2775
+ "link-action",
2776
+ "link-badge",
2777
+ "group",
2778
+ "group-link",
2779
+ "group-trigger",
2780
+ "group-content",
2781
+ "footer",
2782
+ "user",
2783
+ "user-name",
2784
+ "user-subtitle"
2785
+ ]);
2786
+ var sidebarBrandSwitcherAnatomy = defineAnatomy("sidebar-brand-switcher", [
2787
+ "root",
2788
+ "trigger",
2789
+ "icon"
2790
+ ]);
2791
+ var textAnatomy = defineAnatomy("text", ["root"]);
2792
+ var headingAnatomy = defineAnatomy("heading", ["root"]);
2793
+ var stackAnatomy = defineAnatomy("stack", ["root"]);
2794
+ var inlineAnatomy = defineAnatomy("inline", ["root"]);
2795
+ var surfaceAnatomy = defineAnatomy("surface", ["root"]);
2796
+
2797
+ // src/foundation/anatomy/slot.ts
2798
+ function slot(anatomy, part) {
2799
+ return { "data-slot": anatomy.attr(part) };
2800
+ }
2801
+ var BOOLEAN_STATES = ["disabled", "invalid", "loading", "selected"];
2802
+ var VALUE_STATES = ["state", "size", "variant", "intent", "orientation"];
2803
+ function stateAttributes(input) {
2804
+ const attributes = {};
2805
+ for (const key of BOOLEAN_STATES) {
2806
+ if (input[key]) attributes[`data-${key}`] = "";
2807
+ }
2808
+ for (const key of VALUE_STATES) {
2809
+ const value = input[key];
2810
+ if (value !== void 0) attributes[`data-${key}`] = value;
2811
+ }
2812
+ return attributes;
2813
+ }
2457
2814
  var AlertDialog = AlertDialogPrimitive.Root;
2458
2815
  var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
2459
2816
  var AlertDialogPortal = AlertDialogPrimitive.Portal;
@@ -2461,6 +2818,7 @@ var AlertDialogOverlay = React39.forwardRef(({ className, ...props }, ref) => /*
2461
2818
  AlertDialogPrimitive.Overlay,
2462
2819
  {
2463
2820
  ref,
2821
+ ...slot(alertDialogAnatomy, "overlay"),
2464
2822
  className: cn(
2465
2823
  "bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
2466
2824
  "transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
@@ -2478,10 +2836,11 @@ var AlertDialogContent = React39.forwardRef(({ className, ...props }, ref) => /*
2478
2836
  AlertDialogPrimitive.Content,
2479
2837
  {
2480
2838
  ref,
2839
+ ...slot(alertDialogAnatomy, "content"),
2481
2840
  className: cn(
2482
2841
  "fixed top-1/2 left-1/2 z-[var(--z-modal)] w-full max-w-lg",
2483
2842
  "scrollbar-thin max-h-[calc(100vh-6rem)] overflow-y-auto",
2484
- "rounded-card border-rule bg-surface shadow-pop border p-6",
2843
+ "rounded-card border-rule bg-surface shadow-overlay border p-6",
2485
2844
  "font-body text-fg",
2486
2845
  "transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
2487
2846
  "data-[state=closed]:-translate-x-1/2 data-[state=closed]:-translate-y-[48%] data-[state=closed]:scale-95 data-[state=closed]:opacity-0",
@@ -2494,11 +2853,19 @@ var AlertDialogContent = React39.forwardRef(({ className, ...props }, ref) => /*
2494
2853
  )
2495
2854
  ] }));
2496
2855
  AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
2497
- var AlertDialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("mb-4 flex flex-col gap-1.5", className), ...props });
2856
+ var AlertDialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
2857
+ "div",
2858
+ {
2859
+ ...slot(alertDialogAnatomy, "header"),
2860
+ className: cn("mb-4 flex flex-col gap-1.5", className),
2861
+ ...props
2862
+ }
2863
+ );
2498
2864
  AlertDialogHeader.displayName = "AlertDialogHeader";
2499
2865
  var AlertDialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
2500
2866
  "div",
2501
2867
  {
2868
+ ...slot(alertDialogAnatomy, "footer"),
2502
2869
  className: cn(
2503
2870
  "mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end",
2504
2871
  className
@@ -2511,6 +2878,7 @@ var AlertDialogTitle = React39.forwardRef(({ className, ...props }, ref) => /* @
2511
2878
  AlertDialogPrimitive.Title,
2512
2879
  {
2513
2880
  ref,
2881
+ ...slot(alertDialogAnatomy, "title"),
2514
2882
  className: cn(
2515
2883
  "font-display text-fg text-base leading-tight font-medium tracking-tight",
2516
2884
  className
@@ -2523,6 +2891,7 @@ var AlertDialogDescription = React39.forwardRef(({ className, ...props }, ref) =
2523
2891
  AlertDialogPrimitive.Description,
2524
2892
  {
2525
2893
  ref,
2894
+ ...slot(alertDialogAnatomy, "description"),
2526
2895
  className: cn("text-fg-3 text-sm", className),
2527
2896
  ...props
2528
2897
  }
@@ -2532,6 +2901,7 @@ var AlertDialogAction = React39.forwardRef(({ className, ...props }, ref) => /*
2532
2901
  AlertDialogPrimitive.Action,
2533
2902
  {
2534
2903
  ref,
2904
+ ...slot(alertDialogAnatomy, "action"),
2535
2905
  className: cn(
2536
2906
  "rounded-btn inline-flex h-10 items-center justify-center px-4 text-sm font-medium whitespace-nowrap",
2537
2907
  "bg-destructive text-destructive-foreground transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -2548,6 +2918,7 @@ var AlertDialogCancel = React39.forwardRef(({ className, children, ...props }, r
2548
2918
  AlertDialogPrimitive.Cancel,
2549
2919
  {
2550
2920
  ref,
2921
+ ...slot(alertDialogAnatomy, "cancel"),
2551
2922
  className: cn(
2552
2923
  "rounded-btn border-rule-strong bg-surface inline-flex h-10 items-center justify-center border px-4 text-sm font-medium whitespace-nowrap",
2553
2924
  "text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -2857,8 +3228,27 @@ var Button = forwardRef(function Button2({
2857
3228
  ...props
2858
3229
  }, ref) {
2859
3230
  const Comp = asChild ? Slot : "button";
3231
+ const resolvedVariant = variant ?? "primary";
3232
+ const resolvedSize = size ?? "md";
3233
+ const state = stateAttributes({
3234
+ variant: resolvedVariant,
3235
+ size: resolvedSize,
3236
+ // `asChild` drops `disabled`/`loading` (Slot renders the child's own
3237
+ // element), so the state attribute is not claimed there either.
3238
+ disabled: asChild ? void 0 : disabled || loading
3239
+ });
2860
3240
  if (asChild) {
2861
- return /* @__PURE__ */ jsx(Comp, { ref, className: cn(buttonVariants({ variant, size }), className), ...props, children });
3241
+ return /* @__PURE__ */ jsx(
3242
+ Comp,
3243
+ {
3244
+ ref,
3245
+ ...slot(buttonAnatomy, "root"),
3246
+ ...state,
3247
+ className: cn(buttonVariants({ variant, size }), className),
3248
+ ...props,
3249
+ children
3250
+ }
3251
+ );
2862
3252
  }
2863
3253
  return /* @__PURE__ */ jsxs(
2864
3254
  Comp,
@@ -2867,12 +3257,30 @@ var Button = forwardRef(function Button2({
2867
3257
  disabled: disabled || loading,
2868
3258
  "aria-busy": loading || void 0,
2869
3259
  "data-loading": loading || void 0,
3260
+ ...slot(buttonAnatomy, "root"),
3261
+ ...state,
2870
3262
  className: cn(buttonVariants({ variant, size }), className),
2871
3263
  ...props,
2872
3264
  children: [
2873
- loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
3265
+ loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm", ...slot(buttonAnatomy, "spinner") }) : iconLeft && /* @__PURE__ */ jsx(
3266
+ "span",
3267
+ {
3268
+ ...slot(buttonAnatomy, "icon-start"),
3269
+ className: "inline-flex shrink-0",
3270
+ "aria-hidden": "true",
3271
+ children: iconLeft
3272
+ }
3273
+ ),
2874
3274
  children,
2875
- iconRight && !loading && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconRight })
3275
+ iconRight && !loading && /* @__PURE__ */ jsx(
3276
+ "span",
3277
+ {
3278
+ ...slot(buttonAnatomy, "icon-end"),
3279
+ className: "inline-flex shrink-0",
3280
+ "aria-hidden": "true",
3281
+ children: iconRight
3282
+ }
3283
+ )
2876
3284
  ]
2877
3285
  }
2878
3286
  );
@@ -3184,11 +3592,36 @@ var badgeVariants = cva(
3184
3592
  }
3185
3593
  );
3186
3594
  var Badge = forwardRef(function Badge2({ variant, size, dot, icon, children, className, ...props }, ref) {
3187
- return /* @__PURE__ */ jsxs("span", { ref, className: cn(badgeVariants({ variant, size }), className), ...props, children: [
3188
- dot && /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-current", "aria-hidden": "true" }),
3189
- icon && /* @__PURE__ */ jsx("span", { className: "inline-flex size-3.5 shrink-0", "aria-hidden": "true", children: icon }),
3190
- children
3191
- ] });
3595
+ return /* @__PURE__ */ jsxs(
3596
+ "span",
3597
+ {
3598
+ ref,
3599
+ ...slot(badgeAnatomy, "root"),
3600
+ ...stateAttributes({ variant: variant ?? "default", size: size ?? "sm" }),
3601
+ className: cn(badgeVariants({ variant, size }), className),
3602
+ ...props,
3603
+ children: [
3604
+ dot && /* @__PURE__ */ jsx(
3605
+ "span",
3606
+ {
3607
+ ...slot(badgeAnatomy, "dot"),
3608
+ className: "size-1.5 rounded-full bg-current",
3609
+ "aria-hidden": "true"
3610
+ }
3611
+ ),
3612
+ icon && /* @__PURE__ */ jsx(
3613
+ "span",
3614
+ {
3615
+ ...slot(badgeAnatomy, "icon"),
3616
+ className: "inline-flex size-3.5 shrink-0",
3617
+ "aria-hidden": "true",
3618
+ children: icon
3619
+ }
3620
+ ),
3621
+ children
3622
+ ]
3623
+ }
3624
+ );
3192
3625
  });
3193
3626
  Badge.displayName = "Badge";
3194
3627
  var Blockquote = forwardRef(function Blockquote2({ children, author, role: authorRole, className, ...props }, ref) {
@@ -3332,304 +3765,86 @@ var BreadcrumbSeparator = forwardRef(
3332
3765
  }
3333
3766
  );
3334
3767
  BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
3335
- var HIGHLIGHT_COLORS = {
3336
- primary: "after:bg-brand",
3337
- success: "after:bg-success-fg",
3338
- warning: "after:bg-warning-fg",
3339
- destructive: "after:bg-danger-fg"
3340
- };
3341
- var DOT_BASE = "after:content-[''] after:absolute after:bottom-1 after:left-1/2 after:size-1 after:-translate-x-1/2 after:rounded-full";
3342
- function Calendar({
3343
- selected,
3344
- onSelect,
3345
- highlights = [],
3346
- minDate,
3347
- maxDate,
3348
- className,
3349
- classNames,
3350
- ...props
3351
- }) {
3352
- const { modifiers, modifiersClassNames } = React39.useMemo(() => {
3353
- const buckets = {};
3354
- for (const h of highlights) {
3355
- const key = h.color ?? "primary";
3356
- (buckets[key] ??= []).push(h.date);
3357
- }
3358
- const mods = {};
3359
- const modClasses = {};
3360
- for (const [color, dates] of Object.entries(buckets)) {
3361
- const key = `assure-highlight-${color}`;
3362
- mods[key] = dates;
3363
- modClasses[key] = cn("relative", DOT_BASE, HIGHLIGHT_COLORS[color]);
3364
- }
3365
- return { modifiers: mods, modifiersClassNames: modClasses };
3366
- }, [highlights]);
3367
- const disabledMatcher = React39.useMemo(() => {
3368
- if (!minDate && !maxDate) return void 0;
3369
- if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];
3370
- if (minDate) return { before: minDate };
3371
- return { after: maxDate };
3372
- }, [minDate, maxDate]);
3373
- return /* @__PURE__ */ jsx(
3374
- DayPicker,
3768
+ var SelectRoot = SelectPrimitive.Root;
3769
+ var SelectGroup = SelectPrimitive.Group;
3770
+ var SelectValue = SelectPrimitive.Value;
3771
+ function useTriggerOpen(node) {
3772
+ const [open, setOpen] = React39.useState(false);
3773
+ React39.useEffect(() => {
3774
+ if (!node) return;
3775
+ const sync = () => setOpen(node.getAttribute("data-state") === "open");
3776
+ sync();
3777
+ const observer = new MutationObserver(sync);
3778
+ observer.observe(node, { attributes: true, attributeFilter: ["data-state"] });
3779
+ return () => observer.disconnect();
3780
+ }, [node]);
3781
+ return open;
3782
+ }
3783
+ var SelectTrigger = React39.forwardRef(({ className, children, tabIndex, ...props }, ref) => {
3784
+ const [node, setNode] = React39.useState(null);
3785
+ const open = useTriggerOpen(node);
3786
+ const composedRef = React39.useCallback(
3787
+ (element) => {
3788
+ setNode(element);
3789
+ if (typeof ref === "function") ref(element);
3790
+ else if (ref) ref.current = element;
3791
+ },
3792
+ [ref]
3793
+ );
3794
+ return /* @__PURE__ */ jsxs(
3795
+ SelectPrimitive.Trigger,
3375
3796
  {
3376
- mode: "single",
3377
- selected: selected ?? void 0,
3378
- onSelect: (d) => {
3379
- if (d) onSelect?.(d);
3380
- },
3381
- disabled: disabledMatcher,
3382
- modifiers,
3383
- modifiersClassNames,
3384
- showOutsideDays: true,
3385
- components: {
3386
- Chevron: ({ orientation, className: chevClass }) => {
3387
- const Icon3 = orientation === "right" ? ChevronRightIcon : ChevronLeftIcon;
3388
- return /* @__PURE__ */ jsx(Icon3, { className: cn("text-fg-3 size-4", chevClass), "aria-hidden": "true" });
3389
- }
3390
- },
3391
- className: cn("font-body text-fg select-none", className),
3392
- classNames: {
3393
- root: "p-3 min-w-[280px]",
3394
- months: "flex flex-col gap-4",
3395
- month: "space-y-3",
3396
- month_caption: "flex h-8 items-center justify-center font-display text-[13px] font-medium text-fg",
3397
- caption_label: "tabular-nums",
3398
- nav: "flex items-center justify-between absolute left-3 right-3 top-3",
3399
- button_previous: "inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none",
3400
- button_next: "inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none",
3401
- month_grid: "w-full border-collapse",
3402
- weekdays: "flex",
3403
- weekday: "flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1",
3404
- weeks: "",
3405
- week: "flex w-full mt-1",
3406
- day: "flex-1 text-center relative p-0",
3407
- day_button: cn(
3408
- "inline-flex size-8 w-full items-center justify-center rounded-input font-mono tabular-nums text-[13px] text-fg",
3409
- "transition-colors duration-[var(--duration-instant)] motion-reduce:transition-none",
3410
- "hover:bg-bg-2",
3411
- "focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
3412
- "disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled"
3413
- ),
3414
- today: "[&_button]:font-semibold [&_button]:text-accent",
3415
- selected: "[&_button]:bg-brand [&_button]:text-fg-on-brand [&_button]:hover:bg-brand-hover [&_button]:focus-visible:bg-brand",
3416
- outside: "[&_button]:text-fg-4",
3417
- disabled: "[&_button]:text-fg-disabled",
3418
- hidden: "invisible",
3419
- ...classNames
3420
- },
3421
- ...props
3797
+ ref: composedRef,
3798
+ tabIndex: open ? -1 : tabIndex,
3799
+ ...slot(selectAnatomy, "trigger"),
3800
+ className: cn(
3801
+ "rounded-input border-rule-strong bg-surface font-body text-fg flex h-9 w-full items-center justify-between gap-2 border px-3 py-2 text-[13px]",
3802
+ "transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
3803
+ "motion-reduce:transition-none",
3804
+ "placeholder:text-fg-4",
3805
+ "focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring-field)] focus-visible:outline-none",
3806
+ "disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed",
3807
+ "data-[placeholder]:text-fg-4",
3808
+ "aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg",
3809
+ "aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]",
3810
+ "[&>span]:line-clamp-1 [&>span]:text-left",
3811
+ className
3812
+ ),
3813
+ ...props,
3814
+ children: [
3815
+ children,
3816
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(
3817
+ ChevronDownIcon,
3818
+ {
3819
+ ...slot(selectAnatomy, "icon"),
3820
+ className: "text-fg-3 size-4 shrink-0 transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] data-[state=open]:rotate-180 motion-reduce:transition-none",
3821
+ "aria-hidden": "true"
3822
+ }
3823
+ ) })
3824
+ ]
3422
3825
  }
3423
3826
  );
3424
- }
3425
- Calendar.displayName = "Calendar";
3426
- var cardVariants = cva("rounded-card border border-rule bg-surface text-fg shadow-quiet", {
3427
- variants: {
3428
- variant: {
3429
- default: "",
3430
- interactive: "cursor-pointer transition-[border-color] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:border-rule-strong motion-reduce:transition-none",
3431
- flat: "border-0 bg-transparent shadow-none"
3432
- }
3433
- },
3434
- defaultVariants: { variant: "default" }
3435
- });
3436
- var Card = forwardRef(function Card2({ className, variant, ...props }, ref) {
3437
- return /* @__PURE__ */ jsx("div", { ref, className: cn(cardVariants({ variant }), className), ...props });
3438
3827
  });
3439
- Card.displayName = "Card";
3440
- var CardHeader = forwardRef(
3441
- function CardHeader2({ className, ...props }, ref) {
3442
- return /* @__PURE__ */ jsx(
3443
- "div",
3444
- {
3445
- ref,
3446
- className: cn(
3447
- "grid auto-cols-fr grid-cols-[1fr_auto] items-start gap-1.5 p-6 [.border-b]:pb-4",
3448
- className
3449
- ),
3450
- ...props
3451
- }
3452
- );
3453
- }
3454
- );
3455
- CardHeader.displayName = "CardHeader";
3456
- var CardTitle = forwardRef(
3457
- function CardTitle2({ className, children, ...props }, ref) {
3458
- return /* @__PURE__ */ jsx(
3459
- "h3",
3460
- {
3461
- ref,
3462
- className: cn("text-fg text-base leading-tight font-medium", className),
3463
- ...props,
3464
- children
3465
- }
3466
- );
3828
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
3829
+ var SelectScrollUpButton = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3830
+ SelectPrimitive.ScrollUpButton,
3831
+ {
3832
+ ref,
3833
+ ...slot(selectAnatomy, "scroll-up-button"),
3834
+ className: cn("text-fg-3 flex cursor-default items-center justify-center py-1", className),
3835
+ ...props,
3836
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "size-4", "aria-hidden": "true" })
3467
3837
  }
3468
- );
3469
- CardTitle.displayName = "CardTitle";
3470
- var CardDescription = forwardRef(function CardDescription2({ className, ...props }, ref) {
3471
- return /* @__PURE__ */ jsx("p", { ref, className: cn("text-fg-3 text-sm", className), ...props });
3472
- });
3473
- CardDescription.displayName = "CardDescription";
3474
- var CardContent = forwardRef(
3475
- function CardContent2({ className, ...props }, ref) {
3476
- return /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props });
3477
- }
3478
- );
3479
- CardContent.displayName = "CardContent";
3480
- var CardFooter = forwardRef(
3481
- function CardFooter2({ className, ...props }, ref) {
3482
- return /* @__PURE__ */ jsx(
3483
- "div",
3484
- {
3485
- ref,
3486
- className: cn("border-rule flex items-center gap-2 border-t p-6", className),
3487
- ...props
3488
- }
3489
- );
3490
- }
3491
- );
3492
- CardFooter.displayName = "CardFooter";
3493
- var CardAction = forwardRef(
3494
- function CardAction2({ className, ...props }, ref) {
3495
- return /* @__PURE__ */ jsx("div", { ref, className: cn("col-start-2 row-start-1 self-center", className), ...props });
3496
- }
3497
- );
3498
- CardAction.displayName = "CardAction";
3499
- var categoryTagVariants = cva(
3500
- cn(
3501
- "inline-flex shrink-0 items-center gap-1.5 rounded-full px-2.5 py-1",
3502
- "text-xs font-bold tracking-tight"
3503
- ),
3504
- {
3505
- variants: {
3506
- tone: {
3507
- brand: "text-brand-pro bg-[color-mix(in_srgb,var(--color-brand-pro)_12%,transparent)]",
3508
- audit: "text-brand-audit bg-[color-mix(in_srgb,var(--color-brand-audit)_12%,transparent)]",
3509
- books: "text-brand-books bg-[color-mix(in_srgb,var(--color-brand-books)_12%,transparent)]",
3510
- tax: "text-brand-tax bg-[color-mix(in_srgb,var(--color-brand-tax)_12%,transparent)]",
3511
- neutral: "text-fg-3 bg-[color-mix(in_srgb,var(--color-fg-3)_12%,transparent)]"
3512
- }
3513
- },
3514
- defaultVariants: { tone: "neutral" }
3515
- }
3516
- );
3517
- var CategoryTag = forwardRef(function CategoryTag2({ label, icon, tone, className, ...props }, ref) {
3518
- return /* @__PURE__ */ jsxs("span", { ref, className: cn(categoryTagVariants({ tone }), className), ...props, children: [
3519
- icon && /* @__PURE__ */ jsx("span", { className: "inline-flex size-3.5 shrink-0", "aria-hidden": "true", children: icon }),
3520
- label
3521
- ] });
3522
- });
3523
- CategoryTag.displayName = "CategoryTag";
3524
- var CategoryDivider = forwardRef(
3525
- function CategoryDivider2({ label, icon, tone, count, className, ...props }, ref) {
3526
- return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex items-center gap-3", className), ...props, children: [
3527
- /* @__PURE__ */ jsx(CategoryTag, { label, icon, tone }),
3528
- /* @__PURE__ */ jsx("span", { className: "bg-rule h-px flex-1", "aria-hidden": "true" }),
3529
- count !== void 0 && /* @__PURE__ */ jsx("span", { className: "text-fg-3 bg-surface-2 border-rule inline-flex h-5 min-w-5 shrink-0 items-center justify-center rounded-full border px-1.5 text-[11px] font-bold", children: count })
3530
- ] });
3531
- }
3532
- );
3533
- CategoryDivider.displayName = "CategoryDivider";
3534
- var Checkbox = React39.forwardRef(function Checkbox2({
3535
- label,
3536
- indeterminate,
3537
- checked,
3538
- defaultChecked,
3539
- shape = "square",
3540
- className,
3541
- id: providedId,
3542
- ...props
3543
- }, ref) {
3544
- const generatedId = React39.useId();
3545
- const id = providedId ?? generatedId;
3546
- const resolvedChecked = indeterminate ? "indeterminate" : checked;
3547
- return /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2", children: [
3548
- /* @__PURE__ */ jsx(
3549
- CheckboxPrimitive.Root,
3550
- {
3551
- ref,
3552
- id,
3553
- checked: resolvedChecked,
3554
- defaultChecked,
3555
- className: cn(
3556
- "peer border-rule-strong bg-surface text-brand flex size-4 shrink-0 items-center justify-center border",
3557
- shape === "circle" ? "rounded-full" : "rounded-[4px]",
3558
- microInteractions.selection,
3559
- "hover:border-fg-4",
3560
- "focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
3561
- "data-[state=checked]:border-brand data-[state=checked]:bg-brand-bg",
3562
- "data-[state=indeterminate]:border-brand data-[state=indeterminate]:bg-brand-bg",
3563
- "disabled:bg-bg-disabled disabled:border-rule disabled:text-fg-disabled disabled:cursor-not-allowed",
3564
- "aria-[invalid=true]:border-danger-line",
3565
- className
3566
- ),
3567
- ...props,
3568
- children: /* @__PURE__ */ jsx(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-current", children: resolvedChecked === "indeterminate" ? /* @__PURE__ */ jsx(MinusIcon, { className: "size-3", strokeWidth: 3, "aria-hidden": "true" }) : shape === "circle" ? /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-current", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(CheckIcon, { className: "size-3", strokeWidth: 3, "aria-hidden": "true" }) })
3569
- }
3570
- ),
3571
- label && /* @__PURE__ */ jsx(
3572
- "label",
3573
- {
3574
- htmlFor: id,
3575
- className: "text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed",
3576
- children: label
3577
- }
3578
- )
3579
- ] });
3580
- });
3581
- Checkbox.displayName = CheckboxPrimitive.Root.displayName;
3582
- var SelectRoot = SelectPrimitive.Root;
3583
- var SelectGroup = SelectPrimitive.Group;
3584
- var SelectValue = SelectPrimitive.Value;
3585
- var SelectTrigger = React39.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3586
- SelectPrimitive.Trigger,
3587
- {
3588
- ref,
3589
- className: cn(
3590
- "rounded-input border-rule-strong bg-surface font-body text-fg flex h-9 w-full items-center justify-between gap-2 border px-3 py-2 text-[13px]",
3591
- "transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
3592
- "motion-reduce:transition-none",
3593
- "placeholder:text-fg-4",
3594
- "focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
3595
- "disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed",
3596
- "data-[placeholder]:text-fg-4",
3597
- "aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg",
3598
- "aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]",
3599
- "[&>span]:line-clamp-1 [&>span]:text-left",
3600
- className
3601
- ),
3602
- ...props,
3603
- children: [
3604
- children,
3605
- /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(
3606
- ChevronDownIcon,
3607
- {
3608
- className: "text-fg-3 size-4 shrink-0 transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] data-[state=open]:rotate-180 motion-reduce:transition-none",
3609
- "aria-hidden": "true"
3610
- }
3611
- ) })
3612
- ]
3613
- }
3614
- ));
3615
- SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
3616
- var SelectScrollUpButton = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3617
- SelectPrimitive.ScrollUpButton,
3618
- {
3619
- ref,
3620
- className: cn("text-fg-3 flex cursor-default items-center justify-center py-1", className),
3621
- ...props,
3622
- children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "size-4", "aria-hidden": "true" })
3623
- }
3624
- ));
3625
- SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
3626
- var SelectScrollDownButton = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3627
- SelectPrimitive.ScrollDownButton,
3628
- {
3629
- ref,
3630
- className: cn("text-fg-3 flex cursor-default items-center justify-center py-1", className),
3631
- ...props,
3632
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4", "aria-hidden": "true" })
3838
+ ));
3839
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
3840
+ var SelectScrollDownButton = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3841
+ SelectPrimitive.ScrollDownButton,
3842
+ {
3843
+ ref,
3844
+ ...slot(selectAnatomy, "scroll-down-button"),
3845
+ className: cn("text-fg-3 flex cursor-default items-center justify-center py-1", className),
3846
+ ...props,
3847
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4", "aria-hidden": "true" })
3633
3848
  }
3634
3849
  ));
3635
3850
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
@@ -3638,6 +3853,7 @@ var SelectContent = React39.forwardRef(({ className, children, position = "poppe
3638
3853
  {
3639
3854
  ref,
3640
3855
  position,
3856
+ ...slot(selectAnatomy, "content"),
3641
3857
  className: cn(
3642
3858
  "rounded-card border-rule bg-surface text-fg shadow-pop relative z-[var(--z-dropdown)] max-h-(--radix-select-content-available-height) min-w-[8rem] overflow-hidden border",
3643
3859
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
@@ -3655,6 +3871,7 @@ var SelectContent = React39.forwardRef(({ className, children, position = "poppe
3655
3871
  /* @__PURE__ */ jsx(
3656
3872
  SelectPrimitive.Viewport,
3657
3873
  {
3874
+ ...slot(selectAnatomy, "viewport"),
3658
3875
  className: cn(
3659
3876
  "p-1",
3660
3877
  position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)"
@@ -3671,6 +3888,7 @@ var SelectLabel = React39.forwardRef(({ className, ...props }, ref) => /* @__PUR
3671
3888
  SelectPrimitive.Label,
3672
3889
  {
3673
3890
  ref,
3891
+ ...slot(selectAnatomy, "label"),
3674
3892
  className: cn(
3675
3893
  "text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase",
3676
3894
  className
@@ -3683,6 +3901,7 @@ var SelectItem = React39.forwardRef(({ className, children, ...props }, ref) =>
3683
3901
  SelectPrimitive.Item,
3684
3902
  {
3685
3903
  ref,
3904
+ ...slot(selectAnatomy, "item"),
3686
3905
  className: cn(
3687
3906
  "rounded-pill relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-[13px] outline-none select-none",
3688
3907
  "text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -3695,7 +3914,7 @@ var SelectItem = React39.forwardRef(({ className, children, ...props }, ref) =>
3695
3914
  ...props,
3696
3915
  children: [
3697
3916
  /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children }),
3698
- /* @__PURE__ */ jsx("span", { className: "absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5", "aria-hidden": "true" }) }) })
3917
+ /* @__PURE__ */ jsx("span", { className: "absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { ...slot(selectAnatomy, "item-indicator"), children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5", "aria-hidden": "true" }) }) })
3699
3918
  ]
3700
3919
  }
3701
3920
  ));
@@ -3704,6 +3923,7 @@ var SelectSeparator = React39.forwardRef(({ className, ...props }, ref) => /* @_
3704
3923
  SelectPrimitive.Separator,
3705
3924
  {
3706
3925
  ref,
3926
+ ...slot(selectAnatomy, "separator"),
3707
3927
  className: cn("bg-rule -mx-1 my-1 h-px", className),
3708
3928
  ...props
3709
3929
  }
@@ -3758,6 +3978,350 @@ function Select({
3758
3978
  );
3759
3979
  }
3760
3980
  Select.displayName = "Select";
3981
+ var DEFAULT_YEARS_BACK = 100;
3982
+ var DEFAULT_YEARS_FORWARD = 20;
3983
+ function CalendarDropdown({
3984
+ options = [],
3985
+ value,
3986
+ onChange,
3987
+ disabled,
3988
+ className,
3989
+ "aria-label": ariaLabel
3990
+ }) {
3991
+ const current = value === void 0 || value === null ? void 0 : String(value);
3992
+ const selected = options.find((option) => String(option.value) === current);
3993
+ return /* @__PURE__ */ jsxs(
3994
+ SelectRoot,
3995
+ {
3996
+ value: current,
3997
+ disabled,
3998
+ onValueChange: (next) => {
3999
+ onChange?.({ target: { value: next } });
4000
+ },
4001
+ children: [
4002
+ /* @__PURE__ */ jsx(
4003
+ SelectTrigger,
4004
+ {
4005
+ "aria-label": ariaLabel,
4006
+ className: cn(
4007
+ "h-7 w-auto min-w-0 gap-1 border-transparent bg-transparent px-1.5 py-0",
4008
+ "font-display font-medium",
4009
+ "hover:bg-bg-2",
4010
+ "[&>svg]:size-3.5",
4011
+ className
4012
+ ),
4013
+ children: /* @__PURE__ */ jsx(SelectValue, { children: selected?.label })
4014
+ }
4015
+ ),
4016
+ /* @__PURE__ */ jsx(SelectContent, { align: "center", className: "max-h-64 min-w-[6rem]", children: options.map((option) => /* @__PURE__ */ jsx(SelectItem, { value: String(option.value), disabled: option.disabled, children: option.label }, option.value)) })
4017
+ ]
4018
+ }
4019
+ );
4020
+ }
4021
+ function CalendarChevron({
4022
+ orientation,
4023
+ className
4024
+ }) {
4025
+ const Icon3 = orientation === "right" ? ChevronRightIcon : ChevronLeftIcon;
4026
+ return /* @__PURE__ */ jsx(Icon3, { className: cn("text-fg-3 size-4", className), "aria-hidden": "true" });
4027
+ }
4028
+ var CALENDAR_CAPTION_COMPONENTS = {
4029
+ Chevron: CalendarChevron,
4030
+ Dropdown: CalendarDropdown
4031
+ };
4032
+ var NAV_BUTTON = "absolute top-0 inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:text-fg-disabled aria-disabled:pointer-events-none";
4033
+ var CALENDAR_CAPTION_CLASSNAMES = {
4034
+ month: "relative space-y-3",
4035
+ // px-7 keeps the caption clear of the two absolutely-pinned size-7 chevrons.
4036
+ // Font size is applied by each calendar (they own their type scale).
4037
+ month_caption: "flex h-7 items-center justify-center px-7 font-display font-medium text-fg",
4038
+ caption_label: "tabular-nums",
4039
+ // No root-level <nav> with navLayout="around"; the buttons render inline.
4040
+ nav: "contents",
4041
+ button_previous: cn("left-0", NAV_BUTTON),
4042
+ button_next: cn("right-0", NAV_BUTTON),
4043
+ dropdowns: "flex items-center justify-center gap-1",
4044
+ dropdown_root: "relative",
4045
+ months_dropdown: "",
4046
+ years_dropdown: "font-mono tabular-nums"
4047
+ };
4048
+ function resolveCalendarNavRange({
4049
+ minDate,
4050
+ maxDate,
4051
+ selected,
4052
+ today = /* @__PURE__ */ new Date()
4053
+ }) {
4054
+ let startMonth = minDate ? startOfMonth(minDate) : startOfYear(subYears(today, DEFAULT_YEARS_BACK));
4055
+ let endMonth = maxDate ? endOfMonth(maxDate) : endOfYear(addYears(today, DEFAULT_YEARS_FORWARD));
4056
+ const picks = (Array.isArray(selected) ? selected : [selected]).filter(
4057
+ (d) => d instanceof Date && !Number.isNaN(d.getTime())
4058
+ );
4059
+ for (const pick of picks) {
4060
+ if (pick < startMonth) startMonth = startOfMonth(pick);
4061
+ if (pick > endMonth) endMonth = endOfMonth(pick);
4062
+ }
4063
+ return { startMonth, endMonth };
4064
+ }
4065
+ var HIGHLIGHT_COLORS = {
4066
+ primary: "after:bg-brand",
4067
+ success: "after:bg-success-fg",
4068
+ warning: "after:bg-warning-fg",
4069
+ destructive: "after:bg-danger-fg"
4070
+ };
4071
+ var DOT_BASE = "after:content-[''] after:absolute after:bottom-1 after:left-1/2 after:size-1 after:-translate-x-1/2 after:rounded-full";
4072
+ function Calendar({
4073
+ selected,
4074
+ onSelect,
4075
+ highlights = [],
4076
+ minDate,
4077
+ maxDate,
4078
+ className,
4079
+ classNames,
4080
+ captionLayout = "dropdown",
4081
+ navLayout = "around",
4082
+ startMonth,
4083
+ endMonth,
4084
+ components,
4085
+ ...props
4086
+ }) {
4087
+ const { modifiers, modifiersClassNames } = React39.useMemo(() => {
4088
+ const buckets = {};
4089
+ for (const h of highlights) {
4090
+ const key = h.color ?? "primary";
4091
+ (buckets[key] ??= []).push(h.date);
4092
+ }
4093
+ const mods = {};
4094
+ const modClasses = {};
4095
+ for (const [color, dates] of Object.entries(buckets)) {
4096
+ const key = `assure-highlight-${color}`;
4097
+ mods[key] = dates;
4098
+ modClasses[key] = cn("relative", DOT_BASE, HIGHLIGHT_COLORS[color]);
4099
+ }
4100
+ return { modifiers: mods, modifiersClassNames: modClasses };
4101
+ }, [highlights]);
4102
+ const disabledMatcher = React39.useMemo(() => {
4103
+ if (!minDate && !maxDate) return void 0;
4104
+ if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];
4105
+ if (minDate) return { before: minDate };
4106
+ return { after: maxDate };
4107
+ }, [minDate, maxDate]);
4108
+ const navRange = React39.useMemo(
4109
+ () => captionLayout === "label" ? void 0 : resolveCalendarNavRange({ minDate, maxDate, selected }),
4110
+ [captionLayout, minDate, maxDate, selected]
4111
+ );
4112
+ return /* @__PURE__ */ jsx(
4113
+ DayPicker,
4114
+ {
4115
+ mode: "single",
4116
+ selected: selected ?? void 0,
4117
+ onSelect: (d) => {
4118
+ if (d) onSelect?.(d);
4119
+ },
4120
+ disabled: disabledMatcher,
4121
+ modifiers,
4122
+ modifiersClassNames,
4123
+ showOutsideDays: true,
4124
+ captionLayout,
4125
+ navLayout,
4126
+ startMonth: startMonth ?? navRange?.startMonth,
4127
+ endMonth: endMonth ?? navRange?.endMonth,
4128
+ components: { ...CALENDAR_CAPTION_COMPONENTS, ...components },
4129
+ className: cn("font-body text-fg select-none", className),
4130
+ classNames: {
4131
+ root: "p-3 min-w-[280px]",
4132
+ months: "flex flex-col gap-4",
4133
+ ...CALENDAR_CAPTION_CLASSNAMES,
4134
+ month_caption: cn(CALENDAR_CAPTION_CLASSNAMES.month_caption, "text-[13px]"),
4135
+ month_grid: "w-full border-collapse",
4136
+ weekdays: "flex",
4137
+ weekday: "flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1",
4138
+ weeks: "",
4139
+ week: "flex w-full mt-1",
4140
+ day: "flex-1 text-center relative p-0",
4141
+ day_button: cn(
4142
+ "inline-flex size-8 w-full items-center justify-center rounded-input font-mono tabular-nums text-[13px] text-fg",
4143
+ "transition-colors duration-[var(--duration-instant)] motion-reduce:transition-none",
4144
+ "hover:bg-bg-2",
4145
+ "focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
4146
+ "disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled"
4147
+ ),
4148
+ today: "[&_button]:font-semibold [&_button]:text-accent",
4149
+ selected: "[&_button]:bg-brand [&_button]:text-fg-on-brand [&_button]:hover:bg-brand-hover [&_button]:focus-visible:bg-brand",
4150
+ outside: "[&_button]:text-fg-4",
4151
+ disabled: "[&_button]:text-fg-disabled",
4152
+ hidden: "invisible",
4153
+ ...classNames
4154
+ },
4155
+ ...props
4156
+ }
4157
+ );
4158
+ }
4159
+ Calendar.displayName = "Calendar";
4160
+ var cardVariants = cva("rounded-card border border-rule bg-surface text-fg shadow-quiet", {
4161
+ variants: {
4162
+ variant: {
4163
+ default: "",
4164
+ interactive: "cursor-pointer transition-[border-color] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:border-rule-strong motion-reduce:transition-none",
4165
+ flat: "border-0 bg-transparent shadow-none"
4166
+ }
4167
+ },
4168
+ defaultVariants: { variant: "default" }
4169
+ });
4170
+ var Card = forwardRef(function Card2({ className, variant, ...props }, ref) {
4171
+ return /* @__PURE__ */ jsx("div", { ref, className: cn(cardVariants({ variant }), className), ...props });
4172
+ });
4173
+ Card.displayName = "Card";
4174
+ var CardHeader = forwardRef(
4175
+ function CardHeader2({ className, ...props }, ref) {
4176
+ return /* @__PURE__ */ jsx(
4177
+ "div",
4178
+ {
4179
+ ref,
4180
+ className: cn(
4181
+ "grid auto-cols-fr grid-cols-[1fr_auto] items-start gap-1.5 p-6 [.border-b]:pb-4",
4182
+ className
4183
+ ),
4184
+ ...props
4185
+ }
4186
+ );
4187
+ }
4188
+ );
4189
+ CardHeader.displayName = "CardHeader";
4190
+ var CardTitle = forwardRef(
4191
+ function CardTitle2({ className, children, ...props }, ref) {
4192
+ return /* @__PURE__ */ jsx(
4193
+ "h3",
4194
+ {
4195
+ ref,
4196
+ className: cn("text-fg text-base leading-tight font-medium", className),
4197
+ ...props,
4198
+ children
4199
+ }
4200
+ );
4201
+ }
4202
+ );
4203
+ CardTitle.displayName = "CardTitle";
4204
+ var CardDescription = forwardRef(function CardDescription2({ className, ...props }, ref) {
4205
+ return /* @__PURE__ */ jsx("p", { ref, className: cn("text-fg-3 text-sm", className), ...props });
4206
+ });
4207
+ CardDescription.displayName = "CardDescription";
4208
+ var CardContent = forwardRef(
4209
+ function CardContent2({ className, ...props }, ref) {
4210
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props });
4211
+ }
4212
+ );
4213
+ CardContent.displayName = "CardContent";
4214
+ var CardFooter = forwardRef(
4215
+ function CardFooter2({ className, ...props }, ref) {
4216
+ return /* @__PURE__ */ jsx(
4217
+ "div",
4218
+ {
4219
+ ref,
4220
+ className: cn("border-rule flex items-center gap-2 border-t p-6", className),
4221
+ ...props
4222
+ }
4223
+ );
4224
+ }
4225
+ );
4226
+ CardFooter.displayName = "CardFooter";
4227
+ var CardAction = forwardRef(
4228
+ function CardAction2({ className, ...props }, ref) {
4229
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("col-start-2 row-start-1 self-center", className), ...props });
4230
+ }
4231
+ );
4232
+ CardAction.displayName = "CardAction";
4233
+ var categoryTagVariants = cva(
4234
+ cn(
4235
+ "inline-flex shrink-0 items-center gap-1.5 rounded-full px-2.5 py-1",
4236
+ "text-xs font-bold tracking-tight"
4237
+ ),
4238
+ {
4239
+ variants: {
4240
+ tone: {
4241
+ brand: "text-brand-pro bg-[color-mix(in_srgb,var(--color-brand-pro)_12%,transparent)]",
4242
+ audit: "text-brand-audit bg-[color-mix(in_srgb,var(--color-brand-audit)_12%,transparent)]",
4243
+ books: "text-brand-books bg-[color-mix(in_srgb,var(--color-brand-books)_12%,transparent)]",
4244
+ tax: "text-brand-tax bg-[color-mix(in_srgb,var(--color-brand-tax)_12%,transparent)]",
4245
+ neutral: "text-fg-3 bg-[color-mix(in_srgb,var(--color-fg-3)_12%,transparent)]"
4246
+ }
4247
+ },
4248
+ defaultVariants: { tone: "neutral" }
4249
+ }
4250
+ );
4251
+ var CategoryTag = forwardRef(function CategoryTag2({ label, icon, tone, className, ...props }, ref) {
4252
+ return /* @__PURE__ */ jsxs("span", { ref, className: cn(categoryTagVariants({ tone }), className), ...props, children: [
4253
+ icon && /* @__PURE__ */ jsx("span", { className: "inline-flex size-3.5 shrink-0", "aria-hidden": "true", children: icon }),
4254
+ label
4255
+ ] });
4256
+ });
4257
+ CategoryTag.displayName = "CategoryTag";
4258
+ var CategoryDivider = forwardRef(
4259
+ function CategoryDivider2({ label, icon, tone, count, className, ...props }, ref) {
4260
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex items-center gap-3", className), ...props, children: [
4261
+ /* @__PURE__ */ jsx(CategoryTag, { label, icon, tone }),
4262
+ /* @__PURE__ */ jsx("span", { className: "bg-rule h-px flex-1", "aria-hidden": "true" }),
4263
+ count !== void 0 && /* @__PURE__ */ jsx("span", { className: "text-fg-3 bg-surface-2 border-rule inline-flex h-5 min-w-5 shrink-0 items-center justify-center rounded-full border px-1.5 text-[11px] font-bold", children: count })
4264
+ ] });
4265
+ }
4266
+ );
4267
+ CategoryDivider.displayName = "CategoryDivider";
4268
+ var Checkbox = React39.forwardRef(function Checkbox2({
4269
+ label,
4270
+ indeterminate,
4271
+ checked,
4272
+ defaultChecked,
4273
+ shape = "square",
4274
+ className,
4275
+ id: providedId,
4276
+ ...props
4277
+ }, ref) {
4278
+ const generatedId = React39.useId();
4279
+ const id = providedId ?? generatedId;
4280
+ const resolvedChecked = indeterminate ? "indeterminate" : checked;
4281
+ return /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2", children: [
4282
+ /* @__PURE__ */ jsx(
4283
+ CheckboxPrimitive.Root,
4284
+ {
4285
+ ref,
4286
+ id,
4287
+ checked: resolvedChecked,
4288
+ defaultChecked,
4289
+ ...slot(checkboxAnatomy, "root"),
4290
+ className: cn(
4291
+ "peer border-rule-strong bg-surface text-brand flex size-4 shrink-0 items-center justify-center border",
4292
+ shape === "circle" ? "rounded-full" : "rounded-[4px]",
4293
+ microInteractions.selection,
4294
+ "hover:border-fg-4",
4295
+ "focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring-field)] focus-visible:outline-none",
4296
+ "data-[state=checked]:border-brand data-[state=checked]:bg-brand-bg",
4297
+ "data-[state=indeterminate]:border-brand data-[state=indeterminate]:bg-brand-bg",
4298
+ "disabled:bg-bg-disabled disabled:border-rule disabled:text-fg-disabled disabled:cursor-not-allowed",
4299
+ "aria-[invalid=true]:border-danger-line",
4300
+ className
4301
+ ),
4302
+ ...props,
4303
+ children: /* @__PURE__ */ jsx(
4304
+ CheckboxPrimitive.Indicator,
4305
+ {
4306
+ ...slot(checkboxAnatomy, "indicator"),
4307
+ className: "flex items-center justify-center text-current",
4308
+ children: resolvedChecked === "indeterminate" ? /* @__PURE__ */ jsx(MinusIcon, { className: "size-3", strokeWidth: 3, "aria-hidden": "true" }) : shape === "circle" ? /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-current", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(CheckIcon, { className: "size-3", strokeWidth: 3, "aria-hidden": "true" })
4309
+ }
4310
+ )
4311
+ }
4312
+ ),
4313
+ label && /* @__PURE__ */ jsx(
4314
+ "label",
4315
+ {
4316
+ htmlFor: id,
4317
+ ...slot(checkboxAnatomy, "label"),
4318
+ className: "text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed",
4319
+ children: label
4320
+ }
4321
+ )
4322
+ ] });
4323
+ });
4324
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
3761
4325
  function ClientSelect({
3762
4326
  clients,
3763
4327
  value,
@@ -3885,6 +4449,7 @@ var DialogOverlay = React39.forwardRef(({ className, ...props }, ref) => /* @__P
3885
4449
  DialogPrimitive.Overlay,
3886
4450
  {
3887
4451
  ref,
4452
+ ...slot(dialogAnatomy, "overlay"),
3888
4453
  className: cn(
3889
4454
  "bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
3890
4455
  microInteractions.overlay,
@@ -3907,10 +4472,12 @@ var DialogContent = React39.forwardRef(({ size = "md", showCloseButton = true, c
3907
4472
  DialogPrimitive.Content,
3908
4473
  {
3909
4474
  ref,
4475
+ ...slot(dialogAnatomy, "content"),
4476
+ ...stateAttributes({ size }),
3910
4477
  className: cn(
3911
4478
  "fixed top-1/2 left-1/2 z-[var(--z-modal)] w-full",
3912
4479
  "scrollbar-thin max-h-[calc(100vh-6rem)] overflow-y-auto",
3913
- "rounded-card border-rule bg-surface shadow-pop border p-6",
4480
+ "rounded-card border-rule bg-surface shadow-overlay border p-6",
3914
4481
  "font-body text-fg",
3915
4482
  // motion: scale + fade keyed off data-state
3916
4483
  microInteractions.overlay,
@@ -3925,6 +4492,7 @@ var DialogContent = React39.forwardRef(({ size = "md", showCloseButton = true, c
3925
4492
  showCloseButton && /* @__PURE__ */ jsx(
3926
4493
  DialogPrimitive.Close,
3927
4494
  {
4495
+ ...slot(dialogAnatomy, "close"),
3928
4496
  className: cn(
3929
4497
  "absolute top-4 right-4 inline-flex size-7 items-center justify-center",
3930
4498
  "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -3941,13 +4509,29 @@ var DialogContent = React39.forwardRef(({ size = "md", showCloseButton = true, c
3941
4509
  )
3942
4510
  ] }));
3943
4511
  DialogContent.displayName = DialogPrimitive.Content.displayName;
3944
- var DialogClose = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Close, { ref, className: cn(className), ...props }));
4512
+ var DialogClose = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4513
+ DialogPrimitive.Close,
4514
+ {
4515
+ ref,
4516
+ ...slot(dialogAnatomy, "close"),
4517
+ className: cn(className),
4518
+ ...props
4519
+ }
4520
+ ));
3945
4521
  DialogClose.displayName = "DialogClose";
3946
- var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("mb-4 flex flex-col gap-1.5 pr-8", className), ...props });
4522
+ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
4523
+ "div",
4524
+ {
4525
+ ...slot(dialogAnatomy, "header"),
4526
+ className: cn("mb-4 flex flex-col gap-1.5 pr-8", className),
4527
+ ...props
4528
+ }
4529
+ );
3947
4530
  DialogHeader.displayName = "DialogHeader";
3948
4531
  var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
3949
4532
  "div",
3950
4533
  {
4534
+ ...slot(dialogAnatomy, "footer"),
3951
4535
  className: cn(
3952
4536
  "mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end",
3953
4537
  className
@@ -3960,6 +4544,7 @@ var DialogTitle = React39.forwardRef(({ className, ...props }, ref) => /* @__PUR
3960
4544
  DialogPrimitive.Title,
3961
4545
  {
3962
4546
  ref,
4547
+ ...slot(dialogAnatomy, "title"),
3963
4548
  className: cn(
3964
4549
  "font-display text-fg text-base leading-tight font-medium tracking-tight",
3965
4550
  className
@@ -3972,16 +4557,73 @@ var DialogDescription = React39.forwardRef(({ className, ...props }, ref) => /*
3972
4557
  DialogPrimitive.Description,
3973
4558
  {
3974
4559
  ref,
4560
+ ...slot(dialogAnatomy, "description"),
3975
4561
  className: cn("text-fg-3 text-sm", className),
3976
4562
  ...props
3977
4563
  }
3978
4564
  ));
3979
4565
  DialogDescription.displayName = DialogPrimitive.Description.displayName;
3980
- var kbdClass = cn(
3981
- "inline-flex items-center justify-center min-w-[18px] h-[18px] px-[5px]",
3982
- "font-mono text-[10.5px] text-fg-3 bg-bg-2 border border-rule rounded-icon",
3983
- "[border-bottom-width:1.5px]"
3984
- );
4566
+ var APPLE = /Mac|iPhone|iPad|iPod/;
4567
+ function detectPlatform(nav) {
4568
+ if (!nav) return "other";
4569
+ const hinted = nav.userAgentData?.platform;
4570
+ if (hinted && /^(macOS|iOS|iPadOS)$/i.test(hinted)) return "apple";
4571
+ if (hinted && hinted.length > 0) return "other";
4572
+ const platform = nav.platform ?? "";
4573
+ if (APPLE.test(platform)) return "apple";
4574
+ const userAgent = nav.userAgent ?? "";
4575
+ return APPLE.test(userAgent) ? "apple" : "other";
4576
+ }
4577
+ var detected;
4578
+ var subscribe = () => () => {
4579
+ };
4580
+ function usePlatform({ serverValue = "other" } = {}) {
4581
+ const getSnapshot = () => {
4582
+ if (typeof navigator === "undefined") return serverValue;
4583
+ detected ??= detectPlatform(navigator);
4584
+ return detected;
4585
+ };
4586
+ const getServerSnapshot = () => serverValue;
4587
+ return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
4588
+ }
4589
+ var GLYPHS = {
4590
+ mod: { apple: "\u2318", other: "Ctrl" },
4591
+ alt: { apple: "\u2325", other: "Alt" },
4592
+ shift: { apple: "\u21E7", other: "Shift" },
4593
+ ctrl: { apple: "\u2303", other: "Ctrl" }
4594
+ };
4595
+ function kbdGlyphText(glyph, platform) {
4596
+ return GLYPHS[glyph][platform];
4597
+ }
4598
+ var VARIANT_CLASS = {
4599
+ keycap: cn(
4600
+ "inline-flex items-center justify-center min-w-[18px] h-[18px] px-[5px]",
4601
+ "font-mono text-[10.5px] text-fg-3 bg-bg-2 border border-rule rounded-icon",
4602
+ "[border-bottom-width:1.5px]"
4603
+ ),
4604
+ flat: cn(
4605
+ "rounded-icon inline-flex h-5 min-w-5 items-center justify-center px-1.5",
4606
+ "border-rule bg-bg-2 text-fg-3 border font-mono text-[10.5px]"
4607
+ )
4608
+ };
4609
+ var Kbd = forwardRef(function Kbd2({ variant = "keycap", glyph, className, children, ...props }, ref) {
4610
+ const platform = usePlatform();
4611
+ return /* @__PURE__ */ jsxs(
4612
+ "kbd",
4613
+ {
4614
+ ref,
4615
+ ...slot(kbdAnatomy, "root"),
4616
+ ...stateAttributes({ variant }),
4617
+ className: cn(VARIANT_CLASS[variant], className),
4618
+ ...props,
4619
+ children: [
4620
+ glyph ? kbdGlyphText(glyph, platform) : null,
4621
+ children
4622
+ ]
4623
+ }
4624
+ );
4625
+ });
4626
+ Kbd.displayName = "Kbd";
3985
4627
  function groupItems(items) {
3986
4628
  const groups = /* @__PURE__ */ new Map();
3987
4629
  for (const item of items) {
@@ -4027,7 +4669,7 @@ function CommandPalette({
4027
4669
  "aria-label": "Command palette",
4028
4670
  className: cn(
4029
4671
  "fixed top-[20vh] left-1/2 z-[var(--z-modal)] w-full max-w-xl -translate-x-1/2",
4030
- "rounded-card border-rule bg-surface shadow-pop overflow-hidden border",
4672
+ "rounded-card border-rule bg-surface shadow-overlay overflow-hidden border",
4031
4673
  "font-body text-fg",
4032
4674
  "transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
4033
4675
  "data-[state=closed]:-translate-x-1/2 data-[state=closed]:scale-95 data-[state=closed]:opacity-0",
@@ -4115,7 +4757,7 @@ function CommandPalette({
4115
4757
  /* @__PURE__ */ jsx("div", { className: "text-fg text-sm font-medium", children: item.label }),
4116
4758
  item.description && /* @__PURE__ */ jsx("div", { className: "text-fg-3 line-clamp-1 text-xs", children: item.description })
4117
4759
  ] }),
4118
- item.shortcut && /* @__PURE__ */ jsx("kbd", { className: cn(kbdClass, "hidden shrink-0 sm:inline-flex"), children: item.shortcut })
4760
+ item.shortcut && /* @__PURE__ */ jsx(Kbd, { className: "hidden shrink-0 sm:inline-flex", children: item.shortcut })
4119
4761
  ]
4120
4762
  },
4121
4763
  item.id
@@ -4128,15 +4770,15 @@ function CommandPalette({
4128
4770
  ),
4129
4771
  /* @__PURE__ */ jsxs("div", { className: "border-rule bg-bg-2/40 text-fg-3 flex flex-wrap items-center gap-4 border-t px-4 py-2.5", children: [
4130
4772
  /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
4131
- /* @__PURE__ */ jsx("kbd", { className: kbdClass, children: "\u2191\u2193" }),
4773
+ /* @__PURE__ */ jsx(Kbd, { children: "\u2191\u2193" }),
4132
4774
  "Navigate"
4133
4775
  ] }),
4134
4776
  /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
4135
- /* @__PURE__ */ jsx("kbd", { className: kbdClass, children: "\u21B5" }),
4777
+ /* @__PURE__ */ jsx(Kbd, { children: "\u21B5" }),
4136
4778
  "Select"
4137
4779
  ] }),
4138
4780
  /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
4139
- /* @__PURE__ */ jsx("kbd", { className: kbdClass, children: "esc" }),
4781
+ /* @__PURE__ */ jsx(Kbd, { children: "esc" }),
4140
4782
  "Close"
4141
4783
  ] })
4142
4784
  ] })
@@ -4229,6 +4871,7 @@ var ContextMenuSubTrigger = React39.forwardRef(({ className, inset, children, ..
4229
4871
  ContextMenuPrimitive.SubTrigger,
4230
4872
  {
4231
4873
  ref,
4874
+ ...slot(contextMenuAnatomy, "sub-trigger"),
4232
4875
  className: cn(
4233
4876
  "rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
4234
4877
  "text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -4256,6 +4899,7 @@ var ContextMenuSubContent = React39.forwardRef(({ className, ...props }, ref) =>
4256
4899
  ContextMenuPrimitive.SubContent,
4257
4900
  {
4258
4901
  ref,
4902
+ ...slot(contextMenuAnatomy, "sub-content"),
4259
4903
  className: cn(
4260
4904
  "rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden border p-1",
4261
4905
  "transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
@@ -4273,6 +4917,7 @@ var ContextMenuContent = React39.forwardRef(({ className, ...props }, ref) => /*
4273
4917
  ContextMenuPrimitive.Content,
4274
4918
  {
4275
4919
  ref,
4920
+ ...slot(contextMenuAnatomy, "content"),
4276
4921
  className: cn(
4277
4922
  "rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[10rem] overflow-hidden border p-1",
4278
4923
  "transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
@@ -4289,6 +4934,7 @@ var ContextMenuItem = React39.forwardRef(({ className, destructive, inset, ...pr
4289
4934
  ContextMenuPrimitive.Item,
4290
4935
  {
4291
4936
  ref,
4937
+ ...slot(contextMenuAnatomy, "item"),
4292
4938
  className: cn(
4293
4939
  "rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
4294
4940
  "text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -4307,6 +4953,7 @@ var ContextMenuCheckboxItem = React39.forwardRef(({ className, children, checked
4307
4953
  ContextMenuPrimitive.CheckboxItem,
4308
4954
  {
4309
4955
  ref,
4956
+ ...slot(contextMenuAnatomy, "checkbox-item"),
4310
4957
  checked,
4311
4958
  className: cn(
4312
4959
  "rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
@@ -4317,7 +4964,7 @@ var ContextMenuCheckboxItem = React39.forwardRef(({ className, children, checked
4317
4964
  ),
4318
4965
  ...props,
4319
4966
  children: [
4320
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5", "aria-hidden": "true" }) }) }),
4967
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { ...slot(contextMenuAnatomy, "item-indicator"), children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5", "aria-hidden": "true" }) }) }),
4321
4968
  children
4322
4969
  ]
4323
4970
  }
@@ -4327,6 +4974,7 @@ var ContextMenuRadioItem = React39.forwardRef(({ className, children, ...props }
4327
4974
  ContextMenuPrimitive.RadioItem,
4328
4975
  {
4329
4976
  ref,
4977
+ ...slot(contextMenuAnatomy, "radio-item"),
4330
4978
  className: cn(
4331
4979
  "rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
4332
4980
  "text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -4336,7 +4984,7 @@ var ContextMenuRadioItem = React39.forwardRef(({ className, children, ...props }
4336
4984
  ),
4337
4985
  ...props,
4338
4986
  children: [
4339
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current", "aria-hidden": "true" }) }) }),
4987
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { ...slot(contextMenuAnatomy, "item-indicator"), children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current", "aria-hidden": "true" }) }) }),
4340
4988
  children
4341
4989
  ]
4342
4990
  }
@@ -4346,6 +4994,7 @@ var ContextMenuLabel = React39.forwardRef(({ className, inset, ...props }, ref)
4346
4994
  ContextMenuPrimitive.Label,
4347
4995
  {
4348
4996
  ref,
4997
+ ...slot(contextMenuAnatomy, "label"),
4349
4998
  className: cn(
4350
4999
  "text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase",
4351
5000
  inset && "pl-8",
@@ -4359,6 +5008,7 @@ var ContextMenuSeparator = React39.forwardRef(({ className, ...props }, ref) =>
4359
5008
  ContextMenuPrimitive.Separator,
4360
5009
  {
4361
5010
  ref,
5011
+ ...slot(contextMenuAnatomy, "separator"),
4362
5012
  className: cn("bg-rule -mx-1 my-1 h-px", className),
4363
5013
  ...props
4364
5014
  }
@@ -4457,6 +5107,7 @@ var PopoverContent = React39.forwardRef(({ className, align = "center", side = "
4457
5107
  align,
4458
5108
  side,
4459
5109
  sideOffset,
5110
+ ...slot(popoverAnatomy, "content"),
4460
5111
  className: cn(
4461
5112
  "rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] w-72 border p-4 outline-none",
4462
5113
  microInteractions.overlay,
@@ -4574,7 +5225,9 @@ var DatePicker = forwardRef(function DatePicker2({
4574
5225
  "aria-label": ariaLabel,
4575
5226
  picker = "day",
4576
5227
  formatLabel,
4577
- iconPosition = "right"
5228
+ iconPosition = "right",
5229
+ captionLayout = "dropdown",
5230
+ inputClassName
4578
5231
  }, ref) {
4579
5232
  const isYearMode = picker === "year";
4580
5233
  const hasCustomYearLabel = isYearMode && !!formatLabel;
@@ -4691,11 +5344,12 @@ var DatePicker = forwardRef(function DatePicker2({
4691
5344
  "motion-reduce:transition-none",
4692
5345
  "placeholder:font-body placeholder:text-fg-4",
4693
5346
  "focus-visible:[border-color:var(--focus-ring-border)] focus-visible:outline-none",
4694
- "focus-visible:[box-shadow:var(--shadow-focus-ring)]",
5347
+ "focus-visible:[box-shadow:var(--shadow-focus-ring-field)]",
4695
5348
  "disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed",
4696
5349
  "aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg",
4697
5350
  "aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]",
4698
- hasCustomYearLabel && "cursor-pointer"
5351
+ hasCustomYearLabel && "cursor-pointer",
5352
+ inputClassName
4699
5353
  )
4700
5354
  }
4701
5355
  ),
@@ -4744,6 +5398,7 @@ var DatePicker = forwardRef(function DatePicker2({
4744
5398
  minDate,
4745
5399
  maxDate,
4746
5400
  defaultMonth: selectedDate ?? minDate ?? void 0,
5401
+ captionLayout,
4747
5402
  autoFocus: true
4748
5403
  }
4749
5404
  )
@@ -4772,7 +5427,8 @@ var DateRangePicker = forwardRef(
4772
5427
  min,
4773
5428
  max,
4774
5429
  iconPosition = "right",
4775
- "aria-label": ariaLabel
5430
+ "aria-label": ariaLabel,
5431
+ captionLayout = "dropdown"
4776
5432
  }, ref) {
4777
5433
  const generatedId = useId();
4778
5434
  const id = providedId ?? generatedId;
@@ -4831,6 +5487,14 @@ var DateRangePicker = forwardRef(
4831
5487
  to: isoToDate(current.to ?? "")
4832
5488
  };
4833
5489
  const selectedRange = draftRange ?? committedRange;
5490
+ const navRange = useMemo(
5491
+ () => captionLayout === "label" ? void 0 : resolveCalendarNavRange({
5492
+ minDate,
5493
+ maxDate,
5494
+ selected: [selectedRange.from, selectedRange.to]
5495
+ }),
5496
+ [captionLayout, minDate, maxDate, selectedRange.from, selectedRange.to]
5497
+ );
4834
5498
  const disabledMatcher = (() => {
4835
5499
  if (!minDate && !maxDate) return void 0;
4836
5500
  if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];
@@ -4873,7 +5537,7 @@ var DateRangePicker = forwardRef(
4873
5537
  "motion-reduce:transition-none",
4874
5538
  "hover:bg-bg-2",
4875
5539
  "focus-visible:[border-color:var(--focus-ring-border)] focus-visible:outline-none",
4876
- "focus-visible:[box-shadow:var(--shadow-focus-ring)]",
5540
+ "focus-visible:[box-shadow:var(--shadow-focus-ring-field)]",
4877
5541
  "disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-bg-disabled",
4878
5542
  "data-[invalid=true]:border-danger-line data-[invalid=true]:focus-visible:border-danger-fg",
4879
5543
  "data-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]"
@@ -4907,38 +5571,25 @@ var DateRangePicker = forwardRef(
4907
5571
  mode: "range",
4908
5572
  numberOfMonths: 2,
4909
5573
  navLayout: "around",
5574
+ captionLayout,
5575
+ startMonth: navRange?.startMonth,
5576
+ endMonth: navRange?.endMonth,
4910
5577
  selected: selectedRange.from ? { from: selectedRange.from, to: selectedRange.to } : void 0,
4911
5578
  onSelect: handleCalendarSelect,
4912
5579
  disabled: disabledMatcher,
4913
5580
  showOutsideDays: true,
4914
5581
  autoFocus: true,
4915
5582
  defaultMonth: selectedRange.from ?? minDate ?? void 0,
4916
- components: {
4917
- Chevron: ({ orientation, className: chevClass }) => {
4918
- const Icon3 = orientation === "right" ? ChevronRightIcon : ChevronLeftIcon;
4919
- return /* @__PURE__ */ jsx(Icon3, { className: cn("text-fg-3 size-4", chevClass), "aria-hidden": "true" });
4920
- }
4921
- },
5583
+ components: CALENDAR_CAPTION_COMPONENTS,
4922
5584
  className: "font-body text-fg select-none",
4923
5585
  classNames: {
4924
5586
  root: "p-3",
4925
5587
  months: "flex flex-col gap-6 sm:flex-row sm:gap-4",
4926
- month: "relative space-y-3 w-[16rem] flex-none",
4927
- // With navLayout="around", the chevron buttons live inside
4928
- // the caption row, one on each side of the month title.
4929
- // The caption row distributes them via space-between so
4930
- // each chevron stays in its natural inline flow — no
4931
- // absolute positioning gymnastics.
4932
- month_caption: "flex h-7 items-center justify-center font-display text-[13px] font-medium text-fg",
4933
- caption_label: "tabular-nums",
4934
- nav: "contents",
4935
- // navLayout="around" renders Prev as a sibling BEFORE the
4936
- // left month's caption, and Next as a sibling AFTER the
4937
- // right month's caption. Absolute-position each so they
4938
- // sit at their own month's top corners without disturbing
4939
- // the centered caption row.
4940
- button_previous: "absolute left-0 top-0 z-10 inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none",
4941
- button_next: "absolute right-0 top-0 z-10 inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none",
5588
+ ...CALENDAR_CAPTION_CLASSNAMES,
5589
+ // Two side-by-side months; each keeps the shared relative
5590
+ // caption/nav contract and a fixed width.
5591
+ month: cn(CALENDAR_CAPTION_CLASSNAMES.month, "w-[16rem] flex-none"),
5592
+ month_caption: cn(CALENDAR_CAPTION_CLASSNAMES.month_caption, "text-[13px]"),
4942
5593
  month_grid: "w-full border-collapse",
4943
5594
  weekdays: "flex",
4944
5595
  weekday: "flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1",
@@ -5201,6 +5852,7 @@ var DropdownMenuSubTrigger = React39.forwardRef(({ className, inset, children, .
5201
5852
  DropdownMenuPrimitive.SubTrigger,
5202
5853
  {
5203
5854
  ref,
5855
+ ...slot(dropdownMenuAnatomy, "sub-trigger"),
5204
5856
  className: cn(
5205
5857
  "rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
5206
5858
  "text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -5228,6 +5880,7 @@ var DropdownMenuSubContent = React39.forwardRef(({ className, ...props }, ref) =
5228
5880
  DropdownMenuPrimitive.SubContent,
5229
5881
  {
5230
5882
  ref,
5883
+ ...slot(dropdownMenuAnatomy, "sub-content"),
5231
5884
  className: cn(
5232
5885
  "rounded-card border-menu-border bg-menu-bg text-menu-fg shadow-pop z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden border p-1",
5233
5886
  "transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
@@ -5245,6 +5898,7 @@ var DropdownMenuContent = React39.forwardRef(({ className, sideOffset = 6, align
5245
5898
  DropdownMenuPrimitive.Content,
5246
5899
  {
5247
5900
  ref,
5901
+ ...slot(dropdownMenuAnatomy, "content"),
5248
5902
  sideOffset,
5249
5903
  align,
5250
5904
  className: cn(
@@ -5263,6 +5917,7 @@ var DropdownMenuItem = React39.forwardRef(({ className, destructive, inset, ...p
5263
5917
  DropdownMenuPrimitive.Item,
5264
5918
  {
5265
5919
  ref,
5920
+ ...slot(dropdownMenuAnatomy, "item"),
5266
5921
  className: cn(
5267
5922
  "rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
5268
5923
  "text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -5281,6 +5936,7 @@ var DropdownMenuCheckboxItem = React39.forwardRef(({ className, children, checke
5281
5936
  DropdownMenuPrimitive.CheckboxItem,
5282
5937
  {
5283
5938
  ref,
5939
+ ...slot(dropdownMenuAnatomy, "checkbox-item"),
5284
5940
  checked,
5285
5941
  className: cn(
5286
5942
  "rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
@@ -5291,7 +5947,7 @@ var DropdownMenuCheckboxItem = React39.forwardRef(({ className, children, checke
5291
5947
  ),
5292
5948
  ...props,
5293
5949
  children: [
5294
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5", "aria-hidden": "true" }) }) }),
5950
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { ...slot(dropdownMenuAnatomy, "item-indicator"), children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5", "aria-hidden": "true" }) }) }),
5295
5951
  children
5296
5952
  ]
5297
5953
  }
@@ -5301,6 +5957,7 @@ var DropdownMenuRadioItem = React39.forwardRef(({ className, children, ...props
5301
5957
  DropdownMenuPrimitive.RadioItem,
5302
5958
  {
5303
5959
  ref,
5960
+ ...slot(dropdownMenuAnatomy, "radio-item"),
5304
5961
  className: cn(
5305
5962
  "rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
5306
5963
  "text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -5310,7 +5967,7 @@ var DropdownMenuRadioItem = React39.forwardRef(({ className, children, ...props
5310
5967
  ),
5311
5968
  ...props,
5312
5969
  children: [
5313
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current", "aria-hidden": "true" }) }) }),
5970
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { ...slot(dropdownMenuAnatomy, "item-indicator"), children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current", "aria-hidden": "true" }) }) }),
5314
5971
  children
5315
5972
  ]
5316
5973
  }
@@ -5320,6 +5977,7 @@ var DropdownMenuLabel = React39.forwardRef(({ className, inset, ...props }, ref)
5320
5977
  DropdownMenuPrimitive.Label,
5321
5978
  {
5322
5979
  ref,
5980
+ ...slot(dropdownMenuAnatomy, "label"),
5323
5981
  className: cn(
5324
5982
  "text-menu-label-fg px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase",
5325
5983
  inset && "pl-8",
@@ -5333,6 +5991,7 @@ var DropdownMenuSeparator = React39.forwardRef(({ className, ...props }, ref) =>
5333
5991
  DropdownMenuPrimitive.Separator,
5334
5992
  {
5335
5993
  ref,
5994
+ ...slot(dropdownMenuAnatomy, "separator"),
5336
5995
  className: cn("bg-menu-border -mx-1 my-1 h-px", className),
5337
5996
  ...props
5338
5997
  }
@@ -5341,6 +6000,7 @@ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
5341
6000
  var DropdownMenuShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx(
5342
6001
  "span",
5343
6002
  {
6003
+ ...slot(dropdownMenuAnatomy, "shortcut"),
5344
6004
  className: cn("text-menu-shortcut-fg ml-auto font-mono text-[11px] tracking-wider", className),
5345
6005
  ...props
5346
6006
  }
@@ -5424,6 +6084,7 @@ function FileUpload({
5424
6084
  const inputId = useId();
5425
6085
  const [isDragOver, setIsDragOver] = useState(false);
5426
6086
  const [error, setError] = useState(null);
6087
+ const wrapperOwnsFocus = props.tabIndex !== void 0 || props.role !== void 0;
5427
6088
  const validateFiles = useCallback(
5428
6089
  (files) => {
5429
6090
  setError(null);
@@ -5457,81 +6118,108 @@ function FileUpload({
5457
6118
  function handleDrop(e) {
5458
6119
  e.preventDefault();
5459
6120
  setIsDragOver(false);
5460
- if (disabled) return;
5461
- handleFiles(e.dataTransfer.files);
5462
- }
5463
- return /* @__PURE__ */ jsxs("div", { className: cn("w-full", className), ...props, children: [
5464
- /* @__PURE__ */ jsxs(
5465
- "label",
5466
- {
5467
- htmlFor: inputId,
5468
- onDragOver: (e) => {
5469
- e.preventDefault();
5470
- if (!disabled) setIsDragOver(true);
5471
- },
5472
- onDragLeave: () => setIsDragOver(false),
5473
- onDrop: handleDrop,
5474
- className: cn(
5475
- "flex flex-col items-center justify-center gap-2",
5476
- "rounded-card border-rule-strong bg-surface border border-dashed",
5477
- "font-body p-8 text-center",
5478
- "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
5479
- "motion-reduce:transition-none",
5480
- // Hover (when not disabled)
5481
- !disabled && "hover:border-brand-line hover:bg-brand-bg/40",
5482
- // Drag-over → Pro purple highlight
5483
- isDragOver && "border-brand-line bg-brand-bg",
5484
- disabled && "border-rule bg-bg-disabled text-fg-disabled cursor-not-allowed",
5485
- !disabled && "cursor-pointer"
5486
- ),
5487
- children: [
5488
- /* @__PURE__ */ jsx(
5489
- "input",
5490
- {
5491
- ref: inputRef,
5492
- id: inputId,
5493
- type: "file",
5494
- accept,
5495
- multiple,
5496
- onChange: (e) => {
5497
- if (e.target.files) handleFiles(e.target.files);
5498
- e.target.value = "";
5499
- },
5500
- className: "fixed -top-[9999px] -left-[9999px] opacity-0",
5501
- disabled,
5502
- tabIndex: -1
5503
- }
5504
- ),
5505
- children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
5506
- /* @__PURE__ */ jsx(
5507
- "div",
5508
- {
5509
- className: cn(
5510
- "rounded-icon flex size-10 items-center justify-center transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
5511
- isDragOver ? "bg-brand text-fg-on-brand" : "bg-brand-bg text-brand"
5512
- ),
5513
- "aria-hidden": "true",
5514
- children: /* @__PURE__ */ jsx(UploadIcon, { className: "size-5" })
5515
- }
6121
+ if (disabled) return;
6122
+ handleFiles(e.dataTransfer.files);
6123
+ }
6124
+ return /* @__PURE__ */ jsxs(
6125
+ "div",
6126
+ {
6127
+ ...slot(fileUploadAnatomy, "root"),
6128
+ ...stateAttributes({ disabled, invalid: !!error }),
6129
+ className: cn("w-full", className),
6130
+ ...props,
6131
+ children: [
6132
+ /* @__PURE__ */ jsxs(
6133
+ "label",
6134
+ {
6135
+ htmlFor: inputId,
6136
+ ...slot(fileUploadAnatomy, "dropzone"),
6137
+ ...stateAttributes({ disabled, state: isDragOver ? "drag-over" : void 0 }),
6138
+ onDragOver: (e) => {
6139
+ e.preventDefault();
6140
+ if (!disabled) setIsDragOver(true);
6141
+ },
6142
+ onDragLeave: () => setIsDragOver(false),
6143
+ onDrop: handleDrop,
6144
+ className: cn(
6145
+ "flex flex-col items-center justify-center gap-2",
6146
+ "rounded-card border-rule-strong bg-surface border border-dashed",
6147
+ "font-body p-8 text-center",
6148
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
6149
+ "motion-reduce:transition-none",
6150
+ // Hover (when not disabled)
6151
+ !disabled && "hover:border-brand-line hover:bg-brand-bg/40",
6152
+ // Drag-over → Pro purple highlight
6153
+ isDragOver && "border-brand-line bg-brand-bg",
6154
+ disabled && "border-rule bg-bg-disabled text-fg-disabled cursor-not-allowed",
6155
+ !disabled && "cursor-pointer",
6156
+ // Keyboard focus lands on the (visually hidden) file input.
6157
+ "has-[input:focus-visible]:[box-shadow:var(--shadow-focus-ring)]"
5516
6158
  ),
5517
- /* @__PURE__ */ jsxs("div", { className: "text-fg-3 text-sm", children: [
5518
- /* @__PURE__ */ jsx("span", { className: "text-fg font-medium", children: "Click to upload" }),
5519
- " or drag and drop"
5520
- ] }),
5521
- accept && /* @__PURE__ */ jsxs("p", { className: "text-fg-4 font-mono text-[10.5px]", children: [
5522
- "Accepted: ",
5523
- accept
5524
- ] }),
5525
- maxSize && /* @__PURE__ */ jsxs("p", { className: "text-fg-4 font-mono text-[10.5px]", children: [
5526
- "Max size: ",
5527
- formatBytes(maxSize)
5528
- ] })
5529
- ] })
5530
- ]
5531
- }
5532
- ),
5533
- error && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-danger-fg mt-2 text-sm", children: error })
5534
- ] });
6159
+ children: [
6160
+ /* @__PURE__ */ jsx(
6161
+ "input",
6162
+ {
6163
+ ref: inputRef,
6164
+ id: inputId,
6165
+ type: "file",
6166
+ ...slot(fileUploadAnatomy, "input"),
6167
+ accept,
6168
+ multiple,
6169
+ onChange: (e) => {
6170
+ if (e.target.files) handleFiles(e.target.files);
6171
+ e.target.value = "";
6172
+ },
6173
+ className: "fixed -top-[9999px] -left-[9999px] opacity-0",
6174
+ onKeyDown: (e) => {
6175
+ if (e.key !== "Enter" && e.key !== " ") return;
6176
+ e.preventDefault();
6177
+ e.currentTarget.click();
6178
+ },
6179
+ disabled,
6180
+ tabIndex: wrapperOwnsFocus ? -1 : void 0
6181
+ }
6182
+ ),
6183
+ children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
6184
+ /* @__PURE__ */ jsx(
6185
+ "div",
6186
+ {
6187
+ className: cn(
6188
+ "rounded-icon flex size-10 items-center justify-center transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
6189
+ isDragOver ? "bg-brand text-fg-on-brand" : "bg-brand-bg text-brand"
6190
+ ),
6191
+ "aria-hidden": "true",
6192
+ children: /* @__PURE__ */ jsx(UploadIcon, { className: "size-5" })
6193
+ }
6194
+ ),
6195
+ /* @__PURE__ */ jsxs("div", { className: "text-fg-3 text-sm", children: [
6196
+ /* @__PURE__ */ jsx("span", { className: "text-fg font-medium", children: "Click to upload" }),
6197
+ " or drag and drop"
6198
+ ] }),
6199
+ accept && /* @__PURE__ */ jsxs("p", { className: "text-fg-4 font-mono text-[10.5px]", children: [
6200
+ "Accepted: ",
6201
+ accept
6202
+ ] }),
6203
+ maxSize && /* @__PURE__ */ jsxs("p", { className: "text-fg-4 font-mono text-[10.5px]", children: [
6204
+ "Max size: ",
6205
+ formatBytes(maxSize)
6206
+ ] })
6207
+ ] })
6208
+ ]
6209
+ }
6210
+ ),
6211
+ error && /* @__PURE__ */ jsx(
6212
+ "p",
6213
+ {
6214
+ role: "alert",
6215
+ ...slot(fileUploadAnatomy, "error"),
6216
+ className: "text-danger-fg mt-2 text-sm",
6217
+ children: error
6218
+ }
6219
+ )
6220
+ ]
6221
+ }
6222
+ );
5535
6223
  }
5536
6224
  function formatBytes(bytes) {
5537
6225
  if (bytes < 1024) return `${bytes} B`;
@@ -5641,7 +6329,7 @@ var inputVariants = cva(
5641
6329
  microInteractions.control,
5642
6330
  "placeholder:text-fg-4",
5643
6331
  "focus-visible:outline-none focus-visible:[border-color:var(--focus-ring-border)]",
5644
- "focus-visible:[box-shadow:var(--shadow-focus-ring)]",
6332
+ "focus-visible:[box-shadow:var(--shadow-focus-ring-field)]",
5645
6333
  "disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled",
5646
6334
  "aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg",
5647
6335
  "aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]",
@@ -5688,6 +6376,7 @@ var Input = forwardRef(function Input2({
5688
6376
  className,
5689
6377
  id: providedId,
5690
6378
  placeholder,
6379
+ onWheel,
5691
6380
  ...props
5692
6381
  }, ref) {
5693
6382
  const generatedId = useId();
@@ -5698,12 +6387,25 @@ var Input = forwardRef(function Input2({
5698
6387
  const inputType = isPassword && showPassword ? "text" : type;
5699
6388
  const isFloating = !!floatingLabel && !!label;
5700
6389
  const resolvedPlaceholder = isFloating ? placeholder ?? " " : placeholder;
6390
+ const handleWheel = inputType === "number" ? (event) => {
6391
+ onWheel?.(event);
6392
+ if (!event.defaultPrevented) event.currentTarget.blur();
6393
+ } : onWheel;
5701
6394
  return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
5702
- label && !isFloating && /* @__PURE__ */ jsx("label", { htmlFor: id, className: "text-fg mb-1.5 block text-[13px] leading-none font-medium", children: label }),
6395
+ label && !isFloating && /* @__PURE__ */ jsx(
6396
+ "label",
6397
+ {
6398
+ htmlFor: id,
6399
+ ...slot(inputAnatomy, "label"),
6400
+ className: "text-fg mb-1.5 block text-[13px] leading-none font-medium",
6401
+ children: label
6402
+ }
6403
+ ),
5703
6404
  /* @__PURE__ */ jsxs("div", { className: "relative", children: [
5704
6405
  prefixIcon && /* @__PURE__ */ jsx(
5705
6406
  "span",
5706
6407
  {
6408
+ ...slot(inputAnatomy, "icon-start"),
5707
6409
  className: "text-fg-4 pointer-events-none absolute top-1/2 left-3 -translate-y-1/2 [&>svg]:size-4",
5708
6410
  "aria-hidden": "true",
5709
6411
  children: prefixIcon
@@ -5718,13 +6420,21 @@ var Input = forwardRef(function Input2({
5718
6420
  placeholder: resolvedPlaceholder,
5719
6421
  "aria-invalid": !!error || void 0,
5720
6422
  "aria-describedby": error ? errorId : void 0,
6423
+ ...slot(inputAnatomy, "root"),
6424
+ ...stateAttributes({
6425
+ variant: variant ?? "default",
6426
+ size: inputSize ?? "md",
6427
+ disabled: props.disabled,
6428
+ invalid: !!error
6429
+ }),
5721
6430
  className: cn(
5722
6431
  inputVariants({ variant, inputSize }),
5723
6432
  prefixIcon && "pl-9",
5724
6433
  (suffixIcon || isPassword) && "pr-9",
5725
- isFloating && "peer placeholder:text-transparent focus:placeholder:text-fg-4",
6434
+ isFloating && "peer focus:placeholder:text-fg-4 placeholder:text-transparent",
5726
6435
  className
5727
6436
  ),
6437
+ onWheel: handleWheel,
5728
6438
  ...props
5729
6439
  }
5730
6440
  ),
@@ -5734,6 +6444,7 @@ var Input = forwardRef(function Input2({
5734
6444
  "label",
5735
6445
  {
5736
6446
  htmlFor: id,
6447
+ ...slot(inputAnatomy, "label"),
5737
6448
  className: cn(
5738
6449
  "pointer-events-none absolute left-3 origin-left px-1 leading-none",
5739
6450
  "bg-surface text-fg-4",
@@ -5759,6 +6470,7 @@ var Input = forwardRef(function Input2({
5759
6470
  {
5760
6471
  type: "button",
5761
6472
  onClick: () => setShowPassword((prev) => !prev),
6473
+ ...slot(inputAnatomy, "password-toggle"),
5762
6474
  className: "text-fg-4 hover:text-fg absolute top-1/2 right-2.5 -translate-y-1/2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none motion-reduce:transition-none",
5763
6475
  "aria-label": showPassword ? "Hide password" : "Show password",
5764
6476
  children: showPassword ? /* @__PURE__ */ jsx(EyeOffIcon, { className: "size-4", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(EyeIcon, { className: "size-4", "aria-hidden": "true" })
@@ -5767,13 +6479,23 @@ var Input = forwardRef(function Input2({
5767
6479
  suffixIcon && !isPassword && /* @__PURE__ */ jsx(
5768
6480
  "span",
5769
6481
  {
6482
+ ...slot(inputAnatomy, "icon-end"),
5770
6483
  className: "text-fg-4 pointer-events-none absolute top-1/2 right-3 -translate-y-1/2 [&>svg]:size-4",
5771
6484
  "aria-hidden": "true",
5772
6485
  children: suffixIcon
5773
6486
  }
5774
6487
  )
5775
6488
  ] }),
5776
- error && /* @__PURE__ */ jsx("p", { id: errorId, role: "alert", className: "text-danger-fg mt-1.5 text-xs", children: error })
6489
+ error && /* @__PURE__ */ jsx(
6490
+ "p",
6491
+ {
6492
+ id: errorId,
6493
+ role: "alert",
6494
+ ...slot(inputAnatomy, "error"),
6495
+ className: "text-danger-fg mt-1.5 text-xs",
6496
+ children: error
6497
+ }
6498
+ )
5777
6499
  ] });
5778
6500
  });
5779
6501
  Input.displayName = "Input";
@@ -5787,7 +6509,7 @@ var GENERAL_SECTION = {
5787
6509
  { keys: ["Esc"], description: "Close / go back" }
5788
6510
  ]
5789
6511
  };
5790
- var kbdClass2 = cn(
6512
+ var kbdClass = cn(
5791
6513
  "inline-flex items-center justify-center min-w-[18px] h-[18px] px-[5px]",
5792
6514
  "font-mono text-[10.5px] text-fg-3 bg-bg-2 border border-rule rounded-icon",
5793
6515
  "[border-bottom-width:1.5px]"
@@ -5837,7 +6559,7 @@ function KeyboardShortcutsDialog({
5837
6559
  /* @__PURE__ */ jsx("span", { className: "text-fg text-sm", children: shortcut.description }),
5838
6560
  /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: shortcut.keys.map((key, i) => /* @__PURE__ */ jsxs(React39.Fragment, { children: [
5839
6561
  i > 0 && /* @__PURE__ */ jsx("span", { className: "text-fg-4 mx-0.5 text-[11px]", children: "then" }),
5840
- /* @__PURE__ */ jsx("kbd", { className: kbdClass2, children: key })
6562
+ /* @__PURE__ */ jsx("kbd", { className: kbdClass, children: key })
5841
6563
  ] }, i)) })
5842
6564
  ]
5843
6565
  },
@@ -5846,7 +6568,7 @@ function KeyboardShortcutsDialog({
5846
6568
  ] }, section.title)) }) }),
5847
6569
  /* @__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: [
5848
6570
  "Press ",
5849
- /* @__PURE__ */ jsx("kbd", { className: kbdClass2, children: hotkey ?? "?" }),
6571
+ /* @__PURE__ */ jsx("kbd", { className: kbdClass, children: hotkey ?? "?" }),
5850
6572
  " anytime to toggle this dialog"
5851
6573
  ] }) })
5852
6574
  ] }) });
@@ -5856,10 +6578,27 @@ var labelVariants = cva(
5856
6578
  );
5857
6579
  var Label4 = React39.forwardRef(
5858
6580
  function Label5({ children, required, className, ...props }, ref) {
5859
- return /* @__PURE__ */ jsxs(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props, children: [
5860
- children,
5861
- required && /* @__PURE__ */ jsx("span", { className: "text-danger-fg ml-0.5", "aria-hidden": "true", children: "*" })
5862
- ] });
6581
+ return /* @__PURE__ */ jsxs(
6582
+ LabelPrimitive.Root,
6583
+ {
6584
+ ref,
6585
+ ...slot(labelAnatomy, "root"),
6586
+ className: cn(labelVariants(), className),
6587
+ ...props,
6588
+ children: [
6589
+ children,
6590
+ required && /* @__PURE__ */ jsx(
6591
+ "span",
6592
+ {
6593
+ ...slot(labelAnatomy, "required"),
6594
+ className: "text-danger-fg ml-0.5",
6595
+ "aria-hidden": "true",
6596
+ children: "*"
6597
+ }
6598
+ )
6599
+ ]
6600
+ }
6601
+ );
5863
6602
  }
5864
6603
  );
5865
6604
  Label4.displayName = LabelPrimitive.Root.displayName;
@@ -5877,10 +6616,27 @@ var LinkButton = forwardRef(function LinkButton2({
5877
6616
  ...props
5878
6617
  }, ref) {
5879
6618
  const classes = cn(buttonVariants({ variant, size }), className);
6619
+ const root = { ...slot(linkButtonAnatomy, "root"), ...stateAttributes({ variant, size }) };
5880
6620
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [
5881
- iconLeft && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconLeft }),
6621
+ iconLeft && /* @__PURE__ */ jsx(
6622
+ "span",
6623
+ {
6624
+ ...slot(linkButtonAnatomy, "icon-start"),
6625
+ className: "inline-flex shrink-0",
6626
+ "aria-hidden": "true",
6627
+ children: iconLeft
6628
+ }
6629
+ ),
5882
6630
  children,
5883
- iconRight && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0", "aria-hidden": "true", children: iconRight })
6631
+ iconRight && /* @__PURE__ */ jsx(
6632
+ "span",
6633
+ {
6634
+ ...slot(linkButtonAnatomy, "icon-end"),
6635
+ className: "inline-flex shrink-0",
6636
+ "aria-hidden": "true",
6637
+ children: iconRight
6638
+ }
6639
+ )
5884
6640
  ] });
5885
6641
  if (external) {
5886
6642
  const safeRel = rel ?? (target === "_blank" ? "noopener noreferrer" : void 0);
@@ -5889,6 +6645,7 @@ var LinkButton = forwardRef(function LinkButton2({
5889
6645
  {
5890
6646
  ref,
5891
6647
  href,
6648
+ ...root,
5892
6649
  className: classes,
5893
6650
  target,
5894
6651
  rel: safeRel,
@@ -5897,7 +6654,7 @@ var LinkButton = forwardRef(function LinkButton2({
5897
6654
  }
5898
6655
  );
5899
6656
  }
5900
- return /* @__PURE__ */ jsx(Link, { ref, href, className: classes, target, rel, ...props, children: content });
6657
+ return /* @__PURE__ */ jsx(Link, { ref, href, ...root, className: classes, target, rel, ...props, children: content });
5901
6658
  });
5902
6659
  LinkButton.displayName = "LinkButton";
5903
6660
  var Skeleton = forwardRef(function Skeleton2({ className, ...props }, ref) {
@@ -5963,6 +6720,19 @@ var LoadingRows = forwardRef(function LoadingRows2({
5963
6720
  );
5964
6721
  });
5965
6722
  LoadingRows.displayName = "LoadingRows";
6723
+
6724
+ // src/lib/asset-base.ts
6725
+ var basePath = "/";
6726
+ function setAssetBasePath(base) {
6727
+ const trimmed = (base ?? "").replace(/\/+$/, "");
6728
+ basePath = trimmed === "" ? "/" : `${trimmed.startsWith("/") ? "" : "/"}${trimmed}/`;
6729
+ }
6730
+ function getAssetBasePath() {
6731
+ return basePath;
6732
+ }
6733
+ function assetPath(path) {
6734
+ return `${basePath}${path.replace(/^\/+/, "")}`;
6735
+ }
5966
6736
  var sizeStyles = {
5967
6737
  sm: { icon: 20, text: "text-sm", gap: "gap-2", assetHeight: 24 },
5968
6738
  md: { icon: 24, text: "text-[17px]", gap: "gap-2.5", assetHeight: 30 },
@@ -6014,7 +6784,7 @@ function Logo({
6014
6784
  asset && showText ? /* @__PURE__ */ jsx(
6015
6785
  Image2,
6016
6786
  {
6017
- src: asset.src,
6787
+ src: assetPath(asset.src),
6018
6788
  alt: "",
6019
6789
  width: asset.width,
6020
6790
  height: asset.height,
@@ -6025,7 +6795,7 @@ function Logo({
6025
6795
  ) : markAsset ? /* @__PURE__ */ jsx(
6026
6796
  Image2,
6027
6797
  {
6028
- src: markAsset.src,
6798
+ src: assetPath(markAsset.src),
6029
6799
  alt: "",
6030
6800
  width: markAsset.width,
6031
6801
  height: markAsset.height,
@@ -6400,7 +7170,7 @@ function OTPInput({
6400
7170
  "has-[:disabled]:[&_[aria-hidden=true]]:border-rule",
6401
7171
  "has-[:disabled]:[&_[aria-hidden=true]]:text-fg-disabled"
6402
7172
  ),
6403
- render: ({ slots }) => /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2.5", role: "group", "aria-label": "One-time password", children: slots.map((slot, idx) => /* @__PURE__ */ jsx(OTPSlot, { ...slot, hasError: !!error }, idx)) })
7173
+ render: ({ slots }) => /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2.5", role: "group", "aria-label": "One-time password", children: slots.map((slot2, idx) => /* @__PURE__ */ jsx(OTPSlot, { ...slot2, hasError: !!error }, idx)) })
6404
7174
  }
6405
7175
  ),
6406
7176
  error && /* @__PURE__ */ jsx("p", { id: errorId, role: "alert", className: "text-danger-fg text-center text-xs", children: error })
@@ -6417,7 +7187,7 @@ function OTPSlot({ isActive, char, hasFakeCaret, hasError }) {
6417
7187
  "transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]",
6418
7188
  "sm:h-14 sm:w-12 sm:text-xl",
6419
7189
  "border-rule-strong",
6420
- isActive && "[border-color:var(--focus-ring-border)] z-10 [box-shadow:var(--shadow-focus-ring)]",
7190
+ isActive && "[border-color:var(--focus-ring-border)] z-10 [box-shadow:var(--shadow-focus-ring-field)]",
6421
7191
  hasError && "border-danger-line",
6422
7192
  hasError && isActive && "border-danger-fg [box-shadow:0_0_0_2px_var(--color-danger-bg)]"
6423
7193
  ),
@@ -6454,7 +7224,7 @@ function getPageNumbers(current, total, siblings) {
6454
7224
  }
6455
7225
  return [1, "ellipsis", ...range(leftSibling, rightSibling), "ellipsis", total];
6456
7226
  }
6457
- var NAV_BUTTON = cn(
7227
+ var NAV_BUTTON2 = cn(
6458
7228
  "inline-flex size-7 items-center justify-center rounded-btn text-fg-3",
6459
7229
  "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
6460
7230
  "hover:bg-bg-2 hover:text-fg",
@@ -6492,18 +7262,28 @@ var Pagination = forwardRef(function Pagination2({
6492
7262
  {
6493
7263
  ref,
6494
7264
  "aria-label": `Pagination, page ${currentPage} of ${totalPages}`,
7265
+ ...slot(paginationAnatomy, "root"),
6495
7266
  className: cn("flex items-center justify-between gap-4", className),
6496
7267
  ...props,
6497
7268
  children: [
6498
- /* @__PURE__ */ jsx("span", { className: "text-fg-4 shrink-0 font-mono text-[11px] tracking-[0.02em] tabular-nums", children: contextLabel }),
6499
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5", children: [
7269
+ /* @__PURE__ */ jsx(
7270
+ "span",
7271
+ {
7272
+ ...slot(paginationAnatomy, "label"),
7273
+ className: "text-fg-4 shrink-0 font-mono text-[11px] tracking-[0.02em] tabular-nums",
7274
+ children: contextLabel
7275
+ }
7276
+ ),
7277
+ /* @__PURE__ */ jsxs("div", { ...slot(paginationAnatomy, "pages"), className: "flex items-center gap-0.5", children: [
6500
7278
  /* @__PURE__ */ jsx(
6501
7279
  "button",
6502
7280
  {
6503
7281
  type: "button",
6504
7282
  onClick: () => onPageChange(currentPage - 1),
6505
7283
  disabled: currentPage <= 1,
6506
- className: NAV_BUTTON,
7284
+ ...slot(paginationAnatomy, "previous"),
7285
+ ...stateAttributes({ disabled: currentPage <= 1 }),
7286
+ className: NAV_BUTTON2,
6507
7287
  "aria-label": "Previous page",
6508
7288
  children: /* @__PURE__ */ jsx(ChevronLeftIcon, { className: "size-3.5", "aria-hidden": "true" })
6509
7289
  }
@@ -6512,6 +7292,7 @@ var Pagination = forwardRef(function Pagination2({
6512
7292
  (page, i) => page === "ellipsis" ? /* @__PURE__ */ jsx(
6513
7293
  "span",
6514
7294
  {
7295
+ ...slot(paginationAnatomy, "ellipsis"),
6515
7296
  className: "text-fg-5 flex h-7 w-5 items-center justify-center select-none",
6516
7297
  "aria-hidden": "true",
6517
7298
  children: /* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "size-3.5" })
@@ -6523,6 +7304,8 @@ var Pagination = forwardRef(function Pagination2({
6523
7304
  type: "button",
6524
7305
  onClick: () => onPageChange(page),
6525
7306
  "aria-current": page === currentPage ? "page" : void 0,
7307
+ ...slot(paginationAnatomy, "page"),
7308
+ ...stateAttributes({ selected: page === currentPage }),
6526
7309
  className: cn(
6527
7310
  PAGE_BUTTON_BASE,
6528
7311
  page === currentPage ? "bg-accent-tint text-accent-2 border border-[color:var(--color-accent-tint)]" : "text-fg-3 hover:bg-bg-2 hover:text-fg"
@@ -6538,7 +7321,9 @@ var Pagination = forwardRef(function Pagination2({
6538
7321
  type: "button",
6539
7322
  onClick: () => onPageChange(currentPage + 1),
6540
7323
  disabled: currentPage >= totalPages,
6541
- className: NAV_BUTTON,
7324
+ ...slot(paginationAnatomy, "next"),
7325
+ ...stateAttributes({ disabled: currentPage >= totalPages }),
7326
+ className: NAV_BUTTON2,
6542
7327
  "aria-label": "Next page",
6543
7328
  children: /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5", "aria-hidden": "true" })
6544
7329
  }
@@ -7342,7 +8127,15 @@ var ProgressRing = forwardRef(function ProgressRing2({ value, max = 100, size =
7342
8127
  });
7343
8128
  ProgressRing.displayName = "ProgressRing";
7344
8129
  var RadioGroup3 = React39.forwardRef(function RadioGroup4({ className, ...props }, ref) {
7345
- return /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, { ref, className: cn("grid gap-2", className), ...props });
8130
+ return /* @__PURE__ */ jsx(
8131
+ RadioGroupPrimitive.Root,
8132
+ {
8133
+ ref,
8134
+ ...slot(radioGroupAnatomy, "root"),
8135
+ className: cn("grid gap-2", className),
8136
+ ...props
8137
+ }
8138
+ );
7346
8139
  });
7347
8140
  RadioGroup3.displayName = RadioGroupPrimitive.Root.displayName;
7348
8141
  var RadioGroupItem = React39.forwardRef(function RadioGroupItem2({ className, label, id: providedId, ...props }, ref) {
@@ -7353,18 +8146,26 @@ var RadioGroupItem = React39.forwardRef(function RadioGroupItem2({ className, la
7353
8146
  {
7354
8147
  ref,
7355
8148
  id,
8149
+ ...slot(radioGroupAnatomy, "item"),
7356
8150
  className: cn(
7357
8151
  "peer border-rule-strong bg-surface text-brand aspect-square size-4 shrink-0 rounded-full border",
7358
8152
  microInteractions.selection,
7359
8153
  "hover:border-fg-4",
7360
- "focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
8154
+ "focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring-field)] focus-visible:outline-none",
7361
8155
  "data-[state=checked]:border-brand",
7362
8156
  "disabled:bg-bg-disabled disabled:border-rule disabled:cursor-not-allowed",
7363
8157
  "aria-[invalid=true]:border-danger-line",
7364
8158
  className
7365
8159
  ),
7366
8160
  ...props,
7367
- children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(CircleIcon, { className: "fill-brand text-brand size-2", "aria-hidden": "true" }) })
8161
+ children: /* @__PURE__ */ jsx(
8162
+ RadioGroupPrimitive.Indicator,
8163
+ {
8164
+ ...slot(radioGroupAnatomy, "indicator"),
8165
+ className: "flex items-center justify-center",
8166
+ children: /* @__PURE__ */ jsx(CircleIcon, { className: "fill-brand text-brand size-2", "aria-hidden": "true" })
8167
+ }
8168
+ )
7368
8169
  }
7369
8170
  );
7370
8171
  if (!label) return root;
@@ -7374,6 +8175,7 @@ var RadioGroupItem = React39.forwardRef(function RadioGroupItem2({ className, la
7374
8175
  "label",
7375
8176
  {
7376
8177
  htmlFor: id,
8178
+ ...slot(radioGroupAnatomy, "label"),
7377
8179
  className: "text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed",
7378
8180
  children: label
7379
8181
  }
@@ -7441,6 +8243,7 @@ var SheetOverlay = React39.forwardRef(({ className, ...props }, ref) => /* @__PU
7441
8243
  DialogPrimitive.Overlay,
7442
8244
  {
7443
8245
  ref,
8246
+ ...slot(sheetAnatomy, "overlay"),
7444
8247
  className: cn(
7445
8248
  "bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
7446
8249
  "transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
@@ -7454,7 +8257,7 @@ var SheetOverlay = React39.forwardRef(({ className, ...props }, ref) => /* @__PU
7454
8257
  SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
7455
8258
  var sheetVariants = cva(
7456
8259
  cn(
7457
- "fixed z-[var(--z-modal)] flex flex-col gap-4 bg-surface text-fg shadow-pop",
8260
+ "fixed z-[var(--z-modal)] flex flex-col gap-4 bg-surface text-fg shadow-overlay",
7458
8261
  "transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
7459
8262
  "motion-reduce:transition-none"
7460
8263
  ),
@@ -7502,6 +8305,8 @@ var SheetContent = React39.forwardRef(
7502
8305
  DialogPrimitive.Content,
7503
8306
  {
7504
8307
  ref,
8308
+ ...slot(sheetAnatomy, "content"),
8309
+ ...stateAttributes({ size: width }),
7505
8310
  className: cn(sheetVariants({ side: resolvedSide }), widthClass, className),
7506
8311
  style: widthStyle,
7507
8312
  ...props,
@@ -7510,6 +8315,7 @@ var SheetContent = React39.forwardRef(
7510
8315
  showCloseButton && /* @__PURE__ */ jsx(
7511
8316
  DialogPrimitive.Close,
7512
8317
  {
8318
+ ...slot(sheetAnatomy, "close"),
7513
8319
  className: cn(
7514
8320
  "absolute top-4 right-4 inline-flex size-7 items-center justify-center",
7515
8321
  "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -7528,11 +8334,19 @@ var SheetContent = React39.forwardRef(
7528
8334
  }
7529
8335
  );
7530
8336
  SheetContent.displayName = DialogPrimitive.Content.displayName;
7531
- var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pr-12 pb-0", className), ...props });
8337
+ var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
8338
+ "div",
8339
+ {
8340
+ ...slot(sheetAnatomy, "header"),
8341
+ className: cn("flex flex-col gap-1.5 p-6 pr-12 pb-0", className),
8342
+ ...props
8343
+ }
8344
+ );
7532
8345
  SheetHeader.displayName = "SheetHeader";
7533
8346
  var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
7534
8347
  "div",
7535
8348
  {
8349
+ ...slot(sheetAnatomy, "footer"),
7536
8350
  className: cn(
7537
8351
  "border-rule mt-auto flex flex-col-reverse gap-2 border-t p-6 sm:flex-row sm:items-center sm:justify-end",
7538
8352
  className
@@ -7545,6 +8359,7 @@ var SheetTitle = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE
7545
8359
  DialogPrimitive.Title,
7546
8360
  {
7547
8361
  ref,
8362
+ ...slot(sheetAnatomy, "title"),
7548
8363
  className: cn(
7549
8364
  "font-display text-fg text-base leading-tight font-medium tracking-tight",
7550
8365
  className
@@ -7553,7 +8368,15 @@ var SheetTitle = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE
7553
8368
  }
7554
8369
  ));
7555
8370
  SheetTitle.displayName = DialogPrimitive.Title.displayName;
7556
- var SheetDescription = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Description, { ref, className: cn("text-fg-3 text-sm", className), ...props }));
8371
+ var SheetDescription = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8372
+ DialogPrimitive.Description,
8373
+ {
8374
+ ref,
8375
+ ...slot(sheetAnatomy, "description"),
8376
+ className: cn("text-fg-3 text-sm", className),
8377
+ ...props
8378
+ }
8379
+ ));
7557
8380
  SheetDescription.displayName = DialogPrimitive.Description.displayName;
7558
8381
  var MOBILE_QUERY = "(max-width: 639.98px)";
7559
8382
  function useIsMobile() {
@@ -7707,7 +8530,7 @@ var searchInputVariants = cva(
7707
8530
  microInteractions.control,
7708
8531
  "placeholder:text-fg-4",
7709
8532
  "focus-visible:outline-none focus-visible:[border-color:var(--focus-ring-border)]",
7710
- "focus-visible:[box-shadow:var(--shadow-focus-ring)]",
8533
+ "focus-visible:[box-shadow:var(--shadow-focus-ring-field)]",
7711
8534
  "disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled",
7712
8535
  // Hide the native search-cancel button — we render our own clear button.
7713
8536
  "[&::-webkit-search-cancel-button]:appearance-none",
@@ -7759,48 +8582,59 @@ var SearchInput = React39.forwardRef(
7759
8582
  const iconLeftClass = isCompact ? "left-2.5" : "left-3";
7760
8583
  const iconRightClass = isCompact ? "right-2" : isComfortable ? "right-3" : "right-2.5";
7761
8584
  const iconSizeClass = isCompact ? "size-3.5" : "size-4";
7762
- return /* @__PURE__ */ jsxs("div", { className: cn("relative w-full", className), children: [
7763
- /* @__PURE__ */ jsx(
7764
- SearchIcon,
7765
- {
7766
- className: cn(
7767
- "text-fg-4 pointer-events-none absolute top-1/2 -translate-y-1/2",
7768
- iconLeftClass,
7769
- iconSizeClass
8585
+ return /* @__PURE__ */ jsxs(
8586
+ "div",
8587
+ {
8588
+ ...slot(searchInputAnatomy, "root"),
8589
+ ...stateAttributes({ size: sz, disabled }),
8590
+ className: cn("relative w-full", className),
8591
+ children: [
8592
+ /* @__PURE__ */ jsx(
8593
+ SearchIcon,
8594
+ {
8595
+ ...slot(searchInputAnatomy, "icon"),
8596
+ className: cn(
8597
+ "text-fg-4 pointer-events-none absolute top-1/2 -translate-y-1/2",
8598
+ iconLeftClass,
8599
+ iconSizeClass
8600
+ ),
8601
+ "aria-hidden": "true"
8602
+ }
7770
8603
  ),
7771
- "aria-hidden": "true"
7772
- }
7773
- ),
7774
- /* @__PURE__ */ jsx(
7775
- "input",
7776
- {
7777
- ref,
7778
- type: "search",
7779
- value,
7780
- onChange: (e) => onValueChange(e.target.value),
7781
- placeholder,
7782
- disabled,
7783
- className: cn(searchInputVariants({ inputSize })),
7784
- ...props
7785
- }
7786
- ),
7787
- value && !disabled && /* @__PURE__ */ jsx(
7788
- "button",
7789
- {
7790
- type: "button",
7791
- onClick: () => onValueChange(""),
7792
- className: cn(
7793
- "rounded-pill text-fg-4 absolute top-1/2 -translate-y-1/2 p-0.5",
7794
- microInteractions.control,
7795
- "hover:text-fg",
7796
- "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
7797
- iconRightClass
8604
+ /* @__PURE__ */ jsx(
8605
+ "input",
8606
+ {
8607
+ ref,
8608
+ type: "search",
8609
+ value,
8610
+ onChange: (e) => onValueChange(e.target.value),
8611
+ placeholder,
8612
+ disabled,
8613
+ ...slot(searchInputAnatomy, "control"),
8614
+ className: cn(searchInputVariants({ inputSize })),
8615
+ ...props
8616
+ }
7798
8617
  ),
7799
- "aria-label": "Clear search",
7800
- children: /* @__PURE__ */ jsx(XIcon, { className: iconSizeClass, "aria-hidden": "true" })
7801
- }
7802
- )
7803
- ] });
8618
+ value && !disabled && /* @__PURE__ */ jsx(
8619
+ "button",
8620
+ {
8621
+ type: "button",
8622
+ onClick: () => onValueChange(""),
8623
+ ...slot(searchInputAnatomy, "clear"),
8624
+ className: cn(
8625
+ "rounded-pill text-fg-4 absolute top-1/2 -translate-y-1/2 p-0.5",
8626
+ microInteractions.control,
8627
+ "hover:text-fg",
8628
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
8629
+ iconRightClass
8630
+ ),
8631
+ "aria-label": "Clear search",
8632
+ children: /* @__PURE__ */ jsx(XIcon, { className: iconSizeClass, "aria-hidden": "true" })
8633
+ }
8634
+ )
8635
+ ]
8636
+ }
8637
+ );
7804
8638
  }
7805
8639
  );
7806
8640
  SearchInput.displayName = "SearchInput";
@@ -7908,20 +8742,39 @@ function SearchSelect({
7908
8742
  }
7909
8743
  }, [onCreate, trimmedSearch]);
7910
8744
  const inputRef = React39.useRef(null);
8745
+ const listRef = React39.useRef(null);
7911
8746
  const listboxId = React39.useId();
7912
- const setInputRef = React39.useCallback((node) => {
7913
- inputRef.current = node;
7914
- node?.removeAttribute("aria-labelledby");
7915
- node?.setAttribute("aria-controls", listboxId);
7916
- node?.removeAttribute("aria-activedescendant");
8747
+ const syncInputRelationships = React39.useCallback(() => {
8748
+ const input = inputRef.current;
8749
+ if (!input) return;
8750
+ input.removeAttribute("aria-labelledby");
8751
+ input.removeAttribute("aria-activedescendant");
8752
+ const controls = listRef.current?.id || listboxId;
8753
+ if (controls && input.ownerDocument.getElementById(controls)) {
8754
+ input.setAttribute("aria-controls", controls);
8755
+ } else {
8756
+ input.removeAttribute("aria-controls");
8757
+ }
7917
8758
  }, [listboxId]);
8759
+ const setInputRef = React39.useCallback(
8760
+ (node) => {
8761
+ inputRef.current = node;
8762
+ syncInputRelationships();
8763
+ },
8764
+ [syncInputRelationships]
8765
+ );
8766
+ const setListRef = React39.useCallback(
8767
+ (node) => {
8768
+ listRef.current = node;
8769
+ syncInputRelationships();
8770
+ },
8771
+ [syncInputRelationships]
8772
+ );
7918
8773
  const singleValue = closeOnSelect ? selected[0] ?? null : null;
7919
8774
  const showValue = singleValue !== null && !open;
7920
8775
  const popoverOpen = open && !disabled;
7921
8776
  React39.useEffect(() => {
7922
- inputRef.current?.removeAttribute("aria-labelledby");
7923
- inputRef.current?.setAttribute("aria-controls", listboxId);
7924
- inputRef.current?.removeAttribute("aria-activedescendant");
8777
+ syncInputRelationships();
7925
8778
  });
7926
8779
  React39.useEffect(() => {
7927
8780
  if (open && closeOnSelect) {
@@ -8082,7 +8935,6 @@ function SearchSelect({
8082
8935
  },
8083
8936
  placeholder,
8084
8937
  "aria-label": placeholder,
8085
- "aria-controls": listboxId,
8086
8938
  disabled,
8087
8939
  className: cn(
8088
8940
  "font-body text-fg flex-1 bg-transparent py-2 pr-3 pl-9 text-[13px] outline-none",
@@ -8131,7 +8983,7 @@ function SearchSelect({
8131
8983
  /* @__PURE__ */ jsxs(
8132
8984
  Command.List,
8133
8985
  {
8134
- id: listboxId,
8986
+ ref: setListRef,
8135
8987
  className: cn(
8136
8988
  // No top padding: a sticky group heading pins at top-0, so any
8137
8989
  // top padding would leave a strip above it where the previous
@@ -8387,7 +9239,7 @@ var Separator4 = React39.forwardRef(function Separator5({ className, orientation
8387
9239
  Separator4.displayName = SeparatorPrimitive.Root.displayName;
8388
9240
  var sideDrawerVariants = cva(
8389
9241
  cn(
8390
- "fixed inset-y-0 z-[var(--z-modal)] flex h-full flex-col bg-surface text-fg shadow-pop",
9242
+ "fixed inset-y-0 z-[var(--z-modal)] flex h-full flex-col bg-surface text-fg shadow-overlay",
8391
9243
  "font-body",
8392
9244
  "transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
8393
9245
  "motion-reduce:transition-none"
@@ -8435,6 +9287,7 @@ function SideDrawer({
8435
9287
  /* @__PURE__ */ jsx(
8436
9288
  DialogPrimitive.Overlay,
8437
9289
  {
9290
+ ...slot(sideDrawerAnatomy, "overlay"),
8438
9291
  className: cn(
8439
9292
  "bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
8440
9293
  "transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
@@ -8446,6 +9299,8 @@ function SideDrawer({
8446
9299
  /* @__PURE__ */ jsxs(
8447
9300
  DialogPrimitive.Content,
8448
9301
  {
9302
+ ...slot(sideDrawerAnatomy, "root"),
9303
+ ...stateAttributes({ size: width }),
8449
9304
  className: cn(sideDrawerVariants({ side, width })),
8450
9305
  "aria-describedby": void 0,
8451
9306
  children: [
@@ -8459,35 +9314,58 @@ function SideDrawer({
8459
9314
  );
8460
9315
  }
8461
9316
  function SideDrawerHeader({ title, subtitle, onClose, className }) {
8462
- 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: [
8463
- /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
8464
- /* @__PURE__ */ jsx("h2", { className: "font-display text-fg line-clamp-1 text-base leading-tight font-medium tracking-tight", children: title }),
8465
- subtitle && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-1 text-sm", children: subtitle })
8466
- ] }),
8467
- onClose && /* @__PURE__ */ jsx(
8468
- "button",
8469
- {
8470
- type: "button",
8471
- onClick: onClose,
8472
- className: cn(
8473
- "inline-flex size-7 shrink-0 items-center justify-center",
8474
- "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
8475
- "hover:bg-overlay-hover hover:text-fg",
8476
- "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
8477
- ),
8478
- "aria-label": "Close",
8479
- children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
8480
- }
8481
- )
8482
- ] }) });
9317
+ return /* @__PURE__ */ jsx(
9318
+ "div",
9319
+ {
9320
+ ...slot(sideDrawerAnatomy, "header"),
9321
+ className: cn("border-rule bg-surface shrink-0 border-b px-6 py-4", className),
9322
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
9323
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
9324
+ /* @__PURE__ */ jsx(
9325
+ "h2",
9326
+ {
9327
+ ...slot(sideDrawerAnatomy, "heading"),
9328
+ className: "font-display text-fg line-clamp-1 text-base leading-tight font-medium tracking-tight",
9329
+ children: title
9330
+ }
9331
+ ),
9332
+ subtitle && /* @__PURE__ */ jsx("p", { ...slot(sideDrawerAnatomy, "subtitle"), className: "text-fg-3 mt-1 text-sm", children: subtitle })
9333
+ ] }),
9334
+ onClose && /* @__PURE__ */ jsx(
9335
+ "button",
9336
+ {
9337
+ type: "button",
9338
+ onClick: onClose,
9339
+ ...slot(sideDrawerAnatomy, "close"),
9340
+ className: cn(
9341
+ "inline-flex size-7 shrink-0 items-center justify-center",
9342
+ "rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
9343
+ "hover:bg-overlay-hover hover:text-fg",
9344
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
9345
+ ),
9346
+ "aria-label": "Close",
9347
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
9348
+ }
9349
+ )
9350
+ ] })
9351
+ }
9352
+ );
8483
9353
  }
8484
9354
  function SideDrawerBody({ children, className }) {
8485
- return /* @__PURE__ */ jsx("div", { className: cn("scrollbar-thin flex-1 overflow-y-auto px-6 py-4", className), children });
9355
+ return /* @__PURE__ */ jsx(
9356
+ "div",
9357
+ {
9358
+ ...slot(sideDrawerAnatomy, "body"),
9359
+ className: cn("scrollbar-thin flex-1 overflow-y-auto px-6 py-4", className),
9360
+ children
9361
+ }
9362
+ );
8486
9363
  }
8487
9364
  function SideDrawerFooter({ children, className }) {
8488
9365
  return /* @__PURE__ */ jsx(
8489
9366
  "div",
8490
9367
  {
9368
+ ...slot(sideDrawerAnatomy, "footer"),
8491
9369
  className: cn(
8492
9370
  "border-rule bg-surface shrink-0 border-t px-6 py-4",
8493
9371
  "flex items-center justify-end gap-3",
@@ -9485,9 +10363,17 @@ var Switch = React39.forwardRef(
9485
10363
  {
9486
10364
  ref,
9487
10365
  id,
10366
+ ...slot(switchAnatomy, "root"),
10367
+ ...stateAttributes({ size: size ?? "md" }),
9488
10368
  className: cn(switchVariants({ size }), className),
9489
10369
  ...props,
9490
- children: /* @__PURE__ */ jsx(SwitchPrimitive.Thumb, { className: cn(switchThumbVariants({ size })) })
10370
+ children: /* @__PURE__ */ jsx(
10371
+ SwitchPrimitive.Thumb,
10372
+ {
10373
+ ...slot(switchAnatomy, "thumb"),
10374
+ className: cn(switchThumbVariants({ size }))
10375
+ }
10376
+ )
9491
10377
  }
9492
10378
  );
9493
10379
  if (!label) return root;
@@ -9497,6 +10383,7 @@ var Switch = React39.forwardRef(
9497
10383
  "label",
9498
10384
  {
9499
10385
  htmlFor: id,
10386
+ ...slot(switchAnatomy, "label"),
9500
10387
  className: "text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed",
9501
10388
  children: label
9502
10389
  }
@@ -9509,6 +10396,7 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
9509
10396
  return /* @__PURE__ */ jsx(
9510
10397
  "div",
9511
10398
  {
10399
+ ...slot(tableAnatomy, "wrapper"),
9512
10400
  className: cn(
9513
10401
  "rounded-card border-rule-strong bg-surface w-full overflow-x-auto border shadow-quiet",
9514
10402
  wrapperClassName
@@ -9517,6 +10405,7 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
9517
10405
  "table",
9518
10406
  {
9519
10407
  ref,
10408
+ ...slot(tableAnatomy, "root"),
9520
10409
  className: cn("w-full caption-bottom border-collapse text-sm", className),
9521
10410
  ...props
9522
10411
  }
@@ -9527,12 +10416,28 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
9527
10416
  Table.displayName = "Table";
9528
10417
  var TableHeader = forwardRef(
9529
10418
  function TableHeader2({ className, ...props }, ref) {
9530
- return /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-rule [&_tr]:border-b", className), ...props });
10419
+ return /* @__PURE__ */ jsx(
10420
+ "thead",
10421
+ {
10422
+ ref,
10423
+ ...slot(tableAnatomy, "header"),
10424
+ className: cn("[&_tr]:border-rule [&_tr]:border-b", className),
10425
+ ...props
10426
+ }
10427
+ );
9531
10428
  }
9532
10429
  );
9533
10430
  TableHeader.displayName = "TableHeader";
9534
10431
  var TableBody = forwardRef(function TableBody2({ className, ...props }, ref) {
9535
- return /* @__PURE__ */ jsx("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props });
10432
+ return /* @__PURE__ */ jsx(
10433
+ "tbody",
10434
+ {
10435
+ ref,
10436
+ ...slot(tableAnatomy, "body"),
10437
+ className: cn("[&_tr:last-child]:border-0", className),
10438
+ ...props
10439
+ }
10440
+ );
9536
10441
  });
9537
10442
  TableBody.displayName = "TableBody";
9538
10443
  var TableFooter = forwardRef(
@@ -9541,6 +10446,7 @@ var TableFooter = forwardRef(
9541
10446
  "tfoot",
9542
10447
  {
9543
10448
  ref,
10449
+ ...slot(tableAnatomy, "footer"),
9544
10450
  className: cn(
9545
10451
  "border-rule bg-surface-2 border-t font-medium [&>tr]:last:border-b-0",
9546
10452
  className
@@ -9556,6 +10462,7 @@ var TableRow = forwardRef(function TableRow2({ className, ...props }, ref) {
9556
10462
  "tr",
9557
10463
  {
9558
10464
  ref,
10465
+ ...slot(tableAnatomy, "row"),
9559
10466
  className: cn(
9560
10467
  "border-rule-soft border-b transition-colors duration-[var(--duration-instant)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
9561
10468
  // G15 compound: selected wins over hover; selected+hover uses the
@@ -9574,6 +10481,7 @@ var TableHead = forwardRef(function TableHead2({ className, ...props }, ref) {
9574
10481
  "th",
9575
10482
  {
9576
10483
  ref,
10484
+ ...slot(tableAnatomy, "head"),
9577
10485
  className: cn(
9578
10486
  // Sentence-case column labels in the body font (Plus Jakarta Sans),
9579
10487
  // quiet gray — not mono uppercase eyebrows.
@@ -9594,6 +10502,7 @@ var TableCell = forwardRef(function TableCell2({ className, ...props }, ref) {
9594
10502
  "td",
9595
10503
  {
9596
10504
  ref,
10505
+ ...slot(tableAnatomy, "cell"),
9597
10506
  className: cn(
9598
10507
  // 13px, fg-2, soft 1px row divider, tabular nums; airier vertical
9599
10508
  // rhythm (py-3) for the taller rows in the catalog layout.
@@ -9608,7 +10517,15 @@ var TableCell = forwardRef(function TableCell2({ className, ...props }, ref) {
9608
10517
  TableCell.displayName = "TableCell";
9609
10518
  var TableCaption = forwardRef(
9610
10519
  function TableCaption2({ className, ...props }, ref) {
9611
- return /* @__PURE__ */ jsx("caption", { ref, className: cn("text-fg-3 mt-3 text-sm", className), ...props });
10520
+ return /* @__PURE__ */ jsx(
10521
+ "caption",
10522
+ {
10523
+ ref,
10524
+ ...slot(tableAnatomy, "caption"),
10525
+ className: cn("text-fg-3 mt-3 text-sm", className),
10526
+ ...props
10527
+ }
10528
+ );
9612
10529
  }
9613
10530
  );
9614
10531
  TableCaption.displayName = "TableCaption";
@@ -9749,7 +10666,7 @@ var textareaVariants = cva(
9749
10666
  "motion-reduce:transition-none",
9750
10667
  "placeholder:text-fg-4",
9751
10668
  "focus-visible:outline-none focus-visible:[border-color:var(--focus-ring-border)]",
9752
- "focus-visible:[box-shadow:var(--shadow-focus-ring)]",
10669
+ "focus-visible:[box-shadow:var(--shadow-focus-ring-field)]",
9753
10670
  "disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled",
9754
10671
  "aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg",
9755
10672
  "aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]"
@@ -9810,7 +10727,15 @@ var Textarea = forwardRef(function Textarea2({
9810
10727
  }, [value, adjustHeight]);
9811
10728
  const currentLength = typeof value === "string" ? value.length : typeof defaultValue === "string" ? defaultValue.length : 0;
9812
10729
  return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
9813
- label && /* @__PURE__ */ jsx("label", { htmlFor: id, className: "text-fg mb-1.5 block text-[13px] leading-none font-medium", children: label }),
10730
+ label && /* @__PURE__ */ jsx(
10731
+ "label",
10732
+ {
10733
+ htmlFor: id,
10734
+ ...slot(textareaAnatomy, "label"),
10735
+ className: "text-fg mb-1.5 block text-[13px] leading-none font-medium",
10736
+ children: label
10737
+ }
10738
+ ),
9814
10739
  /* @__PURE__ */ jsx(
9815
10740
  "textarea",
9816
10741
  {
@@ -9821,6 +10746,13 @@ var Textarea = forwardRef(function Textarea2({
9821
10746
  maxLength,
9822
10747
  "aria-invalid": !!error || void 0,
9823
10748
  "aria-describedby": error ? errorId : void 0,
10749
+ ...slot(textareaAnatomy, "root"),
10750
+ ...stateAttributes({
10751
+ variant: variant ?? "default",
10752
+ size: inputSize ?? "md",
10753
+ disabled: props.disabled,
10754
+ invalid: !!error
10755
+ }),
9824
10756
  onChange: (e) => {
9825
10757
  onChange?.(e);
9826
10758
  adjustHeight();
@@ -9834,12 +10766,28 @@ var Textarea = forwardRef(function Textarea2({
9834
10766
  }
9835
10767
  ),
9836
10768
  (error || showCount && maxLength) && /* @__PURE__ */ jsxs("div", { className: "mt-1.5 flex items-center justify-between gap-2", children: [
9837
- error ? /* @__PURE__ */ jsx("p", { id: errorId, role: "alert", className: "text-danger-fg text-xs", children: error }) : /* @__PURE__ */ jsx("span", {}),
9838
- showCount && maxLength && /* @__PURE__ */ jsxs("span", { className: "text-fg-4 ml-auto font-mono text-[11px]", children: [
9839
- currentLength,
9840
- "/",
9841
- maxLength
9842
- ] })
10769
+ error ? /* @__PURE__ */ jsx(
10770
+ "p",
10771
+ {
10772
+ id: errorId,
10773
+ role: "alert",
10774
+ ...slot(textareaAnatomy, "error"),
10775
+ className: "text-danger-fg text-xs",
10776
+ children: error
10777
+ }
10778
+ ) : /* @__PURE__ */ jsx("span", {}),
10779
+ showCount && maxLength && /* @__PURE__ */ jsxs(
10780
+ "span",
10781
+ {
10782
+ ...slot(textareaAnatomy, "count"),
10783
+ className: "text-fg-4 ml-auto font-mono text-[11px]",
10784
+ children: [
10785
+ currentLength,
10786
+ "/",
10787
+ maxLength
10788
+ ]
10789
+ }
10790
+ )
9843
10791
  ] })
9844
10792
  ] });
9845
10793
  });
@@ -9912,6 +10860,7 @@ function ToastProvider({ children }) {
9912
10860
  /* @__PURE__ */ jsx(
9913
10861
  "div",
9914
10862
  {
10863
+ ...slot(toastAnatomy, "region"),
9915
10864
  className: "pointer-events-none fixed top-4 right-4 z-[var(--z-toast)] flex flex-col gap-2",
9916
10865
  role: "region",
9917
10866
  "aria-live": "polite",
@@ -10035,6 +10984,8 @@ function ToastItem({ toast, onDismiss }) {
10035
10984
  role: hasContent ? "group" : isError ? "alert" : "status",
10036
10985
  "aria-atomic": hasContent ? void 0 : true,
10037
10986
  "data-state": exiting ? "closed" : "open",
10987
+ ...slot(toastAnatomy, "root"),
10988
+ ...stateAttributes({ variant: toast.variant ?? "default" }),
10038
10989
  onPointerEnter: () => setPaused(true),
10039
10990
  onPointerLeave: () => {
10040
10991
  if (!dragRef.current) setPaused(false);
@@ -10071,6 +11022,7 @@ function ToastItem({ toast, onDismiss }) {
10071
11022
  /* @__PURE__ */ jsx(
10072
11023
  "span",
10073
11024
  {
11025
+ ...slot(toastAnatomy, "icon"),
10074
11026
  className: cn(
10075
11027
  // Same-hue inset ring gives the tinted chip a crafted edge instead
10076
11028
  // of a flat fill — definition without a heavy border.
@@ -10088,8 +11040,22 @@ function ToastItem({ toast, onDismiss }) {
10088
11040
  }
10089
11041
  ),
10090
11042
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
10091
- toast.title && /* @__PURE__ */ jsx("p", { className: "text-fg text-sm leading-tight font-semibold", children: toast.title }),
10092
- toast.description && /* @__PURE__ */ jsx("p", { className: "text-fg-3 mt-0.5 text-sm leading-snug", children: toast.description }),
11043
+ toast.title && /* @__PURE__ */ jsx(
11044
+ "p",
11045
+ {
11046
+ ...slot(toastAnatomy, "title"),
11047
+ className: "text-fg text-sm leading-tight font-semibold",
11048
+ children: toast.title
11049
+ }
11050
+ ),
11051
+ toast.description && /* @__PURE__ */ jsx(
11052
+ "p",
11053
+ {
11054
+ ...slot(toastAnatomy, "description"),
11055
+ className: "text-fg-3 mt-0.5 text-sm leading-snug",
11056
+ children: toast.description
11057
+ }
11058
+ ),
10093
11059
  toast.action && /* @__PURE__ */ jsx(
10094
11060
  "button",
10095
11061
  {
@@ -10098,6 +11064,7 @@ function ToastItem({ toast, onDismiss }) {
10098
11064
  toast.action?.onClick();
10099
11065
  close();
10100
11066
  },
11067
+ ...slot(toastAnatomy, "action"),
10101
11068
  className: cn(
10102
11069
  "text-brand mt-2 text-sm font-semibold",
10103
11070
  "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:underline motion-reduce:transition-none",
@@ -10112,6 +11079,7 @@ function ToastItem({ toast, onDismiss }) {
10112
11079
  {
10113
11080
  type: "button",
10114
11081
  onClick: close,
11082
+ ...slot(toastAnatomy, "close"),
10115
11083
  className: cn(
10116
11084
  // size-7 click target with a -m-1 offset so the glyph keeps its
10117
11085
  // top-right optical position while the hit area (and ring) grow.
@@ -10221,6 +11189,43 @@ var ToggleGroupItem = React39.forwardRef(function ToggleGroupItem2({ className,
10221
11189
  );
10222
11190
  });
10223
11191
  ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
11192
+ var INLINE_CLASS = cn(
11193
+ "rounded-icon border-rule bg-bg-2 text-fg border px-1 py-px",
11194
+ "font-mono text-code"
11195
+ );
11196
+ var BLOCK_CLASS = cn(
11197
+ "rounded-btn border-rule bg-bg-2 text-fg block overflow-x-auto border px-3 py-2.5",
11198
+ "scrollbar-thin font-mono text-code",
11199
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
11200
+ );
11201
+ var Code = forwardRef(function Code2({ variant = "inline", className, children, ...props }, ref) {
11202
+ if (variant === "block") {
11203
+ return /* @__PURE__ */ jsx(
11204
+ "pre",
11205
+ {
11206
+ ref,
11207
+ tabIndex: 0,
11208
+ ...slot(codeAnatomy, "root"),
11209
+ ...stateAttributes({ variant }),
11210
+ className: cn(BLOCK_CLASS, className),
11211
+ ...props,
11212
+ children: /* @__PURE__ */ jsx("code", { ...slot(codeAnatomy, "content"), children })
11213
+ }
11214
+ );
11215
+ }
11216
+ return /* @__PURE__ */ jsx(
11217
+ "code",
11218
+ {
11219
+ ref,
11220
+ ...slot(codeAnatomy, "root"),
11221
+ ...stateAttributes({ variant }),
11222
+ className: cn(INLINE_CLASS, className),
11223
+ ...props,
11224
+ children
11225
+ }
11226
+ );
11227
+ });
11228
+ Code.displayName = "Code";
10224
11229
  var TooltipProvider = TooltipPrimitive.Provider;
10225
11230
  var TooltipTrigger = TooltipPrimitive.Trigger;
10226
11231
  var TooltipPortal = TooltipPrimitive.Portal;
@@ -10234,6 +11239,7 @@ var TooltipContent = React39.forwardRef(({ className, sideOffset = 6, ...props }
10234
11239
  {
10235
11240
  ref,
10236
11241
  sideOffset,
11242
+ ...slot(tooltipAnatomy, "content"),
10237
11243
  className: cn(
10238
11244
  "rounded-input border-rule-strong bg-surface z-[var(--z-tooltip)] max-w-xs border px-2.5 py-1.5",
10239
11245
  "font-body text-fg shadow-pop text-xs leading-tight",
@@ -10343,6 +11349,252 @@ function IntentBadge({ tone = "muted", icon, children, className, ...props }) {
10343
11349
  );
10344
11350
  }
10345
11351
  IntentBadge.displayName = "IntentBadge";
11352
+ var SIZE_CLASS = {
11353
+ display: "text-display",
11354
+ "title-page": "text-title-page",
11355
+ "title-section": "text-title-section",
11356
+ "title-sub": "text-title-sub",
11357
+ body: "text-body",
11358
+ "body-sm": "text-body-sm",
11359
+ label: "text-label",
11360
+ helper: "text-helper",
11361
+ caption: "text-caption",
11362
+ micro: "text-micro",
11363
+ overline: "text-overline uppercase",
11364
+ code: "text-code font-mono"
11365
+ };
11366
+ var COLOR_CLASS = {
11367
+ default: "text-fg",
11368
+ secondary: "text-fg-2",
11369
+ muted: "text-fg-3",
11370
+ subtle: "text-fg-4",
11371
+ inverse: "text-bg",
11372
+ danger: "text-danger-fg",
11373
+ success: "text-success-fg",
11374
+ warning: "text-warning-fg",
11375
+ brand: "text-brand"
11376
+ };
11377
+ var WEIGHT_CLASS = {
11378
+ regular: "font-normal",
11379
+ medium: "font-medium",
11380
+ semibold: "font-semibold",
11381
+ bold: "font-bold"
11382
+ };
11383
+ var Text = forwardRef(function Text2({ size = "body", color, weight, numeric, truncate, asChild, className, ...props }, ref) {
11384
+ const Comp = asChild ? Slot : "span";
11385
+ return /* @__PURE__ */ jsx(
11386
+ Comp,
11387
+ {
11388
+ ref,
11389
+ ...slot(textAnatomy, "root"),
11390
+ className: cn(
11391
+ SIZE_CLASS[size],
11392
+ color && COLOR_CLASS[color],
11393
+ weight && WEIGHT_CLASS[weight],
11394
+ numeric && "numeric",
11395
+ truncate && "truncate",
11396
+ className
11397
+ ),
11398
+ ...props
11399
+ }
11400
+ );
11401
+ });
11402
+ Text.displayName = "Text";
11403
+ var DEFAULT_SIZE = {
11404
+ 1: "title-page",
11405
+ 2: "title-section",
11406
+ 3: "title-sub",
11407
+ 4: "title-sub",
11408
+ 5: "title-sub",
11409
+ 6: "title-sub"
11410
+ };
11411
+ var SIZE_CLASS2 = {
11412
+ display: "text-display",
11413
+ "title-page": "text-title-page",
11414
+ "title-section": "text-title-section",
11415
+ "title-sub": "text-title-sub"
11416
+ };
11417
+ var Heading = forwardRef(function Heading2({ level, size, className, ...props }, ref) {
11418
+ const Tag = `h${level}`;
11419
+ return /* @__PURE__ */ jsx(
11420
+ Tag,
11421
+ {
11422
+ ref,
11423
+ ...slot(headingAnatomy, "root"),
11424
+ className: cn("font-display text-fg", SIZE_CLASS2[size ?? DEFAULT_SIZE[level]], className),
11425
+ ...props
11426
+ }
11427
+ );
11428
+ });
11429
+ Heading.displayName = "Heading";
11430
+
11431
+ // src/primitives/layout/responsive.ts
11432
+ var GAP = {
11433
+ base: {
11434
+ none: "gap-0",
11435
+ xs: "gap-(--stack-gap-xs)",
11436
+ sm: "gap-(--stack-gap-sm)",
11437
+ md: "gap-(--stack-gap-md)",
11438
+ lg: "gap-(--stack-gap-lg)",
11439
+ xl: "gap-(--stack-gap-xl)"
11440
+ },
11441
+ sm: {
11442
+ none: "sm:gap-0",
11443
+ xs: "sm:gap-(--stack-gap-xs)",
11444
+ sm: "sm:gap-(--stack-gap-sm)",
11445
+ md: "sm:gap-(--stack-gap-md)",
11446
+ lg: "sm:gap-(--stack-gap-lg)",
11447
+ xl: "sm:gap-(--stack-gap-xl)"
11448
+ },
11449
+ md: {
11450
+ none: "md:gap-0",
11451
+ xs: "md:gap-(--stack-gap-xs)",
11452
+ sm: "md:gap-(--stack-gap-sm)",
11453
+ md: "md:gap-(--stack-gap-md)",
11454
+ lg: "md:gap-(--stack-gap-lg)",
11455
+ xl: "md:gap-(--stack-gap-xl)"
11456
+ },
11457
+ lg: {
11458
+ none: "lg:gap-0",
11459
+ xs: "lg:gap-(--stack-gap-xs)",
11460
+ sm: "lg:gap-(--stack-gap-sm)",
11461
+ md: "lg:gap-(--stack-gap-md)",
11462
+ lg: "lg:gap-(--stack-gap-lg)",
11463
+ xl: "lg:gap-(--stack-gap-xl)"
11464
+ }
11465
+ };
11466
+ var ALIGN = {
11467
+ start: "items-start",
11468
+ center: "items-center",
11469
+ end: "items-end",
11470
+ stretch: "items-stretch",
11471
+ baseline: "items-baseline"
11472
+ };
11473
+ var JUSTIFY = {
11474
+ start: "justify-start",
11475
+ center: "justify-center",
11476
+ end: "justify-end",
11477
+ between: "justify-between",
11478
+ around: "justify-around",
11479
+ evenly: "justify-evenly"
11480
+ };
11481
+ var BREAKPOINTS = ["sm", "md", "lg"];
11482
+ function responsiveClasses(value, fallback, table) {
11483
+ if (value === void 0 || typeof value === "string") {
11484
+ return [table.base[value ?? fallback]];
11485
+ }
11486
+ const classes = [table.base[value.base ?? fallback]];
11487
+ for (const breakpoint of BREAKPOINTS) {
11488
+ const step = value[breakpoint];
11489
+ if (step !== void 0) classes.push(table[breakpoint][step]);
11490
+ }
11491
+ return classes;
11492
+ }
11493
+ function gapClasses(gap, fallback) {
11494
+ return responsiveClasses(gap, fallback, GAP);
11495
+ }
11496
+ function alignClass(align) {
11497
+ return align === void 0 ? void 0 : ALIGN[align];
11498
+ }
11499
+ function justifyClass(justify) {
11500
+ return justify === void 0 ? void 0 : JUSTIFY[justify];
11501
+ }
11502
+ function wrapClass(wrap) {
11503
+ return wrap === void 0 ? void 0 : wrap ? "flex-wrap" : "flex-nowrap";
11504
+ }
11505
+ var DIRECTION = {
11506
+ base: { column: "flex-col", row: "flex-row" },
11507
+ sm: { column: "sm:flex-col", row: "sm:flex-row" },
11508
+ md: { column: "md:flex-col", row: "md:flex-row" },
11509
+ lg: { column: "lg:flex-col", row: "lg:flex-row" }
11510
+ };
11511
+ var BREAKPOINTS2 = ["sm", "md", "lg"];
11512
+ function directionClasses(direction) {
11513
+ if (direction === void 0 || typeof direction === "string") {
11514
+ return [DIRECTION.base[direction ?? "column"]];
11515
+ }
11516
+ const classes = [DIRECTION.base[direction.base ?? "column"]];
11517
+ for (const breakpoint of BREAKPOINTS2) {
11518
+ const value = direction[breakpoint];
11519
+ if (value !== void 0) classes.push(DIRECTION[breakpoint][value]);
11520
+ }
11521
+ return classes;
11522
+ }
11523
+ var Stack = forwardRef(function Stack2({ direction, gap, align, justify, wrap, className, ...props }, ref) {
11524
+ return /* @__PURE__ */ jsx(
11525
+ "div",
11526
+ {
11527
+ ref,
11528
+ ...slot(stackAnatomy, "root"),
11529
+ className: cn(
11530
+ "flex",
11531
+ directionClasses(direction),
11532
+ gapClasses(gap, "md"),
11533
+ alignClass(align),
11534
+ justifyClass(justify),
11535
+ wrapClass(wrap),
11536
+ className
11537
+ ),
11538
+ ...props
11539
+ }
11540
+ );
11541
+ });
11542
+ Stack.displayName = "Stack";
11543
+ var Inline = forwardRef(function Inline2({ gap, align = "center", justify, wrap = true, className, ...props }, ref) {
11544
+ return /* @__PURE__ */ jsx(
11545
+ "div",
11546
+ {
11547
+ ref,
11548
+ ...slot(inlineAnatomy, "root"),
11549
+ className: cn(
11550
+ "flex flex-row",
11551
+ gapClasses(gap, "md"),
11552
+ alignClass(align),
11553
+ justifyClass(justify),
11554
+ wrapClass(wrap),
11555
+ className
11556
+ ),
11557
+ ...props
11558
+ }
11559
+ );
11560
+ });
11561
+ Inline.displayName = "Inline";
11562
+ var PADDING = {
11563
+ none: "p-0",
11564
+ sm: "p-(--surface-pad-sm)",
11565
+ md: "p-(--surface-pad-md)",
11566
+ lg: "p-(--surface-pad-lg)"
11567
+ };
11568
+ var RADIUS = {
11569
+ none: "rounded-none",
11570
+ "surface-sm": "rounded-surface-sm",
11571
+ surface: "rounded-surface"
11572
+ };
11573
+ var ELEVATION = {
11574
+ none: void 0,
11575
+ flat: "shadow-flat",
11576
+ raised: "shadow-raised",
11577
+ floating: "shadow-floating",
11578
+ overlay: "shadow-overlay"
11579
+ };
11580
+ var Surface = forwardRef(function Surface2({ padding = "sm", radius = "surface", elevation = "none", className, ...props }, ref) {
11581
+ return /* @__PURE__ */ jsx(
11582
+ "div",
11583
+ {
11584
+ ref,
11585
+ ...slot(surfaceAnatomy, "root"),
11586
+ className: cn(
11587
+ "border-rule bg-surface border",
11588
+ PADDING[padding],
11589
+ RADIUS[radius],
11590
+ ELEVATION[elevation],
11591
+ className
11592
+ ),
11593
+ ...props
11594
+ }
11595
+ );
11596
+ });
11597
+ Surface.displayName = "Surface";
10346
11598
  var ICON_BTN = cn(
10347
11599
  "inline-flex size-9 shrink-0 items-center justify-center rounded-[9px]",
10348
11600
  "border-rule-strong bg-surface text-fg-3 border",
@@ -13784,7 +15036,15 @@ var NewMenu = forwardRef(function NewMenu2({ actions, groups, triggerLabel = "Ne
13784
15036
  });
13785
15037
  NewMenu.displayName = "NewMenu";
13786
15038
  var Shell = forwardRef(function Shell2({ className, ...props }, ref) {
13787
- return /* @__PURE__ */ jsx("div", { ref, className: cn("bg-bg flex h-dvh w-full", className), ...props });
15039
+ return /* @__PURE__ */ jsx(
15040
+ "div",
15041
+ {
15042
+ ref,
15043
+ ...slot(shellAnatomy, "root"),
15044
+ className: cn("bg-bg flex h-dvh w-full", className),
15045
+ ...props
15046
+ }
15047
+ );
13788
15048
  });
13789
15049
  Shell.displayName = "Shell";
13790
15050
  var Main = forwardRef(function Main2({ className, ...props }, ref) {
@@ -13792,6 +15052,7 @@ var Main = forwardRef(function Main2({ className, ...props }, ref) {
13792
15052
  "main",
13793
15053
  {
13794
15054
  ref,
15055
+ ...slot(shellAnatomy, "main"),
13795
15056
  className: cn("flex min-w-0 flex-1 flex-col overflow-hidden", className),
13796
15057
  ...props
13797
15058
  }
@@ -13811,6 +15072,7 @@ var Content16 = forwardRef(function Content17({ padTop, padBottom, className, st
13811
15072
  role: "region",
13812
15073
  "aria-label": "Page content",
13813
15074
  tabIndex: 0,
15075
+ ...slot(shellAnatomy, "content"),
13814
15076
  className: cn("flex-1 overflow-y-auto p-[var(--content-pad)]", className),
13815
15077
  style: paddingStyle,
13816
15078
  ...props
@@ -13994,6 +15256,7 @@ var Sidebar = React39.forwardRef(function Sidebar2({
13994
15256
  "data-labels": labelsHidden ? "hide" : "show",
13995
15257
  "data-collapsible": collapsible ? "true" : void 0,
13996
15258
  "data-variant": variant,
15259
+ ...slot(sidebarAnatomy, "root"),
13997
15260
  onMouseEnter: handleEnter,
13998
15261
  onMouseLeave: handleLeave,
13999
15262
  style: { width: effectiveWidth, ...style },
@@ -14053,6 +15316,7 @@ var SidebarTrigger = React39.forwardRef(
14053
15316
  onClick?.(e);
14054
15317
  if (!e.defaultPrevented) toggle();
14055
15318
  },
15319
+ ...slot(sidebarAnatomy, "trigger"),
14056
15320
  className: cn(
14057
15321
  "inline-flex size-7 shrink-0 items-center justify-center rounded-md",
14058
15322
  "text-fg-3 hover:bg-bg-3 hover:text-fg",
@@ -14099,6 +15363,8 @@ var SidebarPinButton = React39.forwardRef(
14099
15363
  onClick?.(e);
14100
15364
  if (!e.defaultPrevented) setState(isPinned ? "rail" : "expanded");
14101
15365
  },
15366
+ ...slot(sidebarAnatomy, "pin"),
15367
+ ...stateAttributes({ selected: isPinned }),
14102
15368
  className: cn(
14103
15369
  "inline-flex size-7 shrink-0 items-center justify-center rounded-md",
14104
15370
  "text-fg-4 hover:bg-bg-3 hover:text-fg aria-pressed:text-fg",
@@ -14155,6 +15421,7 @@ var SidebarBrand = React39.forwardRef(
14155
15421
  "div",
14156
15422
  {
14157
15423
  ref,
15424
+ ...slot(sidebarAnatomy, "brand"),
14158
15425
  className: cn(
14159
15426
  "flex min-w-0 items-center gap-2 px-2.5 pt-1 pb-4",
14160
15427
  className
@@ -14172,6 +15439,7 @@ var SidebarBrandText = React39.forwardRef(
14172
15439
  {
14173
15440
  ref,
14174
15441
  "aria-hidden": "false",
15442
+ ...slot(sidebarAnatomy, "brand-text"),
14175
15443
  className: cn(
14176
15444
  // line-clamp-1 (not `truncate`) so multi-word wordmarks clip at a
14177
15445
  // word boundary instead of mid-word when the rail is narrow.
@@ -14209,6 +15477,7 @@ var SidebarSection = React39.forwardRef(
14209
15477
  ref,
14210
15478
  role: ariaLabel ? "group" : void 0,
14211
15479
  "aria-label": ariaLabel,
15480
+ ...slot(sidebarAnatomy, "section"),
14212
15481
  className: cn(
14213
15482
  "mb-4",
14214
15483
  // In rail, the visible section labels disappear and the only
@@ -14223,6 +15492,7 @@ var SidebarSection = React39.forwardRef(
14223
15492
  label != null && /* @__PURE__ */ jsx(
14224
15493
  "div",
14225
15494
  {
15495
+ ...slot(sidebarAnatomy, "section-header"),
14226
15496
  className: cn(
14227
15497
  "mb-1 flex items-center justify-between px-2.5 py-1",
14228
15498
  "transition-opacity duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
@@ -14232,6 +15502,7 @@ var SidebarSection = React39.forwardRef(
14232
15502
  children: /* @__PURE__ */ jsx(
14233
15503
  "span",
14234
15504
  {
15505
+ ...slot(sidebarAnatomy, "section-label"),
14235
15506
  className: cn(
14236
15507
  "font-mono text-[11px] tracking-[0.14em] uppercase",
14237
15508
  tone === "muted" ? "text-fg-3" : "text-brand"
@@ -14273,6 +15544,7 @@ var SidebarLink = React39.forwardRef(
14273
15544
  "data-active": active ? "true" : void 0,
14274
15545
  "aria-current": active ? "page" : void 0,
14275
15546
  "aria-label": accessibleLabel,
15547
+ ...slot(sidebarAnatomy, "link"),
14276
15548
  className: cn(
14277
15549
  "group/link relative mb-px flex items-center gap-2.5 rounded-md px-2.5 py-1.5",
14278
15550
  "text-fg-2 text-[13px] font-normal no-underline",
@@ -14312,6 +15584,7 @@ var SidebarLink = React39.forwardRef(
14312
15584
  /* @__PURE__ */ jsx(
14313
15585
  "span",
14314
15586
  {
15587
+ ...slot(sidebarAnatomy, "link-label"),
14315
15588
  className: cn(
14316
15589
  // Flex row so a trailing <SidebarLinkBadge> (ml-auto) aligns
14317
15590
  // to the right edge with a gap from the label, instead of
@@ -14343,6 +15616,7 @@ var SidebarLinkLabel = React39.forwardRef(
14343
15616
  "span",
14344
15617
  {
14345
15618
  ref,
15619
+ ...slot(sidebarAnatomy, "link-label"),
14346
15620
  className: cn(
14347
15621
  // line-clamp-1 (not `truncate`) so multi-word labels clip at a
14348
15622
  // word boundary; collapses cleanly with the rail-mode max-width
@@ -14368,6 +15642,7 @@ var SidebarLinkAction = React39.forwardRef(
14368
15642
  "span",
14369
15643
  {
14370
15644
  ref,
15645
+ ...slot(sidebarAnatomy, "link-action"),
14371
15646
  className: cn(
14372
15647
  "transition-opacity duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
14373
15648
  "opacity-100",
@@ -14396,7 +15671,15 @@ var sidebarLinkBadgeVariants = cva(
14396
15671
  );
14397
15672
  var SidebarLinkBadge = React39.forwardRef(
14398
15673
  function SidebarLinkBadge2({ tone, className, ...props }, ref) {
14399
- return /* @__PURE__ */ jsx("span", { ref, className: cn(sidebarLinkBadgeVariants({ tone }), className), ...props });
15674
+ return /* @__PURE__ */ jsx(
15675
+ "span",
15676
+ {
15677
+ ref,
15678
+ ...slot(sidebarAnatomy, "link-badge"),
15679
+ className: cn(sidebarLinkBadgeVariants({ tone }), className),
15680
+ ...props
15681
+ }
15682
+ );
14400
15683
  }
14401
15684
  );
14402
15685
  SidebarLinkBadge.displayName = "SidebarLinkBadge";
@@ -14467,6 +15750,7 @@ var SidebarLinkGroup = React39.forwardRef(
14467
15750
  const labelSpan = /* @__PURE__ */ jsx(
14468
15751
  "span",
14469
15752
  {
15753
+ ...slot(sidebarAnatomy, "link-label"),
14470
15754
  className: cn(
14471
15755
  // line-clamp-1 (not `truncate`) so multi-word labels clip at a
14472
15756
  // word boundary; collapses cleanly with the rail-mode max-width
@@ -14479,60 +15763,73 @@ var SidebarLinkGroup = React39.forwardRef(
14479
15763
  children: label
14480
15764
  }
14481
15765
  );
14482
- return /* @__PURE__ */ jsx("div", { ref, className: cn("mb-px", className), ...props, children: /* @__PURE__ */ jsxs(Collapsible, { open, onOpenChange: setOpen, children: [
14483
- /* @__PURE__ */ jsxs("div", { className: "flex items-stretch", children: [
14484
- /* @__PURE__ */ jsxs(
14485
- "a",
14486
- {
14487
- href,
14488
- "data-active": active ? "true" : void 0,
14489
- "aria-current": active ? "page" : void 0,
14490
- "aria-label": getTextContent(label) || void 0,
14491
- onClick: handleBodyClick,
14492
- className: bodyClassName,
14493
- children: [
14494
- icon,
14495
- labelSpan
14496
- ]
14497
- }
14498
- ),
14499
- /* @__PURE__ */ jsx(
14500
- "button",
14501
- {
14502
- type: "button",
14503
- "aria-expanded": open,
14504
- "aria-controls": contentId,
14505
- "aria-label": open ? "Collapse section" : "Expand section",
14506
- onClick: handleChevronClick,
14507
- className: cn(
14508
- "ml-px inline-flex size-7 shrink-0 items-center justify-center rounded-md",
14509
- "text-fg-4 hover:bg-bg-3 hover:text-fg-2",
14510
- "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
14511
- "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
14512
- "[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:transition-transform [&_svg]:duration-[var(--duration-fast)] [&_svg]:ease-[var(--ease-out-quart)] motion-reduce:[&_svg]:transition-none",
14513
- // Hide in rail — content tree is hidden too, so the
14514
- // affordance has nothing to control.
14515
- "group-data-[labels=hide]/sidebar:hidden"
15766
+ return /* @__PURE__ */ jsx(
15767
+ "div",
15768
+ {
15769
+ ref,
15770
+ ...slot(sidebarAnatomy, "group"),
15771
+ ...stateAttributes({ state: open ? "open" : "closed" }),
15772
+ className: cn("mb-px", className),
15773
+ ...props,
15774
+ children: /* @__PURE__ */ jsxs(Collapsible, { open, onOpenChange: setOpen, children: [
15775
+ /* @__PURE__ */ jsxs("div", { className: "flex items-stretch", children: [
15776
+ /* @__PURE__ */ jsxs(
15777
+ "a",
15778
+ {
15779
+ href,
15780
+ "data-active": active ? "true" : void 0,
15781
+ "aria-current": active ? "page" : void 0,
15782
+ "aria-label": getTextContent(label) || void 0,
15783
+ onClick: handleBodyClick,
15784
+ ...slot(sidebarAnatomy, "group-link"),
15785
+ className: bodyClassName,
15786
+ children: [
15787
+ icon,
15788
+ labelSpan
15789
+ ]
15790
+ }
14516
15791
  ),
14517
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: open ? "" : "-rotate-90" })
14518
- }
14519
- )
14520
- ] }),
14521
- /* @__PURE__ */ jsx(
14522
- CollapsibleContent,
14523
- {
14524
- id: contentId,
14525
- className: cn(
14526
- // Indent column + connecting rule. Children render as
14527
- // standard <SidebarLink>s and keep their own active-rail
14528
- // indicator, which lands flush at the indented column's
14529
- // left edge.
14530
- "group-data-[labels=hide]/sidebar:hidden"
14531
- ),
14532
- children: /* @__PURE__ */ jsx("div", { className: "border-rule mt-px ml-[18px] border-l pl-2", children })
14533
- }
14534
- )
14535
- ] }) });
15792
+ /* @__PURE__ */ jsx(
15793
+ "button",
15794
+ {
15795
+ type: "button",
15796
+ "aria-expanded": open,
15797
+ "aria-controls": contentId,
15798
+ "aria-label": open ? "Collapse section" : "Expand section",
15799
+ onClick: handleChevronClick,
15800
+ ...slot(sidebarAnatomy, "group-trigger"),
15801
+ className: cn(
15802
+ "ml-px inline-flex size-7 shrink-0 items-center justify-center rounded-md",
15803
+ "text-fg-4 hover:bg-bg-3 hover:text-fg-2",
15804
+ "transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
15805
+ "focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
15806
+ "[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:transition-transform [&_svg]:duration-[var(--duration-fast)] [&_svg]:ease-[var(--ease-out-quart)] motion-reduce:[&_svg]:transition-none",
15807
+ // Hide in rail — content tree is hidden too, so the
15808
+ // affordance has nothing to control.
15809
+ "group-data-[labels=hide]/sidebar:hidden"
15810
+ ),
15811
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: open ? "" : "-rotate-90" })
15812
+ }
15813
+ )
15814
+ ] }),
15815
+ /* @__PURE__ */ jsx(
15816
+ CollapsibleContent,
15817
+ {
15818
+ id: contentId,
15819
+ ...slot(sidebarAnatomy, "group-content"),
15820
+ className: cn(
15821
+ // Indent column + connecting rule. Children render as
15822
+ // standard <SidebarLink>s and keep their own active-rail
15823
+ // indicator, which lands flush at the indented column's
15824
+ // left edge.
15825
+ "group-data-[labels=hide]/sidebar:hidden"
15826
+ ),
15827
+ children: /* @__PURE__ */ jsx("div", { className: "border-rule mt-px ml-[18px] border-l pl-2", children })
15828
+ }
15829
+ )
15830
+ ] })
15831
+ }
15832
+ );
14536
15833
  }
14537
15834
  );
14538
15835
  SidebarLinkGroup.displayName = "SidebarLinkGroup";
@@ -14542,6 +15839,7 @@ var SidebarFooter = React39.forwardRef(
14542
15839
  "div",
14543
15840
  {
14544
15841
  ref,
15842
+ ...slot(sidebarAnatomy, "footer"),
14545
15843
  className: cn(
14546
15844
  "border-rule mt-auto flex items-center gap-2.5 border-t px-2 pt-2.5 pb-1",
14547
15845
  "text-fg-3 text-xs",
@@ -14554,24 +15852,47 @@ var SidebarFooter = React39.forwardRef(
14554
15852
  );
14555
15853
  SidebarFooter.displayName = "SidebarFooter";
14556
15854
  var SidebarUser = React39.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
14557
- return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex min-w-0 items-center gap-2.5", className), ...props, children: [
14558
- /* @__PURE__ */ jsx(Avatar, { size: "sm", variant: "branded", name, src: avatarSrc ?? void 0 }),
14559
- /* @__PURE__ */ jsxs(
14560
- "div",
14561
- {
14562
- className: cn(
14563
- "min-w-0 leading-tight",
14564
- "transition-[opacity,max-width] duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
14565
- "max-w-full opacity-100",
14566
- "group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible"
14567
- ),
14568
- children: [
14569
- /* @__PURE__ */ jsx("div", { className: "text-fg line-clamp-1 text-[13px] font-medium", children: name }),
14570
- subtitle != null && /* @__PURE__ */ jsx("div", { className: "text-fg-4 line-clamp-1 font-mono text-[10.5px]", children: subtitle })
14571
- ]
14572
- }
14573
- )
14574
- ] });
15855
+ return /* @__PURE__ */ jsxs(
15856
+ "div",
15857
+ {
15858
+ ref,
15859
+ ...slot(sidebarAnatomy, "user"),
15860
+ className: cn("flex min-w-0 items-center gap-2.5", className),
15861
+ ...props,
15862
+ children: [
15863
+ /* @__PURE__ */ jsx(Avatar, { size: "sm", variant: "branded", name, src: avatarSrc ?? void 0 }),
15864
+ /* @__PURE__ */ jsxs(
15865
+ "div",
15866
+ {
15867
+ className: cn(
15868
+ "min-w-0 leading-tight",
15869
+ "transition-[opacity,max-width] duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
15870
+ "max-w-full opacity-100",
15871
+ "group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible"
15872
+ ),
15873
+ children: [
15874
+ /* @__PURE__ */ jsx(
15875
+ "div",
15876
+ {
15877
+ ...slot(sidebarAnatomy, "user-name"),
15878
+ className: "text-fg line-clamp-1 text-[13px] font-medium",
15879
+ children: name
15880
+ }
15881
+ ),
15882
+ subtitle != null && /* @__PURE__ */ jsx(
15883
+ "div",
15884
+ {
15885
+ ...slot(sidebarAnatomy, "user-subtitle"),
15886
+ className: "text-fg-4 line-clamp-1 font-mono text-[10.5px]",
15887
+ children: subtitle
15888
+ }
15889
+ )
15890
+ ]
15891
+ }
15892
+ )
15893
+ ]
15894
+ }
15895
+ );
14575
15896
  });
14576
15897
  SidebarUser.displayName = "SidebarUser";
14577
15898
  var SidebarBrandSwitcher = React39.forwardRef(
@@ -14608,6 +15929,7 @@ var SidebarBrandSwitcher = React39.forwardRef(
14608
15929
  "div",
14609
15930
  {
14610
15931
  ref,
15932
+ ...slot(sidebarBrandSwitcherAnatomy, "root"),
14611
15933
  className: cn("flex min-w-0 items-center gap-2 px-2.5 pt-1 pb-4", className),
14612
15934
  children: [
14613
15935
  /* @__PURE__ */ jsxs(DropdownMenu, { open, onOpenChange: setOpen, children: [
@@ -14615,6 +15937,7 @@ var SidebarBrandSwitcher = React39.forwardRef(
14615
15937
  DropdownMenuTrigger,
14616
15938
  {
14617
15939
  "aria-label": triggerLabel,
15940
+ ...slot(sidebarBrandSwitcherAnatomy, "trigger"),
14618
15941
  className: cn(
14619
15942
  // Negative left margin pulls the trigger's hover-bg toward
14620
15943
  // the column edge while the inner padding holds the brand
@@ -14632,6 +15955,7 @@ var SidebarBrandSwitcher = React39.forwardRef(
14632
15955
  /* @__PURE__ */ jsx(
14633
15956
  ChevronDownIcon,
14634
15957
  {
15958
+ ...slot(sidebarBrandSwitcherAnatomy, "icon"),
14635
15959
  className: cn(
14636
15960
  "ml-auto size-3.5 shrink-0 text-fg-4",
14637
15961
  "transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
@@ -15186,6 +16510,7 @@ var DataTable = forwardRef(function DataTable2({ withToolbar, className, childre
15186
16510
  {
15187
16511
  ref,
15188
16512
  "data-with-toolbar": withToolbar ? "true" : void 0,
16513
+ ...slot(dataTableAnatomy, "root"),
15189
16514
  className: cn(
15190
16515
  // Outer frame on the whole component: a single visible border +
15191
16516
  // quiet shadow wrapping the toolbar (if any) and the table as one
@@ -15207,6 +16532,7 @@ var DataTableToolbar = forwardRef(
15207
16532
  "div",
15208
16533
  {
15209
16534
  ref,
16535
+ ...slot(dataTableAnatomy, "toolbar"),
15210
16536
  className: cn(
15211
16537
  "flex items-center gap-2 px-3 py-2.5",
15212
16538
  "border-rule bg-surface border-b",
@@ -15237,7 +16563,16 @@ var DataTableSearch = forwardRef(
15237
16563
  DataTableSearch.displayName = "DataTableSearch";
15238
16564
  var DataTableSpacer = forwardRef(
15239
16565
  function DataTableSpacer2({ className, ...props }, ref) {
15240
- return /* @__PURE__ */ jsx("span", { ref, "aria-hidden": "true", className: cn("flex-1", className), ...props });
16566
+ return /* @__PURE__ */ jsx(
16567
+ "span",
16568
+ {
16569
+ ref,
16570
+ "aria-hidden": "true",
16571
+ ...slot(dataTableAnatomy, "spacer"),
16572
+ className: cn("flex-1", className),
16573
+ ...props
16574
+ }
16575
+ );
15241
16576
  }
15242
16577
  );
15243
16578
  DataTableSpacer.displayName = "DataTableSpacer";
@@ -15247,6 +16582,7 @@ var DataTableResultsCount = forwardRef(
15247
16582
  "span",
15248
16583
  {
15249
16584
  ref,
16585
+ ...slot(dataTableAnatomy, "results-count"),
15250
16586
  className: cn(
15251
16587
  "text-fg-4 mr-1 shrink-0 font-sans text-[11px] whitespace-nowrap tabular-nums",
15252
16588
  className
@@ -15264,13 +16600,29 @@ var DataTableResultsCount = forwardRef(
15264
16600
  DataTableResultsCount.displayName = "DataTableResultsCount";
15265
16601
  var DataTableHead = forwardRef(
15266
16602
  function DataTableHead2({ className, ...props }, ref) {
15267
- return /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-rule [&_tr]:border-b", className), ...props });
16603
+ return /* @__PURE__ */ jsx(
16604
+ "thead",
16605
+ {
16606
+ ref,
16607
+ ...slot(dataTableAnatomy, "header"),
16608
+ className: cn("[&_tr]:border-rule [&_tr]:border-b", className),
16609
+ ...props
16610
+ }
16611
+ );
15268
16612
  }
15269
16613
  );
15270
16614
  DataTableHead.displayName = "DataTableHead";
15271
16615
  var DataTableBody = forwardRef(
15272
16616
  function DataTableBody2({ className, ...props }, ref) {
15273
- return /* @__PURE__ */ jsx("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props });
16617
+ return /* @__PURE__ */ jsx(
16618
+ "tbody",
16619
+ {
16620
+ ref,
16621
+ ...slot(dataTableAnatomy, "body"),
16622
+ className: cn("[&_tr:last-child]:border-0", className),
16623
+ ...props
16624
+ }
16625
+ );
15274
16626
  }
15275
16627
  );
15276
16628
  DataTableBody.displayName = "DataTableBody";
@@ -15281,6 +16633,7 @@ var DataTableRow = forwardRef(
15281
16633
  {
15282
16634
  ref,
15283
16635
  "data-state": selected ? "selected" : void 0,
16636
+ ...slot(dataTableAnatomy, "row"),
15284
16637
  className: cn(
15285
16638
  "border-rule-soft border-b",
15286
16639
  microInteractions.selection,
@@ -15321,6 +16674,7 @@ var DataTableHeader = forwardRef(
15321
16674
  "span",
15322
16675
  {
15323
16676
  "aria-hidden": "true",
16677
+ ...slot(dataTableAnatomy, "head-indicator"),
15324
16678
  className: cn(
15325
16679
  "text-fg-5 ml-1 inline-flex shrink-0 items-center justify-center",
15326
16680
  currentSort && "text-fg-3"
@@ -15335,6 +16689,8 @@ var DataTableHeader = forwardRef(
15335
16689
  ref,
15336
16690
  scope: "col",
15337
16691
  "aria-sort": ariaSort,
16692
+ ...slot(dataTableAnatomy, "head"),
16693
+ ...stateAttributes({ state: currentSort ?? void 0 }),
15338
16694
  className: cn(
15339
16695
  "h-11 px-4 py-2.5 text-left align-middle whitespace-nowrap",
15340
16696
  "font-sans text-[14px] font-medium tracking-normal normal-case",
@@ -15349,6 +16705,7 @@ var DataTableHeader = forwardRef(
15349
16705
  {
15350
16706
  type: "button",
15351
16707
  onClick: handleClick,
16708
+ ...slot(dataTableAnatomy, "head-button"),
15352
16709
  className: cn(
15353
16710
  "-mx-1 -my-1 inline-flex items-center gap-1 rounded-[4px] px-1 py-1",
15354
16711
  "font-sans text-[14px] font-medium tracking-normal normal-case",
@@ -15374,6 +16731,7 @@ var DataTableCell = forwardRef(
15374
16731
  "td",
15375
16732
  {
15376
16733
  ref,
16734
+ ...slot(dataTableAnatomy, "cell"),
15377
16735
  className: cn(
15378
16736
  cellBase,
15379
16737
  "text-fg-2 text-[13px]",
@@ -15392,6 +16750,8 @@ var DataTableCellName = forwardRef(
15392
16750
  "td",
15393
16751
  {
15394
16752
  ref,
16753
+ ...slot(dataTableAnatomy, "cell"),
16754
+ ...stateAttributes({ variant: "name" }),
15395
16755
  className: cn(cellBase, "font-display text-fg text-[13px] font-medium", className),
15396
16756
  ...props
15397
16757
  }
@@ -15405,6 +16765,8 @@ var DataTableCellMono = forwardRef(
15405
16765
  "td",
15406
16766
  {
15407
16767
  ref,
16768
+ ...slot(dataTableAnatomy, "cell"),
16769
+ ...stateAttributes({ variant: "mono" }),
15408
16770
  className: cn(cellBase, "font-sans text-fg-2 text-[13px] tabular-nums", className),
15409
16771
  style,
15410
16772
  ...props
@@ -15419,6 +16781,8 @@ var DataTableCellId = forwardRef(
15419
16781
  "td",
15420
16782
  {
15421
16783
  ref,
16784
+ ...slot(dataTableAnatomy, "cell"),
16785
+ ...stateAttributes({ variant: "id" }),
15422
16786
  className: cn(cellBase, "font-sans text-fg-4 text-xs tabular-nums", className),
15423
16787
  style,
15424
16788
  ...props
@@ -15444,6 +16808,8 @@ var DataTableCellDue = forwardRef(
15444
16808
  {
15445
16809
  ref,
15446
16810
  "data-due-state": ariaState,
16811
+ ...slot(dataTableAnatomy, "cell"),
16812
+ ...stateAttributes({ variant: "due" }),
15447
16813
  className: cn(cellBase, "font-sans text-[13px] tabular-nums", tone, className),
15448
16814
  style,
15449
16815
  ...props,
@@ -15469,6 +16835,7 @@ var DataTableCheckbox = forwardRef(
15469
16835
  Cell,
15470
16836
  {
15471
16837
  ref,
16838
+ ...slot(dataTableAnatomy, "checkbox-cell"),
15472
16839
  className: cn(
15473
16840
  "w-8 px-4 py-3 pr-0 align-middle",
15474
16841
  asHeader && "bg-surface-2 border-rule h-11 border-b",
@@ -18012,20 +19379,8 @@ var Eyebrow = forwardRef(function Eyebrow2({ numeric, className, children, ...pr
18012
19379
  return /* @__PURE__ */ jsx("div", { ref, className: cn(numeric ? "eyebrow-num" : "eyebrow", className), ...props, children });
18013
19380
  });
18014
19381
  Eyebrow.displayName = "Eyebrow";
18015
- var KbdHint = forwardRef(function KbdHint2({ className, children, ...props }, ref) {
18016
- return /* @__PURE__ */ jsx(
18017
- "kbd",
18018
- {
18019
- ref,
18020
- className: cn(
18021
- "rounded-icon inline-flex h-5 min-w-5 items-center justify-center px-1.5",
18022
- "border-rule bg-bg-2 text-fg-3 border font-mono text-[10.5px]",
18023
- className
18024
- ),
18025
- ...props,
18026
- children
18027
- }
18028
- );
19382
+ var KbdHint = forwardRef(function KbdHint2(props, ref) {
19383
+ return /* @__PURE__ */ jsx(Kbd, { ref, variant: "flat", ...props });
18029
19384
  });
18030
19385
  KbdHint.displayName = "KbdHint";
18031
19386
  function SuggestionPills({
@@ -18899,6 +20254,6 @@ var BrandScope = forwardRef(function BrandScope2({ product, children, ...props }
18899
20254
  });
18900
20255
  BrandScope.displayName = "BrandScope";
18901
20256
 
18902
- export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, AgreementPaneHeading, AgreementViewer, AiDraftCard, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AlertTriangleSolidIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, AreaChart, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, Assignee, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, AttachmentChip, AttentionItem, Avatar, BRAND_PRODUCTS, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, BottomNav, BrandScope, BrandScopeProvider, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, BulkActionBar, BulkActionBarAction, BulkActionBarSeparator, Button, COUNTRY_CODES, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryDivider, CategoryTag, ChannelTabs, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientRailGroupHeader, ClientRailItem, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton, Content16 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CountryFlag, CountrySelect, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, Dash, DashGrid, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DataTableView, DatePicker, DateRangePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DisplayMenu, DocumentChecklist, DocumentDetailActions, DocumentDetailBody, DocumentDetailHeader, DocumentDetailMetaRow, DocumentDetailPanel, DocumentDetailRequester, DocumentDetailTitle, DocumentFileCard, DocumentFileLine, DocumentFileRow, DocumentIcon, DocumentList, DocumentListSection, DocumentRequestCard, DocumentRequestDetail, DocumentRequestField, DocumentRequestUpload, DocumentRow, DocumentSourceFilter, DocumentSourceTag, DocumentsWorkspaceLayout, DollarSignIcon, DonutChart, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmailMessageCard, EmptyState, EngagementCard, EngagementTimeline, EngagementTimelineStep, ExtractIcon, EyeIcon, EyeOffIcon, Eyebrow, FileChip, FileIcon, FileReturnIcon, FileTextIcon, FileTypeBadge, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FolderTree, FolderUpIcon, FormError, FormSection, FormSuccess, GlobeIcon, GoogleBrandIcon, Grid, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, IconTile, InboxIcon, InfoCircleSolidIcon, InfoIcon, Input, IntentBadge, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, KbdHint, KeyIcon, KeyboardShortcutsDialog, KpiCard, Label4 as Label, LandmarkIcon, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LoadingRows, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MasterDetailLayout, MenuIcon, MessageBubble, MessageBubbleAction, MessageBubbleTombstone, MessageCircleIcon, MessageCircleWarningIcon, MessageComposer, MetadataGrid, MicrosoftBrandIcon, MinusIcon, MissingDocumentsPanel, MoneyCell, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoveIcon, MultiFilterPill, MultiSelectField, MutedSpec, NewMenu, NotificationFilter, NotificationItem, NotificationList, NotificationPanel, NotificationPanelFooter, NotificationPanelHeader, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PauseIcon, PdfPreview, PenSignIcon, PenToolIcon, PencilIcon, PhoneCountryInput, PhoneIcon, PhoneInput, PlayIcon, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, ProposalAddOn, ProposalBillingTerms, ProposalConsentGate, ProposalCustomPage, ProposalNote, ProposalPackageCard, ProposalPaymentCapture, ProposalPricingSummary, ProposalServiceRow, ProposalSignatureBlock, ProposalSignerList, QuestionnairePanel, Questions, RadioGroup3 as RadioGroup, RadioGroupItem, RankedBars, ReceiptIcon, ReplyIcon, ResponsiveDialog, RotateCcwIcon, RouteTransition, SERVICE_TONES, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, SegmentedProgress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableKpiCard, SendIcon, Separator4 as Separator, SettingsIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Shell, ShieldIcon, SideDrawer, Sidebar, SidebarBrand, SidebarBrandSwitcher, SidebarBrandSwitcherTile, SidebarBrandText, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarPinButton, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, SignatureEditor, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, Spinner, SpreadsheetPreview, StackedBarChart, StagePill, StarIcon, StarRating, Stat, StatusDot, StatusIcon, StatusPill, Stepper, StickyActionBar, StickyStack, StickyStackLayer, StickyStackSectionHeader, StickyStackSticky, StopIcon, StrikethroughIcon, SubmitButton, SuggestionPills, SuiteProgress, SunIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TagsCell, TeamIcon, TeamMemberSelect, Textarea, TimeLogger, TimeLoggerActions, TimeLoggerBillable, TimeLoggerContextRow, TimeLoggerEntry, TimeLoggerEntryList, TimeLoggerField, TimeLoggerFooter, TimeLoggerHeader, TimeLoggerNotes, TimeLoggerTimer, ToastProvider, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Trash2Icon, TrashIcon, TrendingDownIcon, TrendingUpIcon, UnderlineIcon, UploadIcon, UserCircleIcon, UserIcon, UsersIcon, VisuallyHidden, WorkflowIcon, XCircleSolidIcon, XIcon, YEAR_DISPLAY_PLACEHOLDER, ZoomInIcon, ZoomOutIcon, alertVariants, applyMask, applyYearMask, attachmentChipVariants, badgeVariants, brandLabel, brandScope, buttonVariants, cardVariants, cn, colors, dateToIso, displayToIso, fileTypeBadgeVariants, fileTypeFromName, filterChipVariants, formatClock, formatCurrency, formatDuration, getFlagEmoji, iconTileVariants, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, parsePhoneForEditing, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, serviceToneLabel, serviceToneStyle, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, statusDotVariants, suiteProgressFillVariants, surfaces, systemTokens, textareaVariants, typography, useBrandScope, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
20257
+ export { AIReceiptPanel, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityEventItem, ActivityItem, ActivityList, AgreementPaneHeading, AgreementViewer, AiDraftCard, Alert, AlertCircleIcon, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTriangleIcon, AlertTriangleSolidIcon, AppHeader, AppHeaderActions, AppHeaderBreadcrumb, AppHeaderSearch, AppHeaderTitle, AreaChart, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightSmallIcon, ArrowUpIcon, AspectRatio, Assignee, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, AtSignIcon, AttachmentChip, AttentionItem, Avatar, BRAND_PRODUCTS, Badge, BarChartIcon, BellIcon, Blockquote, BoldIcon, BottomNav, BrandScope, BrandScopeProvider, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BriefcaseIcon, Building2Icon, BuildingIcon, BulkActionBar, BulkActionBarAction, BulkActionBarSeparator, Button, COUNTRY_CODES, Calendar, CalendarIcon, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CategoryDivider, CategoryTag, ChannelTabs, ChatBubbleIcon, CheckCircle2Icon, CheckCircleSolidIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, CircleDotIcon, CircleIcon, ClientRailGroupHeader, ClientRailItem, ClientSelect, ClipboardCheckIcon, ClockIcon, CloseIcon, Code, Collapsible, CollapsibleContent, CollapsibleTrigger, ComingSoon, CommandIcon, CommandPalette, ConfirmActionButton, Content16 as Content, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyIcon, CornerDownLeftIcon, CountryFlag, CountrySelect, CreditCardIcon, DATE_DISPLAY_PLACEHOLDER, DangerAction, Dash, DashGrid, DataItem, DataTable, DataTableBody, DataTableCell, DataTableCellDue, DataTableCellId, DataTableCellMono, DataTableCellName, DataTableCheckbox, DataTableHead, DataTableHeader, DataTablePagination, DataTableResultsCount, DataTableRow, DataTableSearch, DataTableSpacer, DataTableToolbar, DataTableView, DatePicker, DateRangePicker, DetailGrid, DetailMain, DetailSpine, DetailSpineHeader, DetailSpineSection, DetailSpineStats, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DismissibleChip, DisplayMenu, DocumentChecklist, DocumentDetailActions, DocumentDetailBody, DocumentDetailHeader, DocumentDetailMetaRow, DocumentDetailPanel, DocumentDetailRequester, DocumentDetailTitle, DocumentFileCard, DocumentFileLine, DocumentFileRow, DocumentIcon, DocumentList, DocumentListSection, DocumentRequestCard, DocumentRequestDetail, DocumentRequestField, DocumentRequestUpload, DocumentRow, DocumentSourceFilter, DocumentSourceTag, DocumentsWorkspaceLayout, DollarSignIcon, DonutChart, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmailMessageCard, EmptyState, EngagementCard, EngagementTimeline, EngagementTimelineStep, ExtractIcon, EyeIcon, EyeOffIcon, Eyebrow, FileChip, FileIcon, FileReturnIcon, FileTextIcon, FileTypeBadge, FileUpload, FilterChip, FilterIcon, FlagIcon, FolderClosedIcon, FolderOpenIcon, FolderPlusIcon, FolderTree, FolderUpIcon, FormError, FormSection, FormSuccess, GlobeIcon, GoogleBrandIcon, Grid, Heading, HelpCircleIcon, HistoryIcon, HomeIcon, HoverCard, HoverCardContent, HoverCardPortal, HoverCardTrigger, IconAction, IconTile, InboxIcon, InfoCircleSolidIcon, InfoIcon, Inline, Input, IntentBadge, ItalicIcon, Kanban, KanbanCard, KanbanColumn, KanbanIcon, Kbd, KbdHint, KeyIcon, KeyboardShortcutsDialog, KpiCard, Label4 as Label, LandmarkIcon, LayoutDashboardIcon, LayoutGridIcon, LayoutListIcon, LightningIcon, Link2Icon, LinkAction, LinkButton, LinkIcon, ListChecksIcon, ListIcon, ListOrderedIcon, LoaderIcon, LoadingRows, LockIcon, LockKeyholeIcon, LockOpenIcon, LogOutIcon, Logo, MailIcon, Main, MapPinIcon, MasterDetailLayout, MenuIcon, MessageBubble, MessageBubbleAction, MessageBubbleTombstone, MessageCircleIcon, MessageCircleWarningIcon, MessageComposer, MetadataGrid, MicrosoftBrandIcon, MinusIcon, MissingDocumentsPanel, MoneyCell, MonitorIcon, MoonIcon, MoreHorizontalIcon, MoveIcon, MultiFilterPill, MultiSelectField, MutedSpec, NewMenu, NotificationFilter, NotificationItem, NotificationList, NotificationPanel, NotificationPanelFooter, NotificationPanelHeader, Numeric, OTPInput, PageHeader, PageHeaderSep, PageHeaderSpec, Pagination, PaletteIcon, PanelLeftCloseIcon, PanelLeftIcon, PaperclipIcon, PauseIcon, PdfPreview, PenSignIcon, PenToolIcon, PencilIcon, PhoneCountryInput, PhoneIcon, PhoneInput, PlayIcon, PlusIcon, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, PrimaryAction, PriorityIcon, ProgressBar, ProgressRing, ProposalAddOn, ProposalBillingTerms, ProposalConsentGate, ProposalCustomPage, ProposalNote, ProposalPackageCard, ProposalPaymentCapture, ProposalPricingSummary, ProposalServiceRow, ProposalSignatureBlock, ProposalSignerList, QuestionnairePanel, Questions, RadioGroup3 as RadioGroup, RadioGroupItem, RankedBars, ReceiptIcon, ReplyIcon, ResponsiveDialog, RotateCcwIcon, RouteTransition, SERVICE_TONES, SaveIcon, ScrollArea, ScrollBar, SearchIcon, SearchInput, SearchSelect, SecondaryAction, Section, SectionHead, SectionHeader, SegmentedProgress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectableKpiCard, SendIcon, Separator4 as Separator, SettingsIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Shell, ShieldIcon, SideDrawer, Sidebar, SidebarBrand, SidebarBrandSwitcher, SidebarBrandSwitcherTile, SidebarBrandText, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarPinButton, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, SignatureEditor, Skeleton, SkeletonCircle, SkeletonText, SlashIcon, Slider, SmartphoneIcon, SparkleIcon, SparklesIcon, Spinner, SpreadsheetPreview, Stack, StackedBarChart, StagePill, StarIcon, StarRating, Stat, StatusDot, StatusIcon, StatusPill, Stepper, StickyActionBar, StickyStack, StickyStackLayer, StickyStackSectionHeader, StickyStackSticky, StopIcon, StrikethroughIcon, SubmitButton, SuggestionPills, SuiteProgress, SunIcon, Surface, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableIcon, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagIcon, TagsCell, TeamIcon, TeamMemberSelect, Text, Textarea, TimeLogger, TimeLoggerActions, TimeLoggerBillable, TimeLoggerContextRow, TimeLoggerEntry, TimeLoggerEntryList, TimeLoggerField, TimeLoggerFooter, TimeLoggerHeader, TimeLoggerNotes, TimeLoggerTimer, ToastProvider, ToggleGroup, ToggleGroupItem, Toolbar, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Trash2Icon, TrashIcon, TrendingDownIcon, TrendingUpIcon, UnderlineIcon, UploadIcon, UserCircleIcon, UserIcon, UsersIcon, VisuallyHidden, WorkflowIcon, XCircleSolidIcon, XIcon, YEAR_DISPLAY_PLACEHOLDER, ZoomInIcon, ZoomOutIcon, alertVariants, applyMask, applyYearMask, assetPath, attachmentChipVariants, badgeVariants, brandLabel, brandScope, buttonVariants, cardVariants, cn, colors, dateToIso, displayToIso, fileTypeBadgeVariants, fileTypeFromName, filterChipVariants, formatClock, formatCurrency, formatDuration, getAssetBasePath, getFlagEmoji, iconTileVariants, inputVariants, isoToDate, isoToDisplay, isoToYear, labelVariants, parseDuration, parsePhoneForEditing, progressBarVariants, progressRingVariants, radii, reference, searchInputVariants, serviceToneLabel, serviceToneStyle, setAssetBasePath, shadows, sidebarLinkBadgeVariants, spacing, spinnerVariants, starRatingVariants, statusDotVariants, suiteProgressFillVariants, surfaces, systemTokens, textareaVariants, typography, useBrandScope, useSidebarPeekLock, useSidebarState, useStopwatch, useToast, yearToIso };
18903
20258
  //# sourceMappingURL=index.js.map
18904
20259
  //# sourceMappingURL=index.js.map