@lessly/ui 4.1.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-LTHOLX7I.js → chunk-OTYVKDP2.js} +37 -6
- package/dist/index.d.ts +125 -8
- package/dist/index.js +348 -197
- package/dist/router.d.ts +27 -6
- package/dist/router.js +128 -44
- package/dist/styles-federated.css +61 -17
- package/dist/styles.css +62 -54
- package/dist/tailwind-preset.js +30 -4
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -15,15 +15,19 @@ import {
|
|
|
15
15
|
SheetPortal,
|
|
16
16
|
SheetTitle,
|
|
17
17
|
SheetTrigger,
|
|
18
|
+
SidebarDrawer,
|
|
18
19
|
Tooltip,
|
|
19
20
|
TooltipContent,
|
|
20
21
|
TooltipProvider,
|
|
21
22
|
TooltipTrigger,
|
|
22
23
|
buttonVariants,
|
|
23
24
|
cn,
|
|
25
|
+
railToggleLabel,
|
|
24
26
|
useIsMobile,
|
|
25
|
-
useSidebar
|
|
26
|
-
|
|
27
|
+
useSidebar,
|
|
28
|
+
useSidebarDismiss,
|
|
29
|
+
useSidebarDrawer
|
|
30
|
+
} from "./chunk-OTYVKDP2.js";
|
|
27
31
|
|
|
28
32
|
// src/components/auto-height.tsx
|
|
29
33
|
import * as React from "react";
|
|
@@ -149,7 +153,10 @@ var DialogOverlay = React3.forwardRef(({ className, ...props }, ref) => /* @__PU
|
|
|
149
153
|
{
|
|
150
154
|
ref,
|
|
151
155
|
className: cn(
|
|
152
|
-
|
|
156
|
+
// The scrim's duration is the panel's, so the two arrive as one. Naming it is what makes
|
|
157
|
+
// `prefers-reduced-motion` reach the fade: `animate-in` reads `--tw-duration`, and an unset
|
|
158
|
+
// one falls to tw-animate-css's own literal 0.15s, which no media query can collapse.
|
|
159
|
+
"fixed inset-0 z-50 bg-black/50 duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
153
160
|
className
|
|
154
161
|
),
|
|
155
162
|
...props
|
|
@@ -276,7 +283,7 @@ var DropdownMenuSubContent = React4.forwardRef(({ className, ...props }, ref) =>
|
|
|
276
283
|
{
|
|
277
284
|
ref,
|
|
278
285
|
className: cn(
|
|
279
|
-
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border-subtle bg-bg-
|
|
286
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border-subtle bg-bg-overlay p-1 text-text-primary shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
280
287
|
className
|
|
281
288
|
),
|
|
282
289
|
...props
|
|
@@ -291,7 +298,7 @@ var DropdownMenuContent = React4.forwardRef(({ className, sideOffset = 4, collis
|
|
|
291
298
|
collisionPadding,
|
|
292
299
|
style: { maxHeight: "var(--radix-dropdown-menu-content-available-height, 24rem)", ...style },
|
|
293
300
|
className: cn(
|
|
294
|
-
"z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden overscroll-contain rounded-md border border-border-subtle bg-bg-
|
|
301
|
+
"z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden overscroll-contain rounded-md border border-border-subtle bg-bg-overlay p-1 text-text-primary shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
295
302
|
className
|
|
296
303
|
),
|
|
297
304
|
...props
|
|
@@ -1070,7 +1077,7 @@ var PopoverContent = React18.forwardRef(({ className, align = "center", sideOffs
|
|
|
1070
1077
|
align,
|
|
1071
1078
|
sideOffset,
|
|
1072
1079
|
className: cn(
|
|
1073
|
-
"z-50 w-72 rounded-md border border-border-subtle bg-bg-
|
|
1080
|
+
"z-50 w-72 rounded-md border border-border-subtle bg-bg-overlay p-4 text-text-primary shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
1074
1081
|
className
|
|
1075
1082
|
),
|
|
1076
1083
|
...props
|
|
@@ -1091,7 +1098,7 @@ var HoverCardContent = React19.forwardRef(({ className, align = "center", sideOf
|
|
|
1091
1098
|
align,
|
|
1092
1099
|
sideOffset,
|
|
1093
1100
|
className: cn(
|
|
1094
|
-
"z-50 w-64 rounded-md border border-border-subtle bg-bg-
|
|
1101
|
+
"z-50 w-64 rounded-md border border-border-subtle bg-bg-overlay p-4 text-text-primary shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
1095
1102
|
className
|
|
1096
1103
|
),
|
|
1097
1104
|
...props
|
|
@@ -1174,7 +1181,10 @@ var AlertDialogOverlay = React21.forwardRef(({ className, ...props }, ref) => /*
|
|
|
1174
1181
|
{
|
|
1175
1182
|
ref,
|
|
1176
1183
|
className: cn(
|
|
1177
|
-
|
|
1184
|
+
// The scrim's duration is the panel's, so the two arrive as one. Naming it is what makes
|
|
1185
|
+
// `prefers-reduced-motion` reach the fade: `animate-in` reads `--tw-duration`, and an unset
|
|
1186
|
+
// one falls to tw-animate-css's own literal 0.15s, which no media query can collapse.
|
|
1187
|
+
"fixed inset-0 z-50 bg-black/50 duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
1178
1188
|
className
|
|
1179
1189
|
),
|
|
1180
1190
|
...props
|
|
@@ -1288,7 +1298,7 @@ var ContextMenuSubContent = React22.forwardRef(({ className, ...props }, ref) =>
|
|
|
1288
1298
|
{
|
|
1289
1299
|
ref,
|
|
1290
1300
|
className: cn(
|
|
1291
|
-
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border-subtle bg-bg-
|
|
1301
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border-subtle bg-bg-overlay p-1 text-text-primary shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
1292
1302
|
className
|
|
1293
1303
|
),
|
|
1294
1304
|
...props
|
|
@@ -1300,7 +1310,7 @@ var ContextMenuContent = React22.forwardRef(({ className, ...props }, ref) => /*
|
|
|
1300
1310
|
{
|
|
1301
1311
|
ref,
|
|
1302
1312
|
className: cn(
|
|
1303
|
-
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border-subtle bg-bg-
|
|
1313
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border-subtle bg-bg-overlay p-1 text-text-primary shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
1304
1314
|
className
|
|
1305
1315
|
),
|
|
1306
1316
|
...props
|
|
@@ -1392,7 +1402,7 @@ var Menubar = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
1392
1402
|
{
|
|
1393
1403
|
ref,
|
|
1394
1404
|
className: cn(
|
|
1395
|
-
"flex h-10 items-center gap-1 rounded-md border border-border-subtle bg-bg-
|
|
1405
|
+
"flex h-10 items-center gap-1 rounded-md border border-border-subtle bg-bg-overlay p-1",
|
|
1396
1406
|
className
|
|
1397
1407
|
),
|
|
1398
1408
|
...props
|
|
@@ -1433,7 +1443,7 @@ var MenubarSubContent = React23.forwardRef(({ className, ...props }, ref) => /*
|
|
|
1433
1443
|
{
|
|
1434
1444
|
ref,
|
|
1435
1445
|
className: cn(
|
|
1436
|
-
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border-subtle bg-bg-
|
|
1446
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border-subtle bg-bg-overlay p-1 text-text-primary shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
1437
1447
|
className
|
|
1438
1448
|
),
|
|
1439
1449
|
...props
|
|
@@ -1448,7 +1458,7 @@ var MenubarContent = React23.forwardRef(({ className, align = "start", alignOffs
|
|
|
1448
1458
|
alignOffset,
|
|
1449
1459
|
sideOffset,
|
|
1450
1460
|
className: cn(
|
|
1451
|
-
"z-50 min-w-[12rem] overflow-hidden rounded-md border border-border-subtle bg-bg-
|
|
1461
|
+
"z-50 min-w-[12rem] overflow-hidden rounded-md border border-border-subtle bg-bg-overlay p-1 text-text-primary shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
1452
1462
|
className
|
|
1453
1463
|
),
|
|
1454
1464
|
...props
|
|
@@ -1878,7 +1888,7 @@ var AccordionContent = React32.forwardRef(({ className, children, ...props }, re
|
|
|
1878
1888
|
{
|
|
1879
1889
|
ref,
|
|
1880
1890
|
className: cn(
|
|
1881
|
-
"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
|
|
1891
|
+
"overflow-hidden text-sm duration-200 data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
|
|
1882
1892
|
),
|
|
1883
1893
|
...props,
|
|
1884
1894
|
children: /* @__PURE__ */ jsx39("div", { className: cn("pb-4 pt-0", className), children })
|
|
@@ -1897,7 +1907,16 @@ var CollapsibleContent2 = React33.forwardRef(({ className, ...props }, ref) => /
|
|
|
1897
1907
|
{
|
|
1898
1908
|
ref,
|
|
1899
1909
|
className: cn(
|
|
1900
|
-
|
|
1910
|
+
// `duration-200` is not decoration and not the 200: it is what makes `prefers-reduced-motion`
|
|
1911
|
+
// reach the height. `animate-collapsible-*` reads `--tw-duration`, only a `duration-*` sets
|
|
1912
|
+
// it, and unset it falls to tw-animate-css's own literal 0.2s, which no media query can
|
|
1913
|
+
// collapse. The step resolves to `var(--motion-duration-normal)`, which the token layer takes
|
|
1914
|
+
// to 0ms, so a disclosure opens instantly for a reader who asked for that. Dialog, AlertDialog
|
|
1915
|
+
// and Sheet name theirs for the same reason. A caller's `className` merges into this element,
|
|
1916
|
+
// so a `duration-*` passed here replaces the step and a value the preset does not name
|
|
1917
|
+
// replaces the variable with a literal; `AccordionContent` puts its own `className` on the
|
|
1918
|
+
// padding box instead and cannot be overridden this way.
|
|
1919
|
+
"overflow-hidden text-sm duration-200 data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down",
|
|
1901
1920
|
className
|
|
1902
1921
|
),
|
|
1903
1922
|
...props
|
|
@@ -2128,14 +2147,14 @@ var Command = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
2128
2147
|
{
|
|
2129
2148
|
ref,
|
|
2130
2149
|
className: cn(
|
|
2131
|
-
"flex h-full w-full flex-col overflow-hidden rounded-md bg-bg-
|
|
2150
|
+
"flex h-full w-full flex-col overflow-hidden rounded-md bg-bg-overlay text-text-primary",
|
|
2132
2151
|
className
|
|
2133
2152
|
),
|
|
2134
2153
|
...props
|
|
2135
2154
|
}
|
|
2136
2155
|
));
|
|
2137
2156
|
Command.displayName = CommandPrimitive.displayName;
|
|
2138
|
-
var KeyCap = ({ children }) => /* @__PURE__ */ jsx44("kbd", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded-sm border border-border-default bg-bg-
|
|
2157
|
+
var KeyCap = ({ children }) => /* @__PURE__ */ jsx44("kbd", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded-sm border border-border-default bg-bg-secondary px-1 font-sans text-xs text-text-secondary", children });
|
|
2139
2158
|
var CommandKeyHints = () => /* @__PURE__ */ jsx44("div", { className: "flex items-center gap-4 border-t border-border-subtle bg-bg-sunken px-3 py-2 text-xs text-text-tertiary", children: [[["\u2191", "\u2193"], "to navigate"], [["\u21B5"], "to select"]].map(([keys, verb]) => /* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1.5", children: [
|
|
2140
2159
|
/* @__PURE__ */ jsx44("span", { className: "flex items-center gap-1", children: keys.map((key) => /* @__PURE__ */ jsx44(KeyCap, { children: key }, key)) }),
|
|
2141
2160
|
" ",
|
|
@@ -2167,7 +2186,7 @@ var CommandDialog = ({
|
|
|
2167
2186
|
document.addEventListener("keydown", onKey);
|
|
2168
2187
|
return () => document.removeEventListener("keydown", onKey);
|
|
2169
2188
|
}, [shortcut, open, onOpenChange]);
|
|
2170
|
-
return /* @__PURE__ */ jsx44(Dialog, { open, onOpenChange, ...props, children: /* @__PURE__ */ jsx44(DialogContent, { className: "overflow-hidden p-0", children: /* @__PURE__ */ jsx44(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-text-tertiary [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children: groups ? /* @__PURE__ */ jsxs23(Fragment2, { children: [
|
|
2189
|
+
return /* @__PURE__ */ jsx44(Dialog, { open, onOpenChange, ...props, children: /* @__PURE__ */ jsx44(DialogContent, { className: "overflow-hidden p-0", children: /* @__PURE__ */ jsx44(Command, { label: placeholder, className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-text-tertiary [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children: groups ? /* @__PURE__ */ jsxs23(Fragment2, { children: [
|
|
2171
2190
|
/* @__PURE__ */ jsx44(CommandInput, { placeholder }),
|
|
2172
2191
|
/* @__PURE__ */ jsxs23(CommandList, { className: "max-h-[420px]", children: [
|
|
2173
2192
|
/* @__PURE__ */ jsx44(CommandEmpty, { children: empty }),
|
|
@@ -2342,7 +2361,7 @@ var NavigationMenuViewport = React38.forwardRef(({ className, ...props }, ref) =
|
|
|
2342
2361
|
{
|
|
2343
2362
|
ref,
|
|
2344
2363
|
className: cn(
|
|
2345
|
-
"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border border-border-subtle bg-bg-
|
|
2364
|
+
"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border border-border-subtle bg-bg-overlay text-text-primary shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
|
|
2346
2365
|
className
|
|
2347
2366
|
),
|
|
2348
2367
|
...props
|
|
@@ -2431,7 +2450,7 @@ var Toaster = ({ ...props }) => {
|
|
|
2431
2450
|
className: "toaster group",
|
|
2432
2451
|
toastOptions: {
|
|
2433
2452
|
classNames: {
|
|
2434
|
-
toast: "group toast bg-bg-
|
|
2453
|
+
toast: "group toast bg-bg-overlay border border-border-subtle text-text-primary shadow-lg",
|
|
2435
2454
|
description: "text-text-secondary",
|
|
2436
2455
|
actionButton: "bg-blue-400 text-text-on-brand",
|
|
2437
2456
|
cancelButton: "bg-bg-secondary text-text-primary"
|
|
@@ -3300,8 +3319,10 @@ function ConfirmDialog({
|
|
|
3300
3319
|
title,
|
|
3301
3320
|
description,
|
|
3302
3321
|
confirmLabel = "Confirm",
|
|
3322
|
+
continueLabel,
|
|
3303
3323
|
cancelLabel = "Cancel",
|
|
3304
3324
|
destructive = false,
|
|
3325
|
+
confirmFirst = false,
|
|
3305
3326
|
confirmPhrase,
|
|
3306
3327
|
stepUp,
|
|
3307
3328
|
onConfirm,
|
|
@@ -3316,7 +3337,8 @@ function ConfirmDialog({
|
|
|
3316
3337
|
const [stepped, setStepped] = React50.useState(false);
|
|
3317
3338
|
const phraseId = `${React50.useId()}-phrase`;
|
|
3318
3339
|
const phraseMet = !confirmPhrase || typed.trim().toLowerCase() === confirmPhrase.trim().toLowerCase();
|
|
3319
|
-
const
|
|
3340
|
+
const holdsPanel = Boolean(confirmPhrase) || confirmFirst;
|
|
3341
|
+
const challenging = Boolean(stepUp) && (!holdsPanel || stepped);
|
|
3320
3342
|
const panelTitle = challenging ? stepUp?.title ?? title : title;
|
|
3321
3343
|
const panelDescription = challenging ? stepUp?.description ?? description : description;
|
|
3322
3344
|
const reset = () => {
|
|
@@ -3379,10 +3401,11 @@ function ConfirmDialog({
|
|
|
3379
3401
|
codeLength: stepUp?.codeLength,
|
|
3380
3402
|
onMethodChange: stepUp?.onMethodChange,
|
|
3381
3403
|
confirmLabel,
|
|
3382
|
-
|
|
3404
|
+
destructive,
|
|
3405
|
+
backLabel: holdsPanel ? "Back" : cancelLabel,
|
|
3383
3406
|
onBack: () => {
|
|
3384
3407
|
setError(null);
|
|
3385
|
-
if (
|
|
3408
|
+
if (holdsPanel) setStepped(false);
|
|
3386
3409
|
else setOpen(false);
|
|
3387
3410
|
},
|
|
3388
3411
|
verifying: busy,
|
|
@@ -3395,12 +3418,12 @@ function ConfirmDialog({
|
|
|
3395
3418
|
/* @__PURE__ */ jsxs35(
|
|
3396
3419
|
Button,
|
|
3397
3420
|
{
|
|
3398
|
-
variant: destructive ? "destructive-solid" : "default",
|
|
3421
|
+
variant: destructive && !stepUp ? "destructive-solid" : "default",
|
|
3399
3422
|
disabled: busy || !phraseMet,
|
|
3400
3423
|
onClick: () => stepUp ? setStepped(true) : void handleConfirm(),
|
|
3401
3424
|
children: [
|
|
3402
3425
|
busy && /* @__PURE__ */ jsx60(Loader22, { className: "size-4 animate-spin", "aria-hidden": "true" }),
|
|
3403
|
-
confirmLabel
|
|
3426
|
+
stepUp ? continueLabel ?? confirmLabel : confirmLabel
|
|
3404
3427
|
]
|
|
3405
3428
|
}
|
|
3406
3429
|
)
|
|
@@ -4534,14 +4557,17 @@ function useFreshHighlight() {
|
|
|
4534
4557
|
// src/components/quick-search-row.tsx
|
|
4535
4558
|
import { Search as Search2 } from "lucide-react";
|
|
4536
4559
|
import { jsx as jsx74, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
4560
|
+
var DEFAULT_SHORTCUT = "\u2318K";
|
|
4537
4561
|
function QuickSearchRow({
|
|
4538
4562
|
onOpen,
|
|
4539
4563
|
label = "Quick search",
|
|
4540
|
-
shortcut
|
|
4564
|
+
shortcut,
|
|
4541
4565
|
collapsed = false,
|
|
4542
4566
|
icon
|
|
4543
4567
|
}) {
|
|
4544
|
-
const
|
|
4568
|
+
const drawer = useSidebarDrawer();
|
|
4569
|
+
const stated = shortcut === void 0 ? drawer ? false : DEFAULT_SHORTCUT : shortcut;
|
|
4570
|
+
const name = stated ? `${label} ${stated}` : label;
|
|
4545
4571
|
if (!collapsed) {
|
|
4546
4572
|
return /* @__PURE__ */ jsxs48(
|
|
4547
4573
|
"button",
|
|
@@ -4563,7 +4589,7 @@ function QuickSearchRow({
|
|
|
4563
4589
|
children: [
|
|
4564
4590
|
/* @__PURE__ */ jsx74("span", { className: "flex size-4 shrink-0 items-center justify-center [&_svg]:size-4", "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx74(Search2, {}) }),
|
|
4565
4591
|
/* @__PURE__ */ jsx74("span", { className: "min-w-0 flex-1 truncate", children: label }),
|
|
4566
|
-
|
|
4592
|
+
stated && /* @__PURE__ */ jsx74("span", { className: "shrink-0 text-xs font-medium text-text-tertiary", children: stated })
|
|
4567
4593
|
]
|
|
4568
4594
|
}
|
|
4569
4595
|
);
|
|
@@ -4703,12 +4729,15 @@ function ItemLabel({ item, kind }) {
|
|
|
4703
4729
|
}
|
|
4704
4730
|
var MARK_SIZE = { md: "sm", sm: "xs" };
|
|
4705
4731
|
var ICON_BOX = { md: "size-8 rounded-md", sm: "size-6 rounded-sm" };
|
|
4732
|
+
function MarkSlot({ size }) {
|
|
4733
|
+
return /* @__PURE__ */ jsx78("span", { "aria-hidden": "true", className: cn("shrink-0", ICON_BOX[size]) });
|
|
4734
|
+
}
|
|
4706
4735
|
function Mark2({ item, kind, size, reserve }) {
|
|
4707
4736
|
if (item.icon) {
|
|
4708
4737
|
return /* @__PURE__ */ jsx78("span", { className: cn("flex shrink-0 items-center justify-center overflow-hidden", ICON_BOX[size]), "aria-hidden": "true", children: item.icon });
|
|
4709
4738
|
}
|
|
4710
4739
|
const name = nameOf(item);
|
|
4711
|
-
if (!name) return reserve ? /* @__PURE__ */ jsx78(
|
|
4740
|
+
if (!name) return reserve ? /* @__PURE__ */ jsx78(MarkSlot, { size }) : null;
|
|
4712
4741
|
return /* @__PURE__ */ jsx78(EntityTile, { name, tone: kind === "product" ? "auto" : "neutral", size: MARK_SIZE[size] });
|
|
4713
4742
|
}
|
|
4714
4743
|
function OrgProductSwitcher({
|
|
@@ -4720,6 +4749,7 @@ function OrgProductSwitcher({
|
|
|
4720
4749
|
onProductSelect,
|
|
4721
4750
|
actions,
|
|
4722
4751
|
trigger = "stacked",
|
|
4752
|
+
mark = "draw",
|
|
4723
4753
|
className,
|
|
4724
4754
|
...props
|
|
4725
4755
|
}) {
|
|
@@ -4788,7 +4818,7 @@ function OrgProductSwitcher({
|
|
|
4788
4818
|
/* @__PURE__ */ jsx78(ChevronsUpDown3, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" })
|
|
4789
4819
|
] })
|
|
4790
4820
|
) : /* @__PURE__ */ jsxs51(DropdownMenuTrigger, { "aria-label": ariaLabel, className: cn(triggerBox, className), children: [
|
|
4791
|
-
triggerMark && /* @__PURE__ */ jsx78(Mark2, { item: triggerMark, kind: markKind, size: "md" }),
|
|
4821
|
+
triggerMark && (mark === "hold" ? /* @__PURE__ */ jsx78(MarkSlot, { size: "md" }) : /* @__PURE__ */ jsx78(Mark2, { item: triggerMark, kind: markKind, size: "md" })),
|
|
4792
4822
|
orgLevel ? /* @__PURE__ */ jsx78("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsx78(NameLine, { className: orgName ? "font-semibold text-text-primary" : "text-text-tertiary", children: orgName ?? NO_ORG_LABEL }) }) : /* @__PURE__ */ jsxs51("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
4793
4823
|
orgName && /* @__PURE__ */ jsx78("span", { className: "truncate text-xs leading-[normal] text-text-tertiary", children: orgName }),
|
|
4794
4824
|
/* @__PURE__ */ jsx78(NameLine, { className: productName ? "font-semibold text-text-primary" : "text-text-tertiary", children: productLabel })
|
|
@@ -4882,7 +4912,7 @@ function SidebarBackHeader({
|
|
|
4882
4912
|
...rowProps,
|
|
4883
4913
|
children: [
|
|
4884
4914
|
/* @__PURE__ */ jsx79("span", { className: arrowBox, children: /* @__PURE__ */ jsx79("span", { className: cn(arrowPlate, arrowClassName), ...arrowRest, children: /* @__PURE__ */ jsx79(Arrow, {}) }) }),
|
|
4885
|
-
/* @__PURE__ */ jsx79("span", { className: cn(titleBox, titleClassName), ...titleRest, children: title })
|
|
4915
|
+
/* @__PURE__ */ jsx79("span", { className: cn(titleBox, titleClassName), ...titleRest, children: /* @__PURE__ */ jsx79("span", { "data-slot": "nav-row-label", children: title }) })
|
|
4886
4916
|
]
|
|
4887
4917
|
}
|
|
4888
4918
|
);
|
|
@@ -4906,7 +4936,7 @@ function SidebarBackHeader({
|
|
|
4906
4936
|
onClick: onTitleClick,
|
|
4907
4937
|
className: cn(titleBox, focusRing, titleClassName),
|
|
4908
4938
|
...titleRest,
|
|
4909
|
-
children: title
|
|
4939
|
+
children: /* @__PURE__ */ jsx79("span", { "data-slot": "nav-row-label", children: title })
|
|
4910
4940
|
}
|
|
4911
4941
|
)
|
|
4912
4942
|
] });
|
|
@@ -5082,8 +5112,8 @@ Col.displayName = "Col";
|
|
|
5082
5112
|
// src/components/page-column.tsx
|
|
5083
5113
|
import { jsx as jsx83 } from "react/jsx-runtime";
|
|
5084
5114
|
var WIDTH = {
|
|
5085
|
-
reading: "grid gap-5 page-column",
|
|
5086
|
-
full: "grid gap-5"
|
|
5115
|
+
reading: "grid grid-cols-1 gap-5 page-column",
|
|
5116
|
+
full: "grid grid-cols-1 gap-5"
|
|
5087
5117
|
};
|
|
5088
5118
|
function PageColumn({ className, width = "reading", ...props }) {
|
|
5089
5119
|
return /* @__PURE__ */ jsx83("div", { "data-slot": "page-column", className: cn(WIDTH[width], className), ...props });
|
|
@@ -5779,6 +5809,7 @@ import { BellRing, Settings } from "lucide-react";
|
|
|
5779
5809
|
|
|
5780
5810
|
// src/components/notification-row.tsx
|
|
5781
5811
|
import * as React77 from "react";
|
|
5812
|
+
import { Check as Check11 } from "lucide-react";
|
|
5782
5813
|
|
|
5783
5814
|
// src/components/notification-parts.tsx
|
|
5784
5815
|
import { Check as Check10 } from "lucide-react";
|
|
@@ -5813,30 +5844,63 @@ function DeepLinkControl({
|
|
|
5813
5844
|
|
|
5814
5845
|
// src/components/notification-row.tsx
|
|
5815
5846
|
import { jsx as jsx91, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
5847
|
+
var DENSITY = {
|
|
5848
|
+
compact: {
|
|
5849
|
+
card: "px-3 py-2.5",
|
|
5850
|
+
body: "line-clamp-2 text-xs",
|
|
5851
|
+
deepLink: "text-xs font-semibold",
|
|
5852
|
+
actionChip: "rounded-md px-2.5 py-1 text-xs font-medium",
|
|
5853
|
+
actionText: "text-xs font-semibold",
|
|
5854
|
+
titleSettled: ""
|
|
5855
|
+
},
|
|
5856
|
+
comfortable: {
|
|
5857
|
+
card: "px-4 py-3",
|
|
5858
|
+
body: "text-sm",
|
|
5859
|
+
deepLink: "text-sm font-medium",
|
|
5860
|
+
actionChip: "rounded-md px-3 py-1.5 text-sm font-medium",
|
|
5861
|
+
actionText: "text-sm font-semibold",
|
|
5862
|
+
titleSettled: "font-medium"
|
|
5863
|
+
}
|
|
5864
|
+
};
|
|
5816
5865
|
var NotificationRow = React77.forwardRef(
|
|
5817
|
-
({
|
|
5866
|
+
({
|
|
5867
|
+
item,
|
|
5868
|
+
onItemClick,
|
|
5869
|
+
onActionClick,
|
|
5870
|
+
onMarkRead,
|
|
5871
|
+
formatAge,
|
|
5872
|
+
density = "compact",
|
|
5873
|
+
className,
|
|
5874
|
+
...props
|
|
5875
|
+
}, ref) => {
|
|
5876
|
+
const drawn = DENSITY[density];
|
|
5818
5877
|
const settled = isNotificationSettled(item);
|
|
5819
5878
|
const unread = !settled && !item.read;
|
|
5820
5879
|
const markable = Boolean(onMarkRead) && !item.read && item.cls !== "ephemeral";
|
|
5821
5880
|
const actions = settled ? [] : item.actions ?? [];
|
|
5822
5881
|
const stamp = item.createdAt ? item.createdAt instanceof Date ? item.createdAt : new Date(item.createdAt) : null;
|
|
5823
5882
|
const age = stamp ? formatAge ? formatAge(stamp) : formatRelativeAge(stamp) : null;
|
|
5883
|
+
const receiptLine = density === "comfortable" ? item.receipt : void 0;
|
|
5824
5884
|
return (
|
|
5825
5885
|
// Three steps of one ladder, and every one of them a token a reader can read:
|
|
5826
5886
|
// unread is the loudest, read is quieter, settled is quietest. An opacity is
|
|
5827
5887
|
// not a step — it drags the text under the contrast floor with the row.
|
|
5888
|
+
//
|
|
5889
|
+
// The fill is `bg-bg-overlay` and the lift is the hairline, because the bell's
|
|
5890
|
+
// panel is `bg-bg-overlay` too and that is the top of the ladder: on it a fill
|
|
5891
|
+
// can only step down, and stepping down inverts between the themes.
|
|
5828
5892
|
/* @__PURE__ */ jsxs59(
|
|
5829
5893
|
"div",
|
|
5830
5894
|
{
|
|
5831
5895
|
ref,
|
|
5832
|
-
className: cn("group rounded-lg
|
|
5896
|
+
className: cn("group rounded-lg border border-border-subtle bg-bg-overlay", drawn.card, className),
|
|
5833
5897
|
...props,
|
|
5834
5898
|
children: [
|
|
5835
5899
|
/* @__PURE__ */ jsxs59("div", { className: "flex items-start gap-2.5", children: [
|
|
5836
5900
|
/* @__PURE__ */ jsxs59("div", { className: "min-w-0 flex-1", children: [
|
|
5837
5901
|
/* @__PURE__ */ jsxs59("p", { className: "truncate text-xs text-text-tertiary", children: [
|
|
5838
5902
|
/* @__PURE__ */ jsx91("span", { className: "font-semibold", children: item.source }),
|
|
5839
|
-
item.receipt ? `, ${item.receipt}` : ""
|
|
5903
|
+
item.receipt && !receiptLine ? `, ${item.receipt}` : ""
|
|
5840
5904
|
] }),
|
|
5841
5905
|
/* @__PURE__ */ jsx91(
|
|
5842
5906
|
"button",
|
|
@@ -5845,7 +5909,7 @@ var NotificationRow = React77.forwardRef(
|
|
|
5845
5909
|
onClick: () => onItemClick?.(item),
|
|
5846
5910
|
className: cn(
|
|
5847
5911
|
"mt-0.5 block cursor-pointer text-left text-sm leading-tight underline-offset-2 hover:underline",
|
|
5848
|
-
settled ? "text-text-tertiary" : unread ? "font-semibold text-text-primary" : "text-text-secondary"
|
|
5912
|
+
settled ? cn("text-text-tertiary", drawn.titleSettled) : unread ? "font-semibold text-text-primary" : "text-text-secondary"
|
|
5849
5913
|
),
|
|
5850
5914
|
children: item.title
|
|
5851
5915
|
}
|
|
@@ -5854,7 +5918,8 @@ var NotificationRow = React77.forwardRef(
|
|
|
5854
5918
|
"p",
|
|
5855
5919
|
{
|
|
5856
5920
|
className: cn(
|
|
5857
|
-
"mt-0.5
|
|
5921
|
+
"mt-0.5",
|
|
5922
|
+
drawn.body,
|
|
5858
5923
|
settled ? "text-text-tertiary" : "text-text-secondary"
|
|
5859
5924
|
),
|
|
5860
5925
|
children: item.body
|
|
@@ -5866,7 +5931,11 @@ var NotificationRow = React77.forwardRef(
|
|
|
5866
5931
|
markable && /* @__PURE__ */ jsx91(MarkReadButton, { title: item.title, onClick: () => onMarkRead(item.id) })
|
|
5867
5932
|
] })
|
|
5868
5933
|
] }),
|
|
5869
|
-
(actions.length > 0 || item.deepLink) && /* @__PURE__ */ jsxs59("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-2", children: [
|
|
5934
|
+
(actions.length > 0 || item.deepLink || receiptLine) && /* @__PURE__ */ jsxs59("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-2", children: [
|
|
5935
|
+
receiptLine && /* @__PURE__ */ jsxs59("span", { className: "inline-flex items-center gap-1.5 text-sm text-text-tertiary", children: [
|
|
5936
|
+
/* @__PURE__ */ jsx91(Check11, { className: "size-3 shrink-0 text-text-success", "aria-hidden": "true" }),
|
|
5937
|
+
receiptLine
|
|
5938
|
+
] }),
|
|
5870
5939
|
actions.map((action) => {
|
|
5871
5940
|
const chip = action.variant === "primary" || action.variant === "destructive";
|
|
5872
5941
|
return /* @__PURE__ */ jsx91(
|
|
@@ -5878,9 +5947,19 @@ var NotificationRow = React77.forwardRef(
|
|
|
5878
5947
|
className: cn(
|
|
5879
5948
|
rowControlHitArea,
|
|
5880
5949
|
"cursor-pointer",
|
|
5881
|
-
chip ?
|
|
5950
|
+
chip ? cn(drawn.actionChip, "transition-colors duration-fast") : cn(
|
|
5951
|
+
drawn.actionText,
|
|
5952
|
+
"text-text-secondary transition-opacity duration-fast hover:opacity-80"
|
|
5953
|
+
),
|
|
5882
5954
|
action.variant === "primary" && "bg-bg-brand text-text-on-brand hover:bg-bg-brand-hover",
|
|
5883
|
-
|
|
5955
|
+
// The pair stays two filled chips, and the red one is the red wash rather than
|
|
5956
|
+
// a grey step: `bg-bg-elevated` is the same hex as the row's own `bg-bg-overlay`
|
|
5957
|
+
// in dark (1.000:1), so it had no fill left there at all. The wash steps off the
|
|
5958
|
+
// row in both (1.171:1 light, 1.328:1 dark) and is what
|
|
5959
|
+
// `Guidelines/Controls/Destructive actions` puts a destructive control on. The
|
|
5960
|
+
// pointer takes it to the solid plate, which is a hover affordance and not the
|
|
5961
|
+
// resting signal that page argues about.
|
|
5962
|
+
action.variant === "destructive" && "bg-bg-danger-subtle text-text-danger hover:bg-bg-danger hover:text-text-on-danger"
|
|
5884
5963
|
),
|
|
5885
5964
|
children: action.label
|
|
5886
5965
|
},
|
|
@@ -5895,7 +5974,8 @@ var NotificationRow = React77.forwardRef(
|
|
|
5895
5974
|
onClick: () => onItemClick?.(item),
|
|
5896
5975
|
className: cn(
|
|
5897
5976
|
rowControlHitArea,
|
|
5898
|
-
|
|
5977
|
+
drawn.deepLink,
|
|
5978
|
+
"text-text-brand transition-opacity duration-fast hover:opacity-80"
|
|
5899
5979
|
)
|
|
5900
5980
|
}
|
|
5901
5981
|
)
|
|
@@ -5957,7 +6037,7 @@ var NotificationBell = React78.forwardRef(
|
|
|
5957
6037
|
maxHeight: "var(--radix-popover-content-available-height, 32rem)",
|
|
5958
6038
|
maxWidth: "var(--radix-popover-content-available-width, 380px)"
|
|
5959
6039
|
},
|
|
5960
|
-
className: "flex w-[380px] flex-col overflow-hidden p-0",
|
|
6040
|
+
className: "flex w-[380px] flex-col overflow-hidden rounded-xl p-0",
|
|
5961
6041
|
children: [
|
|
5962
6042
|
/* @__PURE__ */ jsxs60("div", { className: "flex shrink-0 items-center justify-between px-5 py-3", children: [
|
|
5963
6043
|
/* @__PURE__ */ jsx92("span", { className: "text-sm font-bold text-text-primary", children: "Notification center" }),
|
|
@@ -6014,7 +6094,7 @@ NotificationBell.displayName = "NotificationBell";
|
|
|
6014
6094
|
|
|
6015
6095
|
// src/components/notification-center.tsx
|
|
6016
6096
|
import * as React79 from "react";
|
|
6017
|
-
import { Check as
|
|
6097
|
+
import { Check as Check12, Search as Search4 } from "lucide-react";
|
|
6018
6098
|
import { jsx as jsx93, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
6019
6099
|
var chipBase = "cursor-pointer rounded-md px-3 py-1.5 text-sm font-medium transition-colors duration-fast";
|
|
6020
6100
|
var chipOn = "bg-bg-sunken font-semibold text-text-primary";
|
|
@@ -6061,7 +6141,7 @@ function CenterRow({
|
|
|
6061
6141
|
item.body && /* @__PURE__ */ jsx93("p", { className: "mt-0.5 text-sm leading-snug text-text-secondary", children: item.body }),
|
|
6062
6142
|
(item.receipt || item.deepLink) && /* @__PURE__ */ jsxs61("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-1.5", children: [
|
|
6063
6143
|
item.receipt && /* @__PURE__ */ jsxs61("span", { className: "inline-flex items-center gap-1.5 text-sm text-text-tertiary", children: [
|
|
6064
|
-
/* @__PURE__ */ jsx93(
|
|
6144
|
+
/* @__PURE__ */ jsx93(Check12, { className: "size-3 shrink-0 text-text-success", "aria-hidden": "true" }),
|
|
6065
6145
|
item.receipt
|
|
6066
6146
|
] }),
|
|
6067
6147
|
item.deepLink && /* @__PURE__ */ jsx93(
|
|
@@ -6435,7 +6515,7 @@ import { X as X4 } from "lucide-react";
|
|
|
6435
6515
|
import { jsx as jsx95, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
6436
6516
|
var chipBase2 = "cursor-pointer rounded-lg px-2.5 py-1 text-sm font-medium transition-colors duration-fast";
|
|
6437
6517
|
var chipPrimary = "bg-bg-brand text-text-on-brand hover:bg-bg-brand-hover";
|
|
6438
|
-
var chipDestructive = "bg-bg-
|
|
6518
|
+
var chipDestructive = "bg-bg-danger-subtle text-text-danger hover:bg-bg-danger hover:text-text-on-danger";
|
|
6439
6519
|
var linkAction = "cursor-pointer text-sm font-semibold text-text-brand transition-colors duration-fast hover:text-text-primary";
|
|
6440
6520
|
var NotificationToast = React81.forwardRef(
|
|
6441
6521
|
({
|
|
@@ -6463,7 +6543,7 @@ var NotificationToast = React81.forwardRef(
|
|
|
6463
6543
|
role: "status",
|
|
6464
6544
|
"aria-live": item.severity === "critical" ? "assertive" : "polite",
|
|
6465
6545
|
className: cn(
|
|
6466
|
-
"rounded-2xl border border-border-subtle bg-bg-
|
|
6546
|
+
"rounded-2xl border border-border-subtle bg-bg-overlay p-4 shadow-(--menu-shadow)",
|
|
6467
6547
|
className
|
|
6468
6548
|
),
|
|
6469
6549
|
children: [
|
|
@@ -6639,6 +6719,80 @@ var NotificationToaster = React82.forwardRef(
|
|
|
6639
6719
|
);
|
|
6640
6720
|
NotificationToaster.displayName = "NotificationToaster";
|
|
6641
6721
|
|
|
6722
|
+
// src/components/onboarding-screen-shell.tsx
|
|
6723
|
+
import * as React83 from "react";
|
|
6724
|
+
|
|
6725
|
+
// src/lib/auth-surface.ts
|
|
6726
|
+
var AUTH_GLOW_BG = "radial-gradient(560px 320px at 28% 16%, var(--auth-glow-a), transparent 68%),radial-gradient(520px 340px at 78% 90%, var(--auth-glow-b), transparent 66%),var(--bg-sunken)";
|
|
6727
|
+
var AUTH_FILLED_BUTTON = "flex h-[46px] w-full items-center justify-center gap-[11px] rounded-[10px] border border-transparent bg-text-primary px-[14px] text-[14.5px] font-semibold tracking-[-0.005em] text-bg-sunken transition-opacity duration-fast hover:opacity-[0.92] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand active:translate-y-px disabled:cursor-not-allowed disabled:opacity-[0.55]";
|
|
6728
|
+
var AUTH_QUIET_BUTTON = "flex h-[46px] w-full items-center justify-center gap-[11px] rounded-[10px] border border-border-default bg-transparent px-[14px] text-[14.5px] font-medium tracking-[-0.005em] text-text-secondary transition-colors duration-fast hover:bg-bg-secondary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand";
|
|
6729
|
+
var AUTH_BUTTON_SHADOW = "var(--auth-btn-shadow)";
|
|
6730
|
+
|
|
6731
|
+
// src/components/onboarding-screen-shell.tsx
|
|
6732
|
+
import { jsx as jsx97, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
6733
|
+
var CARD_WIDTH = {
|
|
6734
|
+
md: "max-w-[440px]",
|
|
6735
|
+
lg: "max-w-[560px]"
|
|
6736
|
+
};
|
|
6737
|
+
var OnboardingScreenShell = React83.forwardRef(
|
|
6738
|
+
({
|
|
6739
|
+
logo,
|
|
6740
|
+
themeToggle = /* @__PURE__ */ jsx97(ThemeToggle, {}),
|
|
6741
|
+
title,
|
|
6742
|
+
description,
|
|
6743
|
+
footer,
|
|
6744
|
+
width = "md",
|
|
6745
|
+
children,
|
|
6746
|
+
className,
|
|
6747
|
+
...props
|
|
6748
|
+
}, ref) => /* @__PURE__ */ jsxs64(
|
|
6749
|
+
"div",
|
|
6750
|
+
{
|
|
6751
|
+
ref,
|
|
6752
|
+
className: cn(
|
|
6753
|
+
"relative flex min-h-screen w-full flex-col items-center justify-center overflow-hidden px-6 py-12 text-text-primary",
|
|
6754
|
+
className
|
|
6755
|
+
),
|
|
6756
|
+
style: { background: AUTH_GLOW_BG },
|
|
6757
|
+
...props,
|
|
6758
|
+
children: [
|
|
6759
|
+
themeToggle && /* @__PURE__ */ jsx97("div", { className: "absolute right-6 top-6", children: themeToggle }),
|
|
6760
|
+
/* @__PURE__ */ jsxs64(
|
|
6761
|
+
"div",
|
|
6762
|
+
{
|
|
6763
|
+
className: cn(
|
|
6764
|
+
"relative w-full rounded-2xl bg-bg-surface px-[34px] pb-[30px] pt-[38px] text-center",
|
|
6765
|
+
CARD_WIDTH[width]
|
|
6766
|
+
),
|
|
6767
|
+
style: {
|
|
6768
|
+
border: "1px solid var(--auth-card-border)",
|
|
6769
|
+
boxShadow: "var(--auth-card-shadow)"
|
|
6770
|
+
},
|
|
6771
|
+
children: [
|
|
6772
|
+
logo && /* @__PURE__ */ jsx97("div", { className: "mb-[22px] flex items-center justify-center text-xl font-bold leading-none tracking-[-0.02em] text-text-primary", children: logo }),
|
|
6773
|
+
title != null && /* @__PURE__ */ jsx97(
|
|
6774
|
+
"h1",
|
|
6775
|
+
{
|
|
6776
|
+
className: cn(
|
|
6777
|
+
"text-lg font-semibold leading-[1.25] tracking-[-0.015em] text-text-primary",
|
|
6778
|
+
// Without a description the headline itself carries the gap to the form.
|
|
6779
|
+
description ? "mb-[8px]" : "mb-[24px]"
|
|
6780
|
+
),
|
|
6781
|
+
children: title
|
|
6782
|
+
}
|
|
6783
|
+
),
|
|
6784
|
+
description && /* @__PURE__ */ jsx97("p", { className: "mx-auto mb-[24px] max-w-[320px] text-sm text-text-secondary", children: description }),
|
|
6785
|
+
/* @__PURE__ */ jsx97("div", { className: "text-left", children }),
|
|
6786
|
+
footer != null && /* @__PURE__ */ jsx97("div", { className: "mt-[24px] text-xs tracking-[0.005em] text-text-tertiary", children: footer })
|
|
6787
|
+
]
|
|
6788
|
+
}
|
|
6789
|
+
)
|
|
6790
|
+
]
|
|
6791
|
+
}
|
|
6792
|
+
)
|
|
6793
|
+
);
|
|
6794
|
+
OnboardingScreenShell.displayName = "OnboardingScreenShell";
|
|
6795
|
+
|
|
6642
6796
|
// src/lib/countries.ts
|
|
6643
6797
|
var COUNTRY_OPTIONS = [
|
|
6644
6798
|
{ value: "AF", label: "Afghanistan" },
|
|
@@ -6893,15 +7047,8 @@ var COUNTRY_OPTIONS = [
|
|
|
6893
7047
|
];
|
|
6894
7048
|
|
|
6895
7049
|
// src/components/organization-onboarding-form.tsx
|
|
6896
|
-
import * as
|
|
6897
|
-
|
|
6898
|
-
// src/lib/auth-surface.ts
|
|
6899
|
-
var AUTH_FILLED_BUTTON = "flex h-[46px] w-full items-center justify-center gap-[11px] rounded-[10px] border border-transparent bg-text-primary px-[14px] text-[14.5px] font-semibold tracking-[-0.005em] text-bg-sunken transition-opacity duration-fast hover:opacity-[0.92] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand active:translate-y-px disabled:cursor-not-allowed disabled:opacity-[0.55]";
|
|
6900
|
-
var AUTH_QUIET_BUTTON = "flex h-[46px] w-full items-center justify-center gap-[11px] rounded-[10px] border border-border-default bg-transparent px-[14px] text-[14.5px] font-medium tracking-[-0.005em] text-text-secondary transition-colors duration-fast hover:bg-bg-secondary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand";
|
|
6901
|
-
var AUTH_BUTTON_SHADOW = "var(--auth-btn-shadow)";
|
|
6902
|
-
|
|
6903
|
-
// src/components/organization-onboarding-form.tsx
|
|
6904
|
-
import { jsx as jsx97, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
7050
|
+
import * as React84 from "react";
|
|
7051
|
+
import { jsx as jsx98, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
6905
7052
|
var CONTROLLER_SHARE_PCT = 50;
|
|
6906
7053
|
var MAX_BENEFICIAL_OWNERS = 50;
|
|
6907
7054
|
var REQUIRED_FIELD_LABELS = {
|
|
@@ -6916,7 +7063,7 @@ function isOwnershipViolation(violation) {
|
|
|
6916
7063
|
return /ownership[_\s-]?confirmed/i.test(violation);
|
|
6917
7064
|
}
|
|
6918
7065
|
function RequiredMark() {
|
|
6919
|
-
return /* @__PURE__ */
|
|
7066
|
+
return /* @__PURE__ */ jsx98("span", { className: "text-text-danger", children: " *" });
|
|
6920
7067
|
}
|
|
6921
7068
|
function parseShare(raw) {
|
|
6922
7069
|
if (!/^\d{1,3}$/.test(raw.trim())) return null;
|
|
@@ -6945,23 +7092,23 @@ function OrganizationOnboardingForm({
|
|
|
6945
7092
|
onCancel,
|
|
6946
7093
|
className
|
|
6947
7094
|
}) {
|
|
6948
|
-
const [name, setName] =
|
|
6949
|
-
const [legalName, setLegalName] =
|
|
6950
|
-
const [ownerName, setOwnerName] =
|
|
6951
|
-
const [countryOfIncorporation, setCountryOfIncorporation] =
|
|
7095
|
+
const [name, setName] = React84.useState(defaultValues?.name ?? "");
|
|
7096
|
+
const [legalName, setLegalName] = React84.useState(defaultValues?.legal_name ?? "");
|
|
7097
|
+
const [ownerName, setOwnerName] = React84.useState(defaultValues?.owner_name ?? "");
|
|
7098
|
+
const [countryOfIncorporation, setCountryOfIncorporation] = React84.useState(
|
|
6952
7099
|
defaultValues?.country_of_incorporation ?? ""
|
|
6953
7100
|
);
|
|
6954
|
-
const [residencyCountry, setResidencyCountry] =
|
|
7101
|
+
const [residencyCountry, setResidencyCountry] = React84.useState(
|
|
6955
7102
|
defaultValues?.residency_country ?? ""
|
|
6956
7103
|
);
|
|
6957
|
-
const [owners, setOwners] =
|
|
7104
|
+
const [owners, setOwners] = React84.useState(
|
|
6958
7105
|
() => initialRows(defaultValues?.beneficial_owners)
|
|
6959
7106
|
);
|
|
6960
|
-
const [ownershipConfirmed, setOwnershipConfirmed] =
|
|
6961
|
-
const [confirmationAttempted, setConfirmationAttempted] =
|
|
6962
|
-
const [requiredAttempted, setRequiredAttempted] =
|
|
6963
|
-
const nextKeyRef =
|
|
6964
|
-
const submittingRef =
|
|
7107
|
+
const [ownershipConfirmed, setOwnershipConfirmed] = React84.useState(false);
|
|
7108
|
+
const [confirmationAttempted, setConfirmationAttempted] = React84.useState(false);
|
|
7109
|
+
const [requiredAttempted, setRequiredAttempted] = React84.useState(false);
|
|
7110
|
+
const nextKeyRef = React84.useRef(owners.length);
|
|
7111
|
+
const submittingRef = React84.useRef(false);
|
|
6965
7112
|
const trimmed = name.trim();
|
|
6966
7113
|
const filledOwners = owners.filter((row) => !isRowBlank(row));
|
|
6967
7114
|
const ownerShares = filledOwners.map((row) => parseShare(row.share));
|
|
@@ -7023,7 +7170,7 @@ function OrganizationOnboardingForm({
|
|
|
7023
7170
|
...needsOwnershipConfirmation ? { ownership_confirmed: ownershipConfirmed } : {}
|
|
7024
7171
|
});
|
|
7025
7172
|
};
|
|
7026
|
-
|
|
7173
|
+
React84.useEffect(() => {
|
|
7027
7174
|
submittingRef.current = false;
|
|
7028
7175
|
}, [
|
|
7029
7176
|
name,
|
|
@@ -7036,12 +7183,12 @@ function OrganizationOnboardingForm({
|
|
|
7036
7183
|
submitting,
|
|
7037
7184
|
serverError
|
|
7038
7185
|
]);
|
|
7039
|
-
const countryField = (params) => /* @__PURE__ */
|
|
7040
|
-
/* @__PURE__ */
|
|
7186
|
+
const countryField = (params) => /* @__PURE__ */ jsxs65("div", { className: "space-y-1.5", children: [
|
|
7187
|
+
/* @__PURE__ */ jsxs65(Label2, { htmlFor: params.id, children: [
|
|
7041
7188
|
params.label,
|
|
7042
|
-
/* @__PURE__ */
|
|
7189
|
+
/* @__PURE__ */ jsx98(RequiredMark, {})
|
|
7043
7190
|
] }),
|
|
7044
|
-
/* @__PURE__ */
|
|
7191
|
+
/* @__PURE__ */ jsx98(
|
|
7045
7192
|
Select,
|
|
7046
7193
|
{
|
|
7047
7194
|
id: params.id,
|
|
@@ -7054,13 +7201,13 @@ function OrganizationOnboardingForm({
|
|
|
7054
7201
|
}
|
|
7055
7202
|
)
|
|
7056
7203
|
] });
|
|
7057
|
-
return /* @__PURE__ */
|
|
7058
|
-
/* @__PURE__ */
|
|
7059
|
-
/* @__PURE__ */
|
|
7204
|
+
return /* @__PURE__ */ jsxs65("form", { onSubmit: handleSubmit, className: cn("space-y-4", className), children: [
|
|
7205
|
+
/* @__PURE__ */ jsxs65("div", { className: "space-y-1.5", children: [
|
|
7206
|
+
/* @__PURE__ */ jsxs65(Label2, { htmlFor: "create-org-name", children: [
|
|
7060
7207
|
REQUIRED_FIELD_LABELS.name,
|
|
7061
|
-
/* @__PURE__ */
|
|
7208
|
+
/* @__PURE__ */ jsx98(RequiredMark, {})
|
|
7062
7209
|
] }),
|
|
7063
|
-
/* @__PURE__ */
|
|
7210
|
+
/* @__PURE__ */ jsx98(
|
|
7064
7211
|
Input,
|
|
7065
7212
|
{
|
|
7066
7213
|
id: "create-org-name",
|
|
@@ -7071,12 +7218,12 @@ function OrganizationOnboardingForm({
|
|
|
7071
7218
|
}
|
|
7072
7219
|
)
|
|
7073
7220
|
] }),
|
|
7074
|
-
/* @__PURE__ */
|
|
7075
|
-
/* @__PURE__ */
|
|
7221
|
+
/* @__PURE__ */ jsxs65("div", { className: "space-y-1.5", children: [
|
|
7222
|
+
/* @__PURE__ */ jsxs65(Label2, { htmlFor: "create-org-legal-name", children: [
|
|
7076
7223
|
REQUIRED_FIELD_LABELS.legalName,
|
|
7077
|
-
/* @__PURE__ */
|
|
7224
|
+
/* @__PURE__ */ jsx98(RequiredMark, {})
|
|
7078
7225
|
] }),
|
|
7079
|
-
/* @__PURE__ */
|
|
7226
|
+
/* @__PURE__ */ jsx98(
|
|
7080
7227
|
Input,
|
|
7081
7228
|
{
|
|
7082
7229
|
id: "create-org-legal-name",
|
|
@@ -7087,12 +7234,12 @@ function OrganizationOnboardingForm({
|
|
|
7087
7234
|
}
|
|
7088
7235
|
)
|
|
7089
7236
|
] }),
|
|
7090
|
-
/* @__PURE__ */
|
|
7091
|
-
/* @__PURE__ */
|
|
7237
|
+
/* @__PURE__ */ jsxs65("div", { className: "space-y-1.5", children: [
|
|
7238
|
+
/* @__PURE__ */ jsxs65(Label2, { htmlFor: "create-org-owner-name", children: [
|
|
7092
7239
|
REQUIRED_FIELD_LABELS.ownerName,
|
|
7093
|
-
/* @__PURE__ */
|
|
7240
|
+
/* @__PURE__ */ jsx98(RequiredMark, {})
|
|
7094
7241
|
] }),
|
|
7095
|
-
/* @__PURE__ */
|
|
7242
|
+
/* @__PURE__ */ jsx98(
|
|
7096
7243
|
Input,
|
|
7097
7244
|
{
|
|
7098
7245
|
id: "create-org-owner-name",
|
|
@@ -7115,10 +7262,10 @@ function OrganizationOnboardingForm({
|
|
|
7115
7262
|
value: residencyCountry,
|
|
7116
7263
|
onChange: setResidencyCountry
|
|
7117
7264
|
}),
|
|
7118
|
-
/* @__PURE__ */
|
|
7119
|
-
/* @__PURE__ */
|
|
7120
|
-
/* @__PURE__ */
|
|
7121
|
-
/* @__PURE__ */
|
|
7265
|
+
/* @__PURE__ */ jsxs65("div", { className: "space-y-2", children: [
|
|
7266
|
+
/* @__PURE__ */ jsxs65("div", { className: "flex items-center justify-between", children: [
|
|
7267
|
+
/* @__PURE__ */ jsx98(Label2, { children: "Beneficial owners" }),
|
|
7268
|
+
/* @__PURE__ */ jsx98(
|
|
7122
7269
|
Button,
|
|
7123
7270
|
{
|
|
7124
7271
|
type: "button",
|
|
@@ -7131,16 +7278,16 @@ function OrganizationOnboardingForm({
|
|
|
7131
7278
|
}
|
|
7132
7279
|
)
|
|
7133
7280
|
] }),
|
|
7134
|
-
owners.length === 0 && /* @__PURE__ */
|
|
7135
|
-
owners.map((row) => /* @__PURE__ */
|
|
7281
|
+
owners.length === 0 && /* @__PURE__ */ jsx98("p", { className: "text-xs text-text-tertiary", children: "List the natural persons who ultimately own or control the organization." }),
|
|
7282
|
+
owners.map((row) => /* @__PURE__ */ jsxs65(
|
|
7136
7283
|
"div",
|
|
7137
7284
|
{
|
|
7138
7285
|
"data-testid": `beneficial-owner-row-${row.key}`,
|
|
7139
7286
|
className: "flex items-end gap-2",
|
|
7140
7287
|
children: [
|
|
7141
|
-
/* @__PURE__ */
|
|
7142
|
-
/* @__PURE__ */
|
|
7143
|
-
/* @__PURE__ */
|
|
7288
|
+
/* @__PURE__ */ jsxs65("div", { className: "flex-1 space-y-1", children: [
|
|
7289
|
+
/* @__PURE__ */ jsx98(Label2, { htmlFor: `bo-name-${row.key}`, className: "text-xs", children: "Name" }),
|
|
7290
|
+
/* @__PURE__ */ jsx98(
|
|
7144
7291
|
Input,
|
|
7145
7292
|
{
|
|
7146
7293
|
id: `bo-name-${row.key}`,
|
|
@@ -7150,9 +7297,9 @@ function OrganizationOnboardingForm({
|
|
|
7150
7297
|
}
|
|
7151
7298
|
)
|
|
7152
7299
|
] }),
|
|
7153
|
-
/* @__PURE__ */
|
|
7154
|
-
/* @__PURE__ */
|
|
7155
|
-
/* @__PURE__ */
|
|
7300
|
+
/* @__PURE__ */ jsxs65("div", { className: "w-40 space-y-1", children: [
|
|
7301
|
+
/* @__PURE__ */ jsx98(Label2, { htmlFor: `bo-country-${row.key}`, className: "text-xs", children: "Country" }),
|
|
7302
|
+
/* @__PURE__ */ jsx98(
|
|
7156
7303
|
Select,
|
|
7157
7304
|
{
|
|
7158
7305
|
id: `bo-country-${row.key}`,
|
|
@@ -7165,9 +7312,9 @@ function OrganizationOnboardingForm({
|
|
|
7165
7312
|
}
|
|
7166
7313
|
)
|
|
7167
7314
|
] }),
|
|
7168
|
-
/* @__PURE__ */
|
|
7169
|
-
/* @__PURE__ */
|
|
7170
|
-
/* @__PURE__ */
|
|
7315
|
+
/* @__PURE__ */ jsxs65("div", { className: "w-24 space-y-1", children: [
|
|
7316
|
+
/* @__PURE__ */ jsx98(Label2, { htmlFor: `bo-share-${row.key}`, className: "text-xs", children: "Share %" }),
|
|
7317
|
+
/* @__PURE__ */ jsx98(
|
|
7171
7318
|
Input,
|
|
7172
7319
|
{
|
|
7173
7320
|
id: `bo-share-${row.key}`,
|
|
@@ -7178,7 +7325,7 @@ function OrganizationOnboardingForm({
|
|
|
7178
7325
|
}
|
|
7179
7326
|
)
|
|
7180
7327
|
] }),
|
|
7181
|
-
/* @__PURE__ */
|
|
7328
|
+
/* @__PURE__ */ jsx98(
|
|
7182
7329
|
Button,
|
|
7183
7330
|
{
|
|
7184
7331
|
type: "button",
|
|
@@ -7193,16 +7340,16 @@ function OrganizationOnboardingForm({
|
|
|
7193
7340
|
},
|
|
7194
7341
|
row.key
|
|
7195
7342
|
)),
|
|
7196
|
-
!ownersValid && /* @__PURE__ */
|
|
7197
|
-
shareSum > 100 && /* @__PURE__ */
|
|
7343
|
+
!ownersValid && /* @__PURE__ */ jsx98("p", { "data-testid": "beneficial-owners-error", className: "text-xs text-text-danger", children: "Every owner needs a name, a country and a share between 0 and 100." }),
|
|
7344
|
+
shareSum > 100 && /* @__PURE__ */ jsxs65("p", { "data-testid": "beneficial-owners-sum-warning", className: "text-xs text-text-warning", children: [
|
|
7198
7345
|
"The listed shares add up to ",
|
|
7199
7346
|
shareSum,
|
|
7200
7347
|
"%, which is more than 100%."
|
|
7201
7348
|
] })
|
|
7202
7349
|
] }),
|
|
7203
|
-
needsOwnershipConfirmation && /* @__PURE__ */
|
|
7204
|
-
/* @__PURE__ */
|
|
7205
|
-
/* @__PURE__ */
|
|
7350
|
+
needsOwnershipConfirmation && /* @__PURE__ */ jsxs65("div", { className: "space-y-1", children: [
|
|
7351
|
+
/* @__PURE__ */ jsxs65("div", { className: "flex items-start gap-2", children: [
|
|
7352
|
+
/* @__PURE__ */ jsx98(
|
|
7206
7353
|
Checkbox,
|
|
7207
7354
|
{
|
|
7208
7355
|
id: "create-org-ownership-confirmed",
|
|
@@ -7212,19 +7359,19 @@ function OrganizationOnboardingForm({
|
|
|
7212
7359
|
onCheckedChange: (value) => setOwnershipConfirmed(value === true)
|
|
7213
7360
|
}
|
|
7214
7361
|
),
|
|
7215
|
-
/* @__PURE__ */
|
|
7362
|
+
/* @__PURE__ */ jsxs65(
|
|
7216
7363
|
Label2,
|
|
7217
7364
|
{
|
|
7218
7365
|
htmlFor: "create-org-ownership-confirmed",
|
|
7219
7366
|
className: "text-xs font-regular leading-snug",
|
|
7220
7367
|
children: [
|
|
7221
7368
|
"I confirm the ownership structure above is complete and correct",
|
|
7222
|
-
/* @__PURE__ */
|
|
7369
|
+
/* @__PURE__ */ jsx98(RequiredMark, {})
|
|
7223
7370
|
]
|
|
7224
7371
|
}
|
|
7225
7372
|
)
|
|
7226
7373
|
] }),
|
|
7227
|
-
showConfirmationError && /* @__PURE__ */
|
|
7374
|
+
showConfirmationError && /* @__PURE__ */ jsx98(
|
|
7228
7375
|
"p",
|
|
7229
7376
|
{
|
|
7230
7377
|
id: "create-org-ownership-error",
|
|
@@ -7234,13 +7381,13 @@ function OrganizationOnboardingForm({
|
|
|
7234
7381
|
}
|
|
7235
7382
|
)
|
|
7236
7383
|
] }),
|
|
7237
|
-
showRequiredError && /* @__PURE__ */
|
|
7238
|
-
(serverError || otherViolations.length > 0) && /* @__PURE__ */
|
|
7384
|
+
showRequiredError && /* @__PURE__ */ jsx98(InlineError, { "data-testid": "create-org-required-error", children: missingRequired.length === 1 ? `${missingRequired[0]} is required` : `These fields are required: ${missingRequired.join(", ")}` }),
|
|
7385
|
+
(serverError || otherViolations.length > 0) && /* @__PURE__ */ jsxs65(InlineError, { "data-testid": "create-org-server-error", children: [
|
|
7239
7386
|
serverError,
|
|
7240
|
-
otherViolations.length > 0 && /* @__PURE__ */
|
|
7387
|
+
otherViolations.length > 0 && /* @__PURE__ */ jsx98("ul", { "data-testid": "create-org-violations", className: "mt-1 list-disc pl-4", children: otherViolations.map((violation) => /* @__PURE__ */ jsx98("li", { children: violation }, violation)) })
|
|
7241
7388
|
] }),
|
|
7242
|
-
/* @__PURE__ */
|
|
7243
|
-
/* @__PURE__ */
|
|
7389
|
+
/* @__PURE__ */ jsxs65("div", { className: "space-y-2 pt-1", children: [
|
|
7390
|
+
/* @__PURE__ */ jsx98(
|
|
7244
7391
|
"button",
|
|
7245
7392
|
{
|
|
7246
7393
|
type: "submit",
|
|
@@ -7251,14 +7398,14 @@ function OrganizationOnboardingForm({
|
|
|
7251
7398
|
children: submitting ? "Creating\u2026" : submitLabel
|
|
7252
7399
|
}
|
|
7253
7400
|
),
|
|
7254
|
-
onCancel && /* @__PURE__ */
|
|
7401
|
+
onCancel && /* @__PURE__ */ jsx98("button", { type: "button", onClick: onCancel, className: cn("cursor-pointer", AUTH_QUIET_BUTTON), children: "Cancel" })
|
|
7255
7402
|
] })
|
|
7256
7403
|
] });
|
|
7257
7404
|
}
|
|
7258
7405
|
|
|
7259
7406
|
// src/components/list-columns.tsx
|
|
7260
|
-
import * as
|
|
7261
|
-
import { jsx as
|
|
7407
|
+
import * as React85 from "react";
|
|
7408
|
+
import { jsx as jsx99, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
7262
7409
|
var CELL_WIDTH = { 20: "w-20", 24: "w-24", 28: "w-28", 32: "w-32" };
|
|
7263
7410
|
var headerClass = "flex items-center gap-3 border-b border-border-subtle bg-bg-secondary px-4 py-1.5 text-xs text-text-tertiary";
|
|
7264
7411
|
var cellsClass = "flex shrink-0 items-center gap-3";
|
|
@@ -7276,13 +7423,13 @@ function warnDuplicateKeys(columns, where) {
|
|
|
7276
7423
|
seen.add(c.key);
|
|
7277
7424
|
}
|
|
7278
7425
|
}
|
|
7279
|
-
var ListHeader =
|
|
7426
|
+
var ListHeader = React85.forwardRef(function ListHeader2({ lead, columns, mark = true, trailing = true, className, ...props }, ref) {
|
|
7280
7427
|
warnDuplicateKeys(columns, "ListHeader");
|
|
7281
|
-
return /* @__PURE__ */
|
|
7282
|
-
mark && /* @__PURE__ */
|
|
7283
|
-
/* @__PURE__ */
|
|
7284
|
-
/* @__PURE__ */
|
|
7285
|
-
trailing && /* @__PURE__ */
|
|
7428
|
+
return /* @__PURE__ */ jsxs66("div", { ref, className: cn(headerClass, className), ...props, children: [
|
|
7429
|
+
mark && /* @__PURE__ */ jsx99("span", { className: "size-8 shrink-0", "aria-hidden": true }),
|
|
7430
|
+
/* @__PURE__ */ jsx99("span", { className: "min-w-0 flex-1 truncate", children: lead }),
|
|
7431
|
+
/* @__PURE__ */ jsx99("span", { className: cellsClass, children: columns.map((c) => /* @__PURE__ */ jsx99("span", { className: cn(CELL_WIDTH[c.width], cellClass), children: c.label }, c.key)) }),
|
|
7432
|
+
trailing && /* @__PURE__ */ jsx99("span", { className: "size-4 shrink-0", "aria-hidden": true })
|
|
7286
7433
|
] });
|
|
7287
7434
|
});
|
|
7288
7435
|
function cellValue(values, column) {
|
|
@@ -7290,9 +7437,9 @@ function cellValue(values, column) {
|
|
|
7290
7437
|
const value = values[column.key];
|
|
7291
7438
|
return value === void 0 || value === null || value === "" ? column.fallback : value;
|
|
7292
7439
|
}
|
|
7293
|
-
var ListCells =
|
|
7440
|
+
var ListCells = React85.forwardRef(function ListCells2({ columns, values, className, ...props }, ref) {
|
|
7294
7441
|
warnDuplicateKeys(columns, "ListCells");
|
|
7295
|
-
return /* @__PURE__ */
|
|
7442
|
+
return /* @__PURE__ */ jsx99("span", { ref, className: cn(cellsClass, className), ...props, children: columns.map((c) => /* @__PURE__ */ jsx99(
|
|
7296
7443
|
"span",
|
|
7297
7444
|
{
|
|
7298
7445
|
className: cn(CELL_WIDTH[c.width], cellClass, c.quiet && "text-text-tertiary"),
|
|
@@ -7305,9 +7452,9 @@ ListHeader.displayName = "ListHeader";
|
|
|
7305
7452
|
ListCells.displayName = "ListCells";
|
|
7306
7453
|
|
|
7307
7454
|
// src/components/theme-picker.tsx
|
|
7308
|
-
import * as
|
|
7309
|
-
import { Check as
|
|
7310
|
-
import { jsx as
|
|
7455
|
+
import * as React86 from "react";
|
|
7456
|
+
import { Check as Check13 } from "lucide-react";
|
|
7457
|
+
import { jsx as jsx100, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
7311
7458
|
var THEME_SWATCHES = {
|
|
7312
7459
|
// --bg-surface --bg-sunken --bg-overlay --border-default --text-tertiary
|
|
7313
7460
|
light: { canvas: "#f2f3f4", rail: "#e1e2e4", body: "#ffffff", quiet: "#bbbec7", strong: "#535a6e" },
|
|
@@ -7321,13 +7468,13 @@ var OPTIONS = [
|
|
|
7321
7468
|
{ value: "system", label: "Auto", name: "Auto, follows your device theme" }
|
|
7322
7469
|
];
|
|
7323
7470
|
function Panels({ palette }) {
|
|
7324
|
-
return /* @__PURE__ */
|
|
7325
|
-
/* @__PURE__ */
|
|
7471
|
+
return /* @__PURE__ */ jsxs67("span", { className: "flex h-full gap-1.5 p-1.5", style: { background: palette.canvas }, children: [
|
|
7472
|
+
/* @__PURE__ */ jsx100(
|
|
7326
7473
|
"span",
|
|
7327
7474
|
{
|
|
7328
7475
|
className: "flex flex-col gap-1.5 p-1.5",
|
|
7329
7476
|
style: { width: "28%", borderRadius: 5, background: palette.rail },
|
|
7330
|
-
children: RAIL_BARS.map((w, i) => /* @__PURE__ */
|
|
7477
|
+
children: RAIL_BARS.map((w, i) => /* @__PURE__ */ jsx100(
|
|
7331
7478
|
"span",
|
|
7332
7479
|
{
|
|
7333
7480
|
className: "rounded-full",
|
|
@@ -7337,12 +7484,12 @@ function Panels({ palette }) {
|
|
|
7337
7484
|
))
|
|
7338
7485
|
}
|
|
7339
7486
|
),
|
|
7340
|
-
/* @__PURE__ */
|
|
7487
|
+
/* @__PURE__ */ jsx100(
|
|
7341
7488
|
"span",
|
|
7342
7489
|
{
|
|
7343
7490
|
className: "flex flex-1 flex-col gap-1.5 border p-2",
|
|
7344
7491
|
style: { borderRadius: 5, background: palette.body, borderColor: palette.quiet },
|
|
7345
|
-
children: BODY_BARS.map((w, i) => /* @__PURE__ */
|
|
7492
|
+
children: BODY_BARS.map((w, i) => /* @__PURE__ */ jsx100(
|
|
7346
7493
|
"span",
|
|
7347
7494
|
{
|
|
7348
7495
|
className: "rounded-full",
|
|
@@ -7356,21 +7503,21 @@ function Panels({ palette }) {
|
|
|
7356
7503
|
}
|
|
7357
7504
|
var CUT = "polygon(0 0, -8px 0, -8px calc(100% + 8px), calc(100% + 8px) calc(100% + 8px), calc(100% + 8px) calc(100% - 16px), 100% calc(100% - 16px))";
|
|
7358
7505
|
function AutoPanels() {
|
|
7359
|
-
return /* @__PURE__ */
|
|
7360
|
-
/* @__PURE__ */
|
|
7361
|
-
/* @__PURE__ */
|
|
7506
|
+
return /* @__PURE__ */ jsxs67("span", { className: "relative block h-full", children: [
|
|
7507
|
+
/* @__PURE__ */ jsx100("span", { className: "absolute inset-0", children: /* @__PURE__ */ jsx100(Panels, { palette: THEME_SWATCHES.light }) }),
|
|
7508
|
+
/* @__PURE__ */ jsx100("span", { className: "absolute inset-0", style: { clipPath: CUT }, children: /* @__PURE__ */ jsx100(Panels, { palette: THEME_SWATCHES.dark }) })
|
|
7362
7509
|
] });
|
|
7363
7510
|
}
|
|
7364
7511
|
var previewClass = "block h-28 overflow-hidden rounded-lg border border-border-default";
|
|
7365
7512
|
var cardClass = "grid cursor-pointer gap-2 rounded-lg p-1.5 text-left transition-colors duration-fast hover:bg-[var(--hov-bg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus";
|
|
7366
7513
|
var TRACK = { gridTemplateColumns: "repeat(auto-fit, minmax(8rem, 1fr))" };
|
|
7367
|
-
var Picker =
|
|
7368
|
-
return /* @__PURE__ */
|
|
7514
|
+
var Picker = React86.forwardRef(function Picker2({ value, onValueChange, className, ...props }, ref) {
|
|
7515
|
+
return /* @__PURE__ */ jsx100("div", { role: "group", "aria-label": "Theme", ...props, ref, className: cn("grid gap-4", className), style: { ...TRACK, ...props.style }, children: OPTIONS.map((o) => {
|
|
7369
7516
|
const selected = o.value === value;
|
|
7370
7517
|
return (
|
|
7371
7518
|
// Not a `Button` (Guidelines/When it isn't a Button): the preview is the control, and
|
|
7372
7519
|
// `aria-pressed` is what says which one is on.
|
|
7373
|
-
/* @__PURE__ */
|
|
7520
|
+
/* @__PURE__ */ jsxs67(
|
|
7374
7521
|
"button",
|
|
7375
7522
|
{
|
|
7376
7523
|
type: "button",
|
|
@@ -7379,8 +7526,8 @@ var Picker = React85.forwardRef(function Picker2({ value, onValueChange, classNa
|
|
|
7379
7526
|
onClick: () => onValueChange(o.value),
|
|
7380
7527
|
className: cardClass,
|
|
7381
7528
|
children: [
|
|
7382
|
-
/* @__PURE__ */
|
|
7383
|
-
/* @__PURE__ */
|
|
7529
|
+
/* @__PURE__ */ jsx100("span", { className: cn(previewClass, selected && "border-border-strong"), "aria-hidden": true, children: o.value === "system" ? /* @__PURE__ */ jsx100(AutoPanels, {}) : /* @__PURE__ */ jsx100(Panels, { palette: THEME_SWATCHES[o.value] }) }),
|
|
7530
|
+
/* @__PURE__ */ jsxs67(
|
|
7384
7531
|
"span",
|
|
7385
7532
|
{
|
|
7386
7533
|
className: cn(
|
|
@@ -7388,7 +7535,7 @@ var Picker = React85.forwardRef(function Picker2({ value, onValueChange, classNa
|
|
|
7388
7535
|
selected ? "font-semibold text-text-primary" : "text-text-secondary"
|
|
7389
7536
|
),
|
|
7390
7537
|
children: [
|
|
7391
|
-
/* @__PURE__ */
|
|
7538
|
+
/* @__PURE__ */ jsx100(Check13, { className: cn("size-4 shrink-0", !selected && "invisible"), "aria-hidden": true }),
|
|
7392
7539
|
o.label
|
|
7393
7540
|
]
|
|
7394
7541
|
}
|
|
@@ -7400,9 +7547,9 @@ var Picker = React85.forwardRef(function Picker2({ value, onValueChange, classNa
|
|
|
7400
7547
|
);
|
|
7401
7548
|
}) });
|
|
7402
7549
|
});
|
|
7403
|
-
var WiredPicker =
|
|
7550
|
+
var WiredPicker = React86.forwardRef(function WiredPicker2({ onValueChange, ...props }, ref) {
|
|
7404
7551
|
const { theme, setTheme } = useTheme();
|
|
7405
|
-
return /* @__PURE__ */
|
|
7552
|
+
return /* @__PURE__ */ jsx100(
|
|
7406
7553
|
Picker,
|
|
7407
7554
|
{
|
|
7408
7555
|
...props,
|
|
@@ -7415,22 +7562,22 @@ var WiredPicker = React85.forwardRef(function WiredPicker2({ onValueChange, ...p
|
|
|
7415
7562
|
}
|
|
7416
7563
|
);
|
|
7417
7564
|
});
|
|
7418
|
-
var ThemePicker =
|
|
7419
|
-
const controlled =
|
|
7565
|
+
var ThemePicker = React86.forwardRef(function ThemePicker2({ value, onValueChange, ...props }, ref) {
|
|
7566
|
+
const controlled = React86.useRef(value !== void 0);
|
|
7420
7567
|
if (process.env.NODE_ENV !== "production" && controlled.current !== (value !== void 0)) {
|
|
7421
7568
|
console.warn(
|
|
7422
7569
|
"[ThemePicker] `value` went from " + (controlled.current ? "set to missing" : "missing to set") + " after mount. The picker stays " + (controlled.current ? "controlled" : "wired to the console theme") + " for its whole life: render it once its value is known, or leave `value` off entirely."
|
|
7423
7570
|
);
|
|
7424
7571
|
}
|
|
7425
|
-
return controlled.current ? /* @__PURE__ */
|
|
7426
|
-
}) }) : /* @__PURE__ */
|
|
7572
|
+
return controlled.current ? /* @__PURE__ */ jsx100(Picker, { ...props, ref, value: value ?? "system", onValueChange: onValueChange ?? (() => {
|
|
7573
|
+
}) }) : /* @__PURE__ */ jsx100(WiredPicker, { ...props, ref, onValueChange });
|
|
7427
7574
|
});
|
|
7428
7575
|
ThemePicker.displayName = "ThemePicker";
|
|
7429
7576
|
|
|
7430
7577
|
// src/components/secret-reveal.tsx
|
|
7431
|
-
import * as
|
|
7578
|
+
import * as React87 from "react";
|
|
7432
7579
|
import { Copy as Copy2, Download } from "lucide-react";
|
|
7433
|
-
import { jsx as
|
|
7580
|
+
import { jsx as jsx101, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
7434
7581
|
var asText = (value) => Array.isArray(value) ? value.join("\n") : value;
|
|
7435
7582
|
var REVEALED = "A secret is on screen and will not be shown again.";
|
|
7436
7583
|
var REFUSED = "The browser refused the clipboard. Select the value to copy it.";
|
|
@@ -7438,15 +7585,15 @@ function SecretValue({ value }) {
|
|
|
7438
7585
|
if (Array.isArray(value)) {
|
|
7439
7586
|
const half = Math.ceil(value.length / 2);
|
|
7440
7587
|
const columns = [value.slice(0, half), value.slice(half)].filter((column) => column.length > 0);
|
|
7441
|
-
return /* @__PURE__ */
|
|
7588
|
+
return /* @__PURE__ */ jsx101("div", { className: "flex w-fit gap-x-12", children: columns.map((column, index) => (
|
|
7442
7589
|
// Neither the columns nor the values inside one are ever reordered, and two identical
|
|
7443
7590
|
// values in a list are legal, so the index is the key and the value is not.
|
|
7444
|
-
/* @__PURE__ */
|
|
7591
|
+
/* @__PURE__ */ jsx101("div", { className: "grid gap-y-1.5", children: column.map((line, row) => /* @__PURE__ */ jsx101("code", { className: "font-mono text-sm font-medium tabular-nums text-text-primary", children: line }, row)) }, index)
|
|
7445
7592
|
)) });
|
|
7446
7593
|
}
|
|
7447
|
-
return /* @__PURE__ */
|
|
7594
|
+
return /* @__PURE__ */ jsx101("code", { className: "block break-all font-mono text-sm font-medium text-text-primary", children: value });
|
|
7448
7595
|
}
|
|
7449
|
-
var SecretReveal =
|
|
7596
|
+
var SecretReveal = React87.forwardRef(
|
|
7450
7597
|
({
|
|
7451
7598
|
value,
|
|
7452
7599
|
caption,
|
|
@@ -7463,18 +7610,18 @@ var SecretReveal = React86.forwardRef(
|
|
|
7463
7610
|
className,
|
|
7464
7611
|
...props
|
|
7465
7612
|
}, ref) => {
|
|
7466
|
-
const [takenText, setTakenText] =
|
|
7467
|
-
const [refusedText, setRefusedText] =
|
|
7468
|
-
const [announcedFor, setAnnouncedFor] =
|
|
7469
|
-
const copyRef =
|
|
7470
|
-
const captionId =
|
|
7613
|
+
const [takenText, setTakenText] = React87.useState(null);
|
|
7614
|
+
const [refusedText, setRefusedText] = React87.useState(null);
|
|
7615
|
+
const [announcedFor, setAnnouncedFor] = React87.useState(null);
|
|
7616
|
+
const copyRef = React87.useRef(null);
|
|
7617
|
+
const captionId = React87.useId();
|
|
7471
7618
|
const text = asText(value);
|
|
7472
7619
|
const empty = text.length === 0;
|
|
7473
7620
|
const taken = takenText === text;
|
|
7474
7621
|
const refused = refusedText === text;
|
|
7475
|
-
|
|
7622
|
+
React87.useEffect(() => setAnnouncedFor(text), [text]);
|
|
7476
7623
|
const announced = announcedFor === text ? REVEALED : "";
|
|
7477
|
-
|
|
7624
|
+
React87.useEffect(() => {
|
|
7478
7625
|
if (autoFocus) copyRef.current?.focus();
|
|
7479
7626
|
}, [autoFocus]);
|
|
7480
7627
|
const reportTaken = () => {
|
|
@@ -7500,12 +7647,12 @@ var SecretReveal = React86.forwardRef(
|
|
|
7500
7647
|
reportTaken();
|
|
7501
7648
|
onDownload?.();
|
|
7502
7649
|
};
|
|
7503
|
-
return /* @__PURE__ */
|
|
7504
|
-
/* @__PURE__ */
|
|
7505
|
-
/* @__PURE__ */
|
|
7506
|
-
/* @__PURE__ */
|
|
7507
|
-
/* @__PURE__ */
|
|
7508
|
-
/* @__PURE__ */
|
|
7650
|
+
return /* @__PURE__ */ jsx101("div", { ref, className: cn("overflow-hidden rounded-lg bg-bg-sunken", className), ...props, children: /* @__PURE__ */ jsx101("div", { className: highlightClassName, ref: highlightRef, children: /* @__PURE__ */ jsxs68("div", { className: "grid gap-3 rounded-lg border border-border-strong px-4 py-3", children: [
|
|
7651
|
+
/* @__PURE__ */ jsx101("span", { role: "status", className: "sr-only", children: announced }),
|
|
7652
|
+
/* @__PURE__ */ jsx101("div", { id: captionId, className: "text-sm text-text-secondary", children: caption }),
|
|
7653
|
+
/* @__PURE__ */ jsx101(SecretValue, { value }),
|
|
7654
|
+
/* @__PURE__ */ jsxs68("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
7655
|
+
/* @__PURE__ */ jsx101(
|
|
7509
7656
|
Button,
|
|
7510
7657
|
{
|
|
7511
7658
|
ref: copyRef,
|
|
@@ -7513,12 +7660,12 @@ var SecretReveal = React86.forwardRef(
|
|
|
7513
7660
|
"aria-describedby": captionId,
|
|
7514
7661
|
variant: "outline",
|
|
7515
7662
|
size: "sm",
|
|
7516
|
-
icon: /* @__PURE__ */
|
|
7663
|
+
icon: /* @__PURE__ */ jsx101(Copy2, {}),
|
|
7517
7664
|
children: copyLabel ?? (Array.isArray(value) ? "Copy all" : "Copy")
|
|
7518
7665
|
}
|
|
7519
7666
|
),
|
|
7520
|
-
onDownload && /* @__PURE__ */
|
|
7521
|
-
/* @__PURE__ */
|
|
7667
|
+
onDownload && /* @__PURE__ */ jsx101(Button, { onClick: download, "aria-describedby": captionId, variant: "outline", size: "sm", icon: /* @__PURE__ */ jsx101(Download, {}), children: downloadLabel }),
|
|
7668
|
+
/* @__PURE__ */ jsx101(
|
|
7522
7669
|
Button,
|
|
7523
7670
|
{
|
|
7524
7671
|
onClick: onConfirm,
|
|
@@ -7529,17 +7676,17 @@ var SecretReveal = React86.forwardRef(
|
|
|
7529
7676
|
}
|
|
7530
7677
|
)
|
|
7531
7678
|
] }),
|
|
7532
|
-
refused && /* @__PURE__ */
|
|
7679
|
+
refused && /* @__PURE__ */ jsx101("div", { role: "status", className: "text-xs text-text-tertiary", children: REFUSED })
|
|
7533
7680
|
] }) }) });
|
|
7534
7681
|
}
|
|
7535
7682
|
);
|
|
7536
7683
|
SecretReveal.displayName = "SecretReveal";
|
|
7537
7684
|
|
|
7538
7685
|
// src/components/star-rating.tsx
|
|
7539
|
-
import * as
|
|
7686
|
+
import * as React88 from "react";
|
|
7540
7687
|
import * as RadioGroupPrimitive2 from "@radix-ui/react-radio-group";
|
|
7541
7688
|
import { Star } from "lucide-react";
|
|
7542
|
-
import { jsx as
|
|
7689
|
+
import { jsx as jsx102 } from "react/jsx-runtime";
|
|
7543
7690
|
var STAR_BOX = {
|
|
7544
7691
|
sm: "size-4",
|
|
7545
7692
|
md: "size-5",
|
|
@@ -7551,7 +7698,7 @@ var ROW_GAP = {
|
|
|
7551
7698
|
lg: "gap-1.5"
|
|
7552
7699
|
};
|
|
7553
7700
|
var defaultItemLabel = (value, max) => `${value} out of ${max} stars`;
|
|
7554
|
-
var StarGlyph = ({ filled, size }) => /* @__PURE__ */
|
|
7701
|
+
var StarGlyph = ({ filled, size }) => /* @__PURE__ */ jsx102(
|
|
7555
7702
|
Star,
|
|
7556
7703
|
{
|
|
7557
7704
|
"aria-hidden": "true",
|
|
@@ -7562,7 +7709,7 @@ var StarGlyph = ({ filled, size }) => /* @__PURE__ */ jsx101(
|
|
|
7562
7709
|
)
|
|
7563
7710
|
}
|
|
7564
7711
|
);
|
|
7565
|
-
var StarRating =
|
|
7712
|
+
var StarRating = React88.forwardRef(
|
|
7566
7713
|
({
|
|
7567
7714
|
className,
|
|
7568
7715
|
value,
|
|
@@ -7577,27 +7724,27 @@ var StarRating = React87.forwardRef(
|
|
|
7577
7724
|
...props
|
|
7578
7725
|
}, ref) => {
|
|
7579
7726
|
const stars = Array.from({ length: max }, (_, index) => index + 1);
|
|
7580
|
-
const [mirror, setMirror] =
|
|
7727
|
+
const [mirror, setMirror] = React88.useState(defaultValue ?? 0);
|
|
7581
7728
|
const selected = value ?? mirror;
|
|
7582
|
-
const [preview, setPreview] =
|
|
7729
|
+
const [preview, setPreview] = React88.useState(null);
|
|
7583
7730
|
const shown = preview ?? selected;
|
|
7584
7731
|
const commit = (next) => {
|
|
7585
7732
|
setMirror(next);
|
|
7586
7733
|
onValueChange?.(next);
|
|
7587
7734
|
};
|
|
7588
7735
|
if (readOnly) {
|
|
7589
|
-
return /* @__PURE__ */
|
|
7736
|
+
return /* @__PURE__ */ jsx102(
|
|
7590
7737
|
"div",
|
|
7591
7738
|
{
|
|
7592
7739
|
ref,
|
|
7593
7740
|
role: "img",
|
|
7594
7741
|
"aria-label": props["aria-label"] ?? itemLabel(selected, max),
|
|
7595
7742
|
className: cn("inline-flex items-center", ROW_GAP[size], className),
|
|
7596
|
-
children: stars.map((star) => /* @__PURE__ */
|
|
7743
|
+
children: stars.map((star) => /* @__PURE__ */ jsx102(StarGlyph, { filled: star <= selected, size }, star))
|
|
7597
7744
|
}
|
|
7598
7745
|
);
|
|
7599
7746
|
}
|
|
7600
|
-
return /* @__PURE__ */
|
|
7747
|
+
return /* @__PURE__ */ jsx102(
|
|
7601
7748
|
RadioGroupPrimitive2.Root,
|
|
7602
7749
|
{
|
|
7603
7750
|
ref,
|
|
@@ -7614,7 +7761,7 @@ var StarRating = React87.forwardRef(
|
|
|
7614
7761
|
orientation: "horizontal",
|
|
7615
7762
|
loop: false,
|
|
7616
7763
|
className: cn("inline-flex items-center", ROW_GAP[size], className),
|
|
7617
|
-
children: stars.map((star) => /* @__PURE__ */
|
|
7764
|
+
children: stars.map((star) => /* @__PURE__ */ jsx102(
|
|
7618
7765
|
RadioGroupPrimitive2.Item,
|
|
7619
7766
|
{
|
|
7620
7767
|
value: String(star),
|
|
@@ -7630,7 +7777,7 @@ var StarRating = React87.forwardRef(
|
|
|
7630
7777
|
"rounded-md p-0.5 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus",
|
|
7631
7778
|
"disabled:pointer-events-none disabled:opacity-50"
|
|
7632
7779
|
),
|
|
7633
|
-
children: /* @__PURE__ */
|
|
7780
|
+
children: /* @__PURE__ */ jsx102(StarGlyph, { filled: star <= shown, size })
|
|
7634
7781
|
},
|
|
7635
7782
|
star
|
|
7636
7783
|
))
|
|
@@ -7641,16 +7788,16 @@ var StarRating = React87.forwardRef(
|
|
|
7641
7788
|
StarRating.displayName = "StarRating";
|
|
7642
7789
|
|
|
7643
7790
|
// src/components/rating-scale.tsx
|
|
7644
|
-
import * as
|
|
7791
|
+
import * as React89 from "react";
|
|
7645
7792
|
import * as RadioGroupPrimitive3 from "@radix-ui/react-radio-group";
|
|
7646
|
-
import { jsx as
|
|
7793
|
+
import { jsx as jsx103, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
7647
7794
|
var SLOT_BOX = {
|
|
7648
7795
|
sm: "h-8 min-w-8 px-2 text-xs",
|
|
7649
7796
|
md: "h-9 min-w-9 px-2 text-sm",
|
|
7650
7797
|
lg: "h-11 min-w-11 px-3 text-base"
|
|
7651
7798
|
};
|
|
7652
7799
|
var defaultItemLabel2 = (value, _min, max) => `${value} out of ${max}`;
|
|
7653
|
-
var RatingScale =
|
|
7800
|
+
var RatingScale = React89.forwardRef(
|
|
7654
7801
|
({
|
|
7655
7802
|
className,
|
|
7656
7803
|
value,
|
|
@@ -7666,9 +7813,9 @@ var RatingScale = React88.forwardRef(
|
|
|
7666
7813
|
...props
|
|
7667
7814
|
}, ref) => {
|
|
7668
7815
|
const slots = Array.from({ length: Math.max(0, max - min + 1) }, (_, index) => min + index);
|
|
7669
|
-
const [mirror, setMirror] =
|
|
7816
|
+
const [mirror, setMirror] = React89.useState(defaultValue);
|
|
7670
7817
|
const selected = value ?? mirror;
|
|
7671
|
-
const row = /* @__PURE__ */
|
|
7818
|
+
const row = /* @__PURE__ */ jsx103("div", { className: cn("flex flex-wrap items-center gap-1.5", !endLabels && className), children: slots.map((slot) => {
|
|
7672
7819
|
const isSelected = slot === selected;
|
|
7673
7820
|
const box = cn(
|
|
7674
7821
|
"inline-flex items-center justify-center rounded-md border tabular-nums transition-colors duration-fast",
|
|
@@ -7676,9 +7823,9 @@ var RatingScale = React88.forwardRef(
|
|
|
7676
7823
|
isSelected ? "border-border-strong font-semibold text-text-primary" : "border-field-border font-medium text-text-secondary"
|
|
7677
7824
|
);
|
|
7678
7825
|
if (readOnly) {
|
|
7679
|
-
return /* @__PURE__ */
|
|
7826
|
+
return /* @__PURE__ */ jsx103("span", { className: box, "aria-hidden": "true", children: slot }, slot);
|
|
7680
7827
|
}
|
|
7681
|
-
return /* @__PURE__ */
|
|
7828
|
+
return /* @__PURE__ */ jsx103(
|
|
7682
7829
|
RadioGroupPrimitive3.Item,
|
|
7683
7830
|
{
|
|
7684
7831
|
value: String(slot),
|
|
@@ -7697,12 +7844,12 @@ var RatingScale = React88.forwardRef(
|
|
|
7697
7844
|
slot
|
|
7698
7845
|
);
|
|
7699
7846
|
}) });
|
|
7700
|
-
const ends = endLabels ? /* @__PURE__ */
|
|
7701
|
-
/* @__PURE__ */
|
|
7702
|
-
/* @__PURE__ */
|
|
7847
|
+
const ends = endLabels ? /* @__PURE__ */ jsxs69("div", { className: "flex items-center justify-between text-xs text-text-tertiary", children: [
|
|
7848
|
+
/* @__PURE__ */ jsx103("span", { children: endLabels.low }),
|
|
7849
|
+
/* @__PURE__ */ jsx103("span", { children: endLabels.high })
|
|
7703
7850
|
] }) : null;
|
|
7704
7851
|
if (readOnly) {
|
|
7705
|
-
return /* @__PURE__ */
|
|
7852
|
+
return /* @__PURE__ */ jsxs69(
|
|
7706
7853
|
"div",
|
|
7707
7854
|
{
|
|
7708
7855
|
ref,
|
|
@@ -7716,7 +7863,7 @@ var RatingScale = React88.forwardRef(
|
|
|
7716
7863
|
}
|
|
7717
7864
|
);
|
|
7718
7865
|
}
|
|
7719
|
-
const group = /* @__PURE__ */
|
|
7866
|
+
const group = /* @__PURE__ */ jsx103(
|
|
7720
7867
|
RadioGroupPrimitive3.Root,
|
|
7721
7868
|
{
|
|
7722
7869
|
ref,
|
|
@@ -7735,7 +7882,7 @@ var RatingScale = React88.forwardRef(
|
|
|
7735
7882
|
}
|
|
7736
7883
|
);
|
|
7737
7884
|
if (!endLabels) return group;
|
|
7738
|
-
return /* @__PURE__ */
|
|
7885
|
+
return /* @__PURE__ */ jsxs69("div", { className: cn("flex flex-col gap-1.5", className), children: [
|
|
7739
7886
|
group,
|
|
7740
7887
|
ends
|
|
7741
7888
|
] });
|
|
@@ -7936,6 +8083,7 @@ export {
|
|
|
7936
8083
|
NotificationSettings,
|
|
7937
8084
|
NotificationToast,
|
|
7938
8085
|
NotificationToaster,
|
|
8086
|
+
OnboardingScreenShell,
|
|
7939
8087
|
OptionCard,
|
|
7940
8088
|
OrgProductSwitcher,
|
|
7941
8089
|
OrganizationOnboardingForm,
|
|
@@ -7980,6 +8128,7 @@ export {
|
|
|
7980
8128
|
SheetTitle,
|
|
7981
8129
|
SheetTrigger,
|
|
7982
8130
|
SidebarBackHeader,
|
|
8131
|
+
SidebarDrawer,
|
|
7983
8132
|
SidebarProductHeader,
|
|
7984
8133
|
Skeleton,
|
|
7985
8134
|
Slider,
|
|
@@ -8027,6 +8176,7 @@ export {
|
|
|
8027
8176
|
isNotificationSettled,
|
|
8028
8177
|
navigationMenuTriggerStyle,
|
|
8029
8178
|
productStatusBadge,
|
|
8179
|
+
railToggleLabel,
|
|
8030
8180
|
severityBadgeVariant,
|
|
8031
8181
|
severityLabels,
|
|
8032
8182
|
statusDotVariants,
|
|
@@ -8037,5 +8187,6 @@ export {
|
|
|
8037
8187
|
useFreshHighlight,
|
|
8038
8188
|
useIsMobile,
|
|
8039
8189
|
useSidebar,
|
|
8190
|
+
useSidebarDismiss,
|
|
8040
8191
|
useTheme
|
|
8041
8192
|
};
|