@orangecheck/app-design 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -13,14 +13,14 @@ import * as LabelPrimitive from '@radix-ui/react-label';
13
13
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
14
14
  import * as SelectPrimitive from '@radix-ui/react-select';
15
15
  import * as SwitchPrimitive from '@radix-ui/react-switch';
16
- import { ChevronDown, Check, X, Search, ArrowUpRight, ArrowRight, Copy, ChevronLeft, ChevronRight, Lock, Info, CornerDownLeft, Download, FileText, Upload, Menu, Sun, Moon, SunMoon, PanelLeft, CircleUser, LogOut, ArrowLeft, Maximize2, CircleDashed, CircleMinus, CircleSlash, Clock, CircleX, CircleCheck, Ellipsis } from 'lucide-react';
16
+ import { ChevronDown, Check, X, Search, ArrowUpRight, ArrowRight, Copy, ChevronLeft, ChevronRight, Lock, Info, UserRound, CornerDownLeft, Download, FileText, Upload, Menu, Sun, Moon, SunMoon, PanelLeft, CircleUser, LogOut, ArrowLeft, Maximize2, CircleDashed, CircleMinus, CircleSlash, Clock, CircleX, CircleCheck, Ellipsis } from 'lucide-react';
17
17
  import * as DialogPrimitive from '@radix-ui/react-dialog';
18
18
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
19
19
  import * as PopoverPrimitive from '@radix-ui/react-popover';
20
20
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
21
21
  import * as TabsPrimitive from '@radix-ui/react-tabs';
22
22
  import QRCode from 'qrcode';
23
- import Link6 from 'next/link';
23
+ import Link7 from 'next/link';
24
24
  import { useRouter } from 'next/compat/router';
25
25
 
26
26
  // src/tokens/palette.ts
@@ -871,7 +871,8 @@ var DropdownMenuItem = forwardRef(function DropdownMenuItem2({ className, destru
871
871
  {
872
872
  ref,
873
873
  className: cn(
874
- "flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none",
874
+ // A thumb's 44px on a phone.
875
+ "flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none max-md:h-11",
875
876
  "data-[highlighted]:bg-accent data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-muted-foreground",
876
877
  destructive && "text-destructive [&_svg]:text-destructive",
877
878
  className
@@ -2167,7 +2168,7 @@ var JS_TAG = /<\/?(?=[A-Za-z])/y;
2167
2168
  var JS_TAG_NAME = /[A-Za-z][\w$.:-]*/y;
2168
2169
  var JS_PUNCT = /=>|\.\.\.|[{}()[\];,.<>=+\-*/%!?:&|^~#]/y;
2169
2170
  var JSX_BEFORE = /* @__PURE__ */ new Set(["(", ",", "=", "?", ":", "{", "[", ";", ">", "&&", "||", "=>", "return"]);
2170
- function scanJs(src, emit2, jsx53) {
2171
+ function scanJs(src, emit2, jsx54) {
2171
2172
  let i = 0;
2172
2173
  let prev = "";
2173
2174
  let tagDepth = 0;
@@ -2193,7 +2194,7 @@ function scanJs(src, emit2, jsx53) {
2193
2194
  sig('"');
2194
2195
  continue;
2195
2196
  }
2196
- if (jsx53 && tagDepth === 0 && (m = at(JS_TAG, src, i)) && (prev === "" || JSX_BEFORE.has(prev))) {
2197
+ if (jsx54 && tagDepth === 0 && (m = at(JS_TAG, src, i)) && (prev === "" || JSX_BEFORE.has(prev))) {
2197
2198
  const name = at(JS_TAG_NAME, src, i + m.length);
2198
2199
  if (name) {
2199
2200
  emit2(m);
@@ -2205,7 +2206,7 @@ function scanJs(src, emit2, jsx53) {
2205
2206
  continue;
2206
2207
  }
2207
2208
  }
2208
- if (jsx53 && tagDepth > 0 && braceInTag === 0) {
2209
+ if (jsx54 && tagDepth > 0 && braceInTag === 0) {
2209
2210
  if (src.startsWith("/>", i) || src[i] === ">") {
2210
2211
  const close = src[i] === ">" ? ">" : "/>";
2211
2212
  emit2(close);
@@ -2225,7 +2226,7 @@ function scanJs(src, emit2, jsx53) {
2225
2226
  continue;
2226
2227
  }
2227
2228
  if (src[i] === "{") braceInTag = 1;
2228
- } else if (jsx53 && tagDepth > 0 && braceInTag > 0) {
2229
+ } else if (jsx54 && tagDepth > 0 && braceInTag > 0) {
2229
2230
  if (src[i] === "{") braceInTag++;
2230
2231
  else if (src[i] === "}") braceInTag--;
2231
2232
  }
@@ -2942,6 +2943,7 @@ function Notice({
2942
2943
  title,
2943
2944
  children,
2944
2945
  action,
2946
+ icon,
2945
2947
  role,
2946
2948
  className
2947
2949
  }) {
@@ -2958,7 +2960,17 @@ function Notice({
2958
2960
  ),
2959
2961
  children: [
2960
2962
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 gap-3", children: [
2961
- kind !== "neutral" ? /* @__PURE__ */ jsx(
2963
+ icon ? /* @__PURE__ */ jsx(
2964
+ "span",
2965
+ {
2966
+ "aria-hidden": true,
2967
+ className: cn(
2968
+ "mt-0.5 shrink-0 [&_svg]:size-[1.125rem]",
2969
+ kind === "brand" ? "text-oca-accent-ink" : kind === "danger" ? "text-destructive" : "text-muted-foreground"
2970
+ ),
2971
+ children: icon
2972
+ }
2973
+ ) : kind !== "neutral" ? /* @__PURE__ */ jsx(
2962
2974
  "span",
2963
2975
  {
2964
2976
  "aria-hidden": true,
@@ -3975,7 +3987,7 @@ function ErrorPage({
3975
3987
  /* @__PURE__ */ jsx("p", { className: "oca-lead oca-enter [--enter-delay:150ms]", children: detail ?? words.detail }),
3976
3988
  /* @__PURE__ */ jsx("div", { className: "oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]", children: actions ?? /* @__PURE__ */ jsxs(Fragment, { children: [
3977
3989
  server ? /* @__PURE__ */ jsx(Button, { onClick: () => window.location.reload(), children: "Try again" }) : null,
3978
- /* @__PURE__ */ jsx(Button, { asChild: true, variant: server ? "secondary" : "primary", children: /* @__PURE__ */ jsx(Link6, { href: homeHref, children: "Go home" }) })
3990
+ /* @__PURE__ */ jsx(Button, { asChild: true, variant: server ? "secondary" : "primary", children: /* @__PURE__ */ jsx(Link7, { href: homeHref, children: "Go home" }) })
3979
3991
  ] }) })
3980
3992
  ] }),
3981
3993
  art !== null ? /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "oca-enter hidden justify-center md:col-span-5 md:flex [--enter-delay:120ms]", children: art ?? /* @__PURE__ */ jsx(MarkOutline, { className: "w-full max-w-[20rem] text-oca-hairline-strong" }) }) : null
@@ -4416,7 +4428,7 @@ function TextLink({
4416
4428
  const internal = href.startsWith("/") && !href.startsWith("/api/") && !href.startsWith("/.well-known/");
4417
4429
  const offsite = external ?? /^https?:\/\//.test(href);
4418
4430
  if (internal && !offsite) {
4419
- return /* @__PURE__ */ jsx(Link6, { href, className: cn(LINK, className), children });
4431
+ return /* @__PURE__ */ jsx(Link7, { href, className: cn(LINK, className), children });
4420
4432
  }
4421
4433
  return /* @__PURE__ */ jsxs("a", { href, className: cn(LINK, className), ...offsite ? { target: "_blank", rel: "noreferrer" } : {}, children: [
4422
4434
  children,
@@ -4550,7 +4562,7 @@ function ProtocolGrid({
4550
4562
  ] }),
4551
4563
  p.status !== "live" ? /* @__PURE__ */ jsx(StatusBadge, { status: p.status }) : null
4552
4564
  ] }),
4553
- /* @__PURE__ */ jsx("h3", { className: "oca-display-3", children: link === "docs" && inDocs ? /* @__PURE__ */ jsx(Link6, { href: `/${p.slug}`, className: STRETCH, children: p.label }) : /* @__PURE__ */ jsx(
4565
+ /* @__PURE__ */ jsx("h3", { className: "oca-display-3", children: link === "docs" && inDocs ? /* @__PURE__ */ jsx(Link7, { href: `/${p.slug}`, className: STRETCH, children: p.label }) : /* @__PURE__ */ jsx(
4554
4566
  "a",
4555
4567
  {
4556
4568
  href: link === "tool" ? p.toolHref : link === "docs" ? `${DOCS_HREF}/${p.slug}` : p.pageHref,
@@ -4610,7 +4622,7 @@ function AppGrid({
4610
4622
  }
4611
4623
  var isInternal = (href) => href.startsWith("/") || href.startsWith("#");
4612
4624
  function DocLink({ href, className, children, ...rest }) {
4613
- return isInternal(href) ? /* @__PURE__ */ jsx(Link6, { href, className, ...rest, children }) : /* @__PURE__ */ jsx("a", { href, className, ...rest, children });
4625
+ return isInternal(href) ? /* @__PURE__ */ jsx(Link7, { href, className, ...rest, children }) : /* @__PURE__ */ jsx("a", { href, className, ...rest, children });
4614
4626
  }
4615
4627
  function Breadcrumbs({ items, action, className }) {
4616
4628
  return /* @__PURE__ */ jsxs("div", { className: cn("flex min-h-11 items-center justify-between gap-4 sm:min-h-0", className), children: [
@@ -5440,6 +5452,66 @@ function ListCard({
5440
5452
  }) {
5441
5453
  return /* @__PURE__ */ jsx(Tag, { className: cn("divide-y divide-border overflow-clip rounded-[1.25rem] border border-border bg-card", className), ...props });
5442
5454
  }
5455
+ var ROW_LOOK = {
5456
+ // In a ListCard: full width, the card's hairlines between rows.
5457
+ card: { box: "px-5", hover: "hover:bg-accent/60", current: "bg-accent" },
5458
+ // In a pane's list (threads, contacts): rounded, lifted when current.
5459
+ pane: { box: "rounded-xl px-3", hover: "hover:bg-accent", current: "bg-card shadow-sm ring-1 ring-border" }
5460
+ };
5461
+ function ListRow({
5462
+ title,
5463
+ meta,
5464
+ description,
5465
+ leading,
5466
+ trailing,
5467
+ actions,
5468
+ revealActions = "always",
5469
+ href,
5470
+ onSelect,
5471
+ current: current2 = false,
5472
+ unread = false,
5473
+ variant = "card",
5474
+ as: Tag = "li",
5475
+ className
5476
+ }) {
5477
+ const tight = useDensity() === "compact";
5478
+ const look = ROW_LOOK[variant];
5479
+ const interactive = href !== void 0 || onSelect !== void 0;
5480
+ const cls = cn(
5481
+ "flex min-h-11 w-full min-w-0 items-center gap-3 text-left outline-none transition-colors",
5482
+ "focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
5483
+ look.box,
5484
+ variant === "pane" ? "py-2" : tight ? "py-3" : "py-4",
5485
+ interactive && !current2 && look.hover,
5486
+ current2 && look.current,
5487
+ actions && "pr-14"
5488
+ );
5489
+ const body = /* @__PURE__ */ jsxs(Fragment, { children: [
5490
+ leading ? /* @__PURE__ */ jsx("span", { className: "flex shrink-0", children: leading }) : null,
5491
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
5492
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-baseline justify-between gap-3", children: [
5493
+ /* @__PURE__ */ jsx("span", { className: cn("truncate text-[0.9375rem] text-foreground", unread ? "font-semibold" : "font-medium"), children: title }),
5494
+ meta ? /* @__PURE__ */ jsx("span", { className: "oca-tabular shrink-0 text-[0.8125rem] text-muted-foreground", children: meta }) : null
5495
+ ] }),
5496
+ description ? /* @__PURE__ */ jsx("span", { className: cn("truncate text-[0.875rem]", unread ? "text-foreground" : "text-muted-foreground"), children: description }) : null
5497
+ ] }),
5498
+ trailing ? /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center gap-2", children: trailing }) : null
5499
+ ] });
5500
+ const aria = current2 ? { "aria-current": "true" } : {};
5501
+ return /* @__PURE__ */ jsxs(Tag, { className: cn("group/row relative", className), children: [
5502
+ href !== void 0 ? href.startsWith("/") ? /* @__PURE__ */ jsx(Link7, { href, className: cls, ...aria, children: body }) : /* @__PURE__ */ jsx("a", { href, className: cls, ...aria, children: body }) : onSelect ? /* @__PURE__ */ jsx("button", { type: "button", onClick: onSelect, className: cls, ...aria, children: body }) : /* @__PURE__ */ jsx("div", { className: cls, children: body }),
5503
+ actions ? /* @__PURE__ */ jsx(
5504
+ "div",
5505
+ {
5506
+ className: cn(
5507
+ "absolute right-2 top-1/2 flex -translate-y-1/2 items-center",
5508
+ revealActions === "hover" && "transition-opacity md:opacity-0 md:focus-within:opacity-100 md:group-hover/row:opacity-100 md:has-[[data-state=open]]:opacity-100"
5509
+ ),
5510
+ children: actions
5511
+ }
5512
+ ) : null
5513
+ ] });
5514
+ }
5443
5515
  var ChoiceSize = createContext("md");
5444
5516
  var COLUMNS = { 1: "", 2: "sm:grid-cols-2", 3: "sm:grid-cols-2 lg:grid-cols-3" };
5445
5517
  function ChoiceGroup({
@@ -5506,6 +5578,54 @@ function ChoiceCard({
5506
5578
  }
5507
5579
  );
5508
5580
  }
5581
+ var SIZES2 = {
5582
+ "2xs": "size-7 text-[0.6875rem] [&_svg]:size-3.5",
5583
+ xs: "size-8 text-[0.75rem] [&_svg]:size-4",
5584
+ sm: "size-9 text-[0.8125rem] [&_svg]:size-4",
5585
+ md: "size-11 text-[0.9375rem] [&_svg]:size-5",
5586
+ lg: "size-14 text-[1.1875rem] [&_svg]:size-6"
5587
+ };
5588
+ function personInitials(name) {
5589
+ return name.trim().split(/\s+/).slice(0, 2).map((w) => w.match(/[\p{L}\p{N}]/u)?.[0] ?? "").join("").toLocaleUpperCase();
5590
+ }
5591
+ function avatarHue(seed) {
5592
+ let h = 2166136261;
5593
+ for (let i = 0; i < seed.length; i++) {
5594
+ h ^= seed.charCodeAt(i);
5595
+ h = Math.imul(h, 16777619);
5596
+ }
5597
+ return (h >>> 0) % 360;
5598
+ }
5599
+ function Avatar({
5600
+ seed,
5601
+ name,
5602
+ src,
5603
+ size = "sm",
5604
+ className
5605
+ }) {
5606
+ const [failed, setFailed] = useState(null);
5607
+ const box = cn("inline-flex shrink-0 select-none items-center justify-center overflow-hidden rounded-full", SIZES2[size], className);
5608
+ if (src && failed !== src) {
5609
+ return (
5610
+ // eslint-disable-next-line @next/next/no-img-element
5611
+ /* @__PURE__ */ jsx("img", { src, alt: "", "aria-hidden": true, className: cn(box, "object-cover"), onError: () => setFailed(src) })
5612
+ );
5613
+ }
5614
+ const initials = name ? personInitials(name) : "";
5615
+ return /* @__PURE__ */ jsx(
5616
+ "span",
5617
+ {
5618
+ "aria-hidden": true,
5619
+ className: cn(box, "font-medium leading-none"),
5620
+ style: {
5621
+ "--oca-avatar-h": avatarHue(seed),
5622
+ backgroundColor: "hsl(var(--oca-avatar-h) 60% var(--oca-avatar-bg-l))",
5623
+ color: "hsl(var(--oca-avatar-h) 45% var(--oca-avatar-fg-l))"
5624
+ },
5625
+ children: initials || /* @__PURE__ */ jsx(UserRound, {})
5626
+ }
5627
+ );
5628
+ }
5509
5629
  function useMacKeys() {
5510
5630
  const [mac, setMac] = useState(true);
5511
5631
  useEffect(() => {
@@ -6333,7 +6453,7 @@ function ToolGrid({
6333
6453
  ] }),
6334
6454
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
6335
6455
  /* @__PURE__ */ jsx(Heading, { className: "oca-title-sm", children: /* @__PURE__ */ jsx(
6336
- Link6,
6456
+ Link7,
6337
6457
  {
6338
6458
  href: t.href,
6339
6459
  className: "outline-none after:absolute after:inset-0 after:rounded-[1.25rem] after:content-['']",
@@ -6430,7 +6550,7 @@ function SideNav({ groups, onNavigate }) {
6430
6550
  return /* @__PURE__ */ jsx("nav", { "aria-label": "Pages", className: "flex flex-col gap-5", children: groups.map((g, gi) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
6431
6551
  g.label ? /* @__PURE__ */ jsx("p", { className: "px-3 pb-1 text-[0.8125rem] text-muted-foreground", children: g.label }) : null,
6432
6552
  g.items.map((it) => /* @__PURE__ */ jsxs(
6433
- Link6,
6553
+ Link7,
6434
6554
  {
6435
6555
  href: it.href,
6436
6556
  onClick: onNavigate,
@@ -6465,7 +6585,7 @@ function SectionSwitch({
6465
6585
  children: sections.map((sec) => {
6466
6586
  const on = sec.id === current2.id;
6467
6587
  return /* @__PURE__ */ jsx(
6468
- Link6,
6588
+ Link7,
6469
6589
  {
6470
6590
  href: sec.href,
6471
6591
  onClick: onNavigate,
@@ -6538,7 +6658,7 @@ function TabBar({ items }) {
6538
6658
  style: { gridTemplateColumns: `repeat(${shown.length + (overflow ? 1 : 0)}, minmax(0, 1fr))` },
6539
6659
  children: [
6540
6660
  shown.map((it) => /* @__PURE__ */ jsx(
6541
- Link6,
6661
+ Link7,
6542
6662
  {
6543
6663
  href: it.href,
6544
6664
  "aria-current": it.active ? "page" : void 0,
@@ -6558,7 +6678,7 @@ function TabBar({ items }) {
6558
6678
  /* @__PURE__ */ jsxs(SheetContent, { side: "bottom", className: "pb-[calc(1.5rem+env(safe-area-inset-bottom))]", children: [
6559
6679
  /* @__PURE__ */ jsx(SheetTitle, { className: "px-1 text-[1.0625rem] font-medium", children: "More" }),
6560
6680
  /* @__PURE__ */ jsx("div", { className: "mt-4 grid grid-cols-3 gap-2", children: rest.map((it) => /* @__PURE__ */ jsxs(
6561
- Link6,
6681
+ Link7,
6562
6682
  {
6563
6683
  href: it.href,
6564
6684
  onClick: () => setMore(false),
@@ -6672,7 +6792,7 @@ function SidebarShell({
6672
6792
  footer ? /* @__PURE__ */ jsx("div", { className: "mt-auto flex flex-col gap-3", children: footer }) : null
6673
6793
  ] })
6674
6794
  ] }),
6675
- /* @__PURE__ */ jsx(Link6, { href: home, "aria-label": "Home", className: "rounded-lg p-1", children: /* @__PURE__ */ jsx(Lockup, { size: 22 }) }),
6795
+ /* @__PURE__ */ jsx(Link7, { href: home, "aria-label": "Home", className: "rounded-lg p-1", children: /* @__PURE__ */ jsx(Lockup, { size: 22 }) }),
6676
6796
  familyMenu,
6677
6797
  /* @__PURE__ */ jsx("div", { className: "ml-auto flex items-center", children: account })
6678
6798
  ] }),
@@ -6697,7 +6817,7 @@ function SidebarShell({
6697
6817
  /* @__PURE__ */ jsxs("div", { className: "mx-auto flex w-full max-w-[90rem]", children: [
6698
6818
  /* @__PURE__ */ jsxs("aside", { className: "sticky top-0 hidden h-dvh w-[17rem] shrink-0 flex-col gap-6 overflow-y-auto px-4 py-6 lg:flex", children: [
6699
6819
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
6700
- /* @__PURE__ */ jsx(Link6, { href: home, className: "px-2", "aria-label": "Home", children: /* @__PURE__ */ jsx(Lockup, { size: 26 }) }),
6820
+ /* @__PURE__ */ jsx(Link7, { href: home, className: "px-2", "aria-label": "Home", children: /* @__PURE__ */ jsx(Lockup, { size: 26 }) }),
6701
6821
  familyMenu
6702
6822
  ] }),
6703
6823
  switcher,
@@ -6718,7 +6838,7 @@ function SidebarShell({
6718
6838
  function RailItem({ item }) {
6719
6839
  return /* @__PURE__ */ jsxs(Tooltip, { children: [
6720
6840
  /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
6721
- Link6,
6841
+ Link7,
6722
6842
  {
6723
6843
  href: item.href,
6724
6844
  "aria-current": item.active ? "page" : void 0,
@@ -6773,6 +6893,9 @@ function RailShell({ nav = [], persistent = [], page: pageOverride, header, acco
6773
6893
  tabs ? /* @__PURE__ */ jsx(TabBar, { items: tabs }) : null
6774
6894
  ] }) }) });
6775
6895
  }
6896
+ function PaneHeader({ children, className }) {
6897
+ return /* @__PURE__ */ jsx("header", { className: cn("flex h-14 shrink-0 items-center gap-3 border-b border-border px-4 md:px-5", className), children });
6898
+ }
6776
6899
  function AccountMenu({
6777
6900
  name,
6778
6901
  detail,
@@ -6809,7 +6932,7 @@ function AccountMenu({
6809
6932
  ] }),
6810
6933
  /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
6811
6934
  items.map(
6812
- (it, i) => it === "separator" ? /* @__PURE__ */ jsx(DropdownMenuSeparator, {}, `sep-${i}`) : it.href ? /* @__PURE__ */ jsx(DropdownMenuItem, { asChild: true, destructive: it.destructive, children: /* @__PURE__ */ jsxs(Link6, { href: it.href, children: [
6935
+ (it, i) => it === "separator" ? /* @__PURE__ */ jsx(DropdownMenuSeparator, {}, `sep-${i}`) : it.href ? /* @__PURE__ */ jsx(DropdownMenuItem, { asChild: true, destructive: it.destructive, children: /* @__PURE__ */ jsxs(Link7, { href: it.href, children: [
6813
6936
  it.icon,
6814
6937
  it.label
6815
6938
  ] }) }, it.label) : /* @__PURE__ */ jsxs(DropdownMenuItem, { onSelect: it.onSelect, destructive: it.destructive, children: [
@@ -6858,7 +6981,7 @@ function NavLink({
6858
6981
  if (item.external) {
6859
6982
  return /* @__PURE__ */ jsx("a", { href: item.href, className: cls, rel: "noreferrer", onClick: onNavigate, children: item.label });
6860
6983
  }
6861
- return /* @__PURE__ */ jsx(Link6, { href: item.href, className: cls, "aria-current": item.active ? "page" : void 0, onClick: onNavigate, children: item.label });
6984
+ return /* @__PURE__ */ jsx(Link7, { href: item.href, className: cls, "aria-current": item.active ? "page" : void 0, onClick: onNavigate, children: item.label });
6862
6985
  }
6863
6986
  function NavRow({ item, onNavigate }) {
6864
6987
  const body = /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -6869,7 +6992,7 @@ function NavRow({ item, onNavigate }) {
6869
6992
  "flex flex-col gap-0.5 rounded-xl px-3 py-2 transition-colors hover:bg-accent",
6870
6993
  item.active && "bg-muted hover:bg-muted dark:bg-white/[0.06]"
6871
6994
  );
6872
- return item.external ? /* @__PURE__ */ jsx("a", { href: item.href, className: cls, rel: "noreferrer", onClick: onNavigate, children: body }) : /* @__PURE__ */ jsx(Link6, { href: item.href, className: cls, "aria-current": item.active ? "page" : void 0, onClick: onNavigate, children: body });
6995
+ return item.external ? /* @__PURE__ */ jsx("a", { href: item.href, className: cls, rel: "noreferrer", onClick: onNavigate, children: body }) : /* @__PURE__ */ jsx(Link7, { href: item.href, className: cls, "aria-current": item.active ? "page" : void 0, onClick: onNavigate, children: body });
6873
6996
  }
6874
6997
  var seeAll = (item) => typeof item.label === "string" ? `All ${item.label.toLowerCase()}` : "See all";
6875
6998
  function NavDropdown({ item }) {
@@ -6961,7 +7084,7 @@ function SiteHeader({
6961
7084
  ),
6962
7085
  children: [
6963
7086
  /* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 items-center gap-1", tool ? "md:gap-1" : "justify-self-start"), children: [
6964
- /* @__PURE__ */ jsxs(Link6, { href: home, className: "-ml-1 min-w-0 rounded-lg p-1", children: [
7087
+ /* @__PURE__ */ jsxs(Link7, { href: home, className: "-ml-1 min-w-0 rounded-lg p-1", children: [
6965
7088
  brandNode,
6966
7089
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: " home" })
6967
7090
  ] }),
@@ -7063,7 +7186,7 @@ function SiteBanner({
7063
7186
  var FOOT_LINK = "inline-flex min-h-11 items-center transition-colors hover:text-foreground md:min-h-0";
7064
7187
  function LegalRow({ links }) {
7065
7188
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:items-center sm:justify-between", children: [
7066
- /* @__PURE__ */ jsx("nav", { "aria-label": "Legal", children: /* @__PURE__ */ jsx("ul", { className: "flex flex-wrap gap-x-5", children: links.map((l, i) => /* @__PURE__ */ jsx("li", { children: l.href.startsWith("/") ? /* @__PURE__ */ jsx(Link6, { href: l.href, className: FOOT_LINK, children: l.label }) : /* @__PURE__ */ jsx("a", { href: l.href, className: FOOT_LINK, children: l.label }) }, `${i}:${l.label}`)) }) }),
7189
+ /* @__PURE__ */ jsx("nav", { "aria-label": "Legal", children: /* @__PURE__ */ jsx("ul", { className: "flex flex-wrap gap-x-5", children: links.map((l, i) => /* @__PURE__ */ jsx("li", { children: l.href.startsWith("/") ? /* @__PURE__ */ jsx(Link7, { href: l.href, className: FOOT_LINK, children: l.label }) : /* @__PURE__ */ jsx("a", { href: l.href, className: FOOT_LINK, children: l.label }) }, `${i}:${l.label}`)) }) }),
7067
7190
  /* @__PURE__ */ jsxs("p", { children: [
7068
7191
  "\xA9 ",
7069
7192
  (/* @__PURE__ */ new Date()).getFullYear(),
@@ -7206,12 +7329,12 @@ function SignInFrame({
7206
7329
  children: [
7207
7330
  /* @__PURE__ */ jsxs("section", { className: "flex flex-col px-4 pb-8 pt-5 sm:px-8 lg:px-14 lg:pt-8", children: [
7208
7331
  /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between gap-4", children: [
7209
- /* @__PURE__ */ jsxs(Link6, { href: homeHref, className: "w-fit rounded-lg", children: [
7332
+ /* @__PURE__ */ jsxs(Link7, { href: homeHref, className: "w-fit rounded-lg", children: [
7210
7333
  brand ?? /* @__PURE__ */ jsx(ProductLockup, { size: 28, product: product ?? (protocol2 ? protocolSite(protocol2).label : void 0) }),
7211
7334
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: " home" })
7212
7335
  ] }),
7213
7336
  back === void 0 ? /* @__PURE__ */ jsx(
7214
- Link6,
7337
+ Link7,
7215
7338
  {
7216
7339
  href: homeHref,
7217
7340
  className: "text-[0.9375rem] text-muted-foreground underline-offset-4 hover:text-foreground hover:underline",
@@ -7306,7 +7429,7 @@ function DocsNav({
7306
7429
  const on = pathOf(item.href) === here;
7307
7430
  const badge = typeof item.badge === "string" && STATUS_WORDS.has(item.badge) ? /* @__PURE__ */ jsx(StatusBadge, { status: item.badge }) : item.badge ? /* @__PURE__ */ jsx(Badge, { tone: "muted", children: item.badge }) : null;
7308
7431
  return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
7309
- Link6,
7432
+ Link7,
7310
7433
  {
7311
7434
  href: item.href,
7312
7435
  ref: on ? activeRef : void 0,
@@ -7699,6 +7822,6 @@ function createMdxComponents({ mermaid } = {}) {
7699
7822
  }
7700
7823
  var mdxComponents = createMdxComponents();
7701
7824
 
7702
- export { APP_ATTRIBUTE, APP_ID, Accent, Accordion, AccordionItem, AccountCta, AccountMenu, ActivityList, AnchorStatus, ApiTable, AppCard, AppGrid, AppIcon, AppShell, ArtifactView, Badge, BlockCountdown, BlockHeight, Breadcrumbs, BrowserFrame, Button, CODE_LANGS, Callout, Card, CardContent, CardDescription, CardFooter, CardGrid, CardHeader, CardNumeral, CardTitle, ChartFrame, Checkbox, ChoiceCard, ChoiceGroup, Closing, CodeBlock, CodeTabs, CommandDialog, ComparisonTable, Container, CopyButton, CountdownRing, Crowd, DOCS_HEADER_NAV, DOCS_HREF, DataTable, DensityProvider, Diagram, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogHost, DialogTitle, DialogTrigger, Display, DocHeader, DocLayout, DocsHeading, DocsNav, DocsPager, DocsShell, DropZone, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EmptyLine, EmptyState, EndpointList, ErrorBoundary, ErrorPage, Eyebrow, FAMILY, FAMILY_GROUPS, FactBlock, FactRows, FamilyMenu, Faq, Field, FilterChips, FloatChip, Footnote, FormSection, GET_AN_ACCOUNT, HalftoneCanvas, HalftoneSphere, HashChip, HudCard, Input, InstallTabs, IsoCheck, Kbd, KeyValueList, LEGAL_LINKS, Label, Lead, LegalDocument, LinkCard, ListCard, LoadingBlock, LockedPreview, Lockup, MARK_FACES, Mark, MdxTable, Meter, Monogram, Notice, OCHK_APP, OCHK_APP_ACCOUNT, OCHK_IO, OCHK_IO_FOOTER, OCHK_IO_NAV, OchkIoFooter, OnThisPage, PROTOCOLS, PROTOCOL_ORDER, PackageCard, PageHeader, PageHero, Pagination, Panel, PhoneFrame, PlanCard, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProgressSteps, ProofStrip, Prose, ProtocolGrid, ProtocolHero, ProtocolNav, QrCode, RadioGroup, RadioGroupItem, Reveal, SELF_HOSTED_LEGAL_LINKS, SIGN_IN_LABEL, SPHERE_GRADIENT, Sats, SatsFigure, ScrollFade, ScrollStory, SearchButton, SearchDialog, Section, SectionHeading, SectionIntro, SectionTitle, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, Separator, SessionAccountView, Sheet, SheetClose, SheetContent, SheetDescription, SheetTitle, SheetTrigger, ShellContext, SignInFrame, SignMessage, SiteBanner, SiteFooter, SiteHeader, Skeleton, SkipLink, SourceNote, Sparkline, SpecCard, Spinner, SplitBar, StatCard, StatGrid, StateBadge, StatusBadge, StatusDot, StatusPill, Step, StepGrid, Steps, Switch, TOKEN_CLASS, Tabs, TabsContent, TabsList, TabsTrigger, TextLink, Textarea, ThemeToggle, Ticker, Toaster, ToolColumn, ToolGrid, ToolShell, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TruthTable, UsdApprox, VerifyBox, VerifyReport, appColors, appFonts, badgeVariants, blocksToDuration, buttonVariants, cardVariants, chartColor, cn, confirm, createMdxComponents, createStateBadge, darkPalette, escapeHtml, explorerUrl, familyByGroup, familySite, formatBlockHeight, formatBytes, formatUtc, grammarOf, highlight, highlightToHtml, languageName, lightPalette, linesToHtml, mdxComponents, monogramGround, monogramLetter, parseCodeMeta, parseLineRanges, portraitTone, prompt, protocolSite, readDiff, rehypeCode, satsText, sectionVariants, shortenMiddle, statusWord, useActiveHeading, useCopy, useDensity, useHeadings, useInView, useShellPlace, useSignInHref, useTimedOut };
7825
+ export { APP_ATTRIBUTE, APP_ID, Accent, Accordion, AccordionItem, AccountCta, AccountMenu, ActivityList, AnchorStatus, ApiTable, AppCard, AppGrid, AppIcon, AppShell, ArtifactView, Avatar, Badge, BlockCountdown, BlockHeight, Breadcrumbs, BrowserFrame, Button, CODE_LANGS, Callout, Card, CardContent, CardDescription, CardFooter, CardGrid, CardHeader, CardNumeral, CardTitle, ChartFrame, Checkbox, ChoiceCard, ChoiceGroup, Closing, CodeBlock, CodeTabs, CommandDialog, ComparisonTable, Container, CopyButton, CountdownRing, Crowd, DOCS_HEADER_NAV, DOCS_HREF, DataTable, DensityProvider, Diagram, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogHost, DialogTitle, DialogTrigger, Display, DocHeader, DocLayout, DocsHeading, DocsNav, DocsPager, DocsShell, DropZone, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EmptyLine, EmptyState, EndpointList, ErrorBoundary, ErrorPage, Eyebrow, FAMILY, FAMILY_GROUPS, FactBlock, FactRows, FamilyMenu, Faq, Field, FilterChips, FloatChip, Footnote, FormSection, GET_AN_ACCOUNT, HalftoneCanvas, HalftoneSphere, HashChip, HudCard, Input, InstallTabs, IsoCheck, Kbd, KeyValueList, LEGAL_LINKS, Label, Lead, LegalDocument, LinkCard, ListCard, ListRow, LoadingBlock, LockedPreview, Lockup, MARK_FACES, Mark, MdxTable, Meter, Monogram, Notice, OCHK_APP, OCHK_APP_ACCOUNT, OCHK_IO, OCHK_IO_FOOTER, OCHK_IO_NAV, OchkIoFooter, OnThisPage, PROTOCOLS, PROTOCOL_ORDER, PackageCard, PageHeader, PageHero, Pagination, PaneHeader, Panel, PhoneFrame, PlanCard, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProgressSteps, ProofStrip, Prose, ProtocolGrid, ProtocolHero, ProtocolNav, QrCode, RadioGroup, RadioGroupItem, Reveal, SELF_HOSTED_LEGAL_LINKS, SIGN_IN_LABEL, SPHERE_GRADIENT, Sats, SatsFigure, ScrollFade, ScrollStory, SearchButton, SearchDialog, Section, SectionHeading, SectionIntro, SectionTitle, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, Separator, SessionAccountView, Sheet, SheetClose, SheetContent, SheetDescription, SheetTitle, SheetTrigger, ShellContext, SignInFrame, SignMessage, SiteBanner, SiteFooter, SiteHeader, Skeleton, SkipLink, SourceNote, Sparkline, SpecCard, Spinner, SplitBar, StatCard, StatGrid, StateBadge, StatusBadge, StatusDot, StatusPill, Step, StepGrid, Steps, Switch, TOKEN_CLASS, Tabs, TabsContent, TabsList, TabsTrigger, TextLink, Textarea, ThemeToggle, Ticker, Toaster, ToolColumn, ToolGrid, ToolShell, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TruthTable, UsdApprox, VerifyBox, VerifyReport, appColors, appFonts, badgeVariants, blocksToDuration, buttonVariants, cardVariants, chartColor, cn, confirm, createMdxComponents, createStateBadge, darkPalette, escapeHtml, explorerUrl, familyByGroup, familySite, formatBlockHeight, formatBytes, formatUtc, grammarOf, highlight, highlightToHtml, languageName, lightPalette, linesToHtml, mdxComponents, monogramGround, monogramLetter, parseCodeMeta, parseLineRanges, portraitTone, prompt, protocolSite, readDiff, rehypeCode, satsText, sectionVariants, shortenMiddle, statusWord, useActiveHeading, useCopy, useDensity, useHeadings, useInView, useShellPlace, useSignInHref, useTimedOut };
7703
7826
  //# sourceMappingURL=index.mjs.map
7704
7827
  //# sourceMappingURL=index.mjs.map