@lessly/ui 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +59 -6
- package/dist/index.js +428 -417
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ var twMerge = extendTailwindMerge((config) => {
|
|
|
12
12
|
{ [group.replace("border-w", "border")]: TOKEN_BORDER_WIDTHS }
|
|
13
13
|
];
|
|
14
14
|
}
|
|
15
|
+
config.conflictingClassGroups["font-size"] = [];
|
|
15
16
|
return config;
|
|
16
17
|
});
|
|
17
18
|
function cn(...inputs) {
|
|
@@ -592,13 +593,14 @@ Label2.displayName = LabelPrimitive.Root.displayName;
|
|
|
592
593
|
// src/components/option-card.tsx
|
|
593
594
|
import * as React9 from "react";
|
|
594
595
|
import { cva as cva3 } from "class-variance-authority";
|
|
596
|
+
import { Check as Check2 } from "lucide-react";
|
|
595
597
|
import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
596
598
|
var optionCardVariants = cva3(
|
|
597
599
|
"flex w-full items-center gap-3 rounded-lg border border-border-default p-3 text-left transition-colors hover:bg-bg-elevated focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus",
|
|
598
600
|
{
|
|
599
601
|
variants: {
|
|
600
602
|
selected: {
|
|
601
|
-
true: "
|
|
603
|
+
true: "border-border-strong",
|
|
602
604
|
false: ""
|
|
603
605
|
}
|
|
604
606
|
},
|
|
@@ -619,7 +621,8 @@ var OptionCard = React9.forwardRef(
|
|
|
619
621
|
/* @__PURE__ */ jsxs6("span", { className: "flex min-w-0 flex-col", children: [
|
|
620
622
|
/* @__PURE__ */ jsx9("span", { className: "text-sm font-medium text-text-primary", children: title }),
|
|
621
623
|
description && /* @__PURE__ */ jsx9("span", { className: "truncate text-xs text-text-tertiary", children: description })
|
|
622
|
-
] })
|
|
624
|
+
] }),
|
|
625
|
+
selected !== void 0 && /* @__PURE__ */ jsx9(Check2, { className: cn("ml-auto size-3.5 shrink-0 text-text-primary", !selected && "invisible") })
|
|
623
626
|
]
|
|
624
627
|
}
|
|
625
628
|
)
|
|
@@ -816,7 +819,7 @@ var SettingRow = React11.forwardRef(function SettingRow2({ icon: Icon, label, de
|
|
|
816
819
|
SettingRow.displayName = "SettingRow";
|
|
817
820
|
|
|
818
821
|
// src/components/switch.tsx
|
|
819
|
-
import { Check as
|
|
822
|
+
import { Check as Check3 } from "lucide-react";
|
|
820
823
|
import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
821
824
|
function Switch({
|
|
822
825
|
checked,
|
|
@@ -850,7 +853,7 @@ function Switch({
|
|
|
850
853
|
"span",
|
|
851
854
|
{
|
|
852
855
|
className: `pointer-events-none absolute inset-y-0 left-0 flex w-6 items-center justify-center transition-opacity ${checked ? "opacity-100" : "opacity-0"}`,
|
|
853
|
-
children: /* @__PURE__ */ jsx15(
|
|
856
|
+
children: /* @__PURE__ */ jsx15(Check3, { className: "size-3 text-white" })
|
|
854
857
|
}
|
|
855
858
|
),
|
|
856
859
|
/* @__PURE__ */ jsx15(
|
|
@@ -868,7 +871,7 @@ function Switch({
|
|
|
868
871
|
// src/components/checkbox.tsx
|
|
869
872
|
import * as React12 from "react";
|
|
870
873
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
871
|
-
import { Check as
|
|
874
|
+
import { Check as Check4 } from "lucide-react";
|
|
872
875
|
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
873
876
|
var Checkbox = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
|
|
874
877
|
CheckboxPrimitive.Root,
|
|
@@ -882,7 +885,7 @@ var Checkbox = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
882
885
|
className
|
|
883
886
|
),
|
|
884
887
|
...props,
|
|
885
|
-
children: /* @__PURE__ */ jsx16(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-current", children: /* @__PURE__ */ jsx16(
|
|
888
|
+
children: /* @__PURE__ */ jsx16(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-current", children: /* @__PURE__ */ jsx16(Check4, { className: "h-4 w-4" }) })
|
|
886
889
|
}
|
|
887
890
|
));
|
|
888
891
|
Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
@@ -1488,7 +1491,7 @@ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
|
|
|
1488
1491
|
// src/components/context-menu.tsx
|
|
1489
1492
|
import * as React25 from "react";
|
|
1490
1493
|
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
|
|
1491
|
-
import { Check as
|
|
1494
|
+
import { Check as Check5, ChevronRight as ChevronRight2, Circle as Circle3 } from "lucide-react";
|
|
1492
1495
|
import { jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1493
1496
|
var ContextMenu = ContextMenuPrimitive.Root;
|
|
1494
1497
|
var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
|
|
@@ -1561,7 +1564,7 @@ var ContextMenuCheckboxItem = React25.forwardRef(({ className, children, checked
|
|
|
1561
1564
|
checked,
|
|
1562
1565
|
...props,
|
|
1563
1566
|
children: [
|
|
1564
|
-
/* @__PURE__ */ jsx29("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx29(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx29(
|
|
1567
|
+
/* @__PURE__ */ jsx29("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx29(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx29(Check5, { className: "h-4 w-4" }) }) }),
|
|
1565
1568
|
children
|
|
1566
1569
|
]
|
|
1567
1570
|
}
|
|
@@ -1609,7 +1612,7 @@ ContextMenuShortcut.displayName = "ContextMenuShortcut";
|
|
|
1609
1612
|
// src/components/menubar.tsx
|
|
1610
1613
|
import * as React26 from "react";
|
|
1611
1614
|
import * as MenubarPrimitive from "@radix-ui/react-menubar";
|
|
1612
|
-
import { Check as
|
|
1615
|
+
import { Check as Check6, ChevronRight as ChevronRight3, Circle as Circle4 } from "lucide-react";
|
|
1613
1616
|
import { jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1614
1617
|
var MenubarMenu = (props) => /* @__PURE__ */ jsx30(MenubarPrimitive.Menu, { ...props });
|
|
1615
1618
|
MenubarMenu.displayName = "MenubarMenu";
|
|
@@ -1709,7 +1712,7 @@ var MenubarCheckboxItem = React26.forwardRef(({ className, children, checked, ..
|
|
|
1709
1712
|
checked,
|
|
1710
1713
|
...props,
|
|
1711
1714
|
children: [
|
|
1712
|
-
/* @__PURE__ */ jsx30("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(
|
|
1715
|
+
/* @__PURE__ */ jsx30("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(Check6, { className: "h-4 w-4" }) }) }),
|
|
1713
1716
|
children
|
|
1714
1717
|
]
|
|
1715
1718
|
}
|
|
@@ -3177,7 +3180,7 @@ EmptyState.displayName = "EmptyState";
|
|
|
3177
3180
|
|
|
3178
3181
|
// src/components/copy-button.tsx
|
|
3179
3182
|
import * as React50 from "react";
|
|
3180
|
-
import { Check as
|
|
3183
|
+
import { Check as Check7, Copy } from "lucide-react";
|
|
3181
3184
|
import { jsx as jsx60, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
3182
3185
|
var MASK = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
|
|
3183
3186
|
var CopyButton = React50.forwardRef(
|
|
@@ -3213,7 +3216,7 @@ var CopyButton = React50.forwardRef(
|
|
|
3213
3216
|
className: cn(className),
|
|
3214
3217
|
...props,
|
|
3215
3218
|
"aria-label": copied ? "Copied" : masked ? `${label} ending ${tail}` : label,
|
|
3216
|
-
icon: copied ? /* @__PURE__ */ jsx60(
|
|
3219
|
+
icon: copied ? /* @__PURE__ */ jsx60(Check7, { className: "text-text-success" }) : /* @__PURE__ */ jsx60(Copy, {})
|
|
3217
3220
|
}
|
|
3218
3221
|
)
|
|
3219
3222
|
);
|
|
@@ -4497,7 +4500,7 @@ RemoveButton.displayName = "RemoveButton";
|
|
|
4497
4500
|
|
|
4498
4501
|
// src/components/grant-role-picker.tsx
|
|
4499
4502
|
import * as React63 from "react";
|
|
4500
|
-
import { Check as
|
|
4503
|
+
import { Check as Check8 } from "lucide-react";
|
|
4501
4504
|
import { Fragment as Fragment7, jsx as jsx76, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
4502
4505
|
var WEIGHT_TONE = {
|
|
4503
4506
|
faint: "text-text-secondary",
|
|
@@ -4536,7 +4539,7 @@ var GrantRolePicker = React63.forwardRef(
|
|
|
4536
4539
|
const removeWords = grantRemoveLabel(void 0, notInForce !== void 0);
|
|
4537
4540
|
const valueNote = !current ? notes?.missing : rungs && !pickable.some((r) => r.id === value) ? notes?.aboveCap : void 0;
|
|
4538
4541
|
const item = (r) => /* @__PURE__ */ jsxs48(DropdownMenuItem, { onSelect: () => onChange(r.id), className: "items-start gap-2 py-1.5", children: [
|
|
4539
|
-
/* @__PURE__ */ jsx76(
|
|
4542
|
+
/* @__PURE__ */ jsx76(Check8, { className: cn("mt-0.5 size-3.5 shrink-0 text-text-primary", r.id !== value && "invisible") }),
|
|
4540
4543
|
/* @__PURE__ */ jsxs48("span", { className: "flex flex-col", children: [
|
|
4541
4544
|
/* @__PURE__ */ jsx76("span", { className: cn("text-sm", WEIGHT_TONE[r.weight ?? "normal"]), children: r.name }),
|
|
4542
4545
|
r.hint && /* @__PURE__ */ jsx76("span", { className: "text-xs text-text-tertiary", children: r.hint })
|
|
@@ -4580,7 +4583,7 @@ var GrantRolePicker = React63.forwardRef(
|
|
|
4580
4583
|
"aria-label": removeDetail ? grantRemoveLabel(removeDetail, notInForce !== void 0) : void 0,
|
|
4581
4584
|
className: "gap-2 py-1.5",
|
|
4582
4585
|
children: [
|
|
4583
|
-
rungs && /* @__PURE__ */ jsx76(
|
|
4586
|
+
rungs && /* @__PURE__ */ jsx76(Check8, { className: "invisible size-3.5 shrink-0" }),
|
|
4584
4587
|
removeWords
|
|
4585
4588
|
]
|
|
4586
4589
|
}
|
|
@@ -5028,28 +5031,10 @@ function AppSidebar({
|
|
|
5028
5031
|
className
|
|
5029
5032
|
),
|
|
5030
5033
|
children: [
|
|
5031
|
-
/* @__PURE__ */ jsx83("div", { className: cn("flex h-14 items-center gap-2", collapsed ? "justify-center px-1" : "px-3"), children: collapsed ? collapsible ?
|
|
5032
|
-
/* The
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
/* @__PURE__ */ jsx83("span", { className: "pointer-events-none transition-opacity group-hover:opacity-0 group-focus-within:opacity-0", children: logoCollapsed ?? logo }),
|
|
5036
|
-
/* @__PURE__ */ jsx83(
|
|
5037
|
-
"button",
|
|
5038
|
-
{
|
|
5039
|
-
type: "button",
|
|
5040
|
-
onClick: toggle,
|
|
5041
|
-
"aria-label": "Expand sidebar",
|
|
5042
|
-
"aria-expanded": false,
|
|
5043
|
-
className: "absolute inset-0 flex items-center justify-center rounded-md text-text-secondary opacity-0 transition-opacity hover:bg-[var(--hov-bg)] focus-visible:outline-none focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-border-focus group-hover:opacity-100 group-focus-within:opacity-100",
|
|
5044
|
-
children: /* @__PURE__ */ jsx83(PanelLeft, { className: "size-4", "aria-hidden": "true" })
|
|
5045
|
-
}
|
|
5046
|
-
)
|
|
5047
|
-
] })
|
|
5048
|
-
) : (
|
|
5049
|
-
/* No mark to hide behind (no `logoCollapsed`/`logo` given — `header` doesn't
|
|
5050
|
-
count, it's expanded-only). Hover-revealing the pin over nothing would leave
|
|
5051
|
-
an invisible 32px box as the only way back to expanded, so render it plain
|
|
5052
|
-
and fully visible instead. */
|
|
5034
|
+
/* @__PURE__ */ jsx83("div", { className: cn("flex h-14 items-center gap-2", collapsed ? "justify-center px-1" : "px-3"), children: collapsed ? collapsible ? (
|
|
5035
|
+
/* The 52px rail holds one 32px box, and the way back to expanded is what it holds.
|
|
5036
|
+
The logo has the expanded band and the top bar; the pin has nowhere else, and a
|
|
5037
|
+
pin hidden behind the mark is no pin at all on a device that cannot hover. */
|
|
5053
5038
|
/* @__PURE__ */ jsx83(
|
|
5054
5039
|
"button",
|
|
5055
5040
|
{
|
|
@@ -5110,7 +5095,7 @@ var SidebarProductHeader = React69.forwardRef(
|
|
|
5110
5095
|
SidebarProductHeader.displayName = "SidebarProductHeader";
|
|
5111
5096
|
|
|
5112
5097
|
// src/components/org-product-switcher.tsx
|
|
5113
|
-
import { ChevronsUpDown as ChevronsUpDown3, Check as
|
|
5098
|
+
import { ChevronsUpDown as ChevronsUpDown3, Check as Check9 } from "lucide-react";
|
|
5114
5099
|
import { Fragment as Fragment11, jsx as jsx85, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
5115
5100
|
var triggerBox = "flex w-full items-center gap-2.5 rounded-xl px-1.5 py-1 text-left transition-colors hover:bg-[var(--hov-bg)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus";
|
|
5116
5101
|
var menuItem = "gap-2 rounded-md px-2 py-1.5 text-sm font-medium text-text-secondary focus:bg-[var(--menu-hov)] focus:text-text-primary";
|
|
@@ -5189,7 +5174,7 @@ function OrgProductSwitcher({
|
|
|
5189
5174
|
organizations.map((o) => /* @__PURE__ */ jsxs56(DropdownMenuItem, { className: menuItem, onSelect: () => onOrgSelect(o.id), children: [
|
|
5190
5175
|
/* @__PURE__ */ jsx85(Mark2, { item: o, size: "sm" }),
|
|
5191
5176
|
/* @__PURE__ */ jsx85(ItemLabel, { item: o, kind: "organization" }),
|
|
5192
|
-
o.id === activeOrgId && /* @__PURE__ */ jsx85(
|
|
5177
|
+
o.id === activeOrgId && /* @__PURE__ */ jsx85(Check9, { className: "size-4 shrink-0 text-text-secondary", "aria-hidden": "true" })
|
|
5193
5178
|
] }, o.id)),
|
|
5194
5179
|
products.length > 0 && /* @__PURE__ */ jsxs56(Fragment11, { children: [
|
|
5195
5180
|
/* @__PURE__ */ jsx85(DropdownMenuSeparator, { className: "mx-0 shrink-0 bg-border-subtle" }),
|
|
@@ -5197,7 +5182,7 @@ function OrgProductSwitcher({
|
|
|
5197
5182
|
products.map((p) => /* @__PURE__ */ jsxs56(DropdownMenuItem, { className: menuItem, onSelect: () => onProductSelect?.(p.id), children: [
|
|
5198
5183
|
/* @__PURE__ */ jsx85(Mark2, { item: p, size: "sm" }),
|
|
5199
5184
|
/* @__PURE__ */ jsx85(ItemLabel, { item: p, kind: "product" }),
|
|
5200
|
-
p.id === activeProductId && /* @__PURE__ */ jsx85(
|
|
5185
|
+
p.id === activeProductId && /* @__PURE__ */ jsx85(Check9, { className: "size-4 shrink-0 text-text-secondary", "aria-hidden": "true" })
|
|
5201
5186
|
] }, p.id))
|
|
5202
5187
|
] }),
|
|
5203
5188
|
actions && actions.length > 0 && /* @__PURE__ */ jsxs56(Fragment11, { children: [
|
|
@@ -5326,14 +5311,36 @@ function AppShell({ sidebar, topBar, children, className }) {
|
|
|
5326
5311
|
}
|
|
5327
5312
|
var AuthenticatedLayout = AppShell;
|
|
5328
5313
|
|
|
5329
|
-
// src/components/
|
|
5314
|
+
// src/components/top-bar.tsx
|
|
5330
5315
|
import * as React71 from "react";
|
|
5316
|
+
import { jsx as jsx88, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
5317
|
+
var TopBar = React71.forwardRef(
|
|
5318
|
+
({ left, right, className, ...props }, ref) => /* @__PURE__ */ jsxs59("div", { ref, className: cn("flex w-full items-center gap-1", className), ...props, children: [
|
|
5319
|
+
left,
|
|
5320
|
+
right && /* @__PURE__ */ jsx88("div", { className: "ml-auto flex items-center gap-2", children: right })
|
|
5321
|
+
] })
|
|
5322
|
+
);
|
|
5323
|
+
TopBar.displayName = "TopBar";
|
|
5324
|
+
|
|
5325
|
+
// src/components/top-bar-utilities.tsx
|
|
5326
|
+
import * as React72 from "react";
|
|
5327
|
+
import { jsx as jsx89, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
5328
|
+
var TopBarUtilities = React72.forwardRef(
|
|
5329
|
+
({ items, className, ...props }, ref) => /* @__PURE__ */ jsx89("div", { ref, className: cn("flex items-center gap-1", className), ...props, children: items.map(({ name, icon, onClick }) => /* @__PURE__ */ jsxs60(Tooltip, { children: [
|
|
5330
|
+
/* @__PURE__ */ jsx89(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx89(Button, { variant: "ghost", size: "sm", icon, "aria-label": name, onClick }) }),
|
|
5331
|
+
/* @__PURE__ */ jsx89(TooltipContent, { children: name })
|
|
5332
|
+
] }, name)) })
|
|
5333
|
+
);
|
|
5334
|
+
TopBarUtilities.displayName = "TopBarUtilities";
|
|
5335
|
+
|
|
5336
|
+
// src/components/grid.tsx
|
|
5337
|
+
import * as React73 from "react";
|
|
5331
5338
|
import { Slot as Slot7 } from "@radix-ui/react-slot";
|
|
5332
|
-
import { jsx as
|
|
5333
|
-
var Grid =
|
|
5339
|
+
import { jsx as jsx90 } from "react/jsx-runtime";
|
|
5340
|
+
var Grid = React73.forwardRef(
|
|
5334
5341
|
({ fluid = false, asChild = false, className, ...props }, ref) => {
|
|
5335
5342
|
const Comp = asChild ? Slot7 : "div";
|
|
5336
|
-
return /* @__PURE__ */
|
|
5343
|
+
return /* @__PURE__ */ jsx90(
|
|
5337
5344
|
Comp,
|
|
5338
5345
|
{
|
|
5339
5346
|
ref,
|
|
@@ -5351,9 +5358,9 @@ var Grid = React71.forwardRef(
|
|
|
5351
5358
|
Grid.displayName = "Grid";
|
|
5352
5359
|
|
|
5353
5360
|
// src/components/col.tsx
|
|
5354
|
-
import * as
|
|
5361
|
+
import * as React74 from "react";
|
|
5355
5362
|
import { Slot as Slot8 } from "@radix-ui/react-slot";
|
|
5356
|
-
import { jsx as
|
|
5363
|
+
import { jsx as jsx91 } from "react/jsx-runtime";
|
|
5357
5364
|
var TIER_MAX = { base: 4, md: 8, xl: 12 };
|
|
5358
5365
|
var SPAN = {
|
|
5359
5366
|
base: { 1: "col-span-1", 2: "col-span-2", 3: "col-span-3", 4: "col-span-4" },
|
|
@@ -5473,17 +5480,17 @@ function responsiveClasses(span, offset) {
|
|
|
5473
5480
|
}
|
|
5474
5481
|
return cn(...spanClasses, ...startClasses);
|
|
5475
5482
|
}
|
|
5476
|
-
var Col =
|
|
5483
|
+
var Col = React74.forwardRef(
|
|
5477
5484
|
({ span, offset, asChild = false, className, ...props }, ref) => {
|
|
5478
5485
|
const Comp = asChild ? Slot8 : "div";
|
|
5479
|
-
return /* @__PURE__ */
|
|
5486
|
+
return /* @__PURE__ */ jsx91(Comp, { ref, className: cn(responsiveClasses(span, offset), className), ...props });
|
|
5480
5487
|
}
|
|
5481
5488
|
);
|
|
5482
5489
|
Col.displayName = "Col";
|
|
5483
5490
|
|
|
5484
5491
|
// src/components/code-block.tsx
|
|
5485
|
-
import * as
|
|
5486
|
-
import { jsx as
|
|
5492
|
+
import * as React75 from "react";
|
|
5493
|
+
import { jsx as jsx92, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
5487
5494
|
var TOKEN_CLASS = {
|
|
5488
5495
|
comment: "text-text-tertiary italic",
|
|
5489
5496
|
string: "text-text-success",
|
|
@@ -5654,30 +5661,30 @@ function dropLeading(tokens, count) {
|
|
|
5654
5661
|
}
|
|
5655
5662
|
return out;
|
|
5656
5663
|
}
|
|
5657
|
-
var CodeBlock =
|
|
5664
|
+
var CodeBlock = React75.forwardRef(
|
|
5658
5665
|
({ code, lang = "tsx", variant = "default", copy = false, filename, scroll = false, highlightLines, showLineNumbers = false, className, ...props }, ref) => {
|
|
5659
|
-
const lines =
|
|
5660
|
-
const rawLines =
|
|
5661
|
-
const highlighted =
|
|
5666
|
+
const lines = React75.useMemo(() => tokenizeLines(code, lang), [code, lang]);
|
|
5667
|
+
const rawLines = React75.useMemo(() => code.split("\n"), [code]);
|
|
5668
|
+
const highlighted = React75.useMemo(() => parseHighlightLines(highlightLines), [highlightLines]);
|
|
5662
5669
|
const isDiff = variant === "diff";
|
|
5663
5670
|
const isTerminal = variant === "terminal";
|
|
5664
5671
|
const showCopy = copy && !isTerminal;
|
|
5665
5672
|
const overlayCopy = showCopy && !filename;
|
|
5666
5673
|
const contentWhitespace = scroll ? "whitespace-pre" : "whitespace-pre-wrap break-words";
|
|
5667
|
-
const pre = /* @__PURE__ */
|
|
5674
|
+
const pre = /* @__PURE__ */ jsx92(
|
|
5668
5675
|
"pre",
|
|
5669
5676
|
{
|
|
5670
5677
|
ref,
|
|
5671
5678
|
className: cn("py-4 font-mono text-xs leading-6 text-text-secondary", scroll && "overflow-x-auto", className),
|
|
5672
5679
|
...props,
|
|
5673
|
-
children: /* @__PURE__ */
|
|
5680
|
+
children: /* @__PURE__ */ jsx92("code", { className: "block min-w-full", children: lines.map((tokens, i) => {
|
|
5674
5681
|
const n = i + 1;
|
|
5675
5682
|
const raw = rawLines[i] ?? "";
|
|
5676
5683
|
const diffKind = isDiff ? raw[0] === "+" ? "add" : raw[0] === "-" ? "remove" : null : null;
|
|
5677
5684
|
const promptLen = isTerminal && raw[0] === "$" ? 1 : 0;
|
|
5678
5685
|
const markerDrop = diffKind ? 1 : promptLen;
|
|
5679
5686
|
const body = markerDrop ? dropLeading(tokens, markerDrop) : tokens;
|
|
5680
|
-
return /* @__PURE__ */
|
|
5687
|
+
return /* @__PURE__ */ jsxs61(
|
|
5681
5688
|
"span",
|
|
5682
5689
|
{
|
|
5683
5690
|
"data-line": n,
|
|
@@ -5690,8 +5697,8 @@ var CodeBlock = React73.forwardRef(
|
|
|
5690
5697
|
!diffKind && highlighted.has(n) && "bg-bg-brand-subtle"
|
|
5691
5698
|
),
|
|
5692
5699
|
children: [
|
|
5693
|
-
showLineNumbers && /* @__PURE__ */
|
|
5694
|
-
(isDiff || isTerminal) && /* @__PURE__ */
|
|
5700
|
+
showLineNumbers && /* @__PURE__ */ jsx92("span", { "aria-hidden": true, className: "mr-3 w-8 shrink-0 select-none text-right text-text-tertiary", children: n }),
|
|
5701
|
+
(isDiff || isTerminal) && /* @__PURE__ */ jsx92(
|
|
5695
5702
|
"span",
|
|
5696
5703
|
{
|
|
5697
5704
|
"aria-hidden": true,
|
|
@@ -5704,7 +5711,7 @@ var CodeBlock = React73.forwardRef(
|
|
|
5704
5711
|
children: diffKind === "add" ? "+" : diffKind === "remove" ? "-" : promptLen > 0 ? "$" : ""
|
|
5705
5712
|
}
|
|
5706
5713
|
),
|
|
5707
|
-
/* @__PURE__ */
|
|
5714
|
+
/* @__PURE__ */ jsx92("span", { className: cn("min-w-0 flex-1", contentWhitespace), children: body.length ? body.map((token, j) => /* @__PURE__ */ jsx92("span", { className: TOKEN_CLASS[token.kind], children: token.text }, j)) : "\xA0" })
|
|
5708
5715
|
]
|
|
5709
5716
|
},
|
|
5710
5717
|
i
|
|
@@ -5712,16 +5719,16 @@ var CodeBlock = React73.forwardRef(
|
|
|
5712
5719
|
}) })
|
|
5713
5720
|
}
|
|
5714
5721
|
);
|
|
5715
|
-
return /* @__PURE__ */
|
|
5716
|
-
filename && /* @__PURE__ */
|
|
5717
|
-
/* @__PURE__ */
|
|
5718
|
-
showCopy && /* @__PURE__ */
|
|
5722
|
+
return /* @__PURE__ */ jsxs61("div", { className: "relative overflow-hidden rounded-lg border border-border-subtle bg-bg-primary", children: [
|
|
5723
|
+
filename && /* @__PURE__ */ jsxs61("div", { className: "flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-2", children: [
|
|
5724
|
+
/* @__PURE__ */ jsx92("span", { className: "font-mono text-xs text-text-tertiary", children: filename }),
|
|
5725
|
+
showCopy && /* @__PURE__ */ jsx92(CopyButton, { value: code, label: "Copy code", className: "size-7" })
|
|
5719
5726
|
] }),
|
|
5720
5727
|
pre,
|
|
5721
5728
|
overlayCopy && // Always visible, on every device: a copy control you have to hover to discover is a
|
|
5722
5729
|
// control most people never find. Opaque (`bg-bg-primary`, the block's own surface) so it
|
|
5723
5730
|
// reads cleanly where a long first line runs under it.
|
|
5724
|
-
/* @__PURE__ */
|
|
5731
|
+
/* @__PURE__ */ jsx92(
|
|
5725
5732
|
CopyButton,
|
|
5726
5733
|
{
|
|
5727
5734
|
value: code,
|
|
@@ -5733,7 +5740,7 @@ var CodeBlock = React73.forwardRef(
|
|
|
5733
5740
|
}
|
|
5734
5741
|
);
|
|
5735
5742
|
CodeBlock.displayName = "CodeBlock";
|
|
5736
|
-
var Code =
|
|
5743
|
+
var Code = React75.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx92(
|
|
5737
5744
|
"code",
|
|
5738
5745
|
{
|
|
5739
5746
|
ref,
|
|
@@ -5747,13 +5754,13 @@ var Code = React73.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
|
5747
5754
|
Code.displayName = "Code";
|
|
5748
5755
|
|
|
5749
5756
|
// src/components/grid-overlay.tsx
|
|
5750
|
-
import * as
|
|
5751
|
-
import { jsx as
|
|
5757
|
+
import * as React76 from "react";
|
|
5758
|
+
import { jsx as jsx93 } from "react/jsx-runtime";
|
|
5752
5759
|
var BASELINE = "var(--grid-gutter) / 2";
|
|
5753
|
-
var GridOverlay =
|
|
5760
|
+
var GridOverlay = React76.forwardRef(
|
|
5754
5761
|
({ columns, baseline = false, className, style, ...props }, ref) => {
|
|
5755
5762
|
const count = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;
|
|
5756
|
-
return /* @__PURE__ */
|
|
5763
|
+
return /* @__PURE__ */ jsx93(
|
|
5757
5764
|
"div",
|
|
5758
5765
|
{
|
|
5759
5766
|
ref,
|
|
@@ -5770,7 +5777,7 @@ var GridOverlay = React74.forwardRef(
|
|
|
5770
5777
|
...style
|
|
5771
5778
|
},
|
|
5772
5779
|
...props,
|
|
5773
|
-
children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */
|
|
5780
|
+
children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsx93("span", { style: { backgroundColor: "var(--bg-brand)", opacity: 0.1 } }, i))
|
|
5774
5781
|
}
|
|
5775
5782
|
);
|
|
5776
5783
|
}
|
|
@@ -5778,10 +5785,10 @@ var GridOverlay = React74.forwardRef(
|
|
|
5778
5785
|
GridOverlay.displayName = "GridOverlay";
|
|
5779
5786
|
|
|
5780
5787
|
// src/components/attachment-chip.tsx
|
|
5781
|
-
import * as
|
|
5788
|
+
import * as React77 from "react";
|
|
5782
5789
|
import { cva as cva10 } from "class-variance-authority";
|
|
5783
5790
|
import { Link2 as Link22, Clock, Plus as Plus2 } from "lucide-react";
|
|
5784
|
-
import { jsx as
|
|
5791
|
+
import { jsx as jsx94, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
5785
5792
|
var attachmentChipVariants = cva10(
|
|
5786
5793
|
"inline-flex items-center gap-1.5 rounded-lg border px-2.5 py-1 text-sm font-medium leading-tight",
|
|
5787
5794
|
{
|
|
@@ -5800,11 +5807,11 @@ var stateIcons = {
|
|
|
5800
5807
|
requested: Clock,
|
|
5801
5808
|
available: Plus2
|
|
5802
5809
|
};
|
|
5803
|
-
var AttachmentChip =
|
|
5810
|
+
var AttachmentChip = React77.forwardRef(
|
|
5804
5811
|
({ state: state2, account, icon, hideIcon = false, className, ...props }, ref) => {
|
|
5805
5812
|
const Icon = icon ?? stateIcons[state2 ?? "attached"];
|
|
5806
|
-
return /* @__PURE__ */
|
|
5807
|
-
!hideIcon && /* @__PURE__ */
|
|
5813
|
+
return /* @__PURE__ */ jsxs62("span", { ref, className: cn(attachmentChipVariants({ state: state2 }), className), ...props, children: [
|
|
5814
|
+
!hideIcon && /* @__PURE__ */ jsx94(Icon, { className: "size-3.5 shrink-0 opacity-90", "aria-hidden": "true" }),
|
|
5808
5815
|
account
|
|
5809
5816
|
] });
|
|
5810
5817
|
}
|
|
@@ -5812,9 +5819,9 @@ var AttachmentChip = React75.forwardRef(
|
|
|
5812
5819
|
AttachmentChip.displayName = "AttachmentChip";
|
|
5813
5820
|
|
|
5814
5821
|
// src/components/connector-card.tsx
|
|
5815
|
-
import * as
|
|
5822
|
+
import * as React78 from "react";
|
|
5816
5823
|
import { AlertTriangle, ChevronDown as ChevronDown6 } from "lucide-react";
|
|
5817
|
-
import { Fragment as Fragment12, jsx as
|
|
5824
|
+
import { Fragment as Fragment12, jsx as jsx95, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
5818
5825
|
var originLabels = {
|
|
5819
5826
|
org: "Attached by the organization",
|
|
5820
5827
|
product: "Attached by this product"
|
|
@@ -5827,7 +5834,7 @@ var statusLabels = {
|
|
|
5827
5834
|
function monogram(name) {
|
|
5828
5835
|
return name.replace(/[^a-zA-Z0-9 ]/g, " ").split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join("");
|
|
5829
5836
|
}
|
|
5830
|
-
var ConnectorCard =
|
|
5837
|
+
var ConnectorCard = React78.forwardRef(
|
|
5831
5838
|
({
|
|
5832
5839
|
name,
|
|
5833
5840
|
kind,
|
|
@@ -5848,7 +5855,7 @@ var ConnectorCard = React76.forwardRef(
|
|
|
5848
5855
|
}, ref) => {
|
|
5849
5856
|
const connected = status !== "not-connected";
|
|
5850
5857
|
const label = statusLabel ?? statusLabels[status];
|
|
5851
|
-
const glyphBox = /* @__PURE__ */
|
|
5858
|
+
const glyphBox = /* @__PURE__ */ jsx95(
|
|
5852
5859
|
"div",
|
|
5853
5860
|
{
|
|
5854
5861
|
"aria-hidden": "true",
|
|
@@ -5856,48 +5863,48 @@ var ConnectorCard = React76.forwardRef(
|
|
|
5856
5863
|
children: glyph ?? monogram(name)
|
|
5857
5864
|
}
|
|
5858
5865
|
);
|
|
5859
|
-
const identity = /* @__PURE__ */
|
|
5860
|
-
/* @__PURE__ */
|
|
5861
|
-
(kind || origin) && /* @__PURE__ */
|
|
5862
|
-
kind && /* @__PURE__ */
|
|
5863
|
-
origin && /* @__PURE__ */
|
|
5866
|
+
const identity = /* @__PURE__ */ jsxs63("div", { className: "min-w-0", children: [
|
|
5867
|
+
/* @__PURE__ */ jsx95("p", { className: "truncate text-sm font-semibold text-text-primary", children: name }),
|
|
5868
|
+
(kind || origin) && /* @__PURE__ */ jsxs63("div", { className: "mt-0.5 flex flex-wrap gap-1", children: [
|
|
5869
|
+
kind && /* @__PURE__ */ jsx95(Badge, { variant: "secondary", children: kind }),
|
|
5870
|
+
origin && /* @__PURE__ */ jsx95(Badge, { variant: "outline", children: originLabels[origin] })
|
|
5864
5871
|
] })
|
|
5865
5872
|
] });
|
|
5866
|
-
const statusBadge = label ? /* @__PURE__ */
|
|
5867
|
-
const accessNote = access ? /* @__PURE__ */
|
|
5873
|
+
const statusBadge = label ? /* @__PURE__ */ jsx95(Badge, { variant: "status", children: label }) : null;
|
|
5874
|
+
const accessNote = access ? /* @__PURE__ */ jsxs63(
|
|
5868
5875
|
"div",
|
|
5869
5876
|
{
|
|
5870
5877
|
role: "note",
|
|
5871
5878
|
className: "flex items-start gap-2 border-t border-border-subtle bg-bg-secondary px-4 py-2.5 text-xs font-medium text-text-secondary",
|
|
5872
5879
|
children: [
|
|
5873
|
-
/* @__PURE__ */
|
|
5874
|
-
/* @__PURE__ */
|
|
5880
|
+
/* @__PURE__ */ jsx95(AlertTriangle, { className: "mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }),
|
|
5881
|
+
/* @__PURE__ */ jsx95("span", { children: access })
|
|
5875
5882
|
]
|
|
5876
5883
|
}
|
|
5877
5884
|
) : null;
|
|
5878
5885
|
const footerAction = collapsible ? action : connected && action;
|
|
5879
|
-
const footer = attachedCount !== void 0 || footerAction ? /* @__PURE__ */
|
|
5880
|
-
/* @__PURE__ */
|
|
5886
|
+
const footer = attachedCount !== void 0 || footerAction ? /* @__PURE__ */ jsxs63("div", { className: "flex items-center justify-between border-t border-border-subtle px-4 py-3", children: [
|
|
5887
|
+
/* @__PURE__ */ jsx95("span", { className: "text-sm text-text-secondary", children: attachedCount !== void 0 ? /* @__PURE__ */ jsxs63(Fragment12, { children: [
|
|
5881
5888
|
"Attached to ",
|
|
5882
|
-
/* @__PURE__ */
|
|
5889
|
+
/* @__PURE__ */ jsx95("span", { className: "font-semibold text-text-primary", children: attachedCount }),
|
|
5883
5890
|
" ",
|
|
5884
5891
|
attachedCount === 1 ? "product" : "products"
|
|
5885
|
-
] }) : /* @__PURE__ */
|
|
5892
|
+
] }) : /* @__PURE__ */ jsx95("span", { className: "text-text-tertiary", children: "Not attached to any product yet" }) }),
|
|
5886
5893
|
footerAction
|
|
5887
5894
|
] }) : null;
|
|
5888
|
-
const drawer = children ? /* @__PURE__ */
|
|
5895
|
+
const drawer = children ? /* @__PURE__ */ jsx95("div", { "data-slot": "drawer", className: "border-t border-border-subtle", children }) : null;
|
|
5889
5896
|
if (!collapsible) {
|
|
5890
|
-
return /* @__PURE__ */
|
|
5897
|
+
return /* @__PURE__ */ jsxs63(
|
|
5891
5898
|
Card,
|
|
5892
5899
|
{
|
|
5893
5900
|
ref,
|
|
5894
5901
|
className: cn(status === "not-connected" && "border-dashed border-border-default", className),
|
|
5895
5902
|
...props,
|
|
5896
5903
|
children: [
|
|
5897
|
-
/* @__PURE__ */
|
|
5904
|
+
/* @__PURE__ */ jsxs63("div", { className: "flex items-center gap-3 p-4", children: [
|
|
5898
5905
|
glyphBox,
|
|
5899
5906
|
identity,
|
|
5900
|
-
/* @__PURE__ */
|
|
5907
|
+
/* @__PURE__ */ jsx95("div", { className: "ml-auto shrink-0", children: connected ? statusBadge : action ?? statusBadge })
|
|
5901
5908
|
] }),
|
|
5902
5909
|
accessNote,
|
|
5903
5910
|
footer,
|
|
@@ -5906,7 +5913,7 @@ var ConnectorCard = React76.forwardRef(
|
|
|
5906
5913
|
}
|
|
5907
5914
|
);
|
|
5908
5915
|
}
|
|
5909
|
-
return /* @__PURE__ */
|
|
5916
|
+
return /* @__PURE__ */ jsx95(Collapsible, { defaultOpen, open, onOpenChange, children: /* @__PURE__ */ jsxs63(
|
|
5910
5917
|
Card,
|
|
5911
5918
|
{
|
|
5912
5919
|
ref,
|
|
@@ -5917,7 +5924,7 @@ var ConnectorCard = React76.forwardRef(
|
|
|
5917
5924
|
),
|
|
5918
5925
|
...props,
|
|
5919
5926
|
children: [
|
|
5920
|
-
/* @__PURE__ */
|
|
5927
|
+
/* @__PURE__ */ jsx95(CollapsibleTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs63(
|
|
5921
5928
|
"button",
|
|
5922
5929
|
{
|
|
5923
5930
|
type: "button",
|
|
@@ -5925,9 +5932,9 @@ var ConnectorCard = React76.forwardRef(
|
|
|
5925
5932
|
children: [
|
|
5926
5933
|
glyphBox,
|
|
5927
5934
|
identity,
|
|
5928
|
-
/* @__PURE__ */
|
|
5935
|
+
/* @__PURE__ */ jsxs63("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [
|
|
5929
5936
|
statusBadge,
|
|
5930
|
-
/* @__PURE__ */
|
|
5937
|
+
/* @__PURE__ */ jsx95(
|
|
5931
5938
|
ChevronDown6,
|
|
5932
5939
|
{
|
|
5933
5940
|
"aria-hidden": "true",
|
|
@@ -5938,7 +5945,7 @@ var ConnectorCard = React76.forwardRef(
|
|
|
5938
5945
|
]
|
|
5939
5946
|
}
|
|
5940
5947
|
) }),
|
|
5941
|
-
/* @__PURE__ */
|
|
5948
|
+
/* @__PURE__ */ jsxs63(CollapsibleContent2, { children: [
|
|
5942
5949
|
accessNote,
|
|
5943
5950
|
footer,
|
|
5944
5951
|
drawer
|
|
@@ -5951,33 +5958,33 @@ var ConnectorCard = React76.forwardRef(
|
|
|
5951
5958
|
ConnectorCard.displayName = "ConnectorCard";
|
|
5952
5959
|
|
|
5953
5960
|
// src/components/request-row.tsx
|
|
5954
|
-
import * as
|
|
5955
|
-
import { Fragment as Fragment13, jsx as
|
|
5961
|
+
import * as React79 from "react";
|
|
5962
|
+
import { Fragment as Fragment13, jsx as jsx96, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
5956
5963
|
function monogram2(name) {
|
|
5957
5964
|
return name.replace(/[^a-zA-Z0-9 ]/g, " ").split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join("");
|
|
5958
5965
|
}
|
|
5959
|
-
var RequestRow =
|
|
5966
|
+
var RequestRow = React79.forwardRef(
|
|
5960
5967
|
({ surface, name, state: state2, glyph, subtitle, account, onApprove, onDeny, onRequest, onRevoke, action, className, ...props }, ref) => {
|
|
5961
5968
|
let controls = action;
|
|
5962
5969
|
if (controls === void 0) {
|
|
5963
5970
|
if (surface === "org" && state2 === "pending") {
|
|
5964
|
-
controls = /* @__PURE__ */
|
|
5965
|
-
/* @__PURE__ */
|
|
5966
|
-
/* @__PURE__ */
|
|
5971
|
+
controls = /* @__PURE__ */ jsxs64(Fragment13, { children: [
|
|
5972
|
+
/* @__PURE__ */ jsx96(Button, { variant: "ghost", size: "sm", onClick: onDeny, children: "Deny" }),
|
|
5973
|
+
/* @__PURE__ */ jsx96(Button, { variant: "outline", size: "sm", onClick: onApprove, children: "Approve" })
|
|
5967
5974
|
] });
|
|
5968
5975
|
} else if (state2 === "sent") {
|
|
5969
|
-
controls = /* @__PURE__ */
|
|
5976
|
+
controls = /* @__PURE__ */ jsx96(Button, { variant: "destructive-ghost", size: "sm", onClick: onRevoke, children: "Revoke" });
|
|
5970
5977
|
} else if (state2 === "available") {
|
|
5971
|
-
controls = /* @__PURE__ */
|
|
5978
|
+
controls = /* @__PURE__ */ jsx96(Button, { variant: "outline", size: "sm", onClick: onRequest, children: "Request" });
|
|
5972
5979
|
} else if (state2 === "pending") {
|
|
5973
|
-
controls = /* @__PURE__ */
|
|
5980
|
+
controls = /* @__PURE__ */ jsx96(Badge, { variant: "status", children: "Requested" });
|
|
5974
5981
|
} else if (state2 === "denied") {
|
|
5975
|
-
controls = /* @__PURE__ */
|
|
5982
|
+
controls = /* @__PURE__ */ jsx96(Badge, { variant: "status", children: "Denied" });
|
|
5976
5983
|
} else if (state2 === "attached") {
|
|
5977
|
-
controls = account ? /* @__PURE__ */
|
|
5984
|
+
controls = account ? /* @__PURE__ */ jsx96(AttachmentChip, { state: "attached", account }) : /* @__PURE__ */ jsx96(Badge, { variant: "status", children: "In use" });
|
|
5978
5985
|
}
|
|
5979
5986
|
}
|
|
5980
|
-
return /* @__PURE__ */
|
|
5987
|
+
return /* @__PURE__ */ jsxs64(
|
|
5981
5988
|
"div",
|
|
5982
5989
|
{
|
|
5983
5990
|
ref,
|
|
@@ -5987,7 +5994,7 @@ var RequestRow = React77.forwardRef(
|
|
|
5987
5994
|
),
|
|
5988
5995
|
...props,
|
|
5989
5996
|
children: [
|
|
5990
|
-
/* @__PURE__ */
|
|
5997
|
+
/* @__PURE__ */ jsx96(
|
|
5991
5998
|
"div",
|
|
5992
5999
|
{
|
|
5993
6000
|
"aria-hidden": "true",
|
|
@@ -5995,11 +6002,11 @@ var RequestRow = React77.forwardRef(
|
|
|
5995
6002
|
children: glyph ?? monogram2(name)
|
|
5996
6003
|
}
|
|
5997
6004
|
),
|
|
5998
|
-
/* @__PURE__ */
|
|
5999
|
-
/* @__PURE__ */
|
|
6000
|
-
subtitle && /* @__PURE__ */
|
|
6005
|
+
/* @__PURE__ */ jsxs64("div", { className: "min-w-0", children: [
|
|
6006
|
+
/* @__PURE__ */ jsx96("p", { className: "truncate text-sm font-semibold text-text-primary", children: name }),
|
|
6007
|
+
subtitle && /* @__PURE__ */ jsx96("p", { className: "truncate text-xs text-text-tertiary", children: subtitle })
|
|
6001
6008
|
] }),
|
|
6002
|
-
/* @__PURE__ */
|
|
6009
|
+
/* @__PURE__ */ jsx96("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: controls })
|
|
6003
6010
|
]
|
|
6004
6011
|
}
|
|
6005
6012
|
);
|
|
@@ -6008,9 +6015,9 @@ var RequestRow = React77.forwardRef(
|
|
|
6008
6015
|
RequestRow.displayName = "RequestRow";
|
|
6009
6016
|
|
|
6010
6017
|
// src/components/feedback-button.tsx
|
|
6011
|
-
import * as
|
|
6018
|
+
import * as React80 from "react";
|
|
6012
6019
|
import { MessageSquare, Loader2 as Loader23, CheckCircle2 } from "lucide-react";
|
|
6013
|
-
import { jsx as
|
|
6020
|
+
import { jsx as jsx97, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
6014
6021
|
var TITLE_MAX = 256;
|
|
6015
6022
|
var DETAILS_MAX = 65536;
|
|
6016
6023
|
var DEFAULT_LABELS = {
|
|
@@ -6024,15 +6031,15 @@ var DEFAULT_LABELS = {
|
|
|
6024
6031
|
};
|
|
6025
6032
|
function FeedbackButton({ onSubmit, labels, className }) {
|
|
6026
6033
|
const l = { ...DEFAULT_LABELS, ...labels };
|
|
6027
|
-
const uid =
|
|
6034
|
+
const uid = React80.useId();
|
|
6028
6035
|
const titleId = `${uid}-title`;
|
|
6029
6036
|
const detailsId = `${uid}-details`;
|
|
6030
6037
|
const titleErrId = `${uid}-title-error`;
|
|
6031
6038
|
const detailsErrId = `${uid}-details-error`;
|
|
6032
|
-
const [open, setOpen] =
|
|
6033
|
-
const [status, setStatus] =
|
|
6034
|
-
const [title, setTitle] =
|
|
6035
|
-
const [details, setDetails] =
|
|
6039
|
+
const [open, setOpen] = React80.useState(false);
|
|
6040
|
+
const [status, setStatus] = React80.useState("idle");
|
|
6041
|
+
const [title, setTitle] = React80.useState("");
|
|
6042
|
+
const [details, setDetails] = React80.useState("");
|
|
6036
6043
|
const titleTooLong = title.length > TITLE_MAX;
|
|
6037
6044
|
const detailsTooLong = details.length > DETAILS_MAX;
|
|
6038
6045
|
const titleEmpty = title.trim().length === 0;
|
|
@@ -6057,20 +6064,20 @@ function FeedbackButton({ onSubmit, labels, className }) {
|
|
|
6057
6064
|
setStatus("error");
|
|
6058
6065
|
}
|
|
6059
6066
|
};
|
|
6060
|
-
return /* @__PURE__ */
|
|
6061
|
-
/* @__PURE__ */
|
|
6062
|
-
/* @__PURE__ */
|
|
6067
|
+
return /* @__PURE__ */ jsxs65(Popover, { open, onOpenChange: changeOpen, children: [
|
|
6068
|
+
/* @__PURE__ */ jsx97(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs65(Button, { variant: "ghost", size: "sm", "aria-label": l.trigger, className, children: [
|
|
6069
|
+
/* @__PURE__ */ jsx97(MessageSquare, { className: "size-4", "aria-hidden": "true" }),
|
|
6063
6070
|
l.trigger
|
|
6064
6071
|
] }) }),
|
|
6065
|
-
/* @__PURE__ */
|
|
6066
|
-
/* @__PURE__ */
|
|
6067
|
-
/* @__PURE__ */
|
|
6068
|
-
/* @__PURE__ */
|
|
6069
|
-
] }) : /* @__PURE__ */
|
|
6070
|
-
/* @__PURE__ */
|
|
6071
|
-
/* @__PURE__ */
|
|
6072
|
-
/* @__PURE__ */
|
|
6073
|
-
/* @__PURE__ */
|
|
6072
|
+
/* @__PURE__ */ jsx97(PopoverContent, { align: "end", side: "bottom", className: "w-80", children: status === "success" ? /* @__PURE__ */ jsxs65("div", { className: "flex flex-col items-center gap-3 py-2 text-center", children: [
|
|
6073
|
+
/* @__PURE__ */ jsx97(CheckCircle2, { className: "size-8 text-text-success", "aria-hidden": "true" }),
|
|
6074
|
+
/* @__PURE__ */ jsx97("p", { role: "status", className: "text-sm text-text-primary", children: l.success }),
|
|
6075
|
+
/* @__PURE__ */ jsx97(Button, { variant: "outline", size: "sm", onClick: () => changeOpen(false), children: "Close" })
|
|
6076
|
+
] }) : /* @__PURE__ */ jsxs65("form", { onSubmit: handleSubmit, className: "flex flex-col gap-3", children: [
|
|
6077
|
+
/* @__PURE__ */ jsx97("p", { className: "text-sm font-medium text-text-primary", children: l.title }),
|
|
6078
|
+
/* @__PURE__ */ jsxs65("div", { className: "flex flex-col gap-1.5", children: [
|
|
6079
|
+
/* @__PURE__ */ jsx97(Label2, { htmlFor: titleId, children: l.titleField }),
|
|
6080
|
+
/* @__PURE__ */ jsx97(
|
|
6074
6081
|
Input,
|
|
6075
6082
|
{
|
|
6076
6083
|
id: titleId,
|
|
@@ -6081,16 +6088,16 @@ function FeedbackButton({ onSubmit, labels, className }) {
|
|
|
6081
6088
|
"aria-describedby": titleTooLong ? titleErrId : void 0
|
|
6082
6089
|
}
|
|
6083
6090
|
),
|
|
6084
|
-
titleTooLong && /* @__PURE__ */
|
|
6091
|
+
titleTooLong && /* @__PURE__ */ jsxs65("p", { id: titleErrId, className: "text-xs text-text-danger", children: [
|
|
6085
6092
|
l.titleField,
|
|
6086
6093
|
" must be ",
|
|
6087
6094
|
TITLE_MAX,
|
|
6088
6095
|
" characters or fewer."
|
|
6089
6096
|
] })
|
|
6090
6097
|
] }),
|
|
6091
|
-
/* @__PURE__ */
|
|
6092
|
-
/* @__PURE__ */
|
|
6093
|
-
/* @__PURE__ */
|
|
6098
|
+
/* @__PURE__ */ jsxs65("div", { className: "flex flex-col gap-1.5", children: [
|
|
6099
|
+
/* @__PURE__ */ jsx97(Label2, { htmlFor: detailsId, children: l.detailsField }),
|
|
6100
|
+
/* @__PURE__ */ jsx97(
|
|
6094
6101
|
Textarea,
|
|
6095
6102
|
{
|
|
6096
6103
|
id: detailsId,
|
|
@@ -6101,16 +6108,16 @@ function FeedbackButton({ onSubmit, labels, className }) {
|
|
|
6101
6108
|
"aria-describedby": detailsTooLong ? detailsErrId : void 0
|
|
6102
6109
|
}
|
|
6103
6110
|
),
|
|
6104
|
-
detailsTooLong && /* @__PURE__ */
|
|
6111
|
+
detailsTooLong && /* @__PURE__ */ jsxs65("p", { id: detailsErrId, className: "text-xs text-text-danger", children: [
|
|
6105
6112
|
l.detailsField,
|
|
6106
6113
|
" must be ",
|
|
6107
6114
|
DETAILS_MAX,
|
|
6108
6115
|
" characters or fewer."
|
|
6109
6116
|
] })
|
|
6110
6117
|
] }),
|
|
6111
|
-
status === "error" && /* @__PURE__ */
|
|
6112
|
-
/* @__PURE__ */
|
|
6113
|
-
submitting && /* @__PURE__ */
|
|
6118
|
+
status === "error" && /* @__PURE__ */ jsx97(InlineError, { children: l.error }),
|
|
6119
|
+
/* @__PURE__ */ jsxs65(Button, { type: "submit", disabled: !valid || submitting, children: [
|
|
6120
|
+
submitting && /* @__PURE__ */ jsx97(Loader23, { className: "size-4 animate-spin", "aria-hidden": "true" }),
|
|
6114
6121
|
l.submit
|
|
6115
6122
|
] })
|
|
6116
6123
|
] }) })
|
|
@@ -6166,28 +6173,30 @@ function isNotificationSettled(item) {
|
|
|
6166
6173
|
}
|
|
6167
6174
|
|
|
6168
6175
|
// src/components/notification-bell.tsx
|
|
6169
|
-
import * as
|
|
6176
|
+
import * as React82 from "react";
|
|
6170
6177
|
import { BellRing, Settings } from "lucide-react";
|
|
6171
6178
|
|
|
6172
6179
|
// src/components/notification-row.tsx
|
|
6173
|
-
import * as
|
|
6180
|
+
import * as React81 from "react";
|
|
6174
6181
|
|
|
6175
6182
|
// src/components/notification-parts.tsx
|
|
6176
|
-
import { Check as
|
|
6177
|
-
import { jsx as
|
|
6183
|
+
import { Check as Check10 } from "lucide-react";
|
|
6184
|
+
import { jsx as jsx98 } from "react/jsx-runtime";
|
|
6178
6185
|
var rowControlHitArea = "relative after:absolute after:-inset-x-2 after:-top-1.5 after:-bottom-2.5";
|
|
6179
6186
|
function rowControlName(label, title) {
|
|
6180
6187
|
return `${label} "${title}"`;
|
|
6181
6188
|
}
|
|
6182
6189
|
function MarkReadButton({ title, onClick }) {
|
|
6183
|
-
|
|
6184
|
-
|
|
6190
|
+
const label = `Mark "${title}" as read`;
|
|
6191
|
+
return /* @__PURE__ */ jsx98(
|
|
6192
|
+
Button,
|
|
6185
6193
|
{
|
|
6186
|
-
|
|
6187
|
-
|
|
6194
|
+
variant: "ghost",
|
|
6195
|
+
size: "xs",
|
|
6196
|
+
icon: /* @__PURE__ */ jsx98(Check10, {}),
|
|
6197
|
+
"aria-label": label,
|
|
6188
6198
|
onClick,
|
|
6189
|
-
className: "relative
|
|
6190
|
-
children: /* @__PURE__ */ jsx96(Check9, { className: "size-3.5", "aria-hidden": "true" })
|
|
6199
|
+
className: "relative text-text-secondary after:absolute after:-inset-3 hover:text-text-primary"
|
|
6191
6200
|
}
|
|
6192
6201
|
);
|
|
6193
6202
|
}
|
|
@@ -6198,12 +6207,12 @@ function DeepLinkControl({
|
|
|
6198
6207
|
onClick
|
|
6199
6208
|
}) {
|
|
6200
6209
|
const name = rowControlName(link.label, title);
|
|
6201
|
-
return link.href ? /* @__PURE__ */
|
|
6210
|
+
return link.href ? /* @__PURE__ */ jsx98("a", { href: link.href, "aria-label": name, onClick, className, children: link.label }) : /* @__PURE__ */ jsx98("button", { type: "button", "aria-label": name, onClick, className, children: link.label });
|
|
6202
6211
|
}
|
|
6203
6212
|
|
|
6204
6213
|
// src/components/notification-row.tsx
|
|
6205
|
-
import { jsx as
|
|
6206
|
-
var NotificationRow =
|
|
6214
|
+
import { jsx as jsx99, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
6215
|
+
var NotificationRow = React81.forwardRef(
|
|
6207
6216
|
({ item, onItemClick, onActionClick, onMarkRead, formatAge, className, ...props }, ref) => {
|
|
6208
6217
|
const settled = isNotificationSettled(item);
|
|
6209
6218
|
const unread = !settled && !item.read;
|
|
@@ -6215,20 +6224,20 @@ var NotificationRow = React79.forwardRef(
|
|
|
6215
6224
|
// Three steps of one ladder, and every one of them a token a reader can read:
|
|
6216
6225
|
// unread is the loudest, read is quieter, settled is quietest. An opacity is
|
|
6217
6226
|
// not a step — it drags the text under the contrast floor with the row.
|
|
6218
|
-
/* @__PURE__ */
|
|
6227
|
+
/* @__PURE__ */ jsxs66(
|
|
6219
6228
|
"div",
|
|
6220
6229
|
{
|
|
6221
6230
|
ref,
|
|
6222
6231
|
className: cn("group rounded-lg bg-bg-surface px-3 py-2.5", className),
|
|
6223
6232
|
...props,
|
|
6224
6233
|
children: [
|
|
6225
|
-
/* @__PURE__ */
|
|
6226
|
-
/* @__PURE__ */
|
|
6227
|
-
/* @__PURE__ */
|
|
6228
|
-
/* @__PURE__ */
|
|
6234
|
+
/* @__PURE__ */ jsxs66("div", { className: "flex items-start gap-2.5", children: [
|
|
6235
|
+
/* @__PURE__ */ jsxs66("div", { className: "min-w-0 flex-1", children: [
|
|
6236
|
+
/* @__PURE__ */ jsxs66("p", { className: "truncate text-xs text-text-tertiary", children: [
|
|
6237
|
+
/* @__PURE__ */ jsx99("span", { className: "font-semibold uppercase tracking-wide text-text-secondary", children: item.source }),
|
|
6229
6238
|
item.receipt ? `, ${item.receipt}` : ""
|
|
6230
6239
|
] }),
|
|
6231
|
-
/* @__PURE__ */
|
|
6240
|
+
/* @__PURE__ */ jsx99(
|
|
6232
6241
|
"button",
|
|
6233
6242
|
{
|
|
6234
6243
|
type: "button",
|
|
@@ -6240,7 +6249,7 @@ var NotificationRow = React79.forwardRef(
|
|
|
6240
6249
|
children: item.title
|
|
6241
6250
|
}
|
|
6242
6251
|
),
|
|
6243
|
-
item.body && /* @__PURE__ */
|
|
6252
|
+
item.body && /* @__PURE__ */ jsx99(
|
|
6244
6253
|
"p",
|
|
6245
6254
|
{
|
|
6246
6255
|
className: cn(
|
|
@@ -6251,15 +6260,15 @@ var NotificationRow = React79.forwardRef(
|
|
|
6251
6260
|
}
|
|
6252
6261
|
)
|
|
6253
6262
|
] }),
|
|
6254
|
-
(age || markable) && /* @__PURE__ */
|
|
6255
|
-
stamp && age && /* @__PURE__ */
|
|
6256
|
-
markable && /* @__PURE__ */
|
|
6263
|
+
(age || markable) && /* @__PURE__ */ jsxs66("div", { className: "mt-px flex shrink-0 items-center gap-1", children: [
|
|
6264
|
+
stamp && age && /* @__PURE__ */ jsx99("time", { dateTime: toDateTimeAttribute(stamp), className: "text-xs text-text-tertiary", children: age }),
|
|
6265
|
+
markable && /* @__PURE__ */ jsx99(MarkReadButton, { title: item.title, onClick: () => onMarkRead(item.id) })
|
|
6257
6266
|
] })
|
|
6258
6267
|
] }),
|
|
6259
|
-
(actions.length > 0 || item.deepLink) && /* @__PURE__ */
|
|
6268
|
+
(actions.length > 0 || item.deepLink) && /* @__PURE__ */ jsxs66("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-2", children: [
|
|
6260
6269
|
actions.map((action) => {
|
|
6261
6270
|
const chip = action.variant === "primary" || action.variant === "destructive";
|
|
6262
|
-
return /* @__PURE__ */
|
|
6271
|
+
return /* @__PURE__ */ jsx99(
|
|
6263
6272
|
"button",
|
|
6264
6273
|
{
|
|
6265
6274
|
type: "button",
|
|
@@ -6276,7 +6285,7 @@ var NotificationRow = React79.forwardRef(
|
|
|
6276
6285
|
action.id
|
|
6277
6286
|
);
|
|
6278
6287
|
}),
|
|
6279
|
-
item.deepLink && /* @__PURE__ */
|
|
6288
|
+
item.deepLink && /* @__PURE__ */ jsx99(
|
|
6280
6289
|
DeepLinkControl,
|
|
6281
6290
|
{
|
|
6282
6291
|
link: item.deepLink,
|
|
@@ -6298,8 +6307,8 @@ var NotificationRow = React79.forwardRef(
|
|
|
6298
6307
|
NotificationRow.displayName = "NotificationRow";
|
|
6299
6308
|
|
|
6300
6309
|
// src/components/notification-bell.tsx
|
|
6301
|
-
import { jsx as
|
|
6302
|
-
var NotificationBell =
|
|
6310
|
+
import { jsx as jsx100, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
6311
|
+
var NotificationBell = React82.forwardRef(
|
|
6303
6312
|
({
|
|
6304
6313
|
items,
|
|
6305
6314
|
unreadCount,
|
|
@@ -6319,8 +6328,8 @@ var NotificationBell = React80.forwardRef(
|
|
|
6319
6328
|
const unread = unreadCount ?? items.filter((n) => !n.read && n.cls !== "ephemeral").length;
|
|
6320
6329
|
const rows = items.slice(0, maxItems);
|
|
6321
6330
|
const hidden = items.length - rows.length;
|
|
6322
|
-
return /* @__PURE__ */
|
|
6323
|
-
/* @__PURE__ */
|
|
6331
|
+
return /* @__PURE__ */ jsxs67(Popover, { open, onOpenChange, children: [
|
|
6332
|
+
/* @__PURE__ */ jsx100(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs67(
|
|
6324
6333
|
"button",
|
|
6325
6334
|
{
|
|
6326
6335
|
ref,
|
|
@@ -6331,12 +6340,12 @@ var NotificationBell = React80.forwardRef(
|
|
|
6331
6340
|
className
|
|
6332
6341
|
),
|
|
6333
6342
|
children: [
|
|
6334
|
-
/* @__PURE__ */
|
|
6335
|
-
unread > 0 && /* @__PURE__ */
|
|
6343
|
+
/* @__PURE__ */ jsx100(BellRing, { className: "size-[18px]", "aria-hidden": "true" }),
|
|
6344
|
+
unread > 0 && /* @__PURE__ */ jsx100("span", { className: "absolute -right-1.5 -top-1.5 flex size-[17px] items-center justify-center rounded-full bg-bg-brand text-xs font-bold leading-none text-text-on-brand ring-2 ring-bg-surface", children: unread })
|
|
6336
6345
|
]
|
|
6337
6346
|
}
|
|
6338
6347
|
) }),
|
|
6339
|
-
/* @__PURE__ */
|
|
6348
|
+
/* @__PURE__ */ jsxs67(
|
|
6340
6349
|
PopoverContent,
|
|
6341
6350
|
{
|
|
6342
6351
|
align: "end",
|
|
@@ -6344,10 +6353,10 @@ var NotificationBell = React80.forwardRef(
|
|
|
6344
6353
|
style: { maxHeight: "var(--radix-popover-content-available-height, 32rem)" },
|
|
6345
6354
|
className: "flex w-[380px] flex-col overflow-hidden p-0",
|
|
6346
6355
|
children: [
|
|
6347
|
-
/* @__PURE__ */
|
|
6348
|
-
/* @__PURE__ */
|
|
6349
|
-
/* @__PURE__ */
|
|
6350
|
-
unread === 0 ? /* @__PURE__ */
|
|
6356
|
+
/* @__PURE__ */ jsxs67("div", { className: "flex shrink-0 items-center justify-between px-5 py-3", children: [
|
|
6357
|
+
/* @__PURE__ */ jsx100("span", { className: "text-sm font-bold text-text-primary", children: "Notification center" }),
|
|
6358
|
+
/* @__PURE__ */ jsxs67("div", { className: "flex items-center gap-3", children: [
|
|
6359
|
+
unread === 0 ? /* @__PURE__ */ jsx100("span", { className: "text-sm font-medium text-text-tertiary", children: "All read" }) : /* @__PURE__ */ jsx100(
|
|
6351
6360
|
"button",
|
|
6352
6361
|
{
|
|
6353
6362
|
type: "button",
|
|
@@ -6356,19 +6365,19 @@ var NotificationBell = React80.forwardRef(
|
|
|
6356
6365
|
children: "Mark all read"
|
|
6357
6366
|
}
|
|
6358
6367
|
),
|
|
6359
|
-
onOpenSettings && /* @__PURE__ */
|
|
6368
|
+
onOpenSettings && /* @__PURE__ */ jsx100(
|
|
6360
6369
|
"button",
|
|
6361
6370
|
{
|
|
6362
6371
|
type: "button",
|
|
6363
6372
|
"aria-label": "Notification settings",
|
|
6364
6373
|
onClick: () => onOpenSettings(),
|
|
6365
6374
|
className: "flex size-6 items-center justify-center rounded-md text-text-tertiary transition-colors hover:bg-bg-surface hover:text-text-primary",
|
|
6366
|
-
children: /* @__PURE__ */
|
|
6375
|
+
children: /* @__PURE__ */ jsx100(Settings, { className: "size-[15px]", "aria-hidden": "true" })
|
|
6367
6376
|
}
|
|
6368
6377
|
)
|
|
6369
6378
|
] })
|
|
6370
6379
|
] }),
|
|
6371
|
-
/* @__PURE__ */
|
|
6380
|
+
/* @__PURE__ */ jsx100("div", { className: "min-h-0 flex-1 space-y-1.5 overflow-y-auto px-2 pb-2", children: rows.length === 0 ? /* @__PURE__ */ jsx100("p", { className: "px-3 py-12 text-center text-xs leading-relaxed text-text-tertiary", children: "Nothing yet. Everything addressed to you lands here." }) : rows.map((item) => /* @__PURE__ */ jsx100(
|
|
6372
6381
|
NotificationRow,
|
|
6373
6382
|
{
|
|
6374
6383
|
item,
|
|
@@ -6379,8 +6388,8 @@ var NotificationBell = React80.forwardRef(
|
|
|
6379
6388
|
},
|
|
6380
6389
|
item.id
|
|
6381
6390
|
)) }),
|
|
6382
|
-
footer != null && /* @__PURE__ */
|
|
6383
|
-
items.length > 0 && onOpenArchive && /* @__PURE__ */
|
|
6391
|
+
footer != null && /* @__PURE__ */ jsx100("div", { className: "shrink-0 px-5 py-2.5 text-xs text-text-tertiary", children: footer }),
|
|
6392
|
+
items.length > 0 && onOpenArchive && /* @__PURE__ */ jsx100(
|
|
6384
6393
|
"button",
|
|
6385
6394
|
{
|
|
6386
6395
|
type: "button",
|
|
@@ -6398,9 +6407,9 @@ var NotificationBell = React80.forwardRef(
|
|
|
6398
6407
|
NotificationBell.displayName = "NotificationBell";
|
|
6399
6408
|
|
|
6400
6409
|
// src/components/notification-center.tsx
|
|
6401
|
-
import * as
|
|
6402
|
-
import { Check as
|
|
6403
|
-
import { jsx as
|
|
6410
|
+
import * as React83 from "react";
|
|
6411
|
+
import { Check as Check11, Search as Search2 } from "lucide-react";
|
|
6412
|
+
import { jsx as jsx101, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
6404
6413
|
var chipBase = "rounded-lg px-3 py-1.5 text-sm font-medium transition-colors";
|
|
6405
6414
|
var chipOn = "bg-bg-brand-subtle text-text-brand";
|
|
6406
6415
|
var chipOff = "bg-bg-elevated text-text-secondary hover:text-text-primary";
|
|
@@ -6415,12 +6424,12 @@ function CenterRow({
|
|
|
6415
6424
|
const markable = Boolean(onMarkRead) && unread && item.cls !== "ephemeral";
|
|
6416
6425
|
const stamp = item.createdAt ? item.createdAt instanceof Date ? item.createdAt : new Date(item.createdAt) : null;
|
|
6417
6426
|
const age = stamp ? formatAge(stamp) : null;
|
|
6418
|
-
return /* @__PURE__ */
|
|
6419
|
-
/* @__PURE__ */
|
|
6420
|
-
/* @__PURE__ */
|
|
6421
|
-
/* @__PURE__ */
|
|
6422
|
-
(age || markable) && /* @__PURE__ */
|
|
6423
|
-
stamp && age && /* @__PURE__ */
|
|
6427
|
+
return /* @__PURE__ */ jsxs68("article", { className: "group rounded-lg bg-bg-elevated px-4 py-3", children: [
|
|
6428
|
+
/* @__PURE__ */ jsxs68("div", { className: "flex items-center gap-2", children: [
|
|
6429
|
+
/* @__PURE__ */ jsx101("span", { className: "text-xs font-semibold uppercase tracking-[0.09em] text-text-secondary", children: item.source }),
|
|
6430
|
+
/* @__PURE__ */ jsx101(Badge, { variant: severityBadgeVariant(item.severity), children: severityLabels[item.severity] }),
|
|
6431
|
+
(age || markable) && /* @__PURE__ */ jsxs68("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [
|
|
6432
|
+
stamp && age && /* @__PURE__ */ jsx101(
|
|
6424
6433
|
"time",
|
|
6425
6434
|
{
|
|
6426
6435
|
dateTime: toDateTimeAttribute(stamp),
|
|
@@ -6428,10 +6437,10 @@ function CenterRow({
|
|
|
6428
6437
|
children: age
|
|
6429
6438
|
}
|
|
6430
6439
|
),
|
|
6431
|
-
markable && /* @__PURE__ */
|
|
6440
|
+
markable && /* @__PURE__ */ jsx101(MarkReadButton, { title: item.title, onClick: () => onMarkRead(item.id) })
|
|
6432
6441
|
] })
|
|
6433
6442
|
] }),
|
|
6434
|
-
/* @__PURE__ */
|
|
6443
|
+
/* @__PURE__ */ jsx101(
|
|
6435
6444
|
"button",
|
|
6436
6445
|
{
|
|
6437
6446
|
type: "button",
|
|
@@ -6443,13 +6452,13 @@ function CenterRow({
|
|
|
6443
6452
|
children: item.title
|
|
6444
6453
|
}
|
|
6445
6454
|
),
|
|
6446
|
-
item.body && /* @__PURE__ */
|
|
6447
|
-
(item.receipt || item.deepLink) && /* @__PURE__ */
|
|
6448
|
-
item.receipt && /* @__PURE__ */
|
|
6449
|
-
/* @__PURE__ */
|
|
6455
|
+
item.body && /* @__PURE__ */ jsx101("p", { className: "mt-0.5 text-sm leading-snug text-text-secondary", children: item.body }),
|
|
6456
|
+
(item.receipt || item.deepLink) && /* @__PURE__ */ jsxs68("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-1.5", children: [
|
|
6457
|
+
item.receipt && /* @__PURE__ */ jsxs68("span", { className: "inline-flex items-center gap-1.5 text-sm text-text-tertiary", children: [
|
|
6458
|
+
/* @__PURE__ */ jsx101(Check11, { className: "size-3 shrink-0 text-text-success", "aria-hidden": "true" }),
|
|
6450
6459
|
item.receipt
|
|
6451
6460
|
] }),
|
|
6452
|
-
item.deepLink && /* @__PURE__ */
|
|
6461
|
+
item.deepLink && /* @__PURE__ */ jsx101(
|
|
6453
6462
|
DeepLinkControl,
|
|
6454
6463
|
{
|
|
6455
6464
|
link: item.deepLink,
|
|
@@ -6464,7 +6473,7 @@ function CenterRow({
|
|
|
6464
6473
|
] })
|
|
6465
6474
|
] });
|
|
6466
6475
|
}
|
|
6467
|
-
var NotificationCenter =
|
|
6476
|
+
var NotificationCenter = React83.forwardRef(
|
|
6468
6477
|
({
|
|
6469
6478
|
items,
|
|
6470
6479
|
header = true,
|
|
@@ -6481,16 +6490,16 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6481
6490
|
formatAge,
|
|
6482
6491
|
className
|
|
6483
6492
|
}, ref) => {
|
|
6484
|
-
const [status, setStatus] =
|
|
6485
|
-
const [source, setSource] =
|
|
6486
|
-
const [product, setProduct] =
|
|
6487
|
-
const [query, setQuery] =
|
|
6488
|
-
const [limit, setLimit] =
|
|
6489
|
-
const age =
|
|
6493
|
+
const [status, setStatus] = React83.useState("all");
|
|
6494
|
+
const [source, setSource] = React83.useState("all");
|
|
6495
|
+
const [product, setProduct] = React83.useState("all");
|
|
6496
|
+
const [query, setQuery] = React83.useState("");
|
|
6497
|
+
const [limit, setLimit] = React83.useState(pageSize);
|
|
6498
|
+
const age = React83.useCallback(
|
|
6490
6499
|
(createdAt) => formatAge ? formatAge(createdAt) : formatRelativeAge(createdAt),
|
|
6491
6500
|
[formatAge]
|
|
6492
6501
|
);
|
|
6493
|
-
const sourceChips =
|
|
6502
|
+
const sourceChips = React83.useMemo(
|
|
6494
6503
|
() => sources ?? Array.from(new Set(items.map((n) => n.source))),
|
|
6495
6504
|
[sources, items]
|
|
6496
6505
|
);
|
|
@@ -6501,13 +6510,13 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6501
6510
|
const shown = matched.slice(0, limit);
|
|
6502
6511
|
const remaining = matched.length - shown.length;
|
|
6503
6512
|
const filtering = q !== "" || status !== "all" || source !== "all" || product !== "all";
|
|
6504
|
-
return /* @__PURE__ */
|
|
6505
|
-
(header || onMarkAllRead) && /* @__PURE__ */
|
|
6506
|
-
header && /* @__PURE__ */
|
|
6507
|
-
/* @__PURE__ */
|
|
6508
|
-
description && /* @__PURE__ */
|
|
6513
|
+
return /* @__PURE__ */ jsxs68("div", { ref, className: cn("mx-auto max-w-[560px]", className), children: [
|
|
6514
|
+
(header || onMarkAllRead) && /* @__PURE__ */ jsxs68("div", { className: cn("mb-4 flex items-start gap-4", !header && "justify-end"), children: [
|
|
6515
|
+
header && /* @__PURE__ */ jsxs68("div", { className: "min-w-0 flex-1", children: [
|
|
6516
|
+
/* @__PURE__ */ jsx101("h1", { className: "mb-1.5 text-2xl font-semibold tracking-tight text-text-primary", children: title }),
|
|
6517
|
+
description && /* @__PURE__ */ jsx101("p", { className: "text-sm text-text-tertiary", children: description })
|
|
6509
6518
|
] }),
|
|
6510
|
-
onMarkAllRead && /* @__PURE__ */
|
|
6519
|
+
onMarkAllRead && /* @__PURE__ */ jsx101(
|
|
6511
6520
|
"button",
|
|
6512
6521
|
{
|
|
6513
6522
|
type: "button",
|
|
@@ -6517,9 +6526,9 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6517
6526
|
}
|
|
6518
6527
|
)
|
|
6519
6528
|
] }),
|
|
6520
|
-
searchable && /* @__PURE__ */
|
|
6521
|
-
/* @__PURE__ */
|
|
6522
|
-
/* @__PURE__ */
|
|
6529
|
+
searchable && /* @__PURE__ */ jsxs68("div", { className: "mb-3 flex items-center gap-2 rounded-lg bg-bg-elevated px-3 py-2", children: [
|
|
6530
|
+
/* @__PURE__ */ jsx101(Search2, { className: "size-4 shrink-0 text-text-tertiary", "aria-hidden": "true" }),
|
|
6531
|
+
/* @__PURE__ */ jsx101(
|
|
6523
6532
|
"input",
|
|
6524
6533
|
{
|
|
6525
6534
|
type: "text",
|
|
@@ -6530,8 +6539,8 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6530
6539
|
}
|
|
6531
6540
|
)
|
|
6532
6541
|
] }),
|
|
6533
|
-
/* @__PURE__ */
|
|
6534
|
-
/* @__PURE__ */
|
|
6542
|
+
/* @__PURE__ */ jsxs68("div", { className: "mb-2 flex flex-wrap gap-1.5", children: [
|
|
6543
|
+
/* @__PURE__ */ jsx101(
|
|
6535
6544
|
"button",
|
|
6536
6545
|
{
|
|
6537
6546
|
type: "button",
|
|
@@ -6540,7 +6549,7 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6540
6549
|
children: "All"
|
|
6541
6550
|
}
|
|
6542
6551
|
),
|
|
6543
|
-
/* @__PURE__ */
|
|
6552
|
+
/* @__PURE__ */ jsx101(
|
|
6544
6553
|
"button",
|
|
6545
6554
|
{
|
|
6546
6555
|
type: "button",
|
|
@@ -6550,8 +6559,8 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6550
6559
|
}
|
|
6551
6560
|
)
|
|
6552
6561
|
] }),
|
|
6553
|
-
/* @__PURE__ */
|
|
6554
|
-
/* @__PURE__ */
|
|
6562
|
+
/* @__PURE__ */ jsxs68("div", { className: "mb-2 flex flex-wrap gap-1.5", children: [
|
|
6563
|
+
/* @__PURE__ */ jsx101(
|
|
6555
6564
|
"button",
|
|
6556
6565
|
{
|
|
6557
6566
|
type: "button",
|
|
@@ -6560,7 +6569,7 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6560
6569
|
children: "All sources"
|
|
6561
6570
|
}
|
|
6562
6571
|
),
|
|
6563
|
-
sourceChips.map((s) => /* @__PURE__ */
|
|
6572
|
+
sourceChips.map((s) => /* @__PURE__ */ jsx101(
|
|
6564
6573
|
"button",
|
|
6565
6574
|
{
|
|
6566
6575
|
type: "button",
|
|
@@ -6571,8 +6580,8 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6571
6580
|
s
|
|
6572
6581
|
))
|
|
6573
6582
|
] }),
|
|
6574
|
-
products && products.length > 0 && /* @__PURE__ */
|
|
6575
|
-
/* @__PURE__ */
|
|
6583
|
+
products && products.length > 0 && /* @__PURE__ */ jsxs68("div", { className: "mb-4 flex flex-wrap gap-1.5", children: [
|
|
6584
|
+
/* @__PURE__ */ jsx101(
|
|
6576
6585
|
"button",
|
|
6577
6586
|
{
|
|
6578
6587
|
type: "button",
|
|
@@ -6581,7 +6590,7 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6581
6590
|
children: "All products"
|
|
6582
6591
|
}
|
|
6583
6592
|
),
|
|
6584
|
-
products.map((p) => /* @__PURE__ */
|
|
6593
|
+
products.map((p) => /* @__PURE__ */ jsx101(
|
|
6585
6594
|
"button",
|
|
6586
6595
|
{
|
|
6587
6596
|
type: "button",
|
|
@@ -6592,8 +6601,8 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6592
6601
|
p.id
|
|
6593
6602
|
))
|
|
6594
6603
|
] }),
|
|
6595
|
-
shown.length === 0 ? /* @__PURE__ */
|
|
6596
|
-
shown.map((item) => /* @__PURE__ */
|
|
6604
|
+
shown.length === 0 ? /* @__PURE__ */ jsx101("p", { className: "rounded-xl bg-bg-elevated px-4 py-10 text-center text-sm leading-relaxed text-text-tertiary", children: filtering ? "Nothing matches." : "Nothing here yet. Everything addressed to you lands here." }) : /* @__PURE__ */ jsxs68("div", { className: "flex flex-col gap-1.5", children: [
|
|
6605
|
+
shown.map((item) => /* @__PURE__ */ jsx101(
|
|
6597
6606
|
CenterRow,
|
|
6598
6607
|
{
|
|
6599
6608
|
item,
|
|
@@ -6604,7 +6613,7 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6604
6613
|
},
|
|
6605
6614
|
item.id
|
|
6606
6615
|
)),
|
|
6607
|
-
remaining > 0 && /* @__PURE__ */
|
|
6616
|
+
remaining > 0 && /* @__PURE__ */ jsxs68(
|
|
6608
6617
|
"button",
|
|
6609
6618
|
{
|
|
6610
6619
|
type: "button",
|
|
@@ -6624,9 +6633,9 @@ var NotificationCenter = React81.forwardRef(
|
|
|
6624
6633
|
NotificationCenter.displayName = "NotificationCenter";
|
|
6625
6634
|
|
|
6626
6635
|
// src/components/notification-settings.tsx
|
|
6627
|
-
import * as
|
|
6636
|
+
import * as React84 from "react";
|
|
6628
6637
|
import { Moon as Moon2, Plus as Plus3, Volume2 } from "lucide-react";
|
|
6629
|
-
import { Fragment as Fragment14, jsx as
|
|
6638
|
+
import { Fragment as Fragment14, jsx as jsx102, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
6630
6639
|
var THRESHOLDS = [
|
|
6631
6640
|
["everything", "Everything"],
|
|
6632
6641
|
["important", "Important"],
|
|
@@ -6638,13 +6647,13 @@ function ThresholdControl({
|
|
|
6638
6647
|
value,
|
|
6639
6648
|
onChange
|
|
6640
6649
|
}) {
|
|
6641
|
-
return /* @__PURE__ */
|
|
6650
|
+
return /* @__PURE__ */ jsx102(
|
|
6642
6651
|
"span",
|
|
6643
6652
|
{
|
|
6644
6653
|
role: "group",
|
|
6645
6654
|
"aria-label": `Interrupt me for ${label}`,
|
|
6646
6655
|
className: "inline-flex shrink-0 rounded-lg border border-border-subtle bg-transparent p-0.5",
|
|
6647
|
-
children: THRESHOLDS.map(([threshold, text]) => /* @__PURE__ */
|
|
6656
|
+
children: THRESHOLDS.map(([threshold, text]) => /* @__PURE__ */ jsx102(
|
|
6648
6657
|
"button",
|
|
6649
6658
|
{
|
|
6650
6659
|
type: "button",
|
|
@@ -6661,7 +6670,7 @@ function ThresholdControl({
|
|
|
6661
6670
|
}
|
|
6662
6671
|
);
|
|
6663
6672
|
}
|
|
6664
|
-
var NotificationSettings =
|
|
6673
|
+
var NotificationSettings = React84.forwardRef(
|
|
6665
6674
|
({
|
|
6666
6675
|
subscriptions,
|
|
6667
6676
|
value,
|
|
@@ -6674,7 +6683,7 @@ var NotificationSettings = React82.forwardRef(
|
|
|
6674
6683
|
pushSlot,
|
|
6675
6684
|
className
|
|
6676
6685
|
}, ref) => {
|
|
6677
|
-
const [tab, setTab] =
|
|
6686
|
+
const [tab, setTab] = React84.useState(DEFAULT_KEY);
|
|
6678
6687
|
const isDefault = tab === DEFAULT_KEY;
|
|
6679
6688
|
const defaults = value[DEFAULT_KEY] ?? { thresholds: {} };
|
|
6680
6689
|
const customized = !isDefault && Object.prototype.hasOwnProperty.call(value, tab);
|
|
@@ -6694,15 +6703,15 @@ var NotificationSettings = React82.forwardRef(
|
|
|
6694
6703
|
const scopeGroup = (scope) => {
|
|
6695
6704
|
const rows = subscriptions.filter((s) => s.scope === scope);
|
|
6696
6705
|
if (rows.length === 0) return null;
|
|
6697
|
-
return /* @__PURE__ */
|
|
6698
|
-
/* @__PURE__ */
|
|
6699
|
-
/* @__PURE__ */
|
|
6706
|
+
return /* @__PURE__ */ jsxs69("div", { children: [
|
|
6707
|
+
/* @__PURE__ */ jsx102("p", { className: "mb-1.5 px-0.5 text-xs font-bold uppercase tracking-wider text-text-tertiary", children: scope === "product" ? "This product" : "Organization" }),
|
|
6708
|
+
/* @__PURE__ */ jsx102("div", { className: "space-y-2", children: rows.map((sub) => /* @__PURE__ */ jsxs69(
|
|
6700
6709
|
"div",
|
|
6701
6710
|
{
|
|
6702
6711
|
className: "flex items-center gap-4 rounded-xl bg-bg-elevated px-4 py-3",
|
|
6703
6712
|
children: [
|
|
6704
|
-
/* @__PURE__ */
|
|
6705
|
-
/* @__PURE__ */
|
|
6713
|
+
/* @__PURE__ */ jsx102("p", { className: "min-w-0 flex-1 text-sm font-semibold text-text-primary", children: sub.name }),
|
|
6714
|
+
/* @__PURE__ */ jsx102(
|
|
6706
6715
|
ThresholdControl,
|
|
6707
6716
|
{
|
|
6708
6717
|
label: sub.name,
|
|
@@ -6716,10 +6725,10 @@ var NotificationSettings = React82.forwardRef(
|
|
|
6716
6725
|
)) })
|
|
6717
6726
|
] }, scope);
|
|
6718
6727
|
};
|
|
6719
|
-
return /* @__PURE__ */
|
|
6720
|
-
products && products.length > 0 && /* @__PURE__ */
|
|
6721
|
-
/* @__PURE__ */
|
|
6722
|
-
/* @__PURE__ */
|
|
6728
|
+
return /* @__PURE__ */ jsxs69("div", { ref, className: cn("space-y-5", className), children: [
|
|
6729
|
+
products && products.length > 0 && /* @__PURE__ */ jsxs69("div", { children: [
|
|
6730
|
+
/* @__PURE__ */ jsx102("p", { className: "mb-2 px-0.5 text-xs font-bold uppercase tracking-wider text-text-tertiary", children: "Preferences for" }),
|
|
6731
|
+
/* @__PURE__ */ jsx102("div", { className: "flex flex-wrap gap-2", children: [{ id: DEFAULT_KEY, label: "Default" }, ...products].map((t) => /* @__PURE__ */ jsx102(
|
|
6723
6732
|
"button",
|
|
6724
6733
|
{
|
|
6725
6734
|
type: "button",
|
|
@@ -6734,26 +6743,26 @@ var NotificationSettings = React82.forwardRef(
|
|
|
6734
6743
|
t.id
|
|
6735
6744
|
)) })
|
|
6736
6745
|
] }),
|
|
6737
|
-
isDefault ? /* @__PURE__ */
|
|
6738
|
-
/* @__PURE__ */
|
|
6739
|
-
/* @__PURE__ */
|
|
6740
|
-
/* @__PURE__ */
|
|
6741
|
-
/* @__PURE__ */
|
|
6742
|
-
pushSlot ?? /* @__PURE__ */
|
|
6746
|
+
isDefault ? /* @__PURE__ */ jsxs69(Fragment14, { children: [
|
|
6747
|
+
/* @__PURE__ */ jsx102("p", { className: "text-sm leading-relaxed text-text-secondary", children: "Your defaults, applied to every product unless you customize one. Everything addressed to you always lands in the in-app record; that cannot be turned off." }),
|
|
6748
|
+
/* @__PURE__ */ jsxs69(Card, { className: "border-none bg-bg-elevated p-5", children: [
|
|
6749
|
+
/* @__PURE__ */ jsx102("p", { className: "mb-1.5 text-xs font-bold uppercase tracking-wide text-text-tertiary", children: "Push to" }),
|
|
6750
|
+
/* @__PURE__ */ jsx102("p", { className: "mb-3 text-sm leading-relaxed text-text-secondary", children: "Forward notifications beyond the in-app record to a connected integration." }),
|
|
6751
|
+
pushSlot ?? /* @__PURE__ */ jsx102("div", { className: "rounded-lg bg-bg-surface px-4 py-6 text-center", children: /* @__PURE__ */ jsx102("p", { className: "text-sm text-text-tertiary", children: "No integrations connected." }) })
|
|
6743
6752
|
] }),
|
|
6744
|
-
mutes.length > 0 && /* @__PURE__ */
|
|
6745
|
-
/* @__PURE__ */
|
|
6746
|
-
/* @__PURE__ */
|
|
6747
|
-
/* @__PURE__ */
|
|
6748
|
-
/* @__PURE__ */
|
|
6749
|
-
/* @__PURE__ */
|
|
6750
|
-
/* @__PURE__ */
|
|
6753
|
+
mutes.length > 0 && /* @__PURE__ */ jsxs69("div", { children: [
|
|
6754
|
+
/* @__PURE__ */ jsx102("p", { className: "mb-1.5 px-0.5 text-xs font-bold uppercase tracking-wider text-text-tertiary", children: "Muted" }),
|
|
6755
|
+
/* @__PURE__ */ jsx102(Card, { className: "border-none bg-bg-elevated p-2", children: mutes.map((m) => /* @__PURE__ */ jsxs69("div", { className: "flex items-center gap-3 rounded-lg px-3 py-2.5", children: [
|
|
6756
|
+
/* @__PURE__ */ jsx102(Moon2, { className: "size-4 shrink-0 text-text-tertiary", "aria-hidden": "true" }),
|
|
6757
|
+
/* @__PURE__ */ jsxs69("div", { className: "min-w-0 flex-1", children: [
|
|
6758
|
+
/* @__PURE__ */ jsx102("p", { className: "text-sm font-medium text-text-primary", children: m.source }),
|
|
6759
|
+
/* @__PURE__ */ jsxs69("p", { className: "text-sm text-text-tertiary", children: [
|
|
6751
6760
|
"Muted \u2014 ",
|
|
6752
6761
|
m.label,
|
|
6753
6762
|
". Critical still comes through."
|
|
6754
6763
|
] })
|
|
6755
6764
|
] }),
|
|
6756
|
-
/* @__PURE__ */
|
|
6765
|
+
/* @__PURE__ */ jsx102(
|
|
6757
6766
|
"button",
|
|
6758
6767
|
{
|
|
6759
6768
|
type: "button",
|
|
@@ -6766,13 +6775,13 @@ var NotificationSettings = React82.forwardRef(
|
|
|
6766
6775
|
] }),
|
|
6767
6776
|
scopeGroup("product"),
|
|
6768
6777
|
scopeGroup("org"),
|
|
6769
|
-
onSoundEnabledChange && /* @__PURE__ */
|
|
6770
|
-
/* @__PURE__ */
|
|
6771
|
-
/* @__PURE__ */
|
|
6772
|
-
/* @__PURE__ */
|
|
6773
|
-
/* @__PURE__ */
|
|
6778
|
+
onSoundEnabledChange && /* @__PURE__ */ jsx102(Card, { className: "border-none bg-bg-elevated p-4", children: /* @__PURE__ */ jsxs69("div", { className: "flex items-center gap-3", children: [
|
|
6779
|
+
/* @__PURE__ */ jsx102(Volume2, { className: "size-4 text-text-tertiary", "aria-hidden": "true" }),
|
|
6780
|
+
/* @__PURE__ */ jsxs69("div", { className: "flex-1", children: [
|
|
6781
|
+
/* @__PURE__ */ jsx102("p", { className: "text-sm font-medium text-text-primary", children: "Notification sound" }),
|
|
6782
|
+
/* @__PURE__ */ jsx102("p", { className: "text-sm text-text-tertiary", children: "Play a tone when a notification arrives. Critical always chimes." })
|
|
6774
6783
|
] }),
|
|
6775
|
-
/* @__PURE__ */
|
|
6784
|
+
/* @__PURE__ */ jsx102(
|
|
6776
6785
|
Switch,
|
|
6777
6786
|
{
|
|
6778
6787
|
checked: soundEnabled ?? false,
|
|
@@ -6781,35 +6790,35 @@ var NotificationSettings = React82.forwardRef(
|
|
|
6781
6790
|
}
|
|
6782
6791
|
)
|
|
6783
6792
|
] }) })
|
|
6784
|
-
] }) : !customized ? /* @__PURE__ */
|
|
6785
|
-
/* @__PURE__ */
|
|
6793
|
+
] }) : !customized ? /* @__PURE__ */ jsxs69(Card, { className: "border-none bg-bg-elevated p-8 text-center", children: [
|
|
6794
|
+
/* @__PURE__ */ jsxs69("p", { className: "text-sm font-semibold text-text-primary", children: [
|
|
6786
6795
|
productLabel,
|
|
6787
6796
|
" follows your Default preferences."
|
|
6788
6797
|
] }),
|
|
6789
|
-
/* @__PURE__ */
|
|
6790
|
-
/* @__PURE__ */
|
|
6798
|
+
/* @__PURE__ */ jsx102("p", { className: "mx-auto mt-1.5 max-w-[360px] text-sm leading-relaxed text-text-tertiary", children: "Interrupt thresholds, sound and forwarding all come from Default. Opt in to give this product its own interrupt thresholds." }),
|
|
6799
|
+
/* @__PURE__ */ jsxs69(
|
|
6791
6800
|
"button",
|
|
6792
6801
|
{
|
|
6793
6802
|
type: "button",
|
|
6794
6803
|
onClick: customize,
|
|
6795
6804
|
className: "mt-5 inline-flex items-center gap-1.5 rounded-lg bg-bg-brand px-3.5 py-2 text-sm font-semibold text-text-on-brand transition-colors hover:bg-bg-brand-hover",
|
|
6796
6805
|
children: [
|
|
6797
|
-
/* @__PURE__ */
|
|
6806
|
+
/* @__PURE__ */ jsx102(Plus3, { className: "size-4", "aria-hidden": "true" }),
|
|
6798
6807
|
" Customize for ",
|
|
6799
6808
|
productLabel
|
|
6800
6809
|
]
|
|
6801
6810
|
}
|
|
6802
6811
|
)
|
|
6803
|
-
] }) : /* @__PURE__ */
|
|
6804
|
-
/* @__PURE__ */
|
|
6805
|
-
/* @__PURE__ */
|
|
6806
|
-
/* @__PURE__ */
|
|
6812
|
+
] }) : /* @__PURE__ */ jsxs69(Fragment14, { children: [
|
|
6813
|
+
/* @__PURE__ */ jsx102(Card, { className: "border-none bg-bg-brand-subtle p-3.5", children: /* @__PURE__ */ jsxs69("div", { className: "flex items-center gap-3", children: [
|
|
6814
|
+
/* @__PURE__ */ jsxs69("div", { className: "min-w-0 flex-1", children: [
|
|
6815
|
+
/* @__PURE__ */ jsxs69("p", { className: "text-sm font-semibold text-text-brand", children: [
|
|
6807
6816
|
"Custom preferences for ",
|
|
6808
6817
|
productLabel
|
|
6809
6818
|
] }),
|
|
6810
|
-
/* @__PURE__ */
|
|
6819
|
+
/* @__PURE__ */ jsx102("p", { className: "text-sm leading-relaxed text-text-secondary", children: "Only the interrupt thresholds below differ. Sound and forwarding follow Default." })
|
|
6811
6820
|
] }),
|
|
6812
|
-
/* @__PURE__ */
|
|
6821
|
+
/* @__PURE__ */ jsx102(
|
|
6813
6822
|
"button",
|
|
6814
6823
|
{
|
|
6815
6824
|
type: "button",
|
|
@@ -6827,14 +6836,14 @@ var NotificationSettings = React82.forwardRef(
|
|
|
6827
6836
|
NotificationSettings.displayName = "NotificationSettings";
|
|
6828
6837
|
|
|
6829
6838
|
// src/components/notification-toast.tsx
|
|
6830
|
-
import * as
|
|
6839
|
+
import * as React85 from "react";
|
|
6831
6840
|
import { X as X5 } from "lucide-react";
|
|
6832
|
-
import { jsx as
|
|
6841
|
+
import { jsx as jsx103, jsxs as jsxs70 } from "react/jsx-runtime";
|
|
6833
6842
|
var chipBase2 = "rounded-lg px-2.5 py-1 text-sm font-medium transition-colors";
|
|
6834
6843
|
var chipPrimary = "bg-bg-brand text-text-on-brand hover:bg-bg-brand-hover";
|
|
6835
6844
|
var chipDestructive = "bg-bg-elevated text-text-danger hover:bg-bg-surface";
|
|
6836
6845
|
var linkAction = "text-sm font-semibold text-text-brand transition-colors hover:text-text-primary";
|
|
6837
|
-
var NotificationToast =
|
|
6846
|
+
var NotificationToast = React85.forwardRef(
|
|
6838
6847
|
({
|
|
6839
6848
|
item,
|
|
6840
6849
|
showSource = true,
|
|
@@ -6851,9 +6860,9 @@ var NotificationToast = React83.forwardRef(
|
|
|
6851
6860
|
const actions = item.actions ?? [];
|
|
6852
6861
|
const percent = progress === void 0 || !Number.isFinite(progress) ? void 0 : Math.min(100, Math.max(0, progress));
|
|
6853
6862
|
const progressLine = progressLabel === void 0 && percent !== void 0 ? `live, ${Math.round(percent)}%` : progressLabel;
|
|
6854
|
-
const barId =
|
|
6863
|
+
const barId = React85.useId();
|
|
6855
6864
|
const hasProgressLine = progressLine !== null && progressLine !== void 0;
|
|
6856
|
-
return /* @__PURE__ */
|
|
6865
|
+
return /* @__PURE__ */ jsxs70(
|
|
6857
6866
|
"div",
|
|
6858
6867
|
{
|
|
6859
6868
|
ref,
|
|
@@ -6864,24 +6873,24 @@ var NotificationToast = React83.forwardRef(
|
|
|
6864
6873
|
className
|
|
6865
6874
|
),
|
|
6866
6875
|
children: [
|
|
6867
|
-
/* @__PURE__ */
|
|
6868
|
-
showSource && /* @__PURE__ */
|
|
6869
|
-
/* @__PURE__ */
|
|
6870
|
-
(overflow || onDismiss) && /* @__PURE__ */
|
|
6876
|
+
/* @__PURE__ */ jsxs70("div", { className: "flex items-center gap-2", children: [
|
|
6877
|
+
showSource && /* @__PURE__ */ jsx103("span", { className: "text-xs font-semibold uppercase tracking-[0.09em] text-text-secondary", children: item.source }),
|
|
6878
|
+
/* @__PURE__ */ jsx103(Badge, { variant: severityBadgeVariant(item.severity), children: severityLabels[item.severity] }),
|
|
6879
|
+
(overflow || onDismiss) && /* @__PURE__ */ jsxs70("span", { className: "-mr-1 ml-auto flex shrink-0 items-center gap-1", children: [
|
|
6871
6880
|
overflow,
|
|
6872
|
-
onDismiss && /* @__PURE__ */
|
|
6881
|
+
onDismiss && /* @__PURE__ */ jsx103(
|
|
6873
6882
|
"button",
|
|
6874
6883
|
{
|
|
6875
6884
|
type: "button",
|
|
6876
6885
|
"aria-label": dismissLabel,
|
|
6877
6886
|
onClick: () => onDismiss(item),
|
|
6878
6887
|
className: "flex size-5 shrink-0 items-center justify-center rounded-md text-text-tertiary transition-colors hover:bg-bg-surface hover:text-text-primary",
|
|
6879
|
-
children: /* @__PURE__ */
|
|
6888
|
+
children: /* @__PURE__ */ jsx103(X5, { className: "size-3.5", "aria-hidden": "true" })
|
|
6880
6889
|
}
|
|
6881
6890
|
)
|
|
6882
6891
|
] })
|
|
6883
6892
|
] }),
|
|
6884
|
-
onItemClick ? /* @__PURE__ */
|
|
6893
|
+
onItemClick ? /* @__PURE__ */ jsx103(
|
|
6885
6894
|
"button",
|
|
6886
6895
|
{
|
|
6887
6896
|
type: "button",
|
|
@@ -6889,15 +6898,15 @@ var NotificationToast = React83.forwardRef(
|
|
|
6889
6898
|
className: "mt-1 block text-left text-sm font-semibold leading-snug text-text-primary underline-offset-2 hover:underline",
|
|
6890
6899
|
children: item.title
|
|
6891
6900
|
}
|
|
6892
|
-
) : /* @__PURE__ */
|
|
6893
|
-
item.body && /* @__PURE__ */
|
|
6894
|
-
note && /* @__PURE__ */
|
|
6901
|
+
) : /* @__PURE__ */ jsx103("p", { className: "mt-1 text-sm font-semibold leading-snug text-text-primary", children: item.title }),
|
|
6902
|
+
item.body && /* @__PURE__ */ jsx103("p", { className: "mt-0.5 text-sm leading-snug text-text-secondary", children: item.body }),
|
|
6903
|
+
note && /* @__PURE__ */ jsx103("p", { className: "mt-1.5 text-xs font-medium text-text-warning", children: note }),
|
|
6895
6904
|
percent !== void 0 && // The card is a `role="status"`, which implies `aria-atomic` — every tick of the bar would
|
|
6896
6905
|
// otherwise re-announce the whole card. `aria-live="off"` on the subtree that moves is the
|
|
6897
6906
|
// one cheap mitigation: the bar stays in the accessibility tree to be read on demand, it
|
|
6898
6907
|
// just stops interrupting.
|
|
6899
|
-
/* @__PURE__ */
|
|
6900
|
-
/* @__PURE__ */
|
|
6908
|
+
/* @__PURE__ */ jsxs70("div", { className: "mt-2", "aria-live": "off", children: [
|
|
6909
|
+
/* @__PURE__ */ jsx103(
|
|
6901
6910
|
Progress,
|
|
6902
6911
|
{
|
|
6903
6912
|
value: percent,
|
|
@@ -6906,11 +6915,11 @@ var NotificationToast = React83.forwardRef(
|
|
|
6906
6915
|
"aria-label": hasProgressLine ? void 0 : "Progress"
|
|
6907
6916
|
}
|
|
6908
6917
|
),
|
|
6909
|
-
hasProgressLine && /* @__PURE__ */
|
|
6918
|
+
hasProgressLine && /* @__PURE__ */ jsx103("p", { id: barId, className: "mt-0.5 text-xs text-text-secondary", children: progressLine })
|
|
6910
6919
|
] }),
|
|
6911
|
-
actions.length > 0 && /* @__PURE__ */
|
|
6920
|
+
actions.length > 0 && /* @__PURE__ */ jsx103("div", { className: "mt-2.5 flex flex-wrap items-center gap-2", children: actions.map((action) => {
|
|
6912
6921
|
const variant = action.variant ?? "link";
|
|
6913
|
-
return /* @__PURE__ */
|
|
6922
|
+
return /* @__PURE__ */ jsx103(
|
|
6914
6923
|
"button",
|
|
6915
6924
|
{
|
|
6916
6925
|
type: "button",
|
|
@@ -6929,15 +6938,15 @@ var NotificationToast = React83.forwardRef(
|
|
|
6929
6938
|
NotificationToast.displayName = "NotificationToast";
|
|
6930
6939
|
|
|
6931
6940
|
// src/components/notification-toaster.tsx
|
|
6932
|
-
import * as
|
|
6933
|
-
import { jsx as
|
|
6941
|
+
import * as React86 from "react";
|
|
6942
|
+
import { jsx as jsx104 } from "react/jsx-runtime";
|
|
6934
6943
|
var positions = {
|
|
6935
6944
|
"bottom-right": "bottom-6 right-6 flex-col",
|
|
6936
6945
|
"bottom-left": "bottom-6 left-6 flex-col",
|
|
6937
6946
|
"top-right": "top-6 right-6 flex-col-reverse",
|
|
6938
6947
|
"top-left": "top-6 left-6 flex-col-reverse"
|
|
6939
6948
|
};
|
|
6940
|
-
var NotificationToaster =
|
|
6949
|
+
var NotificationToaster = React86.forwardRef(
|
|
6941
6950
|
({
|
|
6942
6951
|
items,
|
|
6943
6952
|
dwell,
|
|
@@ -6954,15 +6963,15 @@ var NotificationToaster = React84.forwardRef(
|
|
|
6954
6963
|
className
|
|
6955
6964
|
}, ref) => {
|
|
6956
6965
|
const shown = items.slice(0, max);
|
|
6957
|
-
const [paused, setPaused] =
|
|
6958
|
-
const onDismissRef =
|
|
6966
|
+
const [paused, setPaused] = React86.useState(false);
|
|
6967
|
+
const onDismissRef = React86.useRef(onDismiss);
|
|
6959
6968
|
onDismissRef.current = onDismiss;
|
|
6960
6969
|
const fyiDwell = dwell?.fyi;
|
|
6961
6970
|
const importantDwell = dwell?.important;
|
|
6962
6971
|
const criticalDwell = dwell?.critical;
|
|
6963
|
-
const remaining =
|
|
6972
|
+
const remaining = React86.useRef(/* @__PURE__ */ new Map());
|
|
6964
6973
|
const liveIds = shown.map((item) => `${item.id}:${item.severity}`).join(" ");
|
|
6965
|
-
|
|
6974
|
+
React86.useEffect(() => {
|
|
6966
6975
|
const owedById = remaining.current;
|
|
6967
6976
|
const dwellSeconds = {
|
|
6968
6977
|
fyi: fyiDwell ?? TOAST_DWELL.fyi,
|
|
@@ -7003,7 +7012,7 @@ var NotificationToaster = React84.forwardRef(
|
|
|
7003
7012
|
};
|
|
7004
7013
|
}, [liveIds, paused, fyiDwell, importantDwell, criticalDwell]);
|
|
7005
7014
|
if (shown.length === 0) return null;
|
|
7006
|
-
return /* @__PURE__ */
|
|
7015
|
+
return /* @__PURE__ */ jsx104(
|
|
7007
7016
|
"div",
|
|
7008
7017
|
{
|
|
7009
7018
|
ref,
|
|
@@ -7016,7 +7025,7 @@ var NotificationToaster = React84.forwardRef(
|
|
|
7016
7025
|
positions[position],
|
|
7017
7026
|
className
|
|
7018
7027
|
),
|
|
7019
|
-
children: shown.map((item, i) => /* @__PURE__ */
|
|
7028
|
+
children: shown.map((item, i) => /* @__PURE__ */ jsx104("div", { className: "pointer-events-auto", children: /* @__PURE__ */ jsx104(
|
|
7020
7029
|
NotificationToast,
|
|
7021
7030
|
{
|
|
7022
7031
|
item,
|
|
@@ -7290,7 +7299,7 @@ var COUNTRY_OPTIONS = [
|
|
|
7290
7299
|
];
|
|
7291
7300
|
|
|
7292
7301
|
// src/components/organization-onboarding-form.tsx
|
|
7293
|
-
import * as
|
|
7302
|
+
import * as React87 from "react";
|
|
7294
7303
|
|
|
7295
7304
|
// src/lib/auth-surface.ts
|
|
7296
7305
|
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 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]";
|
|
@@ -7298,7 +7307,7 @@ var AUTH_QUIET_BUTTON = "flex h-[46px] w-full items-center justify-center gap-[1
|
|
|
7298
7307
|
var AUTH_BUTTON_SHADOW = "var(--auth-btn-shadow)";
|
|
7299
7308
|
|
|
7300
7309
|
// src/components/organization-onboarding-form.tsx
|
|
7301
|
-
import { jsx as
|
|
7310
|
+
import { jsx as jsx105, jsxs as jsxs71 } from "react/jsx-runtime";
|
|
7302
7311
|
var CONTROLLER_SHARE_PCT = 50;
|
|
7303
7312
|
var MAX_BENEFICIAL_OWNERS = 50;
|
|
7304
7313
|
var OWNERSHIP_CONFIRMATION_MESSAGE = "Please confirm the ownership details by ticking the box";
|
|
@@ -7333,22 +7342,22 @@ function OrganizationOnboardingForm({
|
|
|
7333
7342
|
onCancel,
|
|
7334
7343
|
className
|
|
7335
7344
|
}) {
|
|
7336
|
-
const [name, setName] =
|
|
7337
|
-
const [legalName, setLegalName] =
|
|
7338
|
-
const [ownerName, setOwnerName] =
|
|
7339
|
-
const [countryOfIncorporation, setCountryOfIncorporation] =
|
|
7345
|
+
const [name, setName] = React87.useState(defaultValues?.name ?? "");
|
|
7346
|
+
const [legalName, setLegalName] = React87.useState(defaultValues?.legal_name ?? "");
|
|
7347
|
+
const [ownerName, setOwnerName] = React87.useState(defaultValues?.owner_name ?? "");
|
|
7348
|
+
const [countryOfIncorporation, setCountryOfIncorporation] = React87.useState(
|
|
7340
7349
|
defaultValues?.country_of_incorporation ?? ""
|
|
7341
7350
|
);
|
|
7342
|
-
const [residencyCountry, setResidencyCountry] =
|
|
7351
|
+
const [residencyCountry, setResidencyCountry] = React87.useState(
|
|
7343
7352
|
defaultValues?.residency_country ?? ""
|
|
7344
7353
|
);
|
|
7345
|
-
const [owners, setOwners] =
|
|
7354
|
+
const [owners, setOwners] = React87.useState(
|
|
7346
7355
|
() => initialRows(defaultValues?.beneficial_owners)
|
|
7347
7356
|
);
|
|
7348
|
-
const [ownershipConfirmed, setOwnershipConfirmed] =
|
|
7349
|
-
const [confirmationAttempted, setConfirmationAttempted] =
|
|
7350
|
-
const nextKeyRef =
|
|
7351
|
-
const submittingRef =
|
|
7357
|
+
const [ownershipConfirmed, setOwnershipConfirmed] = React87.useState(false);
|
|
7358
|
+
const [confirmationAttempted, setConfirmationAttempted] = React87.useState(false);
|
|
7359
|
+
const nextKeyRef = React87.useRef(owners.length);
|
|
7360
|
+
const submittingRef = React87.useRef(false);
|
|
7352
7361
|
const trimmed = name.trim();
|
|
7353
7362
|
const filledOwners = owners.filter((row) => !isRowBlank(row));
|
|
7354
7363
|
const ownerShares = filledOwners.map((row) => parseShare(row.share));
|
|
@@ -7402,7 +7411,7 @@ function OrganizationOnboardingForm({
|
|
|
7402
7411
|
...needsOwnershipConfirmation ? { ownership_confirmed: ownershipConfirmed } : {}
|
|
7403
7412
|
});
|
|
7404
7413
|
};
|
|
7405
|
-
|
|
7414
|
+
React87.useEffect(() => {
|
|
7406
7415
|
submittingRef.current = false;
|
|
7407
7416
|
}, [
|
|
7408
7417
|
name,
|
|
@@ -7415,12 +7424,12 @@ function OrganizationOnboardingForm({
|
|
|
7415
7424
|
submitting,
|
|
7416
7425
|
serverError
|
|
7417
7426
|
]);
|
|
7418
|
-
const countryField = (params) => /* @__PURE__ */
|
|
7419
|
-
/* @__PURE__ */
|
|
7427
|
+
const countryField = (params) => /* @__PURE__ */ jsxs71("div", { className: "space-y-1.5", children: [
|
|
7428
|
+
/* @__PURE__ */ jsxs71(Label2, { htmlFor: params.id, children: [
|
|
7420
7429
|
params.label,
|
|
7421
|
-
params.required && /* @__PURE__ */
|
|
7430
|
+
params.required && /* @__PURE__ */ jsx105("span", { className: "text-text-danger", children: " *" })
|
|
7422
7431
|
] }),
|
|
7423
|
-
/* @__PURE__ */
|
|
7432
|
+
/* @__PURE__ */ jsx105(
|
|
7424
7433
|
Select,
|
|
7425
7434
|
{
|
|
7426
7435
|
id: params.id,
|
|
@@ -7433,10 +7442,10 @@ function OrganizationOnboardingForm({
|
|
|
7433
7442
|
}
|
|
7434
7443
|
)
|
|
7435
7444
|
] });
|
|
7436
|
-
return /* @__PURE__ */
|
|
7437
|
-
/* @__PURE__ */
|
|
7438
|
-
/* @__PURE__ */
|
|
7439
|
-
/* @__PURE__ */
|
|
7445
|
+
return /* @__PURE__ */ jsxs71("form", { onSubmit: handleSubmit, className: cn("space-y-4", className), children: [
|
|
7446
|
+
/* @__PURE__ */ jsxs71("div", { className: "space-y-1.5", children: [
|
|
7447
|
+
/* @__PURE__ */ jsx105(Label2, { htmlFor: "create-org-name", children: "Organization name" }),
|
|
7448
|
+
/* @__PURE__ */ jsx105(
|
|
7440
7449
|
Input,
|
|
7441
7450
|
{
|
|
7442
7451
|
id: "create-org-name",
|
|
@@ -7447,9 +7456,9 @@ function OrganizationOnboardingForm({
|
|
|
7447
7456
|
}
|
|
7448
7457
|
)
|
|
7449
7458
|
] }),
|
|
7450
|
-
/* @__PURE__ */
|
|
7451
|
-
/* @__PURE__ */
|
|
7452
|
-
/* @__PURE__ */
|
|
7459
|
+
/* @__PURE__ */ jsxs71("div", { className: "space-y-1.5", children: [
|
|
7460
|
+
/* @__PURE__ */ jsx105(Label2, { htmlFor: "create-org-legal-name", children: "Legal name" }),
|
|
7461
|
+
/* @__PURE__ */ jsx105(
|
|
7453
7462
|
Input,
|
|
7454
7463
|
{
|
|
7455
7464
|
id: "create-org-legal-name",
|
|
@@ -7460,9 +7469,9 @@ function OrganizationOnboardingForm({
|
|
|
7460
7469
|
}
|
|
7461
7470
|
)
|
|
7462
7471
|
] }),
|
|
7463
|
-
/* @__PURE__ */
|
|
7464
|
-
/* @__PURE__ */
|
|
7465
|
-
/* @__PURE__ */
|
|
7472
|
+
/* @__PURE__ */ jsxs71("div", { className: "space-y-1.5", children: [
|
|
7473
|
+
/* @__PURE__ */ jsx105(Label2, { htmlFor: "create-org-owner-name", children: "Owner name" }),
|
|
7474
|
+
/* @__PURE__ */ jsx105(
|
|
7466
7475
|
Input,
|
|
7467
7476
|
{
|
|
7468
7477
|
id: "create-org-owner-name",
|
|
@@ -7487,10 +7496,10 @@ function OrganizationOnboardingForm({
|
|
|
7487
7496
|
onChange: setResidencyCountry,
|
|
7488
7497
|
required: false
|
|
7489
7498
|
}),
|
|
7490
|
-
/* @__PURE__ */
|
|
7491
|
-
/* @__PURE__ */
|
|
7492
|
-
/* @__PURE__ */
|
|
7493
|
-
/* @__PURE__ */
|
|
7499
|
+
/* @__PURE__ */ jsxs71("div", { className: "space-y-2", children: [
|
|
7500
|
+
/* @__PURE__ */ jsxs71("div", { className: "flex items-center justify-between", children: [
|
|
7501
|
+
/* @__PURE__ */ jsx105(Label2, { children: "Beneficial owners" }),
|
|
7502
|
+
/* @__PURE__ */ jsx105(
|
|
7494
7503
|
Button,
|
|
7495
7504
|
{
|
|
7496
7505
|
type: "button",
|
|
@@ -7503,16 +7512,16 @@ function OrganizationOnboardingForm({
|
|
|
7503
7512
|
}
|
|
7504
7513
|
)
|
|
7505
7514
|
] }),
|
|
7506
|
-
owners.length === 0 && /* @__PURE__ */
|
|
7507
|
-
owners.map((row) => /* @__PURE__ */
|
|
7515
|
+
owners.length === 0 && /* @__PURE__ */ jsx105("p", { className: "text-xs text-text-tertiary", children: "List the natural persons who ultimately own or control the organization." }),
|
|
7516
|
+
owners.map((row) => /* @__PURE__ */ jsxs71(
|
|
7508
7517
|
"div",
|
|
7509
7518
|
{
|
|
7510
7519
|
"data-testid": `beneficial-owner-row-${row.key}`,
|
|
7511
7520
|
className: "flex items-end gap-2",
|
|
7512
7521
|
children: [
|
|
7513
|
-
/* @__PURE__ */
|
|
7514
|
-
/* @__PURE__ */
|
|
7515
|
-
/* @__PURE__ */
|
|
7522
|
+
/* @__PURE__ */ jsxs71("div", { className: "flex-1 space-y-1", children: [
|
|
7523
|
+
/* @__PURE__ */ jsx105(Label2, { htmlFor: `bo-name-${row.key}`, className: "text-xs", children: "Name" }),
|
|
7524
|
+
/* @__PURE__ */ jsx105(
|
|
7516
7525
|
Input,
|
|
7517
7526
|
{
|
|
7518
7527
|
id: `bo-name-${row.key}`,
|
|
@@ -7522,9 +7531,9 @@ function OrganizationOnboardingForm({
|
|
|
7522
7531
|
}
|
|
7523
7532
|
)
|
|
7524
7533
|
] }),
|
|
7525
|
-
/* @__PURE__ */
|
|
7526
|
-
/* @__PURE__ */
|
|
7527
|
-
/* @__PURE__ */
|
|
7534
|
+
/* @__PURE__ */ jsxs71("div", { className: "w-40 space-y-1", children: [
|
|
7535
|
+
/* @__PURE__ */ jsx105(Label2, { htmlFor: `bo-country-${row.key}`, className: "text-xs", children: "Country" }),
|
|
7536
|
+
/* @__PURE__ */ jsx105(
|
|
7528
7537
|
Select,
|
|
7529
7538
|
{
|
|
7530
7539
|
id: `bo-country-${row.key}`,
|
|
@@ -7537,9 +7546,9 @@ function OrganizationOnboardingForm({
|
|
|
7537
7546
|
}
|
|
7538
7547
|
)
|
|
7539
7548
|
] }),
|
|
7540
|
-
/* @__PURE__ */
|
|
7541
|
-
/* @__PURE__ */
|
|
7542
|
-
/* @__PURE__ */
|
|
7549
|
+
/* @__PURE__ */ jsxs71("div", { className: "w-24 space-y-1", children: [
|
|
7550
|
+
/* @__PURE__ */ jsx105(Label2, { htmlFor: `bo-share-${row.key}`, className: "text-xs", children: "Share %" }),
|
|
7551
|
+
/* @__PURE__ */ jsx105(
|
|
7543
7552
|
Input,
|
|
7544
7553
|
{
|
|
7545
7554
|
id: `bo-share-${row.key}`,
|
|
@@ -7550,7 +7559,7 @@ function OrganizationOnboardingForm({
|
|
|
7550
7559
|
}
|
|
7551
7560
|
)
|
|
7552
7561
|
] }),
|
|
7553
|
-
/* @__PURE__ */
|
|
7562
|
+
/* @__PURE__ */ jsx105(
|
|
7554
7563
|
Button,
|
|
7555
7564
|
{
|
|
7556
7565
|
type: "button",
|
|
@@ -7565,16 +7574,16 @@ function OrganizationOnboardingForm({
|
|
|
7565
7574
|
},
|
|
7566
7575
|
row.key
|
|
7567
7576
|
)),
|
|
7568
|
-
!ownersValid && /* @__PURE__ */
|
|
7569
|
-
shareSum > 100 && /* @__PURE__ */
|
|
7577
|
+
!ownersValid && /* @__PURE__ */ jsx105("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." }),
|
|
7578
|
+
shareSum > 100 && /* @__PURE__ */ jsxs71("p", { "data-testid": "beneficial-owners-sum-warning", className: "text-xs text-text-warning", children: [
|
|
7570
7579
|
"The listed shares add up to ",
|
|
7571
7580
|
shareSum,
|
|
7572
7581
|
"%, which is more than 100%."
|
|
7573
7582
|
] })
|
|
7574
7583
|
] }),
|
|
7575
|
-
needsOwnershipConfirmation && /* @__PURE__ */
|
|
7576
|
-
/* @__PURE__ */
|
|
7577
|
-
/* @__PURE__ */
|
|
7584
|
+
needsOwnershipConfirmation && /* @__PURE__ */ jsxs71("div", { className: "space-y-1", children: [
|
|
7585
|
+
/* @__PURE__ */ jsxs71("div", { className: "flex items-start gap-2", children: [
|
|
7586
|
+
/* @__PURE__ */ jsx105(
|
|
7578
7587
|
Checkbox,
|
|
7579
7588
|
{
|
|
7580
7589
|
id: "create-org-ownership-confirmed",
|
|
@@ -7584,19 +7593,19 @@ function OrganizationOnboardingForm({
|
|
|
7584
7593
|
onCheckedChange: (value) => setOwnershipConfirmed(value === true)
|
|
7585
7594
|
}
|
|
7586
7595
|
),
|
|
7587
|
-
/* @__PURE__ */
|
|
7596
|
+
/* @__PURE__ */ jsxs71(
|
|
7588
7597
|
Label2,
|
|
7589
7598
|
{
|
|
7590
7599
|
htmlFor: "create-org-ownership-confirmed",
|
|
7591
7600
|
className: "text-xs font-regular leading-snug",
|
|
7592
7601
|
children: [
|
|
7593
7602
|
"I confirm the ownership structure above is complete and correct",
|
|
7594
|
-
/* @__PURE__ */
|
|
7603
|
+
/* @__PURE__ */ jsx105("span", { className: "text-text-danger", children: " *" })
|
|
7595
7604
|
]
|
|
7596
7605
|
}
|
|
7597
7606
|
)
|
|
7598
7607
|
] }),
|
|
7599
|
-
showConfirmationError && /* @__PURE__ */
|
|
7608
|
+
showConfirmationError && /* @__PURE__ */ jsx105(
|
|
7600
7609
|
"p",
|
|
7601
7610
|
{
|
|
7602
7611
|
id: "create-org-ownership-error",
|
|
@@ -7606,12 +7615,12 @@ function OrganizationOnboardingForm({
|
|
|
7606
7615
|
}
|
|
7607
7616
|
)
|
|
7608
7617
|
] }),
|
|
7609
|
-
(serverError || otherViolations.length > 0) && /* @__PURE__ */
|
|
7618
|
+
(serverError || otherViolations.length > 0) && /* @__PURE__ */ jsxs71(InlineError, { children: [
|
|
7610
7619
|
serverError,
|
|
7611
|
-
otherViolations.length > 0 && /* @__PURE__ */
|
|
7620
|
+
otherViolations.length > 0 && /* @__PURE__ */ jsx105("ul", { "data-testid": "create-org-violations", className: "mt-1 list-disc pl-4", children: otherViolations.map((violation) => /* @__PURE__ */ jsx105("li", { children: violation }, violation)) })
|
|
7612
7621
|
] }),
|
|
7613
|
-
/* @__PURE__ */
|
|
7614
|
-
/* @__PURE__ */
|
|
7622
|
+
/* @__PURE__ */ jsxs71("div", { className: "space-y-2 pt-1", children: [
|
|
7623
|
+
/* @__PURE__ */ jsx105(
|
|
7615
7624
|
"button",
|
|
7616
7625
|
{
|
|
7617
7626
|
type: "submit",
|
|
@@ -7622,14 +7631,14 @@ function OrganizationOnboardingForm({
|
|
|
7622
7631
|
children: submitting ? "Creating\u2026" : submitLabel
|
|
7623
7632
|
}
|
|
7624
7633
|
),
|
|
7625
|
-
onCancel && /* @__PURE__ */
|
|
7634
|
+
onCancel && /* @__PURE__ */ jsx105("button", { type: "button", onClick: onCancel, className: AUTH_QUIET_BUTTON, children: "Cancel" })
|
|
7626
7635
|
] })
|
|
7627
7636
|
] });
|
|
7628
7637
|
}
|
|
7629
7638
|
|
|
7630
7639
|
// src/components/list-columns.tsx
|
|
7631
|
-
import * as
|
|
7632
|
-
import { jsx as
|
|
7640
|
+
import * as React88 from "react";
|
|
7641
|
+
import { jsx as jsx106, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
7633
7642
|
var CELL_WIDTH = { 20: "w-20", 24: "w-24", 28: "w-28", 32: "w-32" };
|
|
7634
7643
|
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";
|
|
7635
7644
|
var cellsClass = "flex shrink-0 items-center gap-3";
|
|
@@ -7647,13 +7656,13 @@ function warnDuplicateKeys(columns, where) {
|
|
|
7647
7656
|
seen.add(c.key);
|
|
7648
7657
|
}
|
|
7649
7658
|
}
|
|
7650
|
-
var ListHeader =
|
|
7659
|
+
var ListHeader = React88.forwardRef(function ListHeader2({ lead, columns, mark = true, trailing = true, className, ...props }, ref) {
|
|
7651
7660
|
warnDuplicateKeys(columns, "ListHeader");
|
|
7652
|
-
return /* @__PURE__ */
|
|
7653
|
-
mark && /* @__PURE__ */
|
|
7654
|
-
/* @__PURE__ */
|
|
7655
|
-
/* @__PURE__ */
|
|
7656
|
-
trailing && /* @__PURE__ */
|
|
7661
|
+
return /* @__PURE__ */ jsxs72("div", { ref, className: cn(headerClass, className), ...props, children: [
|
|
7662
|
+
mark && /* @__PURE__ */ jsx106("span", { className: "size-8 shrink-0", "aria-hidden": true }),
|
|
7663
|
+
/* @__PURE__ */ jsx106("span", { className: "min-w-0 flex-1 truncate", children: lead }),
|
|
7664
|
+
/* @__PURE__ */ jsx106("span", { className: cellsClass, children: columns.map((c) => /* @__PURE__ */ jsx106("span", { className: cn(CELL_WIDTH[c.width], cellClass), children: c.label }, c.key)) }),
|
|
7665
|
+
trailing && /* @__PURE__ */ jsx106("span", { className: "size-4 shrink-0", "aria-hidden": true })
|
|
7657
7666
|
] });
|
|
7658
7667
|
});
|
|
7659
7668
|
function cellValue(values, column) {
|
|
@@ -7661,9 +7670,9 @@ function cellValue(values, column) {
|
|
|
7661
7670
|
const value = values[column.key];
|
|
7662
7671
|
return value === void 0 || value === null || value === "" ? column.fallback : value;
|
|
7663
7672
|
}
|
|
7664
|
-
var ListCells =
|
|
7673
|
+
var ListCells = React88.forwardRef(function ListCells2({ columns, values, className, ...props }, ref) {
|
|
7665
7674
|
warnDuplicateKeys(columns, "ListCells");
|
|
7666
|
-
return /* @__PURE__ */
|
|
7675
|
+
return /* @__PURE__ */ jsx106("span", { ref, className: cn(cellsClass, className), ...props, children: columns.map((c) => /* @__PURE__ */ jsx106(
|
|
7667
7676
|
"span",
|
|
7668
7677
|
{
|
|
7669
7678
|
className: cn(CELL_WIDTH[c.width], cellClass, c.quiet && "text-text-tertiary"),
|
|
@@ -7676,9 +7685,9 @@ ListHeader.displayName = "ListHeader";
|
|
|
7676
7685
|
ListCells.displayName = "ListCells";
|
|
7677
7686
|
|
|
7678
7687
|
// src/components/theme-picker.tsx
|
|
7679
|
-
import * as
|
|
7680
|
-
import { Check as
|
|
7681
|
-
import { jsx as
|
|
7688
|
+
import * as React89 from "react";
|
|
7689
|
+
import { Check as Check12, Monitor as Monitor2 } from "lucide-react";
|
|
7690
|
+
import { jsx as jsx107, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
7682
7691
|
var THEME_SWATCHES = {
|
|
7683
7692
|
// --bg-surface --bg-sunken --bg-overlay --border-default --text-tertiary
|
|
7684
7693
|
light: { canvas: "#f2f3f4", rail: "#e1e2e4", body: "#ffffff", quiet: "#bbbec7", strong: "#535a6e" },
|
|
@@ -7692,13 +7701,13 @@ var OPTIONS = [
|
|
|
7692
7701
|
{ value: "system", label: "Auto", name: "Auto, follows your device theme" }
|
|
7693
7702
|
];
|
|
7694
7703
|
function Panels({ palette }) {
|
|
7695
|
-
return /* @__PURE__ */
|
|
7696
|
-
/* @__PURE__ */
|
|
7704
|
+
return /* @__PURE__ */ jsxs73("span", { className: "flex h-full gap-1.5 p-1.5", style: { background: palette.canvas }, children: [
|
|
7705
|
+
/* @__PURE__ */ jsx107(
|
|
7697
7706
|
"span",
|
|
7698
7707
|
{
|
|
7699
7708
|
className: "flex flex-col gap-1.5 p-1.5",
|
|
7700
7709
|
style: { width: "28%", borderRadius: 5, background: palette.rail },
|
|
7701
|
-
children: RAIL_BARS.map((w, i) => /* @__PURE__ */
|
|
7710
|
+
children: RAIL_BARS.map((w, i) => /* @__PURE__ */ jsx107(
|
|
7702
7711
|
"span",
|
|
7703
7712
|
{
|
|
7704
7713
|
className: "rounded-full",
|
|
@@ -7708,12 +7717,12 @@ function Panels({ palette }) {
|
|
|
7708
7717
|
))
|
|
7709
7718
|
}
|
|
7710
7719
|
),
|
|
7711
|
-
/* @__PURE__ */
|
|
7720
|
+
/* @__PURE__ */ jsx107(
|
|
7712
7721
|
"span",
|
|
7713
7722
|
{
|
|
7714
7723
|
className: "flex flex-1 flex-col gap-1.5 border p-2",
|
|
7715
7724
|
style: { borderRadius: 5, background: palette.body, borderColor: palette.quiet },
|
|
7716
|
-
children: BODY_BARS.map((w, i) => /* @__PURE__ */
|
|
7725
|
+
children: BODY_BARS.map((w, i) => /* @__PURE__ */ jsx107(
|
|
7717
7726
|
"span",
|
|
7718
7727
|
{
|
|
7719
7728
|
className: "rounded-full",
|
|
@@ -7729,13 +7738,13 @@ var autoPlateClass = "flex h-full items-center justify-center bg-bg-secondary";
|
|
|
7729
7738
|
var previewClass = "block h-28 overflow-hidden rounded-lg border border-border-default";
|
|
7730
7739
|
var cardClass = "grid gap-2 rounded-lg p-1.5 text-left transition-colors hover:bg-bg-elevated focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus";
|
|
7731
7740
|
var TRACK = { gridTemplateColumns: "repeat(auto-fit, minmax(8rem, 1fr))" };
|
|
7732
|
-
var Picker =
|
|
7733
|
-
return /* @__PURE__ */
|
|
7741
|
+
var Picker = React89.forwardRef(function Picker2({ value, onValueChange, className, ...props }, ref) {
|
|
7742
|
+
return /* @__PURE__ */ jsx107("div", { role: "group", "aria-label": "Theme", ...props, ref, className: cn("grid gap-4", className), style: { ...TRACK, ...props.style }, children: OPTIONS.map((o) => {
|
|
7734
7743
|
const selected = o.value === value;
|
|
7735
7744
|
return (
|
|
7736
7745
|
// Not a `Button` (Guidelines/When it isn't a Button): the preview is the control, and
|
|
7737
7746
|
// `aria-pressed` is what says which one is on.
|
|
7738
|
-
/* @__PURE__ */
|
|
7747
|
+
/* @__PURE__ */ jsxs73(
|
|
7739
7748
|
"button",
|
|
7740
7749
|
{
|
|
7741
7750
|
type: "button",
|
|
@@ -7744,8 +7753,8 @@ var Picker = React87.forwardRef(function Picker2({ value, onValueChange, classNa
|
|
|
7744
7753
|
onClick: () => onValueChange(o.value),
|
|
7745
7754
|
className: cardClass,
|
|
7746
7755
|
children: [
|
|
7747
|
-
/* @__PURE__ */
|
|
7748
|
-
/* @__PURE__ */
|
|
7756
|
+
/* @__PURE__ */ jsx107("span", { className: cn(previewClass, selected && "ring-2 ring-border-strong"), "aria-hidden": true, children: o.value === "system" ? /* @__PURE__ */ jsx107("span", { className: autoPlateClass, children: /* @__PURE__ */ jsx107(Monitor2, { className: "size-8 text-text-tertiary" }) }) : /* @__PURE__ */ jsx107(Panels, { palette: THEME_SWATCHES[o.value] }) }),
|
|
7757
|
+
/* @__PURE__ */ jsxs73(
|
|
7749
7758
|
"span",
|
|
7750
7759
|
{
|
|
7751
7760
|
className: cn(
|
|
@@ -7753,7 +7762,7 @@ var Picker = React87.forwardRef(function Picker2({ value, onValueChange, classNa
|
|
|
7753
7762
|
selected ? "font-semibold text-text-primary" : "text-text-secondary"
|
|
7754
7763
|
),
|
|
7755
7764
|
children: [
|
|
7756
|
-
/* @__PURE__ */
|
|
7765
|
+
/* @__PURE__ */ jsx107(Check12, { className: cn("size-4 shrink-0", !selected && "invisible"), "aria-hidden": true }),
|
|
7757
7766
|
o.label
|
|
7758
7767
|
]
|
|
7759
7768
|
}
|
|
@@ -7765,9 +7774,9 @@ var Picker = React87.forwardRef(function Picker2({ value, onValueChange, classNa
|
|
|
7765
7774
|
);
|
|
7766
7775
|
}) });
|
|
7767
7776
|
});
|
|
7768
|
-
var WiredPicker =
|
|
7777
|
+
var WiredPicker = React89.forwardRef(function WiredPicker2({ onValueChange, ...props }, ref) {
|
|
7769
7778
|
const { theme, setTheme } = useTheme();
|
|
7770
|
-
return /* @__PURE__ */
|
|
7779
|
+
return /* @__PURE__ */ jsx107(
|
|
7771
7780
|
Picker,
|
|
7772
7781
|
{
|
|
7773
7782
|
...props,
|
|
@@ -7780,22 +7789,22 @@ var WiredPicker = React87.forwardRef(function WiredPicker2({ onValueChange, ...p
|
|
|
7780
7789
|
}
|
|
7781
7790
|
);
|
|
7782
7791
|
});
|
|
7783
|
-
var ThemePicker =
|
|
7784
|
-
const controlled =
|
|
7792
|
+
var ThemePicker = React89.forwardRef(function ThemePicker2({ value, onValueChange, ...props }, ref) {
|
|
7793
|
+
const controlled = React89.useRef(value !== void 0);
|
|
7785
7794
|
if (process.env.NODE_ENV !== "production" && controlled.current !== (value !== void 0)) {
|
|
7786
7795
|
console.warn(
|
|
7787
7796
|
"[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."
|
|
7788
7797
|
);
|
|
7789
7798
|
}
|
|
7790
|
-
return controlled.current ? /* @__PURE__ */
|
|
7791
|
-
}) }) : /* @__PURE__ */
|
|
7799
|
+
return controlled.current ? /* @__PURE__ */ jsx107(Picker, { ...props, ref, value: value ?? "system", onValueChange: onValueChange ?? (() => {
|
|
7800
|
+
}) }) : /* @__PURE__ */ jsx107(WiredPicker, { ...props, ref, onValueChange });
|
|
7792
7801
|
});
|
|
7793
7802
|
ThemePicker.displayName = "ThemePicker";
|
|
7794
7803
|
|
|
7795
7804
|
// src/components/secret-reveal.tsx
|
|
7796
|
-
import * as
|
|
7805
|
+
import * as React90 from "react";
|
|
7797
7806
|
import { Copy as Copy2, Download } from "lucide-react";
|
|
7798
|
-
import { jsx as
|
|
7807
|
+
import { jsx as jsx108, jsxs as jsxs74 } from "react/jsx-runtime";
|
|
7799
7808
|
var asText = (value) => Array.isArray(value) ? value.join("\n") : value;
|
|
7800
7809
|
var REVEALED = "A secret is on screen and will not be shown again.";
|
|
7801
7810
|
var REFUSED = "The browser refused the clipboard. Select the value to copy it.";
|
|
@@ -7803,15 +7812,15 @@ function SecretValue({ value }) {
|
|
|
7803
7812
|
if (Array.isArray(value)) {
|
|
7804
7813
|
const half = Math.ceil(value.length / 2);
|
|
7805
7814
|
const columns = [value.slice(0, half), value.slice(half)].filter((column) => column.length > 0);
|
|
7806
|
-
return /* @__PURE__ */
|
|
7815
|
+
return /* @__PURE__ */ jsx108("div", { className: "flex w-fit gap-x-12", children: columns.map((column, index) => (
|
|
7807
7816
|
// Neither the columns nor the values inside one are ever reordered, and two identical
|
|
7808
7817
|
// values in a list are legal, so the index is the key and the value is not.
|
|
7809
|
-
/* @__PURE__ */
|
|
7818
|
+
/* @__PURE__ */ jsx108("div", { className: "grid gap-y-1.5", children: column.map((line, row) => /* @__PURE__ */ jsx108("code", { className: "font-mono text-sm font-medium tabular-nums text-text-primary", children: line }, row)) }, index)
|
|
7810
7819
|
)) });
|
|
7811
7820
|
}
|
|
7812
|
-
return /* @__PURE__ */
|
|
7821
|
+
return /* @__PURE__ */ jsx108("code", { className: "block break-all font-mono text-sm font-medium text-text-primary", children: value });
|
|
7813
7822
|
}
|
|
7814
|
-
var SecretReveal =
|
|
7823
|
+
var SecretReveal = React90.forwardRef(
|
|
7815
7824
|
({
|
|
7816
7825
|
value,
|
|
7817
7826
|
caption,
|
|
@@ -7828,18 +7837,18 @@ var SecretReveal = React88.forwardRef(
|
|
|
7828
7837
|
className,
|
|
7829
7838
|
...props
|
|
7830
7839
|
}, ref) => {
|
|
7831
|
-
const [takenText, setTakenText] =
|
|
7832
|
-
const [refusedText, setRefusedText] =
|
|
7833
|
-
const [announcedFor, setAnnouncedFor] =
|
|
7834
|
-
const copyRef =
|
|
7835
|
-
const captionId =
|
|
7840
|
+
const [takenText, setTakenText] = React90.useState(null);
|
|
7841
|
+
const [refusedText, setRefusedText] = React90.useState(null);
|
|
7842
|
+
const [announcedFor, setAnnouncedFor] = React90.useState(null);
|
|
7843
|
+
const copyRef = React90.useRef(null);
|
|
7844
|
+
const captionId = React90.useId();
|
|
7836
7845
|
const text = asText(value);
|
|
7837
7846
|
const empty = text.length === 0;
|
|
7838
7847
|
const taken = takenText === text;
|
|
7839
7848
|
const refused = refusedText === text;
|
|
7840
|
-
|
|
7849
|
+
React90.useEffect(() => setAnnouncedFor(text), [text]);
|
|
7841
7850
|
const announced = announcedFor === text ? REVEALED : "";
|
|
7842
|
-
|
|
7851
|
+
React90.useEffect(() => {
|
|
7843
7852
|
if (autoFocus) copyRef.current?.focus();
|
|
7844
7853
|
}, [autoFocus]);
|
|
7845
7854
|
const reportTaken = () => {
|
|
@@ -7865,12 +7874,12 @@ var SecretReveal = React88.forwardRef(
|
|
|
7865
7874
|
reportTaken();
|
|
7866
7875
|
onDownload?.();
|
|
7867
7876
|
};
|
|
7868
|
-
return /* @__PURE__ */
|
|
7869
|
-
/* @__PURE__ */
|
|
7870
|
-
/* @__PURE__ */
|
|
7871
|
-
/* @__PURE__ */
|
|
7872
|
-
/* @__PURE__ */
|
|
7873
|
-
/* @__PURE__ */
|
|
7877
|
+
return /* @__PURE__ */ jsx108("div", { ref, className: cn("overflow-hidden rounded-lg bg-bg-sunken", className), ...props, children: /* @__PURE__ */ jsx108("div", { className: highlightClassName, ref: highlightRef, children: /* @__PURE__ */ jsxs74("div", { className: "grid gap-3 rounded-lg border border-border-strong px-4 py-3", children: [
|
|
7878
|
+
/* @__PURE__ */ jsx108("span", { role: "status", className: "sr-only", children: announced }),
|
|
7879
|
+
/* @__PURE__ */ jsx108("div", { id: captionId, className: "text-sm text-text-secondary", children: caption }),
|
|
7880
|
+
/* @__PURE__ */ jsx108(SecretValue, { value }),
|
|
7881
|
+
/* @__PURE__ */ jsxs74("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
7882
|
+
/* @__PURE__ */ jsx108(
|
|
7874
7883
|
Button,
|
|
7875
7884
|
{
|
|
7876
7885
|
ref: copyRef,
|
|
@@ -7878,12 +7887,12 @@ var SecretReveal = React88.forwardRef(
|
|
|
7878
7887
|
"aria-describedby": captionId,
|
|
7879
7888
|
variant: "outline",
|
|
7880
7889
|
size: "sm",
|
|
7881
|
-
icon: /* @__PURE__ */
|
|
7890
|
+
icon: /* @__PURE__ */ jsx108(Copy2, {}),
|
|
7882
7891
|
children: copyLabel ?? (Array.isArray(value) ? "Copy all" : "Copy")
|
|
7883
7892
|
}
|
|
7884
7893
|
),
|
|
7885
|
-
onDownload && /* @__PURE__ */
|
|
7886
|
-
/* @__PURE__ */
|
|
7894
|
+
onDownload && /* @__PURE__ */ jsx108(Button, { onClick: download, "aria-describedby": captionId, variant: "outline", size: "sm", icon: /* @__PURE__ */ jsx108(Download, {}), children: downloadLabel }),
|
|
7895
|
+
/* @__PURE__ */ jsx108(
|
|
7887
7896
|
Button,
|
|
7888
7897
|
{
|
|
7889
7898
|
onClick: onConfirm,
|
|
@@ -7894,7 +7903,7 @@ var SecretReveal = React88.forwardRef(
|
|
|
7894
7903
|
}
|
|
7895
7904
|
)
|
|
7896
7905
|
] }),
|
|
7897
|
-
refused && /* @__PURE__ */
|
|
7906
|
+
refused && /* @__PURE__ */ jsx108("div", { role: "status", className: "text-xs text-text-tertiary", children: REFUSED })
|
|
7898
7907
|
] }) }) });
|
|
7899
7908
|
}
|
|
7900
7909
|
);
|
|
@@ -8170,6 +8179,8 @@ export {
|
|
|
8170
8179
|
TooltipContent,
|
|
8171
8180
|
TooltipProvider,
|
|
8172
8181
|
TooltipTrigger,
|
|
8182
|
+
TopBar,
|
|
8183
|
+
TopBarUtilities,
|
|
8173
8184
|
UserMenu,
|
|
8174
8185
|
WEIGHT_TONE,
|
|
8175
8186
|
alertVariants,
|