@assure-one/design-system 1.30.0 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -1
- package/codemods/0.2.0-radix-migration.mjs +315 -0
- package/codemods/README.md +305 -0
- package/codemods/lib/css-selectors.mjs +33 -0
- package/codemods/lib/css-values.mjs +223 -0
- package/codemods/lib/ds-stylesheet.mjs +168 -0
- package/codemods/lib/environment.mjs +72 -0
- package/codemods/lib/files.mjs +100 -0
- package/codemods/lib/jsx.mjs +0 -0
- package/codemods/lib/ledger.mjs +84 -0
- package/codemods/lib/registry.mjs +30 -0
- package/codemods/lib/report.mjs +119 -0
- package/codemods/lib/runner.mjs +164 -0
- package/codemods/run.mjs +161 -0
- package/codemods/transforms/cm-15-dom-selectors.mjs +573 -0
- package/codemods/transforms/cm-16-globals-css.mjs +487 -0
- package/dist/css/base.css +60 -0
- package/dist/css/legacy-aliases.css +489 -0
- package/dist/css/shadcn.css +155 -0
- package/dist/css/tailwind.css +233 -0
- package/dist/css/tokens.css +439 -0
- package/dist/index.d.ts +327 -33
- package/dist/index.js +1843 -706
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/testing/index.cjs +458 -0
- package/dist/testing/index.d.cts +253 -0
- package/dist/testing/index.d.ts +253 -0
- package/dist/testing/index.js +452 -0
- package/dist/testing/setup.cjs +123 -0
- package/dist/testing/setup.js +121 -0
- package/dist/testing/style-stub.cjs +7 -0
- package/dist/testing/style-stub.js +5 -0
- package/dist/tokens/index.d.ts +114 -96
- package/dist/tokens/index.js +67 -48
- package/dist/tokens/index.js.map +1 -1
- package/package.json +84 -14
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as React39 from 'react';
|
|
|
3
3
|
import { forwardRef, useId, useRef, useState, useEffect, useCallback, useImperativeHandle, useMemo, createContext, Fragment as Fragment$1, useContext } from 'react';
|
|
4
4
|
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
5
5
|
import { clsx } from 'clsx';
|
|
6
|
-
import {
|
|
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
|
|
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: "#
|
|
46
|
-
bg2: "#
|
|
47
|
-
bg3: "#
|
|
48
|
-
surface: "#
|
|
49
|
-
surface2: "#
|
|
45
|
+
bg: "#ffffff",
|
|
46
|
+
bg2: "#f1f3f8",
|
|
47
|
+
bg3: "#e7eaf1",
|
|
48
|
+
surface: "#ffffff",
|
|
49
|
+
surface2: "#f7f8fc",
|
|
50
50
|
/* Foreground */
|
|
51
|
-
fg: "#
|
|
52
|
-
fg2: "#
|
|
53
|
-
fg3: "#
|
|
54
|
-
fg4: "#
|
|
55
|
-
fg5: "#
|
|
51
|
+
fg: "#0a0a0a",
|
|
52
|
+
fg2: "#38383b",
|
|
53
|
+
fg3: "#5f5f64",
|
|
54
|
+
fg4: "#6b6b70",
|
|
55
|
+
fg5: "#9a9aa0",
|
|
56
56
|
/* Rules */
|
|
57
|
-
rule: "#
|
|
58
|
-
ruleSoft: "#
|
|
59
|
-
ruleStrong: "#
|
|
57
|
+
rule: "#e4e7ef",
|
|
58
|
+
ruleSoft: "#eef0f5",
|
|
59
|
+
ruleStrong: "#d3d8e3",
|
|
60
60
|
/* Accent (cyan) */
|
|
61
|
-
accent: "#
|
|
62
|
-
accent2: "#
|
|
63
|
-
accentTint: "#
|
|
64
|
-
accentHover: "#
|
|
65
|
-
accentActive: "#
|
|
61
|
+
accent: "#6c42f8",
|
|
62
|
+
accent2: "#5127e8",
|
|
63
|
+
accentTint: "#efeaff",
|
|
64
|
+
accentHover: "#5e35f2",
|
|
65
|
+
accentActive: "#5127e8",
|
|
66
66
|
/* Pro (purple) */
|
|
67
|
-
proBg: "#
|
|
68
|
-
proBgHover: "#
|
|
69
|
-
proBgActive: "#
|
|
70
|
-
proFg: "#
|
|
71
|
-
proHover: "#
|
|
72
|
-
proActive: "#
|
|
73
|
-
proDisabled: "#
|
|
74
|
-
proLine: "#
|
|
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: "#
|
|
77
|
-
bgDisabled: "#
|
|
76
|
+
fgDisabled: "#a7a7ac",
|
|
77
|
+
bgDisabled: "#f3f3f1",
|
|
78
78
|
/* Status */
|
|
79
|
-
successFg: "#
|
|
80
|
-
successBg: "#
|
|
81
|
-
successLine: "#
|
|
82
|
-
warningFg: "#
|
|
83
|
-
warningBg: "#
|
|
84
|
-
warningLine: "#
|
|
85
|
-
dangerFg: "#
|
|
86
|
-
dangerBg: "#
|
|
87
|
-
dangerLine: "#
|
|
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: "#
|
|
90
|
-
fgOnPro: "#
|
|
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(
|
|
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(108, 66, 248, 0.18)"
|
|
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: "
|
|
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: "#
|
|
148
|
-
bg2: "#
|
|
149
|
-
surface: "#
|
|
150
|
-
surface2: "#
|
|
147
|
+
bg: "#ffffff",
|
|
148
|
+
bg2: "#f1f3f8",
|
|
149
|
+
surface: "#ffffff",
|
|
150
|
+
surface2: "#f7f8fc"
|
|
151
151
|
};
|
|
152
152
|
var motion = {
|
|
153
153
|
ease: {
|
|
@@ -201,6 +201,11 @@ var systemTokens = {
|
|
|
201
201
|
accentHover: "var(--color-accent-hover)",
|
|
202
202
|
accentActive: "var(--color-accent-active)",
|
|
203
203
|
accentRing: "var(--color-accent-ring)",
|
|
204
|
+
/* Stable cross-product CTA; deliberately independent of [data-brand]. */
|
|
205
|
+
suiteAction: "var(--color-suite-action)",
|
|
206
|
+
suiteActionHover: "var(--color-suite-action-hover)",
|
|
207
|
+
suiteActionActive: "var(--color-suite-action-active)",
|
|
208
|
+
fgOnSuiteAction: "var(--color-fg-on-suite-action)",
|
|
204
209
|
/* Brand — ambient product family; follows the active [data-brand] scope,
|
|
205
210
|
defaulting to Pro. Prefer these (and the generated bg-brand / text-brand
|
|
206
211
|
/ border-brand-line / text-fg-on-brand utilities) for scope-aware chrome
|
|
@@ -349,6 +354,20 @@ var systemTokens = {
|
|
|
349
354
|
fast: "var(--duration-fast)",
|
|
350
355
|
normal: "var(--duration-normal)",
|
|
351
356
|
slow: "var(--duration-slow)"
|
|
357
|
+
},
|
|
358
|
+
semantic: {
|
|
359
|
+
duration: {
|
|
360
|
+
press: "var(--motion-duration-press)",
|
|
361
|
+
feedback: "var(--motion-duration-feedback)",
|
|
362
|
+
overlay: "var(--motion-duration-overlay)",
|
|
363
|
+
spatial: "var(--motion-duration-spatial)",
|
|
364
|
+
deliberate: "var(--motion-duration-deliberate)"
|
|
365
|
+
},
|
|
366
|
+
ease: {
|
|
367
|
+
enter: "var(--motion-ease-enter)",
|
|
368
|
+
exit: "var(--motion-ease-exit)",
|
|
369
|
+
move: "var(--motion-ease-move)"
|
|
370
|
+
}
|
|
352
371
|
}
|
|
353
372
|
},
|
|
354
373
|
layout: {
|
|
@@ -367,6 +386,29 @@ var systemTokens = {
|
|
|
367
386
|
tooltip: "var(--z-tooltip)"
|
|
368
387
|
}
|
|
369
388
|
};
|
|
389
|
+
var split = (values) => values.split(" ");
|
|
390
|
+
var DS_RADIUS = split("badges btn buttons card cards general icon input inputs pill");
|
|
391
|
+
var DS_SHADOW = split("card focus focus-ring pop quiet subtle");
|
|
392
|
+
var DS_EASE = split("out-quart");
|
|
393
|
+
var DS_FONT = split("body display");
|
|
394
|
+
var DS_ANIMATE = split("accordion-down accordion-up collapsible-down collapsible-up pulse-soft");
|
|
395
|
+
var isDsShadowVar = (value) => /^\[var\(--shadow-[a-z0-9-]*\)\]$/.test(value);
|
|
396
|
+
var dsMergeConfig = {
|
|
397
|
+
extend: {
|
|
398
|
+
theme: {
|
|
399
|
+
radius: DS_RADIUS,
|
|
400
|
+
shadow: DS_SHADOW,
|
|
401
|
+
ease: DS_EASE,
|
|
402
|
+
font: DS_FONT,
|
|
403
|
+
animate: DS_ANIMATE
|
|
404
|
+
},
|
|
405
|
+
classGroups: {
|
|
406
|
+
shadow: [{ shadow: [isDsShadowVar] }]
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
var extendMerge = extendTailwindMerge;
|
|
411
|
+
var twMerge = extendMerge(dsMergeConfig);
|
|
370
412
|
function cn(...inputs) {
|
|
371
413
|
return twMerge(clsx(inputs));
|
|
372
414
|
}
|
|
@@ -2435,6 +2477,254 @@ var AccordionContent = React39.forwardRef(function AccordionContent2({ children,
|
|
|
2435
2477
|
);
|
|
2436
2478
|
});
|
|
2437
2479
|
AccordionContent.displayName = AccordionPrimitive.Content.displayName;
|
|
2480
|
+
|
|
2481
|
+
// src/foundation/anatomy/define.ts
|
|
2482
|
+
var ROOT_PART = "root";
|
|
2483
|
+
var NAME_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
2484
|
+
var registry = /* @__PURE__ */ new Map();
|
|
2485
|
+
function assertName(value, what) {
|
|
2486
|
+
if (!NAME_PATTERN.test(value)) {
|
|
2487
|
+
throw new TypeError(
|
|
2488
|
+
`anatomy: ${what} must be lower-case kebab-case, received ${JSON.stringify(value)}`
|
|
2489
|
+
);
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2492
|
+
function defineAnatomy(name, parts) {
|
|
2493
|
+
assertName(name, "component name");
|
|
2494
|
+
if (parts.length === 0) {
|
|
2495
|
+
throw new TypeError(`anatomy: ${name} must declare at least one part`);
|
|
2496
|
+
}
|
|
2497
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2498
|
+
for (const part of parts) {
|
|
2499
|
+
assertName(part, `part name of ${name}`);
|
|
2500
|
+
if (seen.has(part)) {
|
|
2501
|
+
throw new TypeError(`anatomy: ${name} declares the part ${JSON.stringify(part)} twice`);
|
|
2502
|
+
}
|
|
2503
|
+
seen.add(part);
|
|
2504
|
+
}
|
|
2505
|
+
if (registry.has(name)) {
|
|
2506
|
+
throw new TypeError(`anatomy: ${name} is already registered`);
|
|
2507
|
+
}
|
|
2508
|
+
const attr = (part) => part === ROOT_PART ? name : `${name}-${String(part)}`;
|
|
2509
|
+
const anatomy = {
|
|
2510
|
+
name,
|
|
2511
|
+
parts: [...parts],
|
|
2512
|
+
attrs: parts.map((part) => attr(part)),
|
|
2513
|
+
attr,
|
|
2514
|
+
has: (part) => seen.has(part)
|
|
2515
|
+
};
|
|
2516
|
+
registry.set(name, anatomy);
|
|
2517
|
+
return anatomy;
|
|
2518
|
+
}
|
|
2519
|
+
|
|
2520
|
+
// src/foundation/anatomy/slots.ts
|
|
2521
|
+
defineAnatomy("agreement-viewer", ["root"]);
|
|
2522
|
+
defineAnatomy("message-composer", [
|
|
2523
|
+
"root",
|
|
2524
|
+
"header",
|
|
2525
|
+
"chips",
|
|
2526
|
+
"editor",
|
|
2527
|
+
"below-editor",
|
|
2528
|
+
"footer"
|
|
2529
|
+
]);
|
|
2530
|
+
var buttonAnatomy = defineAnatomy("button", ["root", "icon-start", "icon-end", "spinner"]);
|
|
2531
|
+
var linkButtonAnatomy = defineAnatomy("link-button", ["root", "icon-start", "icon-end"]);
|
|
2532
|
+
var badgeAnatomy = defineAnatomy("badge", ["root", "dot", "icon"]);
|
|
2533
|
+
var inputAnatomy = defineAnatomy("input", [
|
|
2534
|
+
"root",
|
|
2535
|
+
"label",
|
|
2536
|
+
"icon-start",
|
|
2537
|
+
"icon-end",
|
|
2538
|
+
"password-toggle",
|
|
2539
|
+
"error"
|
|
2540
|
+
]);
|
|
2541
|
+
var textareaAnatomy = defineAnatomy("textarea", ["root", "label", "error", "count"]);
|
|
2542
|
+
var searchInputAnatomy = defineAnatomy("search-input", [
|
|
2543
|
+
"root",
|
|
2544
|
+
"control",
|
|
2545
|
+
"icon",
|
|
2546
|
+
"clear"
|
|
2547
|
+
]);
|
|
2548
|
+
var selectAnatomy = defineAnatomy("select", [
|
|
2549
|
+
"trigger",
|
|
2550
|
+
"icon",
|
|
2551
|
+
"content",
|
|
2552
|
+
"viewport",
|
|
2553
|
+
"item",
|
|
2554
|
+
"item-indicator",
|
|
2555
|
+
"label",
|
|
2556
|
+
"separator",
|
|
2557
|
+
"scroll-up-button",
|
|
2558
|
+
"scroll-down-button"
|
|
2559
|
+
]);
|
|
2560
|
+
var checkboxAnatomy = defineAnatomy("checkbox", ["root", "indicator", "label"]);
|
|
2561
|
+
var radioGroupAnatomy = defineAnatomy("radio-group", [
|
|
2562
|
+
"root",
|
|
2563
|
+
"item",
|
|
2564
|
+
"indicator",
|
|
2565
|
+
"label"
|
|
2566
|
+
]);
|
|
2567
|
+
var switchAnatomy = defineAnatomy("switch", ["root", "thumb", "label"]);
|
|
2568
|
+
var labelAnatomy = defineAnatomy("label", ["root", "required"]);
|
|
2569
|
+
var fileUploadAnatomy = defineAnatomy("file-upload", [
|
|
2570
|
+
"root",
|
|
2571
|
+
"dropzone",
|
|
2572
|
+
"input",
|
|
2573
|
+
"error"
|
|
2574
|
+
]);
|
|
2575
|
+
var dialogAnatomy = defineAnatomy("dialog", [
|
|
2576
|
+
"overlay",
|
|
2577
|
+
"content",
|
|
2578
|
+
"header",
|
|
2579
|
+
"title",
|
|
2580
|
+
"description",
|
|
2581
|
+
"footer",
|
|
2582
|
+
"close"
|
|
2583
|
+
]);
|
|
2584
|
+
var alertDialogAnatomy = defineAnatomy("alert-dialog", [
|
|
2585
|
+
"overlay",
|
|
2586
|
+
"content",
|
|
2587
|
+
"header",
|
|
2588
|
+
"title",
|
|
2589
|
+
"description",
|
|
2590
|
+
"footer",
|
|
2591
|
+
"action",
|
|
2592
|
+
"cancel"
|
|
2593
|
+
]);
|
|
2594
|
+
var sheetAnatomy = defineAnatomy("sheet", [
|
|
2595
|
+
"overlay",
|
|
2596
|
+
"content",
|
|
2597
|
+
"header",
|
|
2598
|
+
"title",
|
|
2599
|
+
"description",
|
|
2600
|
+
"footer",
|
|
2601
|
+
"close"
|
|
2602
|
+
]);
|
|
2603
|
+
var sideDrawerAnatomy = defineAnatomy("side-drawer", [
|
|
2604
|
+
"overlay",
|
|
2605
|
+
"root",
|
|
2606
|
+
"header",
|
|
2607
|
+
"heading",
|
|
2608
|
+
"subtitle",
|
|
2609
|
+
"close",
|
|
2610
|
+
"body",
|
|
2611
|
+
"footer"
|
|
2612
|
+
]);
|
|
2613
|
+
var popoverAnatomy = defineAnatomy("popover", ["content"]);
|
|
2614
|
+
var dropdownMenuAnatomy = defineAnatomy("dropdown-menu", [
|
|
2615
|
+
"content",
|
|
2616
|
+
"item",
|
|
2617
|
+
"checkbox-item",
|
|
2618
|
+
"radio-item",
|
|
2619
|
+
"item-indicator",
|
|
2620
|
+
"label",
|
|
2621
|
+
"separator",
|
|
2622
|
+
"shortcut",
|
|
2623
|
+
"sub-trigger",
|
|
2624
|
+
"sub-content"
|
|
2625
|
+
]);
|
|
2626
|
+
var contextMenuAnatomy = defineAnatomy("context-menu", [
|
|
2627
|
+
"content",
|
|
2628
|
+
"item",
|
|
2629
|
+
"checkbox-item",
|
|
2630
|
+
"radio-item",
|
|
2631
|
+
"item-indicator",
|
|
2632
|
+
"label",
|
|
2633
|
+
"separator",
|
|
2634
|
+
"shortcut",
|
|
2635
|
+
"sub-trigger",
|
|
2636
|
+
"sub-content"
|
|
2637
|
+
]);
|
|
2638
|
+
var tooltipAnatomy = defineAnatomy("tooltip", ["content"]);
|
|
2639
|
+
var toastAnatomy = defineAnatomy("toast", [
|
|
2640
|
+
"region",
|
|
2641
|
+
"root",
|
|
2642
|
+
"icon",
|
|
2643
|
+
"title",
|
|
2644
|
+
"description",
|
|
2645
|
+
"action",
|
|
2646
|
+
"close"
|
|
2647
|
+
]);
|
|
2648
|
+
var tableAnatomy = defineAnatomy("table", [
|
|
2649
|
+
"root",
|
|
2650
|
+
"wrapper",
|
|
2651
|
+
"header",
|
|
2652
|
+
"body",
|
|
2653
|
+
"footer",
|
|
2654
|
+
"row",
|
|
2655
|
+
"head",
|
|
2656
|
+
"cell",
|
|
2657
|
+
"caption"
|
|
2658
|
+
]);
|
|
2659
|
+
var dataTableAnatomy = defineAnatomy("data-table", [
|
|
2660
|
+
"root",
|
|
2661
|
+
"toolbar",
|
|
2662
|
+
"spacer",
|
|
2663
|
+
"results-count",
|
|
2664
|
+
"header",
|
|
2665
|
+
"body",
|
|
2666
|
+
"row",
|
|
2667
|
+
"head",
|
|
2668
|
+
"head-button",
|
|
2669
|
+
"head-indicator",
|
|
2670
|
+
"cell",
|
|
2671
|
+
"checkbox-cell"
|
|
2672
|
+
]);
|
|
2673
|
+
var paginationAnatomy = defineAnatomy("pagination", [
|
|
2674
|
+
"root",
|
|
2675
|
+
"label",
|
|
2676
|
+
"pages",
|
|
2677
|
+
"previous",
|
|
2678
|
+
"next",
|
|
2679
|
+
"page",
|
|
2680
|
+
"ellipsis"
|
|
2681
|
+
]);
|
|
2682
|
+
var shellAnatomy = defineAnatomy("shell", ["root", "main", "content"]);
|
|
2683
|
+
var sidebarAnatomy = defineAnatomy("sidebar", [
|
|
2684
|
+
"root",
|
|
2685
|
+
"trigger",
|
|
2686
|
+
"pin",
|
|
2687
|
+
"brand",
|
|
2688
|
+
"brand-text",
|
|
2689
|
+
"section",
|
|
2690
|
+
"section-header",
|
|
2691
|
+
"section-label",
|
|
2692
|
+
"link",
|
|
2693
|
+
"link-label",
|
|
2694
|
+
"link-action",
|
|
2695
|
+
"link-badge",
|
|
2696
|
+
"group",
|
|
2697
|
+
"group-link",
|
|
2698
|
+
"group-trigger",
|
|
2699
|
+
"group-content",
|
|
2700
|
+
"footer",
|
|
2701
|
+
"user",
|
|
2702
|
+
"user-name",
|
|
2703
|
+
"user-subtitle"
|
|
2704
|
+
]);
|
|
2705
|
+
var sidebarBrandSwitcherAnatomy = defineAnatomy("sidebar-brand-switcher", [
|
|
2706
|
+
"root",
|
|
2707
|
+
"trigger",
|
|
2708
|
+
"icon"
|
|
2709
|
+
]);
|
|
2710
|
+
|
|
2711
|
+
// src/foundation/anatomy/slot.ts
|
|
2712
|
+
function slot(anatomy, part) {
|
|
2713
|
+
return { "data-slot": anatomy.attr(part) };
|
|
2714
|
+
}
|
|
2715
|
+
var BOOLEAN_STATES = ["disabled", "invalid", "loading", "selected"];
|
|
2716
|
+
var VALUE_STATES = ["state", "size", "variant", "intent", "orientation"];
|
|
2717
|
+
function stateAttributes(input) {
|
|
2718
|
+
const attributes = {};
|
|
2719
|
+
for (const key of BOOLEAN_STATES) {
|
|
2720
|
+
if (input[key]) attributes[`data-${key}`] = "";
|
|
2721
|
+
}
|
|
2722
|
+
for (const key of VALUE_STATES) {
|
|
2723
|
+
const value = input[key];
|
|
2724
|
+
if (value !== void 0) attributes[`data-${key}`] = value;
|
|
2725
|
+
}
|
|
2726
|
+
return attributes;
|
|
2727
|
+
}
|
|
2438
2728
|
var AlertDialog = AlertDialogPrimitive.Root;
|
|
2439
2729
|
var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
|
|
2440
2730
|
var AlertDialogPortal = AlertDialogPrimitive.Portal;
|
|
@@ -2442,6 +2732,7 @@ var AlertDialogOverlay = React39.forwardRef(({ className, ...props }, ref) => /*
|
|
|
2442
2732
|
AlertDialogPrimitive.Overlay,
|
|
2443
2733
|
{
|
|
2444
2734
|
ref,
|
|
2735
|
+
...slot(alertDialogAnatomy, "overlay"),
|
|
2445
2736
|
className: cn(
|
|
2446
2737
|
"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
|
|
2447
2738
|
"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
|
|
@@ -2459,6 +2750,7 @@ var AlertDialogContent = React39.forwardRef(({ className, ...props }, ref) => /*
|
|
|
2459
2750
|
AlertDialogPrimitive.Content,
|
|
2460
2751
|
{
|
|
2461
2752
|
ref,
|
|
2753
|
+
...slot(alertDialogAnatomy, "content"),
|
|
2462
2754
|
className: cn(
|
|
2463
2755
|
"fixed top-1/2 left-1/2 z-[var(--z-modal)] w-full max-w-lg",
|
|
2464
2756
|
"scrollbar-thin max-h-[calc(100vh-6rem)] overflow-y-auto",
|
|
@@ -2475,11 +2767,19 @@ var AlertDialogContent = React39.forwardRef(({ className, ...props }, ref) => /*
|
|
|
2475
2767
|
)
|
|
2476
2768
|
] }));
|
|
2477
2769
|
AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
|
|
2478
|
-
var AlertDialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
2770
|
+
var AlertDialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
2771
|
+
"div",
|
|
2772
|
+
{
|
|
2773
|
+
...slot(alertDialogAnatomy, "header"),
|
|
2774
|
+
className: cn("mb-4 flex flex-col gap-1.5", className),
|
|
2775
|
+
...props
|
|
2776
|
+
}
|
|
2777
|
+
);
|
|
2479
2778
|
AlertDialogHeader.displayName = "AlertDialogHeader";
|
|
2480
2779
|
var AlertDialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
2481
2780
|
"div",
|
|
2482
2781
|
{
|
|
2782
|
+
...slot(alertDialogAnatomy, "footer"),
|
|
2483
2783
|
className: cn(
|
|
2484
2784
|
"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end",
|
|
2485
2785
|
className
|
|
@@ -2492,6 +2792,7 @@ var AlertDialogTitle = React39.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
2492
2792
|
AlertDialogPrimitive.Title,
|
|
2493
2793
|
{
|
|
2494
2794
|
ref,
|
|
2795
|
+
...slot(alertDialogAnatomy, "title"),
|
|
2495
2796
|
className: cn(
|
|
2496
2797
|
"font-display text-fg text-base leading-tight font-medium tracking-tight",
|
|
2497
2798
|
className
|
|
@@ -2504,6 +2805,7 @@ var AlertDialogDescription = React39.forwardRef(({ className, ...props }, ref) =
|
|
|
2504
2805
|
AlertDialogPrimitive.Description,
|
|
2505
2806
|
{
|
|
2506
2807
|
ref,
|
|
2808
|
+
...slot(alertDialogAnatomy, "description"),
|
|
2507
2809
|
className: cn("text-fg-3 text-sm", className),
|
|
2508
2810
|
...props
|
|
2509
2811
|
}
|
|
@@ -2513,6 +2815,7 @@ var AlertDialogAction = React39.forwardRef(({ className, ...props }, ref) => /*
|
|
|
2513
2815
|
AlertDialogPrimitive.Action,
|
|
2514
2816
|
{
|
|
2515
2817
|
ref,
|
|
2818
|
+
...slot(alertDialogAnatomy, "action"),
|
|
2516
2819
|
className: cn(
|
|
2517
2820
|
"rounded-btn inline-flex h-10 items-center justify-center px-4 text-sm font-medium whitespace-nowrap",
|
|
2518
2821
|
"bg-destructive text-destructive-foreground transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -2529,6 +2832,7 @@ var AlertDialogCancel = React39.forwardRef(({ className, children, ...props }, r
|
|
|
2529
2832
|
AlertDialogPrimitive.Cancel,
|
|
2530
2833
|
{
|
|
2531
2834
|
ref,
|
|
2835
|
+
...slot(alertDialogAnatomy, "cancel"),
|
|
2532
2836
|
className: cn(
|
|
2533
2837
|
"rounded-btn border-rule-strong bg-surface inline-flex h-10 items-center justify-center border px-4 text-sm font-medium whitespace-nowrap",
|
|
2534
2838
|
"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -2732,6 +3036,14 @@ var AspectRatio = React39.forwardRef(function AspectRatio2({ className, ratio =
|
|
|
2732
3036
|
);
|
|
2733
3037
|
});
|
|
2734
3038
|
AspectRatio.displayName = AspectRatioPrimitive.Root.displayName;
|
|
3039
|
+
|
|
3040
|
+
// src/lib/micro-interactions.ts
|
|
3041
|
+
var microInteractions = {
|
|
3042
|
+
control: "transition-[color,background-color,border-color,box-shadow] duration-[var(--motion-duration-feedback)] ease-[var(--motion-ease-enter)] motion-reduce:transition-none",
|
|
3043
|
+
pressable: "transition-[color,background-color,border-color,box-shadow,transform] duration-[var(--motion-duration-feedback)] ease-[var(--motion-ease-enter)] active:scale-[0.98] motion-reduce:transform-none motion-reduce:transition-none",
|
|
3044
|
+
selection: "transition-[color,background-color,border-color,box-shadow] duration-[var(--motion-duration-press)] ease-[var(--motion-ease-enter)] motion-reduce:transition-none",
|
|
3045
|
+
overlay: "transition-[opacity,transform] duration-[var(--motion-duration-overlay)] ease-[var(--motion-ease-enter)] motion-reduce:transform-none motion-reduce:transition-none",
|
|
3046
|
+
progress: "transition-[width,height,stroke-dashoffset,background-color] duration-[var(--motion-duration-deliberate)] ease-[var(--motion-ease-enter)] motion-reduce:transition-none"};
|
|
2735
3047
|
var spinnerVariants = cva(
|
|
2736
3048
|
"inline-flex shrink-0 items-center justify-center [&_svg]:motion-reduce:animate-none",
|
|
2737
3049
|
{
|
|
@@ -2777,10 +3089,10 @@ Spinner.displayName = "Spinner";
|
|
|
2777
3089
|
var buttonVariants = cva(
|
|
2778
3090
|
cn(
|
|
2779
3091
|
"inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap cursor-pointer",
|
|
2780
|
-
|
|
3092
|
+
microInteractions.pressable,
|
|
2781
3093
|
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
2782
|
-
"disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled",
|
|
2783
|
-
"
|
|
3094
|
+
"disabled:pointer-events-none [&:disabled:not([data-loading=true])]:bg-bg-disabled [&:disabled:not([data-loading=true])]:text-fg-disabled",
|
|
3095
|
+
"data-[loading=true]:cursor-wait",
|
|
2784
3096
|
"[&_svg]:size-4 [&_svg]:shrink-0"
|
|
2785
3097
|
),
|
|
2786
3098
|
{
|
|
@@ -2792,14 +3104,17 @@ var buttonVariants = cva(
|
|
|
2792
3104
|
success: "bg-success-fg text-fg-on-success hover:bg-success-fg-hover active:bg-success-fg-active",
|
|
2793
3105
|
ghost: "bg-control-bg text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg",
|
|
2794
3106
|
outline: "border border-control-border-strong bg-control-bg text-control-fg hover:bg-control-hover-bg hover:border-control-border-hover",
|
|
2795
|
-
link: "bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto",
|
|
2796
|
-
accent: "bg-
|
|
3107
|
+
link: "bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto active:scale-100",
|
|
3108
|
+
accent: "bg-suite-action text-fg-on-suite-action hover:bg-suite-action-hover active:bg-suite-action-active",
|
|
2797
3109
|
dashed: "border-2 border-dashed border-control-border bg-control-bg text-control-muted-fg hover:border-control-border-hover hover:bg-control-hover-bg hover:text-control-hover-fg"
|
|
2798
3110
|
},
|
|
2799
3111
|
size: {
|
|
2800
3112
|
sm: "h-8 px-3 text-[13px] gap-1.5",
|
|
2801
3113
|
md: "h-10 px-4 text-sm gap-2",
|
|
2802
3114
|
lg: "h-12 px-6 text-base gap-2",
|
|
3115
|
+
compact: "h-8 px-3 text-[13px] gap-1.5",
|
|
3116
|
+
default: "h-10 px-4 text-sm gap-2",
|
|
3117
|
+
comfortable: "h-12 px-6 text-base gap-2",
|
|
2803
3118
|
// Icon-only sizes. Hit target ≥ 24px (WCAG 2.5.5 floor).
|
|
2804
3119
|
// `icon-xs` / `icon-sm` are for dense in-row action stacks where
|
|
2805
3120
|
// `size="icon"` (40×40) would visually crowd the row.
|
|
@@ -2827,20 +3142,59 @@ var Button = forwardRef(function Button2({
|
|
|
2827
3142
|
...props
|
|
2828
3143
|
}, ref) {
|
|
2829
3144
|
const Comp = asChild ? Slot : "button";
|
|
3145
|
+
const resolvedVariant = variant ?? "primary";
|
|
3146
|
+
const resolvedSize = size ?? "md";
|
|
3147
|
+
const state = stateAttributes({
|
|
3148
|
+
variant: resolvedVariant,
|
|
3149
|
+
size: resolvedSize,
|
|
3150
|
+
// `asChild` drops `disabled`/`loading` (Slot renders the child's own
|
|
3151
|
+
// element), so the state attribute is not claimed there either.
|
|
3152
|
+
disabled: asChild ? void 0 : disabled || loading
|
|
3153
|
+
});
|
|
2830
3154
|
if (asChild) {
|
|
2831
|
-
return /* @__PURE__ */ jsx(
|
|
3155
|
+
return /* @__PURE__ */ jsx(
|
|
3156
|
+
Comp,
|
|
3157
|
+
{
|
|
3158
|
+
ref,
|
|
3159
|
+
...slot(buttonAnatomy, "root"),
|
|
3160
|
+
...state,
|
|
3161
|
+
className: cn(buttonVariants({ variant, size }), className),
|
|
3162
|
+
...props,
|
|
3163
|
+
children
|
|
3164
|
+
}
|
|
3165
|
+
);
|
|
2832
3166
|
}
|
|
2833
3167
|
return /* @__PURE__ */ jsxs(
|
|
2834
3168
|
Comp,
|
|
2835
3169
|
{
|
|
2836
3170
|
ref,
|
|
2837
3171
|
disabled: disabled || loading,
|
|
3172
|
+
"aria-busy": loading || void 0,
|
|
3173
|
+
"data-loading": loading || void 0,
|
|
3174
|
+
...slot(buttonAnatomy, "root"),
|
|
3175
|
+
...state,
|
|
2838
3176
|
className: cn(buttonVariants({ variant, size }), className),
|
|
2839
3177
|
...props,
|
|
2840
3178
|
children: [
|
|
2841
|
-
loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : iconLeft && /* @__PURE__ */ jsx(
|
|
3179
|
+
loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm", ...slot(buttonAnatomy, "spinner") }) : iconLeft && /* @__PURE__ */ jsx(
|
|
3180
|
+
"span",
|
|
3181
|
+
{
|
|
3182
|
+
...slot(buttonAnatomy, "icon-start"),
|
|
3183
|
+
className: "inline-flex shrink-0",
|
|
3184
|
+
"aria-hidden": "true",
|
|
3185
|
+
children: iconLeft
|
|
3186
|
+
}
|
|
3187
|
+
),
|
|
2842
3188
|
children,
|
|
2843
|
-
iconRight && !loading && /* @__PURE__ */ jsx(
|
|
3189
|
+
iconRight && !loading && /* @__PURE__ */ jsx(
|
|
3190
|
+
"span",
|
|
3191
|
+
{
|
|
3192
|
+
...slot(buttonAnatomy, "icon-end"),
|
|
3193
|
+
className: "inline-flex shrink-0",
|
|
3194
|
+
"aria-hidden": "true",
|
|
3195
|
+
children: iconRight
|
|
3196
|
+
}
|
|
3197
|
+
)
|
|
2844
3198
|
]
|
|
2845
3199
|
}
|
|
2846
3200
|
);
|
|
@@ -3152,11 +3506,36 @@ var badgeVariants = cva(
|
|
|
3152
3506
|
}
|
|
3153
3507
|
);
|
|
3154
3508
|
var Badge = forwardRef(function Badge2({ variant, size, dot, icon, children, className, ...props }, ref) {
|
|
3155
|
-
return /* @__PURE__ */ jsxs(
|
|
3156
|
-
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3509
|
+
return /* @__PURE__ */ jsxs(
|
|
3510
|
+
"span",
|
|
3511
|
+
{
|
|
3512
|
+
ref,
|
|
3513
|
+
...slot(badgeAnatomy, "root"),
|
|
3514
|
+
...stateAttributes({ variant: variant ?? "default", size: size ?? "sm" }),
|
|
3515
|
+
className: cn(badgeVariants({ variant, size }), className),
|
|
3516
|
+
...props,
|
|
3517
|
+
children: [
|
|
3518
|
+
dot && /* @__PURE__ */ jsx(
|
|
3519
|
+
"span",
|
|
3520
|
+
{
|
|
3521
|
+
...slot(badgeAnatomy, "dot"),
|
|
3522
|
+
className: "size-1.5 rounded-full bg-current",
|
|
3523
|
+
"aria-hidden": "true"
|
|
3524
|
+
}
|
|
3525
|
+
),
|
|
3526
|
+
icon && /* @__PURE__ */ jsx(
|
|
3527
|
+
"span",
|
|
3528
|
+
{
|
|
3529
|
+
...slot(badgeAnatomy, "icon"),
|
|
3530
|
+
className: "inline-flex size-3.5 shrink-0",
|
|
3531
|
+
"aria-hidden": "true",
|
|
3532
|
+
children: icon
|
|
3533
|
+
}
|
|
3534
|
+
),
|
|
3535
|
+
children
|
|
3536
|
+
]
|
|
3537
|
+
}
|
|
3538
|
+
);
|
|
3160
3539
|
});
|
|
3161
3540
|
Badge.displayName = "Badge";
|
|
3162
3541
|
var Blockquote = forwardRef(function Blockquote2({ children, author, role: authorRole, className, ...props }, ref) {
|
|
@@ -3300,6 +3679,303 @@ var BreadcrumbSeparator = forwardRef(
|
|
|
3300
3679
|
}
|
|
3301
3680
|
);
|
|
3302
3681
|
BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
|
|
3682
|
+
var SelectRoot = SelectPrimitive.Root;
|
|
3683
|
+
var SelectGroup = SelectPrimitive.Group;
|
|
3684
|
+
var SelectValue = SelectPrimitive.Value;
|
|
3685
|
+
function useTriggerOpen(node) {
|
|
3686
|
+
const [open, setOpen] = React39.useState(false);
|
|
3687
|
+
React39.useEffect(() => {
|
|
3688
|
+
if (!node) return;
|
|
3689
|
+
const sync = () => setOpen(node.getAttribute("data-state") === "open");
|
|
3690
|
+
sync();
|
|
3691
|
+
const observer = new MutationObserver(sync);
|
|
3692
|
+
observer.observe(node, { attributes: true, attributeFilter: ["data-state"] });
|
|
3693
|
+
return () => observer.disconnect();
|
|
3694
|
+
}, [node]);
|
|
3695
|
+
return open;
|
|
3696
|
+
}
|
|
3697
|
+
var SelectTrigger = React39.forwardRef(({ className, children, tabIndex, ...props }, ref) => {
|
|
3698
|
+
const [node, setNode] = React39.useState(null);
|
|
3699
|
+
const open = useTriggerOpen(node);
|
|
3700
|
+
const composedRef = React39.useCallback(
|
|
3701
|
+
(element) => {
|
|
3702
|
+
setNode(element);
|
|
3703
|
+
if (typeof ref === "function") ref(element);
|
|
3704
|
+
else if (ref) ref.current = element;
|
|
3705
|
+
},
|
|
3706
|
+
[ref]
|
|
3707
|
+
);
|
|
3708
|
+
return /* @__PURE__ */ jsxs(
|
|
3709
|
+
SelectPrimitive.Trigger,
|
|
3710
|
+
{
|
|
3711
|
+
ref: composedRef,
|
|
3712
|
+
tabIndex: open ? -1 : tabIndex,
|
|
3713
|
+
...slot(selectAnatomy, "trigger"),
|
|
3714
|
+
className: cn(
|
|
3715
|
+
"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]",
|
|
3716
|
+
"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
3717
|
+
"motion-reduce:transition-none",
|
|
3718
|
+
"placeholder:text-fg-4",
|
|
3719
|
+
"focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
3720
|
+
"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed",
|
|
3721
|
+
"data-[placeholder]:text-fg-4",
|
|
3722
|
+
"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg",
|
|
3723
|
+
"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]",
|
|
3724
|
+
"[&>span]:line-clamp-1 [&>span]:text-left",
|
|
3725
|
+
className
|
|
3726
|
+
),
|
|
3727
|
+
...props,
|
|
3728
|
+
children: [
|
|
3729
|
+
children,
|
|
3730
|
+
/* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
3731
|
+
ChevronDownIcon,
|
|
3732
|
+
{
|
|
3733
|
+
...slot(selectAnatomy, "icon"),
|
|
3734
|
+
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",
|
|
3735
|
+
"aria-hidden": "true"
|
|
3736
|
+
}
|
|
3737
|
+
) })
|
|
3738
|
+
]
|
|
3739
|
+
}
|
|
3740
|
+
);
|
|
3741
|
+
});
|
|
3742
|
+
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
3743
|
+
var SelectScrollUpButton = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3744
|
+
SelectPrimitive.ScrollUpButton,
|
|
3745
|
+
{
|
|
3746
|
+
ref,
|
|
3747
|
+
...slot(selectAnatomy, "scroll-up-button"),
|
|
3748
|
+
className: cn("text-fg-3 flex cursor-default items-center justify-center py-1", className),
|
|
3749
|
+
...props,
|
|
3750
|
+
children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "size-4", "aria-hidden": "true" })
|
|
3751
|
+
}
|
|
3752
|
+
));
|
|
3753
|
+
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
3754
|
+
var SelectScrollDownButton = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3755
|
+
SelectPrimitive.ScrollDownButton,
|
|
3756
|
+
{
|
|
3757
|
+
ref,
|
|
3758
|
+
...slot(selectAnatomy, "scroll-down-button"),
|
|
3759
|
+
className: cn("text-fg-3 flex cursor-default items-center justify-center py-1", className),
|
|
3760
|
+
...props,
|
|
3761
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4", "aria-hidden": "true" })
|
|
3762
|
+
}
|
|
3763
|
+
));
|
|
3764
|
+
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
3765
|
+
var SelectContent = React39.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
3766
|
+
SelectPrimitive.Content,
|
|
3767
|
+
{
|
|
3768
|
+
ref,
|
|
3769
|
+
position,
|
|
3770
|
+
...slot(selectAnatomy, "content"),
|
|
3771
|
+
className: cn(
|
|
3772
|
+
"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",
|
|
3773
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
3774
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
3775
|
+
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
3776
|
+
"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2",
|
|
3777
|
+
"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
3778
|
+
"motion-reduce:transition-none",
|
|
3779
|
+
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
3780
|
+
className
|
|
3781
|
+
),
|
|
3782
|
+
...props,
|
|
3783
|
+
children: [
|
|
3784
|
+
/* @__PURE__ */ jsx(SelectScrollUpButton, {}),
|
|
3785
|
+
/* @__PURE__ */ jsx(
|
|
3786
|
+
SelectPrimitive.Viewport,
|
|
3787
|
+
{
|
|
3788
|
+
...slot(selectAnatomy, "viewport"),
|
|
3789
|
+
className: cn(
|
|
3790
|
+
"p-1",
|
|
3791
|
+
position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)"
|
|
3792
|
+
),
|
|
3793
|
+
children
|
|
3794
|
+
}
|
|
3795
|
+
),
|
|
3796
|
+
/* @__PURE__ */ jsx(SelectScrollDownButton, {})
|
|
3797
|
+
]
|
|
3798
|
+
}
|
|
3799
|
+
) }));
|
|
3800
|
+
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
3801
|
+
var SelectLabel = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3802
|
+
SelectPrimitive.Label,
|
|
3803
|
+
{
|
|
3804
|
+
ref,
|
|
3805
|
+
...slot(selectAnatomy, "label"),
|
|
3806
|
+
className: cn(
|
|
3807
|
+
"text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase",
|
|
3808
|
+
className
|
|
3809
|
+
),
|
|
3810
|
+
...props
|
|
3811
|
+
}
|
|
3812
|
+
));
|
|
3813
|
+
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
3814
|
+
var SelectItem = React39.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
3815
|
+
SelectPrimitive.Item,
|
|
3816
|
+
{
|
|
3817
|
+
ref,
|
|
3818
|
+
...slot(selectAnatomy, "item"),
|
|
3819
|
+
className: cn(
|
|
3820
|
+
"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",
|
|
3821
|
+
"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
3822
|
+
"focus:bg-bg-2 focus:text-fg",
|
|
3823
|
+
"data-[state=checked]:bg-brand-bg data-[state=checked]:text-brand",
|
|
3824
|
+
"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none",
|
|
3825
|
+
"[&_svg]:size-4 [&_svg]:shrink-0",
|
|
3826
|
+
className
|
|
3827
|
+
),
|
|
3828
|
+
...props,
|
|
3829
|
+
children: [
|
|
3830
|
+
/* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children }),
|
|
3831
|
+
/* @__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" }) }) })
|
|
3832
|
+
]
|
|
3833
|
+
}
|
|
3834
|
+
));
|
|
3835
|
+
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
3836
|
+
var SelectSeparator = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3837
|
+
SelectPrimitive.Separator,
|
|
3838
|
+
{
|
|
3839
|
+
ref,
|
|
3840
|
+
...slot(selectAnatomy, "separator"),
|
|
3841
|
+
className: cn("bg-rule -mx-1 my-1 h-px", className),
|
|
3842
|
+
...props
|
|
3843
|
+
}
|
|
3844
|
+
));
|
|
3845
|
+
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
3846
|
+
function Select({
|
|
3847
|
+
options,
|
|
3848
|
+
value,
|
|
3849
|
+
defaultValue,
|
|
3850
|
+
onValueChange,
|
|
3851
|
+
placeholder = "Select...",
|
|
3852
|
+
searchable,
|
|
3853
|
+
disabled,
|
|
3854
|
+
name,
|
|
3855
|
+
required,
|
|
3856
|
+
className,
|
|
3857
|
+
triggerClassName,
|
|
3858
|
+
contentClassName,
|
|
3859
|
+
"aria-invalid": ariaInvalid,
|
|
3860
|
+
"aria-label": ariaLabel
|
|
3861
|
+
}) {
|
|
3862
|
+
if (process.env.NODE_ENV !== "production" && searchable) {
|
|
3863
|
+
console.warn(
|
|
3864
|
+
"[Select] `searchable` is not supported by Radix Select. Use <SearchSelect /> for filterable selection."
|
|
3865
|
+
);
|
|
3866
|
+
}
|
|
3867
|
+
return /* @__PURE__ */ jsxs(
|
|
3868
|
+
SelectRoot,
|
|
3869
|
+
{
|
|
3870
|
+
value,
|
|
3871
|
+
defaultValue,
|
|
3872
|
+
onValueChange,
|
|
3873
|
+
disabled,
|
|
3874
|
+
name,
|
|
3875
|
+
required,
|
|
3876
|
+
children: [
|
|
3877
|
+
/* @__PURE__ */ jsx(
|
|
3878
|
+
SelectTrigger,
|
|
3879
|
+
{
|
|
3880
|
+
"aria-invalid": ariaInvalid || void 0,
|
|
3881
|
+
"aria-label": ariaLabel ?? placeholder,
|
|
3882
|
+
className: cn(triggerClassName, className),
|
|
3883
|
+
children: /* @__PURE__ */ jsx(SelectValue, { placeholder })
|
|
3884
|
+
}
|
|
3885
|
+
),
|
|
3886
|
+
/* @__PURE__ */ jsx(SelectContent, { className: contentClassName, children: options.map((opt) => /* @__PURE__ */ jsx(SelectItem, { value: opt.value, disabled: opt.disabled, children: /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
3887
|
+
/* @__PURE__ */ jsx("span", { className: "line-clamp-1", children: opt.label }),
|
|
3888
|
+
opt.labelSuffix
|
|
3889
|
+
] }) }, opt.value)) })
|
|
3890
|
+
]
|
|
3891
|
+
}
|
|
3892
|
+
);
|
|
3893
|
+
}
|
|
3894
|
+
Select.displayName = "Select";
|
|
3895
|
+
var DEFAULT_YEARS_BACK = 100;
|
|
3896
|
+
var DEFAULT_YEARS_FORWARD = 20;
|
|
3897
|
+
function CalendarDropdown({
|
|
3898
|
+
options = [],
|
|
3899
|
+
value,
|
|
3900
|
+
onChange,
|
|
3901
|
+
disabled,
|
|
3902
|
+
className,
|
|
3903
|
+
"aria-label": ariaLabel
|
|
3904
|
+
}) {
|
|
3905
|
+
const current = value === void 0 || value === null ? void 0 : String(value);
|
|
3906
|
+
const selected = options.find((option) => String(option.value) === current);
|
|
3907
|
+
return /* @__PURE__ */ jsxs(
|
|
3908
|
+
SelectRoot,
|
|
3909
|
+
{
|
|
3910
|
+
value: current,
|
|
3911
|
+
disabled,
|
|
3912
|
+
onValueChange: (next) => {
|
|
3913
|
+
onChange?.({ target: { value: next } });
|
|
3914
|
+
},
|
|
3915
|
+
children: [
|
|
3916
|
+
/* @__PURE__ */ jsx(
|
|
3917
|
+
SelectTrigger,
|
|
3918
|
+
{
|
|
3919
|
+
"aria-label": ariaLabel,
|
|
3920
|
+
className: cn(
|
|
3921
|
+
"h-7 w-auto min-w-0 gap-1 border-transparent bg-transparent px-1.5 py-0",
|
|
3922
|
+
"font-display font-medium",
|
|
3923
|
+
"hover:bg-bg-2",
|
|
3924
|
+
"[&>svg]:size-3.5",
|
|
3925
|
+
className
|
|
3926
|
+
),
|
|
3927
|
+
children: /* @__PURE__ */ jsx(SelectValue, { children: selected?.label })
|
|
3928
|
+
}
|
|
3929
|
+
),
|
|
3930
|
+
/* @__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)) })
|
|
3931
|
+
]
|
|
3932
|
+
}
|
|
3933
|
+
);
|
|
3934
|
+
}
|
|
3935
|
+
function CalendarChevron({
|
|
3936
|
+
orientation,
|
|
3937
|
+
className
|
|
3938
|
+
}) {
|
|
3939
|
+
const Icon3 = orientation === "right" ? ChevronRightIcon : ChevronLeftIcon;
|
|
3940
|
+
return /* @__PURE__ */ jsx(Icon3, { className: cn("text-fg-3 size-4", className), "aria-hidden": "true" });
|
|
3941
|
+
}
|
|
3942
|
+
var CALENDAR_CAPTION_COMPONENTS = {
|
|
3943
|
+
Chevron: CalendarChevron,
|
|
3944
|
+
Dropdown: CalendarDropdown
|
|
3945
|
+
};
|
|
3946
|
+
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";
|
|
3947
|
+
var CALENDAR_CAPTION_CLASSNAMES = {
|
|
3948
|
+
month: "relative space-y-3",
|
|
3949
|
+
// px-7 keeps the caption clear of the two absolutely-pinned size-7 chevrons.
|
|
3950
|
+
// Font size is applied by each calendar (they own their type scale).
|
|
3951
|
+
month_caption: "flex h-7 items-center justify-center px-7 font-display font-medium text-fg",
|
|
3952
|
+
caption_label: "tabular-nums",
|
|
3953
|
+
// No root-level <nav> with navLayout="around"; the buttons render inline.
|
|
3954
|
+
nav: "contents",
|
|
3955
|
+
button_previous: cn("left-0", NAV_BUTTON),
|
|
3956
|
+
button_next: cn("right-0", NAV_BUTTON),
|
|
3957
|
+
dropdowns: "flex items-center justify-center gap-1",
|
|
3958
|
+
dropdown_root: "relative",
|
|
3959
|
+
months_dropdown: "",
|
|
3960
|
+
years_dropdown: "font-mono tabular-nums"
|
|
3961
|
+
};
|
|
3962
|
+
function resolveCalendarNavRange({
|
|
3963
|
+
minDate,
|
|
3964
|
+
maxDate,
|
|
3965
|
+
selected,
|
|
3966
|
+
today = /* @__PURE__ */ new Date()
|
|
3967
|
+
}) {
|
|
3968
|
+
let startMonth = minDate ? startOfMonth(minDate) : startOfYear(subYears(today, DEFAULT_YEARS_BACK));
|
|
3969
|
+
let endMonth = maxDate ? endOfMonth(maxDate) : endOfYear(addYears(today, DEFAULT_YEARS_FORWARD));
|
|
3970
|
+
const picks = (Array.isArray(selected) ? selected : [selected]).filter(
|
|
3971
|
+
(d) => d instanceof Date && !Number.isNaN(d.getTime())
|
|
3972
|
+
);
|
|
3973
|
+
for (const pick of picks) {
|
|
3974
|
+
if (pick < startMonth) startMonth = startOfMonth(pick);
|
|
3975
|
+
if (pick > endMonth) endMonth = endOfMonth(pick);
|
|
3976
|
+
}
|
|
3977
|
+
return { startMonth, endMonth };
|
|
3978
|
+
}
|
|
3303
3979
|
var HIGHLIGHT_COLORS = {
|
|
3304
3980
|
primary: "after:bg-brand",
|
|
3305
3981
|
success: "after:bg-success-fg",
|
|
@@ -3315,6 +3991,11 @@ function Calendar({
|
|
|
3315
3991
|
maxDate,
|
|
3316
3992
|
className,
|
|
3317
3993
|
classNames,
|
|
3994
|
+
captionLayout = "dropdown",
|
|
3995
|
+
navLayout = "around",
|
|
3996
|
+
startMonth,
|
|
3997
|
+
endMonth,
|
|
3998
|
+
components,
|
|
3318
3999
|
...props
|
|
3319
4000
|
}) {
|
|
3320
4001
|
const { modifiers, modifiersClassNames } = React39.useMemo(() => {
|
|
@@ -3338,6 +4019,10 @@ function Calendar({
|
|
|
3338
4019
|
if (minDate) return { before: minDate };
|
|
3339
4020
|
return { after: maxDate };
|
|
3340
4021
|
}, [minDate, maxDate]);
|
|
4022
|
+
const navRange = React39.useMemo(
|
|
4023
|
+
() => captionLayout === "label" ? void 0 : resolveCalendarNavRange({ minDate, maxDate, selected }),
|
|
4024
|
+
[captionLayout, minDate, maxDate, selected]
|
|
4025
|
+
);
|
|
3341
4026
|
return /* @__PURE__ */ jsx(
|
|
3342
4027
|
DayPicker,
|
|
3343
4028
|
{
|
|
@@ -3350,22 +4035,17 @@ function Calendar({
|
|
|
3350
4035
|
modifiers,
|
|
3351
4036
|
modifiersClassNames,
|
|
3352
4037
|
showOutsideDays: true,
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
},
|
|
4038
|
+
captionLayout,
|
|
4039
|
+
navLayout,
|
|
4040
|
+
startMonth: startMonth ?? navRange?.startMonth,
|
|
4041
|
+
endMonth: endMonth ?? navRange?.endMonth,
|
|
4042
|
+
components: { ...CALENDAR_CAPTION_COMPONENTS, ...components },
|
|
3359
4043
|
className: cn("font-body text-fg select-none", className),
|
|
3360
4044
|
classNames: {
|
|
3361
4045
|
root: "p-3 min-w-[280px]",
|
|
3362
4046
|
months: "flex flex-col gap-4",
|
|
3363
|
-
|
|
3364
|
-
month_caption: "
|
|
3365
|
-
caption_label: "tabular-nums",
|
|
3366
|
-
nav: "flex items-center justify-between absolute left-3 right-3 top-3",
|
|
3367
|
-
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",
|
|
3368
|
-
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",
|
|
4047
|
+
...CALENDAR_CAPTION_CLASSNAMES,
|
|
4048
|
+
month_caption: cn(CALENDAR_CAPTION_CLASSNAMES.month_caption, "text-[13px]"),
|
|
3369
4049
|
month_grid: "w-full border-collapse",
|
|
3370
4050
|
weekdays: "flex",
|
|
3371
4051
|
weekday: "flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1",
|
|
@@ -3520,10 +4200,11 @@ var Checkbox = React39.forwardRef(function Checkbox2({
|
|
|
3520
4200
|
id,
|
|
3521
4201
|
checked: resolvedChecked,
|
|
3522
4202
|
defaultChecked,
|
|
4203
|
+
...slot(checkboxAnatomy, "root"),
|
|
3523
4204
|
className: cn(
|
|
3524
4205
|
"peer border-rule-strong bg-surface text-brand flex size-4 shrink-0 items-center justify-center border",
|
|
3525
4206
|
shape === "circle" ? "rounded-full" : "rounded-[4px]",
|
|
3526
|
-
|
|
4207
|
+
microInteractions.selection,
|
|
3527
4208
|
"hover:border-fg-4",
|
|
3528
4209
|
"focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
3529
4210
|
"data-[state=checked]:border-brand data-[state=checked]:bg-brand-bg",
|
|
@@ -3533,199 +4214,28 @@ var Checkbox = React39.forwardRef(function Checkbox2({
|
|
|
3533
4214
|
className
|
|
3534
4215
|
),
|
|
3535
4216
|
...props,
|
|
3536
|
-
children: /* @__PURE__ */ jsx(
|
|
4217
|
+
children: /* @__PURE__ */ jsx(
|
|
4218
|
+
CheckboxPrimitive.Indicator,
|
|
4219
|
+
{
|
|
4220
|
+
...slot(checkboxAnatomy, "indicator"),
|
|
4221
|
+
className: "flex items-center justify-center text-current",
|
|
4222
|
+
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" })
|
|
4223
|
+
}
|
|
4224
|
+
)
|
|
3537
4225
|
}
|
|
3538
4226
|
),
|
|
3539
4227
|
label && /* @__PURE__ */ jsx(
|
|
3540
4228
|
"label",
|
|
3541
4229
|
{
|
|
3542
4230
|
htmlFor: id,
|
|
4231
|
+
...slot(checkboxAnatomy, "label"),
|
|
3543
4232
|
className: "text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed",
|
|
3544
|
-
children: label
|
|
3545
|
-
}
|
|
3546
|
-
)
|
|
3547
|
-
] });
|
|
3548
|
-
});
|
|
3549
|
-
Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
3550
|
-
var SelectRoot = SelectPrimitive.Root;
|
|
3551
|
-
var SelectGroup = SelectPrimitive.Group;
|
|
3552
|
-
var SelectValue = SelectPrimitive.Value;
|
|
3553
|
-
var SelectTrigger = React39.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
3554
|
-
SelectPrimitive.Trigger,
|
|
3555
|
-
{
|
|
3556
|
-
ref,
|
|
3557
|
-
className: cn(
|
|
3558
|
-
"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]",
|
|
3559
|
-
"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
3560
|
-
"motion-reduce:transition-none",
|
|
3561
|
-
"placeholder:text-fg-4",
|
|
3562
|
-
"focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
3563
|
-
"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed",
|
|
3564
|
-
"data-[placeholder]:text-fg-4",
|
|
3565
|
-
"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg",
|
|
3566
|
-
"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]",
|
|
3567
|
-
"[&>span]:line-clamp-1 [&>span]:text-left",
|
|
3568
|
-
className
|
|
3569
|
-
),
|
|
3570
|
-
...props,
|
|
3571
|
-
children: [
|
|
3572
|
-
children,
|
|
3573
|
-
/* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
3574
|
-
ChevronDownIcon,
|
|
3575
|
-
{
|
|
3576
|
-
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",
|
|
3577
|
-
"aria-hidden": "true"
|
|
3578
|
-
}
|
|
3579
|
-
) })
|
|
3580
|
-
]
|
|
3581
|
-
}
|
|
3582
|
-
));
|
|
3583
|
-
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
3584
|
-
var SelectScrollUpButton = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3585
|
-
SelectPrimitive.ScrollUpButton,
|
|
3586
|
-
{
|
|
3587
|
-
ref,
|
|
3588
|
-
className: cn("text-fg-3 flex cursor-default items-center justify-center py-1", className),
|
|
3589
|
-
...props,
|
|
3590
|
-
children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "size-4", "aria-hidden": "true" })
|
|
3591
|
-
}
|
|
3592
|
-
));
|
|
3593
|
-
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
3594
|
-
var SelectScrollDownButton = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3595
|
-
SelectPrimitive.ScrollDownButton,
|
|
3596
|
-
{
|
|
3597
|
-
ref,
|
|
3598
|
-
className: cn("text-fg-3 flex cursor-default items-center justify-center py-1", className),
|
|
3599
|
-
...props,
|
|
3600
|
-
children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4", "aria-hidden": "true" })
|
|
3601
|
-
}
|
|
3602
|
-
));
|
|
3603
|
-
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
3604
|
-
var SelectContent = React39.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
3605
|
-
SelectPrimitive.Content,
|
|
3606
|
-
{
|
|
3607
|
-
ref,
|
|
3608
|
-
position,
|
|
3609
|
-
className: cn(
|
|
3610
|
-
"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",
|
|
3611
|
-
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
3612
|
-
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
3613
|
-
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
3614
|
-
"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2",
|
|
3615
|
-
"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
3616
|
-
"motion-reduce:transition-none",
|
|
3617
|
-
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
3618
|
-
className
|
|
3619
|
-
),
|
|
3620
|
-
...props,
|
|
3621
|
-
children: [
|
|
3622
|
-
/* @__PURE__ */ jsx(SelectScrollUpButton, {}),
|
|
3623
|
-
/* @__PURE__ */ jsx(
|
|
3624
|
-
SelectPrimitive.Viewport,
|
|
3625
|
-
{
|
|
3626
|
-
className: cn(
|
|
3627
|
-
"p-1",
|
|
3628
|
-
position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)"
|
|
3629
|
-
),
|
|
3630
|
-
children
|
|
3631
|
-
}
|
|
3632
|
-
),
|
|
3633
|
-
/* @__PURE__ */ jsx(SelectScrollDownButton, {})
|
|
3634
|
-
]
|
|
3635
|
-
}
|
|
3636
|
-
) }));
|
|
3637
|
-
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
3638
|
-
var SelectLabel = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3639
|
-
SelectPrimitive.Label,
|
|
3640
|
-
{
|
|
3641
|
-
ref,
|
|
3642
|
-
className: cn(
|
|
3643
|
-
"text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase",
|
|
3644
|
-
className
|
|
3645
|
-
),
|
|
3646
|
-
...props
|
|
3647
|
-
}
|
|
3648
|
-
));
|
|
3649
|
-
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
3650
|
-
var SelectItem = React39.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
3651
|
-
SelectPrimitive.Item,
|
|
3652
|
-
{
|
|
3653
|
-
ref,
|
|
3654
|
-
className: cn(
|
|
3655
|
-
"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",
|
|
3656
|
-
"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
3657
|
-
"focus:bg-bg-2 focus:text-fg",
|
|
3658
|
-
"data-[state=checked]:bg-brand-bg data-[state=checked]:text-brand",
|
|
3659
|
-
"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none",
|
|
3660
|
-
"[&_svg]:size-4 [&_svg]:shrink-0",
|
|
3661
|
-
className
|
|
3662
|
-
),
|
|
3663
|
-
...props,
|
|
3664
|
-
children: [
|
|
3665
|
-
/* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children }),
|
|
3666
|
-
/* @__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" }) }) })
|
|
3667
|
-
]
|
|
3668
|
-
}
|
|
3669
|
-
));
|
|
3670
|
-
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
3671
|
-
var SelectSeparator = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3672
|
-
SelectPrimitive.Separator,
|
|
3673
|
-
{
|
|
3674
|
-
ref,
|
|
3675
|
-
className: cn("bg-rule -mx-1 my-1 h-px", className),
|
|
3676
|
-
...props
|
|
3677
|
-
}
|
|
3678
|
-
));
|
|
3679
|
-
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
3680
|
-
function Select({
|
|
3681
|
-
options,
|
|
3682
|
-
value,
|
|
3683
|
-
defaultValue,
|
|
3684
|
-
onValueChange,
|
|
3685
|
-
placeholder = "Select...",
|
|
3686
|
-
searchable,
|
|
3687
|
-
disabled,
|
|
3688
|
-
name,
|
|
3689
|
-
required,
|
|
3690
|
-
className,
|
|
3691
|
-
triggerClassName,
|
|
3692
|
-
contentClassName,
|
|
3693
|
-
"aria-invalid": ariaInvalid,
|
|
3694
|
-
"aria-label": ariaLabel
|
|
3695
|
-
}) {
|
|
3696
|
-
if (process.env.NODE_ENV !== "production" && searchable) {
|
|
3697
|
-
console.warn(
|
|
3698
|
-
"[Select] `searchable` is not supported by Radix Select. Use <SearchSelect /> for filterable selection."
|
|
3699
|
-
);
|
|
3700
|
-
}
|
|
3701
|
-
return /* @__PURE__ */ jsxs(
|
|
3702
|
-
SelectRoot,
|
|
3703
|
-
{
|
|
3704
|
-
value,
|
|
3705
|
-
defaultValue,
|
|
3706
|
-
onValueChange,
|
|
3707
|
-
disabled,
|
|
3708
|
-
name,
|
|
3709
|
-
required,
|
|
3710
|
-
children: [
|
|
3711
|
-
/* @__PURE__ */ jsx(
|
|
3712
|
-
SelectTrigger,
|
|
3713
|
-
{
|
|
3714
|
-
"aria-invalid": ariaInvalid || void 0,
|
|
3715
|
-
"aria-label": ariaLabel ?? placeholder,
|
|
3716
|
-
className: cn(triggerClassName, className),
|
|
3717
|
-
children: /* @__PURE__ */ jsx(SelectValue, { placeholder })
|
|
3718
|
-
}
|
|
3719
|
-
),
|
|
3720
|
-
/* @__PURE__ */ jsx(SelectContent, { className: contentClassName, children: options.map((opt) => /* @__PURE__ */ jsx(SelectItem, { value: opt.value, disabled: opt.disabled, children: /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
3721
|
-
/* @__PURE__ */ jsx("span", { className: "line-clamp-1", children: opt.label }),
|
|
3722
|
-
opt.labelSuffix
|
|
3723
|
-
] }) }, opt.value)) })
|
|
3724
|
-
]
|
|
3725
|
-
}
|
|
3726
|
-
);
|
|
3727
|
-
}
|
|
3728
|
-
Select.displayName = "Select";
|
|
4233
|
+
children: label
|
|
4234
|
+
}
|
|
4235
|
+
)
|
|
4236
|
+
] });
|
|
4237
|
+
});
|
|
4238
|
+
Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
3729
4239
|
function ClientSelect({
|
|
3730
4240
|
clients,
|
|
3731
4241
|
value,
|
|
@@ -3853,11 +4363,11 @@ var DialogOverlay = React39.forwardRef(({ className, ...props }, ref) => /* @__P
|
|
|
3853
4363
|
DialogPrimitive.Overlay,
|
|
3854
4364
|
{
|
|
3855
4365
|
ref,
|
|
4366
|
+
...slot(dialogAnatomy, "overlay"),
|
|
3856
4367
|
className: cn(
|
|
3857
4368
|
"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
|
|
3858
|
-
|
|
4369
|
+
microInteractions.overlay,
|
|
3859
4370
|
"data-[state=closed]:opacity-0 data-[state=open]:opacity-100",
|
|
3860
|
-
"motion-reduce:transition-none",
|
|
3861
4371
|
className
|
|
3862
4372
|
),
|
|
3863
4373
|
...props
|
|
@@ -3876,16 +4386,17 @@ var DialogContent = React39.forwardRef(({ size = "md", showCloseButton = true, c
|
|
|
3876
4386
|
DialogPrimitive.Content,
|
|
3877
4387
|
{
|
|
3878
4388
|
ref,
|
|
4389
|
+
...slot(dialogAnatomy, "content"),
|
|
4390
|
+
...stateAttributes({ size }),
|
|
3879
4391
|
className: cn(
|
|
3880
4392
|
"fixed top-1/2 left-1/2 z-[var(--z-modal)] w-full",
|
|
3881
4393
|
"scrollbar-thin max-h-[calc(100vh-6rem)] overflow-y-auto",
|
|
3882
4394
|
"rounded-card border-rule bg-surface shadow-pop border p-6",
|
|
3883
4395
|
"font-body text-fg",
|
|
3884
4396
|
// motion: scale + fade keyed off data-state
|
|
3885
|
-
|
|
4397
|
+
microInteractions.overlay,
|
|
3886
4398
|
"data-[state=closed]:-translate-x-1/2 data-[state=closed]:-translate-y-[48%] data-[state=closed]:scale-95 data-[state=closed]:opacity-0",
|
|
3887
4399
|
"data-[state=open]:-translate-x-1/2 data-[state=open]:-translate-y-1/2 data-[state=open]:scale-100 data-[state=open]:opacity-100",
|
|
3888
|
-
"motion-reduce:transition-none",
|
|
3889
4400
|
dialogSizeStyles[size],
|
|
3890
4401
|
className
|
|
3891
4402
|
),
|
|
@@ -3895,6 +4406,7 @@ var DialogContent = React39.forwardRef(({ size = "md", showCloseButton = true, c
|
|
|
3895
4406
|
showCloseButton && /* @__PURE__ */ jsx(
|
|
3896
4407
|
DialogPrimitive.Close,
|
|
3897
4408
|
{
|
|
4409
|
+
...slot(dialogAnatomy, "close"),
|
|
3898
4410
|
className: cn(
|
|
3899
4411
|
"absolute top-4 right-4 inline-flex size-7 items-center justify-center",
|
|
3900
4412
|
"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -3911,13 +4423,29 @@ var DialogContent = React39.forwardRef(({ size = "md", showCloseButton = true, c
|
|
|
3911
4423
|
)
|
|
3912
4424
|
] }));
|
|
3913
4425
|
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
3914
|
-
var DialogClose = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4426
|
+
var DialogClose = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4427
|
+
DialogPrimitive.Close,
|
|
4428
|
+
{
|
|
4429
|
+
ref,
|
|
4430
|
+
...slot(dialogAnatomy, "close"),
|
|
4431
|
+
className: cn(className),
|
|
4432
|
+
...props
|
|
4433
|
+
}
|
|
4434
|
+
));
|
|
3915
4435
|
DialogClose.displayName = "DialogClose";
|
|
3916
|
-
var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
4436
|
+
var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
4437
|
+
"div",
|
|
4438
|
+
{
|
|
4439
|
+
...slot(dialogAnatomy, "header"),
|
|
4440
|
+
className: cn("mb-4 flex flex-col gap-1.5 pr-8", className),
|
|
4441
|
+
...props
|
|
4442
|
+
}
|
|
4443
|
+
);
|
|
3917
4444
|
DialogHeader.displayName = "DialogHeader";
|
|
3918
4445
|
var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
3919
4446
|
"div",
|
|
3920
4447
|
{
|
|
4448
|
+
...slot(dialogAnatomy, "footer"),
|
|
3921
4449
|
className: cn(
|
|
3922
4450
|
"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end",
|
|
3923
4451
|
className
|
|
@@ -3930,6 +4458,7 @@ var DialogTitle = React39.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
3930
4458
|
DialogPrimitive.Title,
|
|
3931
4459
|
{
|
|
3932
4460
|
ref,
|
|
4461
|
+
...slot(dialogAnatomy, "title"),
|
|
3933
4462
|
className: cn(
|
|
3934
4463
|
"font-display text-fg text-base leading-tight font-medium tracking-tight",
|
|
3935
4464
|
className
|
|
@@ -3942,6 +4471,7 @@ var DialogDescription = React39.forwardRef(({ className, ...props }, ref) => /*
|
|
|
3942
4471
|
DialogPrimitive.Description,
|
|
3943
4472
|
{
|
|
3944
4473
|
ref,
|
|
4474
|
+
...slot(dialogAnatomy, "description"),
|
|
3945
4475
|
className: cn("text-fg-3 text-sm", className),
|
|
3946
4476
|
...props
|
|
3947
4477
|
}
|
|
@@ -4199,6 +4729,7 @@ var ContextMenuSubTrigger = React39.forwardRef(({ className, inset, children, ..
|
|
|
4199
4729
|
ContextMenuPrimitive.SubTrigger,
|
|
4200
4730
|
{
|
|
4201
4731
|
ref,
|
|
4732
|
+
...slot(contextMenuAnatomy, "sub-trigger"),
|
|
4202
4733
|
className: cn(
|
|
4203
4734
|
"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
|
|
4204
4735
|
"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -4226,6 +4757,7 @@ var ContextMenuSubContent = React39.forwardRef(({ className, ...props }, ref) =>
|
|
|
4226
4757
|
ContextMenuPrimitive.SubContent,
|
|
4227
4758
|
{
|
|
4228
4759
|
ref,
|
|
4760
|
+
...slot(contextMenuAnatomy, "sub-content"),
|
|
4229
4761
|
className: cn(
|
|
4230
4762
|
"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden border p-1",
|
|
4231
4763
|
"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
@@ -4243,6 +4775,7 @@ var ContextMenuContent = React39.forwardRef(({ className, ...props }, ref) => /*
|
|
|
4243
4775
|
ContextMenuPrimitive.Content,
|
|
4244
4776
|
{
|
|
4245
4777
|
ref,
|
|
4778
|
+
...slot(contextMenuAnatomy, "content"),
|
|
4246
4779
|
className: cn(
|
|
4247
4780
|
"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[10rem] overflow-hidden border p-1",
|
|
4248
4781
|
"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
@@ -4259,6 +4792,7 @@ var ContextMenuItem = React39.forwardRef(({ className, destructive, inset, ...pr
|
|
|
4259
4792
|
ContextMenuPrimitive.Item,
|
|
4260
4793
|
{
|
|
4261
4794
|
ref,
|
|
4795
|
+
...slot(contextMenuAnatomy, "item"),
|
|
4262
4796
|
className: cn(
|
|
4263
4797
|
"rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
|
|
4264
4798
|
"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -4277,6 +4811,7 @@ var ContextMenuCheckboxItem = React39.forwardRef(({ className, children, checked
|
|
|
4277
4811
|
ContextMenuPrimitive.CheckboxItem,
|
|
4278
4812
|
{
|
|
4279
4813
|
ref,
|
|
4814
|
+
...slot(contextMenuAnatomy, "checkbox-item"),
|
|
4280
4815
|
checked,
|
|
4281
4816
|
className: cn(
|
|
4282
4817
|
"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
|
|
@@ -4287,7 +4822,7 @@ var ContextMenuCheckboxItem = React39.forwardRef(({ className, children, checked
|
|
|
4287
4822
|
),
|
|
4288
4823
|
...props,
|
|
4289
4824
|
children: [
|
|
4290
|
-
/* @__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" }) }) }),
|
|
4825
|
+
/* @__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" }) }) }),
|
|
4291
4826
|
children
|
|
4292
4827
|
]
|
|
4293
4828
|
}
|
|
@@ -4297,6 +4832,7 @@ var ContextMenuRadioItem = React39.forwardRef(({ className, children, ...props }
|
|
|
4297
4832
|
ContextMenuPrimitive.RadioItem,
|
|
4298
4833
|
{
|
|
4299
4834
|
ref,
|
|
4835
|
+
...slot(contextMenuAnatomy, "radio-item"),
|
|
4300
4836
|
className: cn(
|
|
4301
4837
|
"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
|
|
4302
4838
|
"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -4306,7 +4842,7 @@ var ContextMenuRadioItem = React39.forwardRef(({ className, children, ...props }
|
|
|
4306
4842
|
),
|
|
4307
4843
|
...props,
|
|
4308
4844
|
children: [
|
|
4309
|
-
/* @__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" }) }) }),
|
|
4845
|
+
/* @__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" }) }) }),
|
|
4310
4846
|
children
|
|
4311
4847
|
]
|
|
4312
4848
|
}
|
|
@@ -4316,6 +4852,7 @@ var ContextMenuLabel = React39.forwardRef(({ className, inset, ...props }, ref)
|
|
|
4316
4852
|
ContextMenuPrimitive.Label,
|
|
4317
4853
|
{
|
|
4318
4854
|
ref,
|
|
4855
|
+
...slot(contextMenuAnatomy, "label"),
|
|
4319
4856
|
className: cn(
|
|
4320
4857
|
"text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase",
|
|
4321
4858
|
inset && "pl-8",
|
|
@@ -4329,6 +4866,7 @@ var ContextMenuSeparator = React39.forwardRef(({ className, ...props }, ref) =>
|
|
|
4329
4866
|
ContextMenuPrimitive.Separator,
|
|
4330
4867
|
{
|
|
4331
4868
|
ref,
|
|
4869
|
+
...slot(contextMenuAnatomy, "separator"),
|
|
4332
4870
|
className: cn("bg-rule -mx-1 my-1 h-px", className),
|
|
4333
4871
|
...props
|
|
4334
4872
|
}
|
|
@@ -4427,12 +4965,12 @@ var PopoverContent = React39.forwardRef(({ className, align = "center", side = "
|
|
|
4427
4965
|
align,
|
|
4428
4966
|
side,
|
|
4429
4967
|
sideOffset,
|
|
4968
|
+
...slot(popoverAnatomy, "content"),
|
|
4430
4969
|
className: cn(
|
|
4431
4970
|
"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] w-72 border p-4 outline-none",
|
|
4432
|
-
|
|
4971
|
+
microInteractions.overlay,
|
|
4433
4972
|
"data-[state=closed]:scale-95 data-[state=closed]:opacity-0",
|
|
4434
4973
|
"data-[state=open]:scale-100 data-[state=open]:opacity-100",
|
|
4435
|
-
"motion-reduce:transition-none",
|
|
4436
4974
|
className
|
|
4437
4975
|
),
|
|
4438
4976
|
...props
|
|
@@ -4545,7 +5083,9 @@ var DatePicker = forwardRef(function DatePicker2({
|
|
|
4545
5083
|
"aria-label": ariaLabel,
|
|
4546
5084
|
picker = "day",
|
|
4547
5085
|
formatLabel,
|
|
4548
|
-
iconPosition = "right"
|
|
5086
|
+
iconPosition = "right",
|
|
5087
|
+
captionLayout = "dropdown",
|
|
5088
|
+
inputClassName
|
|
4549
5089
|
}, ref) {
|
|
4550
5090
|
const isYearMode = picker === "year";
|
|
4551
5091
|
const hasCustomYearLabel = isYearMode && !!formatLabel;
|
|
@@ -4666,7 +5206,8 @@ var DatePicker = forwardRef(function DatePicker2({
|
|
|
4666
5206
|
"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed",
|
|
4667
5207
|
"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg",
|
|
4668
5208
|
"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]",
|
|
4669
|
-
hasCustomYearLabel && "cursor-pointer"
|
|
5209
|
+
hasCustomYearLabel && "cursor-pointer",
|
|
5210
|
+
inputClassName
|
|
4670
5211
|
)
|
|
4671
5212
|
}
|
|
4672
5213
|
),
|
|
@@ -4715,6 +5256,7 @@ var DatePicker = forwardRef(function DatePicker2({
|
|
|
4715
5256
|
minDate,
|
|
4716
5257
|
maxDate,
|
|
4717
5258
|
defaultMonth: selectedDate ?? minDate ?? void 0,
|
|
5259
|
+
captionLayout,
|
|
4718
5260
|
autoFocus: true
|
|
4719
5261
|
}
|
|
4720
5262
|
)
|
|
@@ -4743,7 +5285,8 @@ var DateRangePicker = forwardRef(
|
|
|
4743
5285
|
min,
|
|
4744
5286
|
max,
|
|
4745
5287
|
iconPosition = "right",
|
|
4746
|
-
"aria-label": ariaLabel
|
|
5288
|
+
"aria-label": ariaLabel,
|
|
5289
|
+
captionLayout = "dropdown"
|
|
4747
5290
|
}, ref) {
|
|
4748
5291
|
const generatedId = useId();
|
|
4749
5292
|
const id = providedId ?? generatedId;
|
|
@@ -4802,6 +5345,14 @@ var DateRangePicker = forwardRef(
|
|
|
4802
5345
|
to: isoToDate(current.to ?? "")
|
|
4803
5346
|
};
|
|
4804
5347
|
const selectedRange = draftRange ?? committedRange;
|
|
5348
|
+
const navRange = useMemo(
|
|
5349
|
+
() => captionLayout === "label" ? void 0 : resolveCalendarNavRange({
|
|
5350
|
+
minDate,
|
|
5351
|
+
maxDate,
|
|
5352
|
+
selected: [selectedRange.from, selectedRange.to]
|
|
5353
|
+
}),
|
|
5354
|
+
[captionLayout, minDate, maxDate, selectedRange.from, selectedRange.to]
|
|
5355
|
+
);
|
|
4805
5356
|
const disabledMatcher = (() => {
|
|
4806
5357
|
if (!minDate && !maxDate) return void 0;
|
|
4807
5358
|
if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];
|
|
@@ -4878,38 +5429,25 @@ var DateRangePicker = forwardRef(
|
|
|
4878
5429
|
mode: "range",
|
|
4879
5430
|
numberOfMonths: 2,
|
|
4880
5431
|
navLayout: "around",
|
|
5432
|
+
captionLayout,
|
|
5433
|
+
startMonth: navRange?.startMonth,
|
|
5434
|
+
endMonth: navRange?.endMonth,
|
|
4881
5435
|
selected: selectedRange.from ? { from: selectedRange.from, to: selectedRange.to } : void 0,
|
|
4882
5436
|
onSelect: handleCalendarSelect,
|
|
4883
5437
|
disabled: disabledMatcher,
|
|
4884
5438
|
showOutsideDays: true,
|
|
4885
5439
|
autoFocus: true,
|
|
4886
5440
|
defaultMonth: selectedRange.from ?? minDate ?? void 0,
|
|
4887
|
-
components:
|
|
4888
|
-
Chevron: ({ orientation, className: chevClass }) => {
|
|
4889
|
-
const Icon3 = orientation === "right" ? ChevronRightIcon : ChevronLeftIcon;
|
|
4890
|
-
return /* @__PURE__ */ jsx(Icon3, { className: cn("text-fg-3 size-4", chevClass), "aria-hidden": "true" });
|
|
4891
|
-
}
|
|
4892
|
-
},
|
|
5441
|
+
components: CALENDAR_CAPTION_COMPONENTS,
|
|
4893
5442
|
className: "font-body text-fg select-none",
|
|
4894
5443
|
classNames: {
|
|
4895
5444
|
root: "p-3",
|
|
4896
5445
|
months: "flex flex-col gap-6 sm:flex-row sm:gap-4",
|
|
4897
|
-
|
|
4898
|
-
//
|
|
4899
|
-
//
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
// absolute positioning gymnastics.
|
|
4903
|
-
month_caption: "flex h-7 items-center justify-center font-display text-[13px] font-medium text-fg",
|
|
4904
|
-
caption_label: "tabular-nums",
|
|
4905
|
-
nav: "contents",
|
|
4906
|
-
// navLayout="around" renders Prev as a sibling BEFORE the
|
|
4907
|
-
// left month's caption, and Next as a sibling AFTER the
|
|
4908
|
-
// right month's caption. Absolute-position each so they
|
|
4909
|
-
// sit at their own month's top corners without disturbing
|
|
4910
|
-
// the centered caption row.
|
|
4911
|
-
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",
|
|
4912
|
-
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",
|
|
5446
|
+
...CALENDAR_CAPTION_CLASSNAMES,
|
|
5447
|
+
// Two side-by-side months; each keeps the shared relative
|
|
5448
|
+
// caption/nav contract and a fixed width.
|
|
5449
|
+
month: cn(CALENDAR_CAPTION_CLASSNAMES.month, "w-[16rem] flex-none"),
|
|
5450
|
+
month_caption: cn(CALENDAR_CAPTION_CLASSNAMES.month_caption, "text-[13px]"),
|
|
4913
5451
|
month_grid: "w-full border-collapse",
|
|
4914
5452
|
weekdays: "flex",
|
|
4915
5453
|
weekday: "flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1",
|
|
@@ -4956,8 +5494,8 @@ var chipVariants = cva(
|
|
|
4956
5494
|
{
|
|
4957
5495
|
variants: {
|
|
4958
5496
|
variant: {
|
|
4959
|
-
primary: "bg-
|
|
4960
|
-
neutral: "bg-
|
|
5497
|
+
primary: "bg-brand-bg text-brand hover:bg-brand-bg-hover",
|
|
5498
|
+
neutral: "bg-bg-2 text-fg-2 hover:bg-bg-3"
|
|
4961
5499
|
}
|
|
4962
5500
|
},
|
|
4963
5501
|
defaultVariants: {
|
|
@@ -5172,6 +5710,7 @@ var DropdownMenuSubTrigger = React39.forwardRef(({ className, inset, children, .
|
|
|
5172
5710
|
DropdownMenuPrimitive.SubTrigger,
|
|
5173
5711
|
{
|
|
5174
5712
|
ref,
|
|
5713
|
+
...slot(dropdownMenuAnatomy, "sub-trigger"),
|
|
5175
5714
|
className: cn(
|
|
5176
5715
|
"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
|
|
5177
5716
|
"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -5199,6 +5738,7 @@ var DropdownMenuSubContent = React39.forwardRef(({ className, ...props }, ref) =
|
|
|
5199
5738
|
DropdownMenuPrimitive.SubContent,
|
|
5200
5739
|
{
|
|
5201
5740
|
ref,
|
|
5741
|
+
...slot(dropdownMenuAnatomy, "sub-content"),
|
|
5202
5742
|
className: cn(
|
|
5203
5743
|
"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",
|
|
5204
5744
|
"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
@@ -5216,6 +5756,7 @@ var DropdownMenuContent = React39.forwardRef(({ className, sideOffset = 6, align
|
|
|
5216
5756
|
DropdownMenuPrimitive.Content,
|
|
5217
5757
|
{
|
|
5218
5758
|
ref,
|
|
5759
|
+
...slot(dropdownMenuAnatomy, "content"),
|
|
5219
5760
|
sideOffset,
|
|
5220
5761
|
align,
|
|
5221
5762
|
className: cn(
|
|
@@ -5234,6 +5775,7 @@ var DropdownMenuItem = React39.forwardRef(({ className, destructive, inset, ...p
|
|
|
5234
5775
|
DropdownMenuPrimitive.Item,
|
|
5235
5776
|
{
|
|
5236
5777
|
ref,
|
|
5778
|
+
...slot(dropdownMenuAnatomy, "item"),
|
|
5237
5779
|
className: cn(
|
|
5238
5780
|
"rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none",
|
|
5239
5781
|
"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -5252,6 +5794,7 @@ var DropdownMenuCheckboxItem = React39.forwardRef(({ className, children, checke
|
|
|
5252
5794
|
DropdownMenuPrimitive.CheckboxItem,
|
|
5253
5795
|
{
|
|
5254
5796
|
ref,
|
|
5797
|
+
...slot(dropdownMenuAnatomy, "checkbox-item"),
|
|
5255
5798
|
checked,
|
|
5256
5799
|
className: cn(
|
|
5257
5800
|
"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
|
|
@@ -5262,7 +5805,7 @@ var DropdownMenuCheckboxItem = React39.forwardRef(({ className, children, checke
|
|
|
5262
5805
|
),
|
|
5263
5806
|
...props,
|
|
5264
5807
|
children: [
|
|
5265
|
-
/* @__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" }) }) }),
|
|
5808
|
+
/* @__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" }) }) }),
|
|
5266
5809
|
children
|
|
5267
5810
|
]
|
|
5268
5811
|
}
|
|
@@ -5272,6 +5815,7 @@ var DropdownMenuRadioItem = React39.forwardRef(({ className, children, ...props
|
|
|
5272
5815
|
DropdownMenuPrimitive.RadioItem,
|
|
5273
5816
|
{
|
|
5274
5817
|
ref,
|
|
5818
|
+
...slot(dropdownMenuAnatomy, "radio-item"),
|
|
5275
5819
|
className: cn(
|
|
5276
5820
|
"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none",
|
|
5277
5821
|
"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -5281,7 +5825,7 @@ var DropdownMenuRadioItem = React39.forwardRef(({ className, children, ...props
|
|
|
5281
5825
|
),
|
|
5282
5826
|
...props,
|
|
5283
5827
|
children: [
|
|
5284
|
-
/* @__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" }) }) }),
|
|
5828
|
+
/* @__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" }) }) }),
|
|
5285
5829
|
children
|
|
5286
5830
|
]
|
|
5287
5831
|
}
|
|
@@ -5291,6 +5835,7 @@ var DropdownMenuLabel = React39.forwardRef(({ className, inset, ...props }, ref)
|
|
|
5291
5835
|
DropdownMenuPrimitive.Label,
|
|
5292
5836
|
{
|
|
5293
5837
|
ref,
|
|
5838
|
+
...slot(dropdownMenuAnatomy, "label"),
|
|
5294
5839
|
className: cn(
|
|
5295
5840
|
"text-menu-label-fg px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase",
|
|
5296
5841
|
inset && "pl-8",
|
|
@@ -5304,6 +5849,7 @@ var DropdownMenuSeparator = React39.forwardRef(({ className, ...props }, ref) =>
|
|
|
5304
5849
|
DropdownMenuPrimitive.Separator,
|
|
5305
5850
|
{
|
|
5306
5851
|
ref,
|
|
5852
|
+
...slot(dropdownMenuAnatomy, "separator"),
|
|
5307
5853
|
className: cn("bg-menu-border -mx-1 my-1 h-px", className),
|
|
5308
5854
|
...props
|
|
5309
5855
|
}
|
|
@@ -5312,6 +5858,7 @@ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
|
5312
5858
|
var DropdownMenuShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
5313
5859
|
"span",
|
|
5314
5860
|
{
|
|
5861
|
+
...slot(dropdownMenuAnatomy, "shortcut"),
|
|
5315
5862
|
className: cn("text-menu-shortcut-fg ml-auto font-mono text-[11px] tracking-wider", className),
|
|
5316
5863
|
...props
|
|
5317
5864
|
}
|
|
@@ -5395,6 +5942,7 @@ function FileUpload({
|
|
|
5395
5942
|
const inputId = useId();
|
|
5396
5943
|
const [isDragOver, setIsDragOver] = useState(false);
|
|
5397
5944
|
const [error, setError] = useState(null);
|
|
5945
|
+
const wrapperOwnsFocus = props.tabIndex !== void 0 || props.role !== void 0;
|
|
5398
5946
|
const validateFiles = useCallback(
|
|
5399
5947
|
(files) => {
|
|
5400
5948
|
setError(null);
|
|
@@ -5431,78 +5979,105 @@ function FileUpload({
|
|
|
5431
5979
|
if (disabled) return;
|
|
5432
5980
|
handleFiles(e.dataTransfer.files);
|
|
5433
5981
|
}
|
|
5434
|
-
return /* @__PURE__ */ jsxs(
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5445
|
-
|
|
5446
|
-
|
|
5447
|
-
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
|
|
5455
|
-
|
|
5456
|
-
|
|
5457
|
-
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5463
|
-
|
|
5464
|
-
|
|
5465
|
-
|
|
5466
|
-
|
|
5467
|
-
|
|
5468
|
-
if (e.target.files) handleFiles(e.target.files);
|
|
5469
|
-
e.target.value = "";
|
|
5470
|
-
},
|
|
5471
|
-
className: "fixed -top-[9999px] -left-[9999px] opacity-0",
|
|
5472
|
-
disabled,
|
|
5473
|
-
tabIndex: -1
|
|
5474
|
-
}
|
|
5475
|
-
),
|
|
5476
|
-
children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5477
|
-
/* @__PURE__ */ jsx(
|
|
5478
|
-
"div",
|
|
5479
|
-
{
|
|
5480
|
-
className: cn(
|
|
5481
|
-
"rounded-icon flex size-10 items-center justify-center transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
5482
|
-
isDragOver ? "bg-brand text-fg-on-brand" : "bg-brand-bg text-brand"
|
|
5483
|
-
),
|
|
5484
|
-
"aria-hidden": "true",
|
|
5485
|
-
children: /* @__PURE__ */ jsx(UploadIcon, { className: "size-5" })
|
|
5486
|
-
}
|
|
5982
|
+
return /* @__PURE__ */ jsxs(
|
|
5983
|
+
"div",
|
|
5984
|
+
{
|
|
5985
|
+
...slot(fileUploadAnatomy, "root"),
|
|
5986
|
+
...stateAttributes({ disabled, invalid: !!error }),
|
|
5987
|
+
className: cn("w-full", className),
|
|
5988
|
+
...props,
|
|
5989
|
+
children: [
|
|
5990
|
+
/* @__PURE__ */ jsxs(
|
|
5991
|
+
"label",
|
|
5992
|
+
{
|
|
5993
|
+
htmlFor: inputId,
|
|
5994
|
+
...slot(fileUploadAnatomy, "dropzone"),
|
|
5995
|
+
...stateAttributes({ disabled, state: isDragOver ? "drag-over" : void 0 }),
|
|
5996
|
+
onDragOver: (e) => {
|
|
5997
|
+
e.preventDefault();
|
|
5998
|
+
if (!disabled) setIsDragOver(true);
|
|
5999
|
+
},
|
|
6000
|
+
onDragLeave: () => setIsDragOver(false),
|
|
6001
|
+
onDrop: handleDrop,
|
|
6002
|
+
className: cn(
|
|
6003
|
+
"flex flex-col items-center justify-center gap-2",
|
|
6004
|
+
"rounded-card border-rule-strong bg-surface border border-dashed",
|
|
6005
|
+
"font-body p-8 text-center",
|
|
6006
|
+
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
6007
|
+
"motion-reduce:transition-none",
|
|
6008
|
+
// Hover (when not disabled)
|
|
6009
|
+
!disabled && "hover:border-brand-line hover:bg-brand-bg/40",
|
|
6010
|
+
// Drag-over → Pro purple highlight
|
|
6011
|
+
isDragOver && "border-brand-line bg-brand-bg",
|
|
6012
|
+
disabled && "border-rule bg-bg-disabled text-fg-disabled cursor-not-allowed",
|
|
6013
|
+
!disabled && "cursor-pointer",
|
|
6014
|
+
// Keyboard focus lands on the (visually hidden) file input.
|
|
6015
|
+
"has-[input:focus-visible]:[box-shadow:var(--shadow-focus-ring)]"
|
|
5487
6016
|
),
|
|
5488
|
-
|
|
5489
|
-
/* @__PURE__ */ jsx(
|
|
5490
|
-
|
|
5491
|
-
|
|
5492
|
-
|
|
5493
|
-
|
|
5494
|
-
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
|
|
5498
|
-
|
|
5499
|
-
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
|
|
5505
|
-
|
|
6017
|
+
children: [
|
|
6018
|
+
/* @__PURE__ */ jsx(
|
|
6019
|
+
"input",
|
|
6020
|
+
{
|
|
6021
|
+
ref: inputRef,
|
|
6022
|
+
id: inputId,
|
|
6023
|
+
type: "file",
|
|
6024
|
+
...slot(fileUploadAnatomy, "input"),
|
|
6025
|
+
accept,
|
|
6026
|
+
multiple,
|
|
6027
|
+
onChange: (e) => {
|
|
6028
|
+
if (e.target.files) handleFiles(e.target.files);
|
|
6029
|
+
e.target.value = "";
|
|
6030
|
+
},
|
|
6031
|
+
className: "fixed -top-[9999px] -left-[9999px] opacity-0",
|
|
6032
|
+
onKeyDown: (e) => {
|
|
6033
|
+
if (e.key !== "Enter" && e.key !== " ") return;
|
|
6034
|
+
e.preventDefault();
|
|
6035
|
+
e.currentTarget.click();
|
|
6036
|
+
},
|
|
6037
|
+
disabled,
|
|
6038
|
+
tabIndex: wrapperOwnsFocus ? -1 : void 0
|
|
6039
|
+
}
|
|
6040
|
+
),
|
|
6041
|
+
children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6042
|
+
/* @__PURE__ */ jsx(
|
|
6043
|
+
"div",
|
|
6044
|
+
{
|
|
6045
|
+
className: cn(
|
|
6046
|
+
"rounded-icon flex size-10 items-center justify-center transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
6047
|
+
isDragOver ? "bg-brand text-fg-on-brand" : "bg-brand-bg text-brand"
|
|
6048
|
+
),
|
|
6049
|
+
"aria-hidden": "true",
|
|
6050
|
+
children: /* @__PURE__ */ jsx(UploadIcon, { className: "size-5" })
|
|
6051
|
+
}
|
|
6052
|
+
),
|
|
6053
|
+
/* @__PURE__ */ jsxs("div", { className: "text-fg-3 text-sm", children: [
|
|
6054
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg font-medium", children: "Click to upload" }),
|
|
6055
|
+
" or drag and drop"
|
|
6056
|
+
] }),
|
|
6057
|
+
accept && /* @__PURE__ */ jsxs("p", { className: "text-fg-4 font-mono text-[10.5px]", children: [
|
|
6058
|
+
"Accepted: ",
|
|
6059
|
+
accept
|
|
6060
|
+
] }),
|
|
6061
|
+
maxSize && /* @__PURE__ */ jsxs("p", { className: "text-fg-4 font-mono text-[10.5px]", children: [
|
|
6062
|
+
"Max size: ",
|
|
6063
|
+
formatBytes(maxSize)
|
|
6064
|
+
] })
|
|
6065
|
+
] })
|
|
6066
|
+
]
|
|
6067
|
+
}
|
|
6068
|
+
),
|
|
6069
|
+
error && /* @__PURE__ */ jsx(
|
|
6070
|
+
"p",
|
|
6071
|
+
{
|
|
6072
|
+
role: "alert",
|
|
6073
|
+
...slot(fileUploadAnatomy, "error"),
|
|
6074
|
+
className: "text-danger-fg mt-2 text-sm",
|
|
6075
|
+
children: error
|
|
6076
|
+
}
|
|
6077
|
+
)
|
|
6078
|
+
]
|
|
6079
|
+
}
|
|
6080
|
+
);
|
|
5506
6081
|
}
|
|
5507
6082
|
function formatBytes(bytes) {
|
|
5508
6083
|
if (bytes < 1024) return `${bytes} B`;
|
|
@@ -5609,7 +6184,7 @@ IconTile.displayName = "IconTile";
|
|
|
5609
6184
|
var inputVariants = cva(
|
|
5610
6185
|
[
|
|
5611
6186
|
"flex w-full rounded-input border bg-surface font-body text-fg",
|
|
5612
|
-
|
|
6187
|
+
microInteractions.control,
|
|
5613
6188
|
"placeholder:text-fg-4",
|
|
5614
6189
|
"focus-visible:outline-none focus-visible:[border-color:var(--focus-ring-border)]",
|
|
5615
6190
|
"focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
@@ -5627,7 +6202,10 @@ var inputVariants = cva(
|
|
|
5627
6202
|
inputSize: {
|
|
5628
6203
|
sm: "h-8 px-2.5 py-1 text-xs",
|
|
5629
6204
|
md: "h-9 px-3 py-2 text-[13px]",
|
|
5630
|
-
lg: "h-11 px-3.5 py-2.5 text-sm"
|
|
6205
|
+
lg: "h-11 px-3.5 py-2.5 text-sm",
|
|
6206
|
+
compact: "h-8 px-2.5 py-1 text-[13px]",
|
|
6207
|
+
default: "h-10 px-3 py-2 text-sm",
|
|
6208
|
+
comfortable: "h-12 px-3.5 py-2.5 text-base"
|
|
5631
6209
|
}
|
|
5632
6210
|
},
|
|
5633
6211
|
defaultVariants: {
|
|
@@ -5639,7 +6217,10 @@ var inputVariants = cva(
|
|
|
5639
6217
|
var floatingLabelSize = {
|
|
5640
6218
|
sm: "text-xs",
|
|
5641
6219
|
md: "text-[13px]",
|
|
5642
|
-
lg: "text-sm"
|
|
6220
|
+
lg: "text-sm",
|
|
6221
|
+
compact: "text-[13px]",
|
|
6222
|
+
default: "text-sm",
|
|
6223
|
+
comfortable: "text-base"
|
|
5643
6224
|
};
|
|
5644
6225
|
var Input = forwardRef(function Input2({
|
|
5645
6226
|
label,
|
|
@@ -5653,6 +6234,7 @@ var Input = forwardRef(function Input2({
|
|
|
5653
6234
|
className,
|
|
5654
6235
|
id: providedId,
|
|
5655
6236
|
placeholder,
|
|
6237
|
+
onWheel,
|
|
5656
6238
|
...props
|
|
5657
6239
|
}, ref) {
|
|
5658
6240
|
const generatedId = useId();
|
|
@@ -5663,12 +6245,25 @@ var Input = forwardRef(function Input2({
|
|
|
5663
6245
|
const inputType = isPassword && showPassword ? "text" : type;
|
|
5664
6246
|
const isFloating = !!floatingLabel && !!label;
|
|
5665
6247
|
const resolvedPlaceholder = isFloating ? placeholder ?? " " : placeholder;
|
|
6248
|
+
const handleWheel = inputType === "number" ? (event) => {
|
|
6249
|
+
onWheel?.(event);
|
|
6250
|
+
if (!event.defaultPrevented) event.currentTarget.blur();
|
|
6251
|
+
} : onWheel;
|
|
5666
6252
|
return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
5667
|
-
label && !isFloating && /* @__PURE__ */ jsx(
|
|
6253
|
+
label && !isFloating && /* @__PURE__ */ jsx(
|
|
6254
|
+
"label",
|
|
6255
|
+
{
|
|
6256
|
+
htmlFor: id,
|
|
6257
|
+
...slot(inputAnatomy, "label"),
|
|
6258
|
+
className: "text-fg mb-1.5 block text-[13px] leading-none font-medium",
|
|
6259
|
+
children: label
|
|
6260
|
+
}
|
|
6261
|
+
),
|
|
5668
6262
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
5669
6263
|
prefixIcon && /* @__PURE__ */ jsx(
|
|
5670
6264
|
"span",
|
|
5671
6265
|
{
|
|
6266
|
+
...slot(inputAnatomy, "icon-start"),
|
|
5672
6267
|
className: "text-fg-4 pointer-events-none absolute top-1/2 left-3 -translate-y-1/2 [&>svg]:size-4",
|
|
5673
6268
|
"aria-hidden": "true",
|
|
5674
6269
|
children: prefixIcon
|
|
@@ -5683,13 +6278,21 @@ var Input = forwardRef(function Input2({
|
|
|
5683
6278
|
placeholder: resolvedPlaceholder,
|
|
5684
6279
|
"aria-invalid": !!error || void 0,
|
|
5685
6280
|
"aria-describedby": error ? errorId : void 0,
|
|
6281
|
+
...slot(inputAnatomy, "root"),
|
|
6282
|
+
...stateAttributes({
|
|
6283
|
+
variant: variant ?? "default",
|
|
6284
|
+
size: inputSize ?? "md",
|
|
6285
|
+
disabled: props.disabled,
|
|
6286
|
+
invalid: !!error
|
|
6287
|
+
}),
|
|
5686
6288
|
className: cn(
|
|
5687
6289
|
inputVariants({ variant, inputSize }),
|
|
5688
6290
|
prefixIcon && "pl-9",
|
|
5689
6291
|
(suffixIcon || isPassword) && "pr-9",
|
|
5690
|
-
isFloating && "peer placeholder:text-
|
|
6292
|
+
isFloating && "peer focus:placeholder:text-fg-4 placeholder:text-transparent",
|
|
5691
6293
|
className
|
|
5692
6294
|
),
|
|
6295
|
+
onWheel: handleWheel,
|
|
5693
6296
|
...props
|
|
5694
6297
|
}
|
|
5695
6298
|
),
|
|
@@ -5699,6 +6302,7 @@ var Input = forwardRef(function Input2({
|
|
|
5699
6302
|
"label",
|
|
5700
6303
|
{
|
|
5701
6304
|
htmlFor: id,
|
|
6305
|
+
...slot(inputAnatomy, "label"),
|
|
5702
6306
|
className: cn(
|
|
5703
6307
|
"pointer-events-none absolute left-3 origin-left px-1 leading-none",
|
|
5704
6308
|
"bg-surface text-fg-4",
|
|
@@ -5724,22 +6328,32 @@ var Input = forwardRef(function Input2({
|
|
|
5724
6328
|
{
|
|
5725
6329
|
type: "button",
|
|
5726
6330
|
onClick: () => setShowPassword((prev) => !prev),
|
|
6331
|
+
...slot(inputAnatomy, "password-toggle"),
|
|
5727
6332
|
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",
|
|
5728
6333
|
"aria-label": showPassword ? "Hide password" : "Show password",
|
|
5729
|
-
tabIndex: -1,
|
|
5730
6334
|
children: showPassword ? /* @__PURE__ */ jsx(EyeOffIcon, { className: "size-4", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(EyeIcon, { className: "size-4", "aria-hidden": "true" })
|
|
5731
6335
|
}
|
|
5732
6336
|
),
|
|
5733
6337
|
suffixIcon && !isPassword && /* @__PURE__ */ jsx(
|
|
5734
6338
|
"span",
|
|
5735
6339
|
{
|
|
6340
|
+
...slot(inputAnatomy, "icon-end"),
|
|
5736
6341
|
className: "text-fg-4 pointer-events-none absolute top-1/2 right-3 -translate-y-1/2 [&>svg]:size-4",
|
|
5737
6342
|
"aria-hidden": "true",
|
|
5738
6343
|
children: suffixIcon
|
|
5739
6344
|
}
|
|
5740
6345
|
)
|
|
5741
6346
|
] }),
|
|
5742
|
-
error && /* @__PURE__ */ jsx(
|
|
6347
|
+
error && /* @__PURE__ */ jsx(
|
|
6348
|
+
"p",
|
|
6349
|
+
{
|
|
6350
|
+
id: errorId,
|
|
6351
|
+
role: "alert",
|
|
6352
|
+
...slot(inputAnatomy, "error"),
|
|
6353
|
+
className: "text-danger-fg mt-1.5 text-xs",
|
|
6354
|
+
children: error
|
|
6355
|
+
}
|
|
6356
|
+
)
|
|
5743
6357
|
] });
|
|
5744
6358
|
});
|
|
5745
6359
|
Input.displayName = "Input";
|
|
@@ -5822,10 +6436,27 @@ var labelVariants = cva(
|
|
|
5822
6436
|
);
|
|
5823
6437
|
var Label4 = React39.forwardRef(
|
|
5824
6438
|
function Label5({ children, required, className, ...props }, ref) {
|
|
5825
|
-
return /* @__PURE__ */ jsxs(
|
|
5826
|
-
|
|
5827
|
-
|
|
5828
|
-
|
|
6439
|
+
return /* @__PURE__ */ jsxs(
|
|
6440
|
+
LabelPrimitive.Root,
|
|
6441
|
+
{
|
|
6442
|
+
ref,
|
|
6443
|
+
...slot(labelAnatomy, "root"),
|
|
6444
|
+
className: cn(labelVariants(), className),
|
|
6445
|
+
...props,
|
|
6446
|
+
children: [
|
|
6447
|
+
children,
|
|
6448
|
+
required && /* @__PURE__ */ jsx(
|
|
6449
|
+
"span",
|
|
6450
|
+
{
|
|
6451
|
+
...slot(labelAnatomy, "required"),
|
|
6452
|
+
className: "text-danger-fg ml-0.5",
|
|
6453
|
+
"aria-hidden": "true",
|
|
6454
|
+
children: "*"
|
|
6455
|
+
}
|
|
6456
|
+
)
|
|
6457
|
+
]
|
|
6458
|
+
}
|
|
6459
|
+
);
|
|
5829
6460
|
}
|
|
5830
6461
|
);
|
|
5831
6462
|
Label4.displayName = LabelPrimitive.Root.displayName;
|
|
@@ -5843,10 +6474,27 @@ var LinkButton = forwardRef(function LinkButton2({
|
|
|
5843
6474
|
...props
|
|
5844
6475
|
}, ref) {
|
|
5845
6476
|
const classes = cn(buttonVariants({ variant, size }), className);
|
|
6477
|
+
const root = { ...slot(linkButtonAnatomy, "root"), ...stateAttributes({ variant, size }) };
|
|
5846
6478
|
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5847
|
-
iconLeft && /* @__PURE__ */ jsx(
|
|
6479
|
+
iconLeft && /* @__PURE__ */ jsx(
|
|
6480
|
+
"span",
|
|
6481
|
+
{
|
|
6482
|
+
...slot(linkButtonAnatomy, "icon-start"),
|
|
6483
|
+
className: "inline-flex shrink-0",
|
|
6484
|
+
"aria-hidden": "true",
|
|
6485
|
+
children: iconLeft
|
|
6486
|
+
}
|
|
6487
|
+
),
|
|
5848
6488
|
children,
|
|
5849
|
-
iconRight && /* @__PURE__ */ jsx(
|
|
6489
|
+
iconRight && /* @__PURE__ */ jsx(
|
|
6490
|
+
"span",
|
|
6491
|
+
{
|
|
6492
|
+
...slot(linkButtonAnatomy, "icon-end"),
|
|
6493
|
+
className: "inline-flex shrink-0",
|
|
6494
|
+
"aria-hidden": "true",
|
|
6495
|
+
children: iconRight
|
|
6496
|
+
}
|
|
6497
|
+
)
|
|
5850
6498
|
] });
|
|
5851
6499
|
if (external) {
|
|
5852
6500
|
const safeRel = rel ?? (target === "_blank" ? "noopener noreferrer" : void 0);
|
|
@@ -5855,6 +6503,7 @@ var LinkButton = forwardRef(function LinkButton2({
|
|
|
5855
6503
|
{
|
|
5856
6504
|
ref,
|
|
5857
6505
|
href,
|
|
6506
|
+
...root,
|
|
5858
6507
|
className: classes,
|
|
5859
6508
|
target,
|
|
5860
6509
|
rel: safeRel,
|
|
@@ -5863,7 +6512,7 @@ var LinkButton = forwardRef(function LinkButton2({
|
|
|
5863
6512
|
}
|
|
5864
6513
|
);
|
|
5865
6514
|
}
|
|
5866
|
-
return /* @__PURE__ */ jsx(Link, { ref, href, className: classes, target, rel, ...props, children: content });
|
|
6515
|
+
return /* @__PURE__ */ jsx(Link, { ref, href, ...root, className: classes, target, rel, ...props, children: content });
|
|
5867
6516
|
});
|
|
5868
6517
|
LinkButton.displayName = "LinkButton";
|
|
5869
6518
|
var Skeleton = forwardRef(function Skeleton2({ className, ...props }, ref) {
|
|
@@ -5871,7 +6520,7 @@ var Skeleton = forwardRef(function Skeleton2({ className, ...props }, ref) {
|
|
|
5871
6520
|
"div",
|
|
5872
6521
|
{
|
|
5873
6522
|
ref,
|
|
5874
|
-
className: cn("skeleton bg-bg-3 rounded-icon animate-pulse", className),
|
|
6523
|
+
className: cn("skeleton bg-bg-3 rounded-icon animate-pulse motion-reduce:animate-none", className),
|
|
5875
6524
|
"aria-hidden": "true",
|
|
5876
6525
|
...props
|
|
5877
6526
|
}
|
|
@@ -5883,7 +6532,7 @@ var SkeletonText = forwardRef(function SkeletonText2({ lines = 3, className, ...
|
|
|
5883
6532
|
"div",
|
|
5884
6533
|
{
|
|
5885
6534
|
className: cn(
|
|
5886
|
-
"skeleton bg-bg-3 rounded-icon h-4 animate-pulse",
|
|
6535
|
+
"skeleton bg-bg-3 rounded-icon h-4 animate-pulse motion-reduce:animate-none",
|
|
5887
6536
|
i === lines - 1 && "w-3/4"
|
|
5888
6537
|
)
|
|
5889
6538
|
},
|
|
@@ -5897,7 +6546,7 @@ var SkeletonCircle = forwardRef(
|
|
|
5897
6546
|
"div",
|
|
5898
6547
|
{
|
|
5899
6548
|
ref,
|
|
5900
|
-
className: cn("skeleton bg-bg-3 animate-pulse rounded-full", className),
|
|
6549
|
+
className: cn("skeleton bg-bg-3 animate-pulse rounded-full motion-reduce:animate-none", className),
|
|
5901
6550
|
style: { width: size, height: size },
|
|
5902
6551
|
"aria-hidden": "true",
|
|
5903
6552
|
...props
|
|
@@ -6366,7 +7015,7 @@ function OTPInput({
|
|
|
6366
7015
|
"has-[:disabled]:[&_[aria-hidden=true]]:border-rule",
|
|
6367
7016
|
"has-[:disabled]:[&_[aria-hidden=true]]:text-fg-disabled"
|
|
6368
7017
|
),
|
|
6369
|
-
render: ({ slots }) => /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2.5", role: "group", "aria-label": "One-time password", children: slots.map((
|
|
7018
|
+
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)) })
|
|
6370
7019
|
}
|
|
6371
7020
|
),
|
|
6372
7021
|
error && /* @__PURE__ */ jsx("p", { id: errorId, role: "alert", className: "text-danger-fg text-center text-xs", children: error })
|
|
@@ -6420,7 +7069,7 @@ function getPageNumbers(current, total, siblings) {
|
|
|
6420
7069
|
}
|
|
6421
7070
|
return [1, "ellipsis", ...range(leftSibling, rightSibling), "ellipsis", total];
|
|
6422
7071
|
}
|
|
6423
|
-
var
|
|
7072
|
+
var NAV_BUTTON2 = cn(
|
|
6424
7073
|
"inline-flex size-7 items-center justify-center rounded-btn text-fg-3",
|
|
6425
7074
|
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
6426
7075
|
"hover:bg-bg-2 hover:text-fg",
|
|
@@ -6458,18 +7107,28 @@ var Pagination = forwardRef(function Pagination2({
|
|
|
6458
7107
|
{
|
|
6459
7108
|
ref,
|
|
6460
7109
|
"aria-label": `Pagination, page ${currentPage} of ${totalPages}`,
|
|
7110
|
+
...slot(paginationAnatomy, "root"),
|
|
6461
7111
|
className: cn("flex items-center justify-between gap-4", className),
|
|
6462
7112
|
...props,
|
|
6463
7113
|
children: [
|
|
6464
|
-
/* @__PURE__ */ jsx(
|
|
6465
|
-
|
|
7114
|
+
/* @__PURE__ */ jsx(
|
|
7115
|
+
"span",
|
|
7116
|
+
{
|
|
7117
|
+
...slot(paginationAnatomy, "label"),
|
|
7118
|
+
className: "text-fg-4 shrink-0 font-mono text-[11px] tracking-[0.02em] tabular-nums",
|
|
7119
|
+
children: contextLabel
|
|
7120
|
+
}
|
|
7121
|
+
),
|
|
7122
|
+
/* @__PURE__ */ jsxs("div", { ...slot(paginationAnatomy, "pages"), className: "flex items-center gap-0.5", children: [
|
|
6466
7123
|
/* @__PURE__ */ jsx(
|
|
6467
7124
|
"button",
|
|
6468
7125
|
{
|
|
6469
7126
|
type: "button",
|
|
6470
7127
|
onClick: () => onPageChange(currentPage - 1),
|
|
6471
7128
|
disabled: currentPage <= 1,
|
|
6472
|
-
|
|
7129
|
+
...slot(paginationAnatomy, "previous"),
|
|
7130
|
+
...stateAttributes({ disabled: currentPage <= 1 }),
|
|
7131
|
+
className: NAV_BUTTON2,
|
|
6473
7132
|
"aria-label": "Previous page",
|
|
6474
7133
|
children: /* @__PURE__ */ jsx(ChevronLeftIcon, { className: "size-3.5", "aria-hidden": "true" })
|
|
6475
7134
|
}
|
|
@@ -6478,6 +7137,7 @@ var Pagination = forwardRef(function Pagination2({
|
|
|
6478
7137
|
(page, i) => page === "ellipsis" ? /* @__PURE__ */ jsx(
|
|
6479
7138
|
"span",
|
|
6480
7139
|
{
|
|
7140
|
+
...slot(paginationAnatomy, "ellipsis"),
|
|
6481
7141
|
className: "text-fg-5 flex h-7 w-5 items-center justify-center select-none",
|
|
6482
7142
|
"aria-hidden": "true",
|
|
6483
7143
|
children: /* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "size-3.5" })
|
|
@@ -6489,6 +7149,8 @@ var Pagination = forwardRef(function Pagination2({
|
|
|
6489
7149
|
type: "button",
|
|
6490
7150
|
onClick: () => onPageChange(page),
|
|
6491
7151
|
"aria-current": page === currentPage ? "page" : void 0,
|
|
7152
|
+
...slot(paginationAnatomy, "page"),
|
|
7153
|
+
...stateAttributes({ selected: page === currentPage }),
|
|
6492
7154
|
className: cn(
|
|
6493
7155
|
PAGE_BUTTON_BASE,
|
|
6494
7156
|
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"
|
|
@@ -6504,7 +7166,9 @@ var Pagination = forwardRef(function Pagination2({
|
|
|
6504
7166
|
type: "button",
|
|
6505
7167
|
onClick: () => onPageChange(currentPage + 1),
|
|
6506
7168
|
disabled: currentPage >= totalPages,
|
|
6507
|
-
|
|
7169
|
+
...slot(paginationAnatomy, "next"),
|
|
7170
|
+
...stateAttributes({ disabled: currentPage >= totalPages }),
|
|
7171
|
+
className: NAV_BUTTON2,
|
|
6508
7172
|
"aria-label": "Next page",
|
|
6509
7173
|
children: /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5", "aria-hidden": "true" })
|
|
6510
7174
|
}
|
|
@@ -7016,11 +7680,11 @@ function CountrySelect({
|
|
|
7016
7680
|
type: "button",
|
|
7017
7681
|
disabled,
|
|
7018
7682
|
"aria-label": "Select country code",
|
|
7019
|
-
className: "rounded-input flex h-9 w-[90px] shrink-0 items-center gap-1.5 border border-
|
|
7683
|
+
className: "rounded-input flex h-9 w-[90px] shrink-0 items-center gap-1.5 border border-rule-strong bg-surface px-2.5 text-sm text-fg transition-colors focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none motion-reduce:transition-none disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled",
|
|
7020
7684
|
children: [
|
|
7021
7685
|
/* @__PURE__ */ jsx(CountryFlag, { iso: selected.iso }),
|
|
7022
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs tabular-nums text-
|
|
7023
|
-
/* @__PURE__ */ jsx(
|
|
7686
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs tabular-nums text-fg-3", children: selected.dialCode }),
|
|
7687
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, { className: "ml-auto size-3 shrink-0 text-fg-3", "aria-hidden": "true" })
|
|
7024
7688
|
]
|
|
7025
7689
|
}
|
|
7026
7690
|
) }),
|
|
@@ -7031,7 +7695,7 @@ function CountrySelect({
|
|
|
7031
7695
|
align: "start",
|
|
7032
7696
|
sideOffset: 4,
|
|
7033
7697
|
style: { zIndex: 9999, minWidth: 248 },
|
|
7034
|
-
className: "rounded-card border border-
|
|
7698
|
+
className: "rounded-card border border-rule bg-surface shadow-xl outline-none motion-reduce:transition-none",
|
|
7035
7699
|
onOpenAutoFocus: (e) => {
|
|
7036
7700
|
e.preventDefault();
|
|
7037
7701
|
searchRef.current?.focus({ preventScroll: true });
|
|
@@ -7041,11 +7705,8 @@ function CountrySelect({
|
|
|
7041
7705
|
if (e.key !== "Escape") e.stopPropagation();
|
|
7042
7706
|
},
|
|
7043
7707
|
children: [
|
|
7044
|
-
/* @__PURE__ */ jsx("div", { className: "rounded-t-card border-b border-
|
|
7045
|
-
/* @__PURE__ */
|
|
7046
|
-
/* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
|
|
7047
|
-
/* @__PURE__ */ jsx("path", { d: "m21 21-4.35-4.35" })
|
|
7048
|
-
] }),
|
|
7708
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-t-card border-b border-rule px-3 py-2.5", children: /* @__PURE__ */ jsxs("div", { className: "rounded-input flex items-center gap-2 border border-rule-strong bg-surface px-2.5", children: [
|
|
7709
|
+
/* @__PURE__ */ jsx(SearchIcon, { className: "size-3.5 shrink-0 text-fg-3", "aria-hidden": "true" }),
|
|
7049
7710
|
/* @__PURE__ */ jsx(
|
|
7050
7711
|
"input",
|
|
7051
7712
|
{
|
|
@@ -7054,7 +7715,7 @@ function CountrySelect({
|
|
|
7054
7715
|
onChange: (e) => setSearch(e.target.value),
|
|
7055
7716
|
onKeyDown: (e) => e.stopPropagation(),
|
|
7056
7717
|
placeholder: "Search country or code...",
|
|
7057
|
-
className: "h-8 flex-1 bg-transparent text-xs text-
|
|
7718
|
+
className: "h-8 flex-1 bg-transparent text-xs text-fg placeholder:text-fg-3 focus:outline-none"
|
|
7058
7719
|
}
|
|
7059
7720
|
)
|
|
7060
7721
|
] }) }),
|
|
@@ -7064,7 +7725,7 @@ function CountrySelect({
|
|
|
7064
7725
|
className: "rounded-b-card max-h-56 overflow-y-auto",
|
|
7065
7726
|
style: { overscrollBehavior: "contain" },
|
|
7066
7727
|
onWheel: (e) => e.stopPropagation(),
|
|
7067
|
-
children: filtered.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-4 py-3 text-center text-xs text-
|
|
7728
|
+
children: filtered.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-4 py-3 text-center text-xs text-fg-3", children: "No countries found" }) : filtered.map((c) => /* @__PURE__ */ jsxs(
|
|
7068
7729
|
"button",
|
|
7069
7730
|
{
|
|
7070
7731
|
type: "button",
|
|
@@ -7075,13 +7736,13 @@ function CountrySelect({
|
|
|
7075
7736
|
setSearch("");
|
|
7076
7737
|
},
|
|
7077
7738
|
className: cn(
|
|
7078
|
-
"flex w-full items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-
|
|
7079
|
-
c.iso === value && "bg-
|
|
7739
|
+
"flex w-full items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-bg-2/60 motion-reduce:transition-none",
|
|
7740
|
+
c.iso === value && "bg-brand-bg"
|
|
7080
7741
|
),
|
|
7081
7742
|
children: [
|
|
7082
7743
|
/* @__PURE__ */ jsx(CountryFlag, { iso: c.iso }),
|
|
7083
|
-
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-xs text-
|
|
7084
|
-
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-
|
|
7744
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-xs text-fg", children: c.name }),
|
|
7745
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-fg-3", children: c.dialCode })
|
|
7085
7746
|
]
|
|
7086
7747
|
},
|
|
7087
7748
|
c.iso
|
|
@@ -7120,7 +7781,7 @@ function PhoneCountryInput({
|
|
|
7120
7781
|
}
|
|
7121
7782
|
)
|
|
7122
7783
|
] }),
|
|
7123
|
-
error && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-
|
|
7784
|
+
error && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-danger-fg", children: error })
|
|
7124
7785
|
] });
|
|
7125
7786
|
}
|
|
7126
7787
|
var BARS = [
|
|
@@ -7182,7 +7843,7 @@ function PriorityIcon({ priority, size = 16, className, ...props }) {
|
|
|
7182
7843
|
);
|
|
7183
7844
|
}
|
|
7184
7845
|
var progressBarVariants = cva(
|
|
7185
|
-
"h-full rounded-full
|
|
7846
|
+
cn("h-full rounded-full", microInteractions.progress),
|
|
7186
7847
|
{
|
|
7187
7848
|
variants: {
|
|
7188
7849
|
variant: {
|
|
@@ -7222,7 +7883,7 @@ var ProgressBar = forwardRef(function ProgressBar2({ value, max = 100, label, sh
|
|
|
7222
7883
|
{
|
|
7223
7884
|
className: cn(
|
|
7224
7885
|
progressBarVariants({ variant: resolvedVariant }),
|
|
7225
|
-
isIndeterminate && "absolute inset-y-0 left-0 w-1/3 animate-[progress-indeterminate_1.4s_var(--ease-out-quart)_infinite]"
|
|
7886
|
+
isIndeterminate && "absolute inset-y-0 left-0 w-1/3 animate-[progress-indeterminate_1.4s_var(--ease-out-quart)_infinite] motion-reduce:animate-none"
|
|
7226
7887
|
),
|
|
7227
7888
|
style: isIndeterminate ? void 0 : { width: `${percentage}%` }
|
|
7228
7889
|
}
|
|
@@ -7239,7 +7900,7 @@ var ProgressBar = forwardRef(function ProgressBar2({ value, max = 100, label, sh
|
|
|
7239
7900
|
});
|
|
7240
7901
|
ProgressBar.displayName = "ProgressBar";
|
|
7241
7902
|
var progressRingVariants = cva(
|
|
7242
|
-
"transition-[stroke-dashoffset,stroke] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)]",
|
|
7903
|
+
"transition-[stroke-dashoffset,stroke] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
7243
7904
|
{
|
|
7244
7905
|
variants: {
|
|
7245
7906
|
variant: {
|
|
@@ -7311,7 +7972,15 @@ var ProgressRing = forwardRef(function ProgressRing2({ value, max = 100, size =
|
|
|
7311
7972
|
});
|
|
7312
7973
|
ProgressRing.displayName = "ProgressRing";
|
|
7313
7974
|
var RadioGroup3 = React39.forwardRef(function RadioGroup4({ className, ...props }, ref) {
|
|
7314
|
-
return /* @__PURE__ */ jsx(
|
|
7975
|
+
return /* @__PURE__ */ jsx(
|
|
7976
|
+
RadioGroupPrimitive.Root,
|
|
7977
|
+
{
|
|
7978
|
+
ref,
|
|
7979
|
+
...slot(radioGroupAnatomy, "root"),
|
|
7980
|
+
className: cn("grid gap-2", className),
|
|
7981
|
+
...props
|
|
7982
|
+
}
|
|
7983
|
+
);
|
|
7315
7984
|
});
|
|
7316
7985
|
RadioGroup3.displayName = RadioGroupPrimitive.Root.displayName;
|
|
7317
7986
|
var RadioGroupItem = React39.forwardRef(function RadioGroupItem2({ className, label, id: providedId, ...props }, ref) {
|
|
@@ -7322,9 +7991,10 @@ var RadioGroupItem = React39.forwardRef(function RadioGroupItem2({ className, la
|
|
|
7322
7991
|
{
|
|
7323
7992
|
ref,
|
|
7324
7993
|
id,
|
|
7994
|
+
...slot(radioGroupAnatomy, "item"),
|
|
7325
7995
|
className: cn(
|
|
7326
7996
|
"peer border-rule-strong bg-surface text-brand aspect-square size-4 shrink-0 rounded-full border",
|
|
7327
|
-
|
|
7997
|
+
microInteractions.selection,
|
|
7328
7998
|
"hover:border-fg-4",
|
|
7329
7999
|
"focus-visible:[border-color:var(--focus-ring-border)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
7330
8000
|
"data-[state=checked]:border-brand",
|
|
@@ -7333,7 +8003,14 @@ var RadioGroupItem = React39.forwardRef(function RadioGroupItem2({ className, la
|
|
|
7333
8003
|
className
|
|
7334
8004
|
),
|
|
7335
8005
|
...props,
|
|
7336
|
-
children: /* @__PURE__ */ jsx(
|
|
8006
|
+
children: /* @__PURE__ */ jsx(
|
|
8007
|
+
RadioGroupPrimitive.Indicator,
|
|
8008
|
+
{
|
|
8009
|
+
...slot(radioGroupAnatomy, "indicator"),
|
|
8010
|
+
className: "flex items-center justify-center",
|
|
8011
|
+
children: /* @__PURE__ */ jsx(CircleIcon, { className: "fill-brand text-brand size-2", "aria-hidden": "true" })
|
|
8012
|
+
}
|
|
8013
|
+
)
|
|
7337
8014
|
}
|
|
7338
8015
|
);
|
|
7339
8016
|
if (!label) return root;
|
|
@@ -7343,6 +8020,7 @@ var RadioGroupItem = React39.forwardRef(function RadioGroupItem2({ className, la
|
|
|
7343
8020
|
"label",
|
|
7344
8021
|
{
|
|
7345
8022
|
htmlFor: id,
|
|
8023
|
+
...slot(radioGroupAnatomy, "label"),
|
|
7346
8024
|
className: "text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed",
|
|
7347
8025
|
children: label
|
|
7348
8026
|
}
|
|
@@ -7410,6 +8088,7 @@ var SheetOverlay = React39.forwardRef(({ className, ...props }, ref) => /* @__PU
|
|
|
7410
8088
|
DialogPrimitive.Overlay,
|
|
7411
8089
|
{
|
|
7412
8090
|
ref,
|
|
8091
|
+
...slot(sheetAnatomy, "overlay"),
|
|
7413
8092
|
className: cn(
|
|
7414
8093
|
"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
|
|
7415
8094
|
"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
|
|
@@ -7471,6 +8150,8 @@ var SheetContent = React39.forwardRef(
|
|
|
7471
8150
|
DialogPrimitive.Content,
|
|
7472
8151
|
{
|
|
7473
8152
|
ref,
|
|
8153
|
+
...slot(sheetAnatomy, "content"),
|
|
8154
|
+
...stateAttributes({ size: width }),
|
|
7474
8155
|
className: cn(sheetVariants({ side: resolvedSide }), widthClass, className),
|
|
7475
8156
|
style: widthStyle,
|
|
7476
8157
|
...props,
|
|
@@ -7479,6 +8160,7 @@ var SheetContent = React39.forwardRef(
|
|
|
7479
8160
|
showCloseButton && /* @__PURE__ */ jsx(
|
|
7480
8161
|
DialogPrimitive.Close,
|
|
7481
8162
|
{
|
|
8163
|
+
...slot(sheetAnatomy, "close"),
|
|
7482
8164
|
className: cn(
|
|
7483
8165
|
"absolute top-4 right-4 inline-flex size-7 items-center justify-center",
|
|
7484
8166
|
"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -7497,11 +8179,19 @@ var SheetContent = React39.forwardRef(
|
|
|
7497
8179
|
}
|
|
7498
8180
|
);
|
|
7499
8181
|
SheetContent.displayName = DialogPrimitive.Content.displayName;
|
|
7500
|
-
var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
8182
|
+
var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
8183
|
+
"div",
|
|
8184
|
+
{
|
|
8185
|
+
...slot(sheetAnatomy, "header"),
|
|
8186
|
+
className: cn("flex flex-col gap-1.5 p-6 pr-12 pb-0", className),
|
|
8187
|
+
...props
|
|
8188
|
+
}
|
|
8189
|
+
);
|
|
7501
8190
|
SheetHeader.displayName = "SheetHeader";
|
|
7502
8191
|
var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
7503
8192
|
"div",
|
|
7504
8193
|
{
|
|
8194
|
+
...slot(sheetAnatomy, "footer"),
|
|
7505
8195
|
className: cn(
|
|
7506
8196
|
"border-rule mt-auto flex flex-col-reverse gap-2 border-t p-6 sm:flex-row sm:items-center sm:justify-end",
|
|
7507
8197
|
className
|
|
@@ -7514,6 +8204,7 @@ var SheetTitle = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
7514
8204
|
DialogPrimitive.Title,
|
|
7515
8205
|
{
|
|
7516
8206
|
ref,
|
|
8207
|
+
...slot(sheetAnatomy, "title"),
|
|
7517
8208
|
className: cn(
|
|
7518
8209
|
"font-display text-fg text-base leading-tight font-medium tracking-tight",
|
|
7519
8210
|
className
|
|
@@ -7522,7 +8213,15 @@ var SheetTitle = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
7522
8213
|
}
|
|
7523
8214
|
));
|
|
7524
8215
|
SheetTitle.displayName = DialogPrimitive.Title.displayName;
|
|
7525
|
-
var SheetDescription = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
8216
|
+
var SheetDescription = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
8217
|
+
DialogPrimitive.Description,
|
|
8218
|
+
{
|
|
8219
|
+
ref,
|
|
8220
|
+
...slot(sheetAnatomy, "description"),
|
|
8221
|
+
className: cn("text-fg-3 text-sm", className),
|
|
8222
|
+
...props
|
|
8223
|
+
}
|
|
8224
|
+
));
|
|
7526
8225
|
SheetDescription.displayName = DialogPrimitive.Description.displayName;
|
|
7527
8226
|
var MOBILE_QUERY = "(max-width: 639.98px)";
|
|
7528
8227
|
function useIsMobile() {
|
|
@@ -7601,7 +8300,8 @@ var RouteTransition = forwardRef(
|
|
|
7601
8300
|
{
|
|
7602
8301
|
className: cn(
|
|
7603
8302
|
"animate-in fade-in-0 slide-in-from-bottom-2",
|
|
7604
|
-
"duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]"
|
|
8303
|
+
"duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]",
|
|
8304
|
+
"motion-reduce:animate-none"
|
|
7605
8305
|
),
|
|
7606
8306
|
children
|
|
7607
8307
|
},
|
|
@@ -7672,8 +8372,7 @@ function useDebounce(value, delay = 300) {
|
|
|
7672
8372
|
var searchInputVariants = cva(
|
|
7673
8373
|
[
|
|
7674
8374
|
"flex w-full rounded-input border border-rule-strong bg-surface font-body text-fg",
|
|
7675
|
-
|
|
7676
|
-
"motion-reduce:transition-none",
|
|
8375
|
+
microInteractions.control,
|
|
7677
8376
|
"placeholder:text-fg-4",
|
|
7678
8377
|
"focus-visible:outline-none focus-visible:[border-color:var(--focus-ring-border)]",
|
|
7679
8378
|
"focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
@@ -7690,7 +8389,10 @@ var searchInputVariants = cva(
|
|
|
7690
8389
|
// FilterChip at their `sm` tier in a toolbar row.
|
|
7691
8390
|
sm: "h-8 pl-8 pr-8 text-[13px]",
|
|
7692
8391
|
md: "h-9 pl-9 pr-9 text-[13px]",
|
|
7693
|
-
lg: "h-11 pl-10 pr-10 text-sm"
|
|
8392
|
+
lg: "h-11 pl-10 pr-10 text-sm",
|
|
8393
|
+
compact: "h-8 pl-8 pr-8 text-[13px]",
|
|
8394
|
+
default: "h-10 pl-9 pr-9 text-sm",
|
|
8395
|
+
comfortable: "h-12 pl-10 pr-10 text-base"
|
|
7694
8396
|
}
|
|
7695
8397
|
},
|
|
7696
8398
|
defaultVariants: {
|
|
@@ -7720,53 +8422,64 @@ var SearchInput = React39.forwardRef(
|
|
|
7720
8422
|
onSearch?.(debouncedValue);
|
|
7721
8423
|
}, [debouncedValue, onSearch]);
|
|
7722
8424
|
const sz = inputSize ?? "md";
|
|
7723
|
-
const
|
|
7724
|
-
const
|
|
7725
|
-
const
|
|
7726
|
-
|
|
7727
|
-
|
|
7728
|
-
|
|
7729
|
-
|
|
7730
|
-
|
|
7731
|
-
|
|
7732
|
-
|
|
7733
|
-
|
|
8425
|
+
const isCompact = sz === "sm" || sz === "compact";
|
|
8426
|
+
const isComfortable = sz === "lg" || sz === "comfortable";
|
|
8427
|
+
const iconLeftClass = isCompact ? "left-2.5" : "left-3";
|
|
8428
|
+
const iconRightClass = isCompact ? "right-2" : isComfortable ? "right-3" : "right-2.5";
|
|
8429
|
+
const iconSizeClass = isCompact ? "size-3.5" : "size-4";
|
|
8430
|
+
return /* @__PURE__ */ jsxs(
|
|
8431
|
+
"div",
|
|
8432
|
+
{
|
|
8433
|
+
...slot(searchInputAnatomy, "root"),
|
|
8434
|
+
...stateAttributes({ size: sz, disabled }),
|
|
8435
|
+
className: cn("relative w-full", className),
|
|
8436
|
+
children: [
|
|
8437
|
+
/* @__PURE__ */ jsx(
|
|
8438
|
+
SearchIcon,
|
|
8439
|
+
{
|
|
8440
|
+
...slot(searchInputAnatomy, "icon"),
|
|
8441
|
+
className: cn(
|
|
8442
|
+
"text-fg-4 pointer-events-none absolute top-1/2 -translate-y-1/2",
|
|
8443
|
+
iconLeftClass,
|
|
8444
|
+
iconSizeClass
|
|
8445
|
+
),
|
|
8446
|
+
"aria-hidden": "true"
|
|
8447
|
+
}
|
|
7734
8448
|
),
|
|
7735
|
-
|
|
7736
|
-
|
|
7737
|
-
|
|
7738
|
-
|
|
7739
|
-
|
|
7740
|
-
|
|
7741
|
-
|
|
7742
|
-
|
|
7743
|
-
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
...props
|
|
7749
|
-
}
|
|
7750
|
-
),
|
|
7751
|
-
value && !disabled && /* @__PURE__ */ jsx(
|
|
7752
|
-
"button",
|
|
7753
|
-
{
|
|
7754
|
-
type: "button",
|
|
7755
|
-
onClick: () => onValueChange(""),
|
|
7756
|
-
className: cn(
|
|
7757
|
-
"rounded-pill text-fg-4 absolute top-1/2 -translate-y-1/2 p-0.5",
|
|
7758
|
-
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
7759
|
-
"motion-reduce:transition-none",
|
|
7760
|
-
"hover:text-fg",
|
|
7761
|
-
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
7762
|
-
iconRightClass
|
|
8449
|
+
/* @__PURE__ */ jsx(
|
|
8450
|
+
"input",
|
|
8451
|
+
{
|
|
8452
|
+
ref,
|
|
8453
|
+
type: "search",
|
|
8454
|
+
value,
|
|
8455
|
+
onChange: (e) => onValueChange(e.target.value),
|
|
8456
|
+
placeholder,
|
|
8457
|
+
disabled,
|
|
8458
|
+
...slot(searchInputAnatomy, "control"),
|
|
8459
|
+
className: cn(searchInputVariants({ inputSize })),
|
|
8460
|
+
...props
|
|
8461
|
+
}
|
|
7763
8462
|
),
|
|
7764
|
-
|
|
7765
|
-
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
|
|
8463
|
+
value && !disabled && /* @__PURE__ */ jsx(
|
|
8464
|
+
"button",
|
|
8465
|
+
{
|
|
8466
|
+
type: "button",
|
|
8467
|
+
onClick: () => onValueChange(""),
|
|
8468
|
+
...slot(searchInputAnatomy, "clear"),
|
|
8469
|
+
className: cn(
|
|
8470
|
+
"rounded-pill text-fg-4 absolute top-1/2 -translate-y-1/2 p-0.5",
|
|
8471
|
+
microInteractions.control,
|
|
8472
|
+
"hover:text-fg",
|
|
8473
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
8474
|
+
iconRightClass
|
|
8475
|
+
),
|
|
8476
|
+
"aria-label": "Clear search",
|
|
8477
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: iconSizeClass, "aria-hidden": "true" })
|
|
8478
|
+
}
|
|
8479
|
+
)
|
|
8480
|
+
]
|
|
8481
|
+
}
|
|
8482
|
+
);
|
|
7770
8483
|
}
|
|
7771
8484
|
);
|
|
7772
8485
|
SearchInput.displayName = "SearchInput";
|
|
@@ -7874,20 +8587,39 @@ function SearchSelect({
|
|
|
7874
8587
|
}
|
|
7875
8588
|
}, [onCreate, trimmedSearch]);
|
|
7876
8589
|
const inputRef = React39.useRef(null);
|
|
8590
|
+
const listRef = React39.useRef(null);
|
|
7877
8591
|
const listboxId = React39.useId();
|
|
7878
|
-
const
|
|
7879
|
-
inputRef.current
|
|
7880
|
-
|
|
7881
|
-
|
|
7882
|
-
|
|
8592
|
+
const syncInputRelationships = React39.useCallback(() => {
|
|
8593
|
+
const input = inputRef.current;
|
|
8594
|
+
if (!input) return;
|
|
8595
|
+
input.removeAttribute("aria-labelledby");
|
|
8596
|
+
input.removeAttribute("aria-activedescendant");
|
|
8597
|
+
const controls = listRef.current?.id || listboxId;
|
|
8598
|
+
if (controls && input.ownerDocument.getElementById(controls)) {
|
|
8599
|
+
input.setAttribute("aria-controls", controls);
|
|
8600
|
+
} else {
|
|
8601
|
+
input.removeAttribute("aria-controls");
|
|
8602
|
+
}
|
|
7883
8603
|
}, [listboxId]);
|
|
8604
|
+
const setInputRef = React39.useCallback(
|
|
8605
|
+
(node) => {
|
|
8606
|
+
inputRef.current = node;
|
|
8607
|
+
syncInputRelationships();
|
|
8608
|
+
},
|
|
8609
|
+
[syncInputRelationships]
|
|
8610
|
+
);
|
|
8611
|
+
const setListRef = React39.useCallback(
|
|
8612
|
+
(node) => {
|
|
8613
|
+
listRef.current = node;
|
|
8614
|
+
syncInputRelationships();
|
|
8615
|
+
},
|
|
8616
|
+
[syncInputRelationships]
|
|
8617
|
+
);
|
|
7884
8618
|
const singleValue = closeOnSelect ? selected[0] ?? null : null;
|
|
7885
8619
|
const showValue = singleValue !== null && !open;
|
|
7886
8620
|
const popoverOpen = open && !disabled;
|
|
7887
8621
|
React39.useEffect(() => {
|
|
7888
|
-
|
|
7889
|
-
inputRef.current?.setAttribute("aria-controls", listboxId);
|
|
7890
|
-
inputRef.current?.removeAttribute("aria-activedescendant");
|
|
8622
|
+
syncInputRelationships();
|
|
7891
8623
|
});
|
|
7892
8624
|
React39.useEffect(() => {
|
|
7893
8625
|
if (open && closeOnSelect) {
|
|
@@ -8048,7 +8780,6 @@ function SearchSelect({
|
|
|
8048
8780
|
},
|
|
8049
8781
|
placeholder,
|
|
8050
8782
|
"aria-label": placeholder,
|
|
8051
|
-
"aria-controls": listboxId,
|
|
8052
8783
|
disabled,
|
|
8053
8784
|
className: cn(
|
|
8054
8785
|
"font-body text-fg flex-1 bg-transparent py-2 pr-3 pl-9 text-[13px] outline-none",
|
|
@@ -8097,7 +8828,7 @@ function SearchSelect({
|
|
|
8097
8828
|
/* @__PURE__ */ jsxs(
|
|
8098
8829
|
Command.List,
|
|
8099
8830
|
{
|
|
8100
|
-
|
|
8831
|
+
ref: setListRef,
|
|
8101
8832
|
className: cn(
|
|
8102
8833
|
// No top padding: a sticky group heading pins at top-0, so any
|
|
8103
8834
|
// top padding would leave a strip above it where the previous
|
|
@@ -8401,6 +9132,7 @@ function SideDrawer({
|
|
|
8401
9132
|
/* @__PURE__ */ jsx(
|
|
8402
9133
|
DialogPrimitive.Overlay,
|
|
8403
9134
|
{
|
|
9135
|
+
...slot(sideDrawerAnatomy, "overlay"),
|
|
8404
9136
|
className: cn(
|
|
8405
9137
|
"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]",
|
|
8406
9138
|
"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]",
|
|
@@ -8412,6 +9144,8 @@ function SideDrawer({
|
|
|
8412
9144
|
/* @__PURE__ */ jsxs(
|
|
8413
9145
|
DialogPrimitive.Content,
|
|
8414
9146
|
{
|
|
9147
|
+
...slot(sideDrawerAnatomy, "root"),
|
|
9148
|
+
...stateAttributes({ size: width }),
|
|
8415
9149
|
className: cn(sideDrawerVariants({ side, width })),
|
|
8416
9150
|
"aria-describedby": void 0,
|
|
8417
9151
|
children: [
|
|
@@ -8425,35 +9159,58 @@ function SideDrawer({
|
|
|
8425
9159
|
);
|
|
8426
9160
|
}
|
|
8427
9161
|
function SideDrawerHeader({ title, subtitle, onClose, className }) {
|
|
8428
|
-
return /* @__PURE__ */ jsx(
|
|
8429
|
-
|
|
8430
|
-
|
|
8431
|
-
|
|
8432
|
-
|
|
8433
|
-
|
|
8434
|
-
|
|
8435
|
-
|
|
8436
|
-
|
|
8437
|
-
|
|
8438
|
-
|
|
8439
|
-
|
|
8440
|
-
|
|
8441
|
-
|
|
8442
|
-
|
|
8443
|
-
|
|
8444
|
-
|
|
8445
|
-
|
|
8446
|
-
|
|
8447
|
-
|
|
8448
|
-
|
|
9162
|
+
return /* @__PURE__ */ jsx(
|
|
9163
|
+
"div",
|
|
9164
|
+
{
|
|
9165
|
+
...slot(sideDrawerAnatomy, "header"),
|
|
9166
|
+
className: cn("border-rule bg-surface shrink-0 border-b px-6 py-4", className),
|
|
9167
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
|
|
9168
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
9169
|
+
/* @__PURE__ */ jsx(
|
|
9170
|
+
"h2",
|
|
9171
|
+
{
|
|
9172
|
+
...slot(sideDrawerAnatomy, "heading"),
|
|
9173
|
+
className: "font-display text-fg line-clamp-1 text-base leading-tight font-medium tracking-tight",
|
|
9174
|
+
children: title
|
|
9175
|
+
}
|
|
9176
|
+
),
|
|
9177
|
+
subtitle && /* @__PURE__ */ jsx("p", { ...slot(sideDrawerAnatomy, "subtitle"), className: "text-fg-3 mt-1 text-sm", children: subtitle })
|
|
9178
|
+
] }),
|
|
9179
|
+
onClose && /* @__PURE__ */ jsx(
|
|
9180
|
+
"button",
|
|
9181
|
+
{
|
|
9182
|
+
type: "button",
|
|
9183
|
+
onClick: onClose,
|
|
9184
|
+
...slot(sideDrawerAnatomy, "close"),
|
|
9185
|
+
className: cn(
|
|
9186
|
+
"inline-flex size-7 shrink-0 items-center justify-center",
|
|
9187
|
+
"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
9188
|
+
"hover:bg-overlay-hover hover:text-fg",
|
|
9189
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
|
|
9190
|
+
),
|
|
9191
|
+
"aria-label": "Close",
|
|
9192
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "size-4", "aria-hidden": "true" })
|
|
9193
|
+
}
|
|
9194
|
+
)
|
|
9195
|
+
] })
|
|
9196
|
+
}
|
|
9197
|
+
);
|
|
8449
9198
|
}
|
|
8450
9199
|
function SideDrawerBody({ children, className }) {
|
|
8451
|
-
return /* @__PURE__ */ jsx(
|
|
9200
|
+
return /* @__PURE__ */ jsx(
|
|
9201
|
+
"div",
|
|
9202
|
+
{
|
|
9203
|
+
...slot(sideDrawerAnatomy, "body"),
|
|
9204
|
+
className: cn("scrollbar-thin flex-1 overflow-y-auto px-6 py-4", className),
|
|
9205
|
+
children
|
|
9206
|
+
}
|
|
9207
|
+
);
|
|
8452
9208
|
}
|
|
8453
9209
|
function SideDrawerFooter({ children, className }) {
|
|
8454
9210
|
return /* @__PURE__ */ jsx(
|
|
8455
9211
|
"div",
|
|
8456
9212
|
{
|
|
9213
|
+
...slot(sideDrawerAnatomy, "footer"),
|
|
8457
9214
|
className: cn(
|
|
8458
9215
|
"border-rule bg-surface shrink-0 border-t px-6 py-4",
|
|
8459
9216
|
"flex items-center justify-end gap-3",
|
|
@@ -9451,9 +10208,17 @@ var Switch = React39.forwardRef(
|
|
|
9451
10208
|
{
|
|
9452
10209
|
ref,
|
|
9453
10210
|
id,
|
|
10211
|
+
...slot(switchAnatomy, "root"),
|
|
10212
|
+
...stateAttributes({ size: size ?? "md" }),
|
|
9454
10213
|
className: cn(switchVariants({ size }), className),
|
|
9455
10214
|
...props,
|
|
9456
|
-
children: /* @__PURE__ */ jsx(
|
|
10215
|
+
children: /* @__PURE__ */ jsx(
|
|
10216
|
+
SwitchPrimitive.Thumb,
|
|
10217
|
+
{
|
|
10218
|
+
...slot(switchAnatomy, "thumb"),
|
|
10219
|
+
className: cn(switchThumbVariants({ size }))
|
|
10220
|
+
}
|
|
10221
|
+
)
|
|
9457
10222
|
}
|
|
9458
10223
|
);
|
|
9459
10224
|
if (!label) return root;
|
|
@@ -9463,6 +10228,7 @@ var Switch = React39.forwardRef(
|
|
|
9463
10228
|
"label",
|
|
9464
10229
|
{
|
|
9465
10230
|
htmlFor: id,
|
|
10231
|
+
...slot(switchAnatomy, "label"),
|
|
9466
10232
|
className: "text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed",
|
|
9467
10233
|
children: label
|
|
9468
10234
|
}
|
|
@@ -9475,6 +10241,7 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
|
|
|
9475
10241
|
return /* @__PURE__ */ jsx(
|
|
9476
10242
|
"div",
|
|
9477
10243
|
{
|
|
10244
|
+
...slot(tableAnatomy, "wrapper"),
|
|
9478
10245
|
className: cn(
|
|
9479
10246
|
"rounded-card border-rule-strong bg-surface w-full overflow-x-auto border shadow-quiet",
|
|
9480
10247
|
wrapperClassName
|
|
@@ -9483,6 +10250,7 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
|
|
|
9483
10250
|
"table",
|
|
9484
10251
|
{
|
|
9485
10252
|
ref,
|
|
10253
|
+
...slot(tableAnatomy, "root"),
|
|
9486
10254
|
className: cn("w-full caption-bottom border-collapse text-sm", className),
|
|
9487
10255
|
...props
|
|
9488
10256
|
}
|
|
@@ -9493,12 +10261,28 @@ var Table = forwardRef(function Table2({ className, wrapperClassName, ...props }
|
|
|
9493
10261
|
Table.displayName = "Table";
|
|
9494
10262
|
var TableHeader = forwardRef(
|
|
9495
10263
|
function TableHeader2({ className, ...props }, ref) {
|
|
9496
|
-
return /* @__PURE__ */ jsx(
|
|
10264
|
+
return /* @__PURE__ */ jsx(
|
|
10265
|
+
"thead",
|
|
10266
|
+
{
|
|
10267
|
+
ref,
|
|
10268
|
+
...slot(tableAnatomy, "header"),
|
|
10269
|
+
className: cn("[&_tr]:border-rule [&_tr]:border-b", className),
|
|
10270
|
+
...props
|
|
10271
|
+
}
|
|
10272
|
+
);
|
|
9497
10273
|
}
|
|
9498
10274
|
);
|
|
9499
10275
|
TableHeader.displayName = "TableHeader";
|
|
9500
10276
|
var TableBody = forwardRef(function TableBody2({ className, ...props }, ref) {
|
|
9501
|
-
return /* @__PURE__ */ jsx(
|
|
10277
|
+
return /* @__PURE__ */ jsx(
|
|
10278
|
+
"tbody",
|
|
10279
|
+
{
|
|
10280
|
+
ref,
|
|
10281
|
+
...slot(tableAnatomy, "body"),
|
|
10282
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
10283
|
+
...props
|
|
10284
|
+
}
|
|
10285
|
+
);
|
|
9502
10286
|
});
|
|
9503
10287
|
TableBody.displayName = "TableBody";
|
|
9504
10288
|
var TableFooter = forwardRef(
|
|
@@ -9507,6 +10291,7 @@ var TableFooter = forwardRef(
|
|
|
9507
10291
|
"tfoot",
|
|
9508
10292
|
{
|
|
9509
10293
|
ref,
|
|
10294
|
+
...slot(tableAnatomy, "footer"),
|
|
9510
10295
|
className: cn(
|
|
9511
10296
|
"border-rule bg-surface-2 border-t font-medium [&>tr]:last:border-b-0",
|
|
9512
10297
|
className
|
|
@@ -9522,6 +10307,7 @@ var TableRow = forwardRef(function TableRow2({ className, ...props }, ref) {
|
|
|
9522
10307
|
"tr",
|
|
9523
10308
|
{
|
|
9524
10309
|
ref,
|
|
10310
|
+
...slot(tableAnatomy, "row"),
|
|
9525
10311
|
className: cn(
|
|
9526
10312
|
"border-rule-soft border-b transition-colors duration-[var(--duration-instant)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
9527
10313
|
// G15 compound: selected wins over hover; selected+hover uses the
|
|
@@ -9540,6 +10326,7 @@ var TableHead = forwardRef(function TableHead2({ className, ...props }, ref) {
|
|
|
9540
10326
|
"th",
|
|
9541
10327
|
{
|
|
9542
10328
|
ref,
|
|
10329
|
+
...slot(tableAnatomy, "head"),
|
|
9543
10330
|
className: cn(
|
|
9544
10331
|
// Sentence-case column labels in the body font (Plus Jakarta Sans),
|
|
9545
10332
|
// quiet gray — not mono uppercase eyebrows.
|
|
@@ -9560,6 +10347,7 @@ var TableCell = forwardRef(function TableCell2({ className, ...props }, ref) {
|
|
|
9560
10347
|
"td",
|
|
9561
10348
|
{
|
|
9562
10349
|
ref,
|
|
10350
|
+
...slot(tableAnatomy, "cell"),
|
|
9563
10351
|
className: cn(
|
|
9564
10352
|
// 13px, fg-2, soft 1px row divider, tabular nums; airier vertical
|
|
9565
10353
|
// rhythm (py-3) for the taller rows in the catalog layout.
|
|
@@ -9574,7 +10362,15 @@ var TableCell = forwardRef(function TableCell2({ className, ...props }, ref) {
|
|
|
9574
10362
|
TableCell.displayName = "TableCell";
|
|
9575
10363
|
var TableCaption = forwardRef(
|
|
9576
10364
|
function TableCaption2({ className, ...props }, ref) {
|
|
9577
|
-
return /* @__PURE__ */ jsx(
|
|
10365
|
+
return /* @__PURE__ */ jsx(
|
|
10366
|
+
"caption",
|
|
10367
|
+
{
|
|
10368
|
+
ref,
|
|
10369
|
+
...slot(tableAnatomy, "caption"),
|
|
10370
|
+
className: cn("text-fg-3 mt-3 text-sm", className),
|
|
10371
|
+
...props
|
|
10372
|
+
}
|
|
10373
|
+
);
|
|
9578
10374
|
}
|
|
9579
10375
|
);
|
|
9580
10376
|
TableCaption.displayName = "TableCaption";
|
|
@@ -9598,8 +10394,8 @@ TabsList.displayName = TabsPrimitive.List.displayName;
|
|
|
9598
10394
|
var triggerVariants = cva(
|
|
9599
10395
|
cn(
|
|
9600
10396
|
"inline-flex items-center justify-center gap-2 text-[13px] font-medium",
|
|
9601
|
-
"text-fg-3
|
|
9602
|
-
|
|
10397
|
+
"text-fg-3",
|
|
10398
|
+
microInteractions.selection,
|
|
9603
10399
|
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
9604
10400
|
"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled",
|
|
9605
10401
|
"hover:text-fg"
|
|
@@ -9712,6 +10508,7 @@ var textareaVariants = cva(
|
|
|
9712
10508
|
[
|
|
9713
10509
|
"flex w-full rounded-input border bg-surface font-body text-fg",
|
|
9714
10510
|
"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]",
|
|
10511
|
+
"motion-reduce:transition-none",
|
|
9715
10512
|
"placeholder:text-fg-4",
|
|
9716
10513
|
"focus-visible:outline-none focus-visible:[border-color:var(--focus-ring-border)]",
|
|
9717
10514
|
"focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
@@ -9775,7 +10572,15 @@ var Textarea = forwardRef(function Textarea2({
|
|
|
9775
10572
|
}, [value, adjustHeight]);
|
|
9776
10573
|
const currentLength = typeof value === "string" ? value.length : typeof defaultValue === "string" ? defaultValue.length : 0;
|
|
9777
10574
|
return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
9778
|
-
label && /* @__PURE__ */ jsx(
|
|
10575
|
+
label && /* @__PURE__ */ jsx(
|
|
10576
|
+
"label",
|
|
10577
|
+
{
|
|
10578
|
+
htmlFor: id,
|
|
10579
|
+
...slot(textareaAnatomy, "label"),
|
|
10580
|
+
className: "text-fg mb-1.5 block text-[13px] leading-none font-medium",
|
|
10581
|
+
children: label
|
|
10582
|
+
}
|
|
10583
|
+
),
|
|
9779
10584
|
/* @__PURE__ */ jsx(
|
|
9780
10585
|
"textarea",
|
|
9781
10586
|
{
|
|
@@ -9786,6 +10591,13 @@ var Textarea = forwardRef(function Textarea2({
|
|
|
9786
10591
|
maxLength,
|
|
9787
10592
|
"aria-invalid": !!error || void 0,
|
|
9788
10593
|
"aria-describedby": error ? errorId : void 0,
|
|
10594
|
+
...slot(textareaAnatomy, "root"),
|
|
10595
|
+
...stateAttributes({
|
|
10596
|
+
variant: variant ?? "default",
|
|
10597
|
+
size: inputSize ?? "md",
|
|
10598
|
+
disabled: props.disabled,
|
|
10599
|
+
invalid: !!error
|
|
10600
|
+
}),
|
|
9789
10601
|
onChange: (e) => {
|
|
9790
10602
|
onChange?.(e);
|
|
9791
10603
|
adjustHeight();
|
|
@@ -9799,12 +10611,28 @@ var Textarea = forwardRef(function Textarea2({
|
|
|
9799
10611
|
}
|
|
9800
10612
|
),
|
|
9801
10613
|
(error || showCount && maxLength) && /* @__PURE__ */ jsxs("div", { className: "mt-1.5 flex items-center justify-between gap-2", children: [
|
|
9802
|
-
error ? /* @__PURE__ */ jsx(
|
|
9803
|
-
|
|
9804
|
-
|
|
9805
|
-
|
|
9806
|
-
|
|
9807
|
-
|
|
10614
|
+
error ? /* @__PURE__ */ jsx(
|
|
10615
|
+
"p",
|
|
10616
|
+
{
|
|
10617
|
+
id: errorId,
|
|
10618
|
+
role: "alert",
|
|
10619
|
+
...slot(textareaAnatomy, "error"),
|
|
10620
|
+
className: "text-danger-fg text-xs",
|
|
10621
|
+
children: error
|
|
10622
|
+
}
|
|
10623
|
+
) : /* @__PURE__ */ jsx("span", {}),
|
|
10624
|
+
showCount && maxLength && /* @__PURE__ */ jsxs(
|
|
10625
|
+
"span",
|
|
10626
|
+
{
|
|
10627
|
+
...slot(textareaAnatomy, "count"),
|
|
10628
|
+
className: "text-fg-4 ml-auto font-mono text-[11px]",
|
|
10629
|
+
children: [
|
|
10630
|
+
currentLength,
|
|
10631
|
+
"/",
|
|
10632
|
+
maxLength
|
|
10633
|
+
]
|
|
10634
|
+
}
|
|
10635
|
+
)
|
|
9808
10636
|
] })
|
|
9809
10637
|
] });
|
|
9810
10638
|
});
|
|
@@ -9877,6 +10705,7 @@ function ToastProvider({ children }) {
|
|
|
9877
10705
|
/* @__PURE__ */ jsx(
|
|
9878
10706
|
"div",
|
|
9879
10707
|
{
|
|
10708
|
+
...slot(toastAnatomy, "region"),
|
|
9880
10709
|
className: "pointer-events-none fixed top-4 right-4 z-[var(--z-toast)] flex flex-col gap-2",
|
|
9881
10710
|
role: "region",
|
|
9882
10711
|
"aria-live": "polite",
|
|
@@ -10000,6 +10829,8 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
10000
10829
|
role: hasContent ? "group" : isError ? "alert" : "status",
|
|
10001
10830
|
"aria-atomic": hasContent ? void 0 : true,
|
|
10002
10831
|
"data-state": exiting ? "closed" : "open",
|
|
10832
|
+
...slot(toastAnatomy, "root"),
|
|
10833
|
+
...stateAttributes({ variant: toast.variant ?? "default" }),
|
|
10003
10834
|
onPointerEnter: () => setPaused(true),
|
|
10004
10835
|
onPointerLeave: () => {
|
|
10005
10836
|
if (!dragRef.current) setPaused(false);
|
|
@@ -10036,6 +10867,7 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
10036
10867
|
/* @__PURE__ */ jsx(
|
|
10037
10868
|
"span",
|
|
10038
10869
|
{
|
|
10870
|
+
...slot(toastAnatomy, "icon"),
|
|
10039
10871
|
className: cn(
|
|
10040
10872
|
// Same-hue inset ring gives the tinted chip a crafted edge instead
|
|
10041
10873
|
// of a flat fill — definition without a heavy border.
|
|
@@ -10053,8 +10885,22 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
10053
10885
|
}
|
|
10054
10886
|
),
|
|
10055
10887
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
10056
|
-
toast.title && /* @__PURE__ */ jsx(
|
|
10057
|
-
|
|
10888
|
+
toast.title && /* @__PURE__ */ jsx(
|
|
10889
|
+
"p",
|
|
10890
|
+
{
|
|
10891
|
+
...slot(toastAnatomy, "title"),
|
|
10892
|
+
className: "text-fg text-sm leading-tight font-semibold",
|
|
10893
|
+
children: toast.title
|
|
10894
|
+
}
|
|
10895
|
+
),
|
|
10896
|
+
toast.description && /* @__PURE__ */ jsx(
|
|
10897
|
+
"p",
|
|
10898
|
+
{
|
|
10899
|
+
...slot(toastAnatomy, "description"),
|
|
10900
|
+
className: "text-fg-3 mt-0.5 text-sm leading-snug",
|
|
10901
|
+
children: toast.description
|
|
10902
|
+
}
|
|
10903
|
+
),
|
|
10058
10904
|
toast.action && /* @__PURE__ */ jsx(
|
|
10059
10905
|
"button",
|
|
10060
10906
|
{
|
|
@@ -10063,6 +10909,7 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
10063
10909
|
toast.action?.onClick();
|
|
10064
10910
|
close();
|
|
10065
10911
|
},
|
|
10912
|
+
...slot(toastAnatomy, "action"),
|
|
10066
10913
|
className: cn(
|
|
10067
10914
|
"text-brand mt-2 text-sm font-semibold",
|
|
10068
10915
|
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:underline motion-reduce:transition-none",
|
|
@@ -10077,6 +10924,7 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
10077
10924
|
{
|
|
10078
10925
|
type: "button",
|
|
10079
10926
|
onClick: close,
|
|
10927
|
+
...slot(toastAnatomy, "close"),
|
|
10080
10928
|
className: cn(
|
|
10081
10929
|
// size-7 click target with a -m-1 offset so the glyph keeps its
|
|
10082
10930
|
// top-right optical position while the hit area (and ring) grow.
|
|
@@ -10140,8 +10988,8 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
10140
10988
|
var itemVariants = cva(
|
|
10141
10989
|
cn(
|
|
10142
10990
|
"inline-flex items-center justify-center rounded-pill px-3 py-1.5 text-[13px] font-medium",
|
|
10143
|
-
"text-fg-3
|
|
10144
|
-
|
|
10991
|
+
"text-fg-3",
|
|
10992
|
+
microInteractions.selection,
|
|
10145
10993
|
"hover:bg-bg-2 hover:text-fg",
|
|
10146
10994
|
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]",
|
|
10147
10995
|
"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled",
|
|
@@ -10199,6 +11047,7 @@ var TooltipContent = React39.forwardRef(({ className, sideOffset = 6, ...props }
|
|
|
10199
11047
|
{
|
|
10200
11048
|
ref,
|
|
10201
11049
|
sideOffset,
|
|
11050
|
+
...slot(tooltipAnatomy, "content"),
|
|
10202
11051
|
className: cn(
|
|
10203
11052
|
"rounded-input border-rule-strong bg-surface z-[var(--z-tooltip)] max-w-xs border px-2.5 py-1.5",
|
|
10204
11053
|
"font-body text-fg shadow-pop text-xs leading-tight",
|
|
@@ -10221,11 +11070,11 @@ var VisuallyHidden = forwardRef(
|
|
|
10221
11070
|
VisuallyHidden.displayName = "VisuallyHidden";
|
|
10222
11071
|
var TONE_DOT = {
|
|
10223
11072
|
brand: "bg-brand",
|
|
10224
|
-
info: "bg-
|
|
10225
|
-
success: "bg-success",
|
|
10226
|
-
warning: "bg-warning",
|
|
10227
|
-
muted: "bg-
|
|
10228
|
-
danger: "bg-
|
|
11073
|
+
info: "bg-accent-2",
|
|
11074
|
+
success: "bg-success-fg",
|
|
11075
|
+
warning: "bg-warning-fg",
|
|
11076
|
+
muted: "bg-fg-4/40",
|
|
11077
|
+
danger: "bg-danger-fg"
|
|
10229
11078
|
};
|
|
10230
11079
|
function ChannelTabs({ tabs, value, onChange, className, ...props }) {
|
|
10231
11080
|
return /* @__PURE__ */ jsx(
|
|
@@ -10233,7 +11082,7 @@ function ChannelTabs({ tabs, value, onChange, className, ...props }) {
|
|
|
10233
11082
|
{
|
|
10234
11083
|
role: "tablist",
|
|
10235
11084
|
"aria-label": "Channel",
|
|
10236
|
-
className: cn("flex items-center gap-1 border-b border-
|
|
11085
|
+
className: cn("flex items-center gap-1 border-b border-rule bg-surface px-3 py-2", className),
|
|
10237
11086
|
...props,
|
|
10238
11087
|
children: tabs.map((tab) => {
|
|
10239
11088
|
const active = value === tab.value;
|
|
@@ -10246,9 +11095,9 @@ function ChannelTabs({ tabs, value, onChange, className, ...props }) {
|
|
|
10246
11095
|
"aria-selected": active,
|
|
10247
11096
|
onClick: () => onChange(tab.value),
|
|
10248
11097
|
className: cn(
|
|
10249
|
-
"flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium transition-colors",
|
|
10250
|
-
"focus-visible:
|
|
10251
|
-
active ? "border-brand bg-brand/5 text-brand" : "border-transparent text-
|
|
11098
|
+
"flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium transition-colors motion-reduce:transition-none",
|
|
11099
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
11100
|
+
active ? "border-brand bg-brand/5 text-brand" : "border-transparent text-fg-3 hover:text-fg"
|
|
10252
11101
|
),
|
|
10253
11102
|
children: [
|
|
10254
11103
|
/* @__PURE__ */ jsx(
|
|
@@ -10256,7 +11105,7 @@ function ChannelTabs({ tabs, value, onChange, className, ...props }) {
|
|
|
10256
11105
|
{
|
|
10257
11106
|
className: cn(
|
|
10258
11107
|
"size-1.5 rounded-full",
|
|
10259
|
-
active ? TONE_DOT[tab.tone ?? "muted"] : "bg-
|
|
11108
|
+
active ? TONE_DOT[tab.tone ?? "muted"] : "bg-fg-4/40"
|
|
10260
11109
|
),
|
|
10261
11110
|
"aria-hidden": true
|
|
10262
11111
|
}
|
|
@@ -10267,7 +11116,7 @@ function ChannelTabs({ tabs, value, onChange, className, ...props }) {
|
|
|
10267
11116
|
{
|
|
10268
11117
|
className: cn(
|
|
10269
11118
|
"ml-0.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[10px] font-semibold tabular-nums",
|
|
10270
|
-
active ? "bg-
|
|
11119
|
+
active ? "bg-bg/60" : "bg-bg-2 text-fg-3"
|
|
10271
11120
|
),
|
|
10272
11121
|
children: count
|
|
10273
11122
|
}
|
|
@@ -10283,12 +11132,12 @@ function ChannelTabs({ tabs, value, onChange, className, ...props }) {
|
|
|
10283
11132
|
ChannelTabs.displayName = "ChannelTabs";
|
|
10284
11133
|
var TONE_STYLES = {
|
|
10285
11134
|
brand: "bg-brand/10 text-brand border-brand/30",
|
|
10286
|
-
info: "bg-
|
|
10287
|
-
primary: "bg-
|
|
10288
|
-
success: "bg-success
|
|
10289
|
-
warning: "bg-warning
|
|
10290
|
-
danger: "bg-
|
|
10291
|
-
muted: "bg-
|
|
11135
|
+
info: "bg-accent-tint text-accent-2 border-accent/30",
|
|
11136
|
+
primary: "bg-brand-bg text-brand border-brand-line",
|
|
11137
|
+
success: "bg-success-bg text-success-fg border-success-line",
|
|
11138
|
+
warning: "bg-warning-bg text-warning-fg border-warning-line",
|
|
11139
|
+
danger: "bg-danger-bg text-danger-fg border-danger-line",
|
|
11140
|
+
muted: "bg-bg-2 text-fg-3 border-rule"
|
|
10292
11141
|
};
|
|
10293
11142
|
function IntentBadge({ tone = "muted", icon, children, className, ...props }) {
|
|
10294
11143
|
return /* @__PURE__ */ jsxs(
|
|
@@ -11563,7 +12412,7 @@ var Grid = forwardRef(function Grid2({
|
|
|
11563
12412
|
return /* @__PURE__ */ jsx("div", { ref, className: cn("overflow-x-auto", className), ...props, children: /* @__PURE__ */ jsxs(
|
|
11564
12413
|
"div",
|
|
11565
12414
|
{
|
|
11566
|
-
role: "
|
|
12415
|
+
role: "group",
|
|
11567
12416
|
"aria-label": ariaLabel,
|
|
11568
12417
|
className: "grid gap-2",
|
|
11569
12418
|
style: {
|
|
@@ -12139,6 +12988,7 @@ function QuestionOptionButton({
|
|
|
12139
12988
|
className: cn(
|
|
12140
12989
|
"group bg-surface flex w-full items-center gap-3 border text-left",
|
|
12141
12990
|
"transition-[border-color,background-color,color,box-shadow,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]",
|
|
12991
|
+
"motion-reduce:transition-none",
|
|
12142
12992
|
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
12143
12993
|
"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed",
|
|
12144
12994
|
compact ? "h-10 max-w-max rounded-[10px] px-3" : "min-h-16 rounded-[12px] px-7 py-4",
|
|
@@ -12152,7 +13002,7 @@ function QuestionOptionButton({
|
|
|
12152
13002
|
{
|
|
12153
13003
|
"aria-hidden": "true",
|
|
12154
13004
|
className: cn(
|
|
12155
|
-
"grid shrink-0 place-items-center rounded-full border transition-colors duration-[var(--duration-fast)]",
|
|
13005
|
+
"grid shrink-0 place-items-center rounded-full border transition-colors duration-[var(--duration-fast)] motion-reduce:transition-none",
|
|
12156
13006
|
compact ? "size-5" : "size-4",
|
|
12157
13007
|
selected ? "border-brand bg-brand text-fg-on-brand" : "border-rule-strong bg-surface group-hover:border-brand-line text-transparent"
|
|
12158
13008
|
),
|
|
@@ -12904,7 +13754,7 @@ var EngagementTimelineStep = forwardRef(
|
|
|
12904
13754
|
}
|
|
12905
13755
|
);
|
|
12906
13756
|
EngagementTimelineStep.displayName = "EngagementTimelineStep";
|
|
12907
|
-
var ROW_BASE = "group/row flex w-full items-center gap-1.5 rounded-lg px-2.5 py-1 text-left text-[12px] font-medium transition-colors duration-[
|
|
13757
|
+
var ROW_BASE = "group/row flex w-full items-center gap-1.5 rounded-lg px-2.5 py-1 text-left text-[12px] font-medium transition-colors duration-[var(--motion-duration-feedback)] motion-reduce:transition-none";
|
|
12908
13758
|
var ROW_INACTIVE = "text-fg-2 hover:bg-surface-2 hover:text-fg";
|
|
12909
13759
|
var ROW_ACTIVE = "bg-brand-bg text-brand font-semibold";
|
|
12910
13760
|
var BADGE_BASE = "ml-auto min-w-[18px] rounded-full px-[5px] py-px text-center text-[10px] font-[650] tabular-nums";
|
|
@@ -12948,7 +13798,7 @@ var FolderTree = forwardRef(function FolderTree2({ nodes, activeId, onSelect, de
|
|
|
12948
13798
|
toggle(node.id);
|
|
12949
13799
|
},
|
|
12950
13800
|
className: cn(
|
|
12951
|
-
"shrink-0 text-fg-4 transition-transform duration-[
|
|
13801
|
+
"shrink-0 text-fg-4 transition-transform duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
12952
13802
|
isOpen && "rotate-90"
|
|
12953
13803
|
),
|
|
12954
13804
|
children: /* @__PURE__ */ jsx(ChevronRightIcon, { size: 13, "aria-hidden": "true" })
|
|
@@ -13011,7 +13861,7 @@ var ClientRailItem = forwardRef(
|
|
|
13011
13861
|
// Layout
|
|
13012
13862
|
"relative flex w-full items-center gap-[11px] border-b border-rule px-[14px] py-[11px] text-left",
|
|
13013
13863
|
// Motion
|
|
13014
|
-
"transition-colors duration-[
|
|
13864
|
+
"transition-colors duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
13015
13865
|
// Cursor
|
|
13016
13866
|
"cursor-pointer",
|
|
13017
13867
|
// State — hover only when not active to avoid override
|
|
@@ -13143,7 +13993,7 @@ function CheckboxSlot({
|
|
|
13143
13993
|
"div",
|
|
13144
13994
|
{
|
|
13145
13995
|
className: cn(
|
|
13146
|
-
"shrink-0 transition-opacity duration-[
|
|
13996
|
+
"shrink-0 transition-opacity duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
13147
13997
|
selected ? "opacity-100" : "opacity-0 group-hover:opacity-100",
|
|
13148
13998
|
className
|
|
13149
13999
|
),
|
|
@@ -13170,7 +14020,7 @@ function MoreActions({ menu }) {
|
|
|
13170
14020
|
type: "button",
|
|
13171
14021
|
className: cn(
|
|
13172
14022
|
"grid size-[30px] place-items-center rounded-[8px] text-fg-4",
|
|
13173
|
-
"transition-colors duration-[
|
|
14023
|
+
"transition-colors duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
13174
14024
|
"group-hover:text-fg-2 hover:bg-surface hover:text-brand hover:shadow-sm"
|
|
13175
14025
|
),
|
|
13176
14026
|
"aria-label": "More actions",
|
|
@@ -13210,7 +14060,7 @@ var DocumentFileRow = React39.forwardRef(
|
|
|
13210
14060
|
ref,
|
|
13211
14061
|
className: cn(
|
|
13212
14062
|
"group flex cursor-pointer items-center gap-[13px] border-b border-rule px-[14px] py-3",
|
|
13213
|
-
"transition-colors duration-[
|
|
14063
|
+
"transition-colors duration-[var(--motion-duration-feedback)] motion-reduce:transition-none hover:bg-surface-2",
|
|
13214
14064
|
selected && "bg-brand-bg",
|
|
13215
14065
|
className
|
|
13216
14066
|
),
|
|
@@ -13277,7 +14127,7 @@ var DocumentFileCard = React39.forwardRef(
|
|
|
13277
14127
|
ref,
|
|
13278
14128
|
className: cn(
|
|
13279
14129
|
"group relative cursor-pointer rounded-2xl border border-rule bg-surface p-3",
|
|
13280
|
-
"transition-[border-color,box-shadow,transform] duration-[
|
|
14130
|
+
"transition-[border-color,box-shadow,transform] duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
13281
14131
|
"hover:-translate-y-0.5 hover:border-rule-strong hover:shadow-sm",
|
|
13282
14132
|
selected && "border-brand bg-brand-bg",
|
|
13283
14133
|
className
|
|
@@ -13342,7 +14192,7 @@ var DocumentFileLine = React39.forwardRef(
|
|
|
13342
14192
|
ref,
|
|
13343
14193
|
className: cn(
|
|
13344
14194
|
"flex items-center gap-2.5 rounded-[10px] px-2.5 py-2",
|
|
13345
|
-
"transition-colors duration-[
|
|
14195
|
+
"transition-colors duration-[var(--motion-duration-feedback)] motion-reduce:transition-none hover:bg-surface-2",
|
|
13346
14196
|
className
|
|
13347
14197
|
),
|
|
13348
14198
|
...props,
|
|
@@ -13377,7 +14227,7 @@ var DocumentFileLine = React39.forwardRef(
|
|
|
13377
14227
|
onClick: onOpen,
|
|
13378
14228
|
className: cn(
|
|
13379
14229
|
"grid size-7 shrink-0 place-items-center rounded-lg text-fg-4",
|
|
13380
|
-
"transition-colors duration-[
|
|
14230
|
+
"transition-colors duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
13381
14231
|
"hover:bg-surface hover:text-brand",
|
|
13382
14232
|
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]"
|
|
13383
14233
|
),
|
|
@@ -13451,7 +14301,7 @@ function ChecklistItemRow({ item }) {
|
|
|
13451
14301
|
"div",
|
|
13452
14302
|
{
|
|
13453
14303
|
className: cn(
|
|
13454
|
-
"rounded-xl border px-3.5 py-2.5 shadow-quiet transition-colors duration-[
|
|
14304
|
+
"rounded-xl border px-3.5 py-2.5 shadow-quiet transition-colors duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
13455
14305
|
done ? "border-success-line/70 bg-success-bg/30" : item.status === "in-review" ? "border-warning-line/70 bg-warning-bg/25" : "border-rule bg-surface"
|
|
13456
14306
|
),
|
|
13457
14307
|
children: [
|
|
@@ -13603,7 +14453,7 @@ var DocumentRequestField = forwardRef(
|
|
|
13603
14453
|
className: cn(
|
|
13604
14454
|
"ml-auto size-[26px] rounded-[7px] grid place-items-center",
|
|
13605
14455
|
"text-fg-4",
|
|
13606
|
-
"transition-colors duration-[
|
|
14456
|
+
"transition-colors duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
13607
14457
|
"hover:bg-danger-bg hover:text-danger-fg",
|
|
13608
14458
|
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]"
|
|
13609
14459
|
),
|
|
@@ -13748,7 +14598,15 @@ var NewMenu = forwardRef(function NewMenu2({ actions, groups, triggerLabel = "Ne
|
|
|
13748
14598
|
});
|
|
13749
14599
|
NewMenu.displayName = "NewMenu";
|
|
13750
14600
|
var Shell = forwardRef(function Shell2({ className, ...props }, ref) {
|
|
13751
|
-
return /* @__PURE__ */ jsx(
|
|
14601
|
+
return /* @__PURE__ */ jsx(
|
|
14602
|
+
"div",
|
|
14603
|
+
{
|
|
14604
|
+
ref,
|
|
14605
|
+
...slot(shellAnatomy, "root"),
|
|
14606
|
+
className: cn("bg-bg flex h-dvh w-full", className),
|
|
14607
|
+
...props
|
|
14608
|
+
}
|
|
14609
|
+
);
|
|
13752
14610
|
});
|
|
13753
14611
|
Shell.displayName = "Shell";
|
|
13754
14612
|
var Main = forwardRef(function Main2({ className, ...props }, ref) {
|
|
@@ -13756,6 +14614,7 @@ var Main = forwardRef(function Main2({ className, ...props }, ref) {
|
|
|
13756
14614
|
"main",
|
|
13757
14615
|
{
|
|
13758
14616
|
ref,
|
|
14617
|
+
...slot(shellAnatomy, "main"),
|
|
13759
14618
|
className: cn("flex min-w-0 flex-1 flex-col overflow-hidden", className),
|
|
13760
14619
|
...props
|
|
13761
14620
|
}
|
|
@@ -13775,6 +14634,7 @@ var Content16 = forwardRef(function Content17({ padTop, padBottom, className, st
|
|
|
13775
14634
|
role: "region",
|
|
13776
14635
|
"aria-label": "Page content",
|
|
13777
14636
|
tabIndex: 0,
|
|
14637
|
+
...slot(shellAnatomy, "content"),
|
|
13778
14638
|
className: cn("flex-1 overflow-y-auto p-[var(--content-pad)]", className),
|
|
13779
14639
|
style: paddingStyle,
|
|
13780
14640
|
...props
|
|
@@ -13958,6 +14818,7 @@ var Sidebar = React39.forwardRef(function Sidebar2({
|
|
|
13958
14818
|
"data-labels": labelsHidden ? "hide" : "show",
|
|
13959
14819
|
"data-collapsible": collapsible ? "true" : void 0,
|
|
13960
14820
|
"data-variant": variant,
|
|
14821
|
+
...slot(sidebarAnatomy, "root"),
|
|
13961
14822
|
onMouseEnter: handleEnter,
|
|
13962
14823
|
onMouseLeave: handleLeave,
|
|
13963
14824
|
style: { width: effectiveWidth, ...style },
|
|
@@ -13975,7 +14836,7 @@ var Sidebar = React39.forwardRef(function Sidebar2({
|
|
|
13975
14836
|
// movement) but well short of `--duration-slow` (which feels
|
|
13976
14837
|
// sluggish). `will-change` hints the compositor so the column
|
|
13977
14838
|
// doesn't repaint every frame mid-transition.
|
|
13978
|
-
"transition-[width,box-shadow] duration-[
|
|
14839
|
+
"transition-[width,box-shadow] duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
|
|
13979
14840
|
"[will-change:width]",
|
|
13980
14841
|
// Overlay (hover-peek OR programmatic peek-lock): float above the
|
|
13981
14842
|
// canvas without reflowing layout. Driven by `data-overlay` so a
|
|
@@ -14017,6 +14878,7 @@ var SidebarTrigger = React39.forwardRef(
|
|
|
14017
14878
|
onClick?.(e);
|
|
14018
14879
|
if (!e.defaultPrevented) toggle();
|
|
14019
14880
|
},
|
|
14881
|
+
...slot(sidebarAnatomy, "trigger"),
|
|
14020
14882
|
className: cn(
|
|
14021
14883
|
"inline-flex size-7 shrink-0 items-center justify-center rounded-md",
|
|
14022
14884
|
"text-fg-3 hover:bg-bg-3 hover:text-fg",
|
|
@@ -14063,6 +14925,8 @@ var SidebarPinButton = React39.forwardRef(
|
|
|
14063
14925
|
onClick?.(e);
|
|
14064
14926
|
if (!e.defaultPrevented) setState(isPinned ? "rail" : "expanded");
|
|
14065
14927
|
},
|
|
14928
|
+
...slot(sidebarAnatomy, "pin"),
|
|
14929
|
+
...stateAttributes({ selected: isPinned }),
|
|
14066
14930
|
className: cn(
|
|
14067
14931
|
"inline-flex size-7 shrink-0 items-center justify-center rounded-md",
|
|
14068
14932
|
"text-fg-4 hover:bg-bg-3 hover:text-fg aria-pressed:text-fg",
|
|
@@ -14119,6 +14983,7 @@ var SidebarBrand = React39.forwardRef(
|
|
|
14119
14983
|
"div",
|
|
14120
14984
|
{
|
|
14121
14985
|
ref,
|
|
14986
|
+
...slot(sidebarAnatomy, "brand"),
|
|
14122
14987
|
className: cn(
|
|
14123
14988
|
"flex min-w-0 items-center gap-2 px-2.5 pt-1 pb-4",
|
|
14124
14989
|
className
|
|
@@ -14136,6 +15001,7 @@ var SidebarBrandText = React39.forwardRef(
|
|
|
14136
15001
|
{
|
|
14137
15002
|
ref,
|
|
14138
15003
|
"aria-hidden": "false",
|
|
15004
|
+
...slot(sidebarAnatomy, "brand-text"),
|
|
14139
15005
|
className: cn(
|
|
14140
15006
|
// line-clamp-1 (not `truncate`) so multi-word wordmarks clip at a
|
|
14141
15007
|
// word boundary instead of mid-word when the rail is narrow.
|
|
@@ -14143,7 +15009,7 @@ var SidebarBrandText = React39.forwardRef(
|
|
|
14143
15009
|
// Smooth fade + width collapse on rail. Keeps the wordmark
|
|
14144
15010
|
// legible up to the moment the column reaches rail width, then
|
|
14145
15011
|
// fully drops out (visibility:hidden cuts hit-testing).
|
|
14146
|
-
"transition-[opacity,max-width] duration-[
|
|
15012
|
+
"transition-[opacity,max-width] duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
|
|
14147
15013
|
"max-w-[160px] opacity-100",
|
|
14148
15014
|
"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible",
|
|
14149
15015
|
className
|
|
@@ -14173,6 +15039,7 @@ var SidebarSection = React39.forwardRef(
|
|
|
14173
15039
|
ref,
|
|
14174
15040
|
role: ariaLabel ? "group" : void 0,
|
|
14175
15041
|
"aria-label": ariaLabel,
|
|
15042
|
+
...slot(sidebarAnatomy, "section"),
|
|
14176
15043
|
className: cn(
|
|
14177
15044
|
"mb-4",
|
|
14178
15045
|
// In rail, the visible section labels disappear and the only
|
|
@@ -14187,15 +15054,17 @@ var SidebarSection = React39.forwardRef(
|
|
|
14187
15054
|
label != null && /* @__PURE__ */ jsx(
|
|
14188
15055
|
"div",
|
|
14189
15056
|
{
|
|
15057
|
+
...slot(sidebarAnatomy, "section-header"),
|
|
14190
15058
|
className: cn(
|
|
14191
15059
|
"mb-1 flex items-center justify-between px-2.5 py-1",
|
|
14192
|
-
"transition-opacity duration-[
|
|
15060
|
+
"transition-opacity duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
|
|
14193
15061
|
"opacity-100",
|
|
14194
15062
|
"group-data-[labels=hide]/sidebar:invisible group-data-[labels=hide]/sidebar:opacity-0"
|
|
14195
15063
|
),
|
|
14196
15064
|
children: /* @__PURE__ */ jsx(
|
|
14197
15065
|
"span",
|
|
14198
15066
|
{
|
|
15067
|
+
...slot(sidebarAnatomy, "section-label"),
|
|
14199
15068
|
className: cn(
|
|
14200
15069
|
"font-mono text-[11px] tracking-[0.14em] uppercase",
|
|
14201
15070
|
tone === "muted" ? "text-fg-3" : "text-brand"
|
|
@@ -14237,6 +15106,7 @@ var SidebarLink = React39.forwardRef(
|
|
|
14237
15106
|
"data-active": active ? "true" : void 0,
|
|
14238
15107
|
"aria-current": active ? "page" : void 0,
|
|
14239
15108
|
"aria-label": accessibleLabel,
|
|
15109
|
+
...slot(sidebarAnatomy, "link"),
|
|
14240
15110
|
className: cn(
|
|
14241
15111
|
"group/link relative mb-px flex items-center gap-2.5 rounded-md px-2.5 py-1.5",
|
|
14242
15112
|
"text-fg-2 text-[13px] font-normal no-underline",
|
|
@@ -14276,6 +15146,7 @@ var SidebarLink = React39.forwardRef(
|
|
|
14276
15146
|
/* @__PURE__ */ jsx(
|
|
14277
15147
|
"span",
|
|
14278
15148
|
{
|
|
15149
|
+
...slot(sidebarAnatomy, "link-label"),
|
|
14279
15150
|
className: cn(
|
|
14280
15151
|
// Flex row so a trailing <SidebarLinkBadge> (ml-auto) aligns
|
|
14281
15152
|
// to the right edge with a gap from the label, instead of
|
|
@@ -14283,7 +15154,7 @@ var SidebarLink = React39.forwardRef(
|
|
|
14283
15154
|
// auto margin, which is why "Billing$48k" rendered glued.
|
|
14284
15155
|
// Single-line label clips via overflow; badge stays put.
|
|
14285
15156
|
"flex min-w-0 flex-1 items-center gap-1.5 overflow-hidden whitespace-nowrap",
|
|
14286
|
-
"transition-[opacity,max-width] duration-[
|
|
15157
|
+
"transition-[opacity,max-width] duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
|
|
14287
15158
|
"max-w-full opacity-100",
|
|
14288
15159
|
"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible"
|
|
14289
15160
|
),
|
|
@@ -14307,6 +15178,7 @@ var SidebarLinkLabel = React39.forwardRef(
|
|
|
14307
15178
|
"span",
|
|
14308
15179
|
{
|
|
14309
15180
|
ref,
|
|
15181
|
+
...slot(sidebarAnatomy, "link-label"),
|
|
14310
15182
|
className: cn(
|
|
14311
15183
|
// line-clamp-1 (not `truncate`) so multi-word labels clip at a
|
|
14312
15184
|
// word boundary; collapses cleanly with the rail-mode max-width
|
|
@@ -14315,7 +15187,7 @@ var SidebarLinkLabel = React39.forwardRef(
|
|
|
14315
15187
|
// Fade + collapse instead of hard display:none so a single
|
|
14316
15188
|
// 180ms opacity tween covers all labels in lockstep with the
|
|
14317
15189
|
// 220ms aside-width transition — no snap on the last frame.
|
|
14318
|
-
"transition-[opacity,max-width] duration-[
|
|
15190
|
+
"transition-[opacity,max-width] duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
|
|
14319
15191
|
"max-w-full opacity-100",
|
|
14320
15192
|
"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible",
|
|
14321
15193
|
className
|
|
@@ -14332,8 +15204,9 @@ var SidebarLinkAction = React39.forwardRef(
|
|
|
14332
15204
|
"span",
|
|
14333
15205
|
{
|
|
14334
15206
|
ref,
|
|
15207
|
+
...slot(sidebarAnatomy, "link-action"),
|
|
14335
15208
|
className: cn(
|
|
14336
|
-
"transition-opacity duration-[
|
|
15209
|
+
"transition-opacity duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
|
|
14337
15210
|
"opacity-100",
|
|
14338
15211
|
"group-data-[labels=hide]/sidebar:invisible group-data-[labels=hide]/sidebar:opacity-0",
|
|
14339
15212
|
className
|
|
@@ -14360,7 +15233,15 @@ var sidebarLinkBadgeVariants = cva(
|
|
|
14360
15233
|
);
|
|
14361
15234
|
var SidebarLinkBadge = React39.forwardRef(
|
|
14362
15235
|
function SidebarLinkBadge2({ tone, className, ...props }, ref) {
|
|
14363
|
-
return /* @__PURE__ */ jsx(
|
|
15236
|
+
return /* @__PURE__ */ jsx(
|
|
15237
|
+
"span",
|
|
15238
|
+
{
|
|
15239
|
+
ref,
|
|
15240
|
+
...slot(sidebarAnatomy, "link-badge"),
|
|
15241
|
+
className: cn(sidebarLinkBadgeVariants({ tone }), className),
|
|
15242
|
+
...props
|
|
15243
|
+
}
|
|
15244
|
+
);
|
|
14364
15245
|
}
|
|
14365
15246
|
);
|
|
14366
15247
|
SidebarLinkBadge.displayName = "SidebarLinkBadge";
|
|
@@ -14431,72 +15312,86 @@ var SidebarLinkGroup = React39.forwardRef(
|
|
|
14431
15312
|
const labelSpan = /* @__PURE__ */ jsx(
|
|
14432
15313
|
"span",
|
|
14433
15314
|
{
|
|
15315
|
+
...slot(sidebarAnatomy, "link-label"),
|
|
14434
15316
|
className: cn(
|
|
14435
15317
|
// line-clamp-1 (not `truncate`) so multi-word labels clip at a
|
|
14436
15318
|
// word boundary; collapses cleanly with the rail-mode max-width
|
|
14437
15319
|
// animation since both rules only constrain visible content.
|
|
14438
15320
|
"min-w-0 flex-1 line-clamp-1",
|
|
14439
|
-
"transition-[opacity,max-width] duration-[
|
|
15321
|
+
"transition-[opacity,max-width] duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
|
|
14440
15322
|
"max-w-full opacity-100",
|
|
14441
15323
|
"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible"
|
|
14442
15324
|
),
|
|
14443
15325
|
children: label
|
|
14444
15326
|
}
|
|
14445
15327
|
);
|
|
14446
|
-
return /* @__PURE__ */ jsx(
|
|
14447
|
-
|
|
14448
|
-
|
|
14449
|
-
|
|
14450
|
-
|
|
14451
|
-
|
|
14452
|
-
|
|
14453
|
-
|
|
14454
|
-
|
|
14455
|
-
|
|
14456
|
-
|
|
14457
|
-
|
|
14458
|
-
|
|
14459
|
-
|
|
14460
|
-
|
|
14461
|
-
|
|
14462
|
-
|
|
14463
|
-
|
|
14464
|
-
|
|
14465
|
-
|
|
14466
|
-
|
|
14467
|
-
|
|
14468
|
-
|
|
14469
|
-
|
|
14470
|
-
|
|
14471
|
-
className: cn(
|
|
14472
|
-
"ml-px inline-flex size-7 shrink-0 items-center justify-center rounded-md",
|
|
14473
|
-
"text-fg-4 hover:bg-bg-3 hover:text-fg-2",
|
|
14474
|
-
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
14475
|
-
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
14476
|
-
"[&_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",
|
|
14477
|
-
// Hide in rail — content tree is hidden too, so the
|
|
14478
|
-
// affordance has nothing to control.
|
|
14479
|
-
"group-data-[labels=hide]/sidebar:hidden"
|
|
15328
|
+
return /* @__PURE__ */ jsx(
|
|
15329
|
+
"div",
|
|
15330
|
+
{
|
|
15331
|
+
ref,
|
|
15332
|
+
...slot(sidebarAnatomy, "group"),
|
|
15333
|
+
...stateAttributes({ state: open ? "open" : "closed" }),
|
|
15334
|
+
className: cn("mb-px", className),
|
|
15335
|
+
...props,
|
|
15336
|
+
children: /* @__PURE__ */ jsxs(Collapsible, { open, onOpenChange: setOpen, children: [
|
|
15337
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-stretch", children: [
|
|
15338
|
+
/* @__PURE__ */ jsxs(
|
|
15339
|
+
"a",
|
|
15340
|
+
{
|
|
15341
|
+
href,
|
|
15342
|
+
"data-active": active ? "true" : void 0,
|
|
15343
|
+
"aria-current": active ? "page" : void 0,
|
|
15344
|
+
"aria-label": getTextContent(label) || void 0,
|
|
15345
|
+
onClick: handleBodyClick,
|
|
15346
|
+
...slot(sidebarAnatomy, "group-link"),
|
|
15347
|
+
className: bodyClassName,
|
|
15348
|
+
children: [
|
|
15349
|
+
icon,
|
|
15350
|
+
labelSpan
|
|
15351
|
+
]
|
|
15352
|
+
}
|
|
14480
15353
|
),
|
|
14481
|
-
|
|
14482
|
-
|
|
14483
|
-
|
|
14484
|
-
|
|
14485
|
-
|
|
14486
|
-
|
|
14487
|
-
|
|
14488
|
-
|
|
14489
|
-
|
|
14490
|
-
|
|
14491
|
-
|
|
14492
|
-
|
|
14493
|
-
|
|
14494
|
-
|
|
14495
|
-
|
|
14496
|
-
|
|
14497
|
-
|
|
14498
|
-
|
|
14499
|
-
|
|
15354
|
+
/* @__PURE__ */ jsx(
|
|
15355
|
+
"button",
|
|
15356
|
+
{
|
|
15357
|
+
type: "button",
|
|
15358
|
+
"aria-expanded": open,
|
|
15359
|
+
"aria-controls": contentId,
|
|
15360
|
+
"aria-label": open ? "Collapse section" : "Expand section",
|
|
15361
|
+
onClick: handleChevronClick,
|
|
15362
|
+
...slot(sidebarAnatomy, "group-trigger"),
|
|
15363
|
+
className: cn(
|
|
15364
|
+
"ml-px inline-flex size-7 shrink-0 items-center justify-center rounded-md",
|
|
15365
|
+
"text-fg-4 hover:bg-bg-3 hover:text-fg-2",
|
|
15366
|
+
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
15367
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
15368
|
+
"[&_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",
|
|
15369
|
+
// Hide in rail — content tree is hidden too, so the
|
|
15370
|
+
// affordance has nothing to control.
|
|
15371
|
+
"group-data-[labels=hide]/sidebar:hidden"
|
|
15372
|
+
),
|
|
15373
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: open ? "" : "-rotate-90" })
|
|
15374
|
+
}
|
|
15375
|
+
)
|
|
15376
|
+
] }),
|
|
15377
|
+
/* @__PURE__ */ jsx(
|
|
15378
|
+
CollapsibleContent,
|
|
15379
|
+
{
|
|
15380
|
+
id: contentId,
|
|
15381
|
+
...slot(sidebarAnatomy, "group-content"),
|
|
15382
|
+
className: cn(
|
|
15383
|
+
// Indent column + connecting rule. Children render as
|
|
15384
|
+
// standard <SidebarLink>s and keep their own active-rail
|
|
15385
|
+
// indicator, which lands flush at the indented column's
|
|
15386
|
+
// left edge.
|
|
15387
|
+
"group-data-[labels=hide]/sidebar:hidden"
|
|
15388
|
+
),
|
|
15389
|
+
children: /* @__PURE__ */ jsx("div", { className: "border-rule mt-px ml-[18px] border-l pl-2", children })
|
|
15390
|
+
}
|
|
15391
|
+
)
|
|
15392
|
+
] })
|
|
15393
|
+
}
|
|
15394
|
+
);
|
|
14500
15395
|
}
|
|
14501
15396
|
);
|
|
14502
15397
|
SidebarLinkGroup.displayName = "SidebarLinkGroup";
|
|
@@ -14506,6 +15401,7 @@ var SidebarFooter = React39.forwardRef(
|
|
|
14506
15401
|
"div",
|
|
14507
15402
|
{
|
|
14508
15403
|
ref,
|
|
15404
|
+
...slot(sidebarAnatomy, "footer"),
|
|
14509
15405
|
className: cn(
|
|
14510
15406
|
"border-rule mt-auto flex items-center gap-2.5 border-t px-2 pt-2.5 pb-1",
|
|
14511
15407
|
"text-fg-3 text-xs",
|
|
@@ -14518,24 +15414,47 @@ var SidebarFooter = React39.forwardRef(
|
|
|
14518
15414
|
);
|
|
14519
15415
|
SidebarFooter.displayName = "SidebarFooter";
|
|
14520
15416
|
var SidebarUser = React39.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
|
|
14521
|
-
return /* @__PURE__ */ jsxs(
|
|
14522
|
-
|
|
14523
|
-
|
|
14524
|
-
|
|
14525
|
-
|
|
14526
|
-
|
|
14527
|
-
|
|
14528
|
-
|
|
14529
|
-
|
|
14530
|
-
|
|
14531
|
-
|
|
14532
|
-
|
|
14533
|
-
|
|
14534
|
-
|
|
14535
|
-
|
|
14536
|
-
|
|
14537
|
-
|
|
14538
|
-
|
|
15417
|
+
return /* @__PURE__ */ jsxs(
|
|
15418
|
+
"div",
|
|
15419
|
+
{
|
|
15420
|
+
ref,
|
|
15421
|
+
...slot(sidebarAnatomy, "user"),
|
|
15422
|
+
className: cn("flex min-w-0 items-center gap-2.5", className),
|
|
15423
|
+
...props,
|
|
15424
|
+
children: [
|
|
15425
|
+
/* @__PURE__ */ jsx(Avatar, { size: "sm", variant: "branded", name, src: avatarSrc ?? void 0 }),
|
|
15426
|
+
/* @__PURE__ */ jsxs(
|
|
15427
|
+
"div",
|
|
15428
|
+
{
|
|
15429
|
+
className: cn(
|
|
15430
|
+
"min-w-0 leading-tight",
|
|
15431
|
+
"transition-[opacity,max-width] duration-[var(--motion-duration-spatial)] ease-[var(--motion-ease-move)] motion-reduce:transition-none",
|
|
15432
|
+
"max-w-full opacity-100",
|
|
15433
|
+
"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible"
|
|
15434
|
+
),
|
|
15435
|
+
children: [
|
|
15436
|
+
/* @__PURE__ */ jsx(
|
|
15437
|
+
"div",
|
|
15438
|
+
{
|
|
15439
|
+
...slot(sidebarAnatomy, "user-name"),
|
|
15440
|
+
className: "text-fg line-clamp-1 text-[13px] font-medium",
|
|
15441
|
+
children: name
|
|
15442
|
+
}
|
|
15443
|
+
),
|
|
15444
|
+
subtitle != null && /* @__PURE__ */ jsx(
|
|
15445
|
+
"div",
|
|
15446
|
+
{
|
|
15447
|
+
...slot(sidebarAnatomy, "user-subtitle"),
|
|
15448
|
+
className: "text-fg-4 line-clamp-1 font-mono text-[10.5px]",
|
|
15449
|
+
children: subtitle
|
|
15450
|
+
}
|
|
15451
|
+
)
|
|
15452
|
+
]
|
|
15453
|
+
}
|
|
15454
|
+
)
|
|
15455
|
+
]
|
|
15456
|
+
}
|
|
15457
|
+
);
|
|
14539
15458
|
});
|
|
14540
15459
|
SidebarUser.displayName = "SidebarUser";
|
|
14541
15460
|
var SidebarBrandSwitcher = React39.forwardRef(
|
|
@@ -14572,6 +15491,7 @@ var SidebarBrandSwitcher = React39.forwardRef(
|
|
|
14572
15491
|
"div",
|
|
14573
15492
|
{
|
|
14574
15493
|
ref,
|
|
15494
|
+
...slot(sidebarBrandSwitcherAnatomy, "root"),
|
|
14575
15495
|
className: cn("flex min-w-0 items-center gap-2 px-2.5 pt-1 pb-4", className),
|
|
14576
15496
|
children: [
|
|
14577
15497
|
/* @__PURE__ */ jsxs(DropdownMenu, { open, onOpenChange: setOpen, children: [
|
|
@@ -14579,6 +15499,7 @@ var SidebarBrandSwitcher = React39.forwardRef(
|
|
|
14579
15499
|
DropdownMenuTrigger,
|
|
14580
15500
|
{
|
|
14581
15501
|
"aria-label": triggerLabel,
|
|
15502
|
+
...slot(sidebarBrandSwitcherAnatomy, "trigger"),
|
|
14582
15503
|
className: cn(
|
|
14583
15504
|
// Negative left margin pulls the trigger's hover-bg toward
|
|
14584
15505
|
// the column edge while the inner padding holds the brand
|
|
@@ -14596,6 +15517,7 @@ var SidebarBrandSwitcher = React39.forwardRef(
|
|
|
14596
15517
|
/* @__PURE__ */ jsx(
|
|
14597
15518
|
ChevronDownIcon,
|
|
14598
15519
|
{
|
|
15520
|
+
...slot(sidebarBrandSwitcherAnatomy, "icon"),
|
|
14599
15521
|
className: cn(
|
|
14600
15522
|
"ml-auto size-3.5 shrink-0 text-fg-4",
|
|
14601
15523
|
"transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none",
|
|
@@ -15150,6 +16072,7 @@ var DataTable = forwardRef(function DataTable2({ withToolbar, className, childre
|
|
|
15150
16072
|
{
|
|
15151
16073
|
ref,
|
|
15152
16074
|
"data-with-toolbar": withToolbar ? "true" : void 0,
|
|
16075
|
+
...slot(dataTableAnatomy, "root"),
|
|
15153
16076
|
className: cn(
|
|
15154
16077
|
// Outer frame on the whole component: a single visible border +
|
|
15155
16078
|
// quiet shadow wrapping the toolbar (if any) and the table as one
|
|
@@ -15171,6 +16094,7 @@ var DataTableToolbar = forwardRef(
|
|
|
15171
16094
|
"div",
|
|
15172
16095
|
{
|
|
15173
16096
|
ref,
|
|
16097
|
+
...slot(dataTableAnatomy, "toolbar"),
|
|
15174
16098
|
className: cn(
|
|
15175
16099
|
"flex items-center gap-2 px-3 py-2.5",
|
|
15176
16100
|
"border-rule bg-surface border-b",
|
|
@@ -15201,7 +16125,16 @@ var DataTableSearch = forwardRef(
|
|
|
15201
16125
|
DataTableSearch.displayName = "DataTableSearch";
|
|
15202
16126
|
var DataTableSpacer = forwardRef(
|
|
15203
16127
|
function DataTableSpacer2({ className, ...props }, ref) {
|
|
15204
|
-
return /* @__PURE__ */ jsx(
|
|
16128
|
+
return /* @__PURE__ */ jsx(
|
|
16129
|
+
"span",
|
|
16130
|
+
{
|
|
16131
|
+
ref,
|
|
16132
|
+
"aria-hidden": "true",
|
|
16133
|
+
...slot(dataTableAnatomy, "spacer"),
|
|
16134
|
+
className: cn("flex-1", className),
|
|
16135
|
+
...props
|
|
16136
|
+
}
|
|
16137
|
+
);
|
|
15205
16138
|
}
|
|
15206
16139
|
);
|
|
15207
16140
|
DataTableSpacer.displayName = "DataTableSpacer";
|
|
@@ -15211,7 +16144,11 @@ var DataTableResultsCount = forwardRef(
|
|
|
15211
16144
|
"span",
|
|
15212
16145
|
{
|
|
15213
16146
|
ref,
|
|
15214
|
-
|
|
16147
|
+
...slot(dataTableAnatomy, "results-count"),
|
|
16148
|
+
className: cn(
|
|
16149
|
+
"text-fg-4 mr-1 shrink-0 font-sans text-[11px] whitespace-nowrap tabular-nums",
|
|
16150
|
+
className
|
|
16151
|
+
),
|
|
15215
16152
|
...props,
|
|
15216
16153
|
children: [
|
|
15217
16154
|
current.toLocaleString(),
|
|
@@ -15225,13 +16162,29 @@ var DataTableResultsCount = forwardRef(
|
|
|
15225
16162
|
DataTableResultsCount.displayName = "DataTableResultsCount";
|
|
15226
16163
|
var DataTableHead = forwardRef(
|
|
15227
16164
|
function DataTableHead2({ className, ...props }, ref) {
|
|
15228
|
-
return /* @__PURE__ */ jsx(
|
|
16165
|
+
return /* @__PURE__ */ jsx(
|
|
16166
|
+
"thead",
|
|
16167
|
+
{
|
|
16168
|
+
ref,
|
|
16169
|
+
...slot(dataTableAnatomy, "header"),
|
|
16170
|
+
className: cn("[&_tr]:border-rule [&_tr]:border-b", className),
|
|
16171
|
+
...props
|
|
16172
|
+
}
|
|
16173
|
+
);
|
|
15229
16174
|
}
|
|
15230
16175
|
);
|
|
15231
16176
|
DataTableHead.displayName = "DataTableHead";
|
|
15232
16177
|
var DataTableBody = forwardRef(
|
|
15233
16178
|
function DataTableBody2({ className, ...props }, ref) {
|
|
15234
|
-
return /* @__PURE__ */ jsx(
|
|
16179
|
+
return /* @__PURE__ */ jsx(
|
|
16180
|
+
"tbody",
|
|
16181
|
+
{
|
|
16182
|
+
ref,
|
|
16183
|
+
...slot(dataTableAnatomy, "body"),
|
|
16184
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
16185
|
+
...props
|
|
16186
|
+
}
|
|
16187
|
+
);
|
|
15235
16188
|
}
|
|
15236
16189
|
);
|
|
15237
16190
|
DataTableBody.displayName = "DataTableBody";
|
|
@@ -15242,8 +16195,10 @@ var DataTableRow = forwardRef(
|
|
|
15242
16195
|
{
|
|
15243
16196
|
ref,
|
|
15244
16197
|
"data-state": selected ? "selected" : void 0,
|
|
16198
|
+
...slot(dataTableAnatomy, "row"),
|
|
15245
16199
|
className: cn(
|
|
15246
|
-
"border-rule-soft border-b
|
|
16200
|
+
"border-rule-soft border-b",
|
|
16201
|
+
microInteractions.selection,
|
|
15247
16202
|
// Selected hover stays in the brand tint (G15) — when both states fire,
|
|
15248
16203
|
// hover:bg-bg-2 was previously winning and dropping the row out of
|
|
15249
16204
|
// the selected tint, which read as the row deselecting on hover.
|
|
@@ -15281,6 +16236,7 @@ var DataTableHeader = forwardRef(
|
|
|
15281
16236
|
"span",
|
|
15282
16237
|
{
|
|
15283
16238
|
"aria-hidden": "true",
|
|
16239
|
+
...slot(dataTableAnatomy, "head-indicator"),
|
|
15284
16240
|
className: cn(
|
|
15285
16241
|
"text-fg-5 ml-1 inline-flex shrink-0 items-center justify-center",
|
|
15286
16242
|
currentSort && "text-fg-3"
|
|
@@ -15295,6 +16251,8 @@ var DataTableHeader = forwardRef(
|
|
|
15295
16251
|
ref,
|
|
15296
16252
|
scope: "col",
|
|
15297
16253
|
"aria-sort": ariaSort,
|
|
16254
|
+
...slot(dataTableAnatomy, "head"),
|
|
16255
|
+
...stateAttributes({ state: currentSort ?? void 0 }),
|
|
15298
16256
|
className: cn(
|
|
15299
16257
|
"h-11 px-4 py-2.5 text-left align-middle whitespace-nowrap",
|
|
15300
16258
|
"font-sans text-[14px] font-medium tracking-normal normal-case",
|
|
@@ -15309,6 +16267,7 @@ var DataTableHeader = forwardRef(
|
|
|
15309
16267
|
{
|
|
15310
16268
|
type: "button",
|
|
15311
16269
|
onClick: handleClick,
|
|
16270
|
+
...slot(dataTableAnatomy, "head-button"),
|
|
15312
16271
|
className: cn(
|
|
15313
16272
|
"-mx-1 -my-1 inline-flex items-center gap-1 rounded-[4px] px-1 py-1",
|
|
15314
16273
|
"font-sans text-[14px] font-medium tracking-normal normal-case",
|
|
@@ -15334,6 +16293,7 @@ var DataTableCell = forwardRef(
|
|
|
15334
16293
|
"td",
|
|
15335
16294
|
{
|
|
15336
16295
|
ref,
|
|
16296
|
+
...slot(dataTableAnatomy, "cell"),
|
|
15337
16297
|
className: cn(
|
|
15338
16298
|
cellBase,
|
|
15339
16299
|
"text-fg-2 text-[13px]",
|
|
@@ -15352,6 +16312,8 @@ var DataTableCellName = forwardRef(
|
|
|
15352
16312
|
"td",
|
|
15353
16313
|
{
|
|
15354
16314
|
ref,
|
|
16315
|
+
...slot(dataTableAnatomy, "cell"),
|
|
16316
|
+
...stateAttributes({ variant: "name" }),
|
|
15355
16317
|
className: cn(cellBase, "font-display text-fg text-[13px] font-medium", className),
|
|
15356
16318
|
...props
|
|
15357
16319
|
}
|
|
@@ -15365,6 +16327,8 @@ var DataTableCellMono = forwardRef(
|
|
|
15365
16327
|
"td",
|
|
15366
16328
|
{
|
|
15367
16329
|
ref,
|
|
16330
|
+
...slot(dataTableAnatomy, "cell"),
|
|
16331
|
+
...stateAttributes({ variant: "mono" }),
|
|
15368
16332
|
className: cn(cellBase, "font-sans text-fg-2 text-[13px] tabular-nums", className),
|
|
15369
16333
|
style,
|
|
15370
16334
|
...props
|
|
@@ -15379,6 +16343,8 @@ var DataTableCellId = forwardRef(
|
|
|
15379
16343
|
"td",
|
|
15380
16344
|
{
|
|
15381
16345
|
ref,
|
|
16346
|
+
...slot(dataTableAnatomy, "cell"),
|
|
16347
|
+
...stateAttributes({ variant: "id" }),
|
|
15382
16348
|
className: cn(cellBase, "font-sans text-fg-4 text-xs tabular-nums", className),
|
|
15383
16349
|
style,
|
|
15384
16350
|
...props
|
|
@@ -15404,6 +16370,8 @@ var DataTableCellDue = forwardRef(
|
|
|
15404
16370
|
{
|
|
15405
16371
|
ref,
|
|
15406
16372
|
"data-due-state": ariaState,
|
|
16373
|
+
...slot(dataTableAnatomy, "cell"),
|
|
16374
|
+
...stateAttributes({ variant: "due" }),
|
|
15407
16375
|
className: cn(cellBase, "font-sans text-[13px] tabular-nums", tone, className),
|
|
15408
16376
|
style,
|
|
15409
16377
|
...props,
|
|
@@ -15429,6 +16397,7 @@ var DataTableCheckbox = forwardRef(
|
|
|
15429
16397
|
Cell,
|
|
15430
16398
|
{
|
|
15431
16399
|
ref,
|
|
16400
|
+
...slot(dataTableAnatomy, "checkbox-cell"),
|
|
15432
16401
|
className: cn(
|
|
15433
16402
|
"w-8 px-4 py-3 pr-0 align-middle",
|
|
15434
16403
|
asHeader && "bg-surface-2 border-rule h-11 border-b",
|
|
@@ -16794,7 +17763,7 @@ var MessageBubble = forwardRef(function MessageBubble2({ avatar, name, timestamp
|
|
|
16794
17763
|
"span",
|
|
16795
17764
|
{
|
|
16796
17765
|
className: cn(
|
|
16797
|
-
"ml-auto opacity-0 transition-opacity",
|
|
17766
|
+
"ml-auto opacity-0 transition-opacity motion-reduce:transition-none",
|
|
16798
17767
|
"group-hover/bubble:opacity-100 group-focus-within/bubble:opacity-100"
|
|
16799
17768
|
),
|
|
16800
17769
|
children: actions
|
|
@@ -16904,7 +17873,7 @@ var MessageComposer = forwardRef(
|
|
|
16904
17873
|
className: cn(
|
|
16905
17874
|
"relative flex flex-col",
|
|
16906
17875
|
"border-rule bg-input-background rounded-xl border",
|
|
16907
|
-
"transition-shadow duration-
|
|
17876
|
+
"transition-shadow duration-[var(--motion-duration-feedback)] motion-reduce:transition-none",
|
|
16908
17877
|
"focus-within:border-accent-ring focus-within:bg-surface focus-within:shadow-sm",
|
|
16909
17878
|
isDisabled && "pointer-events-none opacity-60",
|
|
16910
17879
|
className
|
|
@@ -16923,7 +17892,7 @@ var MessageComposer = forwardRef(
|
|
|
16923
17892
|
"div",
|
|
16924
17893
|
{
|
|
16925
17894
|
"aria-hidden": "true",
|
|
16926
|
-
className: "bg-bg-3 h-6 w-20 shrink-0 animate-pulse rounded-full"
|
|
17895
|
+
className: "bg-bg-3 h-6 w-20 shrink-0 animate-pulse rounded-full motion-reduce:animate-none"
|
|
16927
17896
|
},
|
|
16928
17897
|
i
|
|
16929
17898
|
)) : chips.map((chip) => /* @__PURE__ */ jsx(
|
|
@@ -16935,7 +17904,7 @@ var MessageComposer = forwardRef(
|
|
|
16935
17904
|
className: cn(
|
|
16936
17905
|
"inline-flex h-6 shrink-0 items-center rounded-full px-2.5",
|
|
16937
17906
|
"text-[11px] font-medium text-fg-2",
|
|
16938
|
-
"bg-bg-2 transition-colors hover:bg-bg-3 hover:text-fg",
|
|
17907
|
+
"bg-bg-2 transition-colors hover:bg-bg-3 hover:text-fg motion-reduce:transition-none",
|
|
16939
17908
|
"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]"
|
|
16940
17909
|
),
|
|
16941
17910
|
children: chip.label
|
|
@@ -16953,17 +17922,16 @@ var MessageComposer = forwardRef(
|
|
|
16953
17922
|
className: "flex shrink-0 items-center justify-between gap-2 px-2 pb-1.5 pt-1",
|
|
16954
17923
|
children: [
|
|
16955
17924
|
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-2", children: startSlot }),
|
|
16956
|
-
/* @__PURE__ */
|
|
17925
|
+
/* @__PURE__ */ jsx(
|
|
16957
17926
|
Button,
|
|
16958
17927
|
{
|
|
16959
17928
|
size: "sm",
|
|
16960
17929
|
disabled: isSubmitDisabled,
|
|
17930
|
+
loading: submitting,
|
|
17931
|
+
iconLeft: /* @__PURE__ */ jsx(SendIcon, { size: 14, "aria-hidden": "true" }),
|
|
16961
17932
|
onClick: onSubmit,
|
|
16962
17933
|
className: "gap-1.5",
|
|
16963
|
-
children:
|
|
16964
|
-
/* @__PURE__ */ jsx(SendIcon, { size: 14, "aria-hidden": "true" }),
|
|
16965
|
-
submitting ? submittingLabel : submitLabel
|
|
16966
|
-
]
|
|
17934
|
+
children: submitting ? submittingLabel : submitLabel
|
|
16967
17935
|
}
|
|
16968
17936
|
)
|
|
16969
17937
|
]
|
|
@@ -18001,15 +18969,15 @@ function SuggestionPills({
|
|
|
18001
18969
|
"div",
|
|
18002
18970
|
{
|
|
18003
18971
|
className: cn(
|
|
18004
|
-
"ds-suggestion-bar flex items-center gap-2 overflow-x-auto border-t border-
|
|
18972
|
+
"ds-suggestion-bar flex items-center gap-2 overflow-x-auto border-t border-rule/60 bg-gradient-to-b from-brand-bg/40 to-transparent px-4 py-2.5 motion-reduce:animate-none [scrollbar-width:none]",
|
|
18005
18973
|
className
|
|
18006
18974
|
),
|
|
18007
18975
|
children: [
|
|
18008
|
-
/* @__PURE__ */ jsxs("span", { className: "flex shrink-0 items-center gap-1.5 text-[11px] font-medium text-
|
|
18976
|
+
/* @__PURE__ */ jsxs("span", { className: "flex shrink-0 items-center gap-1.5 text-[11px] font-medium text-fg-3", children: [
|
|
18009
18977
|
/* @__PURE__ */ jsx(SparkleIcon, { className: "ds-suggestion-spark size-3.5 text-brand", "aria-hidden": "true" }),
|
|
18010
18978
|
label
|
|
18011
18979
|
] }),
|
|
18012
|
-
loading ? [0, 1].map((i) => /* @__PURE__ */ jsx("span", { className: "h-7 w-32 shrink-0 animate-pulse rounded-full bg-
|
|
18980
|
+
loading ? [0, 1].map((i) => /* @__PURE__ */ jsx("span", { className: "h-7 w-32 shrink-0 animate-pulse rounded-full bg-bg-2 motion-reduce:animate-none" }, i)) : suggestions.map((text, i) => /* @__PURE__ */ jsx(
|
|
18013
18981
|
"button",
|
|
18014
18982
|
{
|
|
18015
18983
|
type: "button",
|
|
@@ -18017,10 +18985,10 @@ function SuggestionPills({
|
|
|
18017
18985
|
title: text,
|
|
18018
18986
|
style: { animationDelay: `${i * 110}ms` },
|
|
18019
18987
|
className: cn(
|
|
18020
|
-
"ds-suggestion-pill max-w-[260px] shrink-0 truncate whitespace-nowrap rounded-full border px-3.5 py-1.5 text-[12px] font-medium",
|
|
18021
|
-
"border-brand/30 bg-brand-
|
|
18022
|
-
"transition-
|
|
18023
|
-
"focus-visible:
|
|
18988
|
+
"ds-suggestion-pill max-w-[260px] shrink-0 truncate whitespace-nowrap rounded-full border px-3.5 py-1.5 text-[12px] font-medium motion-reduce:animate-none",
|
|
18989
|
+
"border-brand/30 bg-brand-bg text-brand shadow-quiet",
|
|
18990
|
+
"transition-[color,background-color,border-color,box-shadow,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:-translate-y-0.5 hover:border-brand/50 hover:bg-brand-bg-hover hover:shadow-card motion-reduce:transform-none motion-reduce:transition-none",
|
|
18991
|
+
"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none"
|
|
18024
18992
|
),
|
|
18025
18993
|
children: text
|
|
18026
18994
|
},
|
|
@@ -18068,10 +19036,10 @@ function AiDraftCard({
|
|
|
18068
19036
|
] });
|
|
18069
19037
|
}
|
|
18070
19038
|
if (state === "error") {
|
|
18071
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border border-
|
|
18072
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs text-
|
|
19039
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border border-danger-line bg-danger-bg p-3", className), children: [
|
|
19040
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-danger-fg", children: error ?? "Something went wrong." }),
|
|
18073
19041
|
(onRetry || onDismiss) && /* @__PURE__ */ jsxs("div", { className: "mt-2 flex gap-2", children: [
|
|
18074
|
-
onRetry && /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onRetry, className: "text-
|
|
19042
|
+
onRetry && /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onRetry, className: "text-danger-fg", children: "Retry" }),
|
|
18075
19043
|
onDismiss && /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: onDismiss, children: "Dismiss" })
|
|
18076
19044
|
] })
|
|
18077
19045
|
] });
|
|
@@ -18080,7 +19048,7 @@ function AiDraftCard({
|
|
|
18080
19048
|
/* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", !collapsed && "mb-2"), children: [
|
|
18081
19049
|
/* @__PURE__ */ jsx(SparkleIcon, { size: 14, className: "text-brand" }),
|
|
18082
19050
|
/* @__PURE__ */ jsx("span", { className: "text-xs font-bold text-brand", children: title }),
|
|
18083
|
-
contextLine && /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-
|
|
19051
|
+
contextLine && /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-fg-3", children: contextLine }),
|
|
18084
19052
|
/* @__PURE__ */ jsx(
|
|
18085
19053
|
"button",
|
|
18086
19054
|
{
|
|
@@ -18089,14 +19057,23 @@ function AiDraftCard({
|
|
|
18089
19057
|
"aria-expanded": !collapsed,
|
|
18090
19058
|
"aria-label": collapsed ? "Expand AI draft" : "Collapse AI draft",
|
|
18091
19059
|
title: collapsed ? "Show draft" : "Hide draft",
|
|
18092
|
-
className: "ml-auto -mr-1 shrink-0 rounded p-1 text-brand/70 transition-colors hover:bg-brand
|
|
18093
|
-
children: /* @__PURE__ */ jsx(ChevronDownIcon, { size: 16, className: cn("transition-transform", collapsed && "-rotate-90") })
|
|
19060
|
+
className: "ml-auto -mr-1 shrink-0 rounded p-1 text-brand/70 transition-colors hover:bg-brand-bg hover:text-brand focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none motion-reduce:transition-none",
|
|
19061
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, { size: 16, className: cn("transition-transform motion-reduce:transition-none", collapsed && "-rotate-90") })
|
|
18094
19062
|
}
|
|
18095
19063
|
)
|
|
18096
19064
|
] }),
|
|
18097
19065
|
!collapsed && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
18098
|
-
subject && /* @__PURE__ */ jsx("p", { className: "mb-1.5 text-sm font-semibold text-
|
|
18099
|
-
/* @__PURE__ */ jsx(
|
|
19066
|
+
subject && /* @__PURE__ */ jsx("p", { className: "mb-1.5 text-sm font-semibold text-fg", children: subject }),
|
|
19067
|
+
/* @__PURE__ */ jsx(
|
|
19068
|
+
"div",
|
|
19069
|
+
{
|
|
19070
|
+
role: "region",
|
|
19071
|
+
"aria-label": `${title} content`,
|
|
19072
|
+
tabIndex: 0,
|
|
19073
|
+
className: "max-h-[140px] overflow-y-auto text-sm font-medium leading-relaxed text-fg focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none",
|
|
19074
|
+
children
|
|
19075
|
+
}
|
|
19076
|
+
),
|
|
18100
19077
|
actions && /* @__PURE__ */ jsx("div", { className: "mt-3 flex flex-wrap items-center gap-2", children: actions })
|
|
18101
19078
|
] })
|
|
18102
19079
|
] });
|
|
@@ -18138,36 +19115,36 @@ function EmailMessageCard({
|
|
|
18138
19115
|
!isOutbound && avatar && /* @__PURE__ */ jsx("span", { className: "mt-7 shrink-0", children: avatar }),
|
|
18139
19116
|
/* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 flex-col gap-1", isOutbound ? "items-end" : "items-start"), children: [
|
|
18140
19117
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 px-1", children: [
|
|
18141
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-
|
|
18142
|
-
/* @__PURE__ */ jsxs("span", { className: "text-[10px] text-
|
|
19118
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-fg", children: senderName }),
|
|
19119
|
+
/* @__PURE__ */ jsxs("span", { className: "text-[10px] text-fg-3", children: [
|
|
18143
19120
|
"via ",
|
|
18144
19121
|
via
|
|
18145
19122
|
] }),
|
|
18146
|
-
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-
|
|
18147
|
-
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-
|
|
19123
|
+
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-fg-3", children: "\xB7" }),
|
|
19124
|
+
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-fg-3", children: time })
|
|
18148
19125
|
] }),
|
|
18149
19126
|
/* @__PURE__ */ jsxs(
|
|
18150
19127
|
"div",
|
|
18151
19128
|
{
|
|
18152
19129
|
className: cn(
|
|
18153
|
-
"w-full max-w-2xl overflow-hidden rounded-xl border bg-
|
|
18154
|
-
isOutbound ? "border-brand/30" : "border-
|
|
19130
|
+
"w-full max-w-2xl overflow-hidden rounded-xl border bg-surface shadow-sm",
|
|
19131
|
+
isOutbound ? "border-brand/30" : "border-rule"
|
|
18155
19132
|
),
|
|
18156
19133
|
children: [
|
|
18157
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2.5 border-b border-
|
|
19134
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2.5 border-b border-rule bg-brand-bg px-3.5 py-2.5", children: [
|
|
18158
19135
|
/* @__PURE__ */ jsx("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-lg border border-brand/20 bg-brand/10 text-brand", children: /* @__PURE__ */ jsx(MailIcon, { size: 16 }) }),
|
|
18159
19136
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
18160
19137
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
18161
19138
|
/* @__PURE__ */ jsx("span", { className: "shrink-0 rounded px-1.5 py-px text-[10px] font-bold uppercase tracking-wider text-brand", children: "Email" }),
|
|
18162
|
-
subjectText && /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-sm font-semibold text-
|
|
19139
|
+
subjectText && /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-sm font-semibold text-fg", children: subjectText })
|
|
18163
19140
|
] }),
|
|
18164
|
-
/* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex flex-wrap items-center gap-1.5 text-[10px] text-
|
|
19141
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex flex-wrap items-center gap-1.5 text-[10px] text-fg-3", children: [
|
|
18165
19142
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
18166
19143
|
"From ",
|
|
18167
|
-
/* @__PURE__ */ jsx("span", { className: "font-medium text-
|
|
19144
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium text-fg/80", children: senderName })
|
|
18168
19145
|
] }),
|
|
18169
19146
|
ccCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
18170
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
19147
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-3/60", children: "\xB7" }),
|
|
18171
19148
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
18172
19149
|
"Cc ",
|
|
18173
19150
|
ccCount
|
|
@@ -18175,7 +19152,7 @@ function EmailMessageCard({
|
|
|
18175
19152
|
] })
|
|
18176
19153
|
] })
|
|
18177
19154
|
] }),
|
|
18178
|
-
/* @__PURE__ */ jsx("span", { className: "shrink-0 whitespace-nowrap pt-0.5 text-[10px] text-
|
|
19155
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 whitespace-nowrap pt-0.5 text-[10px] text-fg-3", children: time })
|
|
18179
19156
|
] }),
|
|
18180
19157
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
18181
19158
|
/* @__PURE__ */ jsx(
|
|
@@ -18183,13 +19160,13 @@ function EmailMessageCard({
|
|
|
18183
19160
|
{
|
|
18184
19161
|
ref: bodyRef,
|
|
18185
19162
|
className: cn(
|
|
18186
|
-
"px-4 py-3 text-sm leading-relaxed text-
|
|
19163
|
+
"px-4 py-3 text-sm leading-relaxed text-fg",
|
|
18187
19164
|
clamped && "max-h-56 overflow-hidden"
|
|
18188
19165
|
),
|
|
18189
19166
|
children
|
|
18190
19167
|
}
|
|
18191
19168
|
),
|
|
18192
|
-
clamped && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 h-14 bg-gradient-to-b from-transparent to-
|
|
19169
|
+
clamped && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 h-14 bg-gradient-to-b from-transparent to-surface" })
|
|
18193
19170
|
] }),
|
|
18194
19171
|
needsClamp && /* @__PURE__ */ jsxs(
|
|
18195
19172
|
"button",
|
|
@@ -18197,14 +19174,14 @@ function EmailMessageCard({
|
|
|
18197
19174
|
type: "button",
|
|
18198
19175
|
onClick: () => setExpanded((v) => !v),
|
|
18199
19176
|
"aria-expanded": expanded,
|
|
18200
|
-
className: "flex w-full items-center justify-center gap-1.5 border-t border-
|
|
19177
|
+
className: "flex w-full items-center justify-center gap-1.5 border-t border-rule/60 bg-surface py-1.5 text-xs font-medium text-brand transition-colors hover:bg-bg-2/40 motion-reduce:transition-none",
|
|
18201
19178
|
children: [
|
|
18202
19179
|
expanded ? "Show less" : "Show full email",
|
|
18203
|
-
/* @__PURE__ */ jsx(ChevronDownIcon, { size: 13, className: cn("transition-transform", expanded && "rotate-180") })
|
|
19180
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, { size: 13, className: cn("transition-transform motion-reduce:transition-none", expanded && "rotate-180") })
|
|
18204
19181
|
]
|
|
18205
19182
|
}
|
|
18206
19183
|
),
|
|
18207
|
-
hasFooter && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 border-t border-
|
|
19184
|
+
hasFooter && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 border-t border-rule bg-bg-2/30 px-3 py-2", children: [
|
|
18208
19185
|
/* @__PURE__ */ jsx("div", { className: "min-w-0", children: attachments }),
|
|
18209
19186
|
/* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center gap-2", children: [
|
|
18210
19187
|
status,
|
|
@@ -18232,8 +19209,8 @@ function SignatureEditor({
|
|
|
18232
19209
|
className
|
|
18233
19210
|
}) {
|
|
18234
19211
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", className), children: [
|
|
18235
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b border-
|
|
18236
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs font-semibold text-
|
|
19212
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b border-rule px-3 py-2", children: [
|
|
19213
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-semibold text-fg", children: title }),
|
|
18237
19214
|
onAddImage && /* @__PURE__ */ jsxs(
|
|
18238
19215
|
Button,
|
|
18239
19216
|
{
|
|
@@ -18251,8 +19228,8 @@ function SignatureEditor({
|
|
|
18251
19228
|
}
|
|
18252
19229
|
)
|
|
18253
19230
|
] }),
|
|
18254
|
-
/* @__PURE__ */ jsx("div", { className: "p-3", children: loading ? /* @__PURE__ */ jsx("div", { className: "h-32 animate-pulse rounded-md bg-
|
|
18255
|
-
(onSave || onInsert) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2 border-t border-
|
|
19231
|
+
/* @__PURE__ */ jsx("div", { className: "p-3", children: loading ? /* @__PURE__ */ jsx("div", { className: "h-32 animate-pulse rounded-md bg-bg-2 motion-reduce:animate-none" }) : children }),
|
|
19232
|
+
(onSave || onInsert) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2 border-t border-rule px-3 py-2", children: [
|
|
18256
19233
|
onSave && /* @__PURE__ */ jsx(
|
|
18257
19234
|
Button,
|
|
18258
19235
|
{
|
|
@@ -18400,7 +19377,7 @@ function DisplayMenu({
|
|
|
18400
19377
|
showDot && /* @__PURE__ */ jsx(
|
|
18401
19378
|
"span",
|
|
18402
19379
|
{
|
|
18403
|
-
className: "absolute -right-1 -top-1 size-2 rounded-full bg-
|
|
19380
|
+
className: "absolute -right-1 -top-1 size-2 rounded-full bg-fg",
|
|
18404
19381
|
"aria-hidden": "true"
|
|
18405
19382
|
}
|
|
18406
19383
|
)
|
|
@@ -18424,8 +19401,8 @@ function DisplayMenu({
|
|
|
18424
19401
|
}
|
|
18425
19402
|
},
|
|
18426
19403
|
children: /* @__PURE__ */ jsxs("div", { ref: panelRef, className: "relative", children: [
|
|
18427
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 border-b border-
|
|
18428
|
-
/* @__PURE__ */ jsx(SearchIcon, { size: 13, className: "shrink-0 text-
|
|
19404
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 border-b border-rule px-2.5 py-1.5", children: [
|
|
19405
|
+
/* @__PURE__ */ jsx(SearchIcon, { size: 13, className: "shrink-0 text-fg-3", "aria-hidden": "true" }),
|
|
18429
19406
|
/* @__PURE__ */ jsx(
|
|
18430
19407
|
"input",
|
|
18431
19408
|
{
|
|
@@ -18434,7 +19411,7 @@ function DisplayMenu({
|
|
|
18434
19411
|
onChange: (e) => setRootQuery(e.target.value),
|
|
18435
19412
|
placeholder: "Filter\u2026",
|
|
18436
19413
|
"aria-label": "Filter options and values",
|
|
18437
|
-
className: "h-6 w-full bg-transparent text-[13px] text-
|
|
19414
|
+
className: "h-6 w-full bg-transparent text-[13px] text-fg outline-none placeholder:text-fg-3"
|
|
18438
19415
|
}
|
|
18439
19416
|
)
|
|
18440
19417
|
] }),
|
|
@@ -18460,19 +19437,19 @@ function DisplayMenu({
|
|
|
18460
19437
|
setOpenKey(null);
|
|
18461
19438
|
},
|
|
18462
19439
|
onClick: () => section2.onSelect(option.key),
|
|
18463
|
-
className: "flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-[13px] transition-colors hover:bg-
|
|
19440
|
+
className: "flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-[13px] transition-colors hover:bg-bg-2/60 focus-visible:bg-bg-2/60 focus-visible:outline-none motion-reduce:transition-none",
|
|
18464
19441
|
children: [
|
|
18465
|
-
section2.icon && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-
|
|
18466
|
-
/* @__PURE__ */ jsx("span", { className: "shrink-0 truncate text-
|
|
19442
|
+
section2.icon && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-fg-3", "aria-hidden": "true", children: section2.icon }),
|
|
19443
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 truncate text-fg-3", children: section2.label }),
|
|
18467
19444
|
/* @__PURE__ */ jsx(
|
|
18468
19445
|
ChevronRightIcon,
|
|
18469
19446
|
{
|
|
18470
19447
|
size: 12,
|
|
18471
|
-
className: "shrink-0 text-
|
|
19448
|
+
className: "shrink-0 text-fg-3",
|
|
18472
19449
|
"aria-hidden": "true"
|
|
18473
19450
|
}
|
|
18474
19451
|
),
|
|
18475
|
-
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-
|
|
19452
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-fg", children: option.label }),
|
|
18476
19453
|
isActive && /* @__PURE__ */ jsx(CheckIcon, { size: 14, className: "shrink-0 text-brand" })
|
|
18477
19454
|
]
|
|
18478
19455
|
},
|
|
@@ -18519,15 +19496,15 @@ function DisplayMenu({
|
|
|
18519
19496
|
}
|
|
18520
19497
|
},
|
|
18521
19498
|
className: cn(
|
|
18522
|
-
"flex min-w-0 flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-left text-[13px] text-
|
|
18523
|
-
isOpen && "bg-
|
|
19499
|
+
"flex min-w-0 flex-1 items-center gap-2 rounded-md px-2 py-1.5 text-left text-[13px] text-fg transition-colors hover:bg-bg-2/60 focus-visible:bg-bg-2/60 focus-visible:outline-none motion-reduce:transition-none",
|
|
19500
|
+
isOpen && "bg-bg-2/60"
|
|
18524
19501
|
),
|
|
18525
19502
|
children: [
|
|
18526
|
-
section.icon && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-
|
|
19503
|
+
section.icon && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-fg-3", "aria-hidden": "true", children: section.icon }),
|
|
18527
19504
|
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: section.label }),
|
|
18528
19505
|
section.mode === "multi" && count > 0 && /* @__PURE__ */ jsx("span", { className: "shrink-0 rounded-full bg-brand-bg px-1.5 text-[11px] font-medium text-brand", children: count }),
|
|
18529
|
-
section.mode !== "multi" && valueLabel && /* @__PURE__ */ jsx("span", { className: "max-w-24 shrink-0 truncate text-[13px] text-
|
|
18530
|
-
/* @__PURE__ */ jsx(ChevronRightIcon, { size: 13, className: "shrink-0 text-
|
|
19506
|
+
section.mode !== "multi" && valueLabel && /* @__PURE__ */ jsx("span", { className: "max-w-24 shrink-0 truncate text-[13px] text-fg-3", children: valueLabel }),
|
|
19507
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { size: 13, className: "shrink-0 text-fg-3" })
|
|
18531
19508
|
]
|
|
18532
19509
|
}
|
|
18533
19510
|
),
|
|
@@ -18540,14 +19517,14 @@ function DisplayMenu({
|
|
|
18540
19517
|
})
|
|
18541
19518
|
}
|
|
18542
19519
|
),
|
|
18543
|
-
/* @__PURE__ */ jsx("div", { className: "border-t border-
|
|
19520
|
+
/* @__PURE__ */ jsx("div", { className: "border-t border-rule p-1", children: /* @__PURE__ */ jsxs(
|
|
18544
19521
|
Button,
|
|
18545
19522
|
{
|
|
18546
19523
|
variant: "ghost",
|
|
18547
19524
|
size: "sm",
|
|
18548
19525
|
onClick: onReset,
|
|
18549
19526
|
disabled: isAtDefault,
|
|
18550
|
-
className: "h-7 w-full justify-start gap-1.5 px-2 text-xs text-
|
|
19527
|
+
className: "h-7 w-full justify-start gap-1.5 px-2 text-xs text-fg-3 hover:text-fg",
|
|
18551
19528
|
children: [
|
|
18552
19529
|
/* @__PURE__ */ jsx(RotateCcwIcon, { size: 13 }),
|
|
18553
19530
|
"Reset to default"
|
|
@@ -18566,7 +19543,7 @@ function DisplayMenu({
|
|
|
18566
19543
|
// Column + overflow-hidden so the option list (the only flexible
|
|
18567
19544
|
// part) absorbs the height cap, while the search box and Clear
|
|
18568
19545
|
// footer stay pinned and fully visible.
|
|
18569
|
-
"absolute z-50 flex flex-col overflow-hidden rounded-lg border border-
|
|
19546
|
+
"absolute z-50 flex flex-col overflow-hidden rounded-lg border border-rule bg-surface shadow-md motion-reduce:transition-none",
|
|
18570
19547
|
// -mx-1 lets the flyout tuck against the panel so there's no
|
|
18571
19548
|
// dead gap for the cursor to fall through on the way over.
|
|
18572
19549
|
flyout.side === "left" ? "right-full -mr-1" : "left-full -ml-1"
|
|
@@ -18574,8 +19551,8 @@ function DisplayMenu({
|
|
|
18574
19551
|
onMouseEnter: clearTimers,
|
|
18575
19552
|
onMouseLeave: scheduleClose,
|
|
18576
19553
|
children: [
|
|
18577
|
-
showFlyoutSearch && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1.5 border-b border-
|
|
18578
|
-
/* @__PURE__ */ jsx(SearchIcon, { size: 13, className: "shrink-0 text-
|
|
19554
|
+
showFlyoutSearch && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1.5 border-b border-rule px-2.5 py-1.5", children: [
|
|
19555
|
+
/* @__PURE__ */ jsx(SearchIcon, { size: 13, className: "shrink-0 text-fg-3", "aria-hidden": "true" }),
|
|
18579
19556
|
/* @__PURE__ */ jsx(
|
|
18580
19557
|
"input",
|
|
18581
19558
|
{
|
|
@@ -18584,7 +19561,7 @@ function DisplayMenu({
|
|
|
18584
19561
|
onChange: (e) => setSectionQuery(e.target.value),
|
|
18585
19562
|
placeholder: `Filter ${activeSection.label.toLowerCase()}\u2026`,
|
|
18586
19563
|
"aria-label": `Filter ${activeSection.label}`,
|
|
18587
|
-
className: "h-6 w-full bg-transparent text-[13px] text-
|
|
19564
|
+
className: "h-6 w-full bg-transparent text-[13px] text-fg outline-none placeholder:text-fg-3"
|
|
18588
19565
|
}
|
|
18589
19566
|
)
|
|
18590
19567
|
] }),
|
|
@@ -18619,8 +19596,8 @@ function DisplayMenu({
|
|
|
18619
19596
|
}
|
|
18620
19597
|
},
|
|
18621
19598
|
className: cn(
|
|
18622
|
-
"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-[13px] transition-colors hover:bg-
|
|
18623
|
-
isActive ? "text-
|
|
19599
|
+
"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-[13px] transition-colors hover:bg-bg-2/60 focus-visible:bg-bg-2/60 focus-visible:outline-none motion-reduce:transition-none",
|
|
19600
|
+
isActive ? "text-fg" : "text-fg-3 hover:text-fg"
|
|
18624
19601
|
),
|
|
18625
19602
|
children: [
|
|
18626
19603
|
isMulti && /* @__PURE__ */ jsx(
|
|
@@ -18629,7 +19606,7 @@ function DisplayMenu({
|
|
|
18629
19606
|
"aria-hidden": "true",
|
|
18630
19607
|
className: cn(
|
|
18631
19608
|
"flex size-3.5 shrink-0 items-center justify-center rounded border transition-colors",
|
|
18632
|
-
isActive ? "border-brand bg-brand text-fg-on-brand" : "border-
|
|
19609
|
+
isActive ? "border-brand bg-brand text-fg-on-brand" : "border-rule"
|
|
18633
19610
|
),
|
|
18634
19611
|
children: isActive && /* @__PURE__ */ jsx(CheckIcon, { size: 10 })
|
|
18635
19612
|
}
|
|
@@ -18641,13 +19618,13 @@ function DisplayMenu({
|
|
|
18641
19618
|
option.key
|
|
18642
19619
|
);
|
|
18643
19620
|
}) }),
|
|
18644
|
-
activeSection.mode === "multi" && activeSection.selected.size > 0 && activeSection.onClear && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-
|
|
19621
|
+
activeSection.mode === "multi" && activeSection.selected.size > 0 && activeSection.onClear && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-rule p-1", children: /* @__PURE__ */ jsxs(
|
|
18645
19622
|
Button,
|
|
18646
19623
|
{
|
|
18647
19624
|
variant: "ghost",
|
|
18648
19625
|
size: "sm",
|
|
18649
19626
|
onClick: activeSection.onClear,
|
|
18650
|
-
className: "h-6 w-full justify-start px-2 text-[11px] text-
|
|
19627
|
+
className: "h-6 w-full justify-start px-2 text-[11px] text-fg-3 hover:text-fg",
|
|
18651
19628
|
children: [
|
|
18652
19629
|
"Clear ",
|
|
18653
19630
|
activeSection.selected.size,
|
|
@@ -18664,8 +19641,168 @@ function DisplayMenu({
|
|
|
18664
19641
|
] });
|
|
18665
19642
|
}
|
|
18666
19643
|
function EmptyRow({ label = "No matches" }) {
|
|
18667
|
-
return /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-[11px] text-
|
|
19644
|
+
return /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-[11px] text-fg-3", children: label });
|
|
19645
|
+
}
|
|
19646
|
+
var StickyStackContext = React39.createContext(null);
|
|
19647
|
+
function StickyStack({ layers, top = 0, children }) {
|
|
19648
|
+
const [layerHeights, setLayerHeights] = React39.useState({});
|
|
19649
|
+
const normalizedLayers = React39.useMemo(() => {
|
|
19650
|
+
const names = [...layers];
|
|
19651
|
+
if (new Set(names).size !== names.length) {
|
|
19652
|
+
throw new Error("StickyStack layer names must be unique.");
|
|
19653
|
+
}
|
|
19654
|
+
return names;
|
|
19655
|
+
}, [layers]);
|
|
19656
|
+
const setLayerHeight = React39.useCallback((name, height) => {
|
|
19657
|
+
setLayerHeights((current) => {
|
|
19658
|
+
if (current[name] === height) return current;
|
|
19659
|
+
return { ...current, [name]: height };
|
|
19660
|
+
});
|
|
19661
|
+
}, []);
|
|
19662
|
+
const value = React39.useMemo(
|
|
19663
|
+
() => ({ layers: normalizedLayers, layerHeights, setLayerHeight, top }),
|
|
19664
|
+
[layerHeights, normalizedLayers, setLayerHeight, top]
|
|
19665
|
+
);
|
|
19666
|
+
return /* @__PURE__ */ jsx(StickyStackContext, { value, children });
|
|
18668
19667
|
}
|
|
19668
|
+
function useStickyStack(componentName) {
|
|
19669
|
+
const context = React39.use(StickyStackContext);
|
|
19670
|
+
if (!context) {
|
|
19671
|
+
throw new Error(`${componentName} must be rendered inside StickyStack.`);
|
|
19672
|
+
}
|
|
19673
|
+
return context;
|
|
19674
|
+
}
|
|
19675
|
+
function cssLength(value) {
|
|
19676
|
+
return typeof value === "number" ? `${value}px` : value ?? "0px";
|
|
19677
|
+
}
|
|
19678
|
+
function stackOffset(context, layerName, includeNamedLayer) {
|
|
19679
|
+
const { layers, layerHeights, top } = context;
|
|
19680
|
+
let endIndex = layers.length;
|
|
19681
|
+
if (layerName !== void 0) {
|
|
19682
|
+
const index = layers.indexOf(layerName);
|
|
19683
|
+
if (index === -1) {
|
|
19684
|
+
throw new Error(`Unknown StickyStack layer "${layerName}".`);
|
|
19685
|
+
}
|
|
19686
|
+
endIndex = includeNamedLayer ? index + 1 : index;
|
|
19687
|
+
}
|
|
19688
|
+
const measuredOffset = layers.slice(0, endIndex).reduce((total, name) => total + (layerHeights[name] ?? 0), 0);
|
|
19689
|
+
const base = cssLength(top);
|
|
19690
|
+
return measuredOffset === 0 ? base : `calc(${base} + ${measuredOffset}px)`;
|
|
19691
|
+
}
|
|
19692
|
+
var StickyStackLayer = React39.forwardRef(
|
|
19693
|
+
function StickyStackLayer2({ name, hostClassName, className, children, style, ...props }, forwardedRef) {
|
|
19694
|
+
const context = useStickyStack("StickyStackLayer");
|
|
19695
|
+
const { setLayerHeight } = context;
|
|
19696
|
+
const top = stackOffset(context, name, false);
|
|
19697
|
+
const hostRef = React39.useRef(null);
|
|
19698
|
+
const layerRef = React39.useRef(null);
|
|
19699
|
+
const [bounds, setBounds] = React39.useState({
|
|
19700
|
+
height: 0,
|
|
19701
|
+
left: 0,
|
|
19702
|
+
ready: false,
|
|
19703
|
+
width: 0
|
|
19704
|
+
});
|
|
19705
|
+
const setLayerRef = React39.useCallback(
|
|
19706
|
+
(node) => {
|
|
19707
|
+
layerRef.current = node;
|
|
19708
|
+
if (typeof forwardedRef === "function") forwardedRef(node);
|
|
19709
|
+
else if (forwardedRef) forwardedRef.current = node;
|
|
19710
|
+
},
|
|
19711
|
+
[forwardedRef]
|
|
19712
|
+
);
|
|
19713
|
+
const measure = React39.useCallback(() => {
|
|
19714
|
+
const host = hostRef.current;
|
|
19715
|
+
const layer = layerRef.current;
|
|
19716
|
+
if (!host || !layer) return;
|
|
19717
|
+
const hostRect = host.getBoundingClientRect();
|
|
19718
|
+
const layerRect = layer.getBoundingClientRect();
|
|
19719
|
+
const next = {
|
|
19720
|
+
height: Math.ceil(layerRect.height),
|
|
19721
|
+
left: hostRect.left,
|
|
19722
|
+
ready: hostRect.width > 0,
|
|
19723
|
+
width: hostRect.width
|
|
19724
|
+
};
|
|
19725
|
+
setBounds(
|
|
19726
|
+
(current) => current.height === next.height && current.left === next.left && current.ready === next.ready && current.width === next.width ? current : next
|
|
19727
|
+
);
|
|
19728
|
+
setLayerHeight(name, next.height);
|
|
19729
|
+
}, [name, setLayerHeight]);
|
|
19730
|
+
React39.useLayoutEffect(() => {
|
|
19731
|
+
measure();
|
|
19732
|
+
let frame = 0;
|
|
19733
|
+
const scheduleMeasure = () => {
|
|
19734
|
+
cancelAnimationFrame(frame);
|
|
19735
|
+
frame = requestAnimationFrame(measure);
|
|
19736
|
+
};
|
|
19737
|
+
const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(scheduleMeasure);
|
|
19738
|
+
if (hostRef.current) observer?.observe(hostRef.current);
|
|
19739
|
+
if (layerRef.current) observer?.observe(layerRef.current);
|
|
19740
|
+
window.addEventListener("resize", scheduleMeasure);
|
|
19741
|
+
window.addEventListener("scroll", scheduleMeasure, true);
|
|
19742
|
+
return () => {
|
|
19743
|
+
cancelAnimationFrame(frame);
|
|
19744
|
+
observer?.disconnect();
|
|
19745
|
+
window.removeEventListener("resize", scheduleMeasure);
|
|
19746
|
+
window.removeEventListener("scroll", scheduleMeasure, true);
|
|
19747
|
+
setLayerHeight(name, 0);
|
|
19748
|
+
};
|
|
19749
|
+
}, [measure, name, setLayerHeight]);
|
|
19750
|
+
return /* @__PURE__ */ jsx(
|
|
19751
|
+
"div",
|
|
19752
|
+
{
|
|
19753
|
+
ref: hostRef,
|
|
19754
|
+
className: cn("relative", hostClassName),
|
|
19755
|
+
style: { height: bounds.ready ? bounds.height : void 0 },
|
|
19756
|
+
"data-sticky-stack-host": name,
|
|
19757
|
+
children: /* @__PURE__ */ jsx(
|
|
19758
|
+
"div",
|
|
19759
|
+
{
|
|
19760
|
+
ref: setLayerRef,
|
|
19761
|
+
className,
|
|
19762
|
+
style: {
|
|
19763
|
+
...style,
|
|
19764
|
+
position: bounds.ready ? "fixed" : "sticky",
|
|
19765
|
+
top,
|
|
19766
|
+
left: bounds.ready ? bounds.left : void 0,
|
|
19767
|
+
width: bounds.ready ? bounds.width : void 0,
|
|
19768
|
+
boxSizing: "border-box",
|
|
19769
|
+
zIndex: style?.zIndex ?? "var(--z-sticky)"
|
|
19770
|
+
},
|
|
19771
|
+
"data-sticky-stack-layer": name,
|
|
19772
|
+
...props,
|
|
19773
|
+
children
|
|
19774
|
+
}
|
|
19775
|
+
)
|
|
19776
|
+
}
|
|
19777
|
+
);
|
|
19778
|
+
}
|
|
19779
|
+
);
|
|
19780
|
+
StickyStackLayer.displayName = "StickyStackLayer";
|
|
19781
|
+
var StickyStackSticky = React39.forwardRef(
|
|
19782
|
+
function StickyStackSticky2({ after, className, style, ...props }, ref) {
|
|
19783
|
+
const context = useStickyStack("StickyStackSticky");
|
|
19784
|
+
const top = stackOffset(context, after, true);
|
|
19785
|
+
return /* @__PURE__ */ jsx(
|
|
19786
|
+
"div",
|
|
19787
|
+
{
|
|
19788
|
+
ref,
|
|
19789
|
+
className: cn("sticky", className),
|
|
19790
|
+
style: {
|
|
19791
|
+
...style,
|
|
19792
|
+
top,
|
|
19793
|
+
zIndex: style?.zIndex ?? "calc(var(--z-sticky) - 1)"
|
|
19794
|
+
},
|
|
19795
|
+
"data-sticky-stack-sticky": "",
|
|
19796
|
+
...props
|
|
19797
|
+
}
|
|
19798
|
+
);
|
|
19799
|
+
}
|
|
19800
|
+
);
|
|
19801
|
+
StickyStackSticky.displayName = "StickyStackSticky";
|
|
19802
|
+
var StickyStackSectionHeader = React39.forwardRef(function StickyStackSectionHeader2(props, ref) {
|
|
19803
|
+
return /* @__PURE__ */ jsx(StickyStackSticky, { ref, "data-sticky-stack-section-header": "", ...props });
|
|
19804
|
+
});
|
|
19805
|
+
StickyStackSectionHeader.displayName = "StickyStackSectionHeader";
|
|
18669
19806
|
function brandScope(product) {
|
|
18670
19807
|
return { "data-brand": product };
|
|
18671
19808
|
}
|
|
@@ -18691,6 +19828,6 @@ var BrandScope = forwardRef(function BrandScope2({ product, children, ...props }
|
|
|
18691
19828
|
});
|
|
18692
19829
|
BrandScope.displayName = "BrandScope";
|
|
18693
19830
|
|
|
18694
|
-
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, 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 };
|
|
19831
|
+
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 };
|
|
18695
19832
|
//# sourceMappingURL=index.js.map
|
|
18696
19833
|
//# sourceMappingURL=index.js.map
|