@lessly/ui 4.0.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3,6 +3,8 @@ import {
3
3
  EntityRow,
4
4
  NavRow,
5
5
  RailToggle,
6
+ ScrollArea,
7
+ ScrollBar,
6
8
  Sheet,
7
9
  SheetClose,
8
10
  SheetContent,
@@ -21,7 +23,7 @@ import {
21
23
  cn,
22
24
  useIsMobile,
23
25
  useSidebar
24
- } from "./chunk-DYHP7W3X.js";
26
+ } from "./chunk-LTHOLX7I.js";
25
27
 
26
28
  // src/components/auto-height.tsx
27
29
  import * as React from "react";
@@ -382,7 +384,7 @@ var Input = React5.forwardRef(
382
384
  {
383
385
  className: cn(
384
386
  FIELD_BOX,
385
- "items-center gap-1.5 focus-within:ring-2 focus-within:ring-border-focus has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50",
387
+ "items-center gap-1.5 focus-within:ring-2 focus-within:ring-inset focus-within:ring-border-focus has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50",
386
388
  className
387
389
  ),
388
390
  children: [
@@ -408,7 +410,7 @@ var Input = React5.forwardRef(
408
410
  style,
409
411
  className: cn(
410
412
  FIELD_BOX,
411
- "file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-text-tertiary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
413
+ "file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-text-tertiary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-border-focus disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
412
414
  className
413
415
  ),
414
416
  ref,
@@ -429,7 +431,7 @@ var InputGroup = React6.forwardRef(
429
431
  ref,
430
432
  className: cn(
431
433
  "flex h-10 w-full items-stretch overflow-hidden rounded-md border border-border-default bg-bg-primary text-sm text-text-primary",
432
- "focus-within:ring-2 focus-within:ring-border-focus",
434
+ "focus-within:ring-2 focus-within:ring-inset focus-within:ring-border-focus",
433
435
  "has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50",
434
436
  className
435
437
  ),
@@ -609,7 +611,7 @@ function Select({
609
611
  "aria-labelledby": ariaLabelledby,
610
612
  disabled,
611
613
  className: cn(
612
- "flex items-center text-sm text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
614
+ "flex items-center text-sm text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-border-focus disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
613
615
  quiet ? (
614
616
  // No border at all, so there is no filled step to paint: what a row's control has to
615
617
  // say is its value, and the hover fill is what says it can be pressed.
@@ -821,7 +823,7 @@ var Textarea = React13.forwardRef(
821
823
  {
822
824
  ref,
823
825
  className: cn(
824
- "flex min-h-20 w-full rounded-md border border-field-border hover:border-field-border-hover bg-bg-primary px-3 py-2 text-sm text-text-primary placeholder:text-text-tertiary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
826
+ "flex min-h-20 w-full rounded-md border border-field-border hover:border-field-border-hover bg-bg-primary px-3 py-2 text-sm text-text-primary placeholder:text-text-tertiary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-border-focus disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
825
827
  className
826
828
  ),
827
829
  ...props
@@ -1903,45 +1905,10 @@ var CollapsibleContent2 = React33.forwardRef(({ className, ...props }, ref) => /
1903
1905
  ));
1904
1906
  CollapsibleContent2.displayName = CollapsiblePrimitive.CollapsibleContent.displayName;
1905
1907
 
1906
- // src/components/scroll-area.tsx
1907
- import * as React34 from "react";
1908
- import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
1909
- import { jsx as jsx41, jsxs as jsxs20 } from "react/jsx-runtime";
1910
- var ScrollArea = React34.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs20(
1911
- ScrollAreaPrimitive.Root,
1912
- {
1913
- ref,
1914
- className: cn("relative overflow-hidden", className),
1915
- ...props,
1916
- children: [
1917
- /* @__PURE__ */ jsx41(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
1918
- /* @__PURE__ */ jsx41(ScrollBar, {}),
1919
- /* @__PURE__ */ jsx41(ScrollAreaPrimitive.Corner, {})
1920
- ]
1921
- }
1922
- ));
1923
- ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
1924
- var ScrollBar = React34.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx41(
1925
- ScrollAreaPrimitive.ScrollAreaScrollbar,
1926
- {
1927
- ref,
1928
- orientation,
1929
- className: cn(
1930
- "flex touch-none select-none transition-colors duration-fast",
1931
- orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
1932
- orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
1933
- className
1934
- ),
1935
- ...props,
1936
- children: /* @__PURE__ */ jsx41(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border-selected" })
1937
- }
1938
- ));
1939
- ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
1940
-
1941
1908
  // src/components/alert.tsx
1942
- import * as React35 from "react";
1909
+ import * as React34 from "react";
1943
1910
  import { cva as cva5 } from "class-variance-authority";
1944
- import { jsx as jsx42, jsxs as jsxs21 } from "react/jsx-runtime";
1911
+ import { jsx as jsx41, jsxs as jsxs20 } from "react/jsx-runtime";
1945
1912
  var alertVariants = cva5(
1946
1913
  "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:size-4",
1947
1914
  {
@@ -1956,8 +1923,8 @@ var alertVariants = cva5(
1956
1923
  defaultVariants: { variant: "default" }
1957
1924
  }
1958
1925
  );
1959
- var Alert = React35.forwardRef(
1960
- ({ className, variant, value, action, children, ...props }, ref) => /* @__PURE__ */ jsxs21(
1926
+ var Alert = React34.forwardRef(
1927
+ ({ className, variant, value, action, children, ...props }, ref) => /* @__PURE__ */ jsxs20(
1961
1928
  "div",
1962
1929
  {
1963
1930
  ref,
@@ -1966,16 +1933,16 @@ var Alert = React35.forwardRef(
1966
1933
  ...props,
1967
1934
  children: [
1968
1935
  children,
1969
- (value !== void 0 || action !== void 0) && /* @__PURE__ */ jsxs21("div", { className: "mt-2 flex items-center gap-2", children: [
1970
- value !== void 0 && /* @__PURE__ */ jsx42("code", { className: "min-w-0 flex-1 truncate font-mono text-sm font-medium", children: value }),
1971
- action !== void 0 && /* @__PURE__ */ jsx42("span", { className: "flex shrink-0 items-center gap-2", children: action })
1936
+ (value !== void 0 || action !== void 0) && /* @__PURE__ */ jsxs20("div", { className: "mt-2 flex items-center gap-2", children: [
1937
+ value !== void 0 && /* @__PURE__ */ jsx41("code", { className: "min-w-0 flex-1 truncate font-mono text-sm font-medium", children: value }),
1938
+ action !== void 0 && /* @__PURE__ */ jsx41("span", { className: "flex shrink-0 items-center gap-2", children: action })
1972
1939
  ] })
1973
1940
  ]
1974
1941
  }
1975
1942
  )
1976
1943
  );
1977
1944
  Alert.displayName = "Alert";
1978
- var AlertTitle = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx42(
1945
+ var AlertTitle = React34.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx41(
1979
1946
  "h5",
1980
1947
  {
1981
1948
  ref,
@@ -1984,7 +1951,7 @@ var AlertTitle = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE
1984
1951
  }
1985
1952
  ));
1986
1953
  AlertTitle.displayName = "AlertTitle";
1987
- var AlertDescription = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx42(
1954
+ var AlertDescription = React34.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx41(
1988
1955
  "div",
1989
1956
  {
1990
1957
  ref,
@@ -1995,14 +1962,14 @@ var AlertDescription = React35.forwardRef(({ className, ...props }, ref) => /* @
1995
1962
  AlertDescription.displayName = "AlertDescription";
1996
1963
 
1997
1964
  // src/components/breadcrumb.tsx
1998
- import * as React36 from "react";
1965
+ import * as React35 from "react";
1999
1966
  import { Slot } from "@radix-ui/react-slot";
2000
1967
  import { ChevronRight as ChevronRight4, MoreHorizontal } from "lucide-react";
2001
- import { jsx as jsx43, jsxs as jsxs22 } from "react/jsx-runtime";
2002
- var Breadcrumb = React36.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx43("nav", { ref, "aria-label": "breadcrumb", ...props }));
1968
+ import { jsx as jsx42, jsxs as jsxs21 } from "react/jsx-runtime";
1969
+ var Breadcrumb = React35.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx42("nav", { ref, "aria-label": "breadcrumb", ...props }));
2003
1970
  Breadcrumb.displayName = "Breadcrumb";
2004
- var BreadcrumbList = React36.forwardRef(
2005
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx43(
1971
+ var BreadcrumbList = React35.forwardRef(
1972
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx42(
2006
1973
  "ol",
2007
1974
  {
2008
1975
  ref,
@@ -2015,13 +1982,13 @@ var BreadcrumbList = React36.forwardRef(
2015
1982
  )
2016
1983
  );
2017
1984
  BreadcrumbList.displayName = "BreadcrumbList";
2018
- var BreadcrumbItem = React36.forwardRef(
2019
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx43("li", { ref, className: cn("inline-flex items-center gap-1.5", className), ...props })
1985
+ var BreadcrumbItem = React35.forwardRef(
1986
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx42("li", { ref, className: cn("inline-flex items-center gap-1.5", className), ...props })
2020
1987
  );
2021
1988
  BreadcrumbItem.displayName = "BreadcrumbItem";
2022
- var BreadcrumbLink = React36.forwardRef(({ asChild, className, ...props }, ref) => {
1989
+ var BreadcrumbLink = React35.forwardRef(({ asChild, className, ...props }, ref) => {
2023
1990
  const Comp = asChild ? Slot : "a";
2024
- return /* @__PURE__ */ jsx43(
1991
+ return /* @__PURE__ */ jsx42(
2025
1992
  Comp,
2026
1993
  {
2027
1994
  ref,
@@ -2031,8 +1998,8 @@ var BreadcrumbLink = React36.forwardRef(({ asChild, className, ...props }, ref)
2031
1998
  );
2032
1999
  });
2033
2000
  BreadcrumbLink.displayName = "BreadcrumbLink";
2034
- var BreadcrumbPage = React36.forwardRef(
2035
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx43(
2001
+ var BreadcrumbPage = React35.forwardRef(
2002
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx42(
2036
2003
  "span",
2037
2004
  {
2038
2005
  ref,
@@ -2049,18 +2016,18 @@ var BreadcrumbSeparator = ({
2049
2016
  children,
2050
2017
  className,
2051
2018
  ...props
2052
- }) => /* @__PURE__ */ jsx43(
2019
+ }) => /* @__PURE__ */ jsx42(
2053
2020
  "li",
2054
2021
  {
2055
2022
  role: "presentation",
2056
2023
  "aria-hidden": "true",
2057
2024
  className: cn("[&>svg]:h-4 [&>svg]:w-4", className),
2058
2025
  ...props,
2059
- children: children ?? /* @__PURE__ */ jsx43(ChevronRight4, {})
2026
+ children: children ?? /* @__PURE__ */ jsx42(ChevronRight4, {})
2060
2027
  }
2061
2028
  );
2062
2029
  BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
2063
- var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs22(
2030
+ var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs21(
2064
2031
  "span",
2065
2032
  {
2066
2033
  role: "presentation",
@@ -2068,18 +2035,18 @@ var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs22(
2068
2035
  className: cn("flex h-9 w-9 items-center justify-center", className),
2069
2036
  ...props,
2070
2037
  children: [
2071
- /* @__PURE__ */ jsx43(MoreHorizontal, { className: "h-4 w-4" }),
2072
- /* @__PURE__ */ jsx43("span", { className: "sr-only", children: "More" })
2038
+ /* @__PURE__ */ jsx42(MoreHorizontal, { className: "h-4 w-4" }),
2039
+ /* @__PURE__ */ jsx42("span", { className: "sr-only", children: "More" })
2073
2040
  ]
2074
2041
  }
2075
2042
  );
2076
2043
  BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
2077
2044
 
2078
2045
  // src/components/pagination.tsx
2079
- import * as React37 from "react";
2046
+ import * as React36 from "react";
2080
2047
  import { ChevronLeft, ChevronRight as ChevronRight5, MoreHorizontal as MoreHorizontal2 } from "lucide-react";
2081
- import { jsx as jsx44, jsxs as jsxs23 } from "react/jsx-runtime";
2082
- var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx44(
2048
+ import { jsx as jsx43, jsxs as jsxs22 } from "react/jsx-runtime";
2049
+ var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx43(
2083
2050
  "nav",
2084
2051
  {
2085
2052
  role: "navigation",
@@ -2089,15 +2056,15 @@ var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx44(
2089
2056
  }
2090
2057
  );
2091
2058
  Pagination.displayName = "Pagination";
2092
- var PaginationContent = React37.forwardRef(
2093
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx44("ul", { ref, className: cn("flex flex-row items-center gap-1", className), ...props })
2059
+ var PaginationContent = React36.forwardRef(
2060
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx43("ul", { ref, className: cn("flex flex-row items-center gap-1", className), ...props })
2094
2061
  );
2095
2062
  PaginationContent.displayName = "PaginationContent";
2096
- var PaginationItem = React37.forwardRef(
2097
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx44("li", { ref, className: cn("", className), ...props })
2063
+ var PaginationItem = React36.forwardRef(
2064
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx43("li", { ref, className: cn("", className), ...props })
2098
2065
  );
2099
2066
  PaginationItem.displayName = "PaginationItem";
2100
- var PaginationLink = ({ className, isActive, size = "icon", ...props }) => /* @__PURE__ */ jsx44(
2067
+ var PaginationLink = ({ className, isActive, size = "icon", ...props }) => /* @__PURE__ */ jsx43(
2101
2068
  "a",
2102
2069
  {
2103
2070
  "aria-current": isActive ? "page" : void 0,
@@ -2109,7 +2076,7 @@ var PaginationLink = ({ className, isActive, size = "icon", ...props }) => /* @_
2109
2076
  }
2110
2077
  );
2111
2078
  PaginationLink.displayName = "PaginationLink";
2112
- var PaginationPrevious = ({ className, ...props }) => /* @__PURE__ */ jsxs23(
2079
+ var PaginationPrevious = ({ className, ...props }) => /* @__PURE__ */ jsxs22(
2113
2080
  PaginationLink,
2114
2081
  {
2115
2082
  "aria-label": "Go to previous page",
@@ -2117,13 +2084,13 @@ var PaginationPrevious = ({ className, ...props }) => /* @__PURE__ */ jsxs23(
2117
2084
  className: cn("gap-1 pl-2.5", className),
2118
2085
  ...props,
2119
2086
  children: [
2120
- /* @__PURE__ */ jsx44(ChevronLeft, { className: "h-4 w-4" }),
2121
- /* @__PURE__ */ jsx44("span", { children: "Previous" })
2087
+ /* @__PURE__ */ jsx43(ChevronLeft, { className: "h-4 w-4" }),
2088
+ /* @__PURE__ */ jsx43("span", { children: "Previous" })
2122
2089
  ]
2123
2090
  }
2124
2091
  );
2125
2092
  PaginationPrevious.displayName = "PaginationPrevious";
2126
- var PaginationNext = ({ className, ...props }) => /* @__PURE__ */ jsxs23(
2093
+ var PaginationNext = ({ className, ...props }) => /* @__PURE__ */ jsxs22(
2127
2094
  PaginationLink,
2128
2095
  {
2129
2096
  "aria-label": "Go to next page",
@@ -2131,32 +2098,32 @@ var PaginationNext = ({ className, ...props }) => /* @__PURE__ */ jsxs23(
2131
2098
  className: cn("gap-1 pr-2.5", className),
2132
2099
  ...props,
2133
2100
  children: [
2134
- /* @__PURE__ */ jsx44("span", { children: "Next" }),
2135
- /* @__PURE__ */ jsx44(ChevronRight5, { className: "h-4 w-4" })
2101
+ /* @__PURE__ */ jsx43("span", { children: "Next" }),
2102
+ /* @__PURE__ */ jsx43(ChevronRight5, { className: "h-4 w-4" })
2136
2103
  ]
2137
2104
  }
2138
2105
  );
2139
2106
  PaginationNext.displayName = "PaginationNext";
2140
- var PaginationEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs23(
2107
+ var PaginationEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs22(
2141
2108
  "span",
2142
2109
  {
2143
2110
  "aria-hidden": true,
2144
2111
  className: cn("flex h-9 w-9 items-center justify-center", className),
2145
2112
  ...props,
2146
2113
  children: [
2147
- /* @__PURE__ */ jsx44(MoreHorizontal2, { className: "h-4 w-4" }),
2148
- /* @__PURE__ */ jsx44("span", { className: "sr-only", children: "More pages" })
2114
+ /* @__PURE__ */ jsx43(MoreHorizontal2, { className: "h-4 w-4" }),
2115
+ /* @__PURE__ */ jsx43("span", { className: "sr-only", children: "More pages" })
2149
2116
  ]
2150
2117
  }
2151
2118
  );
2152
2119
  PaginationEllipsis.displayName = "PaginationEllipsis";
2153
2120
 
2154
2121
  // src/components/command.tsx
2155
- import * as React38 from "react";
2122
+ import * as React37 from "react";
2156
2123
  import { Command as CommandPrimitive, useCommandState } from "cmdk";
2157
2124
  import { Search } from "lucide-react";
2158
- import { Fragment as Fragment2, jsx as jsx45, jsxs as jsxs24 } from "react/jsx-runtime";
2159
- var Command = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
2125
+ import { Fragment as Fragment2, jsx as jsx44, jsxs as jsxs23 } from "react/jsx-runtime";
2126
+ var Command = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx44(
2160
2127
  CommandPrimitive,
2161
2128
  {
2162
2129
  ref,
@@ -2168,28 +2135,28 @@ var Command = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__
2168
2135
  }
2169
2136
  ));
2170
2137
  Command.displayName = CommandPrimitive.displayName;
2171
- var KeyCap = ({ children }) => /* @__PURE__ */ jsx45("kbd", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded-sm border border-border-default bg-bg-elevated px-1 font-sans text-xs text-text-secondary", children });
2172
- var CommandKeyHints = () => /* @__PURE__ */ jsx45("div", { className: "flex items-center gap-4 border-t border-border-subtle bg-bg-sunken px-3 py-2 text-xs text-text-tertiary", children: [[["\u2191", "\u2193"], "to navigate"], [["\u21B5"], "to select"]].map(([keys, verb]) => /* @__PURE__ */ jsxs24("span", { className: "flex items-center gap-1.5", children: [
2173
- /* @__PURE__ */ jsx45("span", { className: "flex items-center gap-1", children: keys.map((key) => /* @__PURE__ */ jsx45(KeyCap, { children: key }, key)) }),
2138
+ var KeyCap = ({ children }) => /* @__PURE__ */ jsx44("kbd", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded-sm border border-border-default bg-bg-elevated px-1 font-sans text-xs text-text-secondary", children });
2139
+ var CommandKeyHints = () => /* @__PURE__ */ jsx44("div", { className: "flex items-center gap-4 border-t border-border-subtle bg-bg-sunken px-3 py-2 text-xs text-text-tertiary", children: [[["\u2191", "\u2193"], "to navigate"], [["\u21B5"], "to select"]].map(([keys, verb]) => /* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1.5", children: [
2140
+ /* @__PURE__ */ jsx44("span", { className: "flex items-center gap-1", children: keys.map((key) => /* @__PURE__ */ jsx44(KeyCap, { children: key }, key)) }),
2174
2141
  " ",
2175
2142
  verb
2176
2143
  ] }, verb)) });
2177
2144
  var CommandKeyHintsSlot = ({ children }) => {
2178
2145
  const count = useCommandState((state) => state.filtered.count);
2179
- return count > 0 ? /* @__PURE__ */ jsx45(Fragment2, { children }) : null;
2146
+ return count > 0 ? /* @__PURE__ */ jsx44(Fragment2, { children }) : null;
2180
2147
  };
2181
2148
  var CommandDialog = ({
2182
2149
  children,
2183
2150
  groups,
2184
2151
  placeholder,
2185
2152
  empty,
2186
- keyHints = /* @__PURE__ */ jsx45(CommandKeyHints, {}),
2153
+ keyHints = /* @__PURE__ */ jsx44(CommandKeyHints, {}),
2187
2154
  shortcut = false,
2188
2155
  open,
2189
2156
  onOpenChange,
2190
2157
  ...props
2191
2158
  }) => {
2192
- React38.useEffect(() => {
2159
+ React37.useEffect(() => {
2193
2160
  if (!shortcut || !onOpenChange) return;
2194
2161
  const onKey = (e) => {
2195
2162
  if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
@@ -2200,11 +2167,11 @@ var CommandDialog = ({
2200
2167
  document.addEventListener("keydown", onKey);
2201
2168
  return () => document.removeEventListener("keydown", onKey);
2202
2169
  }, [shortcut, open, onOpenChange]);
2203
- return /* @__PURE__ */ jsx45(Dialog, { open, onOpenChange, ...props, children: /* @__PURE__ */ jsx45(DialogContent, { className: "overflow-hidden p-0", children: /* @__PURE__ */ jsx45(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-text-tertiary [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children: groups ? /* @__PURE__ */ jsxs24(Fragment2, { children: [
2204
- /* @__PURE__ */ jsx45(CommandInput, { placeholder }),
2205
- /* @__PURE__ */ jsxs24(CommandList, { className: "max-h-[420px]", children: [
2206
- /* @__PURE__ */ jsx45(CommandEmpty, { children: empty }),
2207
- groups.map((group) => /* @__PURE__ */ jsx45(CommandGroup, { heading: group.heading, children: group.items.map((item) => /* @__PURE__ */ jsx45(
2170
+ return /* @__PURE__ */ jsx44(Dialog, { open, onOpenChange, ...props, children: /* @__PURE__ */ jsx44(DialogContent, { className: "overflow-hidden p-0", children: /* @__PURE__ */ jsx44(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-text-tertiary [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children: groups ? /* @__PURE__ */ jsxs23(Fragment2, { children: [
2171
+ /* @__PURE__ */ jsx44(CommandInput, { placeholder }),
2172
+ /* @__PURE__ */ jsxs23(CommandList, { className: "max-h-[420px]", children: [
2173
+ /* @__PURE__ */ jsx44(CommandEmpty, { children: empty }),
2174
+ groups.map((group) => /* @__PURE__ */ jsx44(CommandGroup, { heading: group.heading, children: group.items.map((item) => /* @__PURE__ */ jsx44(
2208
2175
  CommandItem,
2209
2176
  {
2210
2177
  value: item.value ?? [group.heading, item.sub, item.label].filter(Boolean).join(" "),
@@ -2217,12 +2184,12 @@ var CommandDialog = ({
2217
2184
  item.id ?? `${group.heading}:${String(item.label)}`
2218
2185
  )) }, group.heading))
2219
2186
  ] }),
2220
- /* @__PURE__ */ jsx45(CommandKeyHintsSlot, { children: keyHints })
2187
+ /* @__PURE__ */ jsx44(CommandKeyHintsSlot, { children: keyHints })
2221
2188
  ] }) : children }) }) });
2222
2189
  };
2223
- var CommandInput = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs24("div", { className: "flex items-center border-b border-border-subtle px-3", "cmdk-input-wrapper": "", children: [
2224
- /* @__PURE__ */ jsx45(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
2225
- /* @__PURE__ */ jsx45(
2190
+ var CommandInput = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs23("div", { className: "flex items-center border-b border-border-subtle px-3", "cmdk-input-wrapper": "", children: [
2191
+ /* @__PURE__ */ jsx44(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
2192
+ /* @__PURE__ */ jsx44(
2226
2193
  CommandPrimitive.Input,
2227
2194
  {
2228
2195
  ref,
@@ -2235,7 +2202,7 @@ var CommandInput = React38.forwardRef(({ className, ...props }, ref) => /* @__PU
2235
2202
  )
2236
2203
  ] }));
2237
2204
  CommandInput.displayName = CommandPrimitive.Input.displayName;
2238
- var CommandList = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
2205
+ var CommandList = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx44(
2239
2206
  CommandPrimitive.List,
2240
2207
  {
2241
2208
  ref,
@@ -2244,7 +2211,7 @@ var CommandList = React38.forwardRef(({ className, ...props }, ref) => /* @__PUR
2244
2211
  }
2245
2212
  ));
2246
2213
  CommandList.displayName = CommandPrimitive.List.displayName;
2247
- var CommandEmpty = React38.forwardRef((props, ref) => /* @__PURE__ */ jsx45(
2214
+ var CommandEmpty = React37.forwardRef((props, ref) => /* @__PURE__ */ jsx44(
2248
2215
  CommandPrimitive.Empty,
2249
2216
  {
2250
2217
  ref,
@@ -2253,7 +2220,7 @@ var CommandEmpty = React38.forwardRef((props, ref) => /* @__PURE__ */ jsx45(
2253
2220
  }
2254
2221
  ));
2255
2222
  CommandEmpty.displayName = CommandPrimitive.Empty.displayName;
2256
- var CommandGroup = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
2223
+ var CommandGroup = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx44(
2257
2224
  CommandPrimitive.Group,
2258
2225
  {
2259
2226
  ref,
@@ -2265,7 +2232,7 @@ var CommandGroup = React38.forwardRef(({ className, ...props }, ref) => /* @__PU
2265
2232
  }
2266
2233
  ));
2267
2234
  CommandGroup.displayName = CommandPrimitive.Group.displayName;
2268
- var CommandSeparator = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
2235
+ var CommandSeparator = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx44(
2269
2236
  CommandPrimitive.Separator,
2270
2237
  {
2271
2238
  ref,
@@ -2274,8 +2241,8 @@ var CommandSeparator = React38.forwardRef(({ className, ...props }, ref) => /* @
2274
2241
  }
2275
2242
  ));
2276
2243
  CommandSeparator.displayName = CommandPrimitive.Separator.displayName;
2277
- var CommandItem = React38.forwardRef(
2278
- ({ className, mark, sub, children, ...props }, ref) => /* @__PURE__ */ jsxs24(
2244
+ var CommandItem = React37.forwardRef(
2245
+ ({ className, mark, sub, children, ...props }, ref) => /* @__PURE__ */ jsxs23(
2279
2246
  CommandPrimitive.Item,
2280
2247
  {
2281
2248
  ref,
@@ -2286,17 +2253,17 @@ var CommandItem = React38.forwardRef(
2286
2253
  ),
2287
2254
  ...props,
2288
2255
  children: [
2289
- mark ? /* @__PURE__ */ jsx45("span", { className: "shrink-0", children: mark }) : null,
2290
- sub ? /* @__PURE__ */ jsxs24("span", { className: "flex min-w-0 flex-col", children: [
2291
- /* @__PURE__ */ jsx45("span", { className: "truncate", children }),
2292
- /* @__PURE__ */ jsx45("span", { className: "truncate text-xs text-text-tertiary", children: sub })
2256
+ mark ? /* @__PURE__ */ jsx44("span", { className: "shrink-0", children: mark }) : null,
2257
+ sub ? /* @__PURE__ */ jsxs23("span", { className: "flex min-w-0 flex-col", children: [
2258
+ /* @__PURE__ */ jsx44("span", { className: "truncate", children }),
2259
+ /* @__PURE__ */ jsx44("span", { className: "truncate text-xs text-text-tertiary", children: sub })
2293
2260
  ] }) : children
2294
2261
  ]
2295
2262
  }
2296
2263
  )
2297
2264
  );
2298
2265
  CommandItem.displayName = CommandPrimitive.Item.displayName;
2299
- var CommandShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx45(
2266
+ var CommandShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx44(
2300
2267
  "span",
2301
2268
  {
2302
2269
  className: cn("ml-auto text-xs tracking-widest text-text-tertiary", className),
@@ -2306,12 +2273,12 @@ var CommandShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx45(
2306
2273
  CommandShortcut.displayName = "CommandShortcut";
2307
2274
 
2308
2275
  // src/components/navigation-menu.tsx
2309
- import * as React39 from "react";
2276
+ import * as React38 from "react";
2310
2277
  import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
2311
2278
  import { cva as cva6 } from "class-variance-authority";
2312
2279
  import { ChevronDown as ChevronDown4 } from "lucide-react";
2313
- import { jsx as jsx46, jsxs as jsxs25 } from "react/jsx-runtime";
2314
- var NavigationMenu = React39.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs25(
2280
+ import { jsx as jsx45, jsxs as jsxs24 } from "react/jsx-runtime";
2281
+ var NavigationMenu = React38.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs24(
2315
2282
  NavigationMenuPrimitive.Root,
2316
2283
  {
2317
2284
  ref,
@@ -2319,12 +2286,12 @@ var NavigationMenu = React39.forwardRef(({ className, children, ...props }, ref)
2319
2286
  ...props,
2320
2287
  children: [
2321
2288
  children,
2322
- /* @__PURE__ */ jsx46(NavigationMenuViewport, {})
2289
+ /* @__PURE__ */ jsx45(NavigationMenuViewport, {})
2323
2290
  ]
2324
2291
  }
2325
2292
  ));
2326
2293
  NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
2327
- var NavigationMenuList = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
2294
+ var NavigationMenuList = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
2328
2295
  NavigationMenuPrimitive.List,
2329
2296
  {
2330
2297
  ref,
@@ -2337,7 +2304,7 @@ var NavigationMenuItem = NavigationMenuPrimitive.Item;
2337
2304
  var navigationMenuTriggerStyle = cva6(
2338
2305
  "group inline-flex h-10 w-max cursor-pointer items-center justify-center rounded-md bg-bg-elevated px-4 py-2 text-sm font-medium transition-colors duration-fast hover:bg-bg-secondary hover:text-text-primary focus:bg-bg-secondary focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-bg-secondary"
2339
2306
  );
2340
- var NavigationMenuTrigger = React39.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs25(
2307
+ var NavigationMenuTrigger = React38.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs24(
2341
2308
  NavigationMenuPrimitive.Trigger,
2342
2309
  {
2343
2310
  ref,
@@ -2346,7 +2313,7 @@ var NavigationMenuTrigger = React39.forwardRef(({ className, children, ...props
2346
2313
  children: [
2347
2314
  children,
2348
2315
  " ",
2349
- /* @__PURE__ */ jsx46(
2316
+ /* @__PURE__ */ jsx45(
2350
2317
  ChevronDown4,
2351
2318
  {
2352
2319
  className: "relative top-[1px] ml-1 h-4 w-4 transition duration-200 group-data-[state=open]:rotate-180",
@@ -2357,7 +2324,7 @@ var NavigationMenuTrigger = React39.forwardRef(({ className, children, ...props
2357
2324
  }
2358
2325
  ));
2359
2326
  NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
2360
- var NavigationMenuContent = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
2327
+ var NavigationMenuContent = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
2361
2328
  NavigationMenuPrimitive.Content,
2362
2329
  {
2363
2330
  ref,
@@ -2370,7 +2337,7 @@ var NavigationMenuContent = React39.forwardRef(({ className, ...props }, ref) =>
2370
2337
  ));
2371
2338
  NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
2372
2339
  var NavigationMenuLink = NavigationMenuPrimitive.Link;
2373
- var NavigationMenuViewport = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx46(
2340
+ var NavigationMenuViewport = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx45(
2374
2341
  NavigationMenuPrimitive.Viewport,
2375
2342
  {
2376
2343
  ref,
@@ -2382,7 +2349,7 @@ var NavigationMenuViewport = React39.forwardRef(({ className, ...props }, ref) =
2382
2349
  }
2383
2350
  ) }));
2384
2351
  NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
2385
- var NavigationMenuIndicator = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
2352
+ var NavigationMenuIndicator = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
2386
2353
  NavigationMenuPrimitive.Indicator,
2387
2354
  {
2388
2355
  ref,
@@ -2391,7 +2358,7 @@ var NavigationMenuIndicator = React39.forwardRef(({ className, ...props }, ref)
2391
2358
  className
2392
2359
  ),
2393
2360
  ...props,
2394
- children: /* @__PURE__ */ jsx46("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border-subtle shadow-md" })
2361
+ children: /* @__PURE__ */ jsx45("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border-subtle shadow-md" })
2395
2362
  }
2396
2363
  ));
2397
2364
  NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
@@ -2454,10 +2421,10 @@ function useTheme() {
2454
2421
 
2455
2422
  // src/components/sonner.tsx
2456
2423
  import { Toaster as SonnerToaster, toast } from "sonner";
2457
- import { jsx as jsx47 } from "react/jsx-runtime";
2424
+ import { jsx as jsx46 } from "react/jsx-runtime";
2458
2425
  var Toaster = ({ ...props }) => {
2459
2426
  const { resolvedTheme } = useTheme();
2460
- return /* @__PURE__ */ jsx47(
2427
+ return /* @__PURE__ */ jsx46(
2461
2428
  SonnerToaster,
2462
2429
  {
2463
2430
  theme: resolvedTheme,
@@ -2479,19 +2446,19 @@ var Toaster = ({ ...props }) => {
2479
2446
  import { Sun, Moon } from "lucide-react";
2480
2447
 
2481
2448
  // src/components/top-bar-utilities.tsx
2482
- import * as React40 from "react";
2483
- import { jsx as jsx48, jsxs as jsxs26 } from "react/jsx-runtime";
2449
+ import * as React39 from "react";
2450
+ import { jsx as jsx47, jsxs as jsxs25 } from "react/jsx-runtime";
2484
2451
  var topBarMarkClass = "relative flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-lg text-text-secondary transition-colors duration-fast hover:bg-[var(--hov-bg)] hover:text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus [&>svg]:size-[18px]";
2485
- var TopBarUtilities = React40.forwardRef(
2486
- ({ items, className, ...props }, ref) => /* @__PURE__ */ jsx48("div", { ref, className: cn("flex items-center gap-1", className), ...props, children: items.map(({ name, icon, onClick }) => /* @__PURE__ */ jsxs26(Tooltip, { children: [
2487
- /* @__PURE__ */ jsx48(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx48("button", { type: "button", className: topBarMarkClass, "aria-label": name, onClick, children: icon }) }),
2488
- /* @__PURE__ */ jsx48(TooltipContent, { children: name })
2452
+ var TopBarUtilities = React39.forwardRef(
2453
+ ({ items, className, ...props }, ref) => /* @__PURE__ */ jsx47("div", { ref, className: cn("flex items-center gap-1", className), ...props, children: items.map(({ name, icon, onClick }) => /* @__PURE__ */ jsxs25(Tooltip, { children: [
2454
+ /* @__PURE__ */ jsx47(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx47("button", { type: "button", className: topBarMarkClass, "aria-label": name, onClick, children: icon }) }),
2455
+ /* @__PURE__ */ jsx47(TooltipContent, { children: name })
2489
2456
  ] }, name)) })
2490
2457
  );
2491
2458
  TopBarUtilities.displayName = "TopBarUtilities";
2492
2459
 
2493
2460
  // src/components/theme-toggle.tsx
2494
- import { jsx as jsx49 } from "react/jsx-runtime";
2461
+ import { jsx as jsx48 } from "react/jsx-runtime";
2495
2462
  var icons = {
2496
2463
  light: Sun,
2497
2464
  dark: Moon
@@ -2501,7 +2468,7 @@ function ThemeToggle() {
2501
2468
  const Icon = icons[resolvedTheme];
2502
2469
  const next = resolvedTheme === "light" ? "dark" : "light";
2503
2470
  const label = theme === "system" ? `Following your device (${resolvedTheme}). Switch to ${next}.` : `Switch to ${next} theme`;
2504
- return /* @__PURE__ */ jsx49(
2471
+ return /* @__PURE__ */ jsx48(
2505
2472
  "button",
2506
2473
  {
2507
2474
  type: "button",
@@ -2509,7 +2476,7 @@ function ThemeToggle() {
2509
2476
  className: topBarMarkClass,
2510
2477
  "aria-label": label,
2511
2478
  title: label,
2512
- children: /* @__PURE__ */ jsx49(Icon, {})
2479
+ children: /* @__PURE__ */ jsx48(Icon, {})
2513
2480
  }
2514
2481
  );
2515
2482
  }
@@ -2517,9 +2484,9 @@ function ThemeToggle() {
2517
2484
  // src/components/calendar.tsx
2518
2485
  import { ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight6 } from "lucide-react";
2519
2486
  import { DayPicker } from "react-day-picker";
2520
- import { jsx as jsx50 } from "react/jsx-runtime";
2487
+ import { jsx as jsx49 } from "react/jsx-runtime";
2521
2488
  function Calendar({ className, classNames, showOutsideDays = true, ...props }) {
2522
- return /* @__PURE__ */ jsx50(
2489
+ return /* @__PURE__ */ jsx49(
2523
2490
  DayPicker,
2524
2491
  {
2525
2492
  showOutsideDays,
@@ -2577,7 +2544,7 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }) {
2577
2544
  ...classNames
2578
2545
  },
2579
2546
  components: {
2580
- Chevron: ({ className: cls, orientation, ...rest }) => orientation === "left" ? /* @__PURE__ */ jsx50(ChevronLeft2, { className: cn("size-4", cls), ...rest }) : /* @__PURE__ */ jsx50(ChevronRight6, { className: cn("size-4", cls), ...rest })
2547
+ Chevron: ({ className: cls, orientation, ...rest }) => orientation === "left" ? /* @__PURE__ */ jsx49(ChevronLeft2, { className: cn("size-4", cls), ...rest }) : /* @__PURE__ */ jsx49(ChevronRight6, { className: cn("size-4", cls), ...rest })
2581
2548
  },
2582
2549
  ...props
2583
2550
  }
@@ -2586,9 +2553,9 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }) {
2586
2553
  Calendar.displayName = "Calendar";
2587
2554
 
2588
2555
  // src/components/date-picker.tsx
2589
- import * as React41 from "react";
2556
+ import * as React40 from "react";
2590
2557
  import { Calendar as CalendarIcon } from "lucide-react";
2591
- import { jsx as jsx51, jsxs as jsxs27 } from "react/jsx-runtime";
2558
+ import { jsx as jsx50, jsxs as jsxs26 } from "react/jsx-runtime";
2592
2559
  var DEFAULT_FORMAT = {
2593
2560
  year: "numeric",
2594
2561
  month: "long",
@@ -2601,9 +2568,9 @@ function DatePicker({
2601
2568
  disabled,
2602
2569
  className
2603
2570
  }) {
2604
- const [open, setOpen] = React41.useState(false);
2605
- return /* @__PURE__ */ jsxs27(Popover, { open, onOpenChange: setOpen, children: [
2606
- /* @__PURE__ */ jsx51(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs27(
2571
+ const [open, setOpen] = React40.useState(false);
2572
+ return /* @__PURE__ */ jsxs26(Popover, { open, onOpenChange: setOpen, children: [
2573
+ /* @__PURE__ */ jsx50(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs26(
2607
2574
  Button,
2608
2575
  {
2609
2576
  type: "button",
@@ -2611,12 +2578,12 @@ function DatePicker({
2611
2578
  disabled,
2612
2579
  className: cn("w-[240px] justify-start gap-2 text-left font-regular", !value && "text-text-tertiary", className),
2613
2580
  children: [
2614
- /* @__PURE__ */ jsx51(CalendarIcon, { className: "size-4 shrink-0" }),
2581
+ /* @__PURE__ */ jsx50(CalendarIcon, { className: "size-4 shrink-0" }),
2615
2582
  value ? value.toLocaleDateString(void 0, DEFAULT_FORMAT) : placeholder
2616
2583
  ]
2617
2584
  }
2618
2585
  ) }),
2619
- /* @__PURE__ */ jsx51(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ jsx51(
2586
+ /* @__PURE__ */ jsx50(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ jsx50(
2620
2587
  Calendar,
2621
2588
  {
2622
2589
  mode: "single",
@@ -2633,20 +2600,20 @@ function DatePicker({
2633
2600
  DatePicker.displayName = "DatePicker";
2634
2601
 
2635
2602
  // src/components/add-picker.tsx
2636
- import * as React42 from "react";
2603
+ import * as React41 from "react";
2637
2604
  import { Plus } from "lucide-react";
2638
- import { jsx as jsx52, jsxs as jsxs28 } from "react/jsx-runtime";
2639
- var AddPicker = React42.forwardRef(
2605
+ import { jsx as jsx51, jsxs as jsxs27 } from "react/jsx-runtime";
2606
+ var AddPicker = React41.forwardRef(
2640
2607
  ({ label, noun, items, exclude, onPick, className }, ref) => {
2641
- const [open, setOpen] = React42.useState(false);
2642
- const [q, setQ] = React42.useState("");
2608
+ const [open, setOpen] = React41.useState(false);
2609
+ const [q, setQ] = React41.useState("");
2643
2610
  const taken = exclude ?? [];
2644
2611
  const needle = q.toLowerCase();
2645
2612
  const matches = items.filter(
2646
2613
  (item) => !taken.includes(item.id) && (item.name.toLowerCase().includes(needle) || !!item.sub?.toLowerCase().includes(needle))
2647
2614
  );
2648
2615
  const search = items.length > 1 ? `Search ${items.length} ${noun}` : `Search ${noun}`;
2649
- return /* @__PURE__ */ jsxs28(
2616
+ return /* @__PURE__ */ jsxs27(
2650
2617
  Popover,
2651
2618
  {
2652
2619
  open,
@@ -2655,15 +2622,15 @@ var AddPicker = React42.forwardRef(
2655
2622
  if (!next) setQ("");
2656
2623
  },
2657
2624
  children: [
2658
- /* @__PURE__ */ jsx52(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs28(Button, { ref, variant: "ghost", size: "xs", className: cn("shrink-0", className), children: [
2659
- /* @__PURE__ */ jsx52(Plus, { className: "size-4", "aria-hidden": true }),
2625
+ /* @__PURE__ */ jsx51(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs27(Button, { ref, variant: "ghost", size: "xs", className: cn("shrink-0", className), children: [
2626
+ /* @__PURE__ */ jsx51(Plus, { className: "size-4", "aria-hidden": true }),
2660
2627
  label
2661
2628
  ] }) }),
2662
- /* @__PURE__ */ jsx52(PopoverContent, { align: "end", className: "w-72 p-0", children: /* @__PURE__ */ jsxs28(Command, { shouldFilter: false, label: search, children: [
2663
- /* @__PURE__ */ jsx52(CommandInput, { autoFocus: true, value: q, onValueChange: setQ, placeholder: search }),
2664
- /* @__PURE__ */ jsxs28(CommandList, { className: "max-h-[18rem] p-1", children: [
2665
- /* @__PURE__ */ jsx52(CommandEmpty, { children: q ? `No ${noun} match.` : `No ${noun} left to add.` }),
2666
- matches.map((item) => /* @__PURE__ */ jsx52(
2629
+ /* @__PURE__ */ jsx51(PopoverContent, { align: "end", className: "w-72 p-0", children: /* @__PURE__ */ jsxs27(Command, { shouldFilter: false, label: search, children: [
2630
+ /* @__PURE__ */ jsx51(CommandInput, { autoFocus: true, value: q, onValueChange: setQ, placeholder: search }),
2631
+ /* @__PURE__ */ jsxs27(CommandList, { className: "max-h-[18rem] p-1", children: [
2632
+ /* @__PURE__ */ jsx51(CommandEmpty, { children: q ? `No ${noun} match.` : `No ${noun} left to add.` }),
2633
+ matches.map((item) => /* @__PURE__ */ jsx51(
2667
2634
  CommandItem,
2668
2635
  {
2669
2636
  value: item.id,
@@ -2674,7 +2641,7 @@ var AddPicker = React42.forwardRef(
2674
2641
  setOpen(false);
2675
2642
  setQ("");
2676
2643
  },
2677
- children: /* @__PURE__ */ jsx52("span", { className: "truncate", children: item.name })
2644
+ children: /* @__PURE__ */ jsx51("span", { className: "truncate", children: item.name })
2678
2645
  },
2679
2646
  item.id
2680
2647
  ))
@@ -2688,31 +2655,31 @@ var AddPicker = React42.forwardRef(
2688
2655
  AddPicker.displayName = "AddPicker";
2689
2656
 
2690
2657
  // src/components/carousel.tsx
2691
- import * as React43 from "react";
2658
+ import * as React42 from "react";
2692
2659
  import useEmblaCarousel from "embla-carousel-react";
2693
2660
  import { ArrowLeft, ArrowRight } from "lucide-react";
2694
- import { jsx as jsx53, jsxs as jsxs29 } from "react/jsx-runtime";
2695
- var CarouselContext = React43.createContext(null);
2661
+ import { jsx as jsx52, jsxs as jsxs28 } from "react/jsx-runtime";
2662
+ var CarouselContext = React42.createContext(null);
2696
2663
  function useCarousel() {
2697
- const context = React43.useContext(CarouselContext);
2664
+ const context = React42.useContext(CarouselContext);
2698
2665
  if (!context) throw new Error("useCarousel must be used within a <Carousel />");
2699
2666
  return context;
2700
2667
  }
2701
- var Carousel = React43.forwardRef(({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }, ref) => {
2668
+ var Carousel = React42.forwardRef(({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }, ref) => {
2702
2669
  const [carouselRef, api] = useEmblaCarousel(
2703
2670
  { ...opts, axis: orientation === "horizontal" ? "x" : "y" },
2704
2671
  plugins
2705
2672
  );
2706
- const [canScrollPrev, setCanScrollPrev] = React43.useState(false);
2707
- const [canScrollNext, setCanScrollNext] = React43.useState(false);
2708
- const onSelect = React43.useCallback((emblaApi) => {
2673
+ const [canScrollPrev, setCanScrollPrev] = React42.useState(false);
2674
+ const [canScrollNext, setCanScrollNext] = React42.useState(false);
2675
+ const onSelect = React42.useCallback((emblaApi) => {
2709
2676
  if (!emblaApi) return;
2710
2677
  setCanScrollPrev(emblaApi.canScrollPrev());
2711
2678
  setCanScrollNext(emblaApi.canScrollNext());
2712
2679
  }, []);
2713
- const scrollPrev = React43.useCallback(() => api?.scrollPrev(), [api]);
2714
- const scrollNext = React43.useCallback(() => api?.scrollNext(), [api]);
2715
- const handleKeyDown = React43.useCallback(
2680
+ const scrollPrev = React42.useCallback(() => api?.scrollPrev(), [api]);
2681
+ const scrollNext = React42.useCallback(() => api?.scrollNext(), [api]);
2682
+ const handleKeyDown = React42.useCallback(
2716
2683
  (event) => {
2717
2684
  if (event.key === "ArrowLeft") {
2718
2685
  event.preventDefault();
@@ -2724,11 +2691,11 @@ var Carousel = React43.forwardRef(({ orientation = "horizontal", opts, setApi, p
2724
2691
  },
2725
2692
  [scrollPrev, scrollNext]
2726
2693
  );
2727
- React43.useEffect(() => {
2694
+ React42.useEffect(() => {
2728
2695
  if (!api || !setApi) return;
2729
2696
  setApi(api);
2730
2697
  }, [api, setApi]);
2731
- React43.useEffect(() => {
2698
+ React42.useEffect(() => {
2732
2699
  if (!api) return;
2733
2700
  onSelect(api);
2734
2701
  api.on("reInit", onSelect);
@@ -2738,7 +2705,7 @@ var Carousel = React43.forwardRef(({ orientation = "horizontal", opts, setApi, p
2738
2705
  api.off("select", onSelect);
2739
2706
  };
2740
2707
  }, [api, onSelect]);
2741
- return /* @__PURE__ */ jsx53(
2708
+ return /* @__PURE__ */ jsx52(
2742
2709
  CarouselContext.Provider,
2743
2710
  {
2744
2711
  value: {
@@ -2751,7 +2718,7 @@ var Carousel = React43.forwardRef(({ orientation = "horizontal", opts, setApi, p
2751
2718
  canScrollPrev,
2752
2719
  canScrollNext
2753
2720
  },
2754
- children: /* @__PURE__ */ jsx53(
2721
+ children: /* @__PURE__ */ jsx52(
2755
2722
  "div",
2756
2723
  {
2757
2724
  ref,
@@ -2767,10 +2734,10 @@ var Carousel = React43.forwardRef(({ orientation = "horizontal", opts, setApi, p
2767
2734
  );
2768
2735
  });
2769
2736
  Carousel.displayName = "Carousel";
2770
- var CarouselContent = React43.forwardRef(
2737
+ var CarouselContent = React42.forwardRef(
2771
2738
  ({ className, ...props }, ref) => {
2772
2739
  const { carouselRef, orientation } = useCarousel();
2773
- return /* @__PURE__ */ jsx53("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx53(
2740
+ return /* @__PURE__ */ jsx52("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx52(
2774
2741
  "div",
2775
2742
  {
2776
2743
  ref,
@@ -2781,10 +2748,10 @@ var CarouselContent = React43.forwardRef(
2781
2748
  }
2782
2749
  );
2783
2750
  CarouselContent.displayName = "CarouselContent";
2784
- var CarouselItem = React43.forwardRef(
2751
+ var CarouselItem = React42.forwardRef(
2785
2752
  ({ className, ...props }, ref) => {
2786
2753
  const { orientation } = useCarousel();
2787
- return /* @__PURE__ */ jsx53(
2754
+ return /* @__PURE__ */ jsx52(
2788
2755
  "div",
2789
2756
  {
2790
2757
  ref,
@@ -2801,9 +2768,9 @@ var CarouselItem = React43.forwardRef(
2801
2768
  }
2802
2769
  );
2803
2770
  CarouselItem.displayName = "CarouselItem";
2804
- var CarouselPrevious = React43.forwardRef(({ className, ...props }, ref) => {
2771
+ var CarouselPrevious = React42.forwardRef(({ className, ...props }, ref) => {
2805
2772
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
2806
- return /* @__PURE__ */ jsxs29(
2773
+ return /* @__PURE__ */ jsxs28(
2807
2774
  "button",
2808
2775
  {
2809
2776
  ref,
@@ -2818,16 +2785,16 @@ var CarouselPrevious = React43.forwardRef(({ className, ...props }, ref) => {
2818
2785
  onClick: scrollPrev,
2819
2786
  ...props,
2820
2787
  children: [
2821
- /* @__PURE__ */ jsx53(ArrowLeft, { className: "size-4" }),
2822
- /* @__PURE__ */ jsx53("span", { className: "sr-only", children: "Previous slide" })
2788
+ /* @__PURE__ */ jsx52(ArrowLeft, { className: "size-4" }),
2789
+ /* @__PURE__ */ jsx52("span", { className: "sr-only", children: "Previous slide" })
2823
2790
  ]
2824
2791
  }
2825
2792
  );
2826
2793
  });
2827
2794
  CarouselPrevious.displayName = "CarouselPrevious";
2828
- var CarouselNext = React43.forwardRef(({ className, ...props }, ref) => {
2795
+ var CarouselNext = React42.forwardRef(({ className, ...props }, ref) => {
2829
2796
  const { orientation, scrollNext, canScrollNext } = useCarousel();
2830
- return /* @__PURE__ */ jsxs29(
2797
+ return /* @__PURE__ */ jsxs28(
2831
2798
  "button",
2832
2799
  {
2833
2800
  ref,
@@ -2842,8 +2809,8 @@ var CarouselNext = React43.forwardRef(({ className, ...props }, ref) => {
2842
2809
  onClick: scrollNext,
2843
2810
  ...props,
2844
2811
  children: [
2845
- /* @__PURE__ */ jsx53(ArrowRight, { className: "size-4" }),
2846
- /* @__PURE__ */ jsx53("span", { className: "sr-only", children: "Next slide" })
2812
+ /* @__PURE__ */ jsx52(ArrowRight, { className: "size-4" }),
2813
+ /* @__PURE__ */ jsx52("span", { className: "sr-only", children: "Next slide" })
2847
2814
  ]
2848
2815
  }
2849
2816
  );
@@ -2851,7 +2818,7 @@ var CarouselNext = React43.forwardRef(({ className, ...props }, ref) => {
2851
2818
  CarouselNext.displayName = "CarouselNext";
2852
2819
 
2853
2820
  // src/components/form.tsx
2854
- import * as React44 from "react";
2821
+ import * as React43 from "react";
2855
2822
  import { Slot as Slot2 } from "@radix-ui/react-slot";
2856
2823
  import {
2857
2824
  Controller,
@@ -2859,16 +2826,16 @@ import {
2859
2826
  useFormContext,
2860
2827
  useFormState
2861
2828
  } from "react-hook-form";
2862
- import { jsx as jsx54 } from "react/jsx-runtime";
2829
+ import { jsx as jsx53 } from "react/jsx-runtime";
2863
2830
  var Form = FormProvider;
2864
- var FormFieldContext = React44.createContext(null);
2831
+ var FormFieldContext = React43.createContext(null);
2865
2832
  function FormField({ ...props }) {
2866
- return /* @__PURE__ */ jsx54(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx54(Controller, { ...props }) });
2833
+ return /* @__PURE__ */ jsx53(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx53(Controller, { ...props }) });
2867
2834
  }
2868
- var FormItemContext = React44.createContext(null);
2835
+ var FormItemContext = React43.createContext(null);
2869
2836
  function useFormField() {
2870
- const fieldContext = React44.useContext(FormFieldContext);
2871
- const itemContext = React44.useContext(FormItemContext);
2837
+ const fieldContext = React43.useContext(FormFieldContext);
2838
+ const itemContext = React43.useContext(FormItemContext);
2872
2839
  const { getFieldState } = useFormContext();
2873
2840
  const formState = useFormState({ name: fieldContext?.name });
2874
2841
  if (!fieldContext) throw new Error("useFormField should be used within <FormField>");
@@ -2883,16 +2850,16 @@ function useFormField() {
2883
2850
  ...fieldState
2884
2851
  };
2885
2852
  }
2886
- var FormItem = React44.forwardRef(
2853
+ var FormItem = React43.forwardRef(
2887
2854
  ({ className, ...props }, ref) => {
2888
- const id = React44.useId();
2889
- return /* @__PURE__ */ jsx54(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx54("div", { ref, className: cn("space-y-2", className), ...props }) });
2855
+ const id = React43.useId();
2856
+ return /* @__PURE__ */ jsx53(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx53("div", { ref, className: cn("space-y-2", className), ...props }) });
2890
2857
  }
2891
2858
  );
2892
2859
  FormItem.displayName = "FormItem";
2893
- var FormLabel = React44.forwardRef(({ className, ...props }, ref) => {
2860
+ var FormLabel = React43.forwardRef(({ className, ...props }, ref) => {
2894
2861
  const { error, formItemId } = useFormField();
2895
- return /* @__PURE__ */ jsx54(
2862
+ return /* @__PURE__ */ jsx53(
2896
2863
  Label2,
2897
2864
  {
2898
2865
  ref,
@@ -2903,9 +2870,9 @@ var FormLabel = React44.forwardRef(({ className, ...props }, ref) => {
2903
2870
  );
2904
2871
  });
2905
2872
  FormLabel.displayName = "FormLabel";
2906
- var FormControl = React44.forwardRef(({ ...props }, ref) => {
2873
+ var FormControl = React43.forwardRef(({ ...props }, ref) => {
2907
2874
  const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
2908
- return /* @__PURE__ */ jsx54(
2875
+ return /* @__PURE__ */ jsx53(
2909
2876
  Slot2,
2910
2877
  {
2911
2878
  ref,
@@ -2917,9 +2884,9 @@ var FormControl = React44.forwardRef(({ ...props }, ref) => {
2917
2884
  );
2918
2885
  });
2919
2886
  FormControl.displayName = "FormControl";
2920
- var FormDescription = React44.forwardRef(({ className, ...props }, ref) => {
2887
+ var FormDescription = React43.forwardRef(({ className, ...props }, ref) => {
2921
2888
  const { formDescriptionId } = useFormField();
2922
- return /* @__PURE__ */ jsx54(
2889
+ return /* @__PURE__ */ jsx53(
2923
2890
  "p",
2924
2891
  {
2925
2892
  ref,
@@ -2930,11 +2897,11 @@ var FormDescription = React44.forwardRef(({ className, ...props }, ref) => {
2930
2897
  );
2931
2898
  });
2932
2899
  FormDescription.displayName = "FormDescription";
2933
- var FormMessage = React44.forwardRef(({ className, children, ...props }, ref) => {
2900
+ var FormMessage = React43.forwardRef(({ className, children, ...props }, ref) => {
2934
2901
  const { error, formMessageId } = useFormField();
2935
2902
  const body = error ? String(error?.message ?? "") : children;
2936
2903
  if (!body) return null;
2937
- return /* @__PURE__ */ jsx54(
2904
+ return /* @__PURE__ */ jsx53(
2938
2905
  "p",
2939
2906
  {
2940
2907
  ref,
@@ -2948,9 +2915,9 @@ var FormMessage = React44.forwardRef(({ className, children, ...props }, ref) =>
2948
2915
  FormMessage.displayName = "FormMessage";
2949
2916
 
2950
2917
  // src/components/status-dot.tsx
2951
- import * as React45 from "react";
2918
+ import * as React44 from "react";
2952
2919
  import { cva as cva7 } from "class-variance-authority";
2953
- import { jsx as jsx55, jsxs as jsxs30 } from "react/jsx-runtime";
2920
+ import { jsx as jsx54, jsxs as jsxs29 } from "react/jsx-runtime";
2954
2921
  var statusDotVariants = cva7("inline-block shrink-0 rounded-full", {
2955
2922
  variants: {
2956
2923
  status: {
@@ -2964,8 +2931,8 @@ var statusDotVariants = cva7("inline-block shrink-0 rounded-full", {
2964
2931
  },
2965
2932
  defaultVariants: { status: "neutral", size: "md" }
2966
2933
  });
2967
- var StatusDot = React45.forwardRef(
2968
- ({ className, status, size, pulse = false, label, ...props }, ref) => /* @__PURE__ */ jsxs30(
2934
+ var StatusDot = React44.forwardRef(
2935
+ ({ className, status, size, pulse = false, label, ...props }, ref) => /* @__PURE__ */ jsxs29(
2969
2936
  "span",
2970
2937
  {
2971
2938
  ref,
@@ -2973,14 +2940,14 @@ var StatusDot = React45.forwardRef(
2973
2940
  className: cn("relative inline-flex", className),
2974
2941
  ...props,
2975
2942
  children: [
2976
- pulse && /* @__PURE__ */ jsx55(
2943
+ pulse && /* @__PURE__ */ jsx54(
2977
2944
  "span",
2978
2945
  {
2979
2946
  "aria-hidden": "true",
2980
2947
  className: cn(statusDotVariants({ status, size }), "absolute inset-0 animate-ping opacity-75")
2981
2948
  }
2982
2949
  ),
2983
- /* @__PURE__ */ jsx55("span", { className: cn(statusDotVariants({ status, size })) })
2950
+ /* @__PURE__ */ jsx54("span", { className: cn(statusDotVariants({ status, size })) })
2984
2951
  ]
2985
2952
  }
2986
2953
  )
@@ -2988,11 +2955,11 @@ var StatusDot = React45.forwardRef(
2988
2955
  StatusDot.displayName = "StatusDot";
2989
2956
 
2990
2957
  // src/components/docs-link.tsx
2991
- import * as React46 from "react";
2958
+ import * as React45 from "react";
2992
2959
  import { BookOpen, ExternalLink } from "lucide-react";
2993
- import { jsx as jsx56, jsxs as jsxs31 } from "react/jsx-runtime";
2994
- var DocsLink = React46.forwardRef(
2995
- ({ href = "https://docs.lessly.com", label = "Docs", showLeadingIcon = true, className, ...props }, ref) => /* @__PURE__ */ jsxs31(
2960
+ import { jsx as jsx55, jsxs as jsxs30 } from "react/jsx-runtime";
2961
+ var DocsLink = React45.forwardRef(
2962
+ ({ href = "https://docs.lessly.com", label = "Docs", showLeadingIcon = true, className, ...props }, ref) => /* @__PURE__ */ jsxs30(
2996
2963
  "a",
2997
2964
  {
2998
2965
  ref,
@@ -3005,9 +2972,9 @@ var DocsLink = React46.forwardRef(
3005
2972
  ),
3006
2973
  ...props,
3007
2974
  children: [
3008
- showLeadingIcon && /* @__PURE__ */ jsx56(BookOpen, { className: "size-4", "aria-hidden": "true" }),
2975
+ showLeadingIcon && /* @__PURE__ */ jsx55(BookOpen, { className: "size-4", "aria-hidden": "true" }),
3009
2976
  label,
3010
- /* @__PURE__ */ jsx56(ExternalLink, { className: "size-3 text-text-tertiary", "aria-hidden": "true" })
2977
+ /* @__PURE__ */ jsx55(ExternalLink, { className: "size-3 text-text-tertiary", "aria-hidden": "true" })
3011
2978
  ]
3012
2979
  }
3013
2980
  )
@@ -3015,28 +2982,28 @@ var DocsLink = React46.forwardRef(
3015
2982
  DocsLink.displayName = "DocsLink";
3016
2983
 
3017
2984
  // src/components/empty-state.tsx
3018
- import * as React47 from "react";
3019
- import { jsx as jsx57, jsxs as jsxs32 } from "react/jsx-runtime";
3020
- var EmptyState = React47.forwardRef(
3021
- ({ icon: Icon, title, titleAs: TitleTag = "p", description, action, className, ...props }, ref) => /* @__PURE__ */ jsxs32("div", { ref, className: cn("flex flex-col items-center px-4 py-10 text-center", className), ...props, children: [
3022
- Icon && /* @__PURE__ */ jsx57(Icon, { className: "mb-3 size-6 text-text-tertiary", "aria-hidden": "true" }),
3023
- /* @__PURE__ */ jsx57(TitleTag, { className: "text-sm text-text-secondary", children: title }),
3024
- description && /* @__PURE__ */ jsx57("p", { className: "mt-1 max-w-sm text-sm text-text-tertiary", children: description }),
3025
- action && /* @__PURE__ */ jsx57("div", { className: "mt-3", children: action })
2985
+ import * as React46 from "react";
2986
+ import { jsx as jsx56, jsxs as jsxs31 } from "react/jsx-runtime";
2987
+ var EmptyState = React46.forwardRef(
2988
+ ({ icon: Icon, title, titleAs: TitleTag = "p", description, action, className, ...props }, ref) => /* @__PURE__ */ jsxs31("div", { ref, className: cn("flex flex-col items-center px-4 py-10 text-center", className), ...props, children: [
2989
+ Icon && /* @__PURE__ */ jsx56(Icon, { className: "mb-3 size-6 text-text-tertiary", "aria-hidden": "true" }),
2990
+ /* @__PURE__ */ jsx56(TitleTag, { className: "text-sm text-text-secondary", children: title }),
2991
+ description && /* @__PURE__ */ jsx56("p", { className: "mt-1 max-w-sm text-sm text-text-tertiary", children: description }),
2992
+ action && /* @__PURE__ */ jsx56("div", { className: "mt-3", children: action })
3026
2993
  ] })
3027
2994
  );
3028
2995
  EmptyState.displayName = "EmptyState";
3029
2996
 
3030
2997
  // src/components/copy-button.tsx
3031
- import * as React48 from "react";
2998
+ import * as React47 from "react";
3032
2999
  import { Check as Check7, Copy } from "lucide-react";
3033
- import { jsx as jsx58, jsxs as jsxs33 } from "react/jsx-runtime";
3000
+ import { jsx as jsx57, jsxs as jsxs32 } from "react/jsx-runtime";
3034
3001
  var MASK = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
3035
- var CopyButton = React48.forwardRef(
3002
+ var CopyButton = React47.forwardRef(
3036
3003
  ({ value, label = "Copy", masked = false, className, variant = "ghost", size = "icon", onClick, ...props }, ref) => {
3037
- const [copied, setCopied] = React48.useState(false);
3038
- const timer = React48.useRef(void 0);
3039
- React48.useEffect(() => () => clearTimeout(timer.current), []);
3004
+ const [copied, setCopied] = React47.useState(false);
3005
+ const timer = React47.useRef(void 0);
3006
+ React47.useEffect(() => () => clearTimeout(timer.current), []);
3040
3007
  const handleClick = async (e) => {
3041
3008
  onClick?.(e);
3042
3009
  if (!navigator.clipboard?.writeText) return;
@@ -3054,7 +3021,7 @@ var CopyButton = React48.forwardRef(
3054
3021
  // itself at the height `size` already declares instead of taking a label's padding. At the
3055
3022
  // default `size="icon"` that is the same 40px square it always was; at `xs`/`sm` it is now
3056
3023
  // square rather than a wide pill (#432).
3057
- /* @__PURE__ */ jsx58(
3024
+ /* @__PURE__ */ jsx57(
3058
3025
  Button,
3059
3026
  {
3060
3027
  ref,
@@ -3065,13 +3032,13 @@ var CopyButton = React48.forwardRef(
3065
3032
  className: cn(className),
3066
3033
  ...props,
3067
3034
  "aria-label": copied ? "Copied" : masked ? `${label} ending ${tail}` : label,
3068
- icon: copied ? /* @__PURE__ */ jsx58(Check7, { className: "text-text-success" }) : /* @__PURE__ */ jsx58(Copy, {})
3035
+ icon: copied ? /* @__PURE__ */ jsx57(Check7, { className: "text-text-success" }) : /* @__PURE__ */ jsx57(Copy, {})
3069
3036
  }
3070
3037
  )
3071
3038
  );
3072
3039
  if (!masked) return button;
3073
- return /* @__PURE__ */ jsxs33("span", { className: "inline-flex items-center gap-1.5", children: [
3074
- /* @__PURE__ */ jsx58("code", { "aria-hidden": true, className: "font-mono text-xs text-text-tertiary", children: `${MASK}${tail}` }),
3040
+ return /* @__PURE__ */ jsxs32("span", { className: "inline-flex items-center gap-1.5", children: [
3041
+ /* @__PURE__ */ jsx57("code", { "aria-hidden": true, className: "font-mono text-xs text-text-tertiary", children: `${MASK}${tail}` }),
3075
3042
  button
3076
3043
  ] });
3077
3044
  }
@@ -3079,9 +3046,9 @@ var CopyButton = React48.forwardRef(
3079
3046
  CopyButton.displayName = "CopyButton";
3080
3047
 
3081
3048
  // src/components/stat-card.tsx
3082
- import * as React49 from "react";
3049
+ import * as React48 from "react";
3083
3050
  import { ArrowDown, ArrowUp, Info as Info2, Minus as Minus2 } from "lucide-react";
3084
- import { jsx as jsx59, jsxs as jsxs34 } from "react/jsx-runtime";
3051
+ import { jsx as jsx58, jsxs as jsxs33 } from "react/jsx-runtime";
3085
3052
  var directionIcons = {
3086
3053
  up: ArrowUp,
3087
3054
  down: ArrowDown,
@@ -3097,13 +3064,13 @@ var toneFromDirection = {
3097
3064
  down: "negative",
3098
3065
  neutral: "neutral"
3099
3066
  };
3100
- var StatCard = React49.forwardRef(
3067
+ var StatCard = React48.forwardRef(
3101
3068
  ({ label, value, delta, hint, sub, icon: Icon, trend, className, ...props }, ref) => {
3102
3069
  const direction = delta?.direction ?? "neutral";
3103
3070
  const tone = delta?.tone ?? toneFromDirection[direction];
3104
3071
  const DeltaIcon = directionIcons[direction];
3105
3072
  const deltaClass = toneClasses[tone];
3106
- return /* @__PURE__ */ jsxs34(
3073
+ return /* @__PURE__ */ jsxs33(
3107
3074
  "div",
3108
3075
  {
3109
3076
  ref,
@@ -3111,25 +3078,25 @@ var StatCard = React49.forwardRef(
3111
3078
  className: cn("rounded-xl border border-border-subtle bg-bg-overlay p-5", className),
3112
3079
  ...props,
3113
3080
  children: [
3114
- /* @__PURE__ */ jsxs34("div", { className: "flex items-center justify-between gap-2", children: [
3115
- /* @__PURE__ */ jsxs34("div", { className: "flex items-center gap-1.5", children: [
3116
- /* @__PURE__ */ jsx59("span", { className: "text-xs font-medium text-text-tertiary", children: label }),
3117
- hint && /* @__PURE__ */ jsx59(TooltipProvider, { children: /* @__PURE__ */ jsxs34(Tooltip, { children: [
3118
- /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59("button", { type: "button", "aria-label": "More info", className: "inline-flex cursor-pointer text-icon-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus rounded-sm", children: /* @__PURE__ */ jsx59(Info2, { className: "size-3.5", "aria-hidden": "true" }) }) }),
3119
- /* @__PURE__ */ jsx59(TooltipContent, { children: hint })
3081
+ /* @__PURE__ */ jsxs33("div", { className: "flex items-center justify-between gap-2", children: [
3082
+ /* @__PURE__ */ jsxs33("div", { className: "flex items-center gap-1.5", children: [
3083
+ /* @__PURE__ */ jsx58("span", { className: "text-xs font-medium text-text-tertiary", children: label }),
3084
+ hint && /* @__PURE__ */ jsx58(TooltipProvider, { children: /* @__PURE__ */ jsxs33(Tooltip, { children: [
3085
+ /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58("button", { type: "button", "aria-label": "More info", className: "inline-flex cursor-pointer text-icon-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus rounded-sm", children: /* @__PURE__ */ jsx58(Info2, { className: "size-3.5", "aria-hidden": "true" }) }) }),
3086
+ /* @__PURE__ */ jsx58(TooltipContent, { children: hint })
3120
3087
  ] }) })
3121
3088
  ] }),
3122
- Icon && /* @__PURE__ */ jsx59(Icon, { className: "size-4 text-icon-secondary", "aria-hidden": "true" })
3089
+ Icon && /* @__PURE__ */ jsx58(Icon, { className: "size-4 text-icon-secondary", "aria-hidden": "true" })
3123
3090
  ] }),
3124
- /* @__PURE__ */ jsx59("div", { className: "mt-2 text-3xl font-semibold text-text-primary", children: value }),
3125
- (delta || sub) && /* @__PURE__ */ jsxs34("div", { className: "mt-2 flex items-center gap-2 text-sm", children: [
3126
- delta && /* @__PURE__ */ jsxs34("span", { className: cn("inline-flex items-center gap-0.5 font-medium", deltaClass), children: [
3127
- /* @__PURE__ */ jsx59(DeltaIcon, { className: "size-3.5", "aria-hidden": "true" }),
3091
+ /* @__PURE__ */ jsx58("div", { className: "mt-2 text-3xl font-semibold text-text-primary", children: value }),
3092
+ (delta || sub) && /* @__PURE__ */ jsxs33("div", { className: "mt-2 flex items-center gap-2 text-sm", children: [
3093
+ delta && /* @__PURE__ */ jsxs33("span", { className: cn("inline-flex items-center gap-0.5 font-medium", deltaClass), children: [
3094
+ /* @__PURE__ */ jsx58(DeltaIcon, { className: "size-3.5", "aria-hidden": "true" }),
3128
3095
  delta.value
3129
3096
  ] }),
3130
- sub && /* @__PURE__ */ jsx59("span", { className: "text-text-tertiary", children: sub })
3097
+ sub && /* @__PURE__ */ jsx58("span", { className: "text-text-tertiary", children: sub })
3131
3098
  ] }),
3132
- trend !== void 0 && /* @__PURE__ */ jsx59("div", { "data-slot": "stat-card-trend", className: "mt-3 min-h-10", children: trend })
3099
+ trend !== void 0 && /* @__PURE__ */ jsx58("div", { "data-slot": "stat-card-trend", className: "mt-3 min-h-10", children: trend })
3133
3100
  ]
3134
3101
  }
3135
3102
  );
@@ -3138,17 +3105,17 @@ var StatCard = React49.forwardRef(
3138
3105
  StatCard.displayName = "StatCard";
3139
3106
 
3140
3107
  // src/components/confirm-dialog.tsx
3141
- import * as React51 from "react";
3108
+ import * as React50 from "react";
3142
3109
  import { Loader2 as Loader22 } from "lucide-react";
3143
3110
 
3144
3111
  // src/components/step-up-challenge.tsx
3145
- import * as React50 from "react";
3112
+ import * as React49 from "react";
3146
3113
  import { Fingerprint, Loader2 } from "lucide-react";
3147
- import { jsx as jsx60, jsxs as jsxs35 } from "react/jsx-runtime";
3114
+ import { jsx as jsx59, jsxs as jsxs34 } from "react/jsx-runtime";
3148
3115
  var DEFAULT_METHODS = ["passkey", "code"];
3149
3116
  var ATTEMPT_GAP_MS = 500;
3150
3117
  var FACTOR_SWITCH = "w-fit cursor-pointer rounded-sm text-sm text-text-secondary underline-offset-2 hover:text-text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus disabled:pointer-events-none disabled:opacity-50";
3151
- var StepUpChallenge = React50.forwardRef((props, ref) => {
3118
+ var StepUpChallenge = React49.forwardRef((props, ref) => {
3152
3119
  const {
3153
3120
  methods,
3154
3121
  defaultMethod,
@@ -3168,28 +3135,28 @@ var StepUpChallenge = React50.forwardRef((props, ref) => {
3168
3135
  const offered = methods && methods.length > 0 ? methods : DEFAULT_METHODS;
3169
3136
  const first = offered[0] ?? "passkey";
3170
3137
  const initial = defaultMethod && offered.includes(defaultMethod) ? defaultMethod : first;
3171
- const [method, setMethod] = React50.useState(initial);
3172
- const [code, setCode] = React50.useState("");
3173
- const [errorFactor, setErrorFactor] = React50.useState(initial);
3174
- const [attempted, setAttempted] = React50.useState(false);
3175
- const fieldRef = React50.useRef(null);
3176
- const mounted = React50.useRef(false);
3177
- const pending = React50.useRef(false);
3178
- const attemptedAt = React50.useRef(0);
3138
+ const [method, setMethod] = React49.useState(initial);
3139
+ const [code, setCode] = React49.useState("");
3140
+ const [errorFactor, setErrorFactor] = React49.useState(initial);
3141
+ const [attempted, setAttempted] = React49.useState(false);
3142
+ const fieldRef = React49.useRef(null);
3143
+ const mounted = React49.useRef(false);
3144
+ const pending = React49.useRef(false);
3145
+ const attemptedAt = React49.useRef(0);
3179
3146
  const active = offered.includes(method) ? method : first;
3180
3147
  const other = offered.find((m) => m !== active);
3181
3148
  const showError = Boolean(error) && errorFactor === active;
3182
- const reactId = React50.useId();
3149
+ const reactId = React49.useId();
3183
3150
  const fieldId = `${reactId}-code`;
3184
3151
  const errorId = `${reactId}-error`;
3185
- React50.useEffect(() => {
3152
+ React49.useEffect(() => {
3186
3153
  pending.current = false;
3187
3154
  }, [verifying, error]);
3188
- React50.useEffect(() => {
3155
+ React49.useEffect(() => {
3189
3156
  if (!error) return;
3190
3157
  fieldRef.current?.focus();
3191
3158
  }, [error]);
3192
- React50.useEffect(() => {
3159
+ React49.useEffect(() => {
3193
3160
  if (!mounted.current) {
3194
3161
  mounted.current = true;
3195
3162
  return;
@@ -3224,7 +3191,7 @@ var StepUpChallenge = React50.forwardRef((props, ref) => {
3224
3191
  const stopCodeBearingEvent = (event) => {
3225
3192
  event.stopPropagation();
3226
3193
  };
3227
- return /* @__PURE__ */ jsxs35(
3194
+ return /* @__PURE__ */ jsxs34(
3228
3195
  "div",
3229
3196
  {
3230
3197
  ...rest,
@@ -3232,15 +3199,15 @@ var StepUpChallenge = React50.forwardRef((props, ref) => {
3232
3199
  "aria-busy": verifying || void 0,
3233
3200
  className: cn("grid gap-4", className),
3234
3201
  children: [
3235
- active === "passkey" ? /* @__PURE__ */ jsxs35("div", { className: "grid justify-items-start gap-2", children: [
3236
- /* @__PURE__ */ jsx60(Fingerprint, { className: "size-5 text-text-secondary", "aria-hidden": "true" }),
3237
- /* @__PURE__ */ jsx60("p", { className: "text-sm text-text-secondary", children: "Your device will ask for your fingerprint, face or PIN." }),
3202
+ active === "passkey" ? /* @__PURE__ */ jsxs34("div", { className: "grid justify-items-start gap-2", children: [
3203
+ /* @__PURE__ */ jsx59(Fingerprint, { className: "size-5 text-text-secondary", "aria-hidden": "true" }),
3204
+ /* @__PURE__ */ jsx59("p", { className: "text-sm text-text-secondary", children: "Your device will ask for your fingerprint, face or PIN." }),
3238
3205
  other === "code" && // Not a `Button` (Guidelines/When it isn't a Button): a `Button` here would read as a
3239
3206
  // second action competing with the confirm below.
3240
- /* @__PURE__ */ jsx60("button", { type: "button", className: FACTOR_SWITCH, disabled: verifying, onClick: () => switchTo("code"), children: `Use a ${codeLength}-digit code instead` })
3241
- ] }) : /* @__PURE__ */ jsxs35("div", { className: "grid justify-items-start gap-2", children: [
3242
- /* @__PURE__ */ jsx60("label", { htmlFor: fieldId, className: "text-sm font-medium text-text-primary", children: `${codeLength}-digit code` }),
3243
- /* @__PURE__ */ jsx60(
3207
+ /* @__PURE__ */ jsx59("button", { type: "button", className: FACTOR_SWITCH, disabled: verifying, onClick: () => switchTo("code"), children: `Use a ${codeLength}-digit code instead` })
3208
+ ] }) : /* @__PURE__ */ jsxs34("div", { className: "grid justify-items-start gap-2", children: [
3209
+ /* @__PURE__ */ jsx59("label", { htmlFor: fieldId, className: "text-sm font-medium text-text-primary", children: `${codeLength}-digit code` }),
3210
+ /* @__PURE__ */ jsx59(
3244
3211
  "div",
3245
3212
  {
3246
3213
  "data-sensitive": "one-time-code",
@@ -3253,7 +3220,7 @@ var StepUpChallenge = React50.forwardRef((props, ref) => {
3253
3220
  onDrop: stopCodeBearingEvent,
3254
3221
  onKeyDown: stopCodeBearingKey,
3255
3222
  onKeyUp: stopCodeBearingKey,
3256
- children: /* @__PURE__ */ jsx60(
3223
+ children: /* @__PURE__ */ jsx59(
3257
3224
  InputOTP,
3258
3225
  {
3259
3226
  ref: fieldRef,
@@ -3274,18 +3241,18 @@ var StepUpChallenge = React50.forwardRef((props, ref) => {
3274
3241
  event.preventDefault();
3275
3242
  submit();
3276
3243
  },
3277
- children: /* @__PURE__ */ jsx60(InputOTPGroup, { children: Array.from({ length: codeLength }, (_, index) => /* @__PURE__ */ jsx60(InputOTPSlot, { index }, index)) })
3244
+ children: /* @__PURE__ */ jsx59(InputOTPGroup, { children: Array.from({ length: codeLength }, (_, index) => /* @__PURE__ */ jsx59(InputOTPSlot, { index }, index)) })
3278
3245
  }
3279
3246
  )
3280
3247
  }
3281
3248
  ),
3282
3249
  other === "passkey" && // The mirror of the line in the passkey pane — see the note there.
3283
- /* @__PURE__ */ jsx60("button", { type: "button", className: FACTOR_SWITCH, disabled: verifying, onClick: () => switchTo("passkey"), children: "Use a passkey instead" })
3250
+ /* @__PURE__ */ jsx59("button", { type: "button", className: FACTOR_SWITCH, disabled: verifying, onClick: () => switchTo("passkey"), children: "Use a passkey instead" })
3284
3251
  ] }),
3285
- showError && /* @__PURE__ */ jsx60(InlineError, { id: errorId, children: error }),
3286
- /* @__PURE__ */ jsxs35(DialogFooter, { children: [
3287
- onBack && /* @__PURE__ */ jsx60(Button, { type: "button", variant: "outline", size: "sm", disabled: verifying, onClick: onBack, children: backLabel }),
3288
- /* @__PURE__ */ jsx60(
3252
+ showError && /* @__PURE__ */ jsx59(InlineError, { id: errorId, children: error }),
3253
+ /* @__PURE__ */ jsxs34(DialogFooter, { children: [
3254
+ onBack && /* @__PURE__ */ jsx59(Button, { type: "button", variant: "outline", size: "sm", disabled: verifying, onClick: onBack, children: backLabel }),
3255
+ /* @__PURE__ */ jsx59(
3289
3256
  Button,
3290
3257
  {
3291
3258
  type: "button",
@@ -3295,7 +3262,7 @@ var StepUpChallenge = React50.forwardRef((props, ref) => {
3295
3262
  "aria-disabled": !canSubmit || void 0,
3296
3263
  "aria-busy": verifying || void 0,
3297
3264
  className: cn(!canSubmit && "opacity-50"),
3298
- icon: verifying ? /* @__PURE__ */ jsx60(Loader2, { className: "animate-spin" }) : void 0,
3265
+ icon: verifying ? /* @__PURE__ */ jsx59(Loader2, { className: "animate-spin" }) : void 0,
3299
3266
  onClick: submit,
3300
3267
  children: confirmLabel
3301
3268
  }
@@ -3308,9 +3275,9 @@ var StepUpChallenge = React50.forwardRef((props, ref) => {
3308
3275
  StepUpChallenge.displayName = "StepUpChallenge";
3309
3276
 
3310
3277
  // src/components/confirm-dialog.tsx
3311
- import { jsx as jsx61, jsxs as jsxs36 } from "react/jsx-runtime";
3312
- var InlineError = React51.forwardRef(
3313
- ({ children, className, ...props }, ref) => /* @__PURE__ */ jsx61(
3278
+ import { jsx as jsx60, jsxs as jsxs35 } from "react/jsx-runtime";
3279
+ var InlineError = React50.forwardRef(
3280
+ ({ children, className, ...props }, ref) => /* @__PURE__ */ jsx60(
3314
3281
  "div",
3315
3282
  {
3316
3283
  ref,
@@ -3340,14 +3307,14 @@ function ConfirmDialog({
3340
3307
  onConfirm,
3341
3308
  onError
3342
3309
  }) {
3343
- const [internalOpen, setInternalOpen] = React51.useState(false);
3310
+ const [internalOpen, setInternalOpen] = React50.useState(false);
3344
3311
  const isControlled = open !== void 0;
3345
3312
  const actualOpen = isControlled ? open : internalOpen;
3346
- const [busy, setBusy] = React51.useState(false);
3347
- const [error, setError] = React51.useState(null);
3348
- const [typed, setTyped] = React51.useState("");
3349
- const [stepped, setStepped] = React51.useState(false);
3350
- const phraseId = `${React51.useId()}-phrase`;
3313
+ const [busy, setBusy] = React50.useState(false);
3314
+ const [error, setError] = React50.useState(null);
3315
+ const [typed, setTyped] = React50.useState("");
3316
+ const [stepped, setStepped] = React50.useState(false);
3317
+ const phraseId = `${React50.useId()}-phrase`;
3351
3318
  const phraseMet = !confirmPhrase || typed.trim().toLowerCase() === confirmPhrase.trim().toLowerCase();
3352
3319
  const challenging = Boolean(stepUp) && (!confirmPhrase || stepped);
3353
3320
  const panelTitle = challenging ? stepUp?.title ?? title : title;
@@ -3357,7 +3324,7 @@ function ConfirmDialog({
3357
3324
  setTyped("");
3358
3325
  setStepped(false);
3359
3326
  };
3360
- React51.useEffect(() => {
3327
+ React50.useEffect(() => {
3361
3328
  if (!actualOpen) reset();
3362
3329
  }, [actualOpen]);
3363
3330
  const setOpen = (next) => {
@@ -3377,22 +3344,22 @@ function ConfirmDialog({
3377
3344
  setBusy(false);
3378
3345
  }
3379
3346
  };
3380
- return /* @__PURE__ */ jsxs36(Dialog, { open: actualOpen, onOpenChange: (next) => {
3347
+ return /* @__PURE__ */ jsxs35(Dialog, { open: actualOpen, onOpenChange: (next) => {
3381
3348
  if (!busy) setOpen(next);
3382
3349
  }, children: [
3383
- trigger && /* @__PURE__ */ jsx61(DialogTrigger, { asChild: true, children: trigger }),
3384
- /* @__PURE__ */ jsxs36(DialogContent, { children: [
3385
- /* @__PURE__ */ jsxs36(DialogHeader, { children: [
3386
- /* @__PURE__ */ jsx61(DialogTitle, { children: panelTitle }),
3387
- panelDescription && /* @__PURE__ */ jsx61(DialogDescription, { children: panelDescription })
3350
+ trigger && /* @__PURE__ */ jsx60(DialogTrigger, { asChild: true, children: trigger }),
3351
+ /* @__PURE__ */ jsxs35(DialogContent, { children: [
3352
+ /* @__PURE__ */ jsxs35(DialogHeader, { children: [
3353
+ /* @__PURE__ */ jsx60(DialogTitle, { children: panelTitle }),
3354
+ panelDescription && /* @__PURE__ */ jsx60(DialogDescription, { children: panelDescription })
3388
3355
  ] }),
3389
- confirmPhrase && !challenging && /* @__PURE__ */ jsxs36("div", { className: "grid gap-1.5", children: [
3390
- /* @__PURE__ */ jsxs36("label", { htmlFor: phraseId, className: "text-xs font-medium text-text-secondary", children: [
3356
+ confirmPhrase && !challenging && /* @__PURE__ */ jsxs35("div", { className: "grid gap-1.5", children: [
3357
+ /* @__PURE__ */ jsxs35("label", { htmlFor: phraseId, className: "text-xs font-medium text-text-secondary", children: [
3391
3358
  "Type ",
3392
- /* @__PURE__ */ jsx61("span", { className: "font-mono text-text-primary", children: confirmPhrase }),
3359
+ /* @__PURE__ */ jsx60("span", { className: "font-mono text-text-primary", children: confirmPhrase }),
3393
3360
  " to confirm"
3394
3361
  ] }),
3395
- /* @__PURE__ */ jsx61(
3362
+ /* @__PURE__ */ jsx60(
3396
3363
  Input,
3397
3364
  {
3398
3365
  id: phraseId,
@@ -3403,8 +3370,8 @@ function ConfirmDialog({
3403
3370
  }
3404
3371
  )
3405
3372
  ] }),
3406
- error && !challenging && /* @__PURE__ */ jsx61(InlineError, { children: error }),
3407
- challenging ? /* @__PURE__ */ jsx61(
3373
+ error && !challenging && /* @__PURE__ */ jsx60(InlineError, { children: error }),
3374
+ challenging ? /* @__PURE__ */ jsx60(
3408
3375
  StepUpChallenge,
3409
3376
  {
3410
3377
  methods: stepUp?.methods,
@@ -3423,16 +3390,16 @@ function ConfirmDialog({
3423
3390
  onVerifyPasskey: () => void handleConfirm({ method: "passkey" }),
3424
3391
  onVerifyCode: (code) => void handleConfirm({ method: "code", code })
3425
3392
  }
3426
- ) : /* @__PURE__ */ jsxs36(DialogFooter, { children: [
3427
- /* @__PURE__ */ jsx61(Button, { variant: "outline", disabled: busy, onClick: () => setOpen(false), children: cancelLabel }),
3428
- /* @__PURE__ */ jsxs36(
3393
+ ) : /* @__PURE__ */ jsxs35(DialogFooter, { children: [
3394
+ /* @__PURE__ */ jsx60(Button, { variant: "outline", disabled: busy, onClick: () => setOpen(false), children: cancelLabel }),
3395
+ /* @__PURE__ */ jsxs35(
3429
3396
  Button,
3430
3397
  {
3431
3398
  variant: destructive ? "destructive-solid" : "default",
3432
3399
  disabled: busy || !phraseMet,
3433
3400
  onClick: () => stepUp ? setStepped(true) : void handleConfirm(),
3434
3401
  children: [
3435
- busy && /* @__PURE__ */ jsx61(Loader22, { className: "size-4 animate-spin", "aria-hidden": "true" }),
3402
+ busy && /* @__PURE__ */ jsx60(Loader22, { className: "size-4 animate-spin", "aria-hidden": "true" }),
3436
3403
  confirmLabel
3437
3404
  ]
3438
3405
  }
@@ -3443,18 +3410,18 @@ function ConfirmDialog({
3443
3410
  }
3444
3411
 
3445
3412
  // src/components/user-menu.tsx
3446
- import * as React52 from "react";
3413
+ import * as React51 from "react";
3447
3414
  import { ChevronsUpDown } from "lucide-react";
3448
- import { Fragment as Fragment3, jsx as jsx62, jsxs as jsxs37 } from "react/jsx-runtime";
3415
+ import { Fragment as Fragment3, jsx as jsx61, jsxs as jsxs36 } from "react/jsx-runtime";
3449
3416
  function UserMenu({ user, items, collapsed = false, tooltip = true, align = "start" }) {
3450
- const openedByPointer = React52.useRef(false);
3417
+ const openedByPointer = React51.useRef(false);
3451
3418
  const secondLine = user.subtitle ?? user.email;
3452
- const avatar = /* @__PURE__ */ jsx62(PersonAvatar, { name: user.name, id: user.id, src: user.avatarUrl, size: "sm" });
3419
+ const avatar = /* @__PURE__ */ jsx61(PersonAvatar, { name: user.name, id: user.id, src: user.avatarUrl, size: "sm" });
3453
3420
  const trigger = collapsed ? (
3454
3421
  // The plate every other mark in a top bar gets, drawn outside the avatar instead of behind it:
3455
3422
  // a round mark fills its own box, so a background under one is a background nobody sees, and
3456
3423
  // this trigger rested with no hover at all beside four icon buttons that all had one.
3457
- /* @__PURE__ */ jsx62(
3424
+ /* @__PURE__ */ jsx61(
3458
3425
  "button",
3459
3426
  {
3460
3427
  type: "button",
@@ -3463,22 +3430,22 @@ function UserMenu({ user, items, collapsed = false, tooltip = true, align = "sta
3463
3430
  children: avatar
3464
3431
  }
3465
3432
  )
3466
- ) : /* @__PURE__ */ jsxs37(
3433
+ ) : /* @__PURE__ */ jsxs36(
3467
3434
  "button",
3468
3435
  {
3469
3436
  type: "button",
3470
3437
  className: "flex w-full cursor-pointer items-center gap-2.5 rounded-xl px-1.5 py-[5px] text-left transition-colors duration-fast hover:bg-[var(--hov-bg)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
3471
3438
  children: [
3472
3439
  avatar,
3473
- /* @__PURE__ */ jsxs37("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
3474
- /* @__PURE__ */ jsx62("span", { className: "truncate text-sm leading-[normal] font-medium text-text-primary", children: user.name }),
3475
- secondLine && /* @__PURE__ */ jsx62("span", { className: "truncate text-xs leading-[normal] text-text-tertiary", children: secondLine })
3440
+ /* @__PURE__ */ jsxs36("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
3441
+ /* @__PURE__ */ jsx61("span", { className: "truncate text-sm leading-[normal] font-medium text-text-primary", children: user.name }),
3442
+ secondLine && /* @__PURE__ */ jsx61("span", { className: "truncate text-xs leading-[normal] text-text-tertiary", children: secondLine })
3476
3443
  ] }),
3477
- /* @__PURE__ */ jsx62(ChevronsUpDown, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" })
3444
+ /* @__PURE__ */ jsx61(ChevronsUpDown, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" })
3478
3445
  ]
3479
3446
  }
3480
3447
  );
3481
- const menuTrigger = /* @__PURE__ */ jsx62(
3448
+ const menuTrigger = /* @__PURE__ */ jsx61(
3482
3449
  DropdownMenuTrigger,
3483
3450
  {
3484
3451
  asChild: true,
@@ -3491,12 +3458,12 @@ function UserMenu({ user, items, collapsed = false, tooltip = true, align = "sta
3491
3458
  children: trigger
3492
3459
  }
3493
3460
  );
3494
- const menu = /* @__PURE__ */ jsxs37(DropdownMenu, { children: [
3495
- collapsed && tooltip ? /* @__PURE__ */ jsx62(TooltipProvider, { children: /* @__PURE__ */ jsxs37(Tooltip, { children: [
3496
- /* @__PURE__ */ jsx62(TooltipTrigger, { asChild: true, children: menuTrigger }),
3497
- /* @__PURE__ */ jsx62(TooltipContent, { side: "right", children: user.name })
3461
+ const menu = /* @__PURE__ */ jsxs36(DropdownMenu, { children: [
3462
+ collapsed && tooltip ? /* @__PURE__ */ jsx61(TooltipProvider, { children: /* @__PURE__ */ jsxs36(Tooltip, { children: [
3463
+ /* @__PURE__ */ jsx61(TooltipTrigger, { asChild: true, children: menuTrigger }),
3464
+ /* @__PURE__ */ jsx61(TooltipContent, { side: "right", children: user.name })
3498
3465
  ] }) }) : menuTrigger,
3499
- /* @__PURE__ */ jsxs37(
3466
+ /* @__PURE__ */ jsxs36(
3500
3467
  DropdownMenuContent,
3501
3468
  {
3502
3469
  align,
@@ -3506,18 +3473,18 @@ function UserMenu({ user, items, collapsed = false, tooltip = true, align = "sta
3506
3473
  },
3507
3474
  className: "flex w-[var(--radix-dropdown-menu-trigger-width)] min-w-56 flex-col gap-px rounded-xl border-border-subtle bg-[var(--menu-bg)] p-1 shadow-(--menu-shadow)",
3508
3475
  children: [
3509
- /* @__PURE__ */ jsxs37(DropdownMenuLabel, { className: "px-2 pt-1.5 pb-1 text-xs font-medium text-text-tertiary", children: [
3510
- /* @__PURE__ */ jsx62("span", { className: "block truncate text-sm font-medium text-text-primary", children: user.name }),
3511
- collapsed && secondLine && /* @__PURE__ */ jsx62("span", { className: "block truncate text-xs font-regular text-text-tertiary", children: secondLine })
3476
+ /* @__PURE__ */ jsxs36(DropdownMenuLabel, { className: "px-2 pt-1.5 pb-1 text-xs font-medium text-text-tertiary", children: [
3477
+ /* @__PURE__ */ jsx61("span", { className: "block truncate text-sm font-medium text-text-primary", children: user.name }),
3478
+ collapsed && secondLine && /* @__PURE__ */ jsx61("span", { className: "block truncate text-xs font-regular text-text-tertiary", children: secondLine })
3512
3479
  ] }),
3513
- /* @__PURE__ */ jsx62(DropdownMenuSeparator, { className: "mx-0 shrink-0" }),
3480
+ /* @__PURE__ */ jsx61(DropdownMenuSeparator, { className: "mx-0 shrink-0" }),
3514
3481
  items.map((item, i) => {
3515
3482
  const Icon = item.icon;
3516
- const content = /* @__PURE__ */ jsxs37(Fragment3, { children: [
3517
- Icon && /* @__PURE__ */ jsx62(Icon, { className: "size-4", "aria-hidden": "true" }),
3483
+ const content = /* @__PURE__ */ jsxs36(Fragment3, { children: [
3484
+ Icon && /* @__PURE__ */ jsx61(Icon, { className: "size-4", "aria-hidden": "true" }),
3518
3485
  item.label
3519
3486
  ] });
3520
- return /* @__PURE__ */ jsx62(
3487
+ return /* @__PURE__ */ jsx61(
3521
3488
  DropdownMenuItem,
3522
3489
  {
3523
3490
  onSelect: item.onSelect,
@@ -3526,7 +3493,7 @@ function UserMenu({ user, items, collapsed = false, tooltip = true, align = "sta
3526
3493
  item.destructive && "text-text-danger focus:text-text-danger"
3527
3494
  ),
3528
3495
  asChild: Boolean(item.href),
3529
- children: item.href ? /* @__PURE__ */ jsx62("a", { href: item.href, children: content }) : content
3496
+ children: item.href ? /* @__PURE__ */ jsx61("a", { href: item.href, children: content }) : content
3530
3497
  },
3531
3498
  `${item.label}-${i}`
3532
3499
  );
@@ -3539,10 +3506,10 @@ function UserMenu({ user, items, collapsed = false, tooltip = true, align = "sta
3539
3506
  }
3540
3507
 
3541
3508
  // src/components/extension-icon.tsx
3542
- import * as React53 from "react";
3509
+ import * as React52 from "react";
3543
3510
  import * as LucideIcons from "lucide-react";
3544
3511
  import { Puzzle } from "lucide-react";
3545
- import { jsx as jsx63 } from "react/jsx-runtime";
3512
+ import { jsx as jsx62 } from "react/jsx-runtime";
3546
3513
  var FORWARD_REF = /* @__PURE__ */ Symbol.for("react.forward_ref");
3547
3514
  var catalog = LucideIcons;
3548
3515
  function toPascalCase(name) {
@@ -3567,22 +3534,22 @@ function warnUnknownIconOnce(name) {
3567
3534
  warnedUnknownIcons.add(name);
3568
3535
  console.warn(`[@lessly/ui] ExtensionIcon: unknown icon "${name}" \u2014 falling back to Puzzle.`);
3569
3536
  }
3570
- var ExtensionIcon = React53.forwardRef(
3537
+ var ExtensionIcon = React52.forwardRef(
3571
3538
  ({ name, ...props }, ref) => {
3572
3539
  const Icon = resolveIcon(name);
3573
3540
  if (!Icon) {
3574
3541
  warnUnknownIconOnce(name);
3575
- return /* @__PURE__ */ jsx63(Puzzle, { ref, ...props, "data-icon-fallback": name });
3542
+ return /* @__PURE__ */ jsx62(Puzzle, { ref, ...props, "data-icon-fallback": name });
3576
3543
  }
3577
- return /* @__PURE__ */ jsx63(Icon, { ref, ...props });
3544
+ return /* @__PURE__ */ jsx62(Icon, { ref, ...props });
3578
3545
  }
3579
3546
  );
3580
3547
  ExtensionIcon.displayName = "ExtensionIcon";
3581
3548
 
3582
3549
  // src/components/icon-hint.tsx
3583
- import * as React54 from "react";
3584
- import { jsx as jsx64, jsxs as jsxs38 } from "react/jsx-runtime";
3585
- var IconHint = React54.forwardRef(
3550
+ import * as React53 from "react";
3551
+ import { jsx as jsx63, jsxs as jsxs37 } from "react/jsx-runtime";
3552
+ var IconHint = React53.forwardRef(
3586
3553
  ({ children, label, side = "top", align = "center", className, ...props }, ref) => {
3587
3554
  if (label.trim().length === 0) {
3588
3555
  if (process.env.NODE_ENV !== "production") {
@@ -3590,7 +3557,7 @@ var IconHint = React54.forwardRef(
3590
3557
  '[IconHint] `label` is blank: there is no name to expose and no sentence to show, and a focusable role="img" with no name is a WCAG 4.1.2 failure. Rendering the glyph as decorative instead \u2014 pass a sentence, or use DecorativeIcon if it needs none.'
3591
3558
  );
3592
3559
  }
3593
- return /* @__PURE__ */ jsx64(
3560
+ return /* @__PURE__ */ jsx63(
3594
3561
  "span",
3595
3562
  {
3596
3563
  ref,
@@ -3604,8 +3571,8 @@ var IconHint = React54.forwardRef(
3604
3571
  }
3605
3572
  );
3606
3573
  }
3607
- return /* @__PURE__ */ jsxs38(Tooltip, { children: [
3608
- /* @__PURE__ */ jsx64(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx64(
3574
+ return /* @__PURE__ */ jsxs37(Tooltip, { children: [
3575
+ /* @__PURE__ */ jsx63(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx63(
3609
3576
  "span",
3610
3577
  {
3611
3578
  ref,
@@ -3622,16 +3589,16 @@ var IconHint = React54.forwardRef(
3622
3589
  children
3623
3590
  }
3624
3591
  ) }),
3625
- /* @__PURE__ */ jsx64(TooltipContent, { side, align, "aria-hidden": true, children: label })
3592
+ /* @__PURE__ */ jsx63(TooltipContent, { side, align, "aria-hidden": true, children: label })
3626
3593
  ] });
3627
3594
  }
3628
3595
  );
3629
3596
  IconHint.displayName = "IconHint";
3630
3597
 
3631
3598
  // src/components/decorative-icon.tsx
3632
- import * as React55 from "react";
3633
- import { jsx as jsx65, jsxs as jsxs39 } from "react/jsx-runtime";
3634
- var DecorativeIcon = React55.forwardRef(
3599
+ import * as React54 from "react";
3600
+ import { jsx as jsx64, jsxs as jsxs38 } from "react/jsx-runtime";
3601
+ var DecorativeIcon = React54.forwardRef(
3635
3602
  ({ children, label, side = "top", align = "center", className, ...props }, ref) => {
3636
3603
  if (label.trim().length === 0) {
3637
3604
  if (process.env.NODE_ENV !== "production") {
@@ -3639,7 +3606,7 @@ var DecorativeIcon = React55.forwardRef(
3639
3606
  "[DecorativeIcon] `label` is blank, so the tooltip would open on an empty bubble. Rendering the bare glyph instead \u2014 pass a sentence, or drop the wrapper if the glyph has nothing to add."
3640
3607
  );
3641
3608
  }
3642
- return /* @__PURE__ */ jsx65(
3609
+ return /* @__PURE__ */ jsx64(
3643
3610
  "span",
3644
3611
  {
3645
3612
  ref,
@@ -3653,8 +3620,8 @@ var DecorativeIcon = React55.forwardRef(
3653
3620
  }
3654
3621
  );
3655
3622
  }
3656
- return /* @__PURE__ */ jsxs39(Tooltip, { children: [
3657
- /* @__PURE__ */ jsx65(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx65(
3623
+ return /* @__PURE__ */ jsxs38(Tooltip, { children: [
3624
+ /* @__PURE__ */ jsx64(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx64(
3658
3625
  "span",
3659
3626
  {
3660
3627
  ref,
@@ -3670,15 +3637,15 @@ var DecorativeIcon = React55.forwardRef(
3670
3637
  children
3671
3638
  }
3672
3639
  ) }),
3673
- /* @__PURE__ */ jsx65(TooltipContent, { side, align, "aria-hidden": true, children: label })
3640
+ /* @__PURE__ */ jsx64(TooltipContent, { side, align, "aria-hidden": true, children: label })
3674
3641
  ] });
3675
3642
  }
3676
3643
  );
3677
3644
  DecorativeIcon.displayName = "DecorativeIcon";
3678
3645
 
3679
3646
  // src/components/image-cropper.tsx
3680
- import * as React56 from "react";
3681
- import { Fragment as Fragment4, jsx as jsx66, jsxs as jsxs40 } from "react/jsx-runtime";
3647
+ import * as React55 from "react";
3648
+ import { Fragment as Fragment4, jsx as jsx65, jsxs as jsxs39 } from "react/jsx-runtime";
3682
3649
  var FALLBACK_STAGE_W = 360;
3683
3650
  var FALLBACK_STAGE_H = 270;
3684
3651
  var STEP = 8;
@@ -3711,7 +3678,7 @@ var MASK_CLASS = {
3711
3678
  circle: "rounded-full"
3712
3679
  };
3713
3680
  var clampTo = (value, min, max) => Math.min(Math.max(value, min), max);
3714
- var ImageCropper = React56.forwardRef(
3681
+ var ImageCropper = React55.forwardRef(
3715
3682
  ({
3716
3683
  src,
3717
3684
  shape = "square",
@@ -3731,21 +3698,21 @@ var ImageCropper = React56.forwardRef(
3731
3698
  className,
3732
3699
  ...props
3733
3700
  }, ref) => {
3734
- const [nat, setNat] = React56.useState(null);
3735
- const [error, setError] = React56.useState(null);
3736
- const [focused, setFocused] = React56.useState(false);
3737
- const [stage, setStage] = React56.useState({ w: FALLBACK_STAGE_W, h: FALLBACK_STAGE_H });
3738
- const [crop, setCrop] = React56.useState({ x: 0, y: 0, size: 0 });
3739
- const imgRef = React56.useRef(null);
3740
- const stageRef = React56.useRef(null);
3741
- const framed = React56.useRef(false);
3742
- const inset = React56.useRef({ left: 0, top: 0 });
3743
- React56.useEffect(() => {
3701
+ const [nat, setNat] = React55.useState(null);
3702
+ const [error, setError] = React55.useState(null);
3703
+ const [focused, setFocused] = React55.useState(false);
3704
+ const [stage, setStage] = React55.useState({ w: FALLBACK_STAGE_W, h: FALLBACK_STAGE_H });
3705
+ const [crop, setCrop] = React55.useState({ x: 0, y: 0, size: 0 });
3706
+ const imgRef = React55.useRef(null);
3707
+ const stageRef = React55.useRef(null);
3708
+ const framed = React55.useRef(false);
3709
+ const inset = React55.useRef({ left: 0, top: 0 });
3710
+ React55.useEffect(() => {
3744
3711
  framed.current = false;
3745
3712
  setNat(null);
3746
3713
  setError(null);
3747
3714
  }, [src]);
3748
- React56.useLayoutEffect(() => {
3715
+ React55.useLayoutEffect(() => {
3749
3716
  const el = stageRef.current;
3750
3717
  if (!el) return void 0;
3751
3718
  const read = (entry) => {
@@ -3771,13 +3738,13 @@ var ImageCropper = React56.forwardRef(
3771
3738
  const drawH = nat ? nat.h * fit : stage.h;
3772
3739
  const padX = (stage.w - drawW) / 2;
3773
3740
  const padY = (stage.h - drawH) / 2;
3774
- React56.useEffect(() => {
3741
+ React55.useEffect(() => {
3775
3742
  if (!nat || framed.current) return;
3776
3743
  framed.current = true;
3777
3744
  const size = Math.min(nat.w, nat.h);
3778
3745
  setCrop({ x: (nat.w - size) / 2, y: (nat.h - size) / 2, size });
3779
3746
  }, [nat]);
3780
- const clampCrop = React56.useCallback(
3747
+ const clampCrop = React55.useCallback(
3781
3748
  (x, y, size) => {
3782
3749
  if (!nat) return { x, y, size };
3783
3750
  const max = Math.min(nat.w, nat.h);
@@ -3787,8 +3754,8 @@ var ImageCropper = React56.forwardRef(
3787
3754
  },
3788
3755
  [nat, fit, minCropSize]
3789
3756
  );
3790
- const moving = React56.useRef(null);
3791
- const resizing = React56.useRef(null);
3757
+ const moving = React55.useRef(null);
3758
+ const resizing = React55.useRef(null);
3792
3759
  const onMoveDown = (e) => {
3793
3760
  e.target.setPointerCapture(e.pointerId);
3794
3761
  moving.current = { px: e.clientX, py: e.clientY, cx: crop.x, cy: crop.y };
@@ -3905,8 +3872,8 @@ var ImageCropper = React56.forwardRef(
3905
3872
  const percent = nat ? Math.round(crop.size / Math.min(nat.w, nat.h) * 100) : 100;
3906
3873
  const fromLeft = nat ? Math.round(crop.x / nat.w * 100) : 0;
3907
3874
  const fromTop = nat ? Math.round(crop.y / nat.h * 100) : 0;
3908
- return /* @__PURE__ */ jsxs40("div", { ref, className: cn("flex flex-col gap-3", className), ...props, children: [
3909
- /* @__PURE__ */ jsxs40(
3875
+ return /* @__PURE__ */ jsxs39("div", { ref, className: cn("flex flex-col gap-3", className), ...props, children: [
3876
+ /* @__PURE__ */ jsxs39(
3910
3877
  "div",
3911
3878
  {
3912
3879
  ref: stageRef,
@@ -3915,7 +3882,7 @@ var ImageCropper = React56.forwardRef(
3915
3882
  onPointerMove,
3916
3883
  onPointerUp,
3917
3884
  children: [
3918
- /* @__PURE__ */ jsx66(
3885
+ /* @__PURE__ */ jsx65(
3919
3886
  "img",
3920
3887
  {
3921
3888
  ref: imgRef,
@@ -3928,8 +3895,8 @@ var ImageCropper = React56.forwardRef(
3928
3895
  className: "pointer-events-none absolute inset-0 size-full object-contain"
3929
3896
  }
3930
3897
  ),
3931
- !nat && !error && /* @__PURE__ */ jsx66("div", { className: "absolute inset-0 flex items-center justify-center text-sm text-text-tertiary", children: "Loading\u2026" }),
3932
- error === "load" && /* @__PURE__ */ jsx66(
3898
+ !nat && !error && /* @__PURE__ */ jsx65("div", { className: "absolute inset-0 flex items-center justify-center text-sm text-text-tertiary", children: "Loading\u2026" }),
3899
+ error === "load" && /* @__PURE__ */ jsx65(
3933
3900
  "div",
3934
3901
  {
3935
3902
  role: "alert",
@@ -3937,8 +3904,8 @@ var ImageCropper = React56.forwardRef(
3937
3904
  children: errorMessage
3938
3905
  }
3939
3906
  ),
3940
- nat && error !== "load" && /* @__PURE__ */ jsxs40(Fragment4, { children: [
3941
- /* @__PURE__ */ jsx66(
3907
+ nat && error !== "load" && /* @__PURE__ */ jsxs39(Fragment4, { children: [
3908
+ /* @__PURE__ */ jsx65(
3942
3909
  "div",
3943
3910
  {
3944
3911
  tabIndex: 0,
@@ -3960,15 +3927,15 @@ var ImageCropper = React56.forwardRef(
3960
3927
  cursor: "move",
3961
3928
  boxShadow: (focused ? FOCUS_SHADOW : "") + RING_SHADOW
3962
3929
  },
3963
- children: /* @__PURE__ */ jsxs40("div", { className: "pointer-events-none absolute inset-0 opacity-40", children: [
3964
- /* @__PURE__ */ jsx66("div", { className: "absolute left-1/3 top-0 h-full w-px bg-white/60" }),
3965
- /* @__PURE__ */ jsx66("div", { className: "absolute left-2/3 top-0 h-full w-px bg-white/60" }),
3966
- /* @__PURE__ */ jsx66("div", { className: "absolute left-0 top-1/3 h-px w-full bg-white/60" }),
3967
- /* @__PURE__ */ jsx66("div", { className: "absolute left-0 top-2/3 h-px w-full bg-white/60" })
3930
+ children: /* @__PURE__ */ jsxs39("div", { className: "pointer-events-none absolute inset-0 opacity-40", children: [
3931
+ /* @__PURE__ */ jsx65("div", { className: "absolute left-1/3 top-0 h-full w-px bg-white/60" }),
3932
+ /* @__PURE__ */ jsx65("div", { className: "absolute left-2/3 top-0 h-full w-px bg-white/60" }),
3933
+ /* @__PURE__ */ jsx65("div", { className: "absolute left-0 top-1/3 h-px w-full bg-white/60" }),
3934
+ /* @__PURE__ */ jsx65("div", { className: "absolute left-0 top-2/3 h-px w-full bg-white/60" })
3968
3935
  ] })
3969
3936
  }
3970
3937
  ),
3971
- CORNERS.map((corner) => /* @__PURE__ */ jsx66(
3938
+ CORNERS.map((corner) => /* @__PURE__ */ jsx65(
3972
3939
  "div",
3973
3940
  {
3974
3941
  "data-grip": corner,
@@ -3981,7 +3948,7 @@ var ImageCropper = React56.forwardRef(
3981
3948
  padding: BRACKET.inset
3982
3949
  },
3983
3950
  onPointerDown: onResizeDown(corner),
3984
- children: /* @__PURE__ */ jsx66(
3951
+ children: /* @__PURE__ */ jsx65(
3985
3952
  "span",
3986
3953
  {
3987
3954
  className: "block border-solid border-white",
@@ -4003,10 +3970,10 @@ var ImageCropper = React56.forwardRef(
4003
3970
  ]
4004
3971
  }
4005
3972
  ),
4006
- error === "export" ? /* @__PURE__ */ jsx66("p", { role: "alert", className: "text-xs text-text-danger", children: exportErrorMessage }) : hint != null && !error ? /* @__PURE__ */ jsx66("p", { className: "text-xs text-text-tertiary", children: hint }) : null,
4007
- /* @__PURE__ */ jsxs40("div", { className: "flex justify-end gap-2", children: [
4008
- onCancel && /* @__PURE__ */ jsx66(Button, { type: "button", variant: "outline", size: "sm", onClick: onCancel, children: cancelLabel }),
4009
- /* @__PURE__ */ jsx66(Button, { type: "button", size: "sm", onClick: save, disabled: !nat || error != null, children: saveLabel })
3973
+ error === "export" ? /* @__PURE__ */ jsx65("p", { role: "alert", className: "text-xs text-text-danger", children: exportErrorMessage }) : hint != null && !error ? /* @__PURE__ */ jsx65("p", { className: "text-xs text-text-tertiary", children: hint }) : null,
3974
+ /* @__PURE__ */ jsxs39("div", { className: "flex justify-end gap-2", children: [
3975
+ onCancel && /* @__PURE__ */ jsx65(Button, { type: "button", variant: "outline", size: "sm", onClick: onCancel, children: cancelLabel }),
3976
+ /* @__PURE__ */ jsx65(Button, { type: "button", size: "sm", onClick: save, disabled: !nat || error != null, children: saveLabel })
4010
3977
  ] })
4011
3978
  ] });
4012
3979
  }
@@ -4014,7 +3981,7 @@ var ImageCropper = React56.forwardRef(
4014
3981
  ImageCropper.displayName = "ImageCropper";
4015
3982
 
4016
3983
  // src/components/image-crop-dialog.tsx
4017
- import { jsx as jsx67, jsxs as jsxs41 } from "react/jsx-runtime";
3984
+ import { jsx as jsx66, jsxs as jsxs40 } from "react/jsx-runtime";
4018
3985
  function ImageCropDialog({
4019
3986
  open,
4020
3987
  onOpenChange,
@@ -4025,17 +3992,17 @@ function ImageCropDialog({
4025
3992
  onCrop,
4026
3993
  ...cropperProps
4027
3994
  }) {
4028
- return /* @__PURE__ */ jsx67(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs41(
3995
+ return /* @__PURE__ */ jsx66(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs40(
4029
3996
  DialogContent,
4030
3997
  {
4031
3998
  className: "sm:max-w-md",
4032
3999
  ...description ? {} : { "aria-describedby": void 0 },
4033
4000
  children: [
4034
- /* @__PURE__ */ jsxs41(DialogHeader, { children: [
4035
- /* @__PURE__ */ jsx67(DialogTitle, { children: title ?? `Crop ${label.toLowerCase()}` }),
4036
- description && /* @__PURE__ */ jsx67(DialogDescription, { children: description })
4001
+ /* @__PURE__ */ jsxs40(DialogHeader, { children: [
4002
+ /* @__PURE__ */ jsx66(DialogTitle, { children: title ?? `Crop ${label.toLowerCase()}` }),
4003
+ description && /* @__PURE__ */ jsx66(DialogDescription, { children: description })
4037
4004
  ] }),
4038
- src && /* @__PURE__ */ jsx67(
4005
+ src && /* @__PURE__ */ jsx66(
4039
4006
  ImageCropper,
4040
4007
  {
4041
4008
  src,
@@ -4054,9 +4021,9 @@ function ImageCropDialog({
4054
4021
  ImageCropDialog.displayName = "ImageCropDialog";
4055
4022
 
4056
4023
  // src/components/image-upload.tsx
4057
- import * as React57 from "react";
4024
+ import * as React56 from "react";
4058
4025
  import { Image as ImageIcon } from "lucide-react";
4059
- import { jsx as jsx68, jsxs as jsxs42 } from "react/jsx-runtime";
4026
+ import { jsx as jsx67, jsxs as jsxs41 } from "react/jsx-runtime";
4060
4027
  var PREVIEW_BOX = {
4061
4028
  sm: "size-8",
4062
4029
  md: "size-12",
@@ -4071,7 +4038,7 @@ function formatSize(bytes) {
4071
4038
  if (bytes >= 1024) return `${Math.floor(bytes / 1024)} KB`;
4072
4039
  return `${bytes} B`;
4073
4040
  }
4074
- var ImageUpload = React57.forwardRef(
4041
+ var ImageUpload = React56.forwardRef(
4075
4042
  ({
4076
4043
  value,
4077
4044
  onChange,
@@ -4094,11 +4061,11 @@ var ImageUpload = React57.forwardRef(
4094
4061
  className,
4095
4062
  ...props
4096
4063
  }, ref) => {
4097
- const inputRef = React57.useRef(null);
4098
- const [picked, setPicked] = React57.useState(null);
4099
- const [cropOpen, setCropOpen] = React57.useState(false);
4100
- const [error, setError] = React57.useState(null);
4101
- const pickSeq = React57.useRef(0);
4064
+ const inputRef = React56.useRef(null);
4065
+ const [picked, setPicked] = React56.useState(null);
4066
+ const [cropOpen, setCropOpen] = React56.useState(false);
4067
+ const [error, setError] = React56.useState(null);
4068
+ const pickSeq = React56.useRef(0);
4102
4069
  const refuse = (message) => {
4103
4070
  setError(message);
4104
4071
  onError?.(message);
@@ -4141,8 +4108,8 @@ var ImageUpload = React57.forwardRef(
4141
4108
  reader.readAsDataURL(file);
4142
4109
  };
4143
4110
  const framed = value != null || fallback == null;
4144
- return /* @__PURE__ */ jsxs42("div", { ref, className: cn("flex items-start gap-3", className), ...props, children: [
4145
- /* @__PURE__ */ jsx68(
4111
+ return /* @__PURE__ */ jsxs41("div", { ref, className: cn("flex items-start gap-3", className), ...props, children: [
4112
+ /* @__PURE__ */ jsx67(
4146
4113
  "span",
4147
4114
  {
4148
4115
  className: cn(
@@ -4151,12 +4118,12 @@ var ImageUpload = React57.forwardRef(
4151
4118
  PREVIEW_MASK[shape],
4152
4119
  framed && "border border-border-default bg-bg-secondary text-text-secondary"
4153
4120
  ),
4154
- children: value ? /* @__PURE__ */ jsx68("img", { src: value, alt: `${label} preview`, className: "size-full object-cover" }) : fallback ?? /* @__PURE__ */ jsx68(ImageIcon, { className: "size-5", "aria-hidden": true })
4121
+ children: value ? /* @__PURE__ */ jsx67("img", { src: value, alt: `${label} preview`, className: "size-full object-cover" }) : fallback ?? /* @__PURE__ */ jsx67(ImageIcon, { className: "size-5", "aria-hidden": true })
4155
4122
  }
4156
4123
  ),
4157
- /* @__PURE__ */ jsxs42("div", { className: "min-w-0 flex-1", children: [
4158
- /* @__PURE__ */ jsxs42("div", { className: "flex items-center gap-2", children: [
4159
- /* @__PURE__ */ jsx68(
4124
+ /* @__PURE__ */ jsxs41("div", { className: "min-w-0 flex-1", children: [
4125
+ /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
4126
+ /* @__PURE__ */ jsx67(
4160
4127
  Button,
4161
4128
  {
4162
4129
  type: "button",
@@ -4167,7 +4134,7 @@ var ImageUpload = React57.forwardRef(
4167
4134
  children: value ? changeLabel : uploadLabel
4168
4135
  }
4169
4136
  ),
4170
- value && /* @__PURE__ */ jsx68(
4137
+ value && /* @__PURE__ */ jsx67(
4171
4138
  Button,
4172
4139
  {
4173
4140
  type: "button",
@@ -4182,10 +4149,10 @@ var ImageUpload = React57.forwardRef(
4182
4149
  }
4183
4150
  )
4184
4151
  ] }),
4185
- hint != null && /* @__PURE__ */ jsx68("p", { className: "mt-1 text-xs text-text-tertiary", children: hint }),
4186
- error && /* @__PURE__ */ jsx68("p", { role: "alert", className: "mt-1 text-xs text-text-danger", children: error })
4152
+ hint != null && /* @__PURE__ */ jsx67("p", { className: "mt-1 text-xs text-text-tertiary", children: hint }),
4153
+ error && /* @__PURE__ */ jsx67("p", { role: "alert", className: "mt-1 text-xs text-text-danger", children: error })
4187
4154
  ] }),
4188
- /* @__PURE__ */ jsx68(
4155
+ /* @__PURE__ */ jsx67(
4189
4156
  "input",
4190
4157
  {
4191
4158
  ref: inputRef,
@@ -4200,7 +4167,7 @@ var ImageUpload = React57.forwardRef(
4200
4167
  }
4201
4168
  }
4202
4169
  ),
4203
- crop && /* @__PURE__ */ jsx68(
4170
+ crop && /* @__PURE__ */ jsx67(
4204
4171
  ImageCropDialog,
4205
4172
  {
4206
4173
  open: cropOpen,
@@ -4223,14 +4190,14 @@ var ImageUpload = React57.forwardRef(
4223
4190
  ImageUpload.displayName = "ImageUpload";
4224
4191
 
4225
4192
  // src/components/back-link.tsx
4226
- import * as React58 from "react";
4193
+ import * as React57 from "react";
4227
4194
  import { ArrowLeft as ArrowLeft2 } from "lucide-react";
4228
4195
  import { Slottable } from "@radix-ui/react-slot";
4229
- import { jsx as jsx69, jsxs as jsxs43 } from "react/jsx-runtime";
4196
+ import { jsx as jsx68, jsxs as jsxs42 } from "react/jsx-runtime";
4230
4197
  var SLOTTED_GLYPH = "inline-flex shrink-0 items-center justify-center [&>svg]:size-3.5";
4231
- var BackLink = React58.forwardRef(
4198
+ var BackLink = React57.forwardRef(
4232
4199
  ({ parent, asChild = false, children, className, onClick, ...props }, ref) => {
4233
- const slotted = asChild && React58.isValidElement(children);
4200
+ const slotted = asChild && React57.isValidElement(children);
4234
4201
  if (!slotted && !onClick) return null;
4235
4202
  const shell = {
4236
4203
  variant: "ghost",
@@ -4238,23 +4205,23 @@ var BackLink = React58.forwardRef(
4238
4205
  className: cn("w-fit -ml-2", className)
4239
4206
  };
4240
4207
  if (slotted) {
4241
- return /* @__PURE__ */ jsxs43(Button, { ...props, ...shell, onClick, ref, asChild: true, children: [
4242
- /* @__PURE__ */ jsx69(Slottable, { children }),
4243
- /* @__PURE__ */ jsx69("span", { className: SLOTTED_GLYPH, "aria-hidden": true, children: /* @__PURE__ */ jsx69(ArrowLeft2, {}) }),
4208
+ return /* @__PURE__ */ jsxs42(Button, { ...props, ...shell, onClick, ref, asChild: true, children: [
4209
+ /* @__PURE__ */ jsx68(Slottable, { children }),
4210
+ /* @__PURE__ */ jsx68("span", { className: SLOTTED_GLYPH, "aria-hidden": true, children: /* @__PURE__ */ jsx68(ArrowLeft2, {}) }),
4244
4211
  parent
4245
4212
  ] });
4246
4213
  }
4247
- return /* @__PURE__ */ jsx69(Button, { ...props, ...shell, onClick, ref, icon: /* @__PURE__ */ jsx69(ArrowLeft2, {}), children: parent });
4214
+ return /* @__PURE__ */ jsx68(Button, { ...props, ...shell, onClick, ref, icon: /* @__PURE__ */ jsx68(ArrowLeft2, {}), children: parent });
4248
4215
  }
4249
4216
  );
4250
4217
  BackLink.displayName = "BackLink";
4251
4218
 
4252
4219
  // src/components/card-note.tsx
4253
- import * as React59 from "react";
4220
+ import * as React58 from "react";
4254
4221
  import { Lock as Lock2 } from "lucide-react";
4255
- import { jsx as jsx70, jsxs as jsxs44 } from "react/jsx-runtime";
4256
- var CardNote = React59.forwardRef(
4257
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs44(
4222
+ import { jsx as jsx69, jsxs as jsxs43 } from "react/jsx-runtime";
4223
+ var CardNote = React58.forwardRef(
4224
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs43(
4258
4225
  "p",
4259
4226
  {
4260
4227
  ...props,
@@ -4264,7 +4231,7 @@ var CardNote = React59.forwardRef(
4264
4231
  className
4265
4232
  ),
4266
4233
  children: [
4267
- /* @__PURE__ */ jsx70(Lock2, { className: "mt-0.5 size-3 shrink-0", "aria-hidden": true }),
4234
+ /* @__PURE__ */ jsx69(Lock2, { className: "mt-0.5 size-3 shrink-0", "aria-hidden": true }),
4268
4235
  children
4269
4236
  ]
4270
4237
  }
@@ -4273,12 +4240,12 @@ var CardNote = React59.forwardRef(
4273
4240
  CardNote.displayName = "CardNote";
4274
4241
 
4275
4242
  // src/components/remove-button.tsx
4276
- import * as React60 from "react";
4243
+ import * as React59 from "react";
4277
4244
  import { X as X2 } from "lucide-react";
4278
- import { jsx as jsx71, jsxs as jsxs45 } from "react/jsx-runtime";
4279
- var RemoveButton = React60.forwardRef(
4245
+ import { jsx as jsx70, jsxs as jsxs44 } from "react/jsx-runtime";
4246
+ var RemoveButton = React59.forwardRef(
4280
4247
  ({ label, size = "sm", side = "top", className, ...props }, ref) => {
4281
- const button = /* @__PURE__ */ jsx71(
4248
+ const button = /* @__PURE__ */ jsx70(
4282
4249
  Button,
4283
4250
  {
4284
4251
  ...props,
@@ -4288,22 +4255,22 @@ var RemoveButton = React60.forwardRef(
4288
4255
  "aria-describedby": void 0,
4289
4256
  variant: "destructive-ghost",
4290
4257
  size,
4291
- icon: /* @__PURE__ */ jsx71(X2, {}),
4258
+ icon: /* @__PURE__ */ jsx70(X2, {}),
4292
4259
  className: cn("shrink-0", className)
4293
4260
  }
4294
4261
  );
4295
- return /* @__PURE__ */ jsxs45(Tooltip, { children: [
4296
- /* @__PURE__ */ jsx71(TooltipTrigger, { asChild: true, children: props.disabled ? /* @__PURE__ */ jsx71("span", { className: "inline-flex shrink-0", children: button }) : button }),
4297
- /* @__PURE__ */ jsx71(TooltipContent, { side, "aria-hidden": true, children: label })
4262
+ return /* @__PURE__ */ jsxs44(Tooltip, { children: [
4263
+ /* @__PURE__ */ jsx70(TooltipTrigger, { asChild: true, children: props.disabled ? /* @__PURE__ */ jsx70("span", { className: "inline-flex shrink-0", children: button }) : button }),
4264
+ /* @__PURE__ */ jsx70(TooltipContent, { side, "aria-hidden": true, children: label })
4298
4265
  ] });
4299
4266
  }
4300
4267
  );
4301
4268
  RemoveButton.displayName = "RemoveButton";
4302
4269
 
4303
4270
  // src/components/grant-role-picker.tsx
4304
- import * as React61 from "react";
4271
+ import * as React60 from "react";
4305
4272
  import { Check as Check8 } from "lucide-react";
4306
- import { Fragment as Fragment6, jsx as jsx72, jsxs as jsxs46 } from "react/jsx-runtime";
4273
+ import { Fragment as Fragment6, jsx as jsx71, jsxs as jsxs45 } from "react/jsx-runtime";
4307
4274
  var WEIGHT_TONE = {
4308
4275
  faint: "text-text-secondary",
4309
4276
  normal: "text-text-primary",
@@ -4316,7 +4283,7 @@ var grantRemoveLabel = (detail, notInForce) => {
4316
4283
  if (!detail) return words;
4317
4284
  return detail.startsWith(",") ? `${words}${detail}` : `${words} ${detail}`;
4318
4285
  };
4319
- var GrantRolePicker = React61.forwardRef(
4286
+ var GrantRolePicker = React60.forwardRef(
4320
4287
  ({
4321
4288
  value,
4322
4289
  roles,
@@ -4340,15 +4307,15 @@ var GrantRolePicker = React61.forwardRef(
4340
4307
  const rungs = !readOnly && !carried && pickable.length > 0;
4341
4308
  const removeWords = grantRemoveLabel(void 0, notInForce !== void 0);
4342
4309
  const valueNote = !current ? notes?.missing : rungs && !pickable.some((r) => r.id === value) ? notes?.aboveCap : void 0;
4343
- const item = (r) => /* @__PURE__ */ jsxs46(DropdownMenuItem, { onSelect: () => onChange(r.id), className: "items-start gap-2 py-1.5", children: [
4344
- /* @__PURE__ */ jsx72(Check8, { className: cn("mt-0.5 size-3.5 shrink-0 text-text-primary", r.id !== value && "invisible") }),
4345
- /* @__PURE__ */ jsxs46("span", { className: "flex flex-col", children: [
4346
- /* @__PURE__ */ jsx72("span", { className: cn("text-sm", WEIGHT_TONE[r.weight ?? "normal"]), children: r.name }),
4347
- r.hint && /* @__PURE__ */ jsx72("span", { className: "text-xs text-text-tertiary", children: r.hint })
4310
+ const item = (r) => /* @__PURE__ */ jsxs45(DropdownMenuItem, { onSelect: () => onChange(r.id), className: "items-start gap-2 py-1.5", children: [
4311
+ /* @__PURE__ */ jsx71(Check8, { className: cn("mt-0.5 size-3.5 shrink-0 text-text-primary", r.id !== value && "invisible") }),
4312
+ /* @__PURE__ */ jsxs45("span", { className: "flex flex-col", children: [
4313
+ /* @__PURE__ */ jsx71("span", { className: cn("text-sm", WEIGHT_TONE[r.weight ?? "normal"]), children: r.name }),
4314
+ r.hint && /* @__PURE__ */ jsx71("span", { className: "text-xs text-text-tertiary", children: r.hint })
4348
4315
  ] })
4349
4316
  ] }, r.id);
4350
- return /* @__PURE__ */ jsxs46(DropdownMenu, { children: [
4351
- /* @__PURE__ */ jsx72(
4317
+ return /* @__PURE__ */ jsxs45(DropdownMenu, { children: [
4318
+ /* @__PURE__ */ jsx71(
4352
4319
  DropdownMenuTrigger,
4353
4320
  {
4354
4321
  ref,
@@ -4357,27 +4324,27 @@ var GrantRolePicker = React61.forwardRef(
4357
4324
  type: "button",
4358
4325
  "aria-label": ariaLabel ? `${ariaLabel}: ${nameOf2(value)}` : void 0,
4359
4326
  className,
4360
- children: /* @__PURE__ */ jsx72("span", { className: cn("max-w-[10rem] truncate", current ? WEIGHT_TONE[current.weight ?? "normal"] : MISSING_TONE), children: nameOf2(value) })
4327
+ children: /* @__PURE__ */ jsx71("span", { className: cn("max-w-[10rem] truncate", current ? WEIGHT_TONE[current.weight ?? "normal"] : MISSING_TONE), children: nameOf2(value) })
4361
4328
  }
4362
4329
  ),
4363
- /* @__PURE__ */ jsxs46(DropdownMenuContent, { align, className: "w-64", children: [
4364
- carried && /* @__PURE__ */ jsx72("div", { className: MENU_STATEMENT, children: `${via} grants this role.` }),
4365
- valueNote !== void 0 && /* @__PURE__ */ jsx72("div", { className: MENU_STATEMENT, children: valueNote }),
4330
+ /* @__PURE__ */ jsxs45(DropdownMenuContent, { align, className: "w-64", children: [
4331
+ carried && /* @__PURE__ */ jsx71("div", { className: MENU_STATEMENT, children: `${via} grants this role.` }),
4332
+ valueNote !== void 0 && /* @__PURE__ */ jsx71("div", { className: MENU_STATEMENT, children: valueNote }),
4366
4333
  rungs && pickable.filter((r) => !r.group).map(item),
4367
4334
  rungs && // Bands in the order the roles list states them, so a caller decides the order once.
4368
- [...new Set(pickable.map((r) => r.group).filter((g) => !!g))].map((band) => /* @__PURE__ */ jsxs46(React61.Fragment, { children: [
4369
- /* @__PURE__ */ jsx72(DropdownMenuSeparator, {}),
4370
- /* @__PURE__ */ jsx72(DropdownMenuLabel, { className: "px-2 py-1 text-xs font-medium text-text-tertiary", children: band }),
4335
+ [...new Set(pickable.map((r) => r.group).filter((g) => !!g))].map((band) => /* @__PURE__ */ jsxs45(React60.Fragment, { children: [
4336
+ /* @__PURE__ */ jsx71(DropdownMenuSeparator, {}),
4337
+ /* @__PURE__ */ jsx71(DropdownMenuLabel, { className: "px-2 py-1 text-xs font-medium text-text-tertiary", children: band }),
4371
4338
  pickable.filter((r) => r.group === band).map(item)
4372
4339
  ] }, band)),
4373
- notInForce && /* @__PURE__ */ jsxs46("div", { className: "px-2 py-1.5 text-xs text-text-tertiary", children: [
4374
- /* @__PURE__ */ jsx72("span", { className: "line-through", children: nameOf2(notInForce.role) }),
4340
+ notInForce && /* @__PURE__ */ jsxs45("div", { className: "px-2 py-1.5 text-xs text-text-tertiary", children: [
4341
+ /* @__PURE__ */ jsx71("span", { className: "line-through", children: nameOf2(notInForce.role) }),
4375
4342
  " ",
4376
4343
  notInForce.why
4377
4344
  ] }),
4378
- onRemove && /* @__PURE__ */ jsxs46(Fragment6, { children: [
4379
- rungs && /* @__PURE__ */ jsx72(DropdownMenuSeparator, {}),
4380
- /* @__PURE__ */ jsxs46(
4345
+ onRemove && /* @__PURE__ */ jsxs45(Fragment6, { children: [
4346
+ rungs && /* @__PURE__ */ jsx71(DropdownMenuSeparator, {}),
4347
+ /* @__PURE__ */ jsxs45(
4381
4348
  DropdownMenuItem,
4382
4349
  {
4383
4350
  variant: "destructive",
@@ -4385,13 +4352,13 @@ var GrantRolePicker = React61.forwardRef(
4385
4352
  "aria-label": removeDetail ? grantRemoveLabel(removeDetail, notInForce !== void 0) : void 0,
4386
4353
  className: "gap-2 py-1.5",
4387
4354
  children: [
4388
- rungs && /* @__PURE__ */ jsx72(Check8, { className: "invisible size-3.5 shrink-0" }),
4355
+ rungs && /* @__PURE__ */ jsx71(Check8, { className: "invisible size-3.5 shrink-0" }),
4389
4356
  removeWords
4390
4357
  ]
4391
4358
  }
4392
4359
  )
4393
4360
  ] }),
4394
- !carried && !rungs && valueNote === void 0 && !notInForce && !onRemove && notes?.empty !== void 0 && /* @__PURE__ */ jsx72("div", { className: MENU_STATEMENT, children: notes.empty })
4361
+ !carried && !rungs && valueNote === void 0 && !notInForce && !onRemove && notes?.empty !== void 0 && /* @__PURE__ */ jsx71("div", { className: MENU_STATEMENT, children: notes.empty })
4395
4362
  ] })
4396
4363
  ] });
4397
4364
  }
@@ -4399,9 +4366,9 @@ var GrantRolePicker = React61.forwardRef(
4399
4366
  GrantRolePicker.displayName = "GrantRolePicker";
4400
4367
 
4401
4368
  // src/components/grant-row.tsx
4402
- import * as React62 from "react";
4403
- import { jsx as jsx73, jsxs as jsxs47 } from "react/jsx-runtime";
4404
- var GrantRow = React62.forwardRef((props, ref) => {
4369
+ import * as React61 from "react";
4370
+ import { jsx as jsx72, jsxs as jsxs46 } from "react/jsx-runtime";
4371
+ var GrantRow = React61.forwardRef((props, ref) => {
4405
4372
  const {
4406
4373
  name,
4407
4374
  role,
@@ -4424,12 +4391,12 @@ var GrantRow = React62.forwardRef((props, ref) => {
4424
4391
  const nameOf2 = (id) => roles.find((r) => r.id === id)?.name ?? missingLabel;
4425
4392
  const picks = stated || readOnly ? void 0 : props.onChange;
4426
4393
  const removes = grantRemoveLabel(removeDetail ?? name, notInForce !== void 0);
4427
- return /* @__PURE__ */ jsxs47("div", { ref, className: cn("flex items-center justify-between gap-2 px-4 py-2.5", className), children: [
4428
- /* @__PURE__ */ jsx73("span", { className: "min-w-0 text-sm text-text-primary", children: name }),
4394
+ return /* @__PURE__ */ jsxs46("div", { ref, className: cn("flex items-center justify-between gap-2 px-4 py-2.5", className), children: [
4395
+ /* @__PURE__ */ jsx72("span", { className: "min-w-0 text-sm text-text-primary", children: name }),
4429
4396
  props.actionsInMenu ? (
4430
4397
  // One control, and the row ends at it. The carried case is derived from `via`: the group
4431
4398
  // is what makes the role not this row's to change.
4432
- /* @__PURE__ */ jsx73(
4399
+ /* @__PURE__ */ jsx72(
4433
4400
  GrantRolePicker,
4434
4401
  {
4435
4402
  value: role,
@@ -4453,8 +4420,8 @@ var GrantRow = React62.forwardRef((props, ref) => {
4453
4420
  // picker at all; an overtaken grant only exists under a group's, so it is the same fact
4454
4421
  // arriving by the other route. A row that picked and also said either would be offering
4455
4422
  // rungs that change nothing.
4456
- /* @__PURE__ */ jsxs47("div", { className: "flex items-center gap-1", children: [
4457
- /* @__PURE__ */ jsx73(
4423
+ /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1", children: [
4424
+ /* @__PURE__ */ jsx72(
4458
4425
  GrantRolePicker,
4459
4426
  {
4460
4427
  value: role,
@@ -4466,40 +4433,40 @@ var GrantRow = React62.forwardRef((props, ref) => {
4466
4433
  missingLabel
4467
4434
  }
4468
4435
  ),
4469
- onRemove ? /* @__PURE__ */ jsx73(RemoveButton, { label: removes, onClick: onRemove }) : reserveRemove ? (
4436
+ onRemove ? /* @__PURE__ */ jsx72(RemoveButton, { label: removes, onClick: onRemove }) : reserveRemove ? (
4470
4437
  // Spacing, not a control: `RemoveButton`'s list-row box is 36px, so a row with nothing
4471
4438
  // to remove holds the same 36px and the card keeps one right edge.
4472
- /* @__PURE__ */ jsx73("span", { "aria-hidden": true, className: "w-9 shrink-0" })
4439
+ /* @__PURE__ */ jsx72("span", { "aria-hidden": true, className: "w-9 shrink-0" })
4473
4440
  ) : null
4474
4441
  ] })
4475
- ) : /* @__PURE__ */ jsxs47("div", { className: "flex items-center gap-1", children: [
4476
- /* @__PURE__ */ jsxs47("div", { className: "flex items-center gap-1.5 pr-2", children: [
4477
- /* @__PURE__ */ jsxs47("div", { className: "flex shrink-0 flex-col items-end", children: [
4478
- /* @__PURE__ */ jsx73("span", { className: cn("text-sm", held ? WEIGHT_TONE[held.weight ?? "normal"] : MISSING_TONE), children: nameOf2(role) }),
4479
- via && /* @__PURE__ */ jsxs47("span", { className: "text-xs text-text-tertiary", children: [
4442
+ ) : /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1", children: [
4443
+ /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-1.5 pr-2", children: [
4444
+ /* @__PURE__ */ jsxs46("div", { className: "flex shrink-0 flex-col items-end", children: [
4445
+ /* @__PURE__ */ jsx72("span", { className: cn("text-sm", held ? WEIGHT_TONE[held.weight ?? "normal"] : MISSING_TONE), children: nameOf2(role) }),
4446
+ via && /* @__PURE__ */ jsxs46("span", { className: "text-xs text-text-tertiary", children: [
4480
4447
  "via ",
4481
4448
  via
4482
4449
  ] }),
4483
- notInForce && /* @__PURE__ */ jsxs47("span", { className: "text-right text-xs text-text-tertiary", children: [
4484
- /* @__PURE__ */ jsx73("span", { className: "line-through", children: nameOf2(notInForce.role) }),
4450
+ notInForce && /* @__PURE__ */ jsxs46("span", { className: "text-right text-xs text-text-tertiary", children: [
4451
+ /* @__PURE__ */ jsx72("span", { className: "line-through", children: nameOf2(notInForce.role) }),
4485
4452
  " ",
4486
4453
  notInForce.why
4487
4454
  ] })
4488
4455
  ] }),
4489
- reserveChevron && /* @__PURE__ */ jsx73("span", { "aria-hidden": true, className: "w-3.5 shrink-0" })
4456
+ reserveChevron && /* @__PURE__ */ jsx72("span", { "aria-hidden": true, className: "w-3.5 shrink-0" })
4490
4457
  ] }),
4491
- !readOnly && onRemove ? /* @__PURE__ */ jsx73(RemoveButton, { label: removes, onClick: onRemove }) : reserveRemove ? /* @__PURE__ */ jsx73("span", { "aria-hidden": true, className: "w-9 shrink-0" }) : null
4458
+ !readOnly && onRemove ? /* @__PURE__ */ jsx72(RemoveButton, { label: removes, onClick: onRemove }) : reserveRemove ? /* @__PURE__ */ jsx72("span", { "aria-hidden": true, className: "w-9 shrink-0" }) : null
4492
4459
  ] })
4493
4460
  ] });
4494
4461
  });
4495
4462
  GrantRow.displayName = "GrantRow";
4496
4463
 
4497
4464
  // src/components/removable-chip.tsx
4498
- import * as React63 from "react";
4465
+ import * as React62 from "react";
4499
4466
  import { X as X3 } from "lucide-react";
4500
- import { jsx as jsx74, jsxs as jsxs48 } from "react/jsx-runtime";
4501
- var RemovableChip = React63.forwardRef(
4502
- ({ label, onRemove, leading, removeLabel, className, ...props }, ref) => /* @__PURE__ */ jsxs48(
4467
+ import { jsx as jsx73, jsxs as jsxs47 } from "react/jsx-runtime";
4468
+ var RemovableChip = React62.forwardRef(
4469
+ ({ label, onRemove, leading, removeLabel, className, ...props }, ref) => /* @__PURE__ */ jsxs47(
4503
4470
  "span",
4504
4471
  {
4505
4472
  ref,
@@ -4512,8 +4479,8 @@ var RemovableChip = React63.forwardRef(
4512
4479
  ),
4513
4480
  children: [
4514
4481
  leading,
4515
- /* @__PURE__ */ jsx74("span", { className: "truncate", children: label }),
4516
- /* @__PURE__ */ jsx74(
4482
+ /* @__PURE__ */ jsx73("span", { className: "truncate", children: label }),
4483
+ /* @__PURE__ */ jsx73(
4517
4484
  Button,
4518
4485
  {
4519
4486
  type: "button",
@@ -4521,7 +4488,7 @@ var RemovableChip = React63.forwardRef(
4521
4488
  "aria-label": removeLabel ?? `Remove ${label}`,
4522
4489
  variant: "ghost",
4523
4490
  size: "xs",
4524
- icon: /* @__PURE__ */ jsx74(X3, {}),
4491
+ icon: /* @__PURE__ */ jsx73(X3, {}),
4525
4492
  className: "shrink-0 hover:bg-bg-overlay"
4526
4493
  }
4527
4494
  )
@@ -4532,22 +4499,22 @@ var RemovableChip = React63.forwardRef(
4532
4499
  RemovableChip.displayName = "RemovableChip";
4533
4500
 
4534
4501
  // src/hooks/use-fresh-highlight.ts
4535
- import * as React64 from "react";
4502
+ import * as React63 from "react";
4536
4503
  var HOLD_MS = 3200;
4537
4504
  var CLEAR_MS = HOLD_MS + 900;
4538
4505
  function useFreshHighlight() {
4539
- const [freshId, setFreshId] = React64.useState(null);
4540
- const [message, setMessage] = React64.useState("");
4541
- const timer = React64.useRef(void 0);
4542
- React64.useEffect(() => () => clearTimeout(timer.current), []);
4543
- const markFresh = React64.useCallback((id, announce) => {
4506
+ const [freshId, setFreshId] = React63.useState(null);
4507
+ const [message, setMessage] = React63.useState("");
4508
+ const timer = React63.useRef(void 0);
4509
+ React63.useEffect(() => () => clearTimeout(timer.current), []);
4510
+ const markFresh = React63.useCallback((id, announce) => {
4544
4511
  clearTimeout(timer.current);
4545
4512
  setFreshId(id);
4546
4513
  if (announce) setMessage(announce);
4547
4514
  timer.current = setTimeout(() => setFreshId(null), CLEAR_MS);
4548
4515
  }, []);
4549
- const isFresh = React64.useCallback((id) => id === freshId, [freshId]);
4550
- const freshRef = React64.useCallback((el) => {
4516
+ const isFresh = React63.useCallback((id) => id === freshId, [freshId]);
4517
+ const freshRef = React63.useCallback((el) => {
4551
4518
  if (!el) return;
4552
4519
  const rect = el.getBoundingClientRect();
4553
4520
  const viewportH = window.innerHeight || document.documentElement.clientHeight;
@@ -4556,7 +4523,7 @@ function useFreshHighlight() {
4556
4523
  const reduce = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
4557
4524
  el.scrollIntoView({ block: "nearest", behavior: reduce ? "auto" : "smooth" });
4558
4525
  }, []);
4559
- const announcer = React64.createElement(
4526
+ const announcer = React63.createElement(
4560
4527
  "span",
4561
4528
  { role: "status", "aria-live": "polite", className: "sr-only" },
4562
4529
  message
@@ -4566,7 +4533,7 @@ function useFreshHighlight() {
4566
4533
 
4567
4534
  // src/components/quick-search-row.tsx
4568
4535
  import { Search as Search2 } from "lucide-react";
4569
- import { jsx as jsx75, jsxs as jsxs49 } from "react/jsx-runtime";
4536
+ import { jsx as jsx74, jsxs as jsxs48 } from "react/jsx-runtime";
4570
4537
  function QuickSearchRow({
4571
4538
  onOpen,
4572
4539
  label = "Quick search",
@@ -4576,7 +4543,7 @@ function QuickSearchRow({
4576
4543
  }) {
4577
4544
  const name = shortcut ? `${label} ${shortcut}` : label;
4578
4545
  if (!collapsed) {
4579
- return /* @__PURE__ */ jsxs49(
4546
+ return /* @__PURE__ */ jsxs48(
4580
4547
  "button",
4581
4548
  {
4582
4549
  type: "button",
@@ -4594,34 +4561,34 @@ function QuickSearchRow({
4594
4561
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus"
4595
4562
  ),
4596
4563
  children: [
4597
- /* @__PURE__ */ jsx75("span", { className: "flex size-4 shrink-0 items-center justify-center [&_svg]:size-4", "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx75(Search2, {}) }),
4598
- /* @__PURE__ */ jsx75("span", { className: "min-w-0 flex-1 truncate", children: label }),
4599
- shortcut && /* @__PURE__ */ jsx75("span", { className: "shrink-0 text-xs font-medium text-text-tertiary", children: shortcut })
4564
+ /* @__PURE__ */ jsx74("span", { className: "flex size-4 shrink-0 items-center justify-center [&_svg]:size-4", "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx74(Search2, {}) }),
4565
+ /* @__PURE__ */ jsx74("span", { className: "min-w-0 flex-1 truncate", children: label }),
4566
+ shortcut && /* @__PURE__ */ jsx74("span", { className: "shrink-0 text-xs font-medium text-text-tertiary", children: shortcut })
4600
4567
  ]
4601
4568
  }
4602
4569
  );
4603
4570
  }
4604
- return /* @__PURE__ */ jsxs49(Tooltip, { children: [
4605
- /* @__PURE__ */ jsx75(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx75(
4571
+ return /* @__PURE__ */ jsxs48(Tooltip, { children: [
4572
+ /* @__PURE__ */ jsx74(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx74(
4606
4573
  NavRow,
4607
4574
  {
4608
4575
  variant: "rail",
4609
- icon: icon ?? /* @__PURE__ */ jsx75(Search2, { "aria-hidden": "true" }),
4576
+ icon: icon ?? /* @__PURE__ */ jsx74(Search2, { "aria-hidden": "true" }),
4610
4577
  label,
4611
4578
  onClick: onOpen
4612
4579
  }
4613
4580
  ) }),
4614
- /* @__PURE__ */ jsx75(TooltipContent, { side: "right", children: name })
4581
+ /* @__PURE__ */ jsx74(TooltipContent, { side: "right", children: name })
4615
4582
  ] });
4616
4583
  }
4617
4584
  QuickSearchRow.displayName = "QuickSearchRow";
4618
4585
 
4619
4586
  // src/components/nav-section-label.tsx
4620
- import * as React65 from "react";
4621
- import { jsx as jsx76 } from "react/jsx-runtime";
4622
- var NavSectionLabel = React65.forwardRef(
4587
+ import * as React64 from "react";
4588
+ import { jsx as jsx75 } from "react/jsx-runtime";
4589
+ var NavSectionLabel = React64.forwardRef(
4623
4590
  function NavSectionLabel2({ className, ...props }, ref) {
4624
- return /* @__PURE__ */ jsx76(
4591
+ return /* @__PURE__ */ jsx75(
4625
4592
  "div",
4626
4593
  {
4627
4594
  ref,
@@ -4634,8 +4601,8 @@ var NavSectionLabel = React65.forwardRef(
4634
4601
  NavSectionLabel.displayName = "NavSectionLabel";
4635
4602
 
4636
4603
  // src/components/menu-popup.tsx
4637
- import * as React66 from "react";
4638
- import { jsx as jsx77, jsxs as jsxs50 } from "react/jsx-runtime";
4604
+ import * as React65 from "react";
4605
+ import { jsx as jsx76, jsxs as jsxs49 } from "react/jsx-runtime";
4639
4606
  function MenuPopup({
4640
4607
  trigger,
4641
4608
  children,
@@ -4647,9 +4614,9 @@ function MenuPopup({
4647
4614
  sideOffset = 6,
4648
4615
  className
4649
4616
  }) {
4650
- return /* @__PURE__ */ jsxs50(Popover, { open, defaultOpen, onOpenChange, children: [
4651
- /* @__PURE__ */ jsx77(PopoverTrigger, { asChild: true, children: trigger }),
4652
- /* @__PURE__ */ jsx77(
4617
+ return /* @__PURE__ */ jsxs49(Popover, { open, defaultOpen, onOpenChange, children: [
4618
+ /* @__PURE__ */ jsx76(PopoverTrigger, { asChild: true, children: trigger }),
4619
+ /* @__PURE__ */ jsx76(
4653
4620
  PopoverContent,
4654
4621
  {
4655
4622
  side: direction === "up" ? "top" : "bottom",
@@ -4664,9 +4631,9 @@ function MenuPopup({
4664
4631
  )
4665
4632
  ] });
4666
4633
  }
4667
- var MenuDivider = React66.forwardRef(
4634
+ var MenuDivider = React65.forwardRef(
4668
4635
  function MenuDivider2({ className, ...props }, ref) {
4669
- return /* @__PURE__ */ jsx77(
4636
+ return /* @__PURE__ */ jsx76(
4670
4637
  "div",
4671
4638
  {
4672
4639
  ref,
@@ -4680,69 +4647,69 @@ var MenuDivider = React66.forwardRef(
4680
4647
  MenuDivider.displayName = "MenuDivider";
4681
4648
 
4682
4649
  // src/components/sidebar-product-header.tsx
4683
- import * as React67 from "react";
4650
+ import * as React66 from "react";
4684
4651
  import { Slot as Slot3 } from "@radix-ui/react-slot";
4685
4652
  import { ChevronsUpDown as ChevronsUpDown2 } from "lucide-react";
4686
- import { Fragment as Fragment7, jsx as jsx78, jsxs as jsxs51 } from "react/jsx-runtime";
4687
- var SidebarProductHeader = React67.forwardRef(
4653
+ import { Fragment as Fragment7, jsx as jsx77, jsxs as jsxs50 } from "react/jsx-runtime";
4654
+ var SidebarProductHeader = React66.forwardRef(
4688
4655
  function SidebarProductHeader2({ name, icon, trailing, asChild = false, className, children, ...props }, ref) {
4689
- const adornment = trailing === void 0 ? /* @__PURE__ */ jsx78(ChevronsUpDown2, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" }) : trailing;
4690
- const content = /* @__PURE__ */ jsxs51(Fragment7, { children: [
4691
- icon && /* @__PURE__ */ jsx78("span", { className: "flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-md", "aria-hidden": "true", children: icon }),
4692
- /* @__PURE__ */ jsx78("span", { className: "min-w-0 flex-1 truncate text-sm font-semibold text-text-primary", children: name }),
4693
- adornment && /* @__PURE__ */ jsx78("span", { className: "flex shrink-0 items-center", children: adornment })
4656
+ const adornment = trailing === void 0 ? /* @__PURE__ */ jsx77(ChevronsUpDown2, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" }) : trailing;
4657
+ const content = /* @__PURE__ */ jsxs50(Fragment7, { children: [
4658
+ icon && /* @__PURE__ */ jsx77("span", { className: "flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-md", "aria-hidden": "true", children: icon }),
4659
+ /* @__PURE__ */ jsx77("span", { className: "min-w-0 flex-1 truncate text-sm font-semibold text-text-primary", children: name }),
4660
+ adornment && /* @__PURE__ */ jsx77("span", { className: "flex shrink-0 items-center", children: adornment })
4694
4661
  ] });
4695
4662
  const classes = cn("flex w-full cursor-pointer items-center gap-2.5 rounded-xl px-1.5 py-0 text-left", className);
4696
4663
  if (asChild) {
4697
- const child = React67.Children.only(children);
4698
- return /* @__PURE__ */ jsx78(Slot3, { ref, className: classes, ...props, children: React67.cloneElement(child, void 0, content) });
4664
+ const child = React66.Children.only(children);
4665
+ return /* @__PURE__ */ jsx77(Slot3, { ref, className: classes, ...props, children: React66.cloneElement(child, void 0, content) });
4699
4666
  }
4700
- return /* @__PURE__ */ jsx78("button", { ref, type: "button", className: classes, ...props, children: content });
4667
+ return /* @__PURE__ */ jsx77("button", { ref, type: "button", className: classes, ...props, children: content });
4701
4668
  }
4702
4669
  );
4703
4670
  SidebarProductHeader.displayName = "SidebarProductHeader";
4704
4671
 
4705
4672
  // src/components/org-product-switcher.tsx
4706
- import * as React68 from "react";
4673
+ import * as React67 from "react";
4707
4674
  import { ChevronsUpDown as ChevronsUpDown3, Check as Check9, Search as Search3 } from "lucide-react";
4708
- import { Fragment as Fragment8, jsx as jsx79, jsxs as jsxs52 } from "react/jsx-runtime";
4675
+ import { Fragment as Fragment8, jsx as jsx78, jsxs as jsxs51 } from "react/jsx-runtime";
4709
4676
  var PRODUCT_STATUS_LABEL = {
4710
4677
  blocked: "Blocked",
4711
4678
  archived: "Archived"
4712
4679
  };
4713
4680
  function productStatusBadge(status) {
4714
4681
  if (status === "active") return void 0;
4715
- return /* @__PURE__ */ jsx79(Badge, { variant: "status", children: PRODUCT_STATUS_LABEL[status] });
4682
+ return /* @__PURE__ */ jsx78(Badge, { variant: "status", children: PRODUCT_STATUS_LABEL[status] });
4716
4683
  }
4717
4684
  var triggerBox = "flex min-h-[40px] w-full items-center gap-2.5 rounded-xl px-1.5 py-1 text-left transition-colors duration-fast hover:bg-[var(--hov-bg)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus";
4718
4685
  var inlineTriggerBox = "flex items-center gap-1.5 rounded-lg px-2 py-1 text-sm font-semibold text-text-primary transition-colors duration-fast hover:bg-[var(--hov-bg)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus";
4719
4686
  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";
4720
4687
  var sectionLabel = "px-2 pt-1.5 pb-1 text-xs font-medium text-text-tertiary";
4721
- var searchBox = "mx-1 mb-1 flex h-8 shrink-0 items-center gap-2 rounded-md border border-field-border bg-bg-primary px-2 focus-within:ring-2 focus-within:ring-border-focus";
4688
+ var searchBox = "mx-1 mb-1 flex h-8 shrink-0 items-center gap-2 rounded-md border border-field-border bg-bg-primary px-2 focus-within:ring-2 focus-within:ring-inset focus-within:ring-border-focus";
4722
4689
  var rowScroller = "flex max-h-[18rem] min-h-0 flex-col gap-px overflow-y-auto overscroll-contain";
4723
4690
  var NO_ORG_LABEL = "Select an organization\u2026";
4724
4691
  var nameOf = (item) => item?.name.trim() ? item.name : void 0;
4725
4692
  var UNNAMED = { organization: "Unnamed organization", product: "Unnamed product" };
4726
4693
  function NameLine({ className, children }) {
4727
- return /* @__PURE__ */ jsxs52("span", { className: "flex min-w-0 items-center gap-1", children: [
4728
- /* @__PURE__ */ jsx79("span", { className: cn("min-w-0 truncate text-sm leading-[normal]", className), children }),
4729
- /* @__PURE__ */ jsx79(ChevronsUpDown3, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" })
4694
+ return /* @__PURE__ */ jsxs51("span", { className: "flex min-w-0 items-center gap-1", children: [
4695
+ /* @__PURE__ */ jsx78("span", { className: cn("min-w-0 truncate text-sm leading-[normal]", className), children }),
4696
+ /* @__PURE__ */ jsx78(ChevronsUpDown3, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" })
4730
4697
  ] });
4731
4698
  }
4732
4699
  var SEARCH_NOUN = { organization: "organizations", product: "products" };
4733
4700
  function ItemLabel({ item, kind }) {
4734
4701
  const name = nameOf(item);
4735
- return /* @__PURE__ */ jsx79("span", { className: cn("min-w-0 flex-1 truncate", !name && "text-text-tertiary"), children: name ?? UNNAMED[kind] });
4702
+ return /* @__PURE__ */ jsx78("span", { className: cn("min-w-0 flex-1 truncate", !name && "text-text-tertiary"), children: name ?? UNNAMED[kind] });
4736
4703
  }
4737
4704
  var MARK_SIZE = { md: "sm", sm: "xs" };
4738
4705
  var ICON_BOX = { md: "size-8 rounded-md", sm: "size-6 rounded-sm" };
4739
4706
  function Mark2({ item, kind, size, reserve }) {
4740
4707
  if (item.icon) {
4741
- return /* @__PURE__ */ jsx79("span", { className: cn("flex shrink-0 items-center justify-center overflow-hidden", ICON_BOX[size]), "aria-hidden": "true", children: item.icon });
4708
+ return /* @__PURE__ */ jsx78("span", { className: cn("flex shrink-0 items-center justify-center overflow-hidden", ICON_BOX[size]), "aria-hidden": "true", children: item.icon });
4742
4709
  }
4743
4710
  const name = nameOf(item);
4744
- if (!name) return reserve ? /* @__PURE__ */ jsx79("span", { "aria-hidden": "true", className: cn("shrink-0", ICON_BOX[size]) }) : null;
4745
- return /* @__PURE__ */ jsx79(EntityTile, { name, tone: kind === "product" ? "auto" : "neutral", size: MARK_SIZE[size] });
4711
+ if (!name) return reserve ? /* @__PURE__ */ jsx78("span", { "aria-hidden": "true", className: cn("shrink-0", ICON_BOX[size]) }) : null;
4712
+ return /* @__PURE__ */ jsx78(EntityTile, { name, tone: kind === "product" ? "auto" : "neutral", size: MARK_SIZE[size] });
4746
4713
  }
4747
4714
  function OrgProductSwitcher({
4748
4715
  organizations = [],
@@ -4756,10 +4723,10 @@ function OrgProductSwitcher({
4756
4723
  className,
4757
4724
  ...props
4758
4725
  }) {
4759
- const [open, setOpen] = React68.useState(false);
4760
- const [query, setQuery] = React68.useState("");
4761
- const contentRef = React68.useRef(null);
4762
- const searchRef = React68.useRef(null);
4726
+ const [open, setOpen] = React67.useState(false);
4727
+ const [query, setQuery] = React67.useState("");
4728
+ const contentRef = React67.useRef(null);
4729
+ const searchRef = React67.useRef(null);
4763
4730
  const activeOrg = organizations.find((o) => o.id === activeOrgId);
4764
4731
  const activeProduct = products.find((p) => p.id === activeProductId);
4765
4732
  const orgName = nameOf(activeOrg);
@@ -4780,7 +4747,7 @@ function OrgProductSwitcher({
4780
4747
  const needle = query.trim().toLowerCase();
4781
4748
  const matches = needle ? items.filter((i) => (nameOf(i) ?? UNNAMED[menuKind]).toLowerCase().includes(needle)) : items;
4782
4749
  const hasList = items.length > 0;
4783
- React68.useEffect(() => {
4750
+ React67.useEffect(() => {
4784
4751
  if (!open || !hasList) return;
4785
4752
  const id = window.setTimeout(() => searchRef.current?.focus());
4786
4753
  return () => window.clearTimeout(id);
@@ -4810,24 +4777,24 @@ function OrgProductSwitcher({
4810
4777
  }
4811
4778
  if (e.key.length === 1) e.stopPropagation();
4812
4779
  };
4813
- return /* @__PURE__ */ jsxs52(DropdownMenu, { open, onOpenChange: setMenuOpen, children: [
4780
+ return /* @__PURE__ */ jsxs51(DropdownMenu, { open, onOpenChange: setMenuOpen, children: [
4814
4781
  trigger === "inline" ? (
4815
4782
  // One line, and the words are the whole trigger: the product where one has resolved, the
4816
4783
  // org where it has not, and the same tertiary placeholder as the stacked form where neither
4817
4784
  // has. Nothing is truncated — a bar sizes to its contents, and a name cut short in a bar is
4818
4785
  // a name nowhere else on the page repeats.
4819
- /* @__PURE__ */ jsxs52(DropdownMenuTrigger, { "aria-label": ariaLabel, className: cn(inlineTriggerBox, className), children: [
4820
- /* @__PURE__ */ jsx79("span", { className: cn(!inlineName && "font-medium text-text-tertiary"), children: inlineName ?? NO_ORG_LABEL }),
4821
- /* @__PURE__ */ jsx79(ChevronsUpDown3, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" })
4786
+ /* @__PURE__ */ jsxs51(DropdownMenuTrigger, { "aria-label": ariaLabel, className: cn(inlineTriggerBox, className), children: [
4787
+ /* @__PURE__ */ jsx78("span", { className: cn(!inlineName && "font-medium text-text-tertiary"), children: inlineName ?? NO_ORG_LABEL }),
4788
+ /* @__PURE__ */ jsx78(ChevronsUpDown3, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" })
4822
4789
  ] })
4823
- ) : /* @__PURE__ */ jsxs52(DropdownMenuTrigger, { "aria-label": ariaLabel, className: cn(triggerBox, className), children: [
4824
- triggerMark && /* @__PURE__ */ jsx79(Mark2, { item: triggerMark, kind: markKind, size: "md" }),
4825
- orgLevel ? /* @__PURE__ */ jsx79("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsx79(NameLine, { className: orgName ? "font-semibold text-text-primary" : "text-text-tertiary", children: orgName ?? NO_ORG_LABEL }) }) : /* @__PURE__ */ jsxs52("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
4826
- orgName && /* @__PURE__ */ jsx79("span", { className: "truncate text-xs leading-[normal] text-text-tertiary", children: orgName }),
4827
- /* @__PURE__ */ jsx79(NameLine, { className: productName ? "font-semibold text-text-primary" : "text-text-tertiary", children: productLabel })
4790
+ ) : /* @__PURE__ */ jsxs51(DropdownMenuTrigger, { "aria-label": ariaLabel, className: cn(triggerBox, className), children: [
4791
+ triggerMark && /* @__PURE__ */ jsx78(Mark2, { item: triggerMark, kind: markKind, size: "md" }),
4792
+ orgLevel ? /* @__PURE__ */ jsx78("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsx78(NameLine, { className: orgName ? "font-semibold text-text-primary" : "text-text-tertiary", children: orgName ?? NO_ORG_LABEL }) }) : /* @__PURE__ */ jsxs51("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
4793
+ orgName && /* @__PURE__ */ jsx78("span", { className: "truncate text-xs leading-[normal] text-text-tertiary", children: orgName }),
4794
+ /* @__PURE__ */ jsx78(NameLine, { className: productName ? "font-semibold text-text-primary" : "text-text-tertiary", children: productLabel })
4828
4795
  ] })
4829
4796
  ] }),
4830
- /* @__PURE__ */ jsxs52(
4797
+ /* @__PURE__ */ jsxs51(
4831
4798
  DropdownMenuContent,
4832
4799
  {
4833
4800
  ref: contentRef,
@@ -4835,11 +4802,11 @@ function OrgProductSwitcher({
4835
4802
  sideOffset: 6,
4836
4803
  className: "flex w-[var(--radix-dropdown-menu-trigger-width)] min-w-64 flex-col gap-px rounded-xl border-border-subtle bg-[var(--menu-bg)] p-1 shadow-(--menu-shadow)",
4837
4804
  children: [
4838
- items.length > 0 && /* @__PURE__ */ jsxs52(Fragment8, { children: [
4839
- /* @__PURE__ */ jsx79(DropdownMenuLabel, { className: sectionLabel, children: menuKind === "organization" ? "Organizations" : "Products" }),
4840
- /* @__PURE__ */ jsxs52("div", { className: searchBox, onKeyDown: onSearchKeyDown, children: [
4841
- /* @__PURE__ */ jsx79(Search3, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" }),
4842
- /* @__PURE__ */ jsx79(
4805
+ items.length > 0 && /* @__PURE__ */ jsxs51(Fragment8, { children: [
4806
+ /* @__PURE__ */ jsx78(DropdownMenuLabel, { className: sectionLabel, children: menuKind === "organization" ? "Organizations" : "Products" }),
4807
+ /* @__PURE__ */ jsxs51("div", { className: searchBox, onKeyDown: onSearchKeyDown, children: [
4808
+ /* @__PURE__ */ jsx78(Search3, { size: 14, "aria-hidden": "true", className: "shrink-0 text-text-tertiary" }),
4809
+ /* @__PURE__ */ jsx78(
4843
4810
  "input",
4844
4811
  {
4845
4812
  ref: searchRef,
@@ -4852,27 +4819,27 @@ function OrgProductSwitcher({
4852
4819
  }
4853
4820
  )
4854
4821
  ] }),
4855
- /* @__PURE__ */ jsx79("div", { role: "group", className: rowScroller, children: matches.map((item) => {
4822
+ /* @__PURE__ */ jsx78("div", { role: "group", className: rowScroller, children: matches.map((item) => {
4856
4823
  const status = menuKind === "product" && productStatusBadge(item.status ?? "active");
4857
- return /* @__PURE__ */ jsxs52(DropdownMenuItem, { "data-menu-row": "", className: menuItem, onSelect: () => pick(item.id), children: [
4858
- /* @__PURE__ */ jsx79(Mark2, { item, kind: menuKind, size: "sm", reserve: true }),
4859
- /* @__PURE__ */ jsx79(ItemLabel, { item, kind: menuKind }),
4860
- status && /* @__PURE__ */ jsx79("span", { className: "shrink-0", children: status }),
4861
- item.id === activeItemId && /* @__PURE__ */ jsx79(Check9, { className: "size-4 shrink-0 text-text-secondary", "aria-hidden": "true" })
4824
+ return /* @__PURE__ */ jsxs51(DropdownMenuItem, { "data-menu-row": "", className: menuItem, onSelect: () => pick(item.id), children: [
4825
+ /* @__PURE__ */ jsx78(Mark2, { item, kind: menuKind, size: "sm", reserve: true }),
4826
+ /* @__PURE__ */ jsx78(ItemLabel, { item, kind: menuKind }),
4827
+ status && /* @__PURE__ */ jsx78("span", { className: "shrink-0", children: status }),
4828
+ item.id === activeItemId && /* @__PURE__ */ jsx78(Check9, { className: "size-4 shrink-0 text-text-secondary", "aria-hidden": "true" })
4862
4829
  ] }, item.id);
4863
4830
  }) }),
4864
- matches.length === 0 && /* @__PURE__ */ jsxs52("div", { className: "px-2 py-1.5 text-sm text-text-tertiary", children: [
4831
+ matches.length === 0 && /* @__PURE__ */ jsxs51("div", { className: "px-2 py-1.5 text-sm text-text-tertiary", children: [
4865
4832
  "No ",
4866
4833
  noun,
4867
4834
  " match."
4868
4835
  ] })
4869
4836
  ] }),
4870
- actions && actions.length > 0 && /* @__PURE__ */ jsxs52(Fragment8, { children: [
4871
- items.length > 0 && /* @__PURE__ */ jsx79(DropdownMenuSeparator, { className: "mx-0 shrink-0" }),
4872
- actions.map((a) => /* @__PURE__ */ jsx79(DropdownMenuItem, { className: menuItem, onSelect: a.onSelect, asChild: Boolean(a.href), children: a.href ? /* @__PURE__ */ jsxs52("a", { href: a.href, children: [
4837
+ actions && actions.length > 0 && /* @__PURE__ */ jsxs51(Fragment8, { children: [
4838
+ items.length > 0 && /* @__PURE__ */ jsx78(DropdownMenuSeparator, { className: "mx-0 shrink-0" }),
4839
+ actions.map((a) => /* @__PURE__ */ jsx78(DropdownMenuItem, { className: menuItem, onSelect: a.onSelect, asChild: Boolean(a.href), children: a.href ? /* @__PURE__ */ jsxs51("a", { href: a.href, children: [
4873
4840
  a.icon,
4874
4841
  a.label
4875
- ] }) : /* @__PURE__ */ jsxs52(Fragment8, { children: [
4842
+ ] }) : /* @__PURE__ */ jsxs51(Fragment8, { children: [
4876
4843
  a.icon,
4877
4844
  a.label
4878
4845
  ] }) }, a.id))
@@ -4886,13 +4853,13 @@ OrgProductSwitcher.displayName = "OrgProductSwitcher";
4886
4853
 
4887
4854
  // src/components/sidebar-back-header.tsx
4888
4855
  import { ArrowLeft as ArrowLeft3 } from "lucide-react";
4889
- import { jsx as jsx80, jsxs as jsxs53 } from "react/jsx-runtime";
4856
+ import { jsx as jsx79, jsxs as jsxs52 } from "react/jsx-runtime";
4890
4857
  var focusRing = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus";
4891
4858
  var arrowPlate = "flex size-5 items-center justify-center rounded-md transition-colors duration-fast hover:bg-[color-mix(in_srgb,var(--text-primary)_12%,transparent)] hover:text-text-primary";
4892
4859
  var rowPlate = "transition-colors duration-fast hover:bg-[color-mix(in_srgb,var(--text-primary)_7%,transparent)]";
4893
4860
  var arrowBox = "flex shrink-0 cursor-pointer items-center rounded-xl py-2 pr-0 pl-2.5 text-text-secondary";
4894
4861
  var titleBox = "min-w-0 flex-1 cursor-pointer truncate rounded-xl py-2 pr-2.5 pl-[14px] text-left text-sm font-semibold text-text-primary";
4895
- var Arrow = () => /* @__PURE__ */ jsx80(ArrowLeft3, { size: 16, "aria-hidden": "true" });
4862
+ var Arrow = () => /* @__PURE__ */ jsx79(ArrowLeft3, { size: 16, "aria-hidden": "true" });
4896
4863
  function SidebarBackHeader({
4897
4864
  title,
4898
4865
  onBack,
@@ -4906,7 +4873,7 @@ function SidebarBackHeader({
4906
4873
  const { className: arrowClassName, ...arrowRest } = arrowProps ?? {};
4907
4874
  const { className: titleClassName, ...titleRest } = titleProps ?? {};
4908
4875
  if (!onTitleClick) {
4909
- return /* @__PURE__ */ jsxs53(
4876
+ return /* @__PURE__ */ jsxs52(
4910
4877
  "button",
4911
4878
  {
4912
4879
  type: "button",
@@ -4914,14 +4881,14 @@ function SidebarBackHeader({
4914
4881
  className: cn("flex cursor-pointer items-center rounded-xl", rowPlate, focusRing, className),
4915
4882
  ...rowProps,
4916
4883
  children: [
4917
- /* @__PURE__ */ jsx80("span", { className: arrowBox, children: /* @__PURE__ */ jsx80("span", { className: cn(arrowPlate, arrowClassName), ...arrowRest, children: /* @__PURE__ */ jsx80(Arrow, {}) }) }),
4918
- /* @__PURE__ */ jsx80("span", { className: cn(titleBox, titleClassName), ...titleRest, children: title })
4884
+ /* @__PURE__ */ jsx79("span", { className: arrowBox, children: /* @__PURE__ */ jsx79("span", { className: cn(arrowPlate, arrowClassName), ...arrowRest, children: /* @__PURE__ */ jsx79(Arrow, {}) }) }),
4885
+ /* @__PURE__ */ jsx79("span", { className: cn(titleBox, titleClassName), ...titleRest, children: title })
4919
4886
  ]
4920
4887
  }
4921
4888
  );
4922
4889
  }
4923
- return /* @__PURE__ */ jsxs53("div", { className: cn("flex items-center rounded-xl", rowPlate, className), ...rowProps, children: [
4924
- /* @__PURE__ */ jsx80(
4890
+ return /* @__PURE__ */ jsxs52("div", { className: cn("flex items-center rounded-xl", rowPlate, className), ...rowProps, children: [
4891
+ /* @__PURE__ */ jsx79(
4925
4892
  "button",
4926
4893
  {
4927
4894
  type: "button",
@@ -4929,10 +4896,10 @@ function SidebarBackHeader({
4929
4896
  onClick: onBack,
4930
4897
  className: cn(arrowBox, focusRing, arrowClassName),
4931
4898
  ...arrowRest,
4932
- children: /* @__PURE__ */ jsx80("span", { className: arrowPlate, children: /* @__PURE__ */ jsx80(Arrow, {}) })
4899
+ children: /* @__PURE__ */ jsx79("span", { className: arrowPlate, children: /* @__PURE__ */ jsx79(Arrow, {}) })
4933
4900
  }
4934
4901
  ),
4935
- /* @__PURE__ */ jsx80(
4902
+ /* @__PURE__ */ jsx79(
4936
4903
  "button",
4937
4904
  {
4938
4905
  type: "button",
@@ -4947,24 +4914,24 @@ function SidebarBackHeader({
4947
4914
  SidebarBackHeader.displayName = "SidebarBackHeader";
4948
4915
 
4949
4916
  // src/components/top-bar.tsx
4950
- import * as React69 from "react";
4951
- import { jsx as jsx81, jsxs as jsxs54 } from "react/jsx-runtime";
4952
- var TopBar = React69.forwardRef(
4953
- ({ left, right, className, ...props }, ref) => /* @__PURE__ */ jsxs54("div", { ref, className: cn("flex w-full items-center gap-1", className), ...props, children: [
4917
+ import * as React68 from "react";
4918
+ import { jsx as jsx80, jsxs as jsxs53 } from "react/jsx-runtime";
4919
+ var TopBar = React68.forwardRef(
4920
+ ({ left, right, className, ...props }, ref) => /* @__PURE__ */ jsxs53("div", { ref, className: cn("flex w-full items-center gap-1", className), ...props, children: [
4954
4921
  left,
4955
- right && /* @__PURE__ */ jsx81("div", { className: "ml-auto flex items-center gap-2", children: right })
4922
+ right && /* @__PURE__ */ jsx80("div", { className: "ml-auto flex items-center gap-2", children: right })
4956
4923
  ] })
4957
4924
  );
4958
4925
  TopBar.displayName = "TopBar";
4959
4926
 
4960
4927
  // src/components/grid.tsx
4961
- import * as React70 from "react";
4928
+ import * as React69 from "react";
4962
4929
  import { Slot as Slot4 } from "@radix-ui/react-slot";
4963
- import { jsx as jsx82 } from "react/jsx-runtime";
4964
- var Grid = React70.forwardRef(
4930
+ import { jsx as jsx81 } from "react/jsx-runtime";
4931
+ var Grid = React69.forwardRef(
4965
4932
  ({ fluid = false, asChild = false, className, ...props }, ref) => {
4966
4933
  const Comp = asChild ? Slot4 : "div";
4967
- return /* @__PURE__ */ jsx82(
4934
+ return /* @__PURE__ */ jsx81(
4968
4935
  Comp,
4969
4936
  {
4970
4937
  ref,
@@ -4982,9 +4949,9 @@ var Grid = React70.forwardRef(
4982
4949
  Grid.displayName = "Grid";
4983
4950
 
4984
4951
  // src/components/col.tsx
4985
- import * as React71 from "react";
4952
+ import * as React70 from "react";
4986
4953
  import { Slot as Slot5 } from "@radix-ui/react-slot";
4987
- import { jsx as jsx83 } from "react/jsx-runtime";
4954
+ import { jsx as jsx82 } from "react/jsx-runtime";
4988
4955
  var TIER_MAX = { base: 4, md: 8, xl: 12 };
4989
4956
  var SPAN = {
4990
4957
  base: { 1: "col-span-1", 2: "col-span-2", 3: "col-span-3", 4: "col-span-4" },
@@ -5104,27 +5071,27 @@ function responsiveClasses(span, offset) {
5104
5071
  }
5105
5072
  return cn(...spanClasses, ...startClasses);
5106
5073
  }
5107
- var Col = React71.forwardRef(
5074
+ var Col = React70.forwardRef(
5108
5075
  ({ span, offset, asChild = false, className, ...props }, ref) => {
5109
5076
  const Comp = asChild ? Slot5 : "div";
5110
- return /* @__PURE__ */ jsx83(Comp, { ref, className: cn(responsiveClasses(span, offset), className), ...props });
5077
+ return /* @__PURE__ */ jsx82(Comp, { ref, className: cn(responsiveClasses(span, offset), className), ...props });
5111
5078
  }
5112
5079
  );
5113
5080
  Col.displayName = "Col";
5114
5081
 
5115
5082
  // src/components/page-column.tsx
5116
- import { jsx as jsx84 } from "react/jsx-runtime";
5083
+ import { jsx as jsx83 } from "react/jsx-runtime";
5117
5084
  var WIDTH = {
5118
5085
  reading: "grid gap-5 page-column",
5119
5086
  full: "grid gap-5"
5120
5087
  };
5121
5088
  function PageColumn({ className, width = "reading", ...props }) {
5122
- return /* @__PURE__ */ jsx84("div", { "data-slot": "page-column", className: cn(WIDTH[width], className), ...props });
5089
+ return /* @__PURE__ */ jsx83("div", { "data-slot": "page-column", className: cn(WIDTH[width], className), ...props });
5123
5090
  }
5124
5091
 
5125
5092
  // src/components/code-block.tsx
5126
- import * as React72 from "react";
5127
- import { jsx as jsx85, jsxs as jsxs55 } from "react/jsx-runtime";
5093
+ import * as React71 from "react";
5094
+ import { jsx as jsx84, jsxs as jsxs54 } from "react/jsx-runtime";
5128
5095
  var TOKEN_CLASS = {
5129
5096
  comment: "text-text-tertiary italic",
5130
5097
  string: "text-text-success",
@@ -5295,30 +5262,30 @@ function dropLeading(tokens, count) {
5295
5262
  }
5296
5263
  return out;
5297
5264
  }
5298
- var CodeBlock = React72.forwardRef(
5265
+ var CodeBlock = React71.forwardRef(
5299
5266
  ({ code, lang = "tsx", variant = "default", copy = false, filename, scroll = false, highlightLines, showLineNumbers = false, className, ...props }, ref) => {
5300
- const lines = React72.useMemo(() => tokenizeLines(code, lang), [code, lang]);
5301
- const rawLines = React72.useMemo(() => code.split("\n"), [code]);
5302
- const highlighted = React72.useMemo(() => parseHighlightLines(highlightLines), [highlightLines]);
5267
+ const lines = React71.useMemo(() => tokenizeLines(code, lang), [code, lang]);
5268
+ const rawLines = React71.useMemo(() => code.split("\n"), [code]);
5269
+ const highlighted = React71.useMemo(() => parseHighlightLines(highlightLines), [highlightLines]);
5303
5270
  const isDiff = variant === "diff";
5304
5271
  const isTerminal = variant === "terminal";
5305
5272
  const showCopy = copy && !isTerminal;
5306
5273
  const overlayCopy = showCopy && !filename;
5307
5274
  const contentWhitespace = scroll ? "whitespace-pre" : "whitespace-pre-wrap break-words";
5308
- const pre = /* @__PURE__ */ jsx85(
5275
+ const pre = /* @__PURE__ */ jsx84(
5309
5276
  "pre",
5310
5277
  {
5311
5278
  ref,
5312
5279
  className: cn("py-4 font-mono text-xs leading-6 text-text-secondary", scroll && "overflow-x-auto", className),
5313
5280
  ...props,
5314
- children: /* @__PURE__ */ jsx85("code", { className: "block min-w-full", children: lines.map((tokens, i) => {
5281
+ children: /* @__PURE__ */ jsx84("code", { className: "block min-w-full", children: lines.map((tokens, i) => {
5315
5282
  const n = i + 1;
5316
5283
  const raw = rawLines[i] ?? "";
5317
5284
  const diffKind = isDiff ? raw[0] === "+" ? "add" : raw[0] === "-" ? "remove" : null : null;
5318
5285
  const promptLen = isTerminal && raw[0] === "$" ? 1 : 0;
5319
5286
  const markerDrop = diffKind ? 1 : promptLen;
5320
5287
  const body = markerDrop ? dropLeading(tokens, markerDrop) : tokens;
5321
- return /* @__PURE__ */ jsxs55(
5288
+ return /* @__PURE__ */ jsxs54(
5322
5289
  "span",
5323
5290
  {
5324
5291
  "data-line": n,
@@ -5331,8 +5298,8 @@ var CodeBlock = React72.forwardRef(
5331
5298
  !diffKind && highlighted.has(n) && "bg-bg-brand-subtle"
5332
5299
  ),
5333
5300
  children: [
5334
- showLineNumbers && /* @__PURE__ */ jsx85("span", { "aria-hidden": true, className: "mr-3 w-8 shrink-0 select-none text-right text-text-tertiary", children: n }),
5335
- (isDiff || isTerminal) && /* @__PURE__ */ jsx85(
5301
+ showLineNumbers && /* @__PURE__ */ jsx84("span", { "aria-hidden": true, className: "mr-3 w-8 shrink-0 select-none text-right text-text-tertiary", children: n }),
5302
+ (isDiff || isTerminal) && /* @__PURE__ */ jsx84(
5336
5303
  "span",
5337
5304
  {
5338
5305
  "aria-hidden": true,
@@ -5345,7 +5312,7 @@ var CodeBlock = React72.forwardRef(
5345
5312
  children: diffKind === "add" ? "+" : diffKind === "remove" ? "-" : promptLen > 0 ? "$" : ""
5346
5313
  }
5347
5314
  ),
5348
- /* @__PURE__ */ jsx85("span", { className: cn("min-w-0 flex-1", contentWhitespace), children: body.length ? body.map((token, j) => /* @__PURE__ */ jsx85("span", { className: TOKEN_CLASS[token.kind], children: token.text }, j)) : "\xA0" })
5315
+ /* @__PURE__ */ jsx84("span", { className: cn("min-w-0 flex-1", contentWhitespace), children: body.length ? body.map((token, j) => /* @__PURE__ */ jsx84("span", { className: TOKEN_CLASS[token.kind], children: token.text }, j)) : "\xA0" })
5349
5316
  ]
5350
5317
  },
5351
5318
  i
@@ -5353,16 +5320,16 @@ var CodeBlock = React72.forwardRef(
5353
5320
  }) })
5354
5321
  }
5355
5322
  );
5356
- return /* @__PURE__ */ jsxs55("div", { className: "relative overflow-hidden rounded-lg border border-border-subtle bg-bg-primary", children: [
5357
- filename && /* @__PURE__ */ jsxs55("div", { className: "flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-2", children: [
5358
- /* @__PURE__ */ jsx85("span", { className: "font-mono text-xs text-text-tertiary", children: filename }),
5359
- showCopy && /* @__PURE__ */ jsx85(CopyButton, { value: code, label: "Copy code", className: "size-7" })
5323
+ return /* @__PURE__ */ jsxs54("div", { className: "relative overflow-hidden rounded-lg border border-border-subtle bg-bg-primary", children: [
5324
+ filename && /* @__PURE__ */ jsxs54("div", { className: "flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-2", children: [
5325
+ /* @__PURE__ */ jsx84("span", { className: "font-mono text-xs text-text-tertiary", children: filename }),
5326
+ showCopy && /* @__PURE__ */ jsx84(CopyButton, { value: code, label: "Copy code", className: "size-7" })
5360
5327
  ] }),
5361
5328
  pre,
5362
5329
  overlayCopy && // Always visible, on every device: a copy control you have to hover to discover is a
5363
5330
  // control most people never find. Opaque (`bg-bg-primary`, the block's own surface) so it
5364
5331
  // reads cleanly where a long first line runs under it.
5365
- /* @__PURE__ */ jsx85(
5332
+ /* @__PURE__ */ jsx84(
5366
5333
  CopyButton,
5367
5334
  {
5368
5335
  value: code,
@@ -5374,7 +5341,7 @@ var CodeBlock = React72.forwardRef(
5374
5341
  }
5375
5342
  );
5376
5343
  CodeBlock.displayName = "CodeBlock";
5377
- var Code = React72.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx85(
5344
+ var Code = React71.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx84(
5378
5345
  "code",
5379
5346
  {
5380
5347
  ref,
@@ -5388,13 +5355,13 @@ var Code = React72.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
5388
5355
  Code.displayName = "Code";
5389
5356
 
5390
5357
  // src/components/grid-overlay.tsx
5391
- import * as React73 from "react";
5392
- import { jsx as jsx86 } from "react/jsx-runtime";
5358
+ import * as React72 from "react";
5359
+ import { jsx as jsx85 } from "react/jsx-runtime";
5393
5360
  var BASELINE = "var(--grid-gutter) / 2";
5394
- var GridOverlay = React73.forwardRef(
5361
+ var GridOverlay = React72.forwardRef(
5395
5362
  ({ columns, baseline = false, className, style, ...props }, ref) => {
5396
5363
  const count = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;
5397
- return /* @__PURE__ */ jsx86(
5364
+ return /* @__PURE__ */ jsx85(
5398
5365
  "div",
5399
5366
  {
5400
5367
  ref,
@@ -5411,7 +5378,7 @@ var GridOverlay = React73.forwardRef(
5411
5378
  ...style
5412
5379
  },
5413
5380
  ...props,
5414
- children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsx86("span", { style: { backgroundColor: "var(--bg-brand)", opacity: 0.1 } }, i))
5381
+ children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsx85("span", { style: { backgroundColor: "var(--bg-brand)", opacity: 0.1 } }, i))
5415
5382
  }
5416
5383
  );
5417
5384
  }
@@ -5419,10 +5386,10 @@ var GridOverlay = React73.forwardRef(
5419
5386
  GridOverlay.displayName = "GridOverlay";
5420
5387
 
5421
5388
  // src/components/attachment-chip.tsx
5422
- import * as React74 from "react";
5389
+ import * as React73 from "react";
5423
5390
  import { cva as cva8 } from "class-variance-authority";
5424
5391
  import { Link2, Clock, Plus as Plus2 } from "lucide-react";
5425
- import { jsx as jsx87, jsxs as jsxs56 } from "react/jsx-runtime";
5392
+ import { jsx as jsx86, jsxs as jsxs55 } from "react/jsx-runtime";
5426
5393
  var attachmentChipVariants = cva8(
5427
5394
  "inline-flex items-center gap-1.5 rounded-lg border px-2.5 py-1 text-sm font-medium leading-tight",
5428
5395
  {
@@ -5441,11 +5408,11 @@ var stateIcons = {
5441
5408
  requested: Clock,
5442
5409
  available: Plus2
5443
5410
  };
5444
- var AttachmentChip = React74.forwardRef(
5411
+ var AttachmentChip = React73.forwardRef(
5445
5412
  ({ state, account, icon, hideIcon = false, className, ...props }, ref) => {
5446
5413
  const Icon = icon ?? stateIcons[state ?? "attached"];
5447
- return /* @__PURE__ */ jsxs56("span", { ref, className: cn(attachmentChipVariants({ state }), className), ...props, children: [
5448
- !hideIcon && /* @__PURE__ */ jsx87(Icon, { className: "size-3.5 shrink-0 opacity-90", "aria-hidden": "true" }),
5414
+ return /* @__PURE__ */ jsxs55("span", { ref, className: cn(attachmentChipVariants({ state }), className), ...props, children: [
5415
+ !hideIcon && /* @__PURE__ */ jsx86(Icon, { className: "size-3.5 shrink-0 opacity-90", "aria-hidden": "true" }),
5449
5416
  account
5450
5417
  ] });
5451
5418
  }
@@ -5453,9 +5420,9 @@ var AttachmentChip = React74.forwardRef(
5453
5420
  AttachmentChip.displayName = "AttachmentChip";
5454
5421
 
5455
5422
  // src/components/connector-card.tsx
5456
- import * as React75 from "react";
5423
+ import * as React74 from "react";
5457
5424
  import { AlertTriangle, ChevronDown as ChevronDown5 } from "lucide-react";
5458
- import { Fragment as Fragment9, jsx as jsx88, jsxs as jsxs57 } from "react/jsx-runtime";
5425
+ import { Fragment as Fragment9, jsx as jsx87, jsxs as jsxs56 } from "react/jsx-runtime";
5459
5426
  var originLabels = {
5460
5427
  org: "Attached by the organization",
5461
5428
  product: "Attached by this product"
@@ -5468,7 +5435,7 @@ var statusLabels = {
5468
5435
  function monogram(name) {
5469
5436
  return name.replace(/[^a-zA-Z0-9 ]/g, " ").split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join("");
5470
5437
  }
5471
- var ConnectorCard = React75.forwardRef(
5438
+ var ConnectorCard = React74.forwardRef(
5472
5439
  ({
5473
5440
  name,
5474
5441
  kind,
@@ -5489,7 +5456,7 @@ var ConnectorCard = React75.forwardRef(
5489
5456
  }, ref) => {
5490
5457
  const connected = status !== "not-connected";
5491
5458
  const label = statusLabel ?? statusLabels[status];
5492
- const glyphBox = /* @__PURE__ */ jsx88(
5459
+ const glyphBox = /* @__PURE__ */ jsx87(
5493
5460
  "div",
5494
5461
  {
5495
5462
  "aria-hidden": "true",
@@ -5497,48 +5464,48 @@ var ConnectorCard = React75.forwardRef(
5497
5464
  children: glyph ?? monogram(name)
5498
5465
  }
5499
5466
  );
5500
- const identity = /* @__PURE__ */ jsxs57("div", { className: "min-w-0", children: [
5501
- /* @__PURE__ */ jsx88("p", { className: "truncate text-sm font-semibold text-text-primary", children: name }),
5502
- (kind || origin) && /* @__PURE__ */ jsxs57("div", { className: "mt-0.5 flex flex-wrap gap-1", children: [
5503
- kind && /* @__PURE__ */ jsx88(Badge, { variant: "secondary", children: kind }),
5504
- origin && /* @__PURE__ */ jsx88(Badge, { variant: "outline", children: originLabels[origin] })
5467
+ const identity = /* @__PURE__ */ jsxs56("div", { className: "min-w-0", children: [
5468
+ /* @__PURE__ */ jsx87("p", { className: "truncate text-sm font-semibold text-text-primary", children: name }),
5469
+ (kind || origin) && /* @__PURE__ */ jsxs56("div", { className: "mt-0.5 flex flex-wrap gap-1", children: [
5470
+ kind && /* @__PURE__ */ jsx87(Badge, { variant: "secondary", children: kind }),
5471
+ origin && /* @__PURE__ */ jsx87(Badge, { variant: "outline", children: originLabels[origin] })
5505
5472
  ] })
5506
5473
  ] });
5507
- const statusBadge = label ? /* @__PURE__ */ jsx88(Badge, { variant: "status", children: label }) : null;
5508
- const accessNote = access ? /* @__PURE__ */ jsxs57(
5474
+ const statusBadge = label ? /* @__PURE__ */ jsx87(Badge, { variant: "status", children: label }) : null;
5475
+ const accessNote = access ? /* @__PURE__ */ jsxs56(
5509
5476
  "div",
5510
5477
  {
5511
5478
  role: "note",
5512
5479
  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",
5513
5480
  children: [
5514
- /* @__PURE__ */ jsx88(AlertTriangle, { className: "mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }),
5515
- /* @__PURE__ */ jsx88("span", { children: access })
5481
+ /* @__PURE__ */ jsx87(AlertTriangle, { className: "mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }),
5482
+ /* @__PURE__ */ jsx87("span", { children: access })
5516
5483
  ]
5517
5484
  }
5518
5485
  ) : null;
5519
5486
  const footerAction = collapsible ? action : connected && action;
5520
- const footer = attachedCount !== void 0 || footerAction ? /* @__PURE__ */ jsxs57("div", { className: "flex items-center justify-between border-t border-border-subtle px-4 py-3", children: [
5521
- /* @__PURE__ */ jsx88("span", { className: "text-sm text-text-secondary", children: attachedCount !== void 0 ? /* @__PURE__ */ jsxs57(Fragment9, { children: [
5487
+ const footer = attachedCount !== void 0 || footerAction ? /* @__PURE__ */ jsxs56("div", { className: "flex items-center justify-between border-t border-border-subtle px-4 py-3", children: [
5488
+ /* @__PURE__ */ jsx87("span", { className: "text-sm text-text-secondary", children: attachedCount !== void 0 ? /* @__PURE__ */ jsxs56(Fragment9, { children: [
5522
5489
  "Attached to ",
5523
- /* @__PURE__ */ jsx88("span", { className: "font-semibold text-text-primary", children: attachedCount }),
5490
+ /* @__PURE__ */ jsx87("span", { className: "font-semibold text-text-primary", children: attachedCount }),
5524
5491
  " ",
5525
5492
  attachedCount === 1 ? "product" : "products"
5526
- ] }) : /* @__PURE__ */ jsx88("span", { className: "text-text-tertiary", children: "Not attached to any product yet" }) }),
5493
+ ] }) : /* @__PURE__ */ jsx87("span", { className: "text-text-tertiary", children: "Not attached to any product yet" }) }),
5527
5494
  footerAction
5528
5495
  ] }) : null;
5529
- const drawer = children ? /* @__PURE__ */ jsx88("div", { "data-slot": "drawer", className: "border-t border-border-subtle", children }) : null;
5496
+ const drawer = children ? /* @__PURE__ */ jsx87("div", { "data-slot": "drawer", className: "border-t border-border-subtle", children }) : null;
5530
5497
  if (!collapsible) {
5531
- return /* @__PURE__ */ jsxs57(
5498
+ return /* @__PURE__ */ jsxs56(
5532
5499
  Card,
5533
5500
  {
5534
5501
  ref,
5535
5502
  className: cn(status === "not-connected" && "border-dashed border-border-default", className),
5536
5503
  ...props,
5537
5504
  children: [
5538
- /* @__PURE__ */ jsxs57("div", { className: "flex items-center gap-3 p-4", children: [
5505
+ /* @__PURE__ */ jsxs56("div", { className: "flex items-center gap-3 p-4", children: [
5539
5506
  glyphBox,
5540
5507
  identity,
5541
- /* @__PURE__ */ jsx88("div", { className: "ml-auto shrink-0", children: connected ? statusBadge : action ?? statusBadge })
5508
+ /* @__PURE__ */ jsx87("div", { className: "ml-auto shrink-0", children: connected ? statusBadge : action ?? statusBadge })
5542
5509
  ] }),
5543
5510
  accessNote,
5544
5511
  footer,
@@ -5547,7 +5514,7 @@ var ConnectorCard = React75.forwardRef(
5547
5514
  }
5548
5515
  );
5549
5516
  }
5550
- return /* @__PURE__ */ jsx88(Collapsible, { defaultOpen, open, onOpenChange, children: /* @__PURE__ */ jsxs57(
5517
+ return /* @__PURE__ */ jsx87(Collapsible, { defaultOpen, open, onOpenChange, children: /* @__PURE__ */ jsxs56(
5551
5518
  Card,
5552
5519
  {
5553
5520
  ref,
@@ -5558,7 +5525,7 @@ var ConnectorCard = React75.forwardRef(
5558
5525
  ),
5559
5526
  ...props,
5560
5527
  children: [
5561
- /* @__PURE__ */ jsx88(CollapsibleTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs57(
5528
+ /* @__PURE__ */ jsx87(CollapsibleTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs56(
5562
5529
  "button",
5563
5530
  {
5564
5531
  type: "button",
@@ -5566,9 +5533,9 @@ var ConnectorCard = React75.forwardRef(
5566
5533
  children: [
5567
5534
  glyphBox,
5568
5535
  identity,
5569
- /* @__PURE__ */ jsxs57("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [
5536
+ /* @__PURE__ */ jsxs56("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [
5570
5537
  statusBadge,
5571
- /* @__PURE__ */ jsx88(
5538
+ /* @__PURE__ */ jsx87(
5572
5539
  ChevronDown5,
5573
5540
  {
5574
5541
  "aria-hidden": "true",
@@ -5579,7 +5546,7 @@ var ConnectorCard = React75.forwardRef(
5579
5546
  ]
5580
5547
  }
5581
5548
  ) }),
5582
- /* @__PURE__ */ jsxs57(CollapsibleContent2, { children: [
5549
+ /* @__PURE__ */ jsxs56(CollapsibleContent2, { children: [
5583
5550
  accessNote,
5584
5551
  footer,
5585
5552
  drawer
@@ -5592,33 +5559,33 @@ var ConnectorCard = React75.forwardRef(
5592
5559
  ConnectorCard.displayName = "ConnectorCard";
5593
5560
 
5594
5561
  // src/components/request-row.tsx
5595
- import * as React76 from "react";
5596
- import { Fragment as Fragment10, jsx as jsx89, jsxs as jsxs58 } from "react/jsx-runtime";
5562
+ import * as React75 from "react";
5563
+ import { Fragment as Fragment10, jsx as jsx88, jsxs as jsxs57 } from "react/jsx-runtime";
5597
5564
  function monogram2(name) {
5598
5565
  return name.replace(/[^a-zA-Z0-9 ]/g, " ").split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join("");
5599
5566
  }
5600
- var RequestRow = React76.forwardRef(
5567
+ var RequestRow = React75.forwardRef(
5601
5568
  ({ surface, name, state, glyph, subtitle, account, onApprove, onDeny, onRequest, onRevoke, action, className, ...props }, ref) => {
5602
5569
  let controls = action;
5603
5570
  if (controls === void 0) {
5604
5571
  if (surface === "org" && state === "pending") {
5605
- controls = /* @__PURE__ */ jsxs58(Fragment10, { children: [
5606
- /* @__PURE__ */ jsx89(Button, { variant: "ghost", size: "sm", onClick: onDeny, children: "Deny" }),
5607
- /* @__PURE__ */ jsx89(Button, { variant: "outline", size: "sm", onClick: onApprove, children: "Approve" })
5572
+ controls = /* @__PURE__ */ jsxs57(Fragment10, { children: [
5573
+ /* @__PURE__ */ jsx88(Button, { variant: "ghost", size: "sm", onClick: onDeny, children: "Deny" }),
5574
+ /* @__PURE__ */ jsx88(Button, { variant: "outline", size: "sm", onClick: onApprove, children: "Approve" })
5608
5575
  ] });
5609
5576
  } else if (state === "sent") {
5610
- controls = /* @__PURE__ */ jsx89(Button, { variant: "destructive-ghost", size: "sm", onClick: onRevoke, children: "Revoke" });
5577
+ controls = /* @__PURE__ */ jsx88(Button, { variant: "destructive-ghost", size: "sm", onClick: onRevoke, children: "Revoke" });
5611
5578
  } else if (state === "available") {
5612
- controls = /* @__PURE__ */ jsx89(Button, { variant: "outline", size: "sm", onClick: onRequest, children: "Request" });
5579
+ controls = /* @__PURE__ */ jsx88(Button, { variant: "outline", size: "sm", onClick: onRequest, children: "Request" });
5613
5580
  } else if (state === "pending") {
5614
- controls = /* @__PURE__ */ jsx89(Badge, { variant: "status", children: "Requested" });
5581
+ controls = /* @__PURE__ */ jsx88(Badge, { variant: "status", children: "Requested" });
5615
5582
  } else if (state === "denied") {
5616
- controls = /* @__PURE__ */ jsx89(Badge, { variant: "status", children: "Denied" });
5583
+ controls = /* @__PURE__ */ jsx88(Badge, { variant: "status", children: "Denied" });
5617
5584
  } else if (state === "attached") {
5618
- controls = account ? /* @__PURE__ */ jsx89(AttachmentChip, { state: "attached", account }) : /* @__PURE__ */ jsx89(Badge, { variant: "status", children: "In use" });
5585
+ controls = account ? /* @__PURE__ */ jsx88(AttachmentChip, { state: "attached", account }) : /* @__PURE__ */ jsx88(Badge, { variant: "status", children: "In use" });
5619
5586
  }
5620
5587
  }
5621
- return /* @__PURE__ */ jsxs58(
5588
+ return /* @__PURE__ */ jsxs57(
5622
5589
  "div",
5623
5590
  {
5624
5591
  ref,
@@ -5628,7 +5595,7 @@ var RequestRow = React76.forwardRef(
5628
5595
  ),
5629
5596
  ...props,
5630
5597
  children: [
5631
- /* @__PURE__ */ jsx89(
5598
+ /* @__PURE__ */ jsx88(
5632
5599
  "div",
5633
5600
  {
5634
5601
  "aria-hidden": "true",
@@ -5636,11 +5603,11 @@ var RequestRow = React76.forwardRef(
5636
5603
  children: glyph ?? monogram2(name)
5637
5604
  }
5638
5605
  ),
5639
- /* @__PURE__ */ jsxs58("div", { className: "min-w-0", children: [
5640
- /* @__PURE__ */ jsx89("p", { className: "truncate text-sm font-semibold text-text-primary", children: name }),
5641
- subtitle && /* @__PURE__ */ jsx89("p", { className: "truncate text-xs text-text-tertiary", children: subtitle })
5606
+ /* @__PURE__ */ jsxs57("div", { className: "min-w-0", children: [
5607
+ /* @__PURE__ */ jsx88("p", { className: "truncate text-sm font-semibold text-text-primary", children: name }),
5608
+ subtitle && /* @__PURE__ */ jsx88("p", { className: "truncate text-xs text-text-tertiary", children: subtitle })
5642
5609
  ] }),
5643
- /* @__PURE__ */ jsx89("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: controls })
5610
+ /* @__PURE__ */ jsx88("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: controls })
5644
5611
  ]
5645
5612
  }
5646
5613
  );
@@ -5649,9 +5616,9 @@ var RequestRow = React76.forwardRef(
5649
5616
  RequestRow.displayName = "RequestRow";
5650
5617
 
5651
5618
  // src/components/feedback-button.tsx
5652
- import * as React77 from "react";
5619
+ import * as React76 from "react";
5653
5620
  import { MessageSquare, Loader2 as Loader23, CheckCircle2 } from "lucide-react";
5654
- import { jsx as jsx90, jsxs as jsxs59 } from "react/jsx-runtime";
5621
+ import { jsx as jsx89, jsxs as jsxs58 } from "react/jsx-runtime";
5655
5622
  var TITLE_MAX = 256;
5656
5623
  var DETAILS_MAX = 65536;
5657
5624
  var DEFAULT_LABELS = {
@@ -5665,15 +5632,15 @@ var DEFAULT_LABELS = {
5665
5632
  };
5666
5633
  function FeedbackButton({ onSubmit, labels, className }) {
5667
5634
  const l = { ...DEFAULT_LABELS, ...labels };
5668
- const uid = React77.useId();
5635
+ const uid = React76.useId();
5669
5636
  const titleId = `${uid}-title`;
5670
5637
  const detailsId = `${uid}-details`;
5671
5638
  const titleErrId = `${uid}-title-error`;
5672
5639
  const detailsErrId = `${uid}-details-error`;
5673
- const [open, setOpen] = React77.useState(false);
5674
- const [status, setStatus] = React77.useState("idle");
5675
- const [title, setTitle] = React77.useState("");
5676
- const [details, setDetails] = React77.useState("");
5640
+ const [open, setOpen] = React76.useState(false);
5641
+ const [status, setStatus] = React76.useState("idle");
5642
+ const [title, setTitle] = React76.useState("");
5643
+ const [details, setDetails] = React76.useState("");
5677
5644
  const titleTooLong = title.length > TITLE_MAX;
5678
5645
  const detailsTooLong = details.length > DETAILS_MAX;
5679
5646
  const titleEmpty = title.trim().length === 0;
@@ -5698,20 +5665,20 @@ function FeedbackButton({ onSubmit, labels, className }) {
5698
5665
  setStatus("error");
5699
5666
  }
5700
5667
  };
5701
- return /* @__PURE__ */ jsxs59(Popover, { open, onOpenChange: changeOpen, children: [
5702
- /* @__PURE__ */ jsx90(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs59(Button, { variant: "ghost", size: "sm", "aria-label": l.trigger, className, children: [
5703
- /* @__PURE__ */ jsx90(MessageSquare, { className: "size-4", "aria-hidden": "true" }),
5668
+ return /* @__PURE__ */ jsxs58(Popover, { open, onOpenChange: changeOpen, children: [
5669
+ /* @__PURE__ */ jsx89(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs58(Button, { variant: "ghost", size: "sm", "aria-label": l.trigger, className, children: [
5670
+ /* @__PURE__ */ jsx89(MessageSquare, { className: "size-4", "aria-hidden": "true" }),
5704
5671
  l.trigger
5705
5672
  ] }) }),
5706
- /* @__PURE__ */ jsx90(PopoverContent, { align: "end", side: "bottom", className: "w-80", children: status === "success" ? /* @__PURE__ */ jsxs59("div", { className: "flex flex-col items-center gap-3 py-2 text-center", children: [
5707
- /* @__PURE__ */ jsx90(CheckCircle2, { className: "size-8 text-text-success", "aria-hidden": "true" }),
5708
- /* @__PURE__ */ jsx90("p", { role: "status", className: "text-sm text-text-primary", children: l.success }),
5709
- /* @__PURE__ */ jsx90(Button, { variant: "outline", size: "sm", onClick: () => changeOpen(false), children: "Close" })
5710
- ] }) : /* @__PURE__ */ jsxs59("form", { onSubmit: handleSubmit, className: "flex flex-col gap-3", children: [
5711
- /* @__PURE__ */ jsx90("p", { className: "text-sm font-medium text-text-primary", children: l.title }),
5712
- /* @__PURE__ */ jsxs59("div", { className: "flex flex-col gap-1.5", children: [
5713
- /* @__PURE__ */ jsx90(Label2, { htmlFor: titleId, children: l.titleField }),
5714
- /* @__PURE__ */ jsx90(
5673
+ /* @__PURE__ */ jsx89(PopoverContent, { align: "end", side: "bottom", className: "w-80", children: status === "success" ? /* @__PURE__ */ jsxs58("div", { className: "flex flex-col items-center gap-3 py-2 text-center", children: [
5674
+ /* @__PURE__ */ jsx89(CheckCircle2, { className: "size-8 text-text-success", "aria-hidden": "true" }),
5675
+ /* @__PURE__ */ jsx89("p", { role: "status", className: "text-sm text-text-primary", children: l.success }),
5676
+ /* @__PURE__ */ jsx89(Button, { variant: "outline", size: "sm", onClick: () => changeOpen(false), children: "Close" })
5677
+ ] }) : /* @__PURE__ */ jsxs58("form", { onSubmit: handleSubmit, className: "flex flex-col gap-3", children: [
5678
+ /* @__PURE__ */ jsx89("p", { className: "text-sm font-medium text-text-primary", children: l.title }),
5679
+ /* @__PURE__ */ jsxs58("div", { className: "flex flex-col gap-1.5", children: [
5680
+ /* @__PURE__ */ jsx89(Label2, { htmlFor: titleId, children: l.titleField }),
5681
+ /* @__PURE__ */ jsx89(
5715
5682
  Input,
5716
5683
  {
5717
5684
  id: titleId,
@@ -5722,16 +5689,16 @@ function FeedbackButton({ onSubmit, labels, className }) {
5722
5689
  "aria-describedby": titleTooLong ? titleErrId : void 0
5723
5690
  }
5724
5691
  ),
5725
- titleTooLong && /* @__PURE__ */ jsxs59("p", { id: titleErrId, className: "text-xs text-text-danger", children: [
5692
+ titleTooLong && /* @__PURE__ */ jsxs58("p", { id: titleErrId, className: "text-xs text-text-danger", children: [
5726
5693
  l.titleField,
5727
5694
  " must be ",
5728
5695
  TITLE_MAX,
5729
5696
  " characters or fewer."
5730
5697
  ] })
5731
5698
  ] }),
5732
- /* @__PURE__ */ jsxs59("div", { className: "flex flex-col gap-1.5", children: [
5733
- /* @__PURE__ */ jsx90(Label2, { htmlFor: detailsId, children: l.detailsField }),
5734
- /* @__PURE__ */ jsx90(
5699
+ /* @__PURE__ */ jsxs58("div", { className: "flex flex-col gap-1.5", children: [
5700
+ /* @__PURE__ */ jsx89(Label2, { htmlFor: detailsId, children: l.detailsField }),
5701
+ /* @__PURE__ */ jsx89(
5735
5702
  Textarea,
5736
5703
  {
5737
5704
  id: detailsId,
@@ -5742,16 +5709,16 @@ function FeedbackButton({ onSubmit, labels, className }) {
5742
5709
  "aria-describedby": detailsTooLong ? detailsErrId : void 0
5743
5710
  }
5744
5711
  ),
5745
- detailsTooLong && /* @__PURE__ */ jsxs59("p", { id: detailsErrId, className: "text-xs text-text-danger", children: [
5712
+ detailsTooLong && /* @__PURE__ */ jsxs58("p", { id: detailsErrId, className: "text-xs text-text-danger", children: [
5746
5713
  l.detailsField,
5747
5714
  " must be ",
5748
5715
  DETAILS_MAX,
5749
5716
  " characters or fewer."
5750
5717
  ] })
5751
5718
  ] }),
5752
- status === "error" && /* @__PURE__ */ jsx90(InlineError, { children: l.error }),
5753
- /* @__PURE__ */ jsxs59(Button, { type: "submit", disabled: !valid || submitting, children: [
5754
- submitting && /* @__PURE__ */ jsx90(Loader23, { className: "size-4 animate-spin", "aria-hidden": "true" }),
5719
+ status === "error" && /* @__PURE__ */ jsx89(InlineError, { children: l.error }),
5720
+ /* @__PURE__ */ jsxs58(Button, { type: "submit", disabled: !valid || submitting, children: [
5721
+ submitting && /* @__PURE__ */ jsx89(Loader23, { className: "size-4 animate-spin", "aria-hidden": "true" }),
5755
5722
  l.submit
5756
5723
  ] })
5757
5724
  ] }) })
@@ -5807,27 +5774,27 @@ function isNotificationSettled(item) {
5807
5774
  }
5808
5775
 
5809
5776
  // src/components/notification-bell.tsx
5810
- import * as React79 from "react";
5777
+ import * as React78 from "react";
5811
5778
  import { BellRing, Settings } from "lucide-react";
5812
5779
 
5813
5780
  // src/components/notification-row.tsx
5814
- import * as React78 from "react";
5781
+ import * as React77 from "react";
5815
5782
 
5816
5783
  // src/components/notification-parts.tsx
5817
5784
  import { Check as Check10 } from "lucide-react";
5818
- import { jsx as jsx91 } from "react/jsx-runtime";
5785
+ import { jsx as jsx90 } from "react/jsx-runtime";
5819
5786
  var rowControlHitArea = "relative after:absolute after:-inset-x-2 after:-top-1.5 after:-bottom-2.5";
5820
5787
  function rowControlName(label, title) {
5821
5788
  return `${label} "${title}"`;
5822
5789
  }
5823
5790
  function MarkReadButton({ title, onClick }) {
5824
5791
  const label = `Mark "${title}" as read`;
5825
- return /* @__PURE__ */ jsx91(
5792
+ return /* @__PURE__ */ jsx90(
5826
5793
  Button,
5827
5794
  {
5828
5795
  variant: "ghost",
5829
5796
  size: "xs",
5830
- icon: /* @__PURE__ */ jsx91(Check10, {}),
5797
+ icon: /* @__PURE__ */ jsx90(Check10, {}),
5831
5798
  "aria-label": label,
5832
5799
  onClick,
5833
5800
  className: "relative text-text-secondary after:absolute after:-inset-3 hover:text-text-primary"
@@ -5841,12 +5808,12 @@ function DeepLinkControl({
5841
5808
  onClick
5842
5809
  }) {
5843
5810
  const name = rowControlName(link.label, title);
5844
- return link.href ? /* @__PURE__ */ jsx91("a", { href: link.href, "aria-label": name, onClick, className, children: link.label }) : /* @__PURE__ */ jsx91("button", { type: "button", "aria-label": name, onClick, className: cn("cursor-pointer", className), children: link.label });
5811
+ return link.href ? /* @__PURE__ */ jsx90("a", { href: link.href, "aria-label": name, onClick, className, children: link.label }) : /* @__PURE__ */ jsx90("button", { type: "button", "aria-label": name, onClick, className: cn("cursor-pointer", className), children: link.label });
5845
5812
  }
5846
5813
 
5847
5814
  // src/components/notification-row.tsx
5848
- import { jsx as jsx92, jsxs as jsxs60 } from "react/jsx-runtime";
5849
- var NotificationRow = React78.forwardRef(
5815
+ import { jsx as jsx91, jsxs as jsxs59 } from "react/jsx-runtime";
5816
+ var NotificationRow = React77.forwardRef(
5850
5817
  ({ item, onItemClick, onActionClick, onMarkRead, formatAge, className, ...props }, ref) => {
5851
5818
  const settled = isNotificationSettled(item);
5852
5819
  const unread = !settled && !item.read;
@@ -5858,20 +5825,20 @@ var NotificationRow = React78.forwardRef(
5858
5825
  // Three steps of one ladder, and every one of them a token a reader can read:
5859
5826
  // unread is the loudest, read is quieter, settled is quietest. An opacity is
5860
5827
  // not a step — it drags the text under the contrast floor with the row.
5861
- /* @__PURE__ */ jsxs60(
5828
+ /* @__PURE__ */ jsxs59(
5862
5829
  "div",
5863
5830
  {
5864
5831
  ref,
5865
5832
  className: cn("group rounded-lg bg-bg-surface px-3 py-2.5", className),
5866
5833
  ...props,
5867
5834
  children: [
5868
- /* @__PURE__ */ jsxs60("div", { className: "flex items-start gap-2.5", children: [
5869
- /* @__PURE__ */ jsxs60("div", { className: "min-w-0 flex-1", children: [
5870
- /* @__PURE__ */ jsxs60("p", { className: "truncate text-xs text-text-tertiary", children: [
5871
- /* @__PURE__ */ jsx92("span", { className: "font-semibold", children: item.source }),
5835
+ /* @__PURE__ */ jsxs59("div", { className: "flex items-start gap-2.5", children: [
5836
+ /* @__PURE__ */ jsxs59("div", { className: "min-w-0 flex-1", children: [
5837
+ /* @__PURE__ */ jsxs59("p", { className: "truncate text-xs text-text-tertiary", children: [
5838
+ /* @__PURE__ */ jsx91("span", { className: "font-semibold", children: item.source }),
5872
5839
  item.receipt ? `, ${item.receipt}` : ""
5873
5840
  ] }),
5874
- /* @__PURE__ */ jsx92(
5841
+ /* @__PURE__ */ jsx91(
5875
5842
  "button",
5876
5843
  {
5877
5844
  type: "button",
@@ -5883,7 +5850,7 @@ var NotificationRow = React78.forwardRef(
5883
5850
  children: item.title
5884
5851
  }
5885
5852
  ),
5886
- item.body && /* @__PURE__ */ jsx92(
5853
+ item.body && /* @__PURE__ */ jsx91(
5887
5854
  "p",
5888
5855
  {
5889
5856
  className: cn(
@@ -5894,15 +5861,15 @@ var NotificationRow = React78.forwardRef(
5894
5861
  }
5895
5862
  )
5896
5863
  ] }),
5897
- (age || markable) && /* @__PURE__ */ jsxs60("div", { className: "mt-px flex shrink-0 items-center gap-1", children: [
5898
- stamp && age && /* @__PURE__ */ jsx92("time", { dateTime: toDateTimeAttribute(stamp), className: "text-xs text-text-tertiary", children: age }),
5899
- markable && /* @__PURE__ */ jsx92(MarkReadButton, { title: item.title, onClick: () => onMarkRead(item.id) })
5864
+ (age || markable) && /* @__PURE__ */ jsxs59("div", { className: "mt-px flex shrink-0 items-center gap-1", children: [
5865
+ stamp && age && /* @__PURE__ */ jsx91("time", { dateTime: toDateTimeAttribute(stamp), className: "text-xs text-text-tertiary", children: age }),
5866
+ markable && /* @__PURE__ */ jsx91(MarkReadButton, { title: item.title, onClick: () => onMarkRead(item.id) })
5900
5867
  ] })
5901
5868
  ] }),
5902
- (actions.length > 0 || item.deepLink) && /* @__PURE__ */ jsxs60("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-2", children: [
5869
+ (actions.length > 0 || item.deepLink) && /* @__PURE__ */ jsxs59("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-2", children: [
5903
5870
  actions.map((action) => {
5904
5871
  const chip = action.variant === "primary" || action.variant === "destructive";
5905
- return /* @__PURE__ */ jsx92(
5872
+ return /* @__PURE__ */ jsx91(
5906
5873
  "button",
5907
5874
  {
5908
5875
  type: "button",
@@ -5920,7 +5887,7 @@ var NotificationRow = React78.forwardRef(
5920
5887
  action.id
5921
5888
  );
5922
5889
  }),
5923
- item.deepLink && /* @__PURE__ */ jsx92(
5890
+ item.deepLink && /* @__PURE__ */ jsx91(
5924
5891
  DeepLinkControl,
5925
5892
  {
5926
5893
  link: item.deepLink,
@@ -5942,8 +5909,8 @@ var NotificationRow = React78.forwardRef(
5942
5909
  NotificationRow.displayName = "NotificationRow";
5943
5910
 
5944
5911
  // src/components/notification-bell.tsx
5945
- import { jsx as jsx93, jsxs as jsxs61 } from "react/jsx-runtime";
5946
- var NotificationBell = React79.forwardRef(
5912
+ import { jsx as jsx92, jsxs as jsxs60 } from "react/jsx-runtime";
5913
+ var NotificationBell = React78.forwardRef(
5947
5914
  ({
5948
5915
  items,
5949
5916
  unreadCount,
@@ -5963,8 +5930,8 @@ var NotificationBell = React79.forwardRef(
5963
5930
  const unread = unreadCount ?? items.filter((n) => !n.read && n.cls !== "ephemeral").length;
5964
5931
  const rows = items.slice(0, maxItems);
5965
5932
  const hidden = items.length - rows.length;
5966
- return /* @__PURE__ */ jsxs61(Popover, { open, onOpenChange, children: [
5967
- /* @__PURE__ */ jsx93(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs61(
5933
+ return /* @__PURE__ */ jsxs60(Popover, { open, onOpenChange, children: [
5934
+ /* @__PURE__ */ jsx92(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs60(
5968
5935
  "button",
5969
5936
  {
5970
5937
  ref,
@@ -5976,12 +5943,12 @@ var NotificationBell = React79.forwardRef(
5976
5943
  className
5977
5944
  ),
5978
5945
  children: [
5979
- /* @__PURE__ */ jsx93(BellRing, { "aria-hidden": "true" }),
5980
- unread > 0 && /* @__PURE__ */ jsx93("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 })
5946
+ /* @__PURE__ */ jsx92(BellRing, { "aria-hidden": "true" }),
5947
+ unread > 0 && /* @__PURE__ */ jsx92("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 })
5981
5948
  ]
5982
5949
  }
5983
5950
  ) }),
5984
- /* @__PURE__ */ jsxs61(
5951
+ /* @__PURE__ */ jsxs60(
5985
5952
  PopoverContent,
5986
5953
  {
5987
5954
  align: "end",
@@ -5992,10 +5959,10 @@ var NotificationBell = React79.forwardRef(
5992
5959
  },
5993
5960
  className: "flex w-[380px] flex-col overflow-hidden p-0",
5994
5961
  children: [
5995
- /* @__PURE__ */ jsxs61("div", { className: "flex shrink-0 items-center justify-between px-5 py-3", children: [
5996
- /* @__PURE__ */ jsx93("span", { className: "text-sm font-bold text-text-primary", children: "Notification center" }),
5997
- /* @__PURE__ */ jsxs61("div", { className: "flex items-center gap-3", children: [
5998
- unread === 0 ? /* @__PURE__ */ jsx93("span", { className: "text-sm font-medium text-text-tertiary", children: "All read" }) : /* @__PURE__ */ jsx93(
5962
+ /* @__PURE__ */ jsxs60("div", { className: "flex shrink-0 items-center justify-between px-5 py-3", children: [
5963
+ /* @__PURE__ */ jsx92("span", { className: "text-sm font-bold text-text-primary", children: "Notification center" }),
5964
+ /* @__PURE__ */ jsxs60("div", { className: "flex items-center gap-3", children: [
5965
+ unread === 0 ? /* @__PURE__ */ jsx92("span", { className: "text-sm font-medium text-text-tertiary", children: "All read" }) : /* @__PURE__ */ jsx92(
5999
5966
  "button",
6000
5967
  {
6001
5968
  type: "button",
@@ -6004,19 +5971,19 @@ var NotificationBell = React79.forwardRef(
6004
5971
  children: "Mark all read"
6005
5972
  }
6006
5973
  ),
6007
- onOpenSettings && /* @__PURE__ */ jsx93(
5974
+ onOpenSettings && /* @__PURE__ */ jsx92(
6008
5975
  "button",
6009
5976
  {
6010
5977
  type: "button",
6011
5978
  "aria-label": "Notification settings",
6012
5979
  onClick: () => onOpenSettings(),
6013
5980
  className: "flex size-6 cursor-pointer items-center justify-center rounded-md text-text-tertiary transition-colors duration-fast hover:bg-bg-surface hover:text-text-primary",
6014
- children: /* @__PURE__ */ jsx93(Settings, { className: "size-[15px]", "aria-hidden": "true" })
5981
+ children: /* @__PURE__ */ jsx92(Settings, { className: "size-[15px]", "aria-hidden": "true" })
6015
5982
  }
6016
5983
  )
6017
5984
  ] })
6018
5985
  ] }),
6019
- /* @__PURE__ */ jsx93("div", { className: "min-h-0 flex-1 space-y-1.5 overflow-y-auto px-2 pb-2", children: rows.length === 0 ? /* @__PURE__ */ jsx93("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__ */ jsx93(
5986
+ /* @__PURE__ */ jsx92("div", { className: "min-h-0 flex-1 space-y-1.5 overflow-y-auto px-2 pb-2", children: rows.length === 0 ? /* @__PURE__ */ jsx92("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__ */ jsx92(
6020
5987
  NotificationRow,
6021
5988
  {
6022
5989
  item,
@@ -6027,8 +5994,8 @@ var NotificationBell = React79.forwardRef(
6027
5994
  },
6028
5995
  item.id
6029
5996
  )) }),
6030
- footer != null && /* @__PURE__ */ jsx93("div", { className: "shrink-0 px-5 py-2.5 text-xs text-text-tertiary", children: footer }),
6031
- items.length > 0 && onOpenArchive && /* @__PURE__ */ jsx93(
5997
+ footer != null && /* @__PURE__ */ jsx92("div", { className: "shrink-0 px-5 py-2.5 text-xs text-text-tertiary", children: footer }),
5998
+ items.length > 0 && onOpenArchive && /* @__PURE__ */ jsx92(
6032
5999
  "button",
6033
6000
  {
6034
6001
  type: "button",
@@ -6046,9 +6013,9 @@ var NotificationBell = React79.forwardRef(
6046
6013
  NotificationBell.displayName = "NotificationBell";
6047
6014
 
6048
6015
  // src/components/notification-center.tsx
6049
- import * as React80 from "react";
6016
+ import * as React79 from "react";
6050
6017
  import { Check as Check11, Search as Search4 } from "lucide-react";
6051
- import { jsx as jsx94, jsxs as jsxs62 } from "react/jsx-runtime";
6018
+ import { jsx as jsx93, jsxs as jsxs61 } from "react/jsx-runtime";
6052
6019
  var chipBase = "cursor-pointer rounded-md px-3 py-1.5 text-sm font-medium transition-colors duration-fast";
6053
6020
  var chipOn = "bg-bg-sunken font-semibold text-text-primary";
6054
6021
  var chipOff = "bg-bg-elevated text-text-secondary hover:text-text-primary";
@@ -6063,12 +6030,12 @@ function CenterRow({
6063
6030
  const markable = Boolean(onMarkRead) && unread && item.cls !== "ephemeral";
6064
6031
  const stamp = item.createdAt ? item.createdAt instanceof Date ? item.createdAt : new Date(item.createdAt) : null;
6065
6032
  const age = stamp ? formatAge(stamp) : null;
6066
- return /* @__PURE__ */ jsxs62("article", { className: "group rounded-lg bg-bg-elevated px-4 py-3", children: [
6067
- /* @__PURE__ */ jsxs62("div", { className: "flex items-center gap-2", children: [
6068
- /* @__PURE__ */ jsx94("span", { className: "text-xs font-semibold text-text-tertiary", children: item.source }),
6069
- /* @__PURE__ */ jsx94(Badge, { variant: severityBadgeVariant(item.severity), children: severityLabels[item.severity] }),
6070
- (age || markable) && /* @__PURE__ */ jsxs62("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [
6071
- stamp && age && /* @__PURE__ */ jsx94(
6033
+ return /* @__PURE__ */ jsxs61("article", { className: "group rounded-lg bg-bg-elevated px-4 py-3", children: [
6034
+ /* @__PURE__ */ jsxs61("div", { className: "flex items-center gap-2", children: [
6035
+ /* @__PURE__ */ jsx93("span", { className: "text-xs font-semibold text-text-tertiary", children: item.source }),
6036
+ /* @__PURE__ */ jsx93(Badge, { variant: severityBadgeVariant(item.severity), children: severityLabels[item.severity] }),
6037
+ (age || markable) && /* @__PURE__ */ jsxs61("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [
6038
+ stamp && age && /* @__PURE__ */ jsx93(
6072
6039
  "time",
6073
6040
  {
6074
6041
  dateTime: toDateTimeAttribute(stamp),
@@ -6076,10 +6043,10 @@ function CenterRow({
6076
6043
  children: age
6077
6044
  }
6078
6045
  ),
6079
- markable && /* @__PURE__ */ jsx94(MarkReadButton, { title: item.title, onClick: () => onMarkRead(item.id) })
6046
+ markable && /* @__PURE__ */ jsx93(MarkReadButton, { title: item.title, onClick: () => onMarkRead(item.id) })
6080
6047
  ] })
6081
6048
  ] }),
6082
- /* @__PURE__ */ jsx94(
6049
+ /* @__PURE__ */ jsx93(
6083
6050
  "button",
6084
6051
  {
6085
6052
  type: "button",
@@ -6091,13 +6058,13 @@ function CenterRow({
6091
6058
  children: item.title
6092
6059
  }
6093
6060
  ),
6094
- item.body && /* @__PURE__ */ jsx94("p", { className: "mt-0.5 text-sm leading-snug text-text-secondary", children: item.body }),
6095
- (item.receipt || item.deepLink) && /* @__PURE__ */ jsxs62("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-1.5", children: [
6096
- item.receipt && /* @__PURE__ */ jsxs62("span", { className: "inline-flex items-center gap-1.5 text-sm text-text-tertiary", children: [
6097
- /* @__PURE__ */ jsx94(Check11, { className: "size-3 shrink-0 text-text-success", "aria-hidden": "true" }),
6061
+ item.body && /* @__PURE__ */ jsx93("p", { className: "mt-0.5 text-sm leading-snug text-text-secondary", children: item.body }),
6062
+ (item.receipt || item.deepLink) && /* @__PURE__ */ jsxs61("div", { className: "mt-2 flex flex-wrap items-center gap-x-4 gap-y-1.5", children: [
6063
+ item.receipt && /* @__PURE__ */ jsxs61("span", { className: "inline-flex items-center gap-1.5 text-sm text-text-tertiary", children: [
6064
+ /* @__PURE__ */ jsx93(Check11, { className: "size-3 shrink-0 text-text-success", "aria-hidden": "true" }),
6098
6065
  item.receipt
6099
6066
  ] }),
6100
- item.deepLink && /* @__PURE__ */ jsx94(
6067
+ item.deepLink && /* @__PURE__ */ jsx93(
6101
6068
  DeepLinkControl,
6102
6069
  {
6103
6070
  link: item.deepLink,
@@ -6112,7 +6079,7 @@ function CenterRow({
6112
6079
  ] })
6113
6080
  ] });
6114
6081
  }
6115
- var NotificationCenter = React80.forwardRef(
6082
+ var NotificationCenter = React79.forwardRef(
6116
6083
  ({
6117
6084
  items,
6118
6085
  header = true,
@@ -6129,16 +6096,16 @@ var NotificationCenter = React80.forwardRef(
6129
6096
  formatAge,
6130
6097
  className
6131
6098
  }, ref) => {
6132
- const [status, setStatus] = React80.useState("all");
6133
- const [source, setSource] = React80.useState("all");
6134
- const [product, setProduct] = React80.useState("all");
6135
- const [query, setQuery] = React80.useState("");
6136
- const [limit, setLimit] = React80.useState(pageSize);
6137
- const age = React80.useCallback(
6099
+ const [status, setStatus] = React79.useState("all");
6100
+ const [source, setSource] = React79.useState("all");
6101
+ const [product, setProduct] = React79.useState("all");
6102
+ const [query, setQuery] = React79.useState("");
6103
+ const [limit, setLimit] = React79.useState(pageSize);
6104
+ const age = React79.useCallback(
6138
6105
  (createdAt) => formatAge ? formatAge(createdAt) : formatRelativeAge(createdAt),
6139
6106
  [formatAge]
6140
6107
  );
6141
- const sourceChips = React80.useMemo(
6108
+ const sourceChips = React79.useMemo(
6142
6109
  () => sources ?? Array.from(new Set(items.map((n) => n.source))),
6143
6110
  [sources, items]
6144
6111
  );
@@ -6149,13 +6116,13 @@ var NotificationCenter = React80.forwardRef(
6149
6116
  const shown = matched.slice(0, limit);
6150
6117
  const remaining = matched.length - shown.length;
6151
6118
  const filtering = q !== "" || status !== "all" || source !== "all" || product !== "all";
6152
- return /* @__PURE__ */ jsxs62("div", { ref, className: cn("mx-auto max-w-[560px]", className), children: [
6153
- (header || onMarkAllRead) && /* @__PURE__ */ jsxs62("div", { className: cn("mb-4 flex items-start gap-4", !header && "justify-end"), children: [
6154
- header && /* @__PURE__ */ jsxs62("div", { className: "min-w-0 flex-1", children: [
6155
- /* @__PURE__ */ jsx94("h1", { className: "mb-1.5 text-2xl font-semibold tracking-tight text-text-primary", children: title }),
6156
- description && /* @__PURE__ */ jsx94("p", { className: "text-sm text-text-tertiary", children: description })
6119
+ return /* @__PURE__ */ jsxs61("div", { ref, className: cn("mx-auto max-w-[560px]", className), children: [
6120
+ (header || onMarkAllRead) && /* @__PURE__ */ jsxs61("div", { className: cn("mb-4 flex items-start gap-4", !header && "justify-end"), children: [
6121
+ header && /* @__PURE__ */ jsxs61("div", { className: "min-w-0 flex-1", children: [
6122
+ /* @__PURE__ */ jsx93("h1", { className: "mb-1.5 text-2xl font-semibold tracking-tight text-text-primary", children: title }),
6123
+ description && /* @__PURE__ */ jsx93("p", { className: "text-sm text-text-tertiary", children: description })
6157
6124
  ] }),
6158
- onMarkAllRead && /* @__PURE__ */ jsx94(
6125
+ onMarkAllRead && /* @__PURE__ */ jsx93(
6159
6126
  "button",
6160
6127
  {
6161
6128
  type: "button",
@@ -6165,9 +6132,9 @@ var NotificationCenter = React80.forwardRef(
6165
6132
  }
6166
6133
  )
6167
6134
  ] }),
6168
- searchable && /* @__PURE__ */ jsxs62("div", { className: "mb-3 flex items-center gap-2 rounded-lg bg-bg-elevated px-3 py-2", children: [
6169
- /* @__PURE__ */ jsx94(Search4, { className: "size-4 shrink-0 text-text-tertiary", "aria-hidden": "true" }),
6170
- /* @__PURE__ */ jsx94(
6135
+ searchable && /* @__PURE__ */ jsxs61("div", { className: "mb-3 flex items-center gap-2 rounded-lg bg-bg-elevated px-3 py-2", children: [
6136
+ /* @__PURE__ */ jsx93(Search4, { className: "size-4 shrink-0 text-text-tertiary", "aria-hidden": "true" }),
6137
+ /* @__PURE__ */ jsx93(
6171
6138
  "input",
6172
6139
  {
6173
6140
  type: "text",
@@ -6178,8 +6145,8 @@ var NotificationCenter = React80.forwardRef(
6178
6145
  }
6179
6146
  )
6180
6147
  ] }),
6181
- /* @__PURE__ */ jsxs62("div", { className: "mb-2 flex flex-wrap gap-1.5", children: [
6182
- /* @__PURE__ */ jsx94(
6148
+ /* @__PURE__ */ jsxs61("div", { className: "mb-2 flex flex-wrap gap-1.5", children: [
6149
+ /* @__PURE__ */ jsx93(
6183
6150
  "button",
6184
6151
  {
6185
6152
  type: "button",
@@ -6188,7 +6155,7 @@ var NotificationCenter = React80.forwardRef(
6188
6155
  children: "All"
6189
6156
  }
6190
6157
  ),
6191
- /* @__PURE__ */ jsx94(
6158
+ /* @__PURE__ */ jsx93(
6192
6159
  "button",
6193
6160
  {
6194
6161
  type: "button",
@@ -6198,8 +6165,8 @@ var NotificationCenter = React80.forwardRef(
6198
6165
  }
6199
6166
  )
6200
6167
  ] }),
6201
- /* @__PURE__ */ jsxs62("div", { className: "mb-2 flex flex-wrap gap-1.5", children: [
6202
- /* @__PURE__ */ jsx94(
6168
+ /* @__PURE__ */ jsxs61("div", { className: "mb-2 flex flex-wrap gap-1.5", children: [
6169
+ /* @__PURE__ */ jsx93(
6203
6170
  "button",
6204
6171
  {
6205
6172
  type: "button",
@@ -6208,7 +6175,7 @@ var NotificationCenter = React80.forwardRef(
6208
6175
  children: "All sources"
6209
6176
  }
6210
6177
  ),
6211
- sourceChips.map((s) => /* @__PURE__ */ jsx94(
6178
+ sourceChips.map((s) => /* @__PURE__ */ jsx93(
6212
6179
  "button",
6213
6180
  {
6214
6181
  type: "button",
@@ -6219,8 +6186,8 @@ var NotificationCenter = React80.forwardRef(
6219
6186
  s
6220
6187
  ))
6221
6188
  ] }),
6222
- products && products.length > 0 && /* @__PURE__ */ jsxs62("div", { className: "mb-4 flex flex-wrap gap-1.5", children: [
6223
- /* @__PURE__ */ jsx94(
6189
+ products && products.length > 0 && /* @__PURE__ */ jsxs61("div", { className: "mb-4 flex flex-wrap gap-1.5", children: [
6190
+ /* @__PURE__ */ jsx93(
6224
6191
  "button",
6225
6192
  {
6226
6193
  type: "button",
@@ -6229,7 +6196,7 @@ var NotificationCenter = React80.forwardRef(
6229
6196
  children: "All products"
6230
6197
  }
6231
6198
  ),
6232
- products.map((p) => /* @__PURE__ */ jsx94(
6199
+ products.map((p) => /* @__PURE__ */ jsx93(
6233
6200
  "button",
6234
6201
  {
6235
6202
  type: "button",
@@ -6240,8 +6207,8 @@ var NotificationCenter = React80.forwardRef(
6240
6207
  p.id
6241
6208
  ))
6242
6209
  ] }),
6243
- shown.length === 0 ? /* @__PURE__ */ jsx94("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__ */ jsxs62("div", { className: "flex flex-col gap-1.5", children: [
6244
- shown.map((item) => /* @__PURE__ */ jsx94(
6210
+ shown.length === 0 ? /* @__PURE__ */ jsx93("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__ */ jsxs61("div", { className: "flex flex-col gap-1.5", children: [
6211
+ shown.map((item) => /* @__PURE__ */ jsx93(
6245
6212
  CenterRow,
6246
6213
  {
6247
6214
  item,
@@ -6252,7 +6219,7 @@ var NotificationCenter = React80.forwardRef(
6252
6219
  },
6253
6220
  item.id
6254
6221
  )),
6255
- remaining > 0 && /* @__PURE__ */ jsxs62(
6222
+ remaining > 0 && /* @__PURE__ */ jsxs61(
6256
6223
  "button",
6257
6224
  {
6258
6225
  type: "button",
@@ -6272,9 +6239,9 @@ var NotificationCenter = React80.forwardRef(
6272
6239
  NotificationCenter.displayName = "NotificationCenter";
6273
6240
 
6274
6241
  // src/components/notification-settings.tsx
6275
- import * as React81 from "react";
6242
+ import * as React80 from "react";
6276
6243
  import { Moon as Moon2, Plus as Plus3, Volume2 } from "lucide-react";
6277
- import { Fragment as Fragment11, jsx as jsx95, jsxs as jsxs63 } from "react/jsx-runtime";
6244
+ import { Fragment as Fragment11, jsx as jsx94, jsxs as jsxs62 } from "react/jsx-runtime";
6278
6245
  var THRESHOLDS = [
6279
6246
  ["everything", "Everything"],
6280
6247
  ["important", "Important"],
@@ -6286,7 +6253,7 @@ function ThresholdControl({
6286
6253
  value,
6287
6254
  onChange
6288
6255
  }) {
6289
- return /* @__PURE__ */ jsx95(
6256
+ return /* @__PURE__ */ jsx94(
6290
6257
  ToggleGroup,
6291
6258
  {
6292
6259
  type: "single",
@@ -6295,11 +6262,11 @@ function ThresholdControl({
6295
6262
  value,
6296
6263
  onValueChange: (next) => next && onChange(next),
6297
6264
  className: "shrink-0",
6298
- children: THRESHOLDS.map(([threshold, text]) => /* @__PURE__ */ jsx95(ToggleGroupItem, { value: threshold, children: text }, threshold))
6265
+ children: THRESHOLDS.map(([threshold, text]) => /* @__PURE__ */ jsx94(ToggleGroupItem, { value: threshold, children: text }, threshold))
6299
6266
  }
6300
6267
  );
6301
6268
  }
6302
- var NotificationSettings = React81.forwardRef(
6269
+ var NotificationSettings = React80.forwardRef(
6303
6270
  ({
6304
6271
  subscriptions,
6305
6272
  value,
@@ -6312,7 +6279,7 @@ var NotificationSettings = React81.forwardRef(
6312
6279
  pushSlot,
6313
6280
  className
6314
6281
  }, ref) => {
6315
- const [tab, setTab] = React81.useState(DEFAULT_KEY);
6282
+ const [tab, setTab] = React80.useState(DEFAULT_KEY);
6316
6283
  const isDefault = tab === DEFAULT_KEY;
6317
6284
  const defaults = value[DEFAULT_KEY] ?? { thresholds: {} };
6318
6285
  const customized = !isDefault && Object.prototype.hasOwnProperty.call(value, tab);
@@ -6332,15 +6299,15 @@ var NotificationSettings = React81.forwardRef(
6332
6299
  const scopeGroup = (scope) => {
6333
6300
  const rows = subscriptions.filter((s) => s.scope === scope);
6334
6301
  if (rows.length === 0) return null;
6335
- return /* @__PURE__ */ jsxs63("div", { children: [
6336
- /* @__PURE__ */ jsx95("p", { className: "mb-1.5 px-0.5 text-xs font-medium text-text-tertiary", children: scope === "product" ? "This product" : "Organization" }),
6337
- /* @__PURE__ */ jsx95("div", { className: "space-y-2", children: rows.map((sub) => /* @__PURE__ */ jsxs63(
6302
+ return /* @__PURE__ */ jsxs62("div", { children: [
6303
+ /* @__PURE__ */ jsx94("p", { className: "mb-1.5 px-0.5 text-xs font-medium text-text-tertiary", children: scope === "product" ? "This product" : "Organization" }),
6304
+ /* @__PURE__ */ jsx94("div", { className: "space-y-2", children: rows.map((sub) => /* @__PURE__ */ jsxs62(
6338
6305
  "div",
6339
6306
  {
6340
6307
  className: "flex items-center gap-4 rounded-xl bg-bg-elevated px-4 py-3",
6341
6308
  children: [
6342
- /* @__PURE__ */ jsx95("p", { className: "min-w-0 flex-1 text-sm font-semibold text-text-primary", children: sub.name }),
6343
- /* @__PURE__ */ jsx95(
6309
+ /* @__PURE__ */ jsx94("p", { className: "min-w-0 flex-1 text-sm font-semibold text-text-primary", children: sub.name }),
6310
+ /* @__PURE__ */ jsx94(
6344
6311
  ThresholdControl,
6345
6312
  {
6346
6313
  label: sub.name,
@@ -6354,10 +6321,10 @@ var NotificationSettings = React81.forwardRef(
6354
6321
  )) })
6355
6322
  ] }, scope);
6356
6323
  };
6357
- return /* @__PURE__ */ jsxs63("div", { ref, className: cn("space-y-5", className), children: [
6358
- products && products.length > 0 && /* @__PURE__ */ jsxs63("div", { children: [
6359
- /* @__PURE__ */ jsx95("p", { className: "mb-2 px-0.5 text-xs font-medium text-text-tertiary", children: "Preferences for" }),
6360
- /* @__PURE__ */ jsx95(
6324
+ return /* @__PURE__ */ jsxs62("div", { ref, className: cn("space-y-5", className), children: [
6325
+ products && products.length > 0 && /* @__PURE__ */ jsxs62("div", { children: [
6326
+ /* @__PURE__ */ jsx94("p", { className: "mb-2 px-0.5 text-xs font-medium text-text-tertiary", children: "Preferences for" }),
6327
+ /* @__PURE__ */ jsx94(
6361
6328
  ToggleGroup,
6362
6329
  {
6363
6330
  type: "single",
@@ -6366,30 +6333,30 @@ var NotificationSettings = React81.forwardRef(
6366
6333
  value: tab,
6367
6334
  onValueChange: (next) => next && setTab(next),
6368
6335
  className: "flex-wrap",
6369
- children: [{ id: DEFAULT_KEY, label: "Default" }, ...products].map((t) => /* @__PURE__ */ jsx95(ToggleGroupItem, { value: t.id, children: t.label }, t.id))
6336
+ children: [{ id: DEFAULT_KEY, label: "Default" }, ...products].map((t) => /* @__PURE__ */ jsx94(ToggleGroupItem, { value: t.id, children: t.label }, t.id))
6370
6337
  }
6371
6338
  )
6372
6339
  ] }),
6373
- isDefault ? /* @__PURE__ */ jsxs63(Fragment11, { children: [
6374
- /* @__PURE__ */ jsx95("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." }),
6375
- /* @__PURE__ */ jsxs63(Card, { className: "border-none bg-bg-elevated p-5", children: [
6376
- /* @__PURE__ */ jsx95(CardTitle, { as: "p", className: "mb-1.5", children: "Push to" }),
6377
- /* @__PURE__ */ jsx95("p", { className: "mb-3 text-sm leading-relaxed text-text-secondary", children: "Forward notifications beyond the in-app record to a connected integration." }),
6378
- pushSlot ?? /* @__PURE__ */ jsx95("div", { className: "rounded-lg bg-bg-surface px-4 py-6 text-center", children: /* @__PURE__ */ jsx95("p", { className: "text-sm text-text-tertiary", children: "No integrations connected." }) })
6340
+ isDefault ? /* @__PURE__ */ jsxs62(Fragment11, { children: [
6341
+ /* @__PURE__ */ jsx94("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." }),
6342
+ /* @__PURE__ */ jsxs62(Card, { className: "border-none bg-bg-elevated p-5", children: [
6343
+ /* @__PURE__ */ jsx94(CardTitle, { as: "p", className: "mb-1.5", children: "Push to" }),
6344
+ /* @__PURE__ */ jsx94("p", { className: "mb-3 text-sm leading-relaxed text-text-secondary", children: "Forward notifications beyond the in-app record to a connected integration." }),
6345
+ pushSlot ?? /* @__PURE__ */ jsx94("div", { className: "rounded-lg bg-bg-surface px-4 py-6 text-center", children: /* @__PURE__ */ jsx94("p", { className: "text-sm text-text-tertiary", children: "No integrations connected." }) })
6379
6346
  ] }),
6380
- mutes.length > 0 && /* @__PURE__ */ jsxs63("div", { children: [
6381
- /* @__PURE__ */ jsx95("p", { className: "mb-1.5 px-0.5 text-xs font-medium text-text-tertiary", children: "Muted" }),
6382
- /* @__PURE__ */ jsx95(Card, { className: "border-none bg-bg-elevated p-2", children: mutes.map((m) => /* @__PURE__ */ jsxs63("div", { className: "flex items-center gap-3 rounded-lg px-3 py-2.5", children: [
6383
- /* @__PURE__ */ jsx95(Moon2, { className: "size-4 shrink-0 text-text-tertiary", "aria-hidden": "true" }),
6384
- /* @__PURE__ */ jsxs63("div", { className: "min-w-0 flex-1", children: [
6385
- /* @__PURE__ */ jsx95("p", { className: "text-sm font-medium text-text-primary", children: m.source }),
6386
- /* @__PURE__ */ jsxs63("p", { className: "text-sm text-text-tertiary", children: [
6347
+ mutes.length > 0 && /* @__PURE__ */ jsxs62("div", { children: [
6348
+ /* @__PURE__ */ jsx94("p", { className: "mb-1.5 px-0.5 text-xs font-medium text-text-tertiary", children: "Muted" }),
6349
+ /* @__PURE__ */ jsx94(Card, { className: "border-none bg-bg-elevated p-2", children: mutes.map((m) => /* @__PURE__ */ jsxs62("div", { className: "flex items-center gap-3 rounded-lg px-3 py-2.5", children: [
6350
+ /* @__PURE__ */ jsx94(Moon2, { className: "size-4 shrink-0 text-text-tertiary", "aria-hidden": "true" }),
6351
+ /* @__PURE__ */ jsxs62("div", { className: "min-w-0 flex-1", children: [
6352
+ /* @__PURE__ */ jsx94("p", { className: "text-sm font-medium text-text-primary", children: m.source }),
6353
+ /* @__PURE__ */ jsxs62("p", { className: "text-sm text-text-tertiary", children: [
6387
6354
  "Muted, ",
6388
6355
  m.label,
6389
6356
  ". Critical still comes through."
6390
6357
  ] })
6391
6358
  ] }),
6392
- /* @__PURE__ */ jsx95(
6359
+ /* @__PURE__ */ jsx94(
6393
6360
  "button",
6394
6361
  {
6395
6362
  type: "button",
@@ -6402,13 +6369,13 @@ var NotificationSettings = React81.forwardRef(
6402
6369
  ] }),
6403
6370
  scopeGroup("product"),
6404
6371
  scopeGroup("org"),
6405
- onSoundEnabledChange && /* @__PURE__ */ jsx95(Card, { className: "border-none bg-bg-elevated p-4", children: /* @__PURE__ */ jsxs63("div", { className: "flex items-center gap-3", children: [
6406
- /* @__PURE__ */ jsx95(Volume2, { className: "size-4 text-text-tertiary", "aria-hidden": "true" }),
6407
- /* @__PURE__ */ jsxs63("div", { className: "flex-1", children: [
6408
- /* @__PURE__ */ jsx95("p", { className: "text-sm font-medium text-text-primary", children: "Notification sound" }),
6409
- /* @__PURE__ */ jsx95("p", { className: "text-sm text-text-tertiary", children: "Play a tone when a notification arrives. Critical always chimes." })
6372
+ onSoundEnabledChange && /* @__PURE__ */ jsx94(Card, { className: "border-none bg-bg-elevated p-4", children: /* @__PURE__ */ jsxs62("div", { className: "flex items-center gap-3", children: [
6373
+ /* @__PURE__ */ jsx94(Volume2, { className: "size-4 text-text-tertiary", "aria-hidden": "true" }),
6374
+ /* @__PURE__ */ jsxs62("div", { className: "flex-1", children: [
6375
+ /* @__PURE__ */ jsx94("p", { className: "text-sm font-medium text-text-primary", children: "Notification sound" }),
6376
+ /* @__PURE__ */ jsx94("p", { className: "text-sm text-text-tertiary", children: "Play a tone when a notification arrives. Critical always chimes." })
6410
6377
  ] }),
6411
- /* @__PURE__ */ jsx95(
6378
+ /* @__PURE__ */ jsx94(
6412
6379
  Switch,
6413
6380
  {
6414
6381
  checked: soundEnabled ?? false,
@@ -6417,35 +6384,35 @@ var NotificationSettings = React81.forwardRef(
6417
6384
  }
6418
6385
  )
6419
6386
  ] }) })
6420
- ] }) : !customized ? /* @__PURE__ */ jsxs63(Card, { className: "border-none bg-bg-elevated p-8 text-center", children: [
6421
- /* @__PURE__ */ jsxs63("p", { className: "text-sm font-semibold text-text-primary", children: [
6387
+ ] }) : !customized ? /* @__PURE__ */ jsxs62(Card, { className: "border-none bg-bg-elevated p-8 text-center", children: [
6388
+ /* @__PURE__ */ jsxs62("p", { className: "text-sm font-semibold text-text-primary", children: [
6422
6389
  productLabel,
6423
6390
  " follows your Default preferences."
6424
6391
  ] }),
6425
- /* @__PURE__ */ jsx95("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." }),
6426
- /* @__PURE__ */ jsxs63(
6392
+ /* @__PURE__ */ jsx94("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." }),
6393
+ /* @__PURE__ */ jsxs62(
6427
6394
  "button",
6428
6395
  {
6429
6396
  type: "button",
6430
6397
  onClick: customize,
6431
6398
  className: "mt-5 inline-flex cursor-pointer 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 duration-fast hover:bg-bg-brand-hover",
6432
6399
  children: [
6433
- /* @__PURE__ */ jsx95(Plus3, { className: "size-4", "aria-hidden": "true" }),
6400
+ /* @__PURE__ */ jsx94(Plus3, { className: "size-4", "aria-hidden": "true" }),
6434
6401
  " Customize for ",
6435
6402
  productLabel
6436
6403
  ]
6437
6404
  }
6438
6405
  )
6439
- ] }) : /* @__PURE__ */ jsxs63(Fragment11, { children: [
6440
- /* @__PURE__ */ jsx95(Card, { className: "border-none bg-bg-brand-subtle p-3.5", children: /* @__PURE__ */ jsxs63("div", { className: "flex items-center gap-3", children: [
6441
- /* @__PURE__ */ jsxs63("div", { className: "min-w-0 flex-1", children: [
6442
- /* @__PURE__ */ jsxs63("p", { className: "text-sm font-semibold text-text-brand", children: [
6406
+ ] }) : /* @__PURE__ */ jsxs62(Fragment11, { children: [
6407
+ /* @__PURE__ */ jsx94(Card, { className: "border-none bg-bg-brand-subtle p-3.5", children: /* @__PURE__ */ jsxs62("div", { className: "flex items-center gap-3", children: [
6408
+ /* @__PURE__ */ jsxs62("div", { className: "min-w-0 flex-1", children: [
6409
+ /* @__PURE__ */ jsxs62("p", { className: "text-sm font-semibold text-text-brand", children: [
6443
6410
  "Custom preferences for ",
6444
6411
  productLabel
6445
6412
  ] }),
6446
- /* @__PURE__ */ jsx95("p", { className: "text-sm leading-relaxed text-text-secondary", children: "Only the interrupt thresholds below differ. Sound and forwarding follow Default." })
6413
+ /* @__PURE__ */ jsx94("p", { className: "text-sm leading-relaxed text-text-secondary", children: "Only the interrupt thresholds below differ. Sound and forwarding follow Default." })
6447
6414
  ] }),
6448
- /* @__PURE__ */ jsx95(
6415
+ /* @__PURE__ */ jsx94(
6449
6416
  "button",
6450
6417
  {
6451
6418
  type: "button",
@@ -6463,14 +6430,14 @@ var NotificationSettings = React81.forwardRef(
6463
6430
  NotificationSettings.displayName = "NotificationSettings";
6464
6431
 
6465
6432
  // src/components/notification-toast.tsx
6466
- import * as React82 from "react";
6433
+ import * as React81 from "react";
6467
6434
  import { X as X4 } from "lucide-react";
6468
- import { jsx as jsx96, jsxs as jsxs64 } from "react/jsx-runtime";
6435
+ import { jsx as jsx95, jsxs as jsxs63 } from "react/jsx-runtime";
6469
6436
  var chipBase2 = "cursor-pointer rounded-lg px-2.5 py-1 text-sm font-medium transition-colors duration-fast";
6470
6437
  var chipPrimary = "bg-bg-brand text-text-on-brand hover:bg-bg-brand-hover";
6471
6438
  var chipDestructive = "bg-bg-elevated text-text-danger hover:bg-bg-surface";
6472
6439
  var linkAction = "cursor-pointer text-sm font-semibold text-text-brand transition-colors duration-fast hover:text-text-primary";
6473
- var NotificationToast = React82.forwardRef(
6440
+ var NotificationToast = React81.forwardRef(
6474
6441
  ({
6475
6442
  item,
6476
6443
  showSource = true,
@@ -6487,9 +6454,9 @@ var NotificationToast = React82.forwardRef(
6487
6454
  const actions = item.actions ?? [];
6488
6455
  const percent = progress === void 0 || !Number.isFinite(progress) ? void 0 : Math.min(100, Math.max(0, progress));
6489
6456
  const progressLine = progressLabel === void 0 && percent !== void 0 ? `live, ${Math.round(percent)}%` : progressLabel;
6490
- const barId = React82.useId();
6457
+ const barId = React81.useId();
6491
6458
  const hasProgressLine = progressLine !== null && progressLine !== void 0;
6492
- return /* @__PURE__ */ jsxs64(
6459
+ return /* @__PURE__ */ jsxs63(
6493
6460
  "div",
6494
6461
  {
6495
6462
  ref,
@@ -6500,24 +6467,24 @@ var NotificationToast = React82.forwardRef(
6500
6467
  className
6501
6468
  ),
6502
6469
  children: [
6503
- /* @__PURE__ */ jsxs64("div", { className: "flex items-center gap-2", children: [
6504
- showSource && /* @__PURE__ */ jsx96("span", { className: "text-xs font-semibold text-text-tertiary", children: item.source }),
6505
- /* @__PURE__ */ jsx96(Badge, { variant: severityBadgeVariant(item.severity), children: severityLabels[item.severity] }),
6506
- (overflow || onDismiss) && /* @__PURE__ */ jsxs64("span", { className: "-mr-1 ml-auto flex shrink-0 items-center gap-1", children: [
6470
+ /* @__PURE__ */ jsxs63("div", { className: "flex items-center gap-2", children: [
6471
+ showSource && /* @__PURE__ */ jsx95("span", { className: "text-xs font-semibold text-text-tertiary", children: item.source }),
6472
+ /* @__PURE__ */ jsx95(Badge, { variant: severityBadgeVariant(item.severity), children: severityLabels[item.severity] }),
6473
+ (overflow || onDismiss) && /* @__PURE__ */ jsxs63("span", { className: "-mr-1 ml-auto flex shrink-0 items-center gap-1", children: [
6507
6474
  overflow,
6508
- onDismiss && /* @__PURE__ */ jsx96(
6475
+ onDismiss && /* @__PURE__ */ jsx95(
6509
6476
  "button",
6510
6477
  {
6511
6478
  type: "button",
6512
6479
  "aria-label": dismissLabel,
6513
6480
  onClick: () => onDismiss(item),
6514
6481
  className: "flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-md text-text-tertiary transition-colors duration-fast hover:bg-bg-surface hover:text-text-primary",
6515
- children: /* @__PURE__ */ jsx96(X4, { className: "size-3.5", "aria-hidden": "true" })
6482
+ children: /* @__PURE__ */ jsx95(X4, { className: "size-3.5", "aria-hidden": "true" })
6516
6483
  }
6517
6484
  )
6518
6485
  ] })
6519
6486
  ] }),
6520
- onItemClick ? /* @__PURE__ */ jsx96(
6487
+ onItemClick ? /* @__PURE__ */ jsx95(
6521
6488
  "button",
6522
6489
  {
6523
6490
  type: "button",
@@ -6525,15 +6492,15 @@ var NotificationToast = React82.forwardRef(
6525
6492
  className: "mt-1 block cursor-pointer text-left text-sm font-semibold leading-snug text-text-primary underline-offset-2 hover:underline",
6526
6493
  children: item.title
6527
6494
  }
6528
- ) : /* @__PURE__ */ jsx96("p", { className: "mt-1 text-sm font-semibold leading-snug text-text-primary", children: item.title }),
6529
- item.body && /* @__PURE__ */ jsx96("p", { className: "mt-0.5 text-sm leading-snug text-text-secondary", children: item.body }),
6530
- note && /* @__PURE__ */ jsx96("p", { className: "mt-1.5 text-xs font-medium text-text-warning", children: note }),
6495
+ ) : /* @__PURE__ */ jsx95("p", { className: "mt-1 text-sm font-semibold leading-snug text-text-primary", children: item.title }),
6496
+ item.body && /* @__PURE__ */ jsx95("p", { className: "mt-0.5 text-sm leading-snug text-text-secondary", children: item.body }),
6497
+ note && /* @__PURE__ */ jsx95("p", { className: "mt-1.5 text-xs font-medium text-text-warning", children: note }),
6531
6498
  percent !== void 0 && // The card is a `role="status"`, which implies `aria-atomic` — every tick of the bar would
6532
6499
  // otherwise re-announce the whole card. `aria-live="off"` on the subtree that moves is the
6533
6500
  // one cheap mitigation: the bar stays in the accessibility tree to be read on demand, it
6534
6501
  // just stops interrupting.
6535
- /* @__PURE__ */ jsxs64("div", { className: "mt-2", "aria-live": "off", children: [
6536
- /* @__PURE__ */ jsx96(
6502
+ /* @__PURE__ */ jsxs63("div", { className: "mt-2", "aria-live": "off", children: [
6503
+ /* @__PURE__ */ jsx95(
6537
6504
  Progress,
6538
6505
  {
6539
6506
  value: percent,
@@ -6542,11 +6509,11 @@ var NotificationToast = React82.forwardRef(
6542
6509
  "aria-label": hasProgressLine ? void 0 : "Progress"
6543
6510
  }
6544
6511
  ),
6545
- hasProgressLine && /* @__PURE__ */ jsx96("p", { id: barId, className: "mt-0.5 text-xs text-text-secondary", children: progressLine })
6512
+ hasProgressLine && /* @__PURE__ */ jsx95("p", { id: barId, className: "mt-0.5 text-xs text-text-secondary", children: progressLine })
6546
6513
  ] }),
6547
- actions.length > 0 && /* @__PURE__ */ jsx96("div", { className: "mt-2.5 flex flex-wrap items-center gap-2", children: actions.map((action) => {
6514
+ actions.length > 0 && /* @__PURE__ */ jsx95("div", { className: "mt-2.5 flex flex-wrap items-center gap-2", children: actions.map((action) => {
6548
6515
  const variant = action.variant ?? "link";
6549
- return /* @__PURE__ */ jsx96(
6516
+ return /* @__PURE__ */ jsx95(
6550
6517
  "button",
6551
6518
  {
6552
6519
  type: "button",
@@ -6565,15 +6532,15 @@ var NotificationToast = React82.forwardRef(
6565
6532
  NotificationToast.displayName = "NotificationToast";
6566
6533
 
6567
6534
  // src/components/notification-toaster.tsx
6568
- import * as React83 from "react";
6569
- import { jsx as jsx97 } from "react/jsx-runtime";
6535
+ import * as React82 from "react";
6536
+ import { jsx as jsx96 } from "react/jsx-runtime";
6570
6537
  var positions = {
6571
6538
  "bottom-right": "bottom-6 right-6 flex-col",
6572
6539
  "bottom-left": "bottom-6 left-6 flex-col",
6573
6540
  "top-right": "top-6 right-6 flex-col-reverse",
6574
6541
  "top-left": "top-6 left-6 flex-col-reverse"
6575
6542
  };
6576
- var NotificationToaster = React83.forwardRef(
6543
+ var NotificationToaster = React82.forwardRef(
6577
6544
  ({
6578
6545
  items,
6579
6546
  dwell,
@@ -6590,15 +6557,15 @@ var NotificationToaster = React83.forwardRef(
6590
6557
  className
6591
6558
  }, ref) => {
6592
6559
  const shown = items.slice(0, max);
6593
- const [paused, setPaused] = React83.useState(false);
6594
- const onDismissRef = React83.useRef(onDismiss);
6560
+ const [paused, setPaused] = React82.useState(false);
6561
+ const onDismissRef = React82.useRef(onDismiss);
6595
6562
  onDismissRef.current = onDismiss;
6596
6563
  const fyiDwell = dwell?.fyi;
6597
6564
  const importantDwell = dwell?.important;
6598
6565
  const criticalDwell = dwell?.critical;
6599
- const remaining = React83.useRef(/* @__PURE__ */ new Map());
6566
+ const remaining = React82.useRef(/* @__PURE__ */ new Map());
6600
6567
  const liveIds = shown.map((item) => `${item.id}:${item.severity}`).join(" ");
6601
- React83.useEffect(() => {
6568
+ React82.useEffect(() => {
6602
6569
  const owedById = remaining.current;
6603
6570
  const dwellSeconds = {
6604
6571
  fyi: fyiDwell ?? TOAST_DWELL.fyi,
@@ -6639,7 +6606,7 @@ var NotificationToaster = React83.forwardRef(
6639
6606
  };
6640
6607
  }, [liveIds, paused, fyiDwell, importantDwell, criticalDwell]);
6641
6608
  if (shown.length === 0) return null;
6642
- return /* @__PURE__ */ jsx97(
6609
+ return /* @__PURE__ */ jsx96(
6643
6610
  "div",
6644
6611
  {
6645
6612
  ref,
@@ -6652,7 +6619,7 @@ var NotificationToaster = React83.forwardRef(
6652
6619
  positions[position],
6653
6620
  className
6654
6621
  ),
6655
- children: shown.map((item, i) => /* @__PURE__ */ jsx97("div", { className: "pointer-events-auto", children: /* @__PURE__ */ jsx97(
6622
+ children: shown.map((item, i) => /* @__PURE__ */ jsx96("div", { className: "pointer-events-auto", children: /* @__PURE__ */ jsx96(
6656
6623
  NotificationToast,
6657
6624
  {
6658
6625
  item,
@@ -6926,7 +6893,7 @@ var COUNTRY_OPTIONS = [
6926
6893
  ];
6927
6894
 
6928
6895
  // src/components/organization-onboarding-form.tsx
6929
- import * as React84 from "react";
6896
+ import * as React83 from "react";
6930
6897
 
6931
6898
  // src/lib/auth-surface.ts
6932
6899
  var AUTH_FILLED_BUTTON = "flex h-[46px] w-full items-center justify-center gap-[11px] rounded-[10px] border border-transparent bg-text-primary px-[14px] text-[14.5px] font-semibold tracking-[-0.005em] text-bg-sunken transition-opacity duration-fast hover:opacity-[0.92] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-text-brand active:translate-y-px disabled:cursor-not-allowed disabled:opacity-[0.55]";
@@ -6934,7 +6901,7 @@ var AUTH_QUIET_BUTTON = "flex h-[46px] w-full items-center justify-center gap-[1
6934
6901
  var AUTH_BUTTON_SHADOW = "var(--auth-btn-shadow)";
6935
6902
 
6936
6903
  // src/components/organization-onboarding-form.tsx
6937
- import { jsx as jsx98, jsxs as jsxs65 } from "react/jsx-runtime";
6904
+ import { jsx as jsx97, jsxs as jsxs64 } from "react/jsx-runtime";
6938
6905
  var CONTROLLER_SHARE_PCT = 50;
6939
6906
  var MAX_BENEFICIAL_OWNERS = 50;
6940
6907
  var REQUIRED_FIELD_LABELS = {
@@ -6949,7 +6916,7 @@ function isOwnershipViolation(violation) {
6949
6916
  return /ownership[_\s-]?confirmed/i.test(violation);
6950
6917
  }
6951
6918
  function RequiredMark() {
6952
- return /* @__PURE__ */ jsx98("span", { className: "text-text-danger", children: " *" });
6919
+ return /* @__PURE__ */ jsx97("span", { className: "text-text-danger", children: " *" });
6953
6920
  }
6954
6921
  function parseShare(raw) {
6955
6922
  if (!/^\d{1,3}$/.test(raw.trim())) return null;
@@ -6978,23 +6945,23 @@ function OrganizationOnboardingForm({
6978
6945
  onCancel,
6979
6946
  className
6980
6947
  }) {
6981
- const [name, setName] = React84.useState(defaultValues?.name ?? "");
6982
- const [legalName, setLegalName] = React84.useState(defaultValues?.legal_name ?? "");
6983
- const [ownerName, setOwnerName] = React84.useState(defaultValues?.owner_name ?? "");
6984
- const [countryOfIncorporation, setCountryOfIncorporation] = React84.useState(
6948
+ const [name, setName] = React83.useState(defaultValues?.name ?? "");
6949
+ const [legalName, setLegalName] = React83.useState(defaultValues?.legal_name ?? "");
6950
+ const [ownerName, setOwnerName] = React83.useState(defaultValues?.owner_name ?? "");
6951
+ const [countryOfIncorporation, setCountryOfIncorporation] = React83.useState(
6985
6952
  defaultValues?.country_of_incorporation ?? ""
6986
6953
  );
6987
- const [residencyCountry, setResidencyCountry] = React84.useState(
6954
+ const [residencyCountry, setResidencyCountry] = React83.useState(
6988
6955
  defaultValues?.residency_country ?? ""
6989
6956
  );
6990
- const [owners, setOwners] = React84.useState(
6957
+ const [owners, setOwners] = React83.useState(
6991
6958
  () => initialRows(defaultValues?.beneficial_owners)
6992
6959
  );
6993
- const [ownershipConfirmed, setOwnershipConfirmed] = React84.useState(false);
6994
- const [confirmationAttempted, setConfirmationAttempted] = React84.useState(false);
6995
- const [requiredAttempted, setRequiredAttempted] = React84.useState(false);
6996
- const nextKeyRef = React84.useRef(owners.length);
6997
- const submittingRef = React84.useRef(false);
6960
+ const [ownershipConfirmed, setOwnershipConfirmed] = React83.useState(false);
6961
+ const [confirmationAttempted, setConfirmationAttempted] = React83.useState(false);
6962
+ const [requiredAttempted, setRequiredAttempted] = React83.useState(false);
6963
+ const nextKeyRef = React83.useRef(owners.length);
6964
+ const submittingRef = React83.useRef(false);
6998
6965
  const trimmed = name.trim();
6999
6966
  const filledOwners = owners.filter((row) => !isRowBlank(row));
7000
6967
  const ownerShares = filledOwners.map((row) => parseShare(row.share));
@@ -7056,7 +7023,7 @@ function OrganizationOnboardingForm({
7056
7023
  ...needsOwnershipConfirmation ? { ownership_confirmed: ownershipConfirmed } : {}
7057
7024
  });
7058
7025
  };
7059
- React84.useEffect(() => {
7026
+ React83.useEffect(() => {
7060
7027
  submittingRef.current = false;
7061
7028
  }, [
7062
7029
  name,
@@ -7069,12 +7036,12 @@ function OrganizationOnboardingForm({
7069
7036
  submitting,
7070
7037
  serverError
7071
7038
  ]);
7072
- const countryField = (params) => /* @__PURE__ */ jsxs65("div", { className: "space-y-1.5", children: [
7073
- /* @__PURE__ */ jsxs65(Label2, { htmlFor: params.id, children: [
7039
+ const countryField = (params) => /* @__PURE__ */ jsxs64("div", { className: "space-y-1.5", children: [
7040
+ /* @__PURE__ */ jsxs64(Label2, { htmlFor: params.id, children: [
7074
7041
  params.label,
7075
- /* @__PURE__ */ jsx98(RequiredMark, {})
7042
+ /* @__PURE__ */ jsx97(RequiredMark, {})
7076
7043
  ] }),
7077
- /* @__PURE__ */ jsx98(
7044
+ /* @__PURE__ */ jsx97(
7078
7045
  Select,
7079
7046
  {
7080
7047
  id: params.id,
@@ -7087,13 +7054,13 @@ function OrganizationOnboardingForm({
7087
7054
  }
7088
7055
  )
7089
7056
  ] });
7090
- return /* @__PURE__ */ jsxs65("form", { onSubmit: handleSubmit, className: cn("space-y-4", className), children: [
7091
- /* @__PURE__ */ jsxs65("div", { className: "space-y-1.5", children: [
7092
- /* @__PURE__ */ jsxs65(Label2, { htmlFor: "create-org-name", children: [
7057
+ return /* @__PURE__ */ jsxs64("form", { onSubmit: handleSubmit, className: cn("space-y-4", className), children: [
7058
+ /* @__PURE__ */ jsxs64("div", { className: "space-y-1.5", children: [
7059
+ /* @__PURE__ */ jsxs64(Label2, { htmlFor: "create-org-name", children: [
7093
7060
  REQUIRED_FIELD_LABELS.name,
7094
- /* @__PURE__ */ jsx98(RequiredMark, {})
7061
+ /* @__PURE__ */ jsx97(RequiredMark, {})
7095
7062
  ] }),
7096
- /* @__PURE__ */ jsx98(
7063
+ /* @__PURE__ */ jsx97(
7097
7064
  Input,
7098
7065
  {
7099
7066
  id: "create-org-name",
@@ -7104,12 +7071,12 @@ function OrganizationOnboardingForm({
7104
7071
  }
7105
7072
  )
7106
7073
  ] }),
7107
- /* @__PURE__ */ jsxs65("div", { className: "space-y-1.5", children: [
7108
- /* @__PURE__ */ jsxs65(Label2, { htmlFor: "create-org-legal-name", children: [
7074
+ /* @__PURE__ */ jsxs64("div", { className: "space-y-1.5", children: [
7075
+ /* @__PURE__ */ jsxs64(Label2, { htmlFor: "create-org-legal-name", children: [
7109
7076
  REQUIRED_FIELD_LABELS.legalName,
7110
- /* @__PURE__ */ jsx98(RequiredMark, {})
7077
+ /* @__PURE__ */ jsx97(RequiredMark, {})
7111
7078
  ] }),
7112
- /* @__PURE__ */ jsx98(
7079
+ /* @__PURE__ */ jsx97(
7113
7080
  Input,
7114
7081
  {
7115
7082
  id: "create-org-legal-name",
@@ -7120,12 +7087,12 @@ function OrganizationOnboardingForm({
7120
7087
  }
7121
7088
  )
7122
7089
  ] }),
7123
- /* @__PURE__ */ jsxs65("div", { className: "space-y-1.5", children: [
7124
- /* @__PURE__ */ jsxs65(Label2, { htmlFor: "create-org-owner-name", children: [
7090
+ /* @__PURE__ */ jsxs64("div", { className: "space-y-1.5", children: [
7091
+ /* @__PURE__ */ jsxs64(Label2, { htmlFor: "create-org-owner-name", children: [
7125
7092
  REQUIRED_FIELD_LABELS.ownerName,
7126
- /* @__PURE__ */ jsx98(RequiredMark, {})
7093
+ /* @__PURE__ */ jsx97(RequiredMark, {})
7127
7094
  ] }),
7128
- /* @__PURE__ */ jsx98(
7095
+ /* @__PURE__ */ jsx97(
7129
7096
  Input,
7130
7097
  {
7131
7098
  id: "create-org-owner-name",
@@ -7148,10 +7115,10 @@ function OrganizationOnboardingForm({
7148
7115
  value: residencyCountry,
7149
7116
  onChange: setResidencyCountry
7150
7117
  }),
7151
- /* @__PURE__ */ jsxs65("div", { className: "space-y-2", children: [
7152
- /* @__PURE__ */ jsxs65("div", { className: "flex items-center justify-between", children: [
7153
- /* @__PURE__ */ jsx98(Label2, { children: "Beneficial owners" }),
7154
- /* @__PURE__ */ jsx98(
7118
+ /* @__PURE__ */ jsxs64("div", { className: "space-y-2", children: [
7119
+ /* @__PURE__ */ jsxs64("div", { className: "flex items-center justify-between", children: [
7120
+ /* @__PURE__ */ jsx97(Label2, { children: "Beneficial owners" }),
7121
+ /* @__PURE__ */ jsx97(
7155
7122
  Button,
7156
7123
  {
7157
7124
  type: "button",
@@ -7164,16 +7131,16 @@ function OrganizationOnboardingForm({
7164
7131
  }
7165
7132
  )
7166
7133
  ] }),
7167
- owners.length === 0 && /* @__PURE__ */ jsx98("p", { className: "text-xs text-text-tertiary", children: "List the natural persons who ultimately own or control the organization." }),
7168
- owners.map((row) => /* @__PURE__ */ jsxs65(
7134
+ owners.length === 0 && /* @__PURE__ */ jsx97("p", { className: "text-xs text-text-tertiary", children: "List the natural persons who ultimately own or control the organization." }),
7135
+ owners.map((row) => /* @__PURE__ */ jsxs64(
7169
7136
  "div",
7170
7137
  {
7171
7138
  "data-testid": `beneficial-owner-row-${row.key}`,
7172
7139
  className: "flex items-end gap-2",
7173
7140
  children: [
7174
- /* @__PURE__ */ jsxs65("div", { className: "flex-1 space-y-1", children: [
7175
- /* @__PURE__ */ jsx98(Label2, { htmlFor: `bo-name-${row.key}`, className: "text-xs", children: "Name" }),
7176
- /* @__PURE__ */ jsx98(
7141
+ /* @__PURE__ */ jsxs64("div", { className: "flex-1 space-y-1", children: [
7142
+ /* @__PURE__ */ jsx97(Label2, { htmlFor: `bo-name-${row.key}`, className: "text-xs", children: "Name" }),
7143
+ /* @__PURE__ */ jsx97(
7177
7144
  Input,
7178
7145
  {
7179
7146
  id: `bo-name-${row.key}`,
@@ -7183,9 +7150,9 @@ function OrganizationOnboardingForm({
7183
7150
  }
7184
7151
  )
7185
7152
  ] }),
7186
- /* @__PURE__ */ jsxs65("div", { className: "w-40 space-y-1", children: [
7187
- /* @__PURE__ */ jsx98(Label2, { htmlFor: `bo-country-${row.key}`, className: "text-xs", children: "Country" }),
7188
- /* @__PURE__ */ jsx98(
7153
+ /* @__PURE__ */ jsxs64("div", { className: "w-40 space-y-1", children: [
7154
+ /* @__PURE__ */ jsx97(Label2, { htmlFor: `bo-country-${row.key}`, className: "text-xs", children: "Country" }),
7155
+ /* @__PURE__ */ jsx97(
7189
7156
  Select,
7190
7157
  {
7191
7158
  id: `bo-country-${row.key}`,
@@ -7198,9 +7165,9 @@ function OrganizationOnboardingForm({
7198
7165
  }
7199
7166
  )
7200
7167
  ] }),
7201
- /* @__PURE__ */ jsxs65("div", { className: "w-24 space-y-1", children: [
7202
- /* @__PURE__ */ jsx98(Label2, { htmlFor: `bo-share-${row.key}`, className: "text-xs", children: "Share %" }),
7203
- /* @__PURE__ */ jsx98(
7168
+ /* @__PURE__ */ jsxs64("div", { className: "w-24 space-y-1", children: [
7169
+ /* @__PURE__ */ jsx97(Label2, { htmlFor: `bo-share-${row.key}`, className: "text-xs", children: "Share %" }),
7170
+ /* @__PURE__ */ jsx97(
7204
7171
  Input,
7205
7172
  {
7206
7173
  id: `bo-share-${row.key}`,
@@ -7211,7 +7178,7 @@ function OrganizationOnboardingForm({
7211
7178
  }
7212
7179
  )
7213
7180
  ] }),
7214
- /* @__PURE__ */ jsx98(
7181
+ /* @__PURE__ */ jsx97(
7215
7182
  Button,
7216
7183
  {
7217
7184
  type: "button",
@@ -7226,16 +7193,16 @@ function OrganizationOnboardingForm({
7226
7193
  },
7227
7194
  row.key
7228
7195
  )),
7229
- !ownersValid && /* @__PURE__ */ jsx98("p", { "data-testid": "beneficial-owners-error", className: "text-xs text-text-danger", children: "Every owner needs a name, a country and a share between 0 and 100." }),
7230
- shareSum > 100 && /* @__PURE__ */ jsxs65("p", { "data-testid": "beneficial-owners-sum-warning", className: "text-xs text-text-warning", children: [
7196
+ !ownersValid && /* @__PURE__ */ jsx97("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." }),
7197
+ shareSum > 100 && /* @__PURE__ */ jsxs64("p", { "data-testid": "beneficial-owners-sum-warning", className: "text-xs text-text-warning", children: [
7231
7198
  "The listed shares add up to ",
7232
7199
  shareSum,
7233
7200
  "%, which is more than 100%."
7234
7201
  ] })
7235
7202
  ] }),
7236
- needsOwnershipConfirmation && /* @__PURE__ */ jsxs65("div", { className: "space-y-1", children: [
7237
- /* @__PURE__ */ jsxs65("div", { className: "flex items-start gap-2", children: [
7238
- /* @__PURE__ */ jsx98(
7203
+ needsOwnershipConfirmation && /* @__PURE__ */ jsxs64("div", { className: "space-y-1", children: [
7204
+ /* @__PURE__ */ jsxs64("div", { className: "flex items-start gap-2", children: [
7205
+ /* @__PURE__ */ jsx97(
7239
7206
  Checkbox,
7240
7207
  {
7241
7208
  id: "create-org-ownership-confirmed",
@@ -7245,19 +7212,19 @@ function OrganizationOnboardingForm({
7245
7212
  onCheckedChange: (value) => setOwnershipConfirmed(value === true)
7246
7213
  }
7247
7214
  ),
7248
- /* @__PURE__ */ jsxs65(
7215
+ /* @__PURE__ */ jsxs64(
7249
7216
  Label2,
7250
7217
  {
7251
7218
  htmlFor: "create-org-ownership-confirmed",
7252
7219
  className: "text-xs font-regular leading-snug",
7253
7220
  children: [
7254
7221
  "I confirm the ownership structure above is complete and correct",
7255
- /* @__PURE__ */ jsx98(RequiredMark, {})
7222
+ /* @__PURE__ */ jsx97(RequiredMark, {})
7256
7223
  ]
7257
7224
  }
7258
7225
  )
7259
7226
  ] }),
7260
- showConfirmationError && /* @__PURE__ */ jsx98(
7227
+ showConfirmationError && /* @__PURE__ */ jsx97(
7261
7228
  "p",
7262
7229
  {
7263
7230
  id: "create-org-ownership-error",
@@ -7267,13 +7234,13 @@ function OrganizationOnboardingForm({
7267
7234
  }
7268
7235
  )
7269
7236
  ] }),
7270
- showRequiredError && /* @__PURE__ */ jsx98(InlineError, { "data-testid": "create-org-required-error", children: missingRequired.length === 1 ? `${missingRequired[0]} is required` : `These fields are required: ${missingRequired.join(", ")}` }),
7271
- (serverError || otherViolations.length > 0) && /* @__PURE__ */ jsxs65(InlineError, { "data-testid": "create-org-server-error", children: [
7237
+ showRequiredError && /* @__PURE__ */ jsx97(InlineError, { "data-testid": "create-org-required-error", children: missingRequired.length === 1 ? `${missingRequired[0]} is required` : `These fields are required: ${missingRequired.join(", ")}` }),
7238
+ (serverError || otherViolations.length > 0) && /* @__PURE__ */ jsxs64(InlineError, { "data-testid": "create-org-server-error", children: [
7272
7239
  serverError,
7273
- otherViolations.length > 0 && /* @__PURE__ */ jsx98("ul", { "data-testid": "create-org-violations", className: "mt-1 list-disc pl-4", children: otherViolations.map((violation) => /* @__PURE__ */ jsx98("li", { children: violation }, violation)) })
7240
+ otherViolations.length > 0 && /* @__PURE__ */ jsx97("ul", { "data-testid": "create-org-violations", className: "mt-1 list-disc pl-4", children: otherViolations.map((violation) => /* @__PURE__ */ jsx97("li", { children: violation }, violation)) })
7274
7241
  ] }),
7275
- /* @__PURE__ */ jsxs65("div", { className: "space-y-2 pt-1", children: [
7276
- /* @__PURE__ */ jsx98(
7242
+ /* @__PURE__ */ jsxs64("div", { className: "space-y-2 pt-1", children: [
7243
+ /* @__PURE__ */ jsx97(
7277
7244
  "button",
7278
7245
  {
7279
7246
  type: "submit",
@@ -7284,14 +7251,14 @@ function OrganizationOnboardingForm({
7284
7251
  children: submitting ? "Creating\u2026" : submitLabel
7285
7252
  }
7286
7253
  ),
7287
- onCancel && /* @__PURE__ */ jsx98("button", { type: "button", onClick: onCancel, className: cn("cursor-pointer", AUTH_QUIET_BUTTON), children: "Cancel" })
7254
+ onCancel && /* @__PURE__ */ jsx97("button", { type: "button", onClick: onCancel, className: cn("cursor-pointer", AUTH_QUIET_BUTTON), children: "Cancel" })
7288
7255
  ] })
7289
7256
  ] });
7290
7257
  }
7291
7258
 
7292
7259
  // src/components/list-columns.tsx
7293
- import * as React85 from "react";
7294
- import { jsx as jsx99, jsxs as jsxs66 } from "react/jsx-runtime";
7260
+ import * as React84 from "react";
7261
+ import { jsx as jsx98, jsxs as jsxs65 } from "react/jsx-runtime";
7295
7262
  var CELL_WIDTH = { 20: "w-20", 24: "w-24", 28: "w-28", 32: "w-32" };
7296
7263
  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";
7297
7264
  var cellsClass = "flex shrink-0 items-center gap-3";
@@ -7309,13 +7276,13 @@ function warnDuplicateKeys(columns, where) {
7309
7276
  seen.add(c.key);
7310
7277
  }
7311
7278
  }
7312
- var ListHeader = React85.forwardRef(function ListHeader2({ lead, columns, mark = true, trailing = true, className, ...props }, ref) {
7279
+ var ListHeader = React84.forwardRef(function ListHeader2({ lead, columns, mark = true, trailing = true, className, ...props }, ref) {
7313
7280
  warnDuplicateKeys(columns, "ListHeader");
7314
- return /* @__PURE__ */ jsxs66("div", { ref, className: cn(headerClass, className), ...props, children: [
7315
- mark && /* @__PURE__ */ jsx99("span", { className: "size-8 shrink-0", "aria-hidden": true }),
7316
- /* @__PURE__ */ jsx99("span", { className: "min-w-0 flex-1 truncate", children: lead }),
7317
- /* @__PURE__ */ jsx99("span", { className: cellsClass, children: columns.map((c) => /* @__PURE__ */ jsx99("span", { className: cn(CELL_WIDTH[c.width], cellClass), children: c.label }, c.key)) }),
7318
- trailing && /* @__PURE__ */ jsx99("span", { className: "size-4 shrink-0", "aria-hidden": true })
7281
+ return /* @__PURE__ */ jsxs65("div", { ref, className: cn(headerClass, className), ...props, children: [
7282
+ mark && /* @__PURE__ */ jsx98("span", { className: "size-8 shrink-0", "aria-hidden": true }),
7283
+ /* @__PURE__ */ jsx98("span", { className: "min-w-0 flex-1 truncate", children: lead }),
7284
+ /* @__PURE__ */ jsx98("span", { className: cellsClass, children: columns.map((c) => /* @__PURE__ */ jsx98("span", { className: cn(CELL_WIDTH[c.width], cellClass), children: c.label }, c.key)) }),
7285
+ trailing && /* @__PURE__ */ jsx98("span", { className: "size-4 shrink-0", "aria-hidden": true })
7319
7286
  ] });
7320
7287
  });
7321
7288
  function cellValue(values, column) {
@@ -7323,9 +7290,9 @@ function cellValue(values, column) {
7323
7290
  const value = values[column.key];
7324
7291
  return value === void 0 || value === null || value === "" ? column.fallback : value;
7325
7292
  }
7326
- var ListCells = React85.forwardRef(function ListCells2({ columns, values, className, ...props }, ref) {
7293
+ var ListCells = React84.forwardRef(function ListCells2({ columns, values, className, ...props }, ref) {
7327
7294
  warnDuplicateKeys(columns, "ListCells");
7328
- return /* @__PURE__ */ jsx99("span", { ref, className: cn(cellsClass, className), ...props, children: columns.map((c) => /* @__PURE__ */ jsx99(
7295
+ return /* @__PURE__ */ jsx98("span", { ref, className: cn(cellsClass, className), ...props, children: columns.map((c) => /* @__PURE__ */ jsx98(
7329
7296
  "span",
7330
7297
  {
7331
7298
  className: cn(CELL_WIDTH[c.width], cellClass, c.quiet && "text-text-tertiary"),
@@ -7338,9 +7305,9 @@ ListHeader.displayName = "ListHeader";
7338
7305
  ListCells.displayName = "ListCells";
7339
7306
 
7340
7307
  // src/components/theme-picker.tsx
7341
- import * as React86 from "react";
7308
+ import * as React85 from "react";
7342
7309
  import { Check as Check12 } from "lucide-react";
7343
- import { jsx as jsx100, jsxs as jsxs67 } from "react/jsx-runtime";
7310
+ import { jsx as jsx99, jsxs as jsxs66 } from "react/jsx-runtime";
7344
7311
  var THEME_SWATCHES = {
7345
7312
  // --bg-surface --bg-sunken --bg-overlay --border-default --text-tertiary
7346
7313
  light: { canvas: "#f2f3f4", rail: "#e1e2e4", body: "#ffffff", quiet: "#bbbec7", strong: "#535a6e" },
@@ -7354,13 +7321,13 @@ var OPTIONS = [
7354
7321
  { value: "system", label: "Auto", name: "Auto, follows your device theme" }
7355
7322
  ];
7356
7323
  function Panels({ palette }) {
7357
- return /* @__PURE__ */ jsxs67("span", { className: "flex h-full gap-1.5 p-1.5", style: { background: palette.canvas }, children: [
7358
- /* @__PURE__ */ jsx100(
7324
+ return /* @__PURE__ */ jsxs66("span", { className: "flex h-full gap-1.5 p-1.5", style: { background: palette.canvas }, children: [
7325
+ /* @__PURE__ */ jsx99(
7359
7326
  "span",
7360
7327
  {
7361
7328
  className: "flex flex-col gap-1.5 p-1.5",
7362
7329
  style: { width: "28%", borderRadius: 5, background: palette.rail },
7363
- children: RAIL_BARS.map((w, i) => /* @__PURE__ */ jsx100(
7330
+ children: RAIL_BARS.map((w, i) => /* @__PURE__ */ jsx99(
7364
7331
  "span",
7365
7332
  {
7366
7333
  className: "rounded-full",
@@ -7370,12 +7337,12 @@ function Panels({ palette }) {
7370
7337
  ))
7371
7338
  }
7372
7339
  ),
7373
- /* @__PURE__ */ jsx100(
7340
+ /* @__PURE__ */ jsx99(
7374
7341
  "span",
7375
7342
  {
7376
7343
  className: "flex flex-1 flex-col gap-1.5 border p-2",
7377
7344
  style: { borderRadius: 5, background: palette.body, borderColor: palette.quiet },
7378
- children: BODY_BARS.map((w, i) => /* @__PURE__ */ jsx100(
7345
+ children: BODY_BARS.map((w, i) => /* @__PURE__ */ jsx99(
7379
7346
  "span",
7380
7347
  {
7381
7348
  className: "rounded-full",
@@ -7389,21 +7356,21 @@ function Panels({ palette }) {
7389
7356
  }
7390
7357
  var CUT = "polygon(0 0, -8px 0, -8px calc(100% + 8px), calc(100% + 8px) calc(100% + 8px), calc(100% + 8px) calc(100% - 16px), 100% calc(100% - 16px))";
7391
7358
  function AutoPanels() {
7392
- return /* @__PURE__ */ jsxs67("span", { className: "relative block h-full", children: [
7393
- /* @__PURE__ */ jsx100("span", { className: "absolute inset-0", children: /* @__PURE__ */ jsx100(Panels, { palette: THEME_SWATCHES.light }) }),
7394
- /* @__PURE__ */ jsx100("span", { className: "absolute inset-0", style: { clipPath: CUT }, children: /* @__PURE__ */ jsx100(Panels, { palette: THEME_SWATCHES.dark }) })
7359
+ return /* @__PURE__ */ jsxs66("span", { className: "relative block h-full", children: [
7360
+ /* @__PURE__ */ jsx99("span", { className: "absolute inset-0", children: /* @__PURE__ */ jsx99(Panels, { palette: THEME_SWATCHES.light }) }),
7361
+ /* @__PURE__ */ jsx99("span", { className: "absolute inset-0", style: { clipPath: CUT }, children: /* @__PURE__ */ jsx99(Panels, { palette: THEME_SWATCHES.dark }) })
7395
7362
  ] });
7396
7363
  }
7397
7364
  var previewClass = "block h-28 overflow-hidden rounded-lg border border-border-default";
7398
7365
  var cardClass = "grid cursor-pointer gap-2 rounded-lg p-1.5 text-left transition-colors duration-fast hover:bg-[var(--hov-bg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus";
7399
7366
  var TRACK = { gridTemplateColumns: "repeat(auto-fit, minmax(8rem, 1fr))" };
7400
- var Picker = React86.forwardRef(function Picker2({ value, onValueChange, className, ...props }, ref) {
7401
- return /* @__PURE__ */ jsx100("div", { role: "group", "aria-label": "Theme", ...props, ref, className: cn("grid gap-4", className), style: { ...TRACK, ...props.style }, children: OPTIONS.map((o) => {
7367
+ var Picker = React85.forwardRef(function Picker2({ value, onValueChange, className, ...props }, ref) {
7368
+ return /* @__PURE__ */ jsx99("div", { role: "group", "aria-label": "Theme", ...props, ref, className: cn("grid gap-4", className), style: { ...TRACK, ...props.style }, children: OPTIONS.map((o) => {
7402
7369
  const selected = o.value === value;
7403
7370
  return (
7404
7371
  // Not a `Button` (Guidelines/When it isn't a Button): the preview is the control, and
7405
7372
  // `aria-pressed` is what says which one is on.
7406
- /* @__PURE__ */ jsxs67(
7373
+ /* @__PURE__ */ jsxs66(
7407
7374
  "button",
7408
7375
  {
7409
7376
  type: "button",
@@ -7412,8 +7379,8 @@ var Picker = React86.forwardRef(function Picker2({ value, onValueChange, classNa
7412
7379
  onClick: () => onValueChange(o.value),
7413
7380
  className: cardClass,
7414
7381
  children: [
7415
- /* @__PURE__ */ jsx100("span", { className: cn(previewClass, selected && "border-border-strong"), "aria-hidden": true, children: o.value === "system" ? /* @__PURE__ */ jsx100(AutoPanels, {}) : /* @__PURE__ */ jsx100(Panels, { palette: THEME_SWATCHES[o.value] }) }),
7416
- /* @__PURE__ */ jsxs67(
7382
+ /* @__PURE__ */ jsx99("span", { className: cn(previewClass, selected && "border-border-strong"), "aria-hidden": true, children: o.value === "system" ? /* @__PURE__ */ jsx99(AutoPanels, {}) : /* @__PURE__ */ jsx99(Panels, { palette: THEME_SWATCHES[o.value] }) }),
7383
+ /* @__PURE__ */ jsxs66(
7417
7384
  "span",
7418
7385
  {
7419
7386
  className: cn(
@@ -7421,7 +7388,7 @@ var Picker = React86.forwardRef(function Picker2({ value, onValueChange, classNa
7421
7388
  selected ? "font-semibold text-text-primary" : "text-text-secondary"
7422
7389
  ),
7423
7390
  children: [
7424
- /* @__PURE__ */ jsx100(Check12, { className: cn("size-4 shrink-0", !selected && "invisible"), "aria-hidden": true }),
7391
+ /* @__PURE__ */ jsx99(Check12, { className: cn("size-4 shrink-0", !selected && "invisible"), "aria-hidden": true }),
7425
7392
  o.label
7426
7393
  ]
7427
7394
  }
@@ -7433,9 +7400,9 @@ var Picker = React86.forwardRef(function Picker2({ value, onValueChange, classNa
7433
7400
  );
7434
7401
  }) });
7435
7402
  });
7436
- var WiredPicker = React86.forwardRef(function WiredPicker2({ onValueChange, ...props }, ref) {
7403
+ var WiredPicker = React85.forwardRef(function WiredPicker2({ onValueChange, ...props }, ref) {
7437
7404
  const { theme, setTheme } = useTheme();
7438
- return /* @__PURE__ */ jsx100(
7405
+ return /* @__PURE__ */ jsx99(
7439
7406
  Picker,
7440
7407
  {
7441
7408
  ...props,
@@ -7448,22 +7415,22 @@ var WiredPicker = React86.forwardRef(function WiredPicker2({ onValueChange, ...p
7448
7415
  }
7449
7416
  );
7450
7417
  });
7451
- var ThemePicker = React86.forwardRef(function ThemePicker2({ value, onValueChange, ...props }, ref) {
7452
- const controlled = React86.useRef(value !== void 0);
7418
+ var ThemePicker = React85.forwardRef(function ThemePicker2({ value, onValueChange, ...props }, ref) {
7419
+ const controlled = React85.useRef(value !== void 0);
7453
7420
  if (process.env.NODE_ENV !== "production" && controlled.current !== (value !== void 0)) {
7454
7421
  console.warn(
7455
7422
  "[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."
7456
7423
  );
7457
7424
  }
7458
- return controlled.current ? /* @__PURE__ */ jsx100(Picker, { ...props, ref, value: value ?? "system", onValueChange: onValueChange ?? (() => {
7459
- }) }) : /* @__PURE__ */ jsx100(WiredPicker, { ...props, ref, onValueChange });
7425
+ return controlled.current ? /* @__PURE__ */ jsx99(Picker, { ...props, ref, value: value ?? "system", onValueChange: onValueChange ?? (() => {
7426
+ }) }) : /* @__PURE__ */ jsx99(WiredPicker, { ...props, ref, onValueChange });
7460
7427
  });
7461
7428
  ThemePicker.displayName = "ThemePicker";
7462
7429
 
7463
7430
  // src/components/secret-reveal.tsx
7464
- import * as React87 from "react";
7431
+ import * as React86 from "react";
7465
7432
  import { Copy as Copy2, Download } from "lucide-react";
7466
- import { jsx as jsx101, jsxs as jsxs68 } from "react/jsx-runtime";
7433
+ import { jsx as jsx100, jsxs as jsxs67 } from "react/jsx-runtime";
7467
7434
  var asText = (value) => Array.isArray(value) ? value.join("\n") : value;
7468
7435
  var REVEALED = "A secret is on screen and will not be shown again.";
7469
7436
  var REFUSED = "The browser refused the clipboard. Select the value to copy it.";
@@ -7471,15 +7438,15 @@ function SecretValue({ value }) {
7471
7438
  if (Array.isArray(value)) {
7472
7439
  const half = Math.ceil(value.length / 2);
7473
7440
  const columns = [value.slice(0, half), value.slice(half)].filter((column) => column.length > 0);
7474
- return /* @__PURE__ */ jsx101("div", { className: "flex w-fit gap-x-12", children: columns.map((column, index) => (
7441
+ return /* @__PURE__ */ jsx100("div", { className: "flex w-fit gap-x-12", children: columns.map((column, index) => (
7475
7442
  // Neither the columns nor the values inside one are ever reordered, and two identical
7476
7443
  // values in a list are legal, so the index is the key and the value is not.
7477
- /* @__PURE__ */ jsx101("div", { className: "grid gap-y-1.5", children: column.map((line, row) => /* @__PURE__ */ jsx101("code", { className: "font-mono text-sm font-medium tabular-nums text-text-primary", children: line }, row)) }, index)
7444
+ /* @__PURE__ */ jsx100("div", { className: "grid gap-y-1.5", children: column.map((line, row) => /* @__PURE__ */ jsx100("code", { className: "font-mono text-sm font-medium tabular-nums text-text-primary", children: line }, row)) }, index)
7478
7445
  )) });
7479
7446
  }
7480
- return /* @__PURE__ */ jsx101("code", { className: "block break-all font-mono text-sm font-medium text-text-primary", children: value });
7447
+ return /* @__PURE__ */ jsx100("code", { className: "block break-all font-mono text-sm font-medium text-text-primary", children: value });
7481
7448
  }
7482
- var SecretReveal = React87.forwardRef(
7449
+ var SecretReveal = React86.forwardRef(
7483
7450
  ({
7484
7451
  value,
7485
7452
  caption,
@@ -7496,18 +7463,18 @@ var SecretReveal = React87.forwardRef(
7496
7463
  className,
7497
7464
  ...props
7498
7465
  }, ref) => {
7499
- const [takenText, setTakenText] = React87.useState(null);
7500
- const [refusedText, setRefusedText] = React87.useState(null);
7501
- const [announcedFor, setAnnouncedFor] = React87.useState(null);
7502
- const copyRef = React87.useRef(null);
7503
- const captionId = React87.useId();
7466
+ const [takenText, setTakenText] = React86.useState(null);
7467
+ const [refusedText, setRefusedText] = React86.useState(null);
7468
+ const [announcedFor, setAnnouncedFor] = React86.useState(null);
7469
+ const copyRef = React86.useRef(null);
7470
+ const captionId = React86.useId();
7504
7471
  const text = asText(value);
7505
7472
  const empty = text.length === 0;
7506
7473
  const taken = takenText === text;
7507
7474
  const refused = refusedText === text;
7508
- React87.useEffect(() => setAnnouncedFor(text), [text]);
7475
+ React86.useEffect(() => setAnnouncedFor(text), [text]);
7509
7476
  const announced = announcedFor === text ? REVEALED : "";
7510
- React87.useEffect(() => {
7477
+ React86.useEffect(() => {
7511
7478
  if (autoFocus) copyRef.current?.focus();
7512
7479
  }, [autoFocus]);
7513
7480
  const reportTaken = () => {
@@ -7533,12 +7500,12 @@ var SecretReveal = React87.forwardRef(
7533
7500
  reportTaken();
7534
7501
  onDownload?.();
7535
7502
  };
7536
- return /* @__PURE__ */ jsx101("div", { ref, className: cn("overflow-hidden rounded-lg bg-bg-sunken", className), ...props, children: /* @__PURE__ */ jsx101("div", { className: highlightClassName, ref: highlightRef, children: /* @__PURE__ */ jsxs68("div", { className: "grid gap-3 rounded-lg border border-border-strong px-4 py-3", children: [
7537
- /* @__PURE__ */ jsx101("span", { role: "status", className: "sr-only", children: announced }),
7538
- /* @__PURE__ */ jsx101("div", { id: captionId, className: "text-sm text-text-secondary", children: caption }),
7539
- /* @__PURE__ */ jsx101(SecretValue, { value }),
7540
- /* @__PURE__ */ jsxs68("div", { className: "flex flex-wrap items-center gap-2", children: [
7541
- /* @__PURE__ */ jsx101(
7503
+ return /* @__PURE__ */ jsx100("div", { ref, className: cn("overflow-hidden rounded-lg bg-bg-sunken", className), ...props, children: /* @__PURE__ */ jsx100("div", { className: highlightClassName, ref: highlightRef, children: /* @__PURE__ */ jsxs67("div", { className: "grid gap-3 rounded-lg border border-border-strong px-4 py-3", children: [
7504
+ /* @__PURE__ */ jsx100("span", { role: "status", className: "sr-only", children: announced }),
7505
+ /* @__PURE__ */ jsx100("div", { id: captionId, className: "text-sm text-text-secondary", children: caption }),
7506
+ /* @__PURE__ */ jsx100(SecretValue, { value }),
7507
+ /* @__PURE__ */ jsxs67("div", { className: "flex flex-wrap items-center gap-2", children: [
7508
+ /* @__PURE__ */ jsx100(
7542
7509
  Button,
7543
7510
  {
7544
7511
  ref: copyRef,
@@ -7546,12 +7513,12 @@ var SecretReveal = React87.forwardRef(
7546
7513
  "aria-describedby": captionId,
7547
7514
  variant: "outline",
7548
7515
  size: "sm",
7549
- icon: /* @__PURE__ */ jsx101(Copy2, {}),
7516
+ icon: /* @__PURE__ */ jsx100(Copy2, {}),
7550
7517
  children: copyLabel ?? (Array.isArray(value) ? "Copy all" : "Copy")
7551
7518
  }
7552
7519
  ),
7553
- onDownload && /* @__PURE__ */ jsx101(Button, { onClick: download, "aria-describedby": captionId, variant: "outline", size: "sm", icon: /* @__PURE__ */ jsx101(Download, {}), children: downloadLabel }),
7554
- /* @__PURE__ */ jsx101(
7520
+ onDownload && /* @__PURE__ */ jsx100(Button, { onClick: download, "aria-describedby": captionId, variant: "outline", size: "sm", icon: /* @__PURE__ */ jsx100(Download, {}), children: downloadLabel }),
7521
+ /* @__PURE__ */ jsx100(
7555
7522
  Button,
7556
7523
  {
7557
7524
  onClick: onConfirm,
@@ -7562,17 +7529,17 @@ var SecretReveal = React87.forwardRef(
7562
7529
  }
7563
7530
  )
7564
7531
  ] }),
7565
- refused && /* @__PURE__ */ jsx101("div", { role: "status", className: "text-xs text-text-tertiary", children: REFUSED })
7532
+ refused && /* @__PURE__ */ jsx100("div", { role: "status", className: "text-xs text-text-tertiary", children: REFUSED })
7566
7533
  ] }) }) });
7567
7534
  }
7568
7535
  );
7569
7536
  SecretReveal.displayName = "SecretReveal";
7570
7537
 
7571
7538
  // src/components/star-rating.tsx
7572
- import * as React88 from "react";
7539
+ import * as React87 from "react";
7573
7540
  import * as RadioGroupPrimitive2 from "@radix-ui/react-radio-group";
7574
7541
  import { Star } from "lucide-react";
7575
- import { jsx as jsx102 } from "react/jsx-runtime";
7542
+ import { jsx as jsx101 } from "react/jsx-runtime";
7576
7543
  var STAR_BOX = {
7577
7544
  sm: "size-4",
7578
7545
  md: "size-5",
@@ -7584,7 +7551,7 @@ var ROW_GAP = {
7584
7551
  lg: "gap-1.5"
7585
7552
  };
7586
7553
  var defaultItemLabel = (value, max) => `${value} out of ${max} stars`;
7587
- var StarGlyph = ({ filled, size }) => /* @__PURE__ */ jsx102(
7554
+ var StarGlyph = ({ filled, size }) => /* @__PURE__ */ jsx101(
7588
7555
  Star,
7589
7556
  {
7590
7557
  "aria-hidden": "true",
@@ -7595,7 +7562,7 @@ var StarGlyph = ({ filled, size }) => /* @__PURE__ */ jsx102(
7595
7562
  )
7596
7563
  }
7597
7564
  );
7598
- var StarRating = React88.forwardRef(
7565
+ var StarRating = React87.forwardRef(
7599
7566
  ({
7600
7567
  className,
7601
7568
  value,
@@ -7610,27 +7577,27 @@ var StarRating = React88.forwardRef(
7610
7577
  ...props
7611
7578
  }, ref) => {
7612
7579
  const stars = Array.from({ length: max }, (_, index) => index + 1);
7613
- const [mirror, setMirror] = React88.useState(defaultValue ?? 0);
7580
+ const [mirror, setMirror] = React87.useState(defaultValue ?? 0);
7614
7581
  const selected = value ?? mirror;
7615
- const [preview, setPreview] = React88.useState(null);
7582
+ const [preview, setPreview] = React87.useState(null);
7616
7583
  const shown = preview ?? selected;
7617
7584
  const commit = (next) => {
7618
7585
  setMirror(next);
7619
7586
  onValueChange?.(next);
7620
7587
  };
7621
7588
  if (readOnly) {
7622
- return /* @__PURE__ */ jsx102(
7589
+ return /* @__PURE__ */ jsx101(
7623
7590
  "div",
7624
7591
  {
7625
7592
  ref,
7626
7593
  role: "img",
7627
7594
  "aria-label": props["aria-label"] ?? itemLabel(selected, max),
7628
7595
  className: cn("inline-flex items-center", ROW_GAP[size], className),
7629
- children: stars.map((star) => /* @__PURE__ */ jsx102(StarGlyph, { filled: star <= selected, size }, star))
7596
+ children: stars.map((star) => /* @__PURE__ */ jsx101(StarGlyph, { filled: star <= selected, size }, star))
7630
7597
  }
7631
7598
  );
7632
7599
  }
7633
- return /* @__PURE__ */ jsx102(
7600
+ return /* @__PURE__ */ jsx101(
7634
7601
  RadioGroupPrimitive2.Root,
7635
7602
  {
7636
7603
  ref,
@@ -7647,7 +7614,7 @@ var StarRating = React88.forwardRef(
7647
7614
  orientation: "horizontal",
7648
7615
  loop: false,
7649
7616
  className: cn("inline-flex items-center", ROW_GAP[size], className),
7650
- children: stars.map((star) => /* @__PURE__ */ jsx102(
7617
+ children: stars.map((star) => /* @__PURE__ */ jsx101(
7651
7618
  RadioGroupPrimitive2.Item,
7652
7619
  {
7653
7620
  value: String(star),
@@ -7663,7 +7630,7 @@ var StarRating = React88.forwardRef(
7663
7630
  "rounded-md p-0.5 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus",
7664
7631
  "disabled:pointer-events-none disabled:opacity-50"
7665
7632
  ),
7666
- children: /* @__PURE__ */ jsx102(StarGlyph, { filled: star <= shown, size })
7633
+ children: /* @__PURE__ */ jsx101(StarGlyph, { filled: star <= shown, size })
7667
7634
  },
7668
7635
  star
7669
7636
  ))
@@ -7674,16 +7641,16 @@ var StarRating = React88.forwardRef(
7674
7641
  StarRating.displayName = "StarRating";
7675
7642
 
7676
7643
  // src/components/rating-scale.tsx
7677
- import * as React89 from "react";
7644
+ import * as React88 from "react";
7678
7645
  import * as RadioGroupPrimitive3 from "@radix-ui/react-radio-group";
7679
- import { jsx as jsx103, jsxs as jsxs69 } from "react/jsx-runtime";
7646
+ import { jsx as jsx102, jsxs as jsxs68 } from "react/jsx-runtime";
7680
7647
  var SLOT_BOX = {
7681
7648
  sm: "h-8 min-w-8 px-2 text-xs",
7682
7649
  md: "h-9 min-w-9 px-2 text-sm",
7683
7650
  lg: "h-11 min-w-11 px-3 text-base"
7684
7651
  };
7685
7652
  var defaultItemLabel2 = (value, _min, max) => `${value} out of ${max}`;
7686
- var RatingScale = React89.forwardRef(
7653
+ var RatingScale = React88.forwardRef(
7687
7654
  ({
7688
7655
  className,
7689
7656
  value,
@@ -7699,9 +7666,9 @@ var RatingScale = React89.forwardRef(
7699
7666
  ...props
7700
7667
  }, ref) => {
7701
7668
  const slots = Array.from({ length: Math.max(0, max - min + 1) }, (_, index) => min + index);
7702
- const [mirror, setMirror] = React89.useState(defaultValue);
7669
+ const [mirror, setMirror] = React88.useState(defaultValue);
7703
7670
  const selected = value ?? mirror;
7704
- const row = /* @__PURE__ */ jsx103("div", { className: cn("flex flex-wrap items-center gap-1.5", !endLabels && className), children: slots.map((slot) => {
7671
+ const row = /* @__PURE__ */ jsx102("div", { className: cn("flex flex-wrap items-center gap-1.5", !endLabels && className), children: slots.map((slot) => {
7705
7672
  const isSelected = slot === selected;
7706
7673
  const box = cn(
7707
7674
  "inline-flex items-center justify-center rounded-md border tabular-nums transition-colors duration-fast",
@@ -7709,9 +7676,9 @@ var RatingScale = React89.forwardRef(
7709
7676
  isSelected ? "border-border-strong font-semibold text-text-primary" : "border-field-border font-medium text-text-secondary"
7710
7677
  );
7711
7678
  if (readOnly) {
7712
- return /* @__PURE__ */ jsx103("span", { className: box, "aria-hidden": "true", children: slot }, slot);
7679
+ return /* @__PURE__ */ jsx102("span", { className: box, "aria-hidden": "true", children: slot }, slot);
7713
7680
  }
7714
- return /* @__PURE__ */ jsx103(
7681
+ return /* @__PURE__ */ jsx102(
7715
7682
  RadioGroupPrimitive3.Item,
7716
7683
  {
7717
7684
  value: String(slot),
@@ -7730,12 +7697,12 @@ var RatingScale = React89.forwardRef(
7730
7697
  slot
7731
7698
  );
7732
7699
  }) });
7733
- const ends = endLabels ? /* @__PURE__ */ jsxs69("div", { className: "flex items-center justify-between text-xs text-text-tertiary", children: [
7734
- /* @__PURE__ */ jsx103("span", { children: endLabels.low }),
7735
- /* @__PURE__ */ jsx103("span", { children: endLabels.high })
7700
+ const ends = endLabels ? /* @__PURE__ */ jsxs68("div", { className: "flex items-center justify-between text-xs text-text-tertiary", children: [
7701
+ /* @__PURE__ */ jsx102("span", { children: endLabels.low }),
7702
+ /* @__PURE__ */ jsx102("span", { children: endLabels.high })
7736
7703
  ] }) : null;
7737
7704
  if (readOnly) {
7738
- return /* @__PURE__ */ jsxs69(
7705
+ return /* @__PURE__ */ jsxs68(
7739
7706
  "div",
7740
7707
  {
7741
7708
  ref,
@@ -7749,7 +7716,7 @@ var RatingScale = React89.forwardRef(
7749
7716
  }
7750
7717
  );
7751
7718
  }
7752
- const group = /* @__PURE__ */ jsx103(
7719
+ const group = /* @__PURE__ */ jsx102(
7753
7720
  RadioGroupPrimitive3.Root,
7754
7721
  {
7755
7722
  ref,
@@ -7768,7 +7735,7 @@ var RatingScale = React89.forwardRef(
7768
7735
  }
7769
7736
  );
7770
7737
  if (!endLabels) return group;
7771
- return /* @__PURE__ */ jsxs69("div", { className: cn("flex flex-col gap-1.5", className), children: [
7738
+ return /* @__PURE__ */ jsxs68("div", { className: cn("flex flex-col gap-1.5", className), children: [
7772
7739
  group,
7773
7740
  ends
7774
7741
  ] });