@sdvf23rvfa43f/stealth-glass 1.3.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.
@@ -0,0 +1,237 @@
1
+ // design-tokens.ts
2
+ var colors = {
3
+ /** Backgrounds — Depth layers from deepest to brightest */
4
+ bg: {
5
+ void: "#0B0E14",
6
+ // Layer 0 — Page background (deepest)
7
+ subtle: "#0D0F13",
8
+ // Subtle variation
9
+ surface: "#0E1119",
10
+ // Layer 2 — Card/tile surface
11
+ elevated: "#12151B",
12
+ // Hover states, popovers
13
+ highlight: "#1A1E26"
14
+ // Active/selected state
15
+ },
16
+ /** Text — 3-level hierarchy */
17
+ text: {
18
+ primary: "#EDEDEF",
19
+ // Headlines, values
20
+ secondary: "#9A92B1",
21
+ // Descriptions
22
+ muted: "#535C6B"
23
+ // Labels, timestamps
24
+ },
25
+ /** Borders — Opacity-based for glass effect */
26
+ border: {
27
+ default: "#252C41",
28
+ subtle: "rgba(255, 255, 255, 0.05)",
29
+ hover: "rgba(255, 255, 255, 0.10)",
30
+ active: "rgba(255, 255, 255, 0.15)",
31
+ /** The inner "cut edge" shadow for depth */
32
+ inset: "rgba(255, 255, 255, 0.02)",
33
+ insetHover: "rgba(255, 255, 255, 0.05)"
34
+ },
35
+ /** Brand — Primary accent colors */
36
+ brand: {
37
+ blue: "#3B82F6",
38
+ indigo: "#6366F1",
39
+ purple: "#8B5CF6"
40
+ },
41
+ /** Status — Semantic meaning */
42
+ status: {
43
+ success: "#10B981",
44
+ // Emerald
45
+ warning: "#F59E0B",
46
+ // Amber
47
+ danger: "#EF4444",
48
+ // Red
49
+ info: "#3B82F6",
50
+ // Blue
51
+ away: "#F97316",
52
+ // Orange
53
+ busy: "#EF4444"
54
+ // Red
55
+ },
56
+ /** Glows — For box-shadow and filter effects */
57
+ glow: {
58
+ blue: "rgba(59, 130, 246, 0.3)",
59
+ indigo: "rgba(99, 102, 241, 0.3)",
60
+ success: "rgba(16, 185, 129, 0.3)",
61
+ warning: "rgba(245, 158, 11, 0.3)",
62
+ danger: "rgba(239, 68, 68, 0.3)"
63
+ }
64
+ };
65
+ var typography = {
66
+ /** Font families */
67
+ font: {
68
+ sans: "'Inter', 'Geist', system-ui, -apple-system, sans-serif",
69
+ mono: "'JetBrains Mono', 'Fira Code', ui-monospace, monospace"
70
+ },
71
+ /** HUD Label — for category/section labels */
72
+ hudLabel: {
73
+ fontSize: "10px",
74
+ fontWeight: 700,
75
+ textTransform: "uppercase",
76
+ letterSpacing: "0.2em",
77
+ color: colors.text.muted
78
+ },
79
+ /** Data Value — for numbers, IPs, dates, prices */
80
+ dataValue: {
81
+ fontFamily: "'JetBrains Mono', 'Fira Code', ui-monospace, monospace",
82
+ fontVariantNumeric: "tabular-nums",
83
+ letterSpacing: "-0.02em",
84
+ color: colors.text.primary
85
+ }
86
+ };
87
+ var radii = {
88
+ tile: "2rem",
89
+ // 32px — Bento tiles (outer)
90
+ inner: "1rem",
91
+ // 16px — Inner elements
92
+ button: "9999px",
93
+ // Pill shape
94
+ input: "0.75rem"
95
+ // 12px — Form inputs
96
+ };
97
+ var spacing = {
98
+ gap: {
99
+ mobile: "1rem",
100
+ // 16px — gap-4
101
+ desktop: "1.5rem"
102
+ // 24px — gap-6
103
+ },
104
+ containerMax: "1600px"
105
+ };
106
+ var motion = {
107
+ duration: {
108
+ fast: 150,
109
+ // Hover micro-interactions
110
+ normal: 300,
111
+ // Standard transitions
112
+ slow: 500,
113
+ // Page entrance animations
114
+ cinematic: 700
115
+ // Hero/showcase animations
116
+ },
117
+ easing: {
118
+ outExpo: "cubic-bezier(0.16, 1, 0.3, 1)",
119
+ spring: { type: "spring", stiffness: 50, damping: 15, mass: 1 }
120
+ },
121
+ /** Motion (framer-motion) page entry animation */
122
+ staggerContainer: {
123
+ hidden: { opacity: 0 },
124
+ show: {
125
+ opacity: 1,
126
+ transition: {
127
+ staggerChildren: 0.1,
128
+ delayChildren: 0.1
129
+ }
130
+ }
131
+ },
132
+ /** Motion item animation: slide up + fade + blur */
133
+ staggerItem: {
134
+ hidden: { opacity: 0, y: 20, filter: "blur(10px)" },
135
+ show: {
136
+ opacity: 1,
137
+ y: 0,
138
+ filter: "blur(0px)",
139
+ transition: {
140
+ type: "spring",
141
+ stiffness: 50,
142
+ damping: 15,
143
+ mass: 1
144
+ }
145
+ }
146
+ }
147
+ };
148
+ var shadows = {
149
+ /** Tile inner cut-edge (subtle depth) */
150
+ tileInset: "inset 0 0 0 1px rgba(255,255,255,0.02)",
151
+ tileInsetHover: "inset 0 0 0 1px rgba(255,255,255,0.05)",
152
+ /** CTA button glow */
153
+ ctaGlow: "0 4px 20px rgba(37, 99, 235, 0.3)",
154
+ ctaGlowHover: "0 6px 25px rgba(37, 99, 235, 0.4)",
155
+ /** Deploy button intense glow */
156
+ deployGlow: "0 0 20px rgba(59, 130, 246, 0.4)",
157
+ deployGlowHover: "0 0 30px rgba(59, 130, 246, 0.6)",
158
+ /** Status indicator halos */
159
+ statusOnline: "0 0 8px rgba(52, 211, 153, 0.6)",
160
+ statusOffline: "0 0 8px rgba(239, 68, 68, 0.4)",
161
+ /** Slider thumb glow */
162
+ sliderThumb: "0 0 8px rgba(59, 130, 246, 0.3)",
163
+ /** Dropdown / popover shadow */
164
+ dropdown: "0 16px 48px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)"
165
+ };
166
+ var tw = {
167
+ /** Glass Tile — the primary bento card */
168
+ tile: {
169
+ base: "bg-background border border-white/5 rounded-[2rem] shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02)] backdrop-blur-xl",
170
+ hover: "hover:border-white/10 hover:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.05)] hover:bg-sg-elevated",
171
+ full: "bg-background border border-white/5 rounded-[2rem] shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02)] backdrop-blur-xl hover:border-white/10 hover:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.05)] hover:bg-sg-elevated transition-all duration-300"
172
+ },
173
+ /** Inner surface — nested within tiles */
174
+ inner: {
175
+ base: "bg-white/[0.02] border border-white/5 rounded-xl",
176
+ hover: "hover:bg-white/[0.04] hover:border-white/10",
177
+ full: "bg-white/[0.02] border border-white/5 rounded-xl hover:bg-white/[0.04] hover:border-white/10 transition-all duration-300"
178
+ },
179
+ /** HUD Label */
180
+ label: "text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted",
181
+ /** Data Value (mono) */
182
+ dataValue: "font-mono text-white tracking-tight",
183
+ /** Primary CTA button (T1 · pill) */
184
+ ctaButton: "rounded-full bg-gradient-to-r from-blue-600 to-indigo-600 text-white border border-white/15 shadow-[0_4px_20px_rgba(37,99,235,0.3),inset_0_1px_0_rgba(255,255,255,0.1)] hover:shadow-[0_6px_30px_rgba(37,99,235,0.45),inset_0_1px_0_rgba(255,255,255,0.15)] hover:brightness-110 hover:scale-[1.03] active:scale-[0.97] tracking-wide transition-all",
185
+ /** Ghost/Secondary button (T3 · standard) */
186
+ ghostButton: "rounded-xl bg-sg-highlight/80 backdrop-blur-sm border border-white/[0.06] text-white shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02),inset_0_1px_0_rgba(255,255,255,0.03)] hover:bg-white/[0.08] hover:border-white/[0.12] transition-all",
187
+ /** Input field */
188
+ input: "h-14 bg-card border border-white/5 rounded-xl text-foreground placeholder:text-sg-text-muted/60 focus:border-blue-500/50 focus:bg-sg-elevated focus:ring-blue-500/20 transition-all",
189
+ /** Error alert */
190
+ errorAlert: "bg-red-500/20 border-2 border-red-500/50 rounded-2xl shadow-lg shadow-red-500/20",
191
+ /** Focus shadow (WCAG AA) */
192
+ focusShadow: "focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]",
193
+ /** Code block */
194
+ codeBlock: "bg-background font-mono text-sm text-foreground rounded-xl border border-white/5",
195
+ inlineCode: "px-1.5 py-0.5 rounded bg-white/[0.04] border border-white/10 text-sm font-mono text-foreground",
196
+ /** Log viewer */
197
+ logLine: "flex items-center gap-2 px-3 py-1.5 font-mono text-xs",
198
+ logLineError: "bg-red-500/[0.03] border-l-2 border-red-500",
199
+ logLineWarn: "border-l-2 border-amber-500/50",
200
+ /** Bento Grid container */
201
+ bentoGrid: "grid gap-4 md:gap-6 max-w-[1600px] mx-auto",
202
+ /** Page entrance animation */
203
+ pageEntry: "animate-in fade-in slide-in-from-bottom-8 duration-700"
204
+ };
205
+ var chartTheme = {
206
+ /** Use these colors in Recharts <Line>, <Bar>, <Area> */
207
+ series: [
208
+ colors.brand.blue,
209
+ colors.brand.indigo,
210
+ colors.brand.purple,
211
+ colors.status.success,
212
+ colors.status.warning
213
+ ],
214
+ /** Grid/axis styling */
215
+ grid: {
216
+ stroke: "rgba(255, 255, 255, 0.05)",
217
+ strokeDasharray: "3 3"
218
+ },
219
+ /** Axis text */
220
+ axisText: {
221
+ fill: colors.text.muted,
222
+ fontSize: 10,
223
+ fontFamily: typography.font.mono
224
+ },
225
+ /** Tooltip */
226
+ tooltip: {
227
+ backgroundColor: colors.bg.elevated,
228
+ borderColor: colors.border.subtle,
229
+ borderRadius: 12,
230
+ textColor: colors.text.primary,
231
+ labelColor: colors.text.secondary
232
+ }
233
+ };
234
+
235
+ export { chartTheme, colors, motion, radii, shadows, spacing, tw, typography };
236
+ //# sourceMappingURL=chunk-5IRVGRFN.js.map
237
+ //# sourceMappingURL=chunk-5IRVGRFN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../design-tokens.ts"],"names":[],"mappings":"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","file":"chunk-5IRVGRFN.js","sourcesContent":["/* ═══════════════════════════════════════════════════════════════\n STEALTH GLASS DESIGN SYSTEM — TypeScript Design Tokens\n ═══════════════════════════════════════════════════════════════\n \n HOW TO USE:\n Import tokens for programmatic access in React components,\n inline styles, charts (Recharts), canvas, SVG, etc.\n \n import { colors, spacing, radii } from '@/theme/design-tokens';\n ═══════════════════════════════════════════════════════════════ */\n\n// ─── Colors ─────────────────────────────────────────────────\n\nexport const colors = {\n /** Backgrounds — Depth layers from deepest to brightest */\n bg: {\n void: '#0B0E14', // Layer 0 — Page background (deepest)\n subtle: '#0D0F13', // Subtle variation\n surface: '#0E1119', // Layer 2 — Card/tile surface\n elevated: '#12151B', // Hover states, popovers\n highlight: '#1A1E26', // Active/selected state\n },\n\n /** Text — 3-level hierarchy */\n text: {\n primary: '#EDEDEF', // Headlines, values\n secondary: '#9A92B1', // Descriptions\n muted: '#535C6B', // Labels, timestamps\n },\n\n /** Borders — Opacity-based for glass effect */\n border: {\n default: '#252C41',\n subtle: 'rgba(255, 255, 255, 0.05)',\n hover: 'rgba(255, 255, 255, 0.10)',\n active: 'rgba(255, 255, 255, 0.15)',\n /** The inner \"cut edge\" shadow for depth */\n inset: 'rgba(255, 255, 255, 0.02)',\n insetHover:'rgba(255, 255, 255, 0.05)',\n },\n\n /** Brand — Primary accent colors */\n brand: {\n blue: '#3B82F6',\n indigo: '#6366F1',\n purple: '#8B5CF6',\n },\n\n /** Status — Semantic meaning */\n status: {\n success: '#10B981', // Emerald\n warning: '#F59E0B', // Amber\n danger: '#EF4444', // Red\n info: '#3B82F6', // Blue\n away: '#F97316', // Orange\n busy: '#EF4444', // Red\n },\n\n /** Glows — For box-shadow and filter effects */\n glow: {\n blue: 'rgba(59, 130, 246, 0.3)',\n indigo: 'rgba(99, 102, 241, 0.3)',\n success: 'rgba(16, 185, 129, 0.3)',\n warning: 'rgba(245, 158, 11, 0.3)',\n danger: 'rgba(239, 68, 68, 0.3)',\n },\n} as const;\n\n\n// ─── Typography ─────────────────────────────────────────────\n\nexport const typography = {\n /** Font families */\n font: {\n sans: \"'Inter', 'Geist', system-ui, -apple-system, sans-serif\",\n mono: \"'JetBrains Mono', 'Fira Code', ui-monospace, monospace\",\n },\n\n /** HUD Label — for category/section labels */\n hudLabel: {\n fontSize: '10px',\n fontWeight: 700,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.2em',\n color: colors.text.muted,\n },\n\n /** Data Value — for numbers, IPs, dates, prices */\n dataValue: {\n fontFamily: \"'JetBrains Mono', 'Fira Code', ui-monospace, monospace\",\n fontVariantNumeric: 'tabular-nums',\n letterSpacing: '-0.02em',\n color: colors.text.primary,\n },\n} as const;\n\n\n// ─── Geometry ───────────────────────────────────────────────\n\nexport const radii = {\n tile: '2rem', // 32px — Bento tiles (outer)\n inner: '1rem', // 16px — Inner elements\n button: '9999px', // Pill shape\n input: '0.75rem', // 12px — Form inputs\n} as const;\n\nexport const spacing = {\n gap: {\n mobile: '1rem', // 16px — gap-4\n desktop: '1.5rem', // 24px — gap-6\n },\n containerMax: '1600px',\n} as const;\n\n\n// ─── Motion ─────────────────────────────────────────────────\n\nexport const motion = {\n duration: {\n fast: 150, // Hover micro-interactions\n normal: 300, // Standard transitions\n slow: 500, // Page entrance animations\n cinematic: 700, // Hero/showcase animations\n },\n\n easing: {\n outExpo: 'cubic-bezier(0.16, 1, 0.3, 1)',\n spring: { type: 'spring', stiffness: 50, damping: 15, mass: 1 },\n },\n\n /** Motion (framer-motion) page entry animation */\n staggerContainer: {\n hidden: { opacity: 0 },\n show: {\n opacity: 1,\n transition: {\n staggerChildren: 0.1,\n delayChildren: 0.1,\n },\n },\n },\n\n /** Motion item animation: slide up + fade + blur */\n staggerItem: {\n hidden: { opacity: 0, y: 20, filter: 'blur(10px)' },\n show: {\n opacity: 1,\n y: 0,\n filter: 'blur(0px)',\n transition: {\n type: 'spring',\n stiffness: 50,\n damping: 15,\n mass: 1,\n },\n },\n },\n} as const;\n\n\n// ─── Shadows ────────────────────────────────────────────────\n\nexport const shadows = {\n /** Tile inner cut-edge (subtle depth) */\n tileInset: 'inset 0 0 0 1px rgba(255,255,255,0.02)',\n tileInsetHover: 'inset 0 0 0 1px rgba(255,255,255,0.05)',\n\n /** CTA button glow */\n ctaGlow: '0 4px 20px rgba(37, 99, 235, 0.3)',\n ctaGlowHover: '0 6px 25px rgba(37, 99, 235, 0.4)',\n\n /** Deploy button intense glow */\n deployGlow: '0 0 20px rgba(59, 130, 246, 0.4)',\n deployGlowHover: '0 0 30px rgba(59, 130, 246, 0.6)',\n\n /** Status indicator halos */\n statusOnline: '0 0 8px rgba(52, 211, 153, 0.6)',\n statusOffline: '0 0 8px rgba(239, 68, 68, 0.4)',\n\n /** Slider thumb glow */\n sliderThumb: '0 0 8px rgba(59, 130, 246, 0.3)',\n\n /** Dropdown / popover shadow */\n dropdown: '0 16px 48px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)',\n} as const;\n\n\n// ─── Composite Tailwind Class Strings ───────────────────────\n// Use these as className={tokens.tile.base} for consistency\n\nexport const tw = {\n /** Glass Tile — the primary bento card */\n tile: {\n base: 'bg-background border border-white/5 rounded-[2rem] shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02)] backdrop-blur-xl',\n hover: 'hover:border-white/10 hover:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.05)] hover:bg-sg-elevated',\n full: 'bg-background border border-white/5 rounded-[2rem] shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02)] backdrop-blur-xl hover:border-white/10 hover:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.05)] hover:bg-sg-elevated transition-all duration-300',\n },\n\n /** Inner surface — nested within tiles */\n inner: {\n base: 'bg-white/[0.02] border border-white/5 rounded-xl',\n hover: 'hover:bg-white/[0.04] hover:border-white/10',\n full: 'bg-white/[0.02] border border-white/5 rounded-xl hover:bg-white/[0.04] hover:border-white/10 transition-all duration-300',\n },\n\n /** HUD Label */\n label: 'text-[10px] font-bold uppercase tracking-[0.2em] text-sg-text-muted',\n\n /** Data Value (mono) */\n dataValue: 'font-mono text-white tracking-tight',\n\n /** Primary CTA button (T1 · pill) */\n ctaButton: 'rounded-full bg-gradient-to-r from-blue-600 to-indigo-600 text-white border border-white/15 shadow-[0_4px_20px_rgba(37,99,235,0.3),inset_0_1px_0_rgba(255,255,255,0.1)] hover:shadow-[0_6px_30px_rgba(37,99,235,0.45),inset_0_1px_0_rgba(255,255,255,0.15)] hover:brightness-110 hover:scale-[1.03] active:scale-[0.97] tracking-wide transition-all',\n\n /** Ghost/Secondary button (T3 · standard) */\n ghostButton: 'rounded-xl bg-sg-highlight/80 backdrop-blur-sm border border-white/[0.06] text-white shadow-[inset_0_0_0_1px_rgba(255,255,255,0.02),inset_0_1px_0_rgba(255,255,255,0.03)] hover:bg-white/[0.08] hover:border-white/[0.12] transition-all',\n\n /** Input field */\n input: 'h-14 bg-card border border-white/5 rounded-xl text-foreground placeholder:text-sg-text-muted/60 focus:border-blue-500/50 focus:bg-sg-elevated focus:ring-blue-500/20 transition-all',\n\n /** Error alert */\n errorAlert: 'bg-red-500/20 border-2 border-red-500/50 rounded-2xl shadow-lg shadow-red-500/20',\n\n /** Focus shadow (WCAG AA) */\n focusShadow: 'focus-visible:shadow-[0_0_0_4px_rgba(59,130,246,0.15)]',\n\n /** Code block */\n codeBlock: 'bg-background font-mono text-sm text-foreground rounded-xl border border-white/5',\n inlineCode: 'px-1.5 py-0.5 rounded bg-white/[0.04] border border-white/10 text-sm font-mono text-foreground',\n\n /** Log viewer */\n logLine: 'flex items-center gap-2 px-3 py-1.5 font-mono text-xs',\n logLineError: 'bg-red-500/[0.03] border-l-2 border-red-500',\n logLineWarn: 'border-l-2 border-amber-500/50',\n\n /** Bento Grid container */\n bentoGrid: 'grid gap-4 md:gap-6 max-w-[1600px] mx-auto',\n\n /** Page entrance animation */\n pageEntry: 'animate-in fade-in slide-in-from-bottom-8 duration-700',\n} as const;\n\n\n// ─── Chart Theme (Recharts compatible) ──────────────────────\n\nexport const chartTheme = {\n /** Use these colors in Recharts <Line>, <Bar>, <Area> */\n series: [\n colors.brand.blue,\n colors.brand.indigo,\n colors.brand.purple,\n colors.status.success,\n colors.status.warning,\n ],\n\n /** Grid/axis styling */\n grid: {\n stroke: 'rgba(255, 255, 255, 0.05)',\n strokeDasharray: '3 3',\n },\n\n /** Axis text */\n axisText: {\n fill: colors.text.muted,\n fontSize: 10,\n fontFamily: typography.font.mono,\n },\n\n /** Tooltip */\n tooltip: {\n backgroundColor: colors.bg.elevated,\n borderColor: colors.border.subtle,\n borderRadius: 12,\n textColor: colors.text.primary,\n labelColor: colors.text.secondary,\n },\n} as const;"]}