@orangecheck/app-design 1.4.0 → 1.4.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.
@@ -3,11 +3,11 @@ import { ReactNode, HTMLAttributes, ElementType, CSSProperties, Component, Error
3
3
  import * as class_variance_authority_types from 'class-variance-authority/types';
4
4
  import { VariantProps } from 'class-variance-authority';
5
5
  export { D as DocHeader, a as DocLayout, P as PageHero, b as PageHeroProps, T as TocItem, u as useActiveHeading } from './hero-Dn37il-9.mjs';
6
- export { A as ApiRow, a as ApiTable, b as AppCard, c as AppCardProps, d as AppGrid, B as Breadcrumbs, C as Callout, e as CardGrid, f as CodeBlock, g as CodeBlockProps, h as CodeTab, i as CodeTabs, j as ComparisonColumn, k as ComparisonRow, l as ComparisonTable, m as Crumb, D as Diagram, n as DocsHeading, o as DocsPager, I as InstallTabs, L as LinkCard, M as MdxTable, p as MermaidLike, q as MermaidLoader, O as OnThisPage, P as PagerLink, r as ProtocolGrid, s as ProtocolHero, t as ProtocolNav, S as SpecCard, u as SpecCardProps, v as SpecFileKind, w as Step, x as Steps, V as VerifyBox, y as languageName, z as useHeadings } from './docs-D-T-nHiu.mjs';
6
+ export { A as ApiRow, a as ApiTable, b as AppCard, c as AppCardProps, d as AppGrid, B as Breadcrumbs, C as Callout, e as CardGrid, f as CodeBlock, g as CodeBlockProps, h as CodeTab, i as CodeTabs, j as ComparisonColumn, k as ComparisonRow, l as ComparisonTable, m as Crumb, D as Diagram, n as DocsHeading, o as DocsPager, I as InstallTabs, L as LinkCard, M as MdxTable, p as MermaidLike, q as MermaidLoader, O as OnThisPage, P as PagerLink, r as ProtocolGrid, s as ProtocolHero, t as ProtocolNav, S as SpecCard, u as SpecCardProps, v as SpecFileKind, w as Step, x as Steps, V as VerifyBox, y as languageName, z as useHeadings } from './docs-CFE5mU_6.mjs';
7
7
  import { ExplorerKind, Network } from './format.mjs';
8
+ import { j as ProtocolSlug } from './index-DmfyPYe5.mjs';
8
9
  import { S as Statement } from './status-badge-BJ9Sdsx8.mjs';
9
10
  export { A as AnchorState, a as AnchorStatus, b as ArtifactView, B as BlockCountdown, c as BlockHeight, C as ChosenFile, D as DropZone, F as FilterChips, d as FilterOption, e as FormSection, M as Meter, S as SectionStatus, f as StateBadge, g as StateDef, h as StateTone, T as ToolGrid, i as ToolItem, j as createStateBadge } from './tools-DFIxIj5p.mjs';
10
- import './index-DmfyPYe5.mjs';
11
11
 
12
12
  declare function Eyebrow({ className, onInk, ...props }: HTMLAttributes<HTMLParagraphElement> & {
13
13
  onInk?: boolean;
@@ -598,12 +598,13 @@ declare class ErrorBoundary extends Component<Props, State> {
598
598
  render(): ReactNode;
599
599
  }
600
600
 
601
- declare function ErrorPage({ code, title, detail, actions, home, art, className, }: {
601
+ declare function ErrorPage({ code, title, detail, actions, home, protocol, art, className, }: {
602
602
  code?: number;
603
603
  title?: ReactNode;
604
604
  detail?: ReactNode;
605
605
  actions?: ReactNode;
606
606
  home?: string;
607
+ protocol?: ProtocolSlug;
607
608
  art?: ReactNode;
608
609
  className?: string;
609
610
  }): react.JSX.Element;
@@ -734,7 +735,7 @@ declare function VerifyReport({ verdict, title, summary, checks, facts, notCheck
734
735
  as?: 'h2' | 'h3';
735
736
  className?: string;
736
737
  }): react.JSX.Element;
737
- declare function SignMessage({ lead, address, message, wallets, busy, error, submitLabel, secondary, onSignature, className, }: {
738
+ declare function SignMessage({ lead, address, message, wallets, busy, error, submitLabel, secondary, scheme, onSignature, className, }: {
738
739
  lead?: ReactNode;
739
740
  address: string;
740
741
  message: string;
@@ -743,6 +744,7 @@ declare function SignMessage({ lead, address, message, wallets, busy, error, sub
743
744
  error?: ReactNode;
744
745
  submitLabel?: string;
745
746
  secondary?: ReactNode;
747
+ scheme?: 'bip322' | 'legacy';
746
748
  onSignature: (signature: string) => void;
747
749
  className?: string;
748
750
  }): react.JSX.Element;
@@ -3,11 +3,11 @@ import { ReactNode, HTMLAttributes, ElementType, CSSProperties, Component, Error
3
3
  import * as class_variance_authority_types from 'class-variance-authority/types';
4
4
  import { VariantProps } from 'class-variance-authority';
5
5
  export { D as DocHeader, a as DocLayout, P as PageHero, b as PageHeroProps, T as TocItem, u as useActiveHeading } from './hero-Dn37il-9.js';
6
- export { A as ApiRow, a as ApiTable, b as AppCard, c as AppCardProps, d as AppGrid, B as Breadcrumbs, C as Callout, e as CardGrid, f as CodeBlock, g as CodeBlockProps, h as CodeTab, i as CodeTabs, j as ComparisonColumn, k as ComparisonRow, l as ComparisonTable, m as Crumb, D as Diagram, n as DocsHeading, o as DocsPager, I as InstallTabs, L as LinkCard, M as MdxTable, p as MermaidLike, q as MermaidLoader, O as OnThisPage, P as PagerLink, r as ProtocolGrid, s as ProtocolHero, t as ProtocolNav, S as SpecCard, u as SpecCardProps, v as SpecFileKind, w as Step, x as Steps, V as VerifyBox, y as languageName, z as useHeadings } from './docs-BB9gK4KF.js';
6
+ export { A as ApiRow, a as ApiTable, b as AppCard, c as AppCardProps, d as AppGrid, B as Breadcrumbs, C as Callout, e as CardGrid, f as CodeBlock, g as CodeBlockProps, h as CodeTab, i as CodeTabs, j as ComparisonColumn, k as ComparisonRow, l as ComparisonTable, m as Crumb, D as Diagram, n as DocsHeading, o as DocsPager, I as InstallTabs, L as LinkCard, M as MdxTable, p as MermaidLike, q as MermaidLoader, O as OnThisPage, P as PagerLink, r as ProtocolGrid, s as ProtocolHero, t as ProtocolNav, S as SpecCard, u as SpecCardProps, v as SpecFileKind, w as Step, x as Steps, V as VerifyBox, y as languageName, z as useHeadings } from './docs-ByUx4t-D.js';
7
7
  import { ExplorerKind, Network } from './format.js';
8
+ import { j as ProtocolSlug } from './index-DmfyPYe5.js';
8
9
  import { S as Statement } from './status-badge-Bt8x3RhO.js';
9
10
  export { A as AnchorState, a as AnchorStatus, b as ArtifactView, B as BlockCountdown, c as BlockHeight, C as ChosenFile, D as DropZone, F as FilterChips, d as FilterOption, e as FormSection, M as Meter, S as SectionStatus, f as StateBadge, g as StateDef, h as StateTone, T as ToolGrid, i as ToolItem, j as createStateBadge } from './tools-BggNN5DV.js';
10
- import './index-DmfyPYe5.js';
11
11
 
12
12
  declare function Eyebrow({ className, onInk, ...props }: HTMLAttributes<HTMLParagraphElement> & {
13
13
  onInk?: boolean;
@@ -598,12 +598,13 @@ declare class ErrorBoundary extends Component<Props, State> {
598
598
  render(): ReactNode;
599
599
  }
600
600
 
601
- declare function ErrorPage({ code, title, detail, actions, home, art, className, }: {
601
+ declare function ErrorPage({ code, title, detail, actions, home, protocol, art, className, }: {
602
602
  code?: number;
603
603
  title?: ReactNode;
604
604
  detail?: ReactNode;
605
605
  actions?: ReactNode;
606
606
  home?: string;
607
+ protocol?: ProtocolSlug;
607
608
  art?: ReactNode;
608
609
  className?: string;
609
610
  }): react.JSX.Element;
@@ -734,7 +735,7 @@ declare function VerifyReport({ verdict, title, summary, checks, facts, notCheck
734
735
  as?: 'h2' | 'h3';
735
736
  className?: string;
736
737
  }): react.JSX.Element;
737
- declare function SignMessage({ lead, address, message, wallets, busy, error, submitLabel, secondary, onSignature, className, }: {
738
+ declare function SignMessage({ lead, address, message, wallets, busy, error, submitLabel, secondary, scheme, onSignature, className, }: {
738
739
  lead?: ReactNode;
739
740
  address: string;
740
741
  message: string;
@@ -743,6 +744,7 @@ declare function SignMessage({ lead, address, message, wallets, busy, error, sub
743
744
  error?: ReactNode;
744
745
  submitLabel?: string;
745
746
  secondary?: ReactNode;
747
+ scheme?: 'bip322' | 'legacy';
746
748
  onSignature: (signature: string) => void;
747
749
  className?: string;
748
750
  }): react.JSX.Element;
@@ -9,6 +9,7 @@ var TabsPrimitive = require('@radix-ui/react-tabs');
9
9
  var lucideReact = require('lucide-react');
10
10
  var reactSlot = require('@radix-ui/react-slot');
11
11
  var SeparatorPrimitive = require('@radix-ui/react-separator');
12
+ require('next-themes');
12
13
  require('sonner');
13
14
  var Link = require('next/link');
14
15
  var router = require('next/compat/router');
@@ -1737,7 +1738,8 @@ function Well({
1737
1738
  lines,
1738
1739
  maxLines,
1739
1740
  diff,
1740
- lineNumbers
1741
+ lineNumbers,
1742
+ wrap
1741
1743
  }) {
1742
1744
  const foldable = maxLines !== void 0 && lines > maxLines + 2;
1743
1745
  const [open, setOpen] = react.useState(false);
@@ -1756,7 +1758,8 @@ function Well({
1756
1758
  "data-diff": diff ? "" : void 0,
1757
1759
  "data-line-numbers": lineNumbers ? "" : void 0,
1758
1760
  className: cn(
1759
- "oca-code w-max min-w-full py-4 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]",
1761
+ "oca-code py-4 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]",
1762
+ wrap ? "whitespace-pre-wrap break-all" : "w-max min-w-full",
1760
1763
  !lined && "px-5"
1761
1764
  ),
1762
1765
  children: lined ? /* @__PURE__ */ jsxRuntime.jsx("code", { className: "block", "data-lang": lang, dangerouslySetInnerHTML: { __html: html } }) : /* @__PURE__ */ jsxRuntime.jsx("code", { className: "block", "data-lang": lang, children })
@@ -1798,6 +1801,7 @@ function CodeBlock({
1798
1801
  highlight: marks,
1799
1802
  diff,
1800
1803
  lineNumbers,
1804
+ wrap,
1801
1805
  actions,
1802
1806
  className
1803
1807
  }) {
@@ -1829,6 +1833,7 @@ function CodeBlock({
1829
1833
  maxLines,
1830
1834
  diff: prepared ? prepared.diff : isDiff,
1831
1835
  lineNumbers,
1836
+ wrap,
1832
1837
  children
1833
1838
  }
1834
1839
  )
@@ -2331,6 +2336,133 @@ function MarkOutline({ className }) {
2331
2336
  points
2332
2337
  )) });
2333
2338
  }
2339
+
2340
+ // src/family/index.ts
2341
+ var OCHK_IO = "https://ochk.io";
2342
+ var DOCS_HREF = `${OCHK_IO}/docs`;
2343
+ function protocol(slug, verb, line, kinds) {
2344
+ return {
2345
+ slug,
2346
+ label: slug,
2347
+ href: `${OCHK_IO}/${slug}`,
2348
+ group: "protocol",
2349
+ line,
2350
+ status: "live",
2351
+ verb,
2352
+ pageHref: `${OCHK_IO}/${slug}`,
2353
+ toolHref: `https://${slug}.ochk.io`,
2354
+ specHref: `https://github.com/orangecheck/oc-${slug}-protocol`,
2355
+ kinds
2356
+ };
2357
+ }
2358
+ var PROTOCOLS = [
2359
+ protocol("attest", "identity", "Show that an address holds bitcoin, and for how long.", "30078"),
2360
+ protocol("lock", "confidentiality", "Encrypt to a Bitcoin address, so only its holder can open it.", "30078"),
2361
+ protocol("vote", "legitimacy", "Polls weighed in sats, that anyone can tally.", "30080\u201330082"),
2362
+ protocol("stamp", "provenance", "Prove who signed something, and when.", "30083"),
2363
+ protocol("agent", "authority", "Give software scoped, revocable permission to act for you.", "30083\u201330086"),
2364
+ protocol("pledge", "commitment", "Make a promise with bitcoin behind it, on a public record.", "30078")
2365
+ ];
2366
+ var PROTOCOL_ORDER = PROTOCOLS.map((p) => p.slug);
2367
+ var FAMILY = [
2368
+ {
2369
+ slug: "home",
2370
+ label: "ochk.io",
2371
+ href: OCHK_IO,
2372
+ group: "orangecheck",
2373
+ line: "The open protocols, and the company behind them.",
2374
+ status: "live"
2375
+ },
2376
+ {
2377
+ slug: "me",
2378
+ label: "ochk.app",
2379
+ href: "https://ochk.app",
2380
+ group: "orangecheck",
2381
+ line: "One account, with Bitcoin behind it.",
2382
+ status: "testing"
2383
+ },
2384
+ {
2385
+ slug: "docs",
2386
+ label: "docs",
2387
+ href: DOCS_HREF,
2388
+ group: "orangecheck",
2389
+ line: "Specs, SDKs and guides for every protocol.",
2390
+ status: "live"
2391
+ },
2392
+ ...PROTOCOLS,
2393
+ {
2394
+ slug: "vault",
2395
+ label: "vault",
2396
+ href: "https://vault.ochk.io",
2397
+ group: "app",
2398
+ line: "A password manager, encrypted in your browser.",
2399
+ status: "live",
2400
+ protocols: ["lock"]
2401
+ },
2402
+ {
2403
+ slug: "chat",
2404
+ label: "chat",
2405
+ href: "https://chat.ochk.io",
2406
+ group: "app",
2407
+ line: "Messages only the holder of a Bitcoin address can read.",
2408
+ status: "testing",
2409
+ protocols: ["lock"]
2410
+ },
2411
+ {
2412
+ slug: "cosign",
2413
+ label: "cosign",
2414
+ href: "https://cosign.ochk.io",
2415
+ group: "app",
2416
+ line: "Builders find co-founders and backers.",
2417
+ status: "testing",
2418
+ // Signs in with an orangecheck account and a wallet; uses none of the six directly.
2419
+ protocols: []
2420
+ },
2421
+ {
2422
+ slug: "me-demo",
2423
+ // "demo", not the made-up app's own name, so nobody takes it for ours.
2424
+ label: "demo",
2425
+ href: "https://me-demo.ochk.io",
2426
+ group: "app",
2427
+ line: "Lumen Notes, a made-up app that signs in with orangecheck.",
2428
+ status: "live"
2429
+ },
2430
+ {
2431
+ slug: "globe",
2432
+ label: "globe",
2433
+ href: "https://globe.ochk.io",
2434
+ group: "public-good",
2435
+ line: "The Bitcoin network, live, on a globe.",
2436
+ status: "live"
2437
+ },
2438
+ {
2439
+ slug: "btc",
2440
+ label: "btc",
2441
+ href: "https://btc.ochk.io",
2442
+ group: "public-good",
2443
+ line: "A free desk for reading the Bitcoin market.",
2444
+ status: "live"
2445
+ }
2446
+ ];
2447
+ var BY_SLUG = new Map(FAMILY.map((s) => [s.slug, s]));
2448
+ function protocolSite(slug) {
2449
+ return BY_SLUG.get(slug);
2450
+ }
2451
+ [
2452
+ {
2453
+ href: `${OCHK_IO}/protocols`,
2454
+ label: "Protocols",
2455
+ children: PROTOCOLS.map((p) => ({ href: p.pageHref, label: p.label, description: p.line }))
2456
+ },
2457
+ { href: `${OCHK_IO}/apps`, label: "Apps" },
2458
+ { href: DOCS_HREF, label: "Docs" },
2459
+ { href: `${OCHK_IO}/trust`, label: "Trust" },
2460
+ { href: `${OCHK_IO}/about`, label: "About" }
2461
+ ];
2462
+ var SiteHomeContext = sharedContext("site-home", void 0);
2463
+ function useSiteHome() {
2464
+ return react.useContext(SiteHomeContext);
2465
+ }
2334
2466
  var WORDS = {
2335
2467
  404: {
2336
2468
  name: "Not found",
@@ -2348,10 +2480,13 @@ function ErrorPage({
2348
2480
  title,
2349
2481
  detail,
2350
2482
  actions,
2351
- home = "/",
2483
+ home,
2484
+ protocol: protocol2,
2352
2485
  art,
2353
2486
  className
2354
2487
  }) {
2488
+ const shellHome = useSiteHome();
2489
+ const homeHref = home ?? (protocol2 ? protocolSite(protocol2).pageHref : shellHome ?? OCHK_IO);
2355
2490
  const words = WORDS[code] ?? (code >= 500 ? WORDS[500] : WORDS[404]);
2356
2491
  const server = code >= 500;
2357
2492
  return /* @__PURE__ */ jsxRuntime.jsx(Section, { space: "none", className: cn("flex min-h-[min(40rem,72dvh)] items-center py-16 md:py-24", className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center gap-12 md:grid-cols-12", children: [
@@ -2365,7 +2500,7 @@ function ErrorPage({
2365
2500
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "oca-lead oca-enter [--enter-delay:150ms]", children: detail ?? words.detail }),
2366
2501
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]", children: actions ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2367
2502
  server ? /* @__PURE__ */ jsxRuntime.jsx(Button, { onClick: () => window.location.reload(), children: "Try again" }) : null,
2368
- /* @__PURE__ */ jsxRuntime.jsx(Button, { asChild: true, variant: server ? "secondary" : "primary", children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: home, children: "Go home" }) })
2503
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { asChild: true, variant: server ? "secondary" : "primary", children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: homeHref, children: "Go home" }) })
2369
2504
  ] }) })
2370
2505
  ] }),
2371
2506
  art !== null ? /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": true, className: "oca-enter hidden justify-center md:col-span-5 md:flex [--enter-delay:120ms]", children: art ?? /* @__PURE__ */ jsxRuntime.jsx(MarkOutline, { className: "w-full max-w-[20rem] text-oca-hairline-strong" }) }) : null
@@ -2716,129 +2851,6 @@ function LegalDocument({ doc, className }) {
2716
2851
  }
2717
2852
  );
2718
2853
  }
2719
-
2720
- // src/family/index.ts
2721
- var OCHK_IO = "https://ochk.io";
2722
- var DOCS_HREF = `${OCHK_IO}/docs`;
2723
- function protocol(slug, verb, line, kinds) {
2724
- return {
2725
- slug,
2726
- label: slug,
2727
- href: `${OCHK_IO}/${slug}`,
2728
- group: "protocol",
2729
- line,
2730
- status: "live",
2731
- verb,
2732
- pageHref: `${OCHK_IO}/${slug}`,
2733
- toolHref: `https://${slug}.ochk.io`,
2734
- specHref: `https://github.com/orangecheck/oc-${slug}-protocol`,
2735
- kinds
2736
- };
2737
- }
2738
- var PROTOCOLS = [
2739
- protocol("attest", "identity", "Show that an address holds bitcoin, and for how long.", "30078"),
2740
- protocol("lock", "confidentiality", "Encrypt to a Bitcoin address, so only its holder can open it.", "30078"),
2741
- protocol("vote", "legitimacy", "Polls weighed in sats, that anyone can tally.", "30080\u201330082"),
2742
- protocol("stamp", "provenance", "Prove who signed something, and when.", "30083"),
2743
- protocol("agent", "authority", "Give software scoped, revocable permission to act for you.", "30083\u201330086"),
2744
- protocol("pledge", "commitment", "Make a promise with bitcoin behind it, on a public record.", "30078")
2745
- ];
2746
- var PROTOCOL_ORDER = PROTOCOLS.map((p) => p.slug);
2747
- var FAMILY = [
2748
- {
2749
- slug: "home",
2750
- label: "ochk.io",
2751
- href: OCHK_IO,
2752
- group: "orangecheck",
2753
- line: "The open protocols, and the company behind them.",
2754
- status: "live"
2755
- },
2756
- {
2757
- slug: "me",
2758
- label: "ochk.app",
2759
- href: "https://ochk.app",
2760
- group: "orangecheck",
2761
- line: "One account, with Bitcoin behind it.",
2762
- status: "testing"
2763
- },
2764
- {
2765
- slug: "docs",
2766
- label: "docs",
2767
- href: DOCS_HREF,
2768
- group: "orangecheck",
2769
- line: "Specs, SDKs and guides for every protocol.",
2770
- status: "live"
2771
- },
2772
- ...PROTOCOLS,
2773
- {
2774
- slug: "vault",
2775
- label: "vault",
2776
- href: "https://vault.ochk.io",
2777
- group: "app",
2778
- line: "A password manager, encrypted in your browser.",
2779
- status: "live",
2780
- protocols: ["lock"]
2781
- },
2782
- {
2783
- slug: "chat",
2784
- label: "chat",
2785
- href: "https://chat.ochk.io",
2786
- group: "app",
2787
- line: "Messages only the holder of a Bitcoin address can read.",
2788
- status: "testing",
2789
- protocols: ["lock"]
2790
- },
2791
- {
2792
- slug: "cosign",
2793
- label: "cosign",
2794
- href: "https://cosign.ochk.io",
2795
- group: "app",
2796
- line: "Builders find co-founders and backers.",
2797
- status: "testing",
2798
- // Signs in with an orangecheck account and a wallet; uses none of the six directly.
2799
- protocols: []
2800
- },
2801
- {
2802
- slug: "me-demo",
2803
- // "demo", not the made-up app's own name, so nobody takes it for ours.
2804
- label: "demo",
2805
- href: "https://me-demo.ochk.io",
2806
- group: "app",
2807
- line: "Lumen Notes, a made-up app that signs in with orangecheck.",
2808
- status: "live"
2809
- },
2810
- {
2811
- slug: "globe",
2812
- label: "globe",
2813
- href: "https://globe.ochk.io",
2814
- group: "public-good",
2815
- line: "The Bitcoin network, live, on a globe.",
2816
- status: "live"
2817
- },
2818
- {
2819
- slug: "btc",
2820
- label: "btc",
2821
- href: "https://btc.ochk.io",
2822
- group: "public-good",
2823
- line: "A free desk for reading the Bitcoin market.",
2824
- status: "live"
2825
- }
2826
- ];
2827
- var BY_SLUG = new Map(FAMILY.map((s) => [s.slug, s]));
2828
- function protocolSite(slug) {
2829
- return BY_SLUG.get(slug);
2830
- }
2831
- [
2832
- {
2833
- href: `${OCHK_IO}/protocols`,
2834
- label: "Protocols",
2835
- children: PROTOCOLS.map((p) => ({ href: p.pageHref, label: p.label, description: p.line }))
2836
- },
2837
- { href: `${OCHK_IO}/apps`, label: "Apps" },
2838
- { href: DOCS_HREF, label: "Docs" },
2839
- { href: `${OCHK_IO}/trust`, label: "Trust" },
2840
- { href: `${OCHK_IO}/about`, label: "About" }
2841
- ];
2842
2854
  var InDocsContext = sharedContext("in-docs", false);
2843
2855
  function useInDocs() {
2844
2856
  return react.useContext(InDocsContext);
@@ -3853,6 +3865,7 @@ function SignMessage({
3853
3865
  error,
3854
3866
  submitLabel = "Confirm",
3855
3867
  secondary,
3868
+ scheme = "bip322",
3856
3869
  onSignature,
3857
3870
  className
3858
3871
  }) {
@@ -3867,7 +3880,7 @@ function SignMessage({
3867
3880
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-px flex-1 bg-border" })
3868
3881
  ] })
3869
3882
  ] }) : null,
3870
- /* @__PURE__ */ jsxRuntime.jsx(CodeBlock, { code: message, caption: "Message to sign" }),
3883
+ /* @__PURE__ */ jsxRuntime.jsx(CodeBlock, { code: message, caption: "Message to sign", wrap: true }),
3871
3884
  /* @__PURE__ */ jsxRuntime.jsxs(
3872
3885
  "form",
3873
3886
  {
@@ -3883,7 +3896,9 @@ function SignMessage({
3883
3896
  label: "Signature",
3884
3897
  error,
3885
3898
  hint: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3886
- "From your wallet\u2019s \u201Csign message\u201D (BIP-322), signed by",
3899
+ "From your wallet\u2019s \u201Csign message\u201D (",
3900
+ scheme === "legacy" ? "legacy, BIP-137" : "BIP-322",
3901
+ "), signed by",
3887
3902
  " ",
3888
3903
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "break-all font-mono", children: address }),
3889
3904
  "."
@@ -4395,7 +4410,7 @@ function FormSection({
4395
4410
  "aria-current": status === "current" ? "step" : void 0,
4396
4411
  className: cn("scroll-mt-24 rounded-[1.25rem] border border-border bg-card", className),
4397
4412
  children: [
4398
- /* @__PURE__ */ jsxRuntime.jsxs("header", { className: cn("flex items-start gap-3.5", tight ? "px-5 pt-5" : "px-6 pt-6"), children: [
4413
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: cn("flex flex-wrap items-start gap-x-3.5 gap-y-3", tight ? "px-5 pt-5" : "px-6 pt-6"), children: [
4399
4414
  n !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
4400
4415
  "span",
4401
4416
  {
@@ -4422,7 +4437,7 @@ function FormSection({
4422
4437
  ] }),
4423
4438
  hint ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[0.875rem] leading-snug text-muted-foreground", children: hint }) : null
4424
4439
  ] }),
4425
- action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: action }) : null
4440
+ action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("shrink-0 max-sm:basis-full", n !== void 0 && "max-sm:pl-[2.625rem]"), children: action }) : null
4426
4441
  ] }),
4427
4442
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col", tight ? "gap-4 p-5" : "gap-5 p-6", n !== void 0 && (tight ? "sm:pl-[3.875rem]" : "sm:pl-[4.125rem]")), children })
4428
4443
  ]
@@ -4652,27 +4667,30 @@ function FilterChips({
4652
4667
  onChange(cur.includes(v) ? cur.filter((x) => x !== v) : [...cur, v]);
4653
4668
  } else onChange(v);
4654
4669
  };
4655
- return /* @__PURE__ */ jsxRuntime.jsx(ScrollFade, { fade: "var(--background)", className: cn("w-full", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { role: "group", "aria-label": label, className: "flex w-max items-center gap-2 py-0.5", children: options.map((o) => {
4656
- const on = isOn(o.value);
4657
- return /* @__PURE__ */ jsxRuntime.jsxs(
4658
- "button",
4659
- {
4660
- type: "button",
4661
- "aria-pressed": on,
4662
- onClick: () => press(o.value),
4663
- className: cn(
4664
- "inline-flex shrink-0 items-center gap-1.5 rounded-full border px-3.5 text-[0.875rem] transition-colors",
4665
- tight ? "h-8" : "h-9",
4666
- on ? "border-foreground bg-foreground text-background" : "border-border bg-card text-muted-foreground hover:border-oca-hairline-strong hover:text-foreground"
4667
- ),
4668
- children: [
4669
- o.label,
4670
- o.count !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "oca-tabular", children: o.count.toLocaleString("en-US") }) : null
4671
- ]
4672
- },
4673
- o.value
4674
- );
4675
- }) }) });
4670
+ return (
4671
+ // Wraps rather than scrolls: every filter stays in view on a phone.
4672
+ /* @__PURE__ */ jsxRuntime.jsx("div", { role: "group", "aria-label": label, className: cn("flex flex-wrap items-center gap-2 py-0.5", className), children: options.map((o) => {
4673
+ const on = isOn(o.value);
4674
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4675
+ "button",
4676
+ {
4677
+ type: "button",
4678
+ "aria-pressed": on,
4679
+ onClick: () => press(o.value),
4680
+ className: cn(
4681
+ "inline-flex shrink-0 items-center gap-1.5 rounded-full border px-3.5 text-[0.875rem] transition-colors",
4682
+ tight ? "h-8" : "h-9",
4683
+ on ? "border-foreground bg-foreground text-background" : "border-border bg-card text-muted-foreground hover:border-oca-hairline-strong hover:text-foreground"
4684
+ ),
4685
+ children: [
4686
+ o.label,
4687
+ o.count !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "oca-tabular", children: o.count.toLocaleString("en-US") }) : null
4688
+ ]
4689
+ },
4690
+ o.value
4691
+ );
4692
+ }) })
4693
+ );
4676
4694
  }
4677
4695
  function ToolGrid({
4678
4696
  tools,