@orangecheck/design 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chrome.d.mts +1 -1
- package/dist/chrome.d.ts +1 -1
- package/dist/chrome.js +16 -0
- package/dist/chrome.js.map +1 -1
- package/dist/chrome.mjs +16 -0
- package/dist/chrome.mjs.map +1 -1
- package/dist/components.d.mts +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +830 -178
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +780 -143
- package/dist/components.mjs.map +1 -1
- package/dist/composites.d.mts +142 -1
- package/dist/composites.d.ts +142 -1
- package/dist/composites.js +641 -3
- package/dist/composites.js.map +1 -1
- package/dist/composites.mjs +627 -4
- package/dist/composites.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +538 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +522 -13
- package/dist/index.mjs.map +1 -1
- package/dist/primitives.d.mts +24 -4
- package/dist/primitives.d.ts +24 -4
- package/dist/primitives.js +123 -11
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs +121 -13
- package/dist/primitives.mjs.map +1 -1
- package/dist/styles/fonts/hanken-grotesk-latin-ext.woff2 +0 -0
- package/dist/styles/fonts/hanken-grotesk-latin.woff2 +0 -0
- package/dist/styles/fonts.css +29 -0
- package/dist/styles/theme.css +43 -5
- package/dist/styles/themes/ember.css +223 -0
- package/dist/styles/themes.css +1 -0
- package/dist/styles.css +1 -0
- package/dist/tokens.js +6 -0
- package/dist/tokens.js.map +1 -1
- package/dist/tokens.mjs +6 -0
- package/dist/tokens.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -88,6 +88,12 @@ var OC_THEMES = [
|
|
|
88
88
|
label: "gold",
|
|
89
89
|
description: "sound money \u2014 digital gold, hard 0.125rem milled edge, mono ledger \xB7 21M",
|
|
90
90
|
accent: "#e3b831"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: "ember",
|
|
94
|
+
label: "ember",
|
|
95
|
+
description: "the warmth \u2014 burnt-sienna terracotta, soft 1rem corners, pill buttons, Hanken Grotesk \xB7 approachable, human",
|
|
96
|
+
accent: "#da6736"
|
|
91
97
|
}
|
|
92
98
|
];
|
|
93
99
|
var OC_DEFAULT_ACCENT = "#f97316";
|
|
@@ -456,7 +462,14 @@ var buttonVariants = classVarianceAuthority.cva(
|
|
|
456
462
|
outline: "bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs",
|
|
457
463
|
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
458
464
|
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
459
|
-
link: "text-primary underline-offset-4 hover:underline"
|
|
465
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
466
|
+
// For CTAs placed ON a saturated brand band or a dark section
|
|
467
|
+
// (e.g. a terracotta hero / footer / a forced-dark block) where
|
|
468
|
+
// the surface is dark+light-text in either mode. A neutral white
|
|
469
|
+
// pill + a translucent-white ghost read on any such surface;
|
|
470
|
+
// hardcoded white is deliberate (cf. destructive's text-white).
|
|
471
|
+
onBrand: "bg-white text-neutral-900 shadow-sm hover:bg-white/90",
|
|
472
|
+
onBrandOutline: "border border-white/40 bg-transparent text-white hover:bg-white/10"
|
|
460
473
|
},
|
|
461
474
|
size: {
|
|
462
475
|
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
@@ -499,7 +512,8 @@ var badgeVariants = classVarianceAuthority.cva(
|
|
|
499
512
|
warning: "bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent",
|
|
500
513
|
success: "bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent",
|
|
501
514
|
info: "bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent",
|
|
502
|
-
brand: "bg-brand-soft text-
|
|
515
|
+
brand: "bg-brand-soft text-accent-foreground border-transparent",
|
|
516
|
+
neutral: "bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent",
|
|
503
517
|
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
504
518
|
}
|
|
505
519
|
},
|
|
@@ -524,7 +538,7 @@ function Input({ className, type, ...props }) {
|
|
|
524
538
|
className: cn(
|
|
525
539
|
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
526
540
|
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
527
|
-
"aria-invalid:ring-
|
|
541
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
528
542
|
className
|
|
529
543
|
),
|
|
530
544
|
...props
|
|
@@ -554,7 +568,7 @@ function Checkbox({ className, ...props }) {
|
|
|
554
568
|
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
555
569
|
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
556
570
|
"data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground",
|
|
557
|
-
"aria-invalid:ring-
|
|
571
|
+
"aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive",
|
|
558
572
|
className
|
|
559
573
|
),
|
|
560
574
|
...props,
|
|
@@ -595,7 +609,7 @@ function RadioGroupItem({
|
|
|
595
609
|
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
596
610
|
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
597
611
|
"data-[state=checked]:border-primary",
|
|
598
|
-
"aria-invalid:ring-
|
|
612
|
+
"aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive",
|
|
599
613
|
className
|
|
600
614
|
),
|
|
601
615
|
...props,
|
|
@@ -620,7 +634,7 @@ function Switch({ className, ...props }) {
|
|
|
620
634
|
"data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
|
|
621
635
|
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
622
636
|
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
623
|
-
"aria-invalid:ring-
|
|
637
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
|
|
624
638
|
className
|
|
625
639
|
),
|
|
626
640
|
...props,
|
|
@@ -778,7 +792,7 @@ function Textarea({ className, ...props }) {
|
|
|
778
792
|
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
779
793
|
// aria-invalid parity with Input — error styling when a consumer
|
|
780
794
|
// marks the field invalid.
|
|
781
|
-
"aria-invalid:ring-
|
|
795
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
782
796
|
className
|
|
783
797
|
),
|
|
784
798
|
...props
|
|
@@ -1610,18 +1624,19 @@ function Tooltip({
|
|
|
1610
1624
|
var Accordion = AccordionPrimitive__namespace.Root;
|
|
1611
1625
|
var AccordionItem = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Item, { ref, className: cn("border-b", className), ...props }));
|
|
1612
1626
|
AccordionItem.displayName = "AccordionItem";
|
|
1613
|
-
var AccordionTrigger = React2__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1627
|
+
var AccordionTrigger = React2__namespace.forwardRef(({ className, children, icon = "chevron", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1614
1628
|
AccordionPrimitive__namespace.Trigger,
|
|
1615
1629
|
{
|
|
1616
1630
|
ref,
|
|
1617
1631
|
className: cn(
|
|
1618
|
-
"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline
|
|
1632
|
+
"flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline",
|
|
1633
|
+
icon === "chevron" ? "[&[data-state=open]>svg]:rotate-180" : "[&[data-state=open]>svg]:rotate-45",
|
|
1619
1634
|
className
|
|
1620
1635
|
),
|
|
1621
1636
|
...props,
|
|
1622
1637
|
children: [
|
|
1623
1638
|
children,
|
|
1624
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
|
|
1639
|
+
icon === "chevron" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "text-primary h-5 w-5 shrink-0 transition-transform duration-200" })
|
|
1625
1640
|
]
|
|
1626
1641
|
}
|
|
1627
1642
|
) }));
|
|
@@ -1814,6 +1829,105 @@ var Toaster = ({ ...props }) => {
|
|
|
1814
1829
|
}
|
|
1815
1830
|
);
|
|
1816
1831
|
};
|
|
1832
|
+
var surfaceVariants = classVarianceAuthority.cva("rounded-xl transition-colors", {
|
|
1833
|
+
variants: {
|
|
1834
|
+
tone: {
|
|
1835
|
+
/* Crisp panel floating on the page — the default soft card. */
|
|
1836
|
+
default: "bg-card text-card-foreground",
|
|
1837
|
+
/* Warm-gray recessed panel. */
|
|
1838
|
+
muted: "bg-muted text-foreground",
|
|
1839
|
+
/* Solid brand fill — small terracotta panel; inverts child text. */
|
|
1840
|
+
brand: "bg-brand text-brand-foreground",
|
|
1841
|
+
/* High-contrast neutral panel (near-black in light, near-white in dark). */
|
|
1842
|
+
contrast: "bg-foreground text-background",
|
|
1843
|
+
/* Translucent lightened tile for cards sitting ON a brand band. */
|
|
1844
|
+
onBrand: "text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]",
|
|
1845
|
+
/* Frame only, transparent fill. */
|
|
1846
|
+
outline: "bg-transparent text-foreground"
|
|
1847
|
+
},
|
|
1848
|
+
elevation: {
|
|
1849
|
+
none: "shadow-none",
|
|
1850
|
+
sm: "shadow-sm",
|
|
1851
|
+
md: "shadow-md",
|
|
1852
|
+
lg: "shadow-lg",
|
|
1853
|
+
xl: "shadow-xl"
|
|
1854
|
+
},
|
|
1855
|
+
bordered: {
|
|
1856
|
+
true: "border",
|
|
1857
|
+
false: ""
|
|
1858
|
+
},
|
|
1859
|
+
pad: {
|
|
1860
|
+
none: "p-0",
|
|
1861
|
+
sm: "p-4",
|
|
1862
|
+
md: "p-5 sm:p-6",
|
|
1863
|
+
lg: "p-6 sm:p-8"
|
|
1864
|
+
}
|
|
1865
|
+
},
|
|
1866
|
+
defaultVariants: {
|
|
1867
|
+
tone: "default",
|
|
1868
|
+
elevation: "sm",
|
|
1869
|
+
bordered: true,
|
|
1870
|
+
pad: "md"
|
|
1871
|
+
}
|
|
1872
|
+
});
|
|
1873
|
+
function Surface({
|
|
1874
|
+
className,
|
|
1875
|
+
tone,
|
|
1876
|
+
elevation,
|
|
1877
|
+
bordered,
|
|
1878
|
+
pad,
|
|
1879
|
+
...props
|
|
1880
|
+
}) {
|
|
1881
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1882
|
+
"div",
|
|
1883
|
+
{
|
|
1884
|
+
"data-slot": "surface",
|
|
1885
|
+
className: cn(surfaceVariants({ tone, elevation, bordered, pad }), className),
|
|
1886
|
+
...props
|
|
1887
|
+
}
|
|
1888
|
+
);
|
|
1889
|
+
}
|
|
1890
|
+
var iconBadgeVariants = classVarianceAuthority.cva(
|
|
1891
|
+
"inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none",
|
|
1892
|
+
{
|
|
1893
|
+
variants: {
|
|
1894
|
+
tone: {
|
|
1895
|
+
/* The signature peach tile — soft accent fill, terracotta glyph.
|
|
1896
|
+
Auto-swaps to warm-dark + light-peach in dark mode via tokens. */
|
|
1897
|
+
peach: "bg-accent text-accent-foreground",
|
|
1898
|
+
/* Inverted near-black tile, light glyph ("never do" promises). */
|
|
1899
|
+
dark: "bg-foreground text-background",
|
|
1900
|
+
/* Solid brand tile. */
|
|
1901
|
+
brand: "bg-primary text-primary-foreground",
|
|
1902
|
+
/* White tile on a brand band, terracotta glyph (numbered steps). */
|
|
1903
|
+
onBrand: "bg-brand-foreground text-primary",
|
|
1904
|
+
/* Quiet neutral tile. */
|
|
1905
|
+
muted: "bg-muted text-foreground",
|
|
1906
|
+
/* Crisp white (card-colored) tile with a terracotta glyph and a
|
|
1907
|
+
soft lift — the elevated icon chip on muted/colored cards. */
|
|
1908
|
+
surface: "bg-card text-primary shadow-sm"
|
|
1909
|
+
},
|
|
1910
|
+
size: {
|
|
1911
|
+
sm: "size-9 text-xs [&_svg]:size-4",
|
|
1912
|
+
md: "size-11 text-sm [&_svg]:size-5",
|
|
1913
|
+
lg: "size-12 text-base [&_svg]:size-6",
|
|
1914
|
+
xl: "size-14 text-lg [&_svg]:size-7"
|
|
1915
|
+
}
|
|
1916
|
+
},
|
|
1917
|
+
defaultVariants: { tone: "peach", size: "md" }
|
|
1918
|
+
}
|
|
1919
|
+
);
|
|
1920
|
+
function IconBadge({ className, tone, size, children, ...props }) {
|
|
1921
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1922
|
+
"span",
|
|
1923
|
+
{
|
|
1924
|
+
"data-slot": "icon-badge",
|
|
1925
|
+
className: cn(iconBadgeVariants({ tone, size }), className),
|
|
1926
|
+
...props,
|
|
1927
|
+
children
|
|
1928
|
+
}
|
|
1929
|
+
);
|
|
1930
|
+
}
|
|
1817
1931
|
function Card({
|
|
1818
1932
|
id,
|
|
1819
1933
|
title,
|
|
@@ -1926,7 +2040,7 @@ function Sparkline({ data, width = 96, height = 24, area = false, className }) {
|
|
|
1926
2040
|
function StatBlock({ label, value, sub, delta, tone = "default", className }) {
|
|
1927
2041
|
const toneClass = tone === "success" ? "text-success" : tone === "warning" ? "text-warning" : tone === "destructive" ? "text-destructive" : "text-foreground";
|
|
1928
2042
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-1", className), children: [
|
|
1929
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-mono text-[10px]", children: label }),
|
|
2043
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-mono text-muted-foreground text-[10px]", children: label }),
|
|
1930
2044
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1931
2045
|
"span",
|
|
1932
2046
|
{
|
|
@@ -2519,6 +2633,385 @@ function DataRow({ children, meta, action, as, className }) {
|
|
|
2519
2633
|
}
|
|
2520
2634
|
);
|
|
2521
2635
|
}
|
|
2636
|
+
function TwoToneHeading({
|
|
2637
|
+
lead,
|
|
2638
|
+
muted,
|
|
2639
|
+
as,
|
|
2640
|
+
tone = "default",
|
|
2641
|
+
className
|
|
2642
|
+
}) {
|
|
2643
|
+
const Tag = as ?? "h2";
|
|
2644
|
+
const leadColor = tone === "onBrand" ? "text-primary-foreground" : "text-foreground";
|
|
2645
|
+
const mutedColor = tone === "onBrand" ? "text-primary-foreground/60" : "text-foreground/40";
|
|
2646
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2647
|
+
Tag,
|
|
2648
|
+
{
|
|
2649
|
+
className: cn(
|
|
2650
|
+
"font-extrabold tracking-[-0.02em] leading-[1.0] text-balance",
|
|
2651
|
+
"text-3xl sm:text-4xl md:text-5xl",
|
|
2652
|
+
leadColor,
|
|
2653
|
+
className
|
|
2654
|
+
),
|
|
2655
|
+
children: [
|
|
2656
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: lead }),
|
|
2657
|
+
muted ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: mutedColor, children: [
|
|
2658
|
+
" ",
|
|
2659
|
+
muted
|
|
2660
|
+
] }) : null
|
|
2661
|
+
]
|
|
2662
|
+
}
|
|
2663
|
+
);
|
|
2664
|
+
}
|
|
2665
|
+
function MarketingHeading({
|
|
2666
|
+
eyebrow,
|
|
2667
|
+
lead,
|
|
2668
|
+
muted,
|
|
2669
|
+
body,
|
|
2670
|
+
align = "start",
|
|
2671
|
+
tone = "default",
|
|
2672
|
+
as,
|
|
2673
|
+
className
|
|
2674
|
+
}) {
|
|
2675
|
+
const centered = align === "center";
|
|
2676
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col", centered && "items-center text-center", className), children: [
|
|
2677
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2678
|
+
"p",
|
|
2679
|
+
{
|
|
2680
|
+
className: cn(
|
|
2681
|
+
"label-mono mb-3",
|
|
2682
|
+
tone === "onBrand" ? "text-primary-foreground/80" : "text-primary"
|
|
2683
|
+
),
|
|
2684
|
+
children: eyebrow
|
|
2685
|
+
}
|
|
2686
|
+
),
|
|
2687
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2688
|
+
TwoToneHeading,
|
|
2689
|
+
{
|
|
2690
|
+
lead,
|
|
2691
|
+
muted,
|
|
2692
|
+
as,
|
|
2693
|
+
tone,
|
|
2694
|
+
className: cn("max-w-4xl", centered && "mx-auto")
|
|
2695
|
+
}
|
|
2696
|
+
),
|
|
2697
|
+
body && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2698
|
+
"p",
|
|
2699
|
+
{
|
|
2700
|
+
className: cn(
|
|
2701
|
+
"mt-4 max-w-2xl text-base sm:text-lg",
|
|
2702
|
+
tone === "onBrand" ? "text-primary-foreground/80" : "text-muted-foreground",
|
|
2703
|
+
centered && "mx-auto"
|
|
2704
|
+
),
|
|
2705
|
+
children: body
|
|
2706
|
+
}
|
|
2707
|
+
)
|
|
2708
|
+
] });
|
|
2709
|
+
}
|
|
2710
|
+
function FeatureCard({
|
|
2711
|
+
icon,
|
|
2712
|
+
iconTone = "peach",
|
|
2713
|
+
title,
|
|
2714
|
+
children,
|
|
2715
|
+
orientation = "vertical",
|
|
2716
|
+
align = "start",
|
|
2717
|
+
tone = "default",
|
|
2718
|
+
elevation = "sm",
|
|
2719
|
+
className
|
|
2720
|
+
}) {
|
|
2721
|
+
const horizontal = orientation === "horizontal";
|
|
2722
|
+
const centered = !horizontal && align === "center";
|
|
2723
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2724
|
+
Surface,
|
|
2725
|
+
{
|
|
2726
|
+
tone,
|
|
2727
|
+
elevation,
|
|
2728
|
+
pad: horizontal ? "md" : "lg",
|
|
2729
|
+
className: cn(
|
|
2730
|
+
"flex h-full",
|
|
2731
|
+
horizontal ? "flex-row gap-4" : "flex-col",
|
|
2732
|
+
centered && "items-center text-center",
|
|
2733
|
+
className
|
|
2734
|
+
),
|
|
2735
|
+
children: [
|
|
2736
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2737
|
+
IconBadge,
|
|
2738
|
+
{
|
|
2739
|
+
tone: iconTone,
|
|
2740
|
+
size: "lg",
|
|
2741
|
+
className: cn(horizontal ? "shrink-0" : "mb-4"),
|
|
2742
|
+
children: icon
|
|
2743
|
+
}
|
|
2744
|
+
),
|
|
2745
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(horizontal && "min-w-0"), children: [
|
|
2746
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold", children: title }),
|
|
2747
|
+
children && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mt-1.5 text-sm leading-relaxed", children })
|
|
2748
|
+
] })
|
|
2749
|
+
]
|
|
2750
|
+
}
|
|
2751
|
+
);
|
|
2752
|
+
}
|
|
2753
|
+
var TONE2 = {
|
|
2754
|
+
default: "bg-background text-foreground",
|
|
2755
|
+
muted: "bg-muted text-foreground",
|
|
2756
|
+
brand: "bg-brand text-brand-foreground",
|
|
2757
|
+
// `dark` activates the .dark variant locally so descendant package
|
|
2758
|
+
// components render their dark arm even on an otherwise light page.
|
|
2759
|
+
dark: "dark bg-background text-foreground"
|
|
2760
|
+
};
|
|
2761
|
+
var WIDTH = {
|
|
2762
|
+
default: "container",
|
|
2763
|
+
wide: "mx-auto w-full max-w-screen-2xl px-4 sm:px-6 lg:px-8",
|
|
2764
|
+
full: ""
|
|
2765
|
+
};
|
|
2766
|
+
function Section({
|
|
2767
|
+
tone = "default",
|
|
2768
|
+
width = "default",
|
|
2769
|
+
diagonal,
|
|
2770
|
+
id,
|
|
2771
|
+
className,
|
|
2772
|
+
innerClassName,
|
|
2773
|
+
children
|
|
2774
|
+
}) {
|
|
2775
|
+
const showDiagonal = diagonal ?? tone === "brand";
|
|
2776
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2777
|
+
"div",
|
|
2778
|
+
{
|
|
2779
|
+
id,
|
|
2780
|
+
className: cn("w-full", TONE2[tone], showDiagonal && "oc-diagonal", className),
|
|
2781
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("py-16 sm:py-20 md:py-24", WIDTH[width], innerClassName), children })
|
|
2782
|
+
}
|
|
2783
|
+
);
|
|
2784
|
+
}
|
|
2785
|
+
function BrandBand(props) {
|
|
2786
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Section, { tone: "brand", ...props });
|
|
2787
|
+
}
|
|
2788
|
+
function ComparisonTable({ rows, columns, className }) {
|
|
2789
|
+
const cols = { feature: "", theirs: "A normal login", ours: "OrangeCheck", ...columns };
|
|
2790
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-xl border", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-[32rem]", children: [
|
|
2791
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1.4fr_1fr_1fr]", children: [
|
|
2792
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "label-mono text-muted-foreground px-4 py-3.5 sm:px-6", children: cols.feature }),
|
|
2793
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-3.5 font-semibold text-foreground sm:px-6", children: cols.theirs }),
|
|
2794
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-accent/60 border-border/60 border-l px-4 py-3.5 font-semibold text-primary sm:px-6", children: cols.ours })
|
|
2795
|
+
] }),
|
|
2796
|
+
rows.map((row, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1.4fr_1fr_1fr] border-t", children: [
|
|
2797
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-3.5 font-medium text-foreground sm:px-6", children: row.label }),
|
|
2798
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-muted-foreground flex items-center gap-2 px-4 py-3.5 sm:px-6", children: [
|
|
2799
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "text-muted-foreground/70 size-4" }),
|
|
2800
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: row.theirs })
|
|
2801
|
+
] }),
|
|
2802
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-accent/40 border-border/60 flex items-center gap-2 border-l px-4 py-3.5 text-foreground sm:px-6", children: [
|
|
2803
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-4 text-primary" }),
|
|
2804
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: row.ours })
|
|
2805
|
+
] })
|
|
2806
|
+
] }, i))
|
|
2807
|
+
] }) }) });
|
|
2808
|
+
}
|
|
2809
|
+
function NumberedStep({
|
|
2810
|
+
n,
|
|
2811
|
+
title,
|
|
2812
|
+
children,
|
|
2813
|
+
tone = "default",
|
|
2814
|
+
card = false,
|
|
2815
|
+
className
|
|
2816
|
+
}) {
|
|
2817
|
+
const onBrand = tone === "onBrand";
|
|
2818
|
+
const body = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(!card && className), children: [
|
|
2819
|
+
/* @__PURE__ */ jsxRuntime.jsx(IconBadge, { tone: onBrand ? "onBrand" : "peach", size: "sm", children: n }),
|
|
2820
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-lg font-semibold", children: title }),
|
|
2821
|
+
children && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2822
|
+
"div",
|
|
2823
|
+
{
|
|
2824
|
+
className: cn(
|
|
2825
|
+
"mt-1.5 text-sm leading-relaxed",
|
|
2826
|
+
onBrand ? "text-brand-foreground/80" : "text-muted-foreground"
|
|
2827
|
+
),
|
|
2828
|
+
children
|
|
2829
|
+
}
|
|
2830
|
+
)
|
|
2831
|
+
] });
|
|
2832
|
+
if (!card) return body;
|
|
2833
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2834
|
+
Surface,
|
|
2835
|
+
{
|
|
2836
|
+
tone: onBrand ? "onBrand" : "default",
|
|
2837
|
+
elevation: onBrand ? "none" : "sm",
|
|
2838
|
+
pad: "md",
|
|
2839
|
+
className,
|
|
2840
|
+
children: body
|
|
2841
|
+
}
|
|
2842
|
+
);
|
|
2843
|
+
}
|
|
2844
|
+
var COLUMNS = {
|
|
2845
|
+
2: "md:grid-cols-2",
|
|
2846
|
+
3: "md:grid-cols-3",
|
|
2847
|
+
4: "md:grid-cols-4"
|
|
2848
|
+
};
|
|
2849
|
+
function StepList({
|
|
2850
|
+
steps,
|
|
2851
|
+
variant = "bare",
|
|
2852
|
+
tone = "default",
|
|
2853
|
+
columns = 3,
|
|
2854
|
+
className
|
|
2855
|
+
}) {
|
|
2856
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid gap-6 sm:grid-cols-2 sm:gap-8", COLUMNS[columns], className), children: steps.map((step, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2857
|
+
NumberedStep,
|
|
2858
|
+
{
|
|
2859
|
+
n: index + 1,
|
|
2860
|
+
title: step.title,
|
|
2861
|
+
tone,
|
|
2862
|
+
card: variant === "card",
|
|
2863
|
+
children: step.children
|
|
2864
|
+
},
|
|
2865
|
+
index
|
|
2866
|
+
)) });
|
|
2867
|
+
}
|
|
2868
|
+
function Faq({ items, defaultOpen, className }) {
|
|
2869
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2870
|
+
Accordion,
|
|
2871
|
+
{
|
|
2872
|
+
type: "single",
|
|
2873
|
+
collapsible: true,
|
|
2874
|
+
defaultValue: defaultOpen != null ? String(defaultOpen) : void 0,
|
|
2875
|
+
className: cn("w-full", className),
|
|
2876
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(AccordionItem, { value: String(i), children: [
|
|
2877
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2878
|
+
AccordionTrigger,
|
|
2879
|
+
{
|
|
2880
|
+
icon: "plusMinus",
|
|
2881
|
+
className: "text-foreground text-base font-semibold",
|
|
2882
|
+
children: item.q
|
|
2883
|
+
}
|
|
2884
|
+
),
|
|
2885
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: "text-muted-foreground leading-relaxed", children: item.a })
|
|
2886
|
+
] }, i))
|
|
2887
|
+
}
|
|
2888
|
+
);
|
|
2889
|
+
}
|
|
2890
|
+
function EmailCapture({
|
|
2891
|
+
action,
|
|
2892
|
+
method,
|
|
2893
|
+
onSubmit,
|
|
2894
|
+
name = "email",
|
|
2895
|
+
placeholder = "you@email.com",
|
|
2896
|
+
cta = "Join the waitlist",
|
|
2897
|
+
note,
|
|
2898
|
+
tone = "default",
|
|
2899
|
+
className
|
|
2900
|
+
}) {
|
|
2901
|
+
const onBrand = tone === "onBrand";
|
|
2902
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("form", { action, method, onSubmit, className: cn(className), children: [
|
|
2903
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center", children: [
|
|
2904
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2905
|
+
Input,
|
|
2906
|
+
{
|
|
2907
|
+
type: "email",
|
|
2908
|
+
name,
|
|
2909
|
+
required: true,
|
|
2910
|
+
placeholder,
|
|
2911
|
+
className: cn(
|
|
2912
|
+
"rounded-full text-base md:text-sm",
|
|
2913
|
+
onBrand && "[background:color-mix(in_oklch,white_18%,transparent)] placeholder:text-primary-foreground/60 border-transparent text-primary-foreground"
|
|
2914
|
+
)
|
|
2915
|
+
}
|
|
2916
|
+
),
|
|
2917
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", variant: onBrand ? "onBrand" : "default", className: "rounded-full", children: cta })
|
|
2918
|
+
] }),
|
|
2919
|
+
note && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2920
|
+
"p",
|
|
2921
|
+
{
|
|
2922
|
+
className: cn(
|
|
2923
|
+
"mt-3 text-sm",
|
|
2924
|
+
onBrand ? "text-primary-foreground/70" : "text-muted-foreground"
|
|
2925
|
+
),
|
|
2926
|
+
children: note
|
|
2927
|
+
}
|
|
2928
|
+
)
|
|
2929
|
+
] });
|
|
2930
|
+
}
|
|
2931
|
+
function CheckList({
|
|
2932
|
+
items,
|
|
2933
|
+
orientation = "horizontal",
|
|
2934
|
+
tone = "default",
|
|
2935
|
+
className
|
|
2936
|
+
}) {
|
|
2937
|
+
const glyph = tone === "onBrand" ? "text-brand-foreground" : "text-primary";
|
|
2938
|
+
const label = tone === "onBrand" ? "text-brand-foreground/90" : "text-foreground";
|
|
2939
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2940
|
+
"ul",
|
|
2941
|
+
{
|
|
2942
|
+
className: cn(
|
|
2943
|
+
orientation === "horizontal" ? "flex flex-wrap gap-x-6 gap-y-2 text-sm" : "flex flex-col gap-2 text-sm",
|
|
2944
|
+
className
|
|
2945
|
+
),
|
|
2946
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("inline-flex items-center gap-2", label), children: [
|
|
2947
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: cn("size-4 shrink-0", glyph) }),
|
|
2948
|
+
item
|
|
2949
|
+
] }, i))
|
|
2950
|
+
}
|
|
2951
|
+
);
|
|
2952
|
+
}
|
|
2953
|
+
function AccentNote({ lead, children, tone = "default", className }) {
|
|
2954
|
+
const onBrand = tone === "onBrand";
|
|
2955
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2956
|
+
"div",
|
|
2957
|
+
{
|
|
2958
|
+
className: cn(
|
|
2959
|
+
"border-l-2 pl-4 text-sm leading-relaxed",
|
|
2960
|
+
onBrand ? "border-primary-foreground/60 text-primary-foreground/80" : "border-primary text-muted-foreground",
|
|
2961
|
+
className
|
|
2962
|
+
),
|
|
2963
|
+
children: [
|
|
2964
|
+
lead && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2965
|
+
"strong",
|
|
2966
|
+
{
|
|
2967
|
+
className: cn(
|
|
2968
|
+
"mr-1.5 font-semibold",
|
|
2969
|
+
onBrand ? "text-primary-foreground" : "text-foreground"
|
|
2970
|
+
),
|
|
2971
|
+
children: lead
|
|
2972
|
+
}
|
|
2973
|
+
),
|
|
2974
|
+
children
|
|
2975
|
+
]
|
|
2976
|
+
}
|
|
2977
|
+
);
|
|
2978
|
+
}
|
|
2979
|
+
function AccentList({ items, className }) {
|
|
2980
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col", className), children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2981
|
+
"div",
|
|
2982
|
+
{
|
|
2983
|
+
className: cn("border-l-2 py-2 pl-5", item.active ? "border-primary" : "border-border"),
|
|
2984
|
+
children: [
|
|
2985
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2986
|
+
"div",
|
|
2987
|
+
{
|
|
2988
|
+
className: cn(
|
|
2989
|
+
"font-semibold",
|
|
2990
|
+
item.active ? "text-foreground" : "text-muted-foreground"
|
|
2991
|
+
),
|
|
2992
|
+
children: item.title
|
|
2993
|
+
}
|
|
2994
|
+
),
|
|
2995
|
+
item.active && item.children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground mt-1 text-sm leading-relaxed", children: item.children })
|
|
2996
|
+
]
|
|
2997
|
+
},
|
|
2998
|
+
i
|
|
2999
|
+
)) });
|
|
3000
|
+
}
|
|
3001
|
+
function VerifiedChip({ icon, iconTone = "peach", label, className }) {
|
|
3002
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3003
|
+
Surface,
|
|
3004
|
+
{
|
|
3005
|
+
elevation: "lg",
|
|
3006
|
+
pad: "none",
|
|
3007
|
+
className: cn("inline-flex items-center gap-3 rounded-full px-3 py-2", className),
|
|
3008
|
+
children: [
|
|
3009
|
+
/* @__PURE__ */ jsxRuntime.jsx(IconBadge, { tone: iconTone, size: "sm", children: icon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, {}) }),
|
|
3010
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "pr-2 text-sm font-semibold text-foreground", children: label })
|
|
3011
|
+
]
|
|
3012
|
+
}
|
|
3013
|
+
);
|
|
3014
|
+
}
|
|
2522
3015
|
var ENTRIES = [
|
|
2523
3016
|
{
|
|
2524
3017
|
slug: "home",
|
|
@@ -2555,6 +3048,13 @@ var ENTRIES = [
|
|
|
2555
3048
|
sub: "message \u2014 encrypted chat",
|
|
2556
3049
|
docsHref: "https://docs.ochk.io/chat"
|
|
2557
3050
|
},
|
|
3051
|
+
{
|
|
3052
|
+
slug: "cosign",
|
|
3053
|
+
href: "https://cosign.ochk.io",
|
|
3054
|
+
label: "oc\xB7cosign",
|
|
3055
|
+
sub: "cofound \u2014 get behind builders",
|
|
3056
|
+
docsHref: "https://docs.ochk.io/cosign"
|
|
3057
|
+
},
|
|
2558
3058
|
{
|
|
2559
3059
|
slug: "attest",
|
|
2560
3060
|
href: "https://attest.ochk.io",
|
|
@@ -2766,6 +3266,15 @@ var FAMILY_PROPERTIES = [
|
|
|
2766
3266
|
docsHref: "https://docs.ochk.io/chat",
|
|
2767
3267
|
category: "product"
|
|
2768
3268
|
},
|
|
3269
|
+
{
|
|
3270
|
+
slug: "cosign",
|
|
3271
|
+
origin: "https://cosign.ochk.io",
|
|
3272
|
+
hostname: "cosign.ochk.io",
|
|
3273
|
+
label: "oc\xB7cosign",
|
|
3274
|
+
sub: "cofound \u2014 get behind builders",
|
|
3275
|
+
docsHref: "https://docs.ochk.io/cosign",
|
|
3276
|
+
category: "product"
|
|
3277
|
+
},
|
|
2769
3278
|
{
|
|
2770
3279
|
slug: "attest",
|
|
2771
3280
|
origin: "https://attest.ochk.io",
|
|
@@ -4348,6 +4857,8 @@ function OcAppBar({
|
|
|
4348
4857
|
);
|
|
4349
4858
|
}
|
|
4350
4859
|
|
|
4860
|
+
exports.AccentList = AccentList;
|
|
4861
|
+
exports.AccentNote = AccentNote;
|
|
4351
4862
|
exports.Accordion = Accordion;
|
|
4352
4863
|
exports.AccordionContent = AccordionContent;
|
|
4353
4864
|
exports.AccordionItem = AccordionItem;
|
|
@@ -4362,10 +4873,13 @@ exports.AppearanceControls = AppearanceControls;
|
|
|
4362
4873
|
exports.Badge = Badge;
|
|
4363
4874
|
exports.Bar = Bar;
|
|
4364
4875
|
exports.BitcoinAddress = BitcoinAddress;
|
|
4876
|
+
exports.BrandBand = BrandBand;
|
|
4365
4877
|
exports.Button = Button;
|
|
4366
4878
|
exports.Callout = Callout;
|
|
4367
4879
|
exports.Card = Card;
|
|
4880
|
+
exports.CheckList = CheckList;
|
|
4368
4881
|
exports.Checkbox = Checkbox;
|
|
4882
|
+
exports.ComparisonTable = ComparisonTable;
|
|
4369
4883
|
exports.ConfirmHost = ConfirmHost;
|
|
4370
4884
|
exports.CopyButton = CopyButton;
|
|
4371
4885
|
exports.DEFAULT_OC_THEME = DEFAULT_OC_THEME;
|
|
@@ -4382,14 +4896,20 @@ exports.DialogPortal = DialogPortal;
|
|
|
4382
4896
|
exports.DialogTitle = DialogTitle;
|
|
4383
4897
|
exports.DialogTrigger = DialogTrigger;
|
|
4384
4898
|
exports.EcosystemSwitcher = EcosystemSwitcher;
|
|
4899
|
+
exports.EmailCapture = EmailCapture;
|
|
4385
4900
|
exports.EmptyState = EmptyState;
|
|
4386
4901
|
exports.ErrorBoundary = ErrorBoundary;
|
|
4387
4902
|
exports.FAMILY_PROPERTIES = FAMILY_PROPERTIES;
|
|
4903
|
+
exports.Faq = Faq;
|
|
4904
|
+
exports.FeatureCard = FeatureCard;
|
|
4388
4905
|
exports.HelpHint = HelpHint;
|
|
4906
|
+
exports.IconBadge = IconBadge;
|
|
4389
4907
|
exports.Input = Input;
|
|
4390
4908
|
exports.Label = Label;
|
|
4391
4909
|
exports.LayoutSubHeader = LayoutSubHeader;
|
|
4910
|
+
exports.MarketingHeading = MarketingHeading;
|
|
4392
4911
|
exports.Modal = Modal;
|
|
4912
|
+
exports.NumberedStep = NumberedStep;
|
|
4393
4913
|
exports.OC_DEFAULT_ACCENT = OC_DEFAULT_ACCENT;
|
|
4394
4914
|
exports.OC_SKIN_COOKIE = OC_SKIN_COOKIE;
|
|
4395
4915
|
exports.OC_THEMES = OC_THEMES;
|
|
@@ -4417,6 +4937,7 @@ exports.RadioGroup = RadioGroup;
|
|
|
4417
4937
|
exports.RadioGroupItem = RadioGroupItem;
|
|
4418
4938
|
exports.SITE_STATE_LABEL = SITE_STATE_LABEL;
|
|
4419
4939
|
exports.SatsAmount = SatsAmount;
|
|
4940
|
+
exports.Section = Section;
|
|
4420
4941
|
exports.SectionHeader = SectionHeader;
|
|
4421
4942
|
exports.Select = Select;
|
|
4422
4943
|
exports.SelectContent = SelectContent;
|
|
@@ -4446,6 +4967,8 @@ exports.StatCard = StatCard;
|
|
|
4446
4967
|
exports.StatGrid = StatGrid;
|
|
4447
4968
|
exports.StatTile = StatTile;
|
|
4448
4969
|
exports.StatusPill = StatusPill;
|
|
4970
|
+
exports.StepList = StepList;
|
|
4971
|
+
exports.Surface = Surface;
|
|
4449
4972
|
exports.Switch = Switch;
|
|
4450
4973
|
exports.Tabs = Tabs;
|
|
4451
4974
|
exports.TabsContent = TabsContent;
|
|
@@ -4456,6 +4979,8 @@ exports.ThemeToggle = ThemeToggle;
|
|
|
4456
4979
|
exports.ThemeToggleLink = ThemeToggleLink;
|
|
4457
4980
|
exports.Toaster = Toaster;
|
|
4458
4981
|
exports.Tooltip = Tooltip;
|
|
4982
|
+
exports.TwoToneHeading = TwoToneHeading;
|
|
4983
|
+
exports.VerifiedChip = VerifiedChip;
|
|
4459
4984
|
exports.Working = Working;
|
|
4460
4985
|
exports.WorkingPanel = WorkingPanel;
|
|
4461
4986
|
exports.accentFor = accentFor;
|
|
@@ -4469,6 +4994,7 @@ exports.findFamilyProperty = findFamilyProperty;
|
|
|
4469
4994
|
exports.formatSats = formatSats;
|
|
4470
4995
|
exports.formatSatsCompact = formatSatsCompact;
|
|
4471
4996
|
exports.getOcThemeInitScript = getOcThemeInitScript;
|
|
4997
|
+
exports.iconBadgeVariants = iconBadgeVariants;
|
|
4472
4998
|
exports.isKnownTheme = isKnownTheme;
|
|
4473
4999
|
exports.makeStatusPill = makeStatusPill;
|
|
4474
5000
|
exports.priceBoth = priceBoth;
|
|
@@ -4477,6 +5003,7 @@ exports.relativeTime = relativeTime;
|
|
|
4477
5003
|
exports.resolveTheme = resolveTheme;
|
|
4478
5004
|
exports.satsToUsd = satsToUsd;
|
|
4479
5005
|
exports.shortenAddress = shortenAddress;
|
|
5006
|
+
exports.surfaceVariants = surfaceVariants;
|
|
4480
5007
|
exports.usdToSats = usdToSats;
|
|
4481
5008
|
exports.useOcSkin = useOcSkin;
|
|
4482
5009
|
exports.useSpotPrice = useSpotPrice;
|