@orangecheck/design 0.26.0 → 0.28.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.
@@ -17,7 +17,7 @@ import { ToasterProps } from 'sonner';
17
17
  import * as TabsPrimitive from '@radix-ui/react-tabs';
18
18
 
19
19
  declare const buttonVariants: (props?: ({
20
- variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "onBrand" | "onBrandOutline" | null | undefined;
20
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | "onBrand" | "onBrandOutline" | null | undefined;
21
21
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
22
22
  } & class_variance_authority_types.ClassProp) | undefined) => string;
23
23
  declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
@@ -17,7 +17,7 @@ import { ToasterProps } from 'sonner';
17
17
  import * as TabsPrimitive from '@radix-ui/react-tabs';
18
18
 
19
19
  declare const buttonVariants: (props?: ({
20
- variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "onBrand" | "onBrandOutline" | null | undefined;
20
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | "onBrand" | "onBrandOutline" | null | undefined;
21
21
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
22
22
  } & class_variance_authority_types.ClassProp) | undefined) => string;
23
23
  declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
@@ -258,3 +258,32 @@
258
258
  :root[data-oc-motion='off'] .oc-ambient {
259
259
  animation-play-state: paused !important;
260
260
  }
261
+
262
+ /* ── OcAuroraGL (aurora depth R2) ─────────────────────────────────────
263
+ The lazy WebGL2 silk field renders inside the same container, so the radial
264
+ mask, the mode-op × intensity opacity, and ember's --au-* re-hue all govern
265
+ it for free. Once the first GL frame lands (`--gl-live`), the CSS blobs
266
+ pause AND hide — dimming alone does not stop blur rasterization; the page
267
+ pays for exactly one aurora at any moment. Any demotion removes the class
268
+ and the blobs resume, invisibly. */
269
+ .oc-aurora__gl {
270
+ position: absolute;
271
+ inset: 0;
272
+ width: 100%;
273
+ height: 100%;
274
+ opacity: 0;
275
+ transition: opacity 0.5s ease;
276
+ }
277
+ .oc-aurora--gl-live .oc-aurora__gl {
278
+ opacity: 1;
279
+ }
280
+ .oc-aurora--gl-live .oc-aurora__blob {
281
+ visibility: hidden;
282
+ animation-play-state: paused;
283
+ }
284
+ /* Canvas raster is NOT stripped by forced colors the way gradients are. */
285
+ @media (forced-colors: active) {
286
+ .oc-aurora__gl {
287
+ display: none;
288
+ }
289
+ }
@@ -0,0 +1,161 @@
1
+ /*
2
+ * oc-sigil — the brand mark as a deep-set 3D emboss (aurora depth R3).
3
+ *
4
+ * Tier A is pure CSS: 6 stacked <use> copies of the normalized glyph under
5
+ * perspective + translateZ, each an OPAQUE color-mix toward --background
6
+ * (occlusion, not translucency — enclosed counters never moiré, and the
7
+ * contrast ceiling is compiled in: the loudest layer sits 52% toward the
8
+ * background, so worst-frame text contrast holds by construction). The drift
9
+ * is compositor-only transform at aurora energy, carries `.oc-ambient`
10
+ * (inherits the family oc_motion pause), and freezes under
11
+ * prefers-reduced-motion.
12
+ *
13
+ * PRESERVE-3D FOOTGUN: never put mask / filter / opacity<1 / overflow on
14
+ * .oc-sigil__drift or .oc-sigil__par — any of them silently flattens the
15
+ * stack. The edge fade lives on the OUTER .oc-sigil wrapper, which is safe.
16
+ *
17
+ * Two registers, one geometry, switched here in CSS (zero hydration flash):
18
+ * ember (default root) shows the filled letterpress stack; the cypherpunk
19
+ * skins show the wireframe stack instead.
20
+ */
21
+
22
+ .oc-sigil {
23
+ position: absolute;
24
+ pointer-events: none;
25
+ contain: layout paint;
26
+ perspective: 1100px;
27
+ /* edge fade on the wrapper (NOT the 3D stack) so the emboss dissolves
28
+ into the aurora field instead of ending in a hard box */
29
+ -webkit-mask-image: radial-gradient(120% 120% at 55% 42%, #000 45%, transparent 92%);
30
+ mask-image: radial-gradient(120% 120% at 55% 42%, #000 45%, transparent 92%);
31
+ }
32
+
33
+ /* corner anchors — the bleed crops against the hero's overflow-hidden */
34
+ .oc-sigil--bottom-left {
35
+ left: -8%;
36
+ bottom: -16%;
37
+ }
38
+ .oc-sigil--bottom-right {
39
+ right: -8%;
40
+ bottom: -16%;
41
+ }
42
+ .oc-sigil--top-left {
43
+ left: -8%;
44
+ top: -14%;
45
+ }
46
+ .oc-sigil--top-right {
47
+ right: -8%;
48
+ top: -14%;
49
+ }
50
+
51
+ .oc-sigil__drift {
52
+ width: 100%;
53
+ height: 100%;
54
+ transform-style: preserve-3d;
55
+ animation: oc-sigil-drift 30s ease-in-out infinite;
56
+ }
57
+
58
+ .oc-sigil__par {
59
+ width: 100%;
60
+ height: 100%;
61
+ transform-style: preserve-3d;
62
+ transform: rotateX(var(--oc-sigil-rx, 0deg)) rotateY(var(--oc-sigil-ry, 0deg));
63
+ }
64
+
65
+ @keyframes oc-sigil-drift {
66
+ 0%,
67
+ 100% {
68
+ transform: rotateX(14deg) rotateY(calc(-8deg + var(--oc-sigil-seed, 0deg)));
69
+ }
70
+ 50% {
71
+ transform: rotateX(17deg) rotateY(calc(-4deg + var(--oc-sigil-seed, 0deg)));
72
+ }
73
+ }
74
+
75
+ .oc-sigil__layer {
76
+ position: absolute;
77
+ inset: 0;
78
+ width: 100%;
79
+ height: 100%;
80
+ }
81
+ /* opaque extrusion ramp — deep layers dissolve toward the page background;
82
+ the ramp endpoints ARE the compiled-in visibility floor + contrast ceiling */
83
+ .oc-sigil__layer-0 {
84
+ transform: translateZ(0px);
85
+ color: color-mix(in oklab, var(--primary), var(--background) 88%);
86
+ }
87
+ .oc-sigil__layer-1 {
88
+ transform: translateZ(3px);
89
+ color: color-mix(in oklab, var(--primary), var(--background) 82%);
90
+ }
91
+ .oc-sigil__layer-2 {
92
+ transform: translateZ(6px);
93
+ color: color-mix(in oklab, var(--primary), var(--background) 76%);
94
+ }
95
+ .oc-sigil__layer-3 {
96
+ transform: translateZ(9px);
97
+ color: color-mix(in oklab, var(--primary), var(--background) 70%);
98
+ }
99
+ .oc-sigil__layer-4 {
100
+ transform: translateZ(12px);
101
+ color: color-mix(in oklab, var(--primary), var(--background) 62%);
102
+ }
103
+ .oc-sigil__layer-5 {
104
+ transform: translateZ(15px);
105
+ color: color-mix(in oklab, var(--primary), var(--background) 52%);
106
+ }
107
+
108
+ /* register switch — filled letterpress under ember (the bare-root default),
109
+ wireframe under the four cypherpunk skins; both stacks are in the markup so
110
+ the swap is pure CSS (no hydration flash, no JS) */
111
+ .oc-sigil__use-wire {
112
+ display: none;
113
+ }
114
+ :root[data-oc-theme='orangecheck'] .oc-sigil__use-filled,
115
+ :root[data-oc-theme='phosphor'] .oc-sigil__use-filled,
116
+ :root[data-oc-theme='lightning'] .oc-sigil__use-filled,
117
+ :root[data-oc-theme='gold'] .oc-sigil__use-filled {
118
+ display: none;
119
+ }
120
+ :root[data-oc-theme='orangecheck'] .oc-sigil__use-wire,
121
+ :root[data-oc-theme='phosphor'] .oc-sigil__use-wire,
122
+ :root[data-oc-theme='lightning'] .oc-sigil__use-wire,
123
+ :root[data-oc-theme='gold'] .oc-sigil__use-wire {
124
+ display: inline;
125
+ }
126
+ /* wireframe stack thins to fewer visible planes — terminal register */
127
+ :root[data-oc-theme='orangecheck'] .oc-sigil__layer-1,
128
+ :root[data-oc-theme='orangecheck'] .oc-sigil__layer-3,
129
+ :root[data-oc-theme='phosphor'] .oc-sigil__layer-1,
130
+ :root[data-oc-theme='phosphor'] .oc-sigil__layer-3,
131
+ :root[data-oc-theme='lightning'] .oc-sigil__layer-1,
132
+ :root[data-oc-theme='lightning'] .oc-sigil__layer-3,
133
+ :root[data-oc-theme='gold'] .oc-sigil__layer-1,
134
+ :root[data-oc-theme='gold'] .oc-sigil__layer-3 {
135
+ display: none;
136
+ }
137
+
138
+ /* mobile = hidden, full stop — decoration never spends phone-fold real estate */
139
+ @media (max-width: 640px) {
140
+ .oc-sigil {
141
+ display: none;
142
+ }
143
+ }
144
+
145
+ /* SVG fills are NOT auto-stripped by forced colors the way gradients are */
146
+ @media (forced-colors: active) {
147
+ .oc-sigil {
148
+ display: none;
149
+ }
150
+ }
151
+
152
+ /* OS-level reduced motion: freeze at the designed resting pose (the 0% frame
153
+ IS the art-directed composition) — the oc_motion pause rides .oc-ambient */
154
+ @media (prefers-reduced-motion: reduce) {
155
+ .oc-sigil__drift {
156
+ animation: none !important;
157
+ }
158
+ .oc-sigil__par {
159
+ transform: none !important;
160
+ }
161
+ }
package/dist/styles.css CHANGED
@@ -19,3 +19,4 @@
19
19
  @import './styles/theme.css';
20
20
  @import './styles/themes.css';
21
21
  @import './styles/aurora.css';
22
+ @import './styles/sigil.css';
package/dist/tokens.d.mts CHANGED
@@ -38,6 +38,7 @@ interface OcThemeProviderProps {
38
38
  defaultSkin?: string;
39
39
  aurora?: boolean | {
40
40
  intensity?: number;
41
+ gl?: boolean;
41
42
  };
42
43
  }
43
44
  declare function OcThemeProvider({ children, defaultSkin, aurora, }: OcThemeProviderProps): react_jsx_runtime.JSX.Element;
@@ -69,8 +70,36 @@ declare function OcAppearanceMenu({ className, triggerClassName, popoverClassNam
69
70
 
70
71
  interface OcAuroraProps {
71
72
  intensity?: number;
73
+ gl?: boolean;
72
74
  className?: string;
73
75
  }
74
- declare function OcAurora({ intensity, className }: OcAuroraProps): react_jsx_runtime.JSX.Element;
76
+ declare function OcAurora({ intensity, gl, className }: OcAuroraProps): react_jsx_runtime.JSX.Element;
75
77
 
76
- export { AppearanceControls, DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_MOTION_COOKIE, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, type OcAppearanceMenuProps, OcAurora, type OcAuroraProps, type OcMotion, type OcTheme, OcThemeBridge, type OcThemeId, OcThemePicker, type OcThemePickerProps, OcThemeProvider, type OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, resolveTheme, useOcMotion, useOcSkin };
78
+ interface OcSceneRGB {
79
+ r: number;
80
+ g: number;
81
+ b: number;
82
+ }
83
+ interface OcSceneTokens {
84
+ palette: [OcSceneRGB, OcSceneRGB, OcSceneRGB, OcSceneRGB];
85
+ background: OcSceneRGB;
86
+ isDark: boolean;
87
+ motionOff: boolean;
88
+ }
89
+ declare function normalizeHue(c: OcSceneRGB, isDark: boolean): OcSceneRGB;
90
+ declare function readOcSceneTokens(host: HTMLElement): OcSceneTokens | null;
91
+ declare function subscribeOcTheme(cb: () => void): () => void;
92
+
93
+ type OcGlyphSlug = 'orangecheck' | 'attest' | 'docs' | 'me' | 'vault' | 'fleet' | 'chat' | 'cosign' | 'lock' | 'vote' | 'stamp' | 'agent' | 'pledge' | 'analytics' | 'btc';
94
+ declare const OC_GLYPH_CANVAS = 1024;
95
+ declare const OC_GLYPHS: Record<OcGlyphSlug, string>;
96
+
97
+ interface OcSigilProps {
98
+ glyph: OcGlyphSlug;
99
+ corner?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
100
+ parallax?: boolean;
101
+ className?: string;
102
+ }
103
+ declare function OcSigil({ glyph, corner, parallax, className }: OcSigilProps): react_jsx_runtime.JSX.Element;
104
+
105
+ export { AppearanceControls, DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_GLYPHS, OC_GLYPH_CANVAS, OC_MOTION_COOKIE, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, type OcAppearanceMenuProps, OcAurora, type OcAuroraProps, type OcGlyphSlug, type OcMotion, type OcSceneRGB, type OcSceneTokens, OcSigil, type OcSigilProps, type OcTheme, OcThemeBridge, type OcThemeId, OcThemePicker, type OcThemePickerProps, OcThemeProvider, type OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, normalizeHue, readOcSceneTokens, resolveTheme, subscribeOcTheme, useOcMotion, useOcSkin };
package/dist/tokens.d.ts CHANGED
@@ -38,6 +38,7 @@ interface OcThemeProviderProps {
38
38
  defaultSkin?: string;
39
39
  aurora?: boolean | {
40
40
  intensity?: number;
41
+ gl?: boolean;
41
42
  };
42
43
  }
43
44
  declare function OcThemeProvider({ children, defaultSkin, aurora, }: OcThemeProviderProps): react_jsx_runtime.JSX.Element;
@@ -69,8 +70,36 @@ declare function OcAppearanceMenu({ className, triggerClassName, popoverClassNam
69
70
 
70
71
  interface OcAuroraProps {
71
72
  intensity?: number;
73
+ gl?: boolean;
72
74
  className?: string;
73
75
  }
74
- declare function OcAurora({ intensity, className }: OcAuroraProps): react_jsx_runtime.JSX.Element;
76
+ declare function OcAurora({ intensity, gl, className }: OcAuroraProps): react_jsx_runtime.JSX.Element;
75
77
 
76
- export { AppearanceControls, DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_MOTION_COOKIE, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, type OcAppearanceMenuProps, OcAurora, type OcAuroraProps, type OcMotion, type OcTheme, OcThemeBridge, type OcThemeId, OcThemePicker, type OcThemePickerProps, OcThemeProvider, type OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, resolveTheme, useOcMotion, useOcSkin };
78
+ interface OcSceneRGB {
79
+ r: number;
80
+ g: number;
81
+ b: number;
82
+ }
83
+ interface OcSceneTokens {
84
+ palette: [OcSceneRGB, OcSceneRGB, OcSceneRGB, OcSceneRGB];
85
+ background: OcSceneRGB;
86
+ isDark: boolean;
87
+ motionOff: boolean;
88
+ }
89
+ declare function normalizeHue(c: OcSceneRGB, isDark: boolean): OcSceneRGB;
90
+ declare function readOcSceneTokens(host: HTMLElement): OcSceneTokens | null;
91
+ declare function subscribeOcTheme(cb: () => void): () => void;
92
+
93
+ type OcGlyphSlug = 'orangecheck' | 'attest' | 'docs' | 'me' | 'vault' | 'fleet' | 'chat' | 'cosign' | 'lock' | 'vote' | 'stamp' | 'agent' | 'pledge' | 'analytics' | 'btc';
94
+ declare const OC_GLYPH_CANVAS = 1024;
95
+ declare const OC_GLYPHS: Record<OcGlyphSlug, string>;
96
+
97
+ interface OcSigilProps {
98
+ glyph: OcGlyphSlug;
99
+ corner?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
100
+ parallax?: boolean;
101
+ className?: string;
102
+ }
103
+ declare function OcSigil({ glyph, corner, parallax, className }: OcSigilProps): react_jsx_runtime.JSX.Element;
104
+
105
+ export { AppearanceControls, DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_GLYPHS, OC_GLYPH_CANVAS, OC_MOTION_COOKIE, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, type OcAppearanceMenuProps, OcAurora, type OcAuroraProps, type OcGlyphSlug, type OcMotion, type OcSceneRGB, type OcSceneTokens, OcSigil, type OcSigilProps, type OcTheme, OcThemeBridge, type OcThemeId, OcThemePicker, type OcThemePickerProps, OcThemeProvider, type OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, normalizeHue, readOcSceneTokens, resolveTheme, subscribeOcTheme, useOcMotion, useOcSkin };