vibe-ui-suite 4.8.0 → 6.2.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/cli.mjs CHANGED
@@ -2,42 +2,49 @@
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import * as readline from 'readline';
5
- import { COMPONENT_REGISTRY } from './registry/components';
6
- import { VISUAL_CHEMISTRIES } from './index';
7
- const VERSION = '4.1.1';
5
+ import { COMPONENT_REGISTRY } from './registry/components.mjs';
6
+ import { VISUAL_CHEMISTRIES } from './index.mjs';
7
+ const VERSION = '6.2.0';
8
8
  function printBanner() {
9
- console.log(`
10
- \x1b[35m ▲ VIBE UI CLI v${VERSION}\x1b[0m
11
- \x1b[90mDeterministic UI contracts & component primitives for AI coding assistants\x1b[0m
9
+ console.log(`
10
+ \x1b[35m ▲ VIBE UI CLI v${VERSION}\x1b[0m
11
+ \x1b[90mDeterministic UI contracts, 11 design paradigms & flagship components for AI coding assistants\x1b[0m
12
12
  `);
13
13
  }
14
14
  function printHelp() {
15
15
  printBanner();
16
- console.log(`\x1b[1mUSAGE:\x1b[0m
17
- npx vibe-ui-suite <command> [options]
18
- vibe-ui <command> [options]
19
-
20
- \x1b[1mCOMMANDS:\x1b[0m
21
- \x1b[32minit\x1b[0m Initialize Vibe UI contracts, OKLCH tokens & AI rules in current project
22
- \x1b[32madd <component>\x1b[0m Add an accessible, AI-native component template to your project
23
- \x1b[32mlist\x1b[0m List all available component primitives in the registry
24
-
25
- \x1b[1mOPTIONS:\x1b[0m
26
- -f, --force Overwrite existing files (creates automated .bak backups)
27
- -y, --yes Non-interactive mode (use defaults without prompting)
28
- --chemistry <1-5> Select visual chemistry in non-interactive mode
29
- --editor <1-4> Select target AI editor in non-interactive mode (1: Cursor, 2: Claude, 3: Windsurf, 4: All)
30
- --dry-run Preview file operations without making actual modifications
31
- -v, --version Show CLI version
32
- -h, --help Show help menu
33
-
34
- \x1b[1mEXAMPLES:\x1b[0m
35
- npx vibe-ui-suite init
36
- npx vibe-ui-suite init -y
37
- npx vibe-ui-suite init --dry-run
38
- npx vibe-ui-suite add thinking-drawer
39
- npx vibe-ui-suite add theme-toggle
40
- npx vibe-ui-suite add thinking-drawer --force
16
+ console.log(`\x1b[1mUSAGE:\x1b[0m
17
+ npx vibe-ui-suite <command> [options]
18
+ vibe-ui <command> [options]
19
+
20
+ \x1b[1mCOMMANDS:\x1b[0m
21
+ \x1b[32minit\x1b[0m Initialize Vibe UI contracts, 11 paradigm tokens & AI rules in current project
22
+ \x1b[32msync\x1b[0m Synchronize existing AI contracts to canonical v${VERSION} master rules
23
+ \x1b[32minstall-skills\x1b[0m Install or update Vibe UI agent skills in .agents/skills/
24
+ \x1b[32madd <component>\x1b[0m Add an accessible, AI-native component template to your project
25
+ \x1b[32mlist\x1b[0m List all available component primitives in the registry
26
+
27
+ \x1b[1mOPTIONS:\x1b[0m
28
+ -f, --force Overwrite existing files (creates automated .bak backups)
29
+ -y, --yes Non-interactive mode (use defaults without prompting)
30
+ --chemistry <1-5> Select visual chemistry in non-interactive mode
31
+ --editor <1-4> Select target AI editor in non-interactive mode (1: Cursor, 2: Claude, 3: Windsurf, 4: All)
32
+ --dry-run Preview file operations without making actual modifications
33
+ -v, --version Show CLI version
34
+ -h, --help Show help menu
35
+
36
+ \x1b[1mEXAMPLES:\x1b[0m
37
+ npx vibe-ui-suite init
38
+ npx vibe-ui-suite init -y
39
+ npx vibe-ui-suite sync
40
+ npx vibe-ui-suite install-skills
41
+ npx vibe-ui-suite add device-mockup
42
+ npx vibe-ui-suite add before-after-lens
43
+ npx vibe-ui-suite add specular-card
44
+ npx vibe-ui-suite add thinking-drawer
45
+ npx vibe-ui-suite add shimmer-button
46
+ npx vibe-ui-suite add theme-toggle
47
+ npx vibe-ui-suite add device-mockup --force
41
48
  `);
42
49
  }
43
50
  function prompt(rl, query) {
@@ -63,16 +70,131 @@ function safeWriteFile(filePath, content, options) {
63
70
  fs.writeFileSync(filePath, content, 'utf-8');
64
71
  return { written: true, skipped: false };
65
72
  }
66
- const CONTRACT_RULES = `# Vibe UI Design & Code Quality Contract
67
- # Generated via npx vibe-ui-suite init
68
-
69
- Follow strict anti-slop guidelines:
70
- - Zero raw unicode emojis (use inline SVGs only)
71
- - Strict WCAG 2.2 AA contrast (>= 4.5:1 body, >= 3.0:1 headings)
72
- - Use typed OKLCH color spaces for perceptual accuracy
73
- - Strict maximum of 3 backdrop-filter / glass layers
74
- - Semantic RTL: preserve physical macro coordinate stability
73
+ const CONTRACT_RULES = `# 👑 Vibe UI Master Design & Architecture Contract (v6.2.0)
74
+ # Generated via npx vibe-ui-suite init / sync
75
+
76
+ ## 🏛️ The 5 Master Execution Gates & Autonomous Lazy-Prompt Protocol
77
+ When receiving UI design or redesign prompts (especially lazy prompts: "design this", "redesign this", "make it look good", "make it pop", "craft a modern UI"):
78
+
79
+ 1. 📸 MANDATORY PRE-EDIT VISUAL AUDIT:
80
+ - Before editing any code, capture an initial browser screenshot (screenshots/before.png).
81
+ - Visually critique layout flaws, spacing balance, visual hierarchy, and focal points with multimodal vision.
82
+
83
+ 2. 🎨 ARCHITECTURAL PARADIGM & TREND BENCHMARKING:
84
+ - Benchmark against premier design sources: Dribbble, Figma Community, Mobbin, and Awwwards.
85
+ - Autonomously select a modern paradigm (Bento Grid, Linear Minimal, Stripe Crisp Light, Swiss Editorial).
86
+ - Light Mode is the primary default canvas (#ffffff/#f8fafc). Mandatory dual-theme support with accessible Dark Mode toggle.
87
+
88
+ 3. 🧱 STRUCTURAL DOM & SPATIAL OVERHAUL:
89
+ - ZERO COSMETIC-ONLY PATCH INVARIANT: Strictly forbidden to perform shallow skin-patches (altering only colors, borders, or emojis while leaving dead layouts untouched).
90
+ - Overhaul structural spatial rhythm, 8pt spacing system, and asymmetric bento card hierarchies.
91
+ - Inject tactile micro-interactions (shimmer buttons, cyber loaders, tactile switches, holographic cards) and authentic imagery.
92
+ - CONTEXTUAL CREATIVE MEDIA: Background video is strictly contextual (for creative/cinematic requests only); never force video onto utility SaaS or dashboards. Intelligently evaluate whether curated video, lightweight SVG particles, or static photography deliver the cleanest UX.
93
+
94
+ 4. 👁️ MULTI-VIEWPORT LIVING VISUAL VERIFICATION:
95
+ - Capture post-edit full-page screenshots (screenshots/after.png, Desktop 1440px / Mobile 390px).
96
+ - Multimodal self-critique: verify visual rhythm, zero horizontal overflow, and pristine typography hierarchy before handoff.
97
+
98
+ 5. 🧼 SILENT TABLE-STAKES (INTERNAL WORKER BASELINES):
99
+ - Low-level hygiene (OKLCH color math, WCAG AAA formulas, zero raw unicode emojis -> inline SVGs, <bdi> bidirectional text isolation) are silent worker requirements.
100
+ - NEVER report these hygiene baselines as headline accomplishments or key deliverables in chat summaries.
101
+ - Chat summaries MUST lead with architectural layout transformations, aesthetic paradigm chosen, and visual before/after evidence.
75
102
  `;
103
+ function findSourceSkillsDir() {
104
+ const candidates = [
105
+ path.resolve(__dirname, '..', 'skills'),
106
+ path.resolve(__dirname, 'skills'),
107
+ path.resolve(__dirname, '..', '..', '..', 'skills'),
108
+ path.resolve(process.cwd(), 'skills'),
109
+ ];
110
+ for (const c of candidates) {
111
+ if (fs.existsSync(c) && fs.existsSync(path.join(c, 'ui-kit', 'SKILL.md'))) {
112
+ return c;
113
+ }
114
+ }
115
+ return null;
116
+ }
117
+ function installSkills(targetProjectDir, options) {
118
+ const srcSkillsDir = findSourceSkillsDir();
119
+ const installed = [];
120
+ const skipped = [];
121
+ if (!srcSkillsDir) {
122
+ console.log(' \x1b[33m[warn]\x1b[0m Could not locate Vibe UI skills source directory to install.');
123
+ return { installed, skipped };
124
+ }
125
+ const destSkillsDir = path.join(targetProjectDir, '.agents', 'skills');
126
+ if (options.dryRun) {
127
+ console.log(` \x1b[34m[dry-run]\x1b[0m Would install Vibe UI skills to: ${path.relative(process.cwd(), destSkillsDir)}`);
128
+ return { installed, skipped };
129
+ }
130
+ if (!fs.existsSync(destSkillsDir)) {
131
+ fs.mkdirSync(destSkillsDir, { recursive: true });
132
+ }
133
+ const skillsList = fs.readdirSync(srcSkillsDir).filter((f) => {
134
+ const full = path.join(srcSkillsDir, f);
135
+ return fs.statSync(full).isDirectory() && fs.existsSync(path.join(full, 'SKILL.md'));
136
+ });
137
+ for (const skillName of skillsList) {
138
+ const srcSkillPath = path.join(srcSkillsDir, skillName);
139
+ const destSkillPath = path.join(destSkillsDir, skillName);
140
+ if (fs.existsSync(destSkillPath) && !options.force) {
141
+ skipped.push(skillName);
142
+ continue;
143
+ }
144
+ if (fs.existsSync(destSkillPath) && options.force) {
145
+ fs.rmSync(destSkillPath, { recursive: true, force: true });
146
+ }
147
+ fs.cpSync(srcSkillPath, destSkillPath, { recursive: true });
148
+ installed.push(skillName);
149
+ }
150
+ return { installed, skipped };
151
+ }
152
+ async function handleInstallSkills(options) {
153
+ printBanner();
154
+ console.log('\x1b[36mInstalling Vibe UI Agent Skills into current project workspace (.agents/skills/)...\x1b[0m\n');
155
+ const cwd = process.cwd();
156
+ const res = installSkills(cwd, options);
157
+ if (res.installed.length > 0) {
158
+ console.log(`\n\x1b[32m✔ Successfully installed ${res.installed.length} skill(s) in .agents/skills/:\x1b[0m`);
159
+ res.installed.forEach((s) => console.log(` + .agents/skills/${s}`));
160
+ }
161
+ if (res.skipped.length > 0) {
162
+ console.log(`\n\x1b[33mSkipped ${res.skipped.length} existing skill(s) (use --force to overwrite):\x1b[0m`);
163
+ res.skipped.forEach((s) => console.log(` - ${s}`));
164
+ }
165
+ }
166
+ async function handleSync(options) {
167
+ printBanner();
168
+ console.log('\x1b[36mSynchronizing AI contracts to canonical v6.2.0 Master Architectural Standard...\x1b[0m\n');
169
+ const cwd = process.cwd();
170
+ const targetFiles = ['.cursorrules', '.windsurfrules', 'CLAUDE.md'];
171
+ let updatedCount = 0;
172
+ for (const filename of targetFiles) {
173
+ const filePath = path.join(cwd, filename);
174
+ if (fs.existsSync(filePath)) {
175
+ const res = safeWriteFile(filePath, CONTRACT_RULES, { ...options, force: true });
176
+ if (res.written) {
177
+ console.log(` \x1b[32m✔\x1b[0m Updated \x1b[1m${filename}\x1b[0m to v6.2.0 contract rules`);
178
+ updatedCount++;
179
+ }
180
+ }
181
+ }
182
+ const destSkills = path.join(cwd, '.agents', 'skills');
183
+ if (fs.existsSync(destSkills) || updatedCount > 0) {
184
+ console.log('\n\x1b[36mSynchronizing Vibe UI workspace skills (.agents/skills/):\x1b[0m');
185
+ const skillRes = installSkills(cwd, { ...options, force: true });
186
+ if (skillRes.installed.length > 0) {
187
+ console.log(` \x1b[32m✔\x1b[0m Synchronized ${skillRes.installed.length} skills in .agents/skills/`);
188
+ }
189
+ }
190
+ if (updatedCount === 0) {
191
+ console.log(' \x1b[33mNo existing AI rule files found in current directory.\x1b[0m');
192
+ console.log(' Run \x1b[32mnpx vibe-ui-suite init\x1b[0m to initialize contracts from scratch.');
193
+ }
194
+ else {
195
+ console.log(`\n\x1b[32m✔ Successfully synchronized AI rule file(s) and workspace skills to v6.2.0!\x1b[0m`);
196
+ }
197
+ }
76
198
  async function handleInit(options) {
77
199
  printBanner();
78
200
  if (options.dryRun) {
@@ -151,44 +273,56 @@ async function handleInit(options) {
151
273
  createdFiles.push('.windsurfrules');
152
274
  }
153
275
  // 4. Generate Dual-Theme CSS Tokens file safely
154
- const cssContent = `:root {
155
- /* Vibe UI Chemistry: ${selectedChem.name} (${selectedChem.id}) - Light Theme */
156
- --vibe-canvas: ${selectedChem.colors.canvas};
157
- --vibe-surface: ${selectedChem.colors.surface};
158
- --vibe-border: ${selectedChem.colors.border};
159
- --vibe-primary-accent: ${selectedChem.colors.primaryAccent};
160
- --vibe-on-primary: ${selectedChem.colors.onPrimaryAccent};
161
- --vibe-text-primary: ${selectedChem.colors.textPrimary};
162
- --vibe-text-muted: ${selectedChem.colors.textMuted};
163
- --vibe-ring: ${selectedChem.colors.ring};
164
- }
165
-
166
- .dark, [data-theme="dark"] {
167
- /* Vibe UI Chemistry: ${selectedChem.name} (${selectedChem.id}) - Dark Theme */
168
- --vibe-canvas: ${darkColors.canvas};
169
- --vibe-surface: ${darkColors.surface};
170
- --vibe-border: ${darkColors.border};
171
- --vibe-primary-accent: ${darkColors.primaryAccent};
172
- --vibe-on-primary: ${darkColors.onPrimaryAccent};
173
- --vibe-text-primary: ${darkColors.textPrimary};
174
- --vibe-text-muted: ${darkColors.textMuted};
175
- --vibe-ring: ${darkColors.ring};
176
- }
276
+ const cssContent = `:root {
277
+ /* Vibe UI Chemistry: ${selectedChem.name} (${selectedChem.id}) - Light Theme */
278
+ --vibe-canvas: ${selectedChem.colors.canvas};
279
+ --vibe-surface: ${selectedChem.colors.surface};
280
+ --vibe-border: ${selectedChem.colors.border};
281
+ --vibe-primary-accent: ${selectedChem.colors.primaryAccent};
282
+ --vibe-on-primary: ${selectedChem.colors.onPrimaryAccent};
283
+ --vibe-text-primary: ${selectedChem.colors.textPrimary};
284
+ --vibe-text-muted: ${selectedChem.colors.textMuted};
285
+ --vibe-ring: ${selectedChem.colors.ring};
286
+ }
287
+
288
+ .dark, [data-theme="dark"] {
289
+ /* Vibe UI Chemistry: ${selectedChem.name} (${selectedChem.id}) - Dark Theme */
290
+ --vibe-canvas: ${darkColors.canvas};
291
+ --vibe-surface: ${darkColors.surface};
292
+ --vibe-border: ${darkColors.border};
293
+ --vibe-primary-accent: ${darkColors.primaryAccent};
294
+ --vibe-on-primary: ${darkColors.onPrimaryAccent};
295
+ --vibe-text-primary: ${darkColors.textPrimary};
296
+ --vibe-text-muted: ${darkColors.textMuted};
297
+ --vibe-ring: ${darkColors.ring};
298
+ }
177
299
  `;
178
300
  const cssPath = path.join(cwd, 'vibe-tokens.css');
179
301
  const cssRes = safeWriteFile(cssPath, cssContent, options);
180
302
  if (cssRes.written)
181
303
  createdFiles.push('vibe-tokens.css');
304
+ // 5. Install Vibe UI Workspace Skills into .agents/skills/
305
+ console.log('\n\x1b[36mInstalling Vibe UI Agent Skills (.agents/skills/):\x1b[0m');
306
+ const skillRes = installSkills(cwd, options);
307
+ if (skillRes.installed.length > 0) {
308
+ skillRes.installed.forEach((s) => {
309
+ console.log(` \x1b[32m✔\x1b[0m Installed skill: \x1b[1m${s}\x1b[0m`);
310
+ createdFiles.push(`.agents/skills/${s}`);
311
+ });
312
+ }
313
+ if (skillRes.skipped.length > 0) {
314
+ skillRes.skipped.forEach((s) => console.log(` \x1b[33m[skip]\x1b[0m Skill ${s} already installed (use --force to overwrite)`));
315
+ }
182
316
  console.log('\n\x1b[32m✔ Initialized successfully!\x1b[0m');
183
317
  if (createdFiles.length > 0) {
184
318
  console.log('\x1b[90mGenerated/Updated files:\x1b[0m');
185
319
  createdFiles.forEach((f) => console.log(` + ${f}`));
186
320
  }
187
- console.log(`
188
- \x1b[1mNext Steps:\x1b[0m
189
- 1. Import \x1b[35mvibe-tokens.css\x1b[0m into your layout or globals.css
190
- 2. Run \x1b[32mnpx vibe-ui-suite add thinking-drawer\x1b[0m to add your first AI component
191
- 3. Run \x1b[32mnpx vibe-ui-suite add theme-toggle\x1b[0m to add accessible Dark/Light theme switch
321
+ console.log(`
322
+ \x1b[1mNext Steps:\x1b[0m
323
+ 1. Import \x1b[35mvibe-tokens.css\x1b[0m into your layout or globals.css
324
+ 2. Run \x1b[32mnpx vibe-ui-suite add thinking-drawer\x1b[0m to add your first AI component
325
+ 3. Run \x1b[32mnpx vibe-ui-suite add theme-toggle\x1b[0m to add accessible Dark/Light theme switch
192
326
  `);
193
327
  }
194
328
  function handleAdd(componentName, options = { force: false, dryRun: false }) {
@@ -228,10 +362,20 @@ function handleAdd(componentName, options = { force: false, dryRun: false }) {
228
362
  }
229
363
  }
230
364
  function handleList() {
231
- console.log('\x1b[1mAvailable Vibe UI Components:\x1b[0m');
232
- Object.values(COMPONENT_REGISTRY).forEach((comp) => {
233
- console.log(` \x1b[32m${comp.name.padEnd(18)}\x1b[0m \x1b[90m${comp.description}\x1b[0m`);
365
+ console.log('\x1b[1mAvailable Vibe UI Components:\x1b[0m\n');
366
+ console.log(' \x1b[1;36mAI Contracts & Observation:\x1b[0m');
367
+ Object.values(COMPONENT_REGISTRY)
368
+ .filter((comp) => comp.category === 'ai-contracts')
369
+ .forEach((comp) => {
370
+ console.log(` \x1b[32m${comp.name.padEnd(20)}\x1b[0m \x1b[90m${comp.description}\x1b[0m`);
371
+ });
372
+ console.log('\n \x1b[1;35mLiving Micro-Interactions:\x1b[0m');
373
+ Object.values(COMPONENT_REGISTRY)
374
+ .filter((comp) => comp.category === 'living-micro-interactions')
375
+ .forEach((comp) => {
376
+ console.log(` \x1b[32m${comp.name.padEnd(20)}\x1b[0m \x1b[90m${comp.description}\x1b[0m`);
234
377
  });
378
+ console.log('');
235
379
  }
236
380
  async function main() {
237
381
  const rawArgs = process.argv.slice(2);
@@ -261,6 +405,14 @@ async function main() {
261
405
  case 'init':
262
406
  await handleInit(options);
263
407
  break;
408
+ case 'sync':
409
+ case 'update':
410
+ await handleSync(options);
411
+ break;
412
+ case 'install-skills':
413
+ case 'skills':
414
+ await handleInstallSkills(options);
415
+ break;
264
416
  case 'add':
265
417
  handleAdd(filteredArgs[1], options);
266
418
  break;
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * @vibe-ui/tokens
3
3
  * Typed OKLCH design tokens, physics curves, and contrast utilities.
4
4
  */
5
- export type VisualChemistryId = 'MINIMALIST_SAAS' | 'LUXURY_GLASS_2' | 'NEOBRUTALISM' | 'SWISS_EDITORIAL' | 'STRIPE_CRISP_LIGHT';
5
+ export type VisualChemistryId = 'MINIMALIST_SAAS' | 'LUXURY_GLASS_2' | 'NEOBRUTALISM' | 'SWISS_EDITORIAL' | 'STRIPE_CRISP_LIGHT' | 'CLAYMORPHISM';
6
6
  export interface ChemistryColors {
7
7
  canvas: string;
8
8
  surface: string;
@@ -45,3 +45,4 @@ export declare const MOTION_CURVES: {
45
45
  export declare function getRelativeLuminance(r: number, g: number, b: number): number;
46
46
  /** Contrast ratio between two luminance values */
47
47
  export declare function getContrastRatio(lumA: number, lumB: number): number;
48
+ export { COMPONENT_REGISTRY, type ComponentTemplate } from './registry/components';
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Typed OKLCH design tokens, physics curves, and contrast utilities.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.MOTION_CURVES = exports.VISUAL_CHEMISTRIES = void 0;
7
+ exports.COMPONENT_REGISTRY = exports.MOTION_CURVES = exports.VISUAL_CHEMISTRIES = void 0;
8
8
  exports.getRelativeLuminance = getRelativeLuminance;
9
9
  exports.getContrastRatio = getContrastRatio;
10
10
  exports.VISUAL_CHEMISTRIES = {
@@ -183,6 +183,41 @@ exports.VISUAL_CHEMISTRIES = {
183
183
  lerpAlpha: '1 - Math.exp(-16 * dt)',
184
184
  },
185
185
  },
186
+ CLAYMORPHISM: {
187
+ id: 'CLAYMORPHISM',
188
+ name: 'Claymorphism (3D Soft Tactile)',
189
+ tagline: 'Tactile inflated surfaces with dual pillowy shadows and vibrant pastel accents',
190
+ colors: {
191
+ canvas: 'oklch(0.96 0.01 250)',
192
+ surface: 'oklch(1 0 0)',
193
+ border: 'oklch(1 0 0 / 0.8)',
194
+ primaryAccent: 'oklch(0.58 0.22 265)',
195
+ onPrimaryAccent: 'oklch(0.99 0 0)',
196
+ textPrimary: 'oklch(0.24 0.03 260)',
197
+ textMuted: 'oklch(0.50 0.02 260)',
198
+ ring: 'oklch(0.58 0.22 265)',
199
+ },
200
+ darkColors: {
201
+ canvas: 'oklch(0.18 0.02 260)',
202
+ surface: 'oklch(0.24 0.025 260)',
203
+ border: 'oklch(0.32 0.02 260)',
204
+ primaryAccent: 'oklch(0.68 0.22 265)',
205
+ onPrimaryAccent: 'oklch(0.99 0 0)',
206
+ textPrimary: 'oklch(0.98 0 0)',
207
+ textMuted: 'oklch(0.70 0.02 260)',
208
+ ring: 'oklch(0.68 0.22 265)',
209
+ },
210
+ typography: {
211
+ display: 'Vazirmatn, Plus Jakarta Sans, system-ui, sans-serif',
212
+ body: 'Vazirmatn, Inter, system-ui, sans-serif',
213
+ mono: 'JetBrains Mono, monospace',
214
+ },
215
+ physics: {
216
+ springStiffness: 240,
217
+ dampingRatio: 0.82,
218
+ lerpAlpha: '1 - Math.exp(-14 * dt)',
219
+ },
220
+ },
186
221
  };
187
222
  /** Easing curves adhering to Vibe UI motion standards */
188
223
  exports.MOTION_CURVES = {
@@ -205,3 +240,6 @@ function getContrastRatio(lumA, lumB) {
205
240
  const l2 = Math.min(lumA, lumB);
206
241
  return (l1 + 0.05) / (l2 + 0.05);
207
242
  }
243
+ // Re-export Component Registry and templates
244
+ var components_1 = require("./registry/components");
245
+ Object.defineProperty(exports, "COMPONENT_REGISTRY", { enumerable: true, get: function () { return components_1.COMPONENT_REGISTRY; } });
package/dist/index.mjs CHANGED
@@ -178,6 +178,41 @@ export const VISUAL_CHEMISTRIES = {
178
178
  lerpAlpha: '1 - Math.exp(-16 * dt)',
179
179
  },
180
180
  },
181
+ CLAYMORPHISM: {
182
+ id: 'CLAYMORPHISM',
183
+ name: 'Claymorphism (3D Soft Tactile)',
184
+ tagline: 'Tactile inflated surfaces with dual pillowy shadows and vibrant pastel accents',
185
+ colors: {
186
+ canvas: 'oklch(0.96 0.01 250)',
187
+ surface: 'oklch(1 0 0)',
188
+ border: 'oklch(1 0 0 / 0.8)',
189
+ primaryAccent: 'oklch(0.58 0.22 265)',
190
+ onPrimaryAccent: 'oklch(0.99 0 0)',
191
+ textPrimary: 'oklch(0.24 0.03 260)',
192
+ textMuted: 'oklch(0.50 0.02 260)',
193
+ ring: 'oklch(0.58 0.22 265)',
194
+ },
195
+ darkColors: {
196
+ canvas: 'oklch(0.18 0.02 260)',
197
+ surface: 'oklch(0.24 0.025 260)',
198
+ border: 'oklch(0.32 0.02 260)',
199
+ primaryAccent: 'oklch(0.68 0.22 265)',
200
+ onPrimaryAccent: 'oklch(0.99 0 0)',
201
+ textPrimary: 'oklch(0.98 0 0)',
202
+ textMuted: 'oklch(0.70 0.02 260)',
203
+ ring: 'oklch(0.68 0.22 265)',
204
+ },
205
+ typography: {
206
+ display: 'Vazirmatn, Plus Jakarta Sans, system-ui, sans-serif',
207
+ body: 'Vazirmatn, Inter, system-ui, sans-serif',
208
+ mono: 'JetBrains Mono, monospace',
209
+ },
210
+ physics: {
211
+ springStiffness: 240,
212
+ dampingRatio: 0.82,
213
+ lerpAlpha: '1 - Math.exp(-14 * dt)',
214
+ },
215
+ },
181
216
  };
182
217
  /** Easing curves adhering to Vibe UI motion standards */
183
218
  export const MOTION_CURVES = {
@@ -200,3 +235,5 @@ export function getContrastRatio(lumA, lumB) {
200
235
  const l2 = Math.min(lumA, lumB);
201
236
  return (l1 + 0.05) / (l2 + 0.05);
202
237
  }
238
+ // Re-export Component Registry and templates
239
+ export { COMPONENT_REGISTRY } from './registry/components.mjs';
@@ -6,6 +6,7 @@ export interface ComponentTemplate {
6
6
  name: string;
7
7
  filename: string;
8
8
  description: string;
9
+ category: 'ai-contracts' | 'living-micro-interactions';
9
10
  code: string;
10
11
  }
11
12
  export declare const COMPONENT_REGISTRY: Record<string, ComponentTemplate>;