@orangecheck/app-design 1.5.0 → 1.6.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.d.mts CHANGED
@@ -1,8 +1,8 @@
1
- export { APP_ATTRIBUTE, APP_ID, appColors, appFonts } from './tokens.mjs';
1
+ export { APP_ATTRIBUTE, APP_ID, appColors, appFonts, darkPalette, lightPalette } from './tokens.mjs';
2
2
  export { Accordion, AccordionItem, Badge, BadgeProps, Button, ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardNumeral, CardProps, CardTitle, Checkbox, ConfirmOptions, Density, DensityProvider, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogHost, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Field, FieldControlProps, FieldProps, Input, InputProps, Kbd, Label, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptOptions, QrCode, RadioGroup, RadioGroupItem, ScrollFade, ScrollFadeProps, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetTitle, SheetTrigger, Skeleton, Spinner, StatusDot, StatusPill, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cardVariants, cn, confirm, prompt, useDensity, useTimedOut } from './primitives.mjs';
3
3
  export { S as Statement, a as Status, b as StatusBadge, c as StatusBadgeProps, s as statusWord } from './status-badge-BJ9Sdsx8.mjs';
4
4
  export { AppIcon, AppIconProps, Crowd, CrowdProps, HalftoneCanvas, HalftoneCanvasProps, HalftoneSphere, HalftoneSphereProps, IsoCheck, IsoCheckProps, Lockup, LockupProps, MARK_FACES, Mark, MarkProps, SPHERE_GRADIENT, Tone, portraitTone } from './brand.mjs';
5
- export { Accent, ActivityItem, ActivityList, BrowserFrame, CheckState, Closing, Column, CommandDialog, Container, CopyButton, CopyButtonProps, CountdownRing, DataTable, Display, DisplayProps, EmptyLine, EmptyState, Endpoint, EndpointList, ErrorBoundary, ErrorPage, Eyebrow, FactBlock, FactRow, FactRows, Faq, FloatChip, Footnote, HashChip, KeyValueItem, KeyValueList, Lead, LegalBlock, LegalDocument, LegalSource, LoadingBlock, LockedPreview, Monogram, Notice, PackageCard, PackageItem, PageHeader, PhoneFrame, PlanCard, ProgressStep, ProgressSteps, ProofStrip, Prose, Reveal, Sats, SatsFigure, SatsProps, SatsTextOptions, ScrollStory, SearchButton, SearchDialog, SearchDialogProps, SearchGroup, SearchQuery, SearchResult, Section, SectionHeading, SectionIntro, SectionProps, SignMessage, SplitBar, SplitSegment, StatCard, StatCardProps, StatGrid, StatGridProps, StepGrid, StepGridProps, StepItem, StepState, TextLink, Ticker, TruthRow, TruthStatus, TruthTable, UsdApprox, VerifyCheck, VerifyReport, monogramGround, monogramLetter, satsText, sectionVariants, useCopy, useInView } from './components.mjs';
5
+ export { Accent, ActivityItem, ActivityList, BrowserFrame, ChartFrame, ChartTone, CheckState, Closing, Column, CommandDialog, Container, CopyButton, CopyButtonProps, CountdownRing, DataTable, Display, DisplayProps, EmptyLine, EmptyState, Endpoint, EndpointList, ErrorBoundary, ErrorPage, Eyebrow, FactBlock, FactRow, FactRows, Faq, FloatChip, Footnote, HashChip, HudCard, KeyValueItem, KeyValueList, Lead, LegalBlock, LegalDocument, LegalSource, LegendItem, LoadingBlock, LockedPreview, Monogram, Notice, PackageCard, PackageItem, PageHeader, Panel, PhoneFrame, PlanCard, ProgressStep, ProgressSteps, ProofStrip, Prose, Reveal, Sats, SatsFigure, SatsProps, SatsTextOptions, ScrollStory, SearchButton, SearchDialog, SearchDialogProps, SearchGroup, SearchQuery, SearchResult, Section, SectionHeading, SectionIntro, SectionProps, SignMessage, SourceNote, SourceNoteProps, Sparkline, SplitBar, SplitSegment, StatCard, StatCardProps, StatGrid, StatGridProps, StepGrid, StepGridProps, StepItem, StepState, TextLink, Ticker, TruthRow, TruthStatus, TruthTable, UsdApprox, ValueTone, VerifyCheck, VerifyReport, chartColor, monogramGround, monogramLetter, satsText, sectionVariants, useCopy, useInView } from './components.mjs';
6
6
  export { D as DocHeader, a as DocLayout, P as PageHero, b as PageHeroProps, T as TocItem, u as useActiveHeading } from './hero-Dn37il-9.mjs';
7
7
  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';
8
8
  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-Bg1gi2HO.mjs';
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { APP_ATTRIBUTE, APP_ID, appColors, appFonts } from './tokens.js';
1
+ export { APP_ATTRIBUTE, APP_ID, appColors, appFonts, darkPalette, lightPalette } from './tokens.js';
2
2
  export { Accordion, AccordionItem, Badge, BadgeProps, Button, ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardNumeral, CardProps, CardTitle, Checkbox, ConfirmOptions, Density, DensityProvider, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogHost, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Field, FieldControlProps, FieldProps, Input, InputProps, Kbd, Label, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptOptions, QrCode, RadioGroup, RadioGroupItem, ScrollFade, ScrollFadeProps, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetTitle, SheetTrigger, Skeleton, Spinner, StatusDot, StatusPill, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cardVariants, cn, confirm, prompt, useDensity, useTimedOut } from './primitives.js';
3
3
  export { S as Statement, a as Status, b as StatusBadge, c as StatusBadgeProps, s as statusWord } from './status-badge-Bt8x3RhO.js';
4
4
  export { AppIcon, AppIconProps, Crowd, CrowdProps, HalftoneCanvas, HalftoneCanvasProps, HalftoneSphere, HalftoneSphereProps, IsoCheck, IsoCheckProps, Lockup, LockupProps, MARK_FACES, Mark, MarkProps, SPHERE_GRADIENT, Tone, portraitTone } from './brand.js';
5
- export { Accent, ActivityItem, ActivityList, BrowserFrame, CheckState, Closing, Column, CommandDialog, Container, CopyButton, CopyButtonProps, CountdownRing, DataTable, Display, DisplayProps, EmptyLine, EmptyState, Endpoint, EndpointList, ErrorBoundary, ErrorPage, Eyebrow, FactBlock, FactRow, FactRows, Faq, FloatChip, Footnote, HashChip, KeyValueItem, KeyValueList, Lead, LegalBlock, LegalDocument, LegalSource, LoadingBlock, LockedPreview, Monogram, Notice, PackageCard, PackageItem, PageHeader, PhoneFrame, PlanCard, ProgressStep, ProgressSteps, ProofStrip, Prose, Reveal, Sats, SatsFigure, SatsProps, SatsTextOptions, ScrollStory, SearchButton, SearchDialog, SearchDialogProps, SearchGroup, SearchQuery, SearchResult, Section, SectionHeading, SectionIntro, SectionProps, SignMessage, SplitBar, SplitSegment, StatCard, StatCardProps, StatGrid, StatGridProps, StepGrid, StepGridProps, StepItem, StepState, TextLink, Ticker, TruthRow, TruthStatus, TruthTable, UsdApprox, VerifyCheck, VerifyReport, monogramGround, monogramLetter, satsText, sectionVariants, useCopy, useInView } from './components.js';
5
+ export { Accent, ActivityItem, ActivityList, BrowserFrame, ChartFrame, ChartTone, CheckState, Closing, Column, CommandDialog, Container, CopyButton, CopyButtonProps, CountdownRing, DataTable, Display, DisplayProps, EmptyLine, EmptyState, Endpoint, EndpointList, ErrorBoundary, ErrorPage, Eyebrow, FactBlock, FactRow, FactRows, Faq, FloatChip, Footnote, HashChip, HudCard, KeyValueItem, KeyValueList, Lead, LegalBlock, LegalDocument, LegalSource, LegendItem, LoadingBlock, LockedPreview, Monogram, Notice, PackageCard, PackageItem, PageHeader, Panel, PhoneFrame, PlanCard, ProgressStep, ProgressSteps, ProofStrip, Prose, Reveal, Sats, SatsFigure, SatsProps, SatsTextOptions, ScrollStory, SearchButton, SearchDialog, SearchDialogProps, SearchGroup, SearchQuery, SearchResult, Section, SectionHeading, SectionIntro, SectionProps, SignMessage, SourceNote, SourceNoteProps, Sparkline, SplitBar, SplitSegment, StatCard, StatCardProps, StatGrid, StatGridProps, StepGrid, StepGridProps, StepItem, StepState, TextLink, Ticker, TruthRow, TruthStatus, TruthTable, UsdApprox, ValueTone, VerifyCheck, VerifyReport, chartColor, monogramGround, monogramLetter, satsText, sectionVariants, useCopy, useInView } from './components.js';
6
6
  export { D as DocHeader, a as DocLayout, P as PageHero, b as PageHeroProps, T as TocItem, u as useActiveHeading } from './hero-Dn37il-9.js';
7
7
  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';
8
8
  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-Bw7RhO92.js';
package/dist/index.js CHANGED
@@ -58,36 +58,174 @@ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
58
58
  var QRCode__default = /*#__PURE__*/_interopDefault(QRCode);
59
59
  var Link6__default = /*#__PURE__*/_interopDefault(Link6);
60
60
 
61
+ // src/tokens/palette.ts
62
+ var lightPalette = {
63
+ accent: "#f4f4f4",
64
+ accentDisplay: "#f55819",
65
+ accentForeground: "#0a0a0a",
66
+ accentInk: "#c73f09",
67
+ background: "#fafafa",
68
+ border: "#ececec",
69
+ brand: "#f66d36",
70
+ brandForeground: "#0a0a0a",
71
+ card: "#ffffff",
72
+ cardForeground: "#0a0a0a",
73
+ chart1: "#ea580b",
74
+ chart2: "#2563eb",
75
+ chart3: "#9d2b77",
76
+ chart4: "#92400e",
77
+ chartDown: "#c2262e",
78
+ chartGrid: "#ececec",
79
+ chartNeutral: "#8a8f96",
80
+ chartUp: "#15803d",
81
+ codeAdded: "#86d39b",
82
+ codeAddedLine: "#1a2c20",
83
+ codeComment: "#909397",
84
+ codeFunction: "#9db4ec",
85
+ codeKeyword: "#e3a8c2",
86
+ codeLine: "#2a2a2a",
87
+ codeLink: "#9db4ec",
88
+ codeMark: "#232323",
89
+ codeNumber: "#fcb781",
90
+ codePackage: "#e99a8f",
91
+ codeProperty: "#9db4ec",
92
+ codePunctuation: "#d5d8dc",
93
+ codeRemoved: "#f19a9a",
94
+ codeRemovedLine: "#2f1c1c",
95
+ codeString: "#e99a8f",
96
+ codeSurface: "#161616",
97
+ codeTag: "#e3a8c2",
98
+ codeType: "#8fd0c2",
99
+ destructive: "#c2262e",
100
+ destructiveForeground: "#ffffff",
101
+ foreground: "#0a0a0a",
102
+ hairlineStrong: "#dadada",
103
+ info: "#1d4ed8",
104
+ infoForeground: "#ffffff",
105
+ ink: "#0a0a0a",
106
+ inkCard: "#1e1e1e",
107
+ inkEyebrow: "#f0835a",
108
+ inkForeground: "#ffffff",
109
+ inkLine: "#2a2a2a",
110
+ inkMuted: "#d5d8dc",
111
+ inkSubtle: "#909397",
112
+ inkTitle: "#fcb781",
113
+ input: "#8f8f8f",
114
+ muted: "#f2f2f2",
115
+ mutedForeground: "#54585e",
116
+ ocWalletReady: "#15803d",
117
+ ocWalletSurface: "#ffffff",
118
+ orange: "#f66d36",
119
+ orangeDeep: "#ea580b",
120
+ orangeLight: "#fb933c",
121
+ outline: "#f2cfc3",
122
+ peach: "#fed8ab",
123
+ popover: "#ffffff",
124
+ popoverForeground: "#0a0a0a",
125
+ primary: "#0a0a0a",
126
+ primaryForeground: "#ffffff",
127
+ ring: "#ea580b",
128
+ secondary: "#ffffff",
129
+ secondaryForeground: "#0a0a0a",
130
+ skeleton: "#e8e8e8",
131
+ sphereFrom: "#ff6f33",
132
+ sphereTo: "#ffd9c4",
133
+ subtleForeground: "#686c72",
134
+ success: "#15803d",
135
+ successForeground: "#ffffff",
136
+ tableHead: "#ededed",
137
+ warning: "#a15c07",
138
+ warningForeground: "#ffffff"
139
+ };
140
+ var darkPalette = {
141
+ accent: "#1e1e1e",
142
+ accentDisplay: "#f66d36",
143
+ accentForeground: "#fafafa",
144
+ accentInk: "#f0835a",
145
+ background: "#0a0a0a",
146
+ bandLine: "#262626",
147
+ border: "#2a2a2a",
148
+ brand: "#f66d36",
149
+ brandForeground: "#0a0a0a",
150
+ card: "#161616",
151
+ cardForeground: "#fafafa",
152
+ chart1: "#f66d36",
153
+ chart2: "#3b82f6",
154
+ chart3: "#f9a8d4",
155
+ chart4: "#fde047",
156
+ chartDown: "#f87171",
157
+ chartGrid: "#2a2a2a",
158
+ chartNeutral: "#62676e",
159
+ chartUp: "#4ade80",
160
+ codeAdded: "#86d39b",
161
+ codeAddedLine: "#132519",
162
+ codeComment: "#909397",
163
+ codeFunction: "#9db4ec",
164
+ codeKeyword: "#e3a8c2",
165
+ codeLine: "#2a2a2a",
166
+ codeLink: "#9db4ec",
167
+ codeMark: "#1b1b1b",
168
+ codeNumber: "#fcb781",
169
+ codePackage: "#e99a8f",
170
+ codeProperty: "#9db4ec",
171
+ codePunctuation: "#d5d8dc",
172
+ codeRemoved: "#f19a9a",
173
+ codeRemovedLine: "#271414",
174
+ codeString: "#e99a8f",
175
+ codeSurface: "#0e0e0e",
176
+ codeTag: "#e3a8c2",
177
+ codeType: "#8fd0c2",
178
+ destructive: "#f87171",
179
+ destructiveForeground: "#0a0a0a",
180
+ foreground: "#fafafa",
181
+ hairlineStrong: "#333333",
182
+ iconRing: "#333333",
183
+ iconTile: "#1e1e1e",
184
+ info: "#93c5fd",
185
+ infoForeground: "#0a0a0a",
186
+ ink: "#171717",
187
+ inkCard: "#1e1e1e",
188
+ inkEyebrow: "#f0835a",
189
+ inkForeground: "#ffffff",
190
+ inkLine: "#2a2a2a",
191
+ inkMuted: "#d5d8dc",
192
+ inkSubtle: "#909397",
193
+ inkTitle: "#fcb781",
194
+ input: "#6a6a6a",
195
+ muted: "#1e1e1e",
196
+ mutedForeground: "#a3a6aa",
197
+ ocWalletReady: "#4ade80",
198
+ ocWalletSurface: "#161616",
199
+ orange: "#f66d36",
200
+ orangeDeep: "#ea580b",
201
+ orangeLight: "#fb933c",
202
+ outline: "#3a2a24",
203
+ peach: "#fed8ab",
204
+ popover: "#1a1a1a",
205
+ popoverForeground: "#fafafa",
206
+ primary: "#fafafa",
207
+ primaryForeground: "#0a0a0a",
208
+ ring: "#f66d36",
209
+ secondary: "#1c1c1c",
210
+ secondaryForeground: "#fafafa",
211
+ skeleton: "#222222",
212
+ sphereFrom: "#ff6f33",
213
+ sphereTo: "#ffd9c4",
214
+ subtleForeground: "#8b8e93",
215
+ success: "#4ade80",
216
+ successForeground: "#0a0a0a",
217
+ tableHead: "#1e1e1e",
218
+ warning: "#fbbf24",
219
+ warningForeground: "#0a0a0a"
220
+ };
221
+
61
222
  // src/tokens/index.ts
62
223
  var APP_ATTRIBUTE = "data-oc-app";
63
224
  var APP_ID = "ochk";
64
225
  var appColors = {
65
- light: {
66
- background: "#FAFAFA",
67
- foreground: "#0A0A0A",
68
- card: "#FFFFFF",
69
- muted: "#F2F2F2",
70
- mutedForeground: "#54585E",
71
- subtleForeground: "#686C72",
72
- border: "#ECECEC",
73
- hairlineStrong: "#DADADA",
74
- accentDisplay: "#F55819",
75
- accentInk: "#C73F09",
76
- ring: "#EA580B"
77
- },
78
- dark: {
79
- background: "#0A0A0A",
80
- foreground: "#FAFAFA",
81
- card: "#161616",
82
- muted: "#1E1E1E",
83
- mutedForeground: "#A3A6AA",
84
- subtleForeground: "#8B8E93",
85
- border: "#2A2A2A",
86
- hairlineStrong: "#333333",
87
- accentDisplay: "#F66D36",
88
- accentInk: "#F0835A",
89
- ring: "#F66D36"
90
- },
226
+ /** Every colour token, generated from tokens.css (palette.ts): the chart series, code, ink and status colours too. */
227
+ light: lightPalette,
228
+ dark: darkPalette,
91
229
  brand: {
92
230
  orange: "#F66D36",
93
231
  orangeLight: "#FB933C",
@@ -2063,7 +2201,7 @@ var JS_TAG = /<\/?(?=[A-Za-z])/y;
2063
2201
  var JS_TAG_NAME = /[A-Za-z][\w$.:-]*/y;
2064
2202
  var JS_PUNCT = /=>|\.\.\.|[{}()[\];,.<>=+\-*/%!?:&|^~#]/y;
2065
2203
  var JSX_BEFORE = /* @__PURE__ */ new Set(["(", ",", "=", "?", ":", "{", "[", ";", ">", "&&", "||", "=>", "return"]);
2066
- function scanJs(src, emit2, jsx51) {
2204
+ function scanJs(src, emit2, jsx52) {
2067
2205
  let i = 0;
2068
2206
  let prev = "";
2069
2207
  let tagDepth = 0;
@@ -2089,7 +2227,7 @@ function scanJs(src, emit2, jsx51) {
2089
2227
  sig('"');
2090
2228
  continue;
2091
2229
  }
2092
- if (jsx51 && tagDepth === 0 && (m = at(JS_TAG, src, i)) && (prev === "" || JSX_BEFORE.has(prev))) {
2230
+ if (jsx52 && tagDepth === 0 && (m = at(JS_TAG, src, i)) && (prev === "" || JSX_BEFORE.has(prev))) {
2093
2231
  const name = at(JS_TAG_NAME, src, i + m.length);
2094
2232
  if (name) {
2095
2233
  emit2(m);
@@ -2101,7 +2239,7 @@ function scanJs(src, emit2, jsx51) {
2101
2239
  continue;
2102
2240
  }
2103
2241
  }
2104
- if (jsx51 && tagDepth > 0 && braceInTag === 0) {
2242
+ if (jsx52 && tagDepth > 0 && braceInTag === 0) {
2105
2243
  if (src.startsWith("/>", i) || src[i] === ">") {
2106
2244
  const close = src[i] === ">" ? ">" : "/>";
2107
2245
  emit2(close);
@@ -2121,7 +2259,7 @@ function scanJs(src, emit2, jsx51) {
2121
2259
  continue;
2122
2260
  }
2123
2261
  if (src[i] === "{") braceInTag = 1;
2124
- } else if (jsx51 && tagDepth > 0 && braceInTag > 0) {
2262
+ } else if (jsx52 && tagDepth > 0 && braceInTag > 0) {
2125
2263
  if (src[i] === "{") braceInTag++;
2126
2264
  else if (src[i] === "}") braceInTag--;
2127
2265
  }
@@ -2539,7 +2677,22 @@ function PageHeader({
2539
2677
  ] });
2540
2678
  }
2541
2679
  var InStatGrid = react.createContext(false);
2542
- function StatCard({ label, value, hint, size, className }) {
2680
+ function Delta({ value, suffix = "", good = "up", label }) {
2681
+ const dir = value > 0 ? "up" : value < 0 ? "down" : "flat";
2682
+ const tone = dir === "flat" ? "text-muted-foreground" : dir === good ? "text-success" : "text-destructive";
2683
+ const sign = value > 0 ? "+" : value < 0 ? "\u2212" : "";
2684
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("inline-flex items-baseline gap-1 text-[0.8125rem] font-normal tracking-normal oca-tabular", tone), children: [
2685
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, children: dir === "up" ? "\u2191" : dir === "down" ? "\u2193" : "\xB7" }),
2686
+ sign,
2687
+ Math.abs(value).toLocaleString("en-US", { maximumFractionDigits: 2 }),
2688
+ suffix,
2689
+ label ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
2690
+ " ",
2691
+ label
2692
+ ] }) : null
2693
+ ] });
2694
+ }
2695
+ function StatCard({ label, value, hint, size, delta, className }) {
2543
2696
  const inGrid = react.useContext(InStatGrid);
2544
2697
  const density = useDensity();
2545
2698
  const sm = (size ?? (density === "compact" ? "sm" : "md")) === "sm";
@@ -2557,15 +2710,19 @@ function StatCard({ label, value, hint, size, className }) {
2557
2710
  ),
2558
2711
  children: [
2559
2712
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("leading-snug text-muted-foreground", sm ? "text-[0.8125rem]" : "text-[0.875rem]"), children: label }),
2560
- /* @__PURE__ */ jsxRuntime.jsx(
2713
+ /* @__PURE__ */ jsxRuntime.jsxs(
2561
2714
  "span",
2562
2715
  {
2563
2716
  className: cn(
2564
2717
  "break-words oca-tabular leading-tight tracking-[-0.02em]",
2565
2718
  sm ? "text-[1.25rem]" : "text-[1.5rem] md:text-[1.75rem]",
2566
- inGrid && "self-end"
2719
+ inGrid && "self-end",
2720
+ delta && "flex flex-wrap items-baseline gap-x-2"
2567
2721
  ),
2568
- children: value
2722
+ children: [
2723
+ value,
2724
+ delta ? /* @__PURE__ */ jsxRuntime.jsx(Delta, { ...delta }) : null
2725
+ ]
2569
2726
  }
2570
2727
  ),
2571
2728
  hint ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[0.8125rem] leading-snug text-muted-foreground", children: hint }) : inGrid ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true }) : null
@@ -2654,6 +2811,13 @@ function StatGrid({ columns, empty, isEmpty, className, children, ...props }) {
2654
2811
  }
2655
2812
  ) });
2656
2813
  }
2814
+ var TONE_TEXT = {
2815
+ good: "text-success",
2816
+ caution: "text-warning",
2817
+ bad: "text-destructive",
2818
+ brand: "text-oca-accent-ink",
2819
+ muted: "text-muted-foreground"
2820
+ };
2657
2821
  function KeyValueList({
2658
2822
  items,
2659
2823
  dense,
@@ -2672,15 +2836,19 @@ function KeyValueList({
2672
2836
  ),
2673
2837
  children: [
2674
2838
  /* @__PURE__ */ jsxRuntime.jsx("dt", { className: cn("shrink-0 text-muted-foreground", tight ? "text-[0.8125rem] @md:w-36" : "text-[0.875rem] @md:w-48"), children: it.label }),
2675
- /* @__PURE__ */ jsxRuntime.jsx(
2839
+ /* @__PURE__ */ jsxRuntime.jsxs(
2676
2840
  "dd",
2677
2841
  {
2678
2842
  className: cn(
2679
2843
  "min-w-0 break-words",
2680
2844
  tight ? "text-[0.875rem]" : "text-[0.9375rem]",
2681
- it.mono && (tight ? "font-mono text-[0.8125rem]" : "font-mono text-[0.875rem]")
2845
+ it.mono && (tight ? "font-mono text-[0.8125rem]" : "font-mono text-[0.875rem]"),
2846
+ it.tone && !it.note && TONE_TEXT[it.tone]
2682
2847
  ),
2683
- children: it.value
2848
+ children: [
2849
+ it.value,
2850
+ it.note ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("ml-2 font-sans text-[0.8125rem]", TONE_TEXT[it.tone ?? "muted"]), children: it.note }) : null
2851
+ ]
2684
2852
  }
2685
2853
  )
2686
2854
  ]
@@ -3961,6 +4129,185 @@ function LockedPreview({
3961
4129
  ] })
3962
4130
  ] });
3963
4131
  }
4132
+ function chartColor(series) {
4133
+ if (typeof series === "string") return `var(--oca-chart-${series})`;
4134
+ const n = series >= 1 && series <= 4 && Number.isInteger(series) ? series : (series % 4 + 4) % 4 + 1;
4135
+ return `var(--oca-chart-${n})`;
4136
+ }
4137
+ function ChartFrame({
4138
+ legend,
4139
+ caption,
4140
+ children,
4141
+ className
4142
+ }) {
4143
+ return /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: cn("oca-chart flex min-w-0 flex-col gap-3", className), children: [
4144
+ legend && legend.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "oca-chart-legend", "aria-label": "Legend", children: legend.map((l, i) => {
4145
+ const c = typeof l.color === "number" || ["neutral", "up", "down"].includes(String(l.color)) ? chartColor(l.color) : String(l.color);
4146
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", { children: [
4147
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, "data-swatch": l.dashed ? "dashed" : "", style: { "--swatch": c } }),
4148
+ l.label
4149
+ ] }, i);
4150
+ }) }) : null,
4151
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative min-w-0", children }),
4152
+ caption ? /* @__PURE__ */ jsxRuntime.jsx("figcaption", { className: "text-[0.8125rem] leading-snug text-muted-foreground", children: caption }) : null
4153
+ ] });
4154
+ }
4155
+ function Sparkline({
4156
+ values,
4157
+ label,
4158
+ tone = "ink",
4159
+ area = false,
4160
+ width = 96,
4161
+ height = 24,
4162
+ className
4163
+ }) {
4164
+ const gradient = react.useId().replace(/[^a-zA-Z0-9]/g, "");
4165
+ const pts = values.filter((v) => Number.isFinite(v));
4166
+ const lo = Math.min(...pts);
4167
+ const hi = Math.max(...pts);
4168
+ const span = hi - lo || 1;
4169
+ const pad3 = 1.5;
4170
+ const x = (i) => pts.length < 2 ? width / 2 : i / (pts.length - 1) * width;
4171
+ const y = (v) => pad3 + (1 - (v - lo) / span) * (height - pad3 * 2);
4172
+ const line = pts.map((v, i) => `${i === 0 ? "M" : "L"}${x(i).toFixed(2)},${y(v).toFixed(2)}`).join(" ");
4173
+ const color = tone === "ink" ? "var(--foreground)" : tone === "muted" ? "var(--muted-foreground)" : tone === "trend" ? chartColor(pts.length > 1 && pts[pts.length - 1] < pts[0] ? "down" : "up") : chartColor(tone);
4174
+ return /* @__PURE__ */ jsxRuntime.jsx(
4175
+ "svg",
4176
+ {
4177
+ role: "img",
4178
+ "aria-label": label,
4179
+ viewBox: `0 0 ${width} ${height}`,
4180
+ preserveAspectRatio: "none",
4181
+ width,
4182
+ height,
4183
+ className: cn("block overflow-visible", className),
4184
+ style: { color },
4185
+ children: pts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4186
+ area ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4187
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: gradient, x1: "0", y1: "0", x2: "0", y2: "1", children: [
4188
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0", stopColor: "currentColor", stopOpacity: 0.22 }),
4189
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "1", stopColor: "currentColor", stopOpacity: 0 })
4190
+ ] }) }),
4191
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `${line} L${x(pts.length - 1).toFixed(2)},${height} L${x(0).toFixed(2)},${height} Z`, fill: `url(#${gradient})` })
4192
+ ] }) : null,
4193
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: line, fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinejoin: "round", strokeLinecap: "round", vectorEffect: "non-scaling-stroke" })
4194
+ ] }) : null
4195
+ }
4196
+ );
4197
+ }
4198
+ function SourceNote({ source, href, detail, updated, variant = "popover", className }) {
4199
+ const name = href ? /* @__PURE__ */ jsxRuntime.jsxs("a", { href, className: "text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground", rel: "noreferrer", target: "_blank", children: [
4200
+ source,
4201
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: " (opens in a new tab)" })
4202
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: source });
4203
+ if (variant === "line") {
4204
+ return /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("text-[0.75rem] leading-snug text-muted-foreground", className), children: [
4205
+ "Source: ",
4206
+ name,
4207
+ updated ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4208
+ " \xB7 ",
4209
+ updated
4210
+ ] }) : null
4211
+ ] });
4212
+ }
4213
+ return /* @__PURE__ */ jsxRuntime.jsxs(Popover, { children: [
4214
+ /* @__PURE__ */ jsxRuntime.jsxs(
4215
+ PopoverTrigger,
4216
+ {
4217
+ className: cn(
4218
+ "inline-flex h-7 items-center gap-1 rounded-full px-2 text-[0.75rem] text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
4219
+ className
4220
+ ),
4221
+ children: [
4222
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Info, { "aria-hidden": true, className: "size-3.5" }),
4223
+ "Source"
4224
+ ]
4225
+ }
4226
+ ),
4227
+ /* @__PURE__ */ jsxRuntime.jsxs(PopoverContent, { align: "start", className: "flex w-[min(calc(100vw-2rem),20rem)] flex-col gap-2 p-4 text-[0.875rem]", children: [
4228
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[0.75rem] text-muted-foreground", children: "Where this number comes from" }),
4229
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium", children: name }),
4230
+ detail ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[0.8125rem] leading-snug text-muted-foreground [&_code]:font-mono", children: detail }) : null,
4231
+ updated ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[0.8125rem] text-muted-foreground", children: updated }) : null
4232
+ ] })
4233
+ ] });
4234
+ }
4235
+ function Panel({
4236
+ title,
4237
+ description,
4238
+ actions,
4239
+ source,
4240
+ expandable = false,
4241
+ children,
4242
+ className
4243
+ }) {
4244
+ const [open, setOpen] = react.useState(false);
4245
+ const body = (expanded) => typeof children === "function" ? children(expanded) : children;
4246
+ const head = (expanded) => /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex flex-wrap items-start justify-between gap-x-4 gap-y-2", children: [
4247
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [
4248
+ expanded ? /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: "text-[1.0625rem] font-medium leading-snug", children: title }) : /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[1rem] font-medium leading-snug", children: title }),
4249
+ description ? expanded ? /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { className: "text-[0.875rem] leading-snug text-muted-foreground", children: description }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[0.875rem] leading-snug text-muted-foreground", children: description }) : null
4250
+ ] }),
4251
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
4252
+ actions,
4253
+ expandable && !expanded ? /* @__PURE__ */ jsxRuntime.jsx(
4254
+ "button",
4255
+ {
4256
+ type: "button",
4257
+ onClick: () => setOpen(true),
4258
+ "aria-label": "Open full screen",
4259
+ className: "inline-flex size-8 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
4260
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Maximize2, { "aria-hidden": true, className: "size-4" })
4261
+ }
4262
+ ) : null
4263
+ ] })
4264
+ ] });
4265
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cn("flex min-w-0 flex-col gap-4 rounded-[1.25rem] border border-border bg-card p-5 md:p-6", className), children: [
4266
+ head(false),
4267
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: body(false) }),
4268
+ source ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "-mb-1 border-t border-border pt-3", children: source }) : null,
4269
+ expandable ? /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(
4270
+ DialogContent,
4271
+ {
4272
+ ...description ? {} : { "aria-describedby": void 0 },
4273
+ className: "flex h-[min(92dvh,56rem)] w-[min(96vw,80rem)] max-w-none flex-col gap-4 overflow-y-auto",
4274
+ children: [
4275
+ head(true),
4276
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 min-w-0 flex-1", children: open ? body(true) : null }),
4277
+ source ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-border pt-3", children: source }) : null
4278
+ ]
4279
+ }
4280
+ ) }) : null
4281
+ ] });
4282
+ }
4283
+ function HudCard({
4284
+ eyebrow,
4285
+ live = false,
4286
+ title,
4287
+ children,
4288
+ footer,
4289
+ className
4290
+ }) {
4291
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4292
+ "div",
4293
+ {
4294
+ "data-oca-hud": "",
4295
+ className: cn(
4296
+ "flex w-60 max-w-[calc(100vw-2rem)] flex-col gap-2 rounded-xl border border-border bg-background/85 p-3 text-[0.8125rem] shadow-sm backdrop-blur-md",
4297
+ className
4298
+ ),
4299
+ children: [
4300
+ eyebrow ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-[0.75rem] text-muted-foreground", children: [
4301
+ live ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "size-1.5 rounded-full bg-oca-orange-deep motion-safe:animate-pulse" }) : null,
4302
+ eyebrow
4303
+ ] }) : null,
4304
+ title ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[1.125rem] font-medium leading-tight oca-tabular", children: title }) : null,
4305
+ children,
4306
+ footer ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-border pt-2", children: footer }) : null
4307
+ ]
4308
+ }
4309
+ );
4310
+ }
3964
4311
  function SectionHeading({
3965
4312
  eyebrow,
3966
4313
  title,
@@ -5025,7 +5372,7 @@ function SignMessage({
5025
5372
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-5", className), children: [
5026
5373
  lead ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[0.9375rem] leading-relaxed", children: lead }) : null,
5027
5374
  wallets ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5028
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: wallets }),
5375
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2 [--oc-wallet-heading:none]", children: wallets }),
5029
5376
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 text-[0.8125rem] text-muted-foreground", children: [
5030
5377
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-px flex-1 bg-border" }),
5031
5378
  "or sign it in any wallet",
@@ -7281,6 +7628,7 @@ exports.CardGrid = CardGrid;
7281
7628
  exports.CardHeader = CardHeader;
7282
7629
  exports.CardNumeral = CardNumeral;
7283
7630
  exports.CardTitle = CardTitle;
7631
+ exports.ChartFrame = ChartFrame;
7284
7632
  exports.Checkbox = Checkbox;
7285
7633
  exports.Closing = Closing;
7286
7634
  exports.CodeBlock = CodeBlock;
@@ -7340,6 +7688,7 @@ exports.FormSection = FormSection;
7340
7688
  exports.HalftoneCanvas = HalftoneCanvas;
7341
7689
  exports.HalftoneSphere = HalftoneSphere;
7342
7690
  exports.HashChip = HashChip;
7691
+ exports.HudCard = HudCard;
7343
7692
  exports.Input = Input;
7344
7693
  exports.InstallTabs = InstallTabs;
7345
7694
  exports.IsoCheck = IsoCheck;
@@ -7371,6 +7720,7 @@ exports.PackageCard = PackageCard;
7371
7720
  exports.PageHeader = PageHeader;
7372
7721
  exports.PageHero = PageHero;
7373
7722
  exports.Pagination = Pagination;
7723
+ exports.Panel = Panel;
7374
7724
  exports.PhoneFrame = PhoneFrame;
7375
7725
  exports.PlanCard = PlanCard;
7376
7726
  exports.Popover = Popover;
@@ -7420,6 +7770,8 @@ exports.SiteFooter = SiteFooter;
7420
7770
  exports.SiteHeader = SiteHeader;
7421
7771
  exports.Skeleton = Skeleton;
7422
7772
  exports.SkipLink = SkipLink;
7773
+ exports.SourceNote = SourceNote;
7774
+ exports.Sparkline = Sparkline;
7423
7775
  exports.SpecCard = SpecCard;
7424
7776
  exports.Spinner = Spinner;
7425
7777
  exports.SplitBar = SplitBar;
@@ -7459,10 +7811,12 @@ exports.badgeVariants = badgeVariants;
7459
7811
  exports.blocksToDuration = blocksToDuration;
7460
7812
  exports.buttonVariants = buttonVariants;
7461
7813
  exports.cardVariants = cardVariants;
7814
+ exports.chartColor = chartColor;
7462
7815
  exports.cn = cn;
7463
7816
  exports.confirm = confirm;
7464
7817
  exports.createMdxComponents = createMdxComponents;
7465
7818
  exports.createStateBadge = createStateBadge;
7819
+ exports.darkPalette = darkPalette;
7466
7820
  exports.escapeHtml = escapeHtml;
7467
7821
  exports.explorerUrl = explorerUrl;
7468
7822
  exports.familyByGroup = familyByGroup;
@@ -7474,6 +7828,7 @@ exports.grammarOf = grammarOf;
7474
7828
  exports.highlight = highlight;
7475
7829
  exports.highlightToHtml = highlightToHtml;
7476
7830
  exports.languageName = languageName;
7831
+ exports.lightPalette = lightPalette;
7477
7832
  exports.linesToHtml = linesToHtml;
7478
7833
  exports.mdxComponents = mdxComponents;
7479
7834
  exports.monogramGround = monogramGround;