paintoliver 0.1.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.
Files changed (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/analyzer/index.d.ts +20 -0
  4. package/dist/analyzer/index.d.ts.map +1 -0
  5. package/dist/analyzer/index.js +387 -0
  6. package/dist/analyzer/index.js.map +1 -0
  7. package/dist/cli.d.ts +26 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +436 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/contrast/index.d.ts +88 -0
  12. package/dist/contrast/index.d.ts.map +1 -0
  13. package/dist/contrast/index.js +314 -0
  14. package/dist/contrast/index.js.map +1 -0
  15. package/dist/paintoliver.bundle.js +14530 -0
  16. package/dist/reporter/index.d.ts +43 -0
  17. package/dist/reporter/index.d.ts.map +1 -0
  18. package/dist/reporter/index.js +235 -0
  19. package/dist/reporter/index.js.map +1 -0
  20. package/dist/transformer/css-var-transformer.d.ts +46 -0
  21. package/dist/transformer/css-var-transformer.d.ts.map +1 -0
  22. package/dist/transformer/css-var-transformer.js +422 -0
  23. package/dist/transformer/css-var-transformer.js.map +1 -0
  24. package/dist/transformer/index.d.ts +17 -0
  25. package/dist/transformer/index.d.ts.map +1 -0
  26. package/dist/transformer/index.js +213 -0
  27. package/dist/transformer/index.js.map +1 -0
  28. package/dist/transformer/tailwind-transformer.d.ts +47 -0
  29. package/dist/transformer/tailwind-transformer.d.ts.map +1 -0
  30. package/dist/transformer/tailwind-transformer.js +402 -0
  31. package/dist/transformer/tailwind-transformer.js.map +1 -0
  32. package/dist/utils/backup.d.ts +41 -0
  33. package/dist/utils/backup.d.ts.map +1 -0
  34. package/dist/utils/backup.js +125 -0
  35. package/dist/utils/backup.js.map +1 -0
  36. package/dist/vibes/definitions/brutalist.d.ts +11 -0
  37. package/dist/vibes/definitions/brutalist.d.ts.map +1 -0
  38. package/dist/vibes/definitions/brutalist.js +203 -0
  39. package/dist/vibes/definitions/brutalist.js.map +1 -0
  40. package/dist/vibes/definitions/corporate.d.ts +12 -0
  41. package/dist/vibes/definitions/corporate.d.ts.map +1 -0
  42. package/dist/vibes/definitions/corporate.js +212 -0
  43. package/dist/vibes/definitions/corporate.js.map +1 -0
  44. package/dist/vibes/definitions/glassmorphism.d.ts +20 -0
  45. package/dist/vibes/definitions/glassmorphism.d.ts.map +1 -0
  46. package/dist/vibes/definitions/glassmorphism.js +217 -0
  47. package/dist/vibes/definitions/glassmorphism.js.map +1 -0
  48. package/dist/vibes/definitions/kinetic-terminal.d.ts +20 -0
  49. package/dist/vibes/definitions/kinetic-terminal.d.ts.map +1 -0
  50. package/dist/vibes/definitions/kinetic-terminal.js +242 -0
  51. package/dist/vibes/definitions/kinetic-terminal.js.map +1 -0
  52. package/dist/vibes/definitions/minimal.d.ts +11 -0
  53. package/dist/vibes/definitions/minimal.d.ts.map +1 -0
  54. package/dist/vibes/definitions/minimal.js +167 -0
  55. package/dist/vibes/definitions/minimal.js.map +1 -0
  56. package/dist/vibes/definitions/windows-xp.d.ts +12 -0
  57. package/dist/vibes/definitions/windows-xp.d.ts.map +1 -0
  58. package/dist/vibes/definitions/windows-xp.js +229 -0
  59. package/dist/vibes/definitions/windows-xp.js.map +1 -0
  60. package/dist/vibes/registry.d.ts +25 -0
  61. package/dist/vibes/registry.d.ts.map +1 -0
  62. package/dist/vibes/registry.js +52 -0
  63. package/dist/vibes/registry.js.map +1 -0
  64. package/dist/vibes/types.d.ts +428 -0
  65. package/dist/vibes/types.d.ts.map +1 -0
  66. package/dist/vibes/types.js +12 -0
  67. package/dist/vibes/types.js.map +1 -0
  68. package/package.json +41 -0
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Minimal Vibe
3
+ *
4
+ * Maximum whitespace, maximum restraint.
5
+ * Near-white backgrounds. Barely-there borders. Small, tight typography.
6
+ * The content is the only ornament.
7
+ * Inspired by Swiss typography and Linear, Notion, Vercel.
8
+ */
9
+ export const minimal = {
10
+ meta: {
11
+ id: "minimal",
12
+ name: "Minimal",
13
+ description: "Maximum whitespace, maximum restraint. Content is the only ornament.",
14
+ narrative: "The UI disappears. Only the content remains. Near-white backgrounds. " +
15
+ "Text in near-black. Borders are barely visible — more implied than explicit. " +
16
+ "Every pixel of spacing is intentional. There is no decoration that does not serve information. " +
17
+ "Interactions are subtle — a gentle fade, a quiet underline. Nothing shouts.",
18
+ tags: ["light", "clean", "swiss", "whitespace", "editorial", "modern"],
19
+ darkModeFirst: false,
20
+ },
21
+ colors: {
22
+ primary: "#171717", // near-black ink
23
+ primaryForeground: "#ffffff",
24
+ secondary: "#f5f5f5", // off-white
25
+ secondaryForeground: "#171717",
26
+ background: "#ffffff",
27
+ foreground: "#171717",
28
+ card: "#fafafa",
29
+ cardForeground: "#171717",
30
+ muted: "#f5f5f5",
31
+ mutedForeground: "#737373",
32
+ accent: "#f5f5f5",
33
+ accentForeground: "#171717",
34
+ destructive: "#dc2626",
35
+ destructiveForeground: "#ffffff",
36
+ success: "#16a34a",
37
+ successForeground: "#ffffff",
38
+ warning: "#d97706",
39
+ warningForeground: "#ffffff",
40
+ border: "#e5e5e5",
41
+ input: "#f5f5f5",
42
+ ring: "#a3a3a3",
43
+ popover: "#ffffff",
44
+ popoverForeground: "#171717",
45
+ },
46
+ typography: {
47
+ fontFamily: "'Inter', 'Helvetica Neue', Arial, sans-serif",
48
+ fontFamilyHeading: "'Inter', 'Helvetica Neue', Arial, sans-serif",
49
+ fontFamilyMono: "'JetBrains Mono', 'Fira Code', 'Courier New', monospace",
50
+ baseSize: "15px",
51
+ scale: {
52
+ display: { size: "3rem", lineHeight: "1.1", weight: "600", letterSpacing: "-0.03em" },
53
+ h1: { size: "2rem", lineHeight: "1.2", weight: "600", letterSpacing: "-0.02em" },
54
+ h2: { size: "1.5rem", lineHeight: "1.25", weight: "600", letterSpacing: "-0.015em" },
55
+ h3: { size: "1.125rem", lineHeight: "1.35", weight: "600", letterSpacing: "-0.01em" },
56
+ h4: { size: "1rem", lineHeight: "1.4", weight: "500", letterSpacing: "0" },
57
+ body: { size: "0.9375rem", lineHeight: "1.6", weight: "400" },
58
+ bodySmall: { size: "0.8125rem", lineHeight: "1.5", weight: "400" },
59
+ code: { size: "0.8125rem", lineHeight: "1.7", weight: "400" },
60
+ overline: {
61
+ size: "0.6875rem",
62
+ lineHeight: "1.4",
63
+ weight: "500",
64
+ letterSpacing: "0.08em",
65
+ textTransform: "uppercase",
66
+ },
67
+ },
68
+ },
69
+ spacing: {
70
+ 1: "4px",
71
+ 2: "8px",
72
+ 3: "12px",
73
+ 4: "16px",
74
+ 5: "20px",
75
+ 6: "24px",
76
+ 8: "32px",
77
+ 10: "40px",
78
+ 12: "48px",
79
+ 16: "64px",
80
+ },
81
+ radius: {
82
+ none: "0px",
83
+ sm: "2px",
84
+ base: "4px",
85
+ md: "6px",
86
+ lg: "8px",
87
+ xl: "10px",
88
+ "2xl": "12px",
89
+ "3xl": "16px",
90
+ full: "9999px",
91
+ },
92
+ borders: {
93
+ none: "none",
94
+ thin: "1px solid",
95
+ base: "1px solid",
96
+ medium: "1px solid",
97
+ thick: "2px solid",
98
+ },
99
+ shadows: {
100
+ none: "none",
101
+ sm: "0 1px 2px rgba(0,0,0,0.04)",
102
+ base: "0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04)",
103
+ md: "0 4px 6px rgba(0,0,0,0.04), 0 2px 4px rgba(0,0,0,0.03)",
104
+ lg: "0 10px 15px rgba(0,0,0,0.04), 0 4px 6px rgba(0,0,0,0.03)",
105
+ xl: "0 20px 25px rgba(0,0,0,0.04), 0 8px 10px rgba(0,0,0,0.03)",
106
+ "2xl": "0 25px 50px rgba(0,0,0,0.06)",
107
+ inner: "inset 0 2px 4px rgba(0,0,0,0.04)",
108
+ },
109
+ motion: {
110
+ easing: "cubic-bezier(0.4, 0, 0.2, 1)",
111
+ durationFast: "100ms",
112
+ durationBase: "150ms",
113
+ durationSlow: "300ms",
114
+ respectReducedMotion: true,
115
+ },
116
+ layout: {
117
+ maxWidth: "1200px",
118
+ gutter: "32px",
119
+ columnGap: "24px",
120
+ rowGap: "24px",
121
+ },
122
+ componentHints: {
123
+ buttonShape: "square",
124
+ inputStyle: "outlined",
125
+ cardElevation: "subtle",
126
+ navStyle: "transparent",
127
+ tableStyle: "minimal",
128
+ badgeStyle: "square",
129
+ },
130
+ // ── Dark mode override ────────────────────────────────────────────────────────
131
+ // Straight surface inversion — same restraint, no color drama.
132
+ // Inspired by Linear dark, Vercel dark, Notion dark.
133
+ // Primary inverts: near-black ink → near-white ink.
134
+ // Borders stay barely-there: #e5e5e5 → #262626.
135
+ // Semantic colors (destructive/success/warning) lighten one step for dark-bg legibility.
136
+ // Shadows are kept structurally identical — minimal barely uses them anyway.
137
+ modes: {
138
+ dark: {
139
+ colors: {
140
+ primary: "#ededed", // near-white ink (was near-black)
141
+ primaryForeground: "#0a0a0a",
142
+ secondary: "#1a1a1a",
143
+ secondaryForeground: "#ededed",
144
+ background: "#0a0a0a",
145
+ foreground: "#ededed",
146
+ card: "#111111",
147
+ cardForeground: "#ededed",
148
+ muted: "#1a1a1a",
149
+ mutedForeground: "#737373", // same neutral gray as light
150
+ accent: "#1a1a1a",
151
+ accentForeground: "#ededed",
152
+ destructive: "#f87171", // red-400 — legible on dark
153
+ destructiveForeground: "#0a0a0a",
154
+ success: "#4ade80", // green-400
155
+ successForeground: "#0a0a0a",
156
+ warning: "#fbbf24", // amber-400
157
+ warningForeground: "#0a0a0a",
158
+ border: "#262626", // barely visible — same restraint as light
159
+ input: "#111111",
160
+ ring: "#525252", // quiet mid-gray focus ring
161
+ popover: "#111111",
162
+ popoverForeground: "#ededed",
163
+ },
164
+ },
165
+ },
166
+ };
167
+ //# sourceMappingURL=minimal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal.js","sourceRoot":"","sources":["../../../src/vibes/definitions/minimal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Vibe } from "../types.js";
2
+ /**
3
+ * Windows XP Vibe — "Skeuomorphic Revival"
4
+ *
5
+ * Source: windows-xp-light.json / windows-xp-dark.json
6
+ * Warm cream base (#fdfae8). Royal blue chrome gradients. Bevel-offset borders.
7
+ * Hard-offset window shadows (1px — not ambient, not neon, physical).
8
+ * Three-way gradient system: chrome titles, button states, taskbar.
9
+ * Work Sans display + Inter body. Tightly spaced (8px grid, 16px gutter).
10
+ */
11
+ export declare const windowsXp: Vibe;
12
+ //# sourceMappingURL=windows-xp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-xp.d.ts","sourceRoot":"","sources":["../../../src/vibes/definitions/windows-xp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,EAAE,IA+OvB,CAAC"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Windows XP Vibe — "Skeuomorphic Revival"
3
+ *
4
+ * Source: windows-xp-light.json / windows-xp-dark.json
5
+ * Warm cream base (#fdfae8). Royal blue chrome gradients. Bevel-offset borders.
6
+ * Hard-offset window shadows (1px — not ambient, not neon, physical).
7
+ * Three-way gradient system: chrome titles, button states, taskbar.
8
+ * Work Sans display + Inter body. Tightly spaced (8px grid, 16px gutter).
9
+ */
10
+ export const windowsXp = {
11
+ meta: {
12
+ id: "windows-xp",
13
+ name: "Windows XP",
14
+ description: "Skeuomorphic Revival. Tactile chrome surfaces, high-gloss gradients, physical interface depth.",
15
+ narrative: "Warm cream surfaces with royal blue chrome. Buttons have highlight-top / shadow-bottom bevel. " +
16
+ "Pressed state shifts 1px down-right. Gradients are first-class: title bars, buttons, and " +
17
+ "taskbar all use vertical linear-gradient. This is physicality at 96dpi.",
18
+ tags: ["skeuomorphic", "chrome", "gradient", "windows", "retro", "bevel", "warm"],
19
+ darkModeFirst: false,
20
+ },
21
+ colors: {
22
+ primary: "#0043ae",
23
+ primaryForeground: "#ffffff", // onPrimary
24
+ secondary: "#005fac",
25
+ secondaryForeground: "#ffffff",
26
+ background: "#fdfae8",
27
+ foreground: "#000000", // onSurface
28
+ card: "#f1eedd", // surfaceContainer
29
+ cardForeground: "#000000",
30
+ muted: "#ece9d8", // surfaceContainerHigh
31
+ mutedForeground: "#3a3a3a", // onSurfaceVariant
32
+ accent: "#499dfd", // secondaryContainer (bright XP blue)
33
+ accentForeground: "#ffffff",
34
+ destructive: "#cc0000",
35
+ destructiveForeground: "#ffffff", // error
36
+ success: "#2dbb45",
37
+ successForeground: "#ffffff",
38
+ warning: "#f6a400",
39
+ warningForeground: "#000000",
40
+ border: "#7a7a7a", // outline
41
+ input: "#ffffff", // surfaceContainerLowest
42
+ ring: "#0043ae", // primary
43
+ popover: "#f5f2e4", // surfaceContainerLow
44
+ popoverForeground: "#000000",
45
+ },
46
+ typography: {
47
+ fontFamily: "'Inter', 'Helvetica Neue', Arial, sans-serif",
48
+ fontFamilyHeading: "'Work Sans', 'Helvetica Neue', Arial, sans-serif",
49
+ fontFamilyMono: "'JetBrains Mono', 'Courier New', monospace",
50
+ baseSize: "14px",
51
+ scale: {
52
+ display: { size: "2.5rem", lineHeight: "1.1", weight: "700", letterSpacing: "-0.02em" },
53
+ h1: { size: "2rem", lineHeight: "1.2", weight: "700", letterSpacing: "-0.01em" },
54
+ h2: { size: "1.5rem", lineHeight: "1.25", weight: "600", letterSpacing: "0" },
55
+ h3: { size: "1.25rem", lineHeight: "1.3", weight: "600", letterSpacing: "0" },
56
+ h4: { size: "1rem", lineHeight: "1.35", weight: "600", letterSpacing: "0" },
57
+ body: { size: "0.875rem", lineHeight: "1.5", weight: "400" },
58
+ bodySmall: { size: "0.75rem", lineHeight: "1.4", weight: "400" },
59
+ code: { size: "0.8125rem", lineHeight: "1.6", weight: "400" },
60
+ overline: {
61
+ size: "0.6875rem",
62
+ lineHeight: "1.3",
63
+ weight: "600",
64
+ letterSpacing: "0.1em",
65
+ textTransform: "uppercase",
66
+ },
67
+ },
68
+ },
69
+ spacing: {
70
+ 1: "4px",
71
+ 2: "8px",
72
+ 3: "12px",
73
+ 4: "16px",
74
+ 5: "20px",
75
+ 6: "24px",
76
+ 8: "32px",
77
+ 10: "40px",
78
+ 12: "48px",
79
+ 16: "64px",
80
+ },
81
+ radius: {
82
+ none: "0px",
83
+ sm: "4px",
84
+ base: "8px",
85
+ md: "8px",
86
+ lg: "12px",
87
+ xl: "12px",
88
+ "2xl": "16px",
89
+ "3xl": "16px",
90
+ full: "9999px",
91
+ },
92
+ borders: {
93
+ none: "none",
94
+ thin: "1px solid",
95
+ base: "1px solid",
96
+ medium: "1px solid",
97
+ thick: "2px solid",
98
+ },
99
+ shadows: {
100
+ none: "none",
101
+ sm: "1px 1px 0px rgba(0,0,0,0.15)",
102
+ base: "1px 1px 2px rgba(0,0,0,0.20)",
103
+ md: "2px 2px 4px rgba(0,0,0,0.20)",
104
+ lg: "3px 3px 6px rgba(0,0,0,0.25)",
105
+ xl: "4px 4px 8px rgba(0,0,0,0.25)",
106
+ "2xl": "6px 6px 12px rgba(0,0,0,0.30)",
107
+ inner: "inset 1px 1px 0px rgba(0,0,0,0.25)",
108
+ },
109
+ motion: {
110
+ easing: "linear",
111
+ durationFast: "100ms",
112
+ durationBase: "150ms",
113
+ durationSlow: "200ms",
114
+ respectReducedMotion: true,
115
+ },
116
+ layout: {
117
+ maxWidth: "1440px",
118
+ gutter: "16px",
119
+ columnGap: "12px",
120
+ rowGap: "12px",
121
+ },
122
+ componentHints: {
123
+ buttonShape: "pill",
124
+ inputStyle: "outlined",
125
+ cardElevation: "raised",
126
+ navStyle: "filled",
127
+ tableStyle: "striped",
128
+ badgeStyle: "pill",
129
+ },
130
+ customProperties: {
131
+ // Surface hierarchy — exact values from windows-xp-light.json
132
+ "--surface": "#fdfae8",
133
+ "--surface-container-lowest": "#ffffff",
134
+ "--surface-container-low": "#f5f2e4",
135
+ "--surface-container": "#f1eedd",
136
+ "--surface-container-high": "#ece9d8",
137
+ "--surface-container-highest": "#e2dfcf",
138
+ "--outline-variant": "#7a7a7a",
139
+ // XP chrome gradient system
140
+ "--gradient-chrome-primary": "linear-gradient(to bottom, #0058e1, #0043ae)",
141
+ "--gradient-chrome-secondary": "linear-gradient(to bottom, #499dfd, #005fac)",
142
+ "--gradient-button-default": "linear-gradient(to bottom, #ffffff, #dcdcdc)",
143
+ "--gradient-button-hover": "linear-gradient(to bottom, #ffffff, #cfcfcf)",
144
+ "--gradient-button-pressed": "linear-gradient(to bottom, #cfcfcf, #ffffff)",
145
+ "--gradient-taskbar": "linear-gradient(to bottom, #0058e1, #0043ae)",
146
+ // Bevel effect tokens
147
+ "--bevel-highlight": "rgba(255,255,255,0.40)",
148
+ "--bevel-shadow": "rgba(0,0,0,0.20)",
149
+ "--pressed-offset-x": "1px",
150
+ "--pressed-offset-y": "1px",
151
+ // Layout chrome
152
+ "--titlebar-height": "30px",
153
+ "--toolbar-height": "28px",
154
+ "--statusbar-height": "22px",
155
+ },
156
+ modes: {
157
+ // Source: windows-xp-dark.json — "Tactile Noir"
158
+ // Obsidian surfaces (#131315) with sapphire chrome (#1B3A6B / #5c8cff).
159
+ // Shadow strategy flips: hard-offset → blue-glow (diffuse, not sharp).
160
+ // Button gradients invert: light grey → dark navy.
161
+ // Bevel highlight dims (0.40→0.20), shadow edge deepens (0.20→0.40).
162
+ // Titlebar grows 2px: 30px → 32px.
163
+ dark: {
164
+ colors: {
165
+ primary: "#1B3A6B", // deep sapphire
166
+ primaryForeground: "#ffffff",
167
+ secondary: "#5c8cff", // bright periwinkle
168
+ secondaryForeground: "#ffffff",
169
+ background: "#131315",
170
+ foreground: "#f0f3f8", // onSurface
171
+ card: "#262628", // surfaceContainer
172
+ cardForeground: "#f0f3f8",
173
+ muted: "#2a2a2c", // surfaceContainerHigh
174
+ mutedForeground: "#a7adbb", // onSurfaceVariant
175
+ accent: "#3b5fb8", // secondaryContainer
176
+ accentForeground: "#ffffff",
177
+ destructive: "#ff4d4f", // error
178
+ destructiveForeground: "#1a0002",
179
+ success: "#3ddc84",
180
+ successForeground: "#001a0d",
181
+ warning: "#ffb020",
182
+ warningForeground: "#1a1100",
183
+ border: "#5a6175", // outline
184
+ input: "#1b1b1d", // surfaceContainerLowest
185
+ ring: "#5c8cff", // secondary (bright focus color)
186
+ popover: "#202022", // surfaceContainerLow
187
+ popoverForeground: "#f0f3f8",
188
+ },
189
+ shadows: {
190
+ none: "none",
191
+ sm: "0px 0px 8px rgba(27,58,107,0.10)",
192
+ base: "0px 0px 16px rgba(27,58,107,0.12)",
193
+ md: "0px 0px 32px rgba(27,58,107,0.12)",
194
+ lg: "0px 0px 48px rgba(27,58,107,0.16)",
195
+ xl: "0px 0px 64px rgba(27,58,107,0.20)",
196
+ "2xl": "0px 0px 96px rgba(27,58,107,0.24)",
197
+ inner: "inset 1px 1px 0px rgba(0,0,0,0.40)",
198
+ },
199
+ customProperties: {
200
+ "--surface": "#131315",
201
+ "--surface-container-lowest": "#1b1b1d",
202
+ "--surface-container-low": "#202022",
203
+ "--surface-container": "#262628",
204
+ "--surface-container-high": "#2a2a2c",
205
+ "--surface-container-highest": "#343438",
206
+ "--ghost-border": "rgba(90,97,117,0.15)",
207
+ "--outline-variant": "#5a6175",
208
+ // Sapphire chrome gradients (dark buttons are blue, not grey)
209
+ "--gradient-chrome-primary": "linear-gradient(to bottom, #254f91, #1B3A6B)",
210
+ "--gradient-chrome-secondary": "linear-gradient(to bottom, #3b5fb8, #254f91)",
211
+ "--gradient-button-default": "linear-gradient(to bottom, #254f91, #1B3A6B)",
212
+ "--gradient-button-hover": "linear-gradient(to bottom, #2f63b5, #1B3A6B)",
213
+ "--gradient-button-pressed": "linear-gradient(to bottom, #1B3A6B, #254f91)",
214
+ "--gradient-gloss-overlay": "radial-gradient(circle at top, rgba(255,255,255,0.05), transparent)",
215
+ // Bevel dims in dark: highlight halved, shadow doubled
216
+ "--bevel-highlight": "rgba(255,255,255,0.20)",
217
+ "--bevel-shadow": "rgba(0,0,0,0.40)",
218
+ // Titlebar grows 2px in dark mode
219
+ "--titlebar-height": "32px",
220
+ "--toolbar-height": "28px",
221
+ "--statusbar-height": "22px",
222
+ // Status glow (new in dark mode)
223
+ "--status-glow-color": "#1B3A6B",
224
+ "--status-glow-blur": "12px",
225
+ },
226
+ },
227
+ },
228
+ };
229
+ //# sourceMappingURL=windows-xp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-xp.js","sourceRoot":"","sources":["../../../src/vibes/definitions/windows-xp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Vibe Registry
3
+ *
4
+ * The single place where vibes are registered and looked up.
5
+ * Adding a new vibe means adding one import and one entry here.
6
+ */
7
+ import type { Vibe, VibeId } from "./types.js";
8
+ /**
9
+ * Retrieve a vibe by its ID.
10
+ * Returns undefined if the ID is not registered.
11
+ */
12
+ export declare function getVibe(id: VibeId): Vibe;
13
+ /**
14
+ * Return all registered vibe IDs.
15
+ */
16
+ export declare function listVibeIds(): VibeId[];
17
+ /**
18
+ * Return all registered vibes.
19
+ */
20
+ export declare function listVibes(): Vibe[];
21
+ /**
22
+ * Check whether a given string is a valid vibe ID.
23
+ */
24
+ export declare function isValidVibeId(id: string): id is VibeId;
25
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/vibes/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAqB/C;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAQxC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,EAAE,CAElC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM,CAEtD"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Vibe Registry
3
+ *
4
+ * The single place where vibes are registered and looked up.
5
+ * Adding a new vibe means adding one import and one entry here.
6
+ */
7
+ import { minimal } from "./definitions/minimal.js";
8
+ import { brutalist } from "./definitions/brutalist.js";
9
+ import { corporate } from "./definitions/corporate.js";
10
+ import { glassmorphism } from "./definitions/glassmorphism.js";
11
+ import { windowsXp } from "./definitions/windows-xp.js";
12
+ import { kineticTerminal } from "./definitions/kinetic-terminal.js";
13
+ // ─── Registry Map ────────────────────────────────────────────────────────────
14
+ const REGISTRY = {
15
+ minimal,
16
+ brutalist,
17
+ corporate,
18
+ glassmorphism,
19
+ "windows-xp": windowsXp,
20
+ "kinetic-terminal": kineticTerminal,
21
+ };
22
+ // ─── Public API ───────────────────────────────────────────────────────────────
23
+ /**
24
+ * Retrieve a vibe by its ID.
25
+ * Returns undefined if the ID is not registered.
26
+ */
27
+ export function getVibe(id) {
28
+ const vibe = REGISTRY[id];
29
+ if (!vibe) {
30
+ throw new Error(`Vibe "${id}" is not registered. Available vibes: ${listVibeIds().join(", ")}`);
31
+ }
32
+ return vibe;
33
+ }
34
+ /**
35
+ * Return all registered vibe IDs.
36
+ */
37
+ export function listVibeIds() {
38
+ return Object.keys(REGISTRY);
39
+ }
40
+ /**
41
+ * Return all registered vibes.
42
+ */
43
+ export function listVibes() {
44
+ return Object.values(REGISTRY);
45
+ }
46
+ /**
47
+ * Check whether a given string is a valid vibe ID.
48
+ */
49
+ export function isValidVibeId(id) {
50
+ return id in REGISTRY;
51
+ }
52
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/vibes/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,gFAAgF;AAEhF,MAAM,QAAQ,GAAyB;IACrC,OAAO;IACP,SAAS;IACT,SAAS;IACT,aAAa;IACb,YAAY,EAAE,SAAS;IACvB,kBAAkB,EAAE,eAAe;CACpC,CAAC;AAEF,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,SAAS,EAAE,yCAAyC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,EAAE,IAAI,QAAQ,CAAC;AACxB,CAAC"}