@orangecheck/app-design 1.6.2 → 1.7.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.
Files changed (52) hide show
  1. package/README.md +3 -3
  2. package/dist/chrome.d.mts +11 -6
  3. package/dist/chrome.d.ts +11 -6
  4. package/dist/chrome.js +152 -128
  5. package/dist/chrome.js.map +1 -1
  6. package/dist/chrome.mjs +151 -129
  7. package/dist/chrome.mjs.map +1 -1
  8. package/dist/components.d.mts +40 -5
  9. package/dist/components.d.ts +40 -5
  10. package/dist/components.js +131 -10
  11. package/dist/components.js.map +1 -1
  12. package/dist/components.mjs +128 -11
  13. package/dist/components.mjs.map +1 -1
  14. package/dist/{docs-CFE5mU_6.d.mts → docs-B9G1BNXI.d.mts} +2 -2
  15. package/dist/{docs-ByUx4t-D.d.ts → docs-BWWnm5Jv.d.ts} +2 -2
  16. package/dist/family.d.mts +1 -1
  17. package/dist/family.d.ts +1 -1
  18. package/dist/family.js +7 -1
  19. package/dist/family.js.map +1 -1
  20. package/dist/family.mjs +5 -2
  21. package/dist/family.mjs.map +1 -1
  22. package/dist/{index-DmfyPYe5.d.mts → index-Bkl49Vgy.d.mts} +4 -1
  23. package/dist/{index-DmfyPYe5.d.ts → index-Bkl49Vgy.d.ts} +4 -1
  24. package/dist/index.d.mts +7 -7
  25. package/dist/index.d.ts +7 -7
  26. package/dist/index.js +189 -43
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +181 -44
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/mdx.d.mts +3 -3
  31. package/dist/mdx.d.ts +3 -3
  32. package/dist/mdx.js +3 -2
  33. package/dist/mdx.js.map +1 -1
  34. package/dist/mdx.mjs +3 -2
  35. package/dist/mdx.mjs.map +1 -1
  36. package/dist/primitives.d.mts +2 -2
  37. package/dist/primitives.d.ts +2 -2
  38. package/dist/session.d.mts +4 -4
  39. package/dist/session.d.ts +4 -4
  40. package/dist/session.js +122 -1
  41. package/dist/session.js.map +1 -1
  42. package/dist/session.mjs +122 -1
  43. package/dist/session.mjs.map +1 -1
  44. package/dist/{status-badge-BJ9Sdsx8.d.mts → status-badge-BBbCO6ZA.d.mts} +1 -1
  45. package/dist/{status-badge-Bt8x3RhO.d.ts → status-badge-CHHxtFkP.d.ts} +1 -1
  46. package/dist/styles/swagger.css +24 -1
  47. package/dist/styles/tokens.css +5 -0
  48. package/dist/{tool-shell-CQZNRUgH.d.mts → tool-shell-CnZ3NUSi.d.ts} +10 -4
  49. package/dist/{tool-shell-CRmceGrV.d.ts → tool-shell-DQFEMLLe.d.mts} +10 -4
  50. package/dist/{tools-Bg1gi2HO.d.mts → tools-CKO8IseL.d.mts} +2 -2
  51. package/dist/{tools-Bw7RhO92.d.ts → tools-CzjFPng4.d.ts} +2 -2
  52. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -2167,7 +2167,7 @@ var JS_TAG = /<\/?(?=[A-Za-z])/y;
2167
2167
  var JS_TAG_NAME = /[A-Za-z][\w$.:-]*/y;
2168
2168
  var JS_PUNCT = /=>|\.\.\.|[{}()[\];,.<>=+\-*/%!?:&|^~#]/y;
2169
2169
  var JSX_BEFORE = /* @__PURE__ */ new Set(["(", ",", "=", "?", ":", "{", "[", ";", ">", "&&", "||", "=>", "return"]);
2170
- function scanJs(src, emit2, jsx52) {
2170
+ function scanJs(src, emit2, jsx53) {
2171
2171
  let i = 0;
2172
2172
  let prev = "";
2173
2173
  let tagDepth = 0;
@@ -2193,7 +2193,7 @@ function scanJs(src, emit2, jsx52) {
2193
2193
  sig('"');
2194
2194
  continue;
2195
2195
  }
2196
- if (jsx52 && tagDepth === 0 && (m = at(JS_TAG, src, i)) && (prev === "" || JSX_BEFORE.has(prev))) {
2196
+ if (jsx53 && tagDepth === 0 && (m = at(JS_TAG, src, i)) && (prev === "" || JSX_BEFORE.has(prev))) {
2197
2197
  const name = at(JS_TAG_NAME, src, i + m.length);
2198
2198
  if (name) {
2199
2199
  emit2(m);
@@ -2205,7 +2205,7 @@ function scanJs(src, emit2, jsx52) {
2205
2205
  continue;
2206
2206
  }
2207
2207
  }
2208
- if (jsx52 && tagDepth > 0 && braceInTag === 0) {
2208
+ if (jsx53 && tagDepth > 0 && braceInTag === 0) {
2209
2209
  if (src.startsWith("/>", i) || src[i] === ">") {
2210
2210
  const close = src[i] === ">" ? ">" : "/>";
2211
2211
  emit2(close);
@@ -2225,7 +2225,7 @@ function scanJs(src, emit2, jsx52) {
2225
2225
  continue;
2226
2226
  }
2227
2227
  if (src[i] === "{") braceInTag = 1;
2228
- } else if (jsx52 && tagDepth > 0 && braceInTag > 0) {
2228
+ } else if (jsx53 && tagDepth > 0 && braceInTag > 0) {
2229
2229
  if (src[i] === "{") braceInTag++;
2230
2230
  else if (src[i] === "}") braceInTag--;
2231
2231
  }
@@ -3253,7 +3253,7 @@ function Well({
3253
3253
  ] });
3254
3254
  }
3255
3255
  var FRAME = "overflow-hidden rounded-[1.25rem] border border-[var(--oca-code-line)] bg-[var(--oca-code-surface)]";
3256
- var COPY_ON_INK = "text-oca-ink-subtle hover:bg-white/10 hover:text-white";
3256
+ var COPY_ON_INK = "text-oca-ink-subtle hover:bg-white/10 hover:text-white max-md:size-11";
3257
3257
  function CodeBlock({
3258
3258
  code,
3259
3259
  html,
@@ -3681,6 +3681,9 @@ var GROUNDS = [
3681
3681
  }
3682
3682
  ];
3683
3683
  var SIZES = {
3684
+ // A list row's avatar, a facepile.
3685
+ "2xs": "size-7 rounded-[0.55rem] text-[0.75rem]",
3686
+ xs: "size-8 rounded-[0.6rem] text-[0.875rem]",
3684
3687
  sm: "size-9 rounded-[0.7rem] text-[0.9375rem]",
3685
3688
  md: "size-11 rounded-[0.85rem] text-[1.125rem]",
3686
3689
  lg: "size-14 rounded-[1.05rem] text-[1.5rem]"
@@ -3768,6 +3771,9 @@ var ErrorBoundary = class extends Component {
3768
3771
  // src/family/index.ts
3769
3772
  var OCHK_IO = "https://ochk.io";
3770
3773
  var DOCS_HREF = `${OCHK_IO}/docs`;
3774
+ var OCHK_APP = "https://ochk.app";
3775
+ var GET_AN_ACCOUNT = { href: OCHK_APP, label: "Get an account" };
3776
+ var SIGN_IN_LABEL = "Sign in";
3771
3777
  function protocol(slug, verb, line, kinds) {
3772
3778
  return {
3773
3779
  slug,
@@ -3804,7 +3810,7 @@ var FAMILY = [
3804
3810
  {
3805
3811
  slug: "me",
3806
3812
  label: "ochk.app",
3807
- href: "https://ochk.app",
3813
+ href: OCHK_APP,
3808
3814
  group: "orangecheck",
3809
3815
  line: "One account, with Bitcoin behind it.",
3810
3816
  status: "testing"
@@ -3923,6 +3929,10 @@ var OCHK_IO_FOOTER = [
3923
3929
  ]
3924
3930
  }
3925
3931
  ];
3932
+ var InColumnContext = sharedContext("in-column", false);
3933
+ function useInColumn() {
3934
+ return useContext(InColumnContext);
3935
+ }
3926
3936
  var SiteHomeContext = sharedContext("site-home", void 0);
3927
3937
  function useSiteHome() {
3928
3938
  return useContext(SiteHomeContext);
@@ -3950,10 +3960,11 @@ function ErrorPage({
3950
3960
  className
3951
3961
  }) {
3952
3962
  const shellHome = useSiteHome();
3963
+ const inColumn = useInColumn();
3953
3964
  const homeHref = home ?? (protocol2 ? protocolSite(protocol2).pageHref : shellHome ?? OCHK_IO);
3954
3965
  const words = WORDS[code] ?? (code >= 500 ? WORDS[500] : WORDS[404]);
3955
3966
  const server = code >= 500;
3956
- return /* @__PURE__ */ jsx(Section, { space: "none", className: cn("flex min-h-[min(40rem,72dvh)] items-center py-16 md:py-24", className), children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-12 md:grid-cols-12", children: [
3967
+ return /* @__PURE__ */ jsx(Section, { space: "none", contained: !inColumn, className: cn("flex min-h-[min(40rem,72dvh)] items-center py-16 md:py-24", className), children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-12 md:grid-cols-12", children: [
3957
3968
  /* @__PURE__ */ jsxs("div", { className: "flex max-w-[40rem] flex-col items-start gap-6 md:col-span-7", children: [
3958
3969
  /* @__PURE__ */ jsxs("p", { className: "oca-eyebrow oca-enter", children: [
3959
3970
  /* @__PURE__ */ jsx("span", { className: "oca-tabular", children: code }),
@@ -5389,6 +5400,112 @@ function SignMessage({
5389
5400
  )
5390
5401
  ] });
5391
5402
  }
5403
+ function SectionTitle({
5404
+ title,
5405
+ meta,
5406
+ description,
5407
+ action,
5408
+ as: Tag = "h2",
5409
+ size = "md",
5410
+ tone = "default",
5411
+ id,
5412
+ className
5413
+ }) {
5414
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-wrap items-end justify-between gap-x-4 gap-y-3", className), children: [
5415
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 max-w-[40rem] flex-[1_1_16rem] flex-col gap-1", children: [
5416
+ /* @__PURE__ */ jsxs(
5417
+ Tag,
5418
+ {
5419
+ id,
5420
+ className: cn(
5421
+ "flex scroll-mt-24 flex-wrap items-baseline gap-x-3",
5422
+ size === "sm" ? "oca-title-sm" : "oca-title",
5423
+ tone === "danger" && "text-destructive"
5424
+ ),
5425
+ children: [
5426
+ title,
5427
+ meta ? /* @__PURE__ */ jsx("span", { className: "oca-tabular text-[0.875rem] font-normal tracking-normal text-muted-foreground", children: meta }) : null
5428
+ ]
5429
+ }
5430
+ ),
5431
+ description ? /* @__PURE__ */ jsx("p", { className: "text-[0.9375rem] leading-relaxed text-muted-foreground", children: description }) : null
5432
+ ] }),
5433
+ action ? /* @__PURE__ */ jsx("div", { className: "flex shrink-0 flex-wrap items-center gap-2", children: action }) : null
5434
+ ] });
5435
+ }
5436
+ function ListCard({
5437
+ as: Tag = "ul",
5438
+ className,
5439
+ ...props
5440
+ }) {
5441
+ return /* @__PURE__ */ jsx(Tag, { className: cn("divide-y divide-border overflow-clip rounded-[1.25rem] border border-border bg-card", className), ...props });
5442
+ }
5443
+ var ChoiceSize = createContext("md");
5444
+ var COLUMNS = { 1: "", 2: "sm:grid-cols-2", 3: "sm:grid-cols-2 lg:grid-cols-3" };
5445
+ function ChoiceGroup({
5446
+ value,
5447
+ onValueChange,
5448
+ label,
5449
+ columns = 1,
5450
+ size = "md",
5451
+ disabled,
5452
+ className,
5453
+ children
5454
+ }) {
5455
+ return /* @__PURE__ */ jsx(ChoiceSize.Provider, { value: size, children: /* @__PURE__ */ jsx(
5456
+ RadioGroupPrimitive.Root,
5457
+ {
5458
+ value: value ?? "",
5459
+ onValueChange: (v) => onValueChange(v),
5460
+ "aria-label": label,
5461
+ disabled,
5462
+ className: cn("grid", size === "sm" ? "gap-1.5" : "gap-3", COLUMNS[columns], className),
5463
+ children
5464
+ }
5465
+ ) });
5466
+ }
5467
+ function ChoiceCard({
5468
+ value,
5469
+ title,
5470
+ description,
5471
+ icon,
5472
+ disabled,
5473
+ className
5474
+ }) {
5475
+ const sm = useContext(ChoiceSize) === "sm";
5476
+ return /* @__PURE__ */ jsxs(
5477
+ RadioGroupPrimitive.Item,
5478
+ {
5479
+ value,
5480
+ disabled,
5481
+ className: cn(
5482
+ "group flex w-full min-w-0 items-start gap-3 border text-left outline-none transition-colors",
5483
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
5484
+ "border-border bg-card data-[state=checked]:border-foreground data-[state=checked]:bg-accent data-[state=unchecked]:hover:border-oca-hairline-strong",
5485
+ "disabled:cursor-not-allowed disabled:opacity-50",
5486
+ sm ? "min-h-11 rounded-xl px-3.5 py-2.5" : "rounded-[1.25rem] p-5",
5487
+ className
5488
+ ),
5489
+ children: [
5490
+ icon ? /* @__PURE__ */ jsx(
5491
+ "span",
5492
+ {
5493
+ "aria-hidden": true,
5494
+ className: cn(
5495
+ "shrink-0 text-muted-foreground group-data-[state=checked]:text-oca-accent-ink [&_svg]:size-full",
5496
+ sm ? "mt-0.5 size-4" : "size-6"
5497
+ ),
5498
+ children: icon
5499
+ }
5500
+ ) : null,
5501
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col gap-1", children: [
5502
+ /* @__PURE__ */ jsx("span", { className: sm ? "text-[0.9375rem] font-medium" : "oca-title-sm", children: title }),
5503
+ description ? /* @__PURE__ */ jsx("span", { className: "text-[0.875rem] leading-relaxed text-muted-foreground", children: description }) : null
5504
+ ] })
5505
+ ]
5506
+ }
5507
+ );
5508
+ }
5392
5509
  function useMacKeys() {
5393
5510
  const [mac, setMac] = useState(true);
5394
5511
  useEffect(() => {
@@ -5664,7 +5781,7 @@ function download(content, filename, mime) {
5664
5781
  a.remove();
5665
5782
  setTimeout(() => URL.revokeObjectURL(url), 0);
5666
5783
  }
5667
- var BAR_BUTTON = "inline-flex h-7 items-center gap-1.5 rounded-full px-2.5 text-[0.75rem] text-oca-ink-subtle transition-colors hover:bg-white/10 hover:text-white";
5784
+ var BAR_BUTTON = "inline-flex h-7 items-center gap-1.5 rounded-full px-2.5 text-[0.75rem] text-oca-ink-subtle transition-colors hover:bg-white/10 hover:text-white max-md:h-11 max-md:min-w-11 max-md:justify-center max-md:px-3";
5668
5785
  function ArtifactView({
5669
5786
  content,
5670
5787
  title,
@@ -5694,7 +5811,8 @@ function ArtifactView({
5694
5811
  "aria-pressed": view === v,
5695
5812
  onClick: () => setView(v),
5696
5813
  className: cn(
5697
- "h-7 rounded-full px-2.5 text-[0.75rem] transition-colors",
5814
+ // The pill stays 28px; its target reaches the bar's 44.
5815
+ "relative h-7 rounded-full px-2.5 text-[0.75rem] transition-colors before:absolute before:inset-x-0 before:top-1/2 before:h-11 before:-translate-y-1/2",
5698
5816
  view === v ? "bg-white/[0.12] text-white" : "text-oca-ink-subtle hover:text-white"
5699
5817
  ),
5700
5818
  children: v === "formatted" ? "Formatted" : "Raw"
@@ -6164,7 +6282,8 @@ function FilterChips({
6164
6282
  onClick: () => press(o.value),
6165
6283
  className: cn(
6166
6284
  "inline-flex shrink-0 items-center gap-1.5 rounded-full border px-3.5 text-[0.875rem] transition-colors",
6167
- tight ? "h-8" : "h-9",
6285
+ // A thumb's 44px on a phone.
6286
+ tight ? "h-11 md:h-8" : "h-11 md:h-9",
6168
6287
  on ? "border-foreground bg-foreground text-background" : "border-border bg-card text-muted-foreground hover:border-oca-hairline-strong hover:text-foreground"
6169
6288
  ),
6170
6289
  children: [
@@ -6588,7 +6707,7 @@ function SidebarShell({
6588
6707
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
6589
6708
  /* @__PURE__ */ jsx("div", { className: "hidden h-[4.5rem] items-center justify-end gap-3 px-8 lg:flex", children: account }),
6590
6709
  banner ? /* @__PURE__ */ jsx("div", { className: "px-4 pb-2 pt-4 md:px-8 lg:pt-0", children: banner }) : null,
6591
- /* @__PURE__ */ jsx("main", { id: "main-content", className: "flex-1 px-4 pb-16 pt-6 md:px-8 lg:pt-2", children: /* @__PURE__ */ jsx("div", { className: "mx-auto w-full max-w-[72rem]", children }) })
6710
+ /* @__PURE__ */ jsx("main", { id: "main-content", className: "flex-1 px-4 pb-16 pt-6 md:px-8 lg:pt-2", children: /* @__PURE__ */ jsx("div", { className: "mx-auto w-full max-w-[72rem]", children: /* @__PURE__ */ jsx(InColumnContext.Provider, { value: true, children }) }) })
6592
6711
  ] })
6593
6712
  ] }),
6594
6713
  tabs ? /* @__PURE__ */ jsx(TabBar, { items: tabs }) : null
@@ -6783,6 +6902,18 @@ function NavDropdown({ item }) {
6783
6902
  ] })
6784
6903
  ] });
6785
6904
  }
6905
+ function AccountCta({ href = GET_AN_ACCOUNT.href, className }) {
6906
+ return /* @__PURE__ */ jsx(Button, { asChild: true, size: "sm", className, children: /* @__PURE__ */ jsx("a", { href, children: GET_AN_ACCOUNT.label }) });
6907
+ }
6908
+ function ProductLockup({ size, product }) {
6909
+ return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center", children: [
6910
+ /* @__PURE__ */ jsx(Lockup, { size }),
6911
+ product ? /* @__PURE__ */ jsxs(Fragment, { children: [
6912
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "mx-3 h-5 w-px bg-oca-hairline-strong" }),
6913
+ /* @__PURE__ */ jsx("span", { className: "font-medium tracking-[-0.01em]", style: { fontSize: size * 0.56 }, children: product })
6914
+ ] }) : null
6915
+ ] });
6916
+ }
6786
6917
  function SiteHeader({
6787
6918
  home = "/",
6788
6919
  brand,
@@ -6802,13 +6933,7 @@ function SiteHeader({
6802
6933
  const current2 = typeof family === "string" ? family : void 0;
6803
6934
  const phoneNav = navOnPhone ? nav : [];
6804
6935
  const menu = phoneNav.length > 0 || Boolean(family) || Boolean(menuExtra);
6805
- const brandNode = brand ?? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center", children: [
6806
- /* @__PURE__ */ jsx(Lockup, { size }),
6807
- product ? /* @__PURE__ */ jsxs(Fragment, { children: [
6808
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "mx-3 h-5 w-px bg-oca-hairline-strong" }),
6809
- /* @__PURE__ */ jsx("span", { className: "font-medium tracking-[-0.01em]", style: { fontSize: size * 0.56 }, children: product })
6810
- ] }) : null
6811
- ] });
6936
+ const brandNode = brand ?? /* @__PURE__ */ jsx(ProductLockup, { size, product });
6812
6937
  const navigation = nav.length > 0 ? /* @__PURE__ */ jsx("nav", { "aria-label": "Main", className: "hidden items-center gap-1 md:flex", children: nav.map(
6813
6938
  (n) => n.children?.length ? /* @__PURE__ */ jsx(NavDropdown, { item: n }, n.href) : (
6814
6939
  // Between md and lg the family menu and the actions share the row: tighter.
@@ -6938,7 +7063,7 @@ function SiteBanner({
6938
7063
  var FOOT_LINK = "inline-flex min-h-11 items-center transition-colors hover:text-foreground md:min-h-0";
6939
7064
  function LegalRow({ links }) {
6940
7065
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:items-center sm:justify-between", children: [
6941
- /* @__PURE__ */ jsx("nav", { "aria-label": "Legal", children: /* @__PURE__ */ jsx("ul", { className: "flex flex-wrap gap-x-5", children: links.map((l) => /* @__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 }) }, l.href)) }) }),
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}`)) }) }),
6942
7067
  /* @__PURE__ */ jsxs("p", { children: [
6943
7068
  "\xA9 ",
6944
7069
  (/* @__PURE__ */ new Date()).getFullYear(),
@@ -6958,16 +7083,26 @@ function SiteFooter({
6958
7083
  }) {
6959
7084
  const legalLinks = legal === true ? LEGAL_LINKS : legal || null;
6960
7085
  if (compact) {
6961
- return /* @__PURE__ */ jsx("footer", { className: cn("border-t border-border bg-background text-[0.875rem] text-muted-foreground", className), children: /* @__PURE__ */ jsxs("div", { className: "oca-container flex flex-col gap-x-8 gap-y-3 py-5 lg:flex-row lg:items-center lg:justify-between", children: [
6962
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-1", children: [
6963
- /* @__PURE__ */ jsx("a", { href: OCHK_IO, className: "rounded-lg text-foreground", children: /* @__PURE__ */ jsx(Lockup, { size: 22 }) }),
6964
- family ? /* @__PURE__ */ jsx("nav", { "aria-label": "Protocols", children: /* @__PURE__ */ jsx("ul", { className: "flex flex-wrap gap-x-4", children: PROTOCOLS.map((p) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: p.pageHref, className: FOOT_LINK, children: p.label }) }, p.slug)) }) }) : null
6965
- ] }),
6966
- legalLinks || meta ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:flex-wrap sm:items-center", children: [
6967
- legalLinks ? /* @__PURE__ */ jsx(LegalRow, { links: legalLinks }) : null,
6968
- meta
6969
- ] }) : null
6970
- ] }) });
7086
+ return (
7087
+ // The tools' column (ToolColumn): the lockup lines up with the page's title.
7088
+ /* @__PURE__ */ jsx("footer", { className: cn("border-t border-border bg-background px-4 text-[0.875rem] text-muted-foreground md:px-8", className), children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex w-full max-w-[72rem] flex-col gap-x-8 gap-y-3 py-5 lg:flex-row lg:items-center lg:justify-between", children: [
7089
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-3", children: [
7090
+ /* @__PURE__ */ jsx(
7091
+ "a",
7092
+ {
7093
+ href: OCHK_IO,
7094
+ className: "relative rounded-lg text-foreground before:absolute before:inset-x-0 before:top-1/2 before:h-11 before:-translate-y-1/2",
7095
+ children: /* @__PURE__ */ jsx(Lockup, { size: 22 })
7096
+ }
7097
+ ),
7098
+ family ? /* @__PURE__ */ jsx("nav", { "aria-label": "Protocols", children: /* @__PURE__ */ jsx("ul", { className: "flex flex-wrap gap-x-4", children: PROTOCOLS.map((p) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: p.pageHref, className: FOOT_LINK, children: p.label }) }, p.slug)) }) }) : null
7099
+ ] }),
7100
+ legalLinks || meta ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:flex-wrap sm:items-center", children: [
7101
+ legalLinks ? /* @__PURE__ */ jsx(LegalRow, { links: legalLinks }) : null,
7102
+ meta
7103
+ ] }) : null
7104
+ ] }) })
7105
+ );
6971
7106
  }
6972
7107
  const cols = [
6973
7108
  ...columns,
@@ -7002,17 +7137,17 @@ function SiteFooter({
7002
7137
  className: cn("flex min-w-0 flex-col gap-1", spans && "col-span-2 md:col-span-1"),
7003
7138
  children: [
7004
7139
  /* @__PURE__ */ jsx("p", { className: "mb-2 text-[0.875rem] font-medium", children: col.heading }),
7005
- /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1", spans && "grid grid-cols-2 gap-x-6 md:flex md:flex-col"), children: col.links.map((l) => /* @__PURE__ */ jsx(
7140
+ /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1", spans && "grid grid-cols-2 gap-x-6 md:flex md:flex-col"), children: col.links.map((l, j) => /* @__PURE__ */ jsx(
7006
7141
  NavLink,
7007
7142
  {
7008
7143
  item: l,
7009
7144
  className: "-mx-3 py-2.5 text-[0.9375rem] md:py-1.5"
7010
7145
  },
7011
- l.href
7146
+ `${j}:${l.label}`
7012
7147
  )) })
7013
7148
  ]
7014
7149
  },
7015
- col.heading
7150
+ `${i}:${col.heading}`
7016
7151
  );
7017
7152
  })
7018
7153
  ]
@@ -7048,12 +7183,13 @@ function OchkIoFooter({ columns = OCHK_IO_FOOTER, className }) {
7048
7183
  );
7049
7184
  }
7050
7185
  function SignInFrame({
7051
- title = "Sign in",
7186
+ title = SIGN_IN_LABEL,
7052
7187
  lead,
7053
7188
  children,
7054
7189
  error,
7055
7190
  fineprint,
7056
7191
  brand,
7192
+ product,
7057
7193
  home,
7058
7194
  protocol: protocol2,
7059
7195
  back,
@@ -7071,7 +7207,7 @@ function SignInFrame({
7071
7207
  /* @__PURE__ */ jsxs("section", { className: "flex flex-col px-4 pb-8 pt-5 sm:px-8 lg:px-14 lg:pt-8", children: [
7072
7208
  /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between gap-4", children: [
7073
7209
  /* @__PURE__ */ jsxs(Link6, { href: homeHref, className: "w-fit rounded-lg", children: [
7074
- brand ?? /* @__PURE__ */ jsx(Lockup, { size: 28 }),
7210
+ brand ?? /* @__PURE__ */ jsx(ProductLockup, { size: 28, product: product ?? (protocol2 ? protocolSite(protocol2).label : void 0) }),
7075
7211
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: " home" })
7076
7212
  ] }),
7077
7213
  back === void 0 ? /* @__PURE__ */ jsx(
@@ -7282,7 +7418,7 @@ function SessionAccountView({
7282
7418
  items = [],
7283
7419
  signInHref,
7284
7420
  signInPath,
7285
- signInLabel = "Sign in",
7421
+ signInLabel = SIGN_IN_LABEL,
7286
7422
  accountHref = OCHK_APP_ACCOUNT,
7287
7423
  onSignOut,
7288
7424
  nameFrom = "lg"
@@ -7313,6 +7449,13 @@ function SessionAccountView({
7313
7449
  /* @__PURE__ */ jsx("span", { className: state === "checking" ? "contents invisible" : "contents", "aria-hidden": state === "checking" || void 0, children: /* @__PURE__ */ jsx(Button, { asChild: true, size: "sm", variant: "secondary", tabIndex: state === "checking" ? -1 : void 0, children: /* @__PURE__ */ jsx("a", { href: signInHref ?? inPlace ?? "https://ochk.io/signin", children: signInLabel }) }) })
7314
7450
  );
7315
7451
  }
7452
+ function ToolColumn({
7453
+ measure = "wide",
7454
+ className,
7455
+ children
7456
+ }) {
7457
+ return /* @__PURE__ */ jsx("div", { className: cn("px-4 pb-16 pt-8 md:px-8 md:pt-10", className), children: /* @__PURE__ */ jsx("div", { className: "mx-auto w-full max-w-[72rem]", children: /* @__PURE__ */ jsx(InColumnContext.Provider, { value: true, children: measure === "narrow" ? /* @__PURE__ */ jsx("div", { className: "max-w-[48rem]", children }) : children }) }) });
7458
+ }
7316
7459
  function ToolShell({
7317
7460
  protocol: protocol2,
7318
7461
  tools,
@@ -7321,6 +7464,7 @@ function ToolShell({
7321
7464
  rail = false,
7322
7465
  railFooter,
7323
7466
  variant = "tool",
7467
+ measure = "wide",
7324
7468
  banner,
7325
7469
  footer,
7326
7470
  children
@@ -7378,14 +7522,7 @@ function ToolShell({
7378
7522
  /* @__PURE__ */ jsx(SideNav, { groups: [{ label: "Tools", items: tools.map(({ href, label, icon, active }) => ({ href, label, icon, active })) }] }),
7379
7523
  railFooter ? /* @__PURE__ */ jsx("div", { className: "mt-auto flex flex-col gap-0.5 px-3 text-[0.875rem] text-muted-foreground [&_a:hover]:text-foreground [&_a]:py-1.5 [&_a]:transition-colors", children: railFooter }) : null
7380
7524
  ] }) : null,
7381
- /* @__PURE__ */ jsx(
7382
- "main",
7383
- {
7384
- id: "main-content",
7385
- className: cn("min-w-0 flex-1", app ? "flex min-h-0 flex-col" : "px-4 pb-16 pt-8 md:px-8 md:pt-10"),
7386
- children: /* @__PURE__ */ jsx(SiteHomeContext.Provider, { value: homeHref, children: app ? children : /* @__PURE__ */ jsx("div", { className: "mx-auto w-full max-w-[72rem]", children }) })
7387
- }
7388
- )
7525
+ /* @__PURE__ */ jsx("main", { id: "main-content", className: cn("min-w-0 flex-1", app && "flex min-h-0 flex-col"), children: /* @__PURE__ */ jsx(SiteHomeContext.Provider, { value: homeHref, children: app ? children : /* @__PURE__ */ jsx(ToolColumn, { measure, children }) }) })
7389
7526
  ] }),
7390
7527
  app || footer === false ? null : footer ?? /* @__PURE__ */ jsx(SiteFooter, { compact: true, family: true, legal: true }),
7391
7528
  tabs ? /* @__PURE__ */ jsx(TabBar, { items: tabs }) : null
@@ -7562,6 +7699,6 @@ function createMdxComponents({ mermaid } = {}) {
7562
7699
  }
7563
7700
  var mdxComponents = createMdxComponents();
7564
7701
 
7565
- export { APP_ATTRIBUTE, APP_ID, Accent, Accordion, AccordionItem, 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, 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, HalftoneCanvas, HalftoneSphere, HashChip, HudCard, Input, InstallTabs, IsoCheck, Kbd, KeyValueList, LEGAL_LINKS, Label, Lead, LegalDocument, LinkCard, LoadingBlock, LockedPreview, Lockup, MARK_FACES, Mark, MdxTable, Meter, Monogram, Notice, 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, SPHERE_GRADIENT, Sats, SatsFigure, ScrollFade, ScrollStory, SearchButton, SearchDialog, Section, SectionHeading, SectionIntro, 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, 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 };
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 };
7566
7703
  //# sourceMappingURL=index.mjs.map
7567
7704
  //# sourceMappingURL=index.mjs.map