omnidesign 1.0.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 (77) hide show
  1. package/LICENSE +21 -0
  2. package/QUICKREF.md +150 -0
  3. package/README.md +576 -0
  4. package/bin/cli.js +390 -0
  5. package/bin/detect-ide.js +50 -0
  6. package/bin/install.js +8 -0
  7. package/logo.jpg +0 -0
  8. package/package.json +84 -0
  9. package/recipes/components/README.md +29 -0
  10. package/recipes/components/agent-card.md +314 -0
  11. package/recipes/components/ai-chat.md +252 -0
  12. package/recipes/components/bento-grid.md +186 -0
  13. package/recipes/components/code-block.md +503 -0
  14. package/recipes/components/file-upload.md +483 -0
  15. package/recipes/components/forms.md +238 -0
  16. package/recipes/components/hero-section.md +161 -0
  17. package/recipes/components/navbar.md +214 -0
  18. package/recipes/components/prompt-input.md +293 -0
  19. package/recipes/components/thinking-indicator.md +372 -0
  20. package/recipes/motion/README.md +3 -0
  21. package/recipes/motion/motion-system.md +437 -0
  22. package/recipes/patterns/README.md +3 -0
  23. package/skills/aider/omnidesign.md +67 -0
  24. package/skills/amp/SKILL.md +114 -0
  25. package/skills/antigravity/SKILL.md +114 -0
  26. package/skills/claude/omnidesign.md +111 -0
  27. package/skills/continue/omnidesign.yaml +29 -0
  28. package/skills/cursor/omnidesign.md +110 -0
  29. package/skills/kilo/SKILL.md +114 -0
  30. package/skills/opencode/omnidesign.md +110 -0
  31. package/skills/vscode/package.json +66 -0
  32. package/skills/zed/omnidesign.json +7 -0
  33. package/tokens/motion/README.md +3 -0
  34. package/tokens/primitives/README.md +3 -0
  35. package/tokens/primitives/color.json +219 -0
  36. package/tokens/primitives/motion.json +56 -0
  37. package/tokens/primitives/radii.json +37 -0
  38. package/tokens/primitives/shadows.json +34 -0
  39. package/tokens/primitives/spacing.json +67 -0
  40. package/tokens/primitives/typography.json +127 -0
  41. package/tokens/semantic/README.md +3 -0
  42. package/tokens/semantic/color.json +114 -0
  43. package/tokens/semantic/motion.json +44 -0
  44. package/tokens/semantic/radii.json +29 -0
  45. package/tokens/semantic/shadows.json +24 -0
  46. package/tokens/semantic/spacing.json +69 -0
  47. package/tokens/semantic/typography.json +118 -0
  48. package/tokens/shadows/README.md +3 -0
  49. package/tokens/themes/README.md +3 -0
  50. package/tokens/themes/berry.json +143 -0
  51. package/tokens/themes/brutalist.json +143 -0
  52. package/tokens/themes/coral.json +143 -0
  53. package/tokens/themes/corporate.json +143 -0
  54. package/tokens/themes/cream.json +143 -0
  55. package/tokens/themes/cyberpunk.json +143 -0
  56. package/tokens/themes/daylight.json +143 -0
  57. package/tokens/themes/deep-space.json +143 -0
  58. package/tokens/themes/forest.json +143 -0
  59. package/tokens/themes/graphite.json +143 -0
  60. package/tokens/themes/lavender.json +143 -0
  61. package/tokens/themes/midnight.json +143 -0
  62. package/tokens/themes/mint.json +143 -0
  63. package/tokens/themes/navy.json +143 -0
  64. package/tokens/themes/noir.json +143 -0
  65. package/tokens/themes/obsidian.json +143 -0
  66. package/tokens/themes/ocean.json +143 -0
  67. package/tokens/themes/paper.json +143 -0
  68. package/tokens/themes/ruby.json +143 -0
  69. package/tokens/themes/slate.json +143 -0
  70. package/tokens/themes/snow.json +143 -0
  71. package/tokens/themes/solar.json +143 -0
  72. package/tokens/themes/spring.json +143 -0
  73. package/tokens/themes/starry-night.json +143 -0
  74. package/tokens/themes/sunset.json +143 -0
  75. package/tokens/typography/FONT_GUIDE.md +381 -0
  76. package/tokens/typography/README.md +37 -0
  77. package/tokens/typography/font-collection.json +221 -0
package/bin/cli.js ADDED
@@ -0,0 +1,390 @@
1
+ #!/usr/bin/env node
2
+ import { program } from 'commander';
3
+ import chalk from 'chalk';
4
+ import fs from 'fs';
5
+ import path from 'path';
6
+ import { fileURLToPath } from 'url';
7
+
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
10
+
11
+ program
12
+ .name('omnidesign')
13
+ .description('Universal design system skill for AI coding assistants')
14
+ .version(packageJson.version);
15
+
16
+ program
17
+ .command('install')
18
+ .description('Install OmniDesign skill for your IDE')
19
+ .option('-i, --ide <ide>', 'Target IDE (claude, cursor, opencode, vscode, aider, continue, zed, amp, kilo, antigravity)')
20
+ .option('-g, --global', 'Install globally (default: project-level)')
21
+ .action(async (options) => {
22
+ console.log(chalk.blue('🎨 OmniDesign Skill Installer\n'));
23
+
24
+ const detectedIde = options.ide || detectIDE();
25
+
26
+ if (!detectedIde) {
27
+ console.log(chalk.yellow('⚠️ Could not auto-detect IDE. Please specify with --ide flag'));
28
+ console.log(chalk.gray('Supported: claude, cursor, opencode, vscode, aider, continue, zed, amp, kilo, antigravity'));
29
+ process.exit(1);
30
+ }
31
+
32
+ console.log(chalk.green(`✓ Detected IDE: ${detectedIde}\n`));
33
+
34
+ try {
35
+ await installSkill(detectedIde, options.global);
36
+ console.log(chalk.green('\n✅ OmniDesign skill installed successfully!'));
37
+ console.log(chalk.gray('\nNext steps:'));
38
+ console.log(chalk.gray(' 1. Restart your IDE if needed'));
39
+ console.log(chalk.gray(' 2. Try: "Use the OmniDesign theme cyberpunk"'));
40
+ console.log(chalk.gray(' 3. See: https://omnidesign.dev/docs'));
41
+ } catch (error) {
42
+ console.error(chalk.red('\n❌ Installation failed:'), error.message);
43
+ process.exit(1);
44
+ }
45
+ });
46
+
47
+ program
48
+ .command('list')
49
+ .description('List available IDE integrations')
50
+ .action(() => {
51
+ console.log(chalk.blue('🎨 Supported IDEs:\n'));
52
+
53
+ const ides = [
54
+ { name: 'Claude Code', cmd: 'claude', file: '.claude/skills/omnidesign.md' },
55
+ { name: 'Cursor', cmd: 'cursor', file: '.cursor/skills/omnidesign.md' },
56
+ { name: 'OpenCode', cmd: 'opencode', file: '.opencode/skills/omnidesign.md' },
57
+ { name: 'VS Code', cmd: 'vscode', file: '.vscode/settings.json' },
58
+ { name: 'Zed', cmd: 'zed', file: '.zed/omnidesign.json' },
59
+ { name: 'Amp Code', cmd: 'amp', file: '.agents/skills/omnidesign/SKILL.md' },
60
+ { name: 'Kilo Code', cmd: 'kilo', file: '.kilocode/skills/omnidesign/SKILL.md' },
61
+ { name: 'Antigravity', cmd: 'antigravity', file: '.agent/skills/omnidesign/SKILL.md' },
62
+ { name: 'Aider', cmd: 'aider', file: 'CONVENTIONS.md' },
63
+ { name: 'Continue.dev', cmd: 'continue', file: '.continue/config.yaml' },
64
+ ];
65
+
66
+ ides.forEach(ide => {
67
+ const installed = fs.existsSync(path.join(process.cwd(), ide.file));
68
+ const status = installed ? chalk.green('✓ installed') : chalk.gray('not installed');
69
+ console.log(` ${chalk.bold(ide.name)}: ${status}`);
70
+ console.log(` Config: ${ide.file}`);
71
+ console.log();
72
+ });
73
+ });
74
+
75
+ program
76
+ .command('uninstall')
77
+ .description('Remove OmniDesign skill from your IDE')
78
+ .option('-i, --ide <ide>', 'Target IDE')
79
+ .action(async (options) => {
80
+ const detectedIde = options.ide || detectIDE();
81
+
82
+ if (!detectedIde) {
83
+ console.log(chalk.yellow('⚠️ Please specify IDE with --ide flag'));
84
+ return;
85
+ }
86
+
87
+ console.log(chalk.blue(`Removing OmniDesign from ${detectedIde}...`));
88
+ await uninstallSkill(detectedIde);
89
+ console.log(chalk.green('✅ Uninstalled successfully'));
90
+ });
91
+
92
+ function detectIDE() {
93
+ const cwd = process.cwd();
94
+
95
+ if (fs.existsSync(path.join(cwd, '.claude'))) return 'claude';
96
+ if (fs.existsSync(path.join(cwd, '.cursor'))) return 'cursor';
97
+ if (fs.existsSync(path.join(cwd, '.opencode'))) return 'opencode';
98
+ if (fs.existsSync(path.join(cwd, '.vscode'))) return 'vscode';
99
+ if (fs.existsSync(path.join(cwd, '.zed'))) return 'zed';
100
+ if (fs.existsSync(path.join(cwd, '.amp'))) return 'amp';
101
+ if (fs.existsSync(path.join(cwd, '.kilocode'))) return 'kilo';
102
+ if (fs.existsSync(path.join(cwd, '.antigravity'))) return 'antigravity';
103
+ if (fs.existsSync(path.join(cwd, '.agents'))) return 'amp';
104
+ if (fs.existsSync(path.join(cwd, '.aider.conf.yml'))) return 'aider';
105
+ if (fs.existsSync(path.join(cwd, '.continue'))) return 'continue';
106
+ if (fs.existsSync(path.join(cwd, 'claude.md'))) return 'claude';
107
+ if (fs.existsSync(path.join(cwd, '.cursorrules'))) return 'cursor';
108
+ if (process.env.CLAUDE_CODE) return 'claude';
109
+ if (process.env.CURSOR_TRACE) return 'cursor';
110
+
111
+ return null;
112
+ }
113
+
114
+ async function installSkill(ide, global = false) {
115
+ const cwd = process.cwd();
116
+ const skillsDir = path.join(__dirname, '..', 'skills', ide);
117
+
118
+ if (!fs.existsSync(skillsDir)) {
119
+ throw new Error(`Skill files for ${ide} not found`);
120
+ }
121
+
122
+ switch (ide) {
123
+ case 'claude':
124
+ await installClaudeSkill(cwd, skillsDir, global);
125
+ break;
126
+ case 'cursor':
127
+ await installCursorSkill(cwd, skillsDir, global);
128
+ break;
129
+ case 'opencode':
130
+ await installOpenCodeSkill(cwd, skillsDir, global);
131
+ break;
132
+ case 'vscode':
133
+ await installVSCodeSkill(cwd, skillsDir, global);
134
+ break;
135
+ case 'aider':
136
+ await installAiderSkill(cwd, skillsDir, global);
137
+ break;
138
+ case 'continue':
139
+ await installContinueSkill(cwd, skillsDir, global);
140
+ break;
141
+ case 'zed':
142
+ await installZedSkill(cwd, skillsDir, global);
143
+ break;
144
+ case 'amp':
145
+ await installAmpSkill(cwd, skillsDir, global);
146
+ break;
147
+ case 'kilo':
148
+ await installKiloSkill(cwd, skillsDir, global);
149
+ break;
150
+ case 'antigravity':
151
+ await installAntigravitySkill(cwd, skillsDir, global);
152
+ break;
153
+ default:
154
+ throw new Error(`Unsupported IDE: ${ide}`);
155
+ }
156
+ }
157
+
158
+ async function installClaudeSkill(cwd, skillsDir, global) {
159
+ const targetDir = global
160
+ ? path.join(require('os').homedir(), '.claude', 'skills')
161
+ : path.join(cwd, '.claude', 'skills');
162
+
163
+ fs.mkdirSync(targetDir, { recursive: true });
164
+
165
+ fs.copyFileSync(
166
+ path.join(skillsDir, 'omnidesign.md'),
167
+ path.join(targetDir, 'omnidesign.md')
168
+ );
169
+
170
+ console.log(chalk.gray(` Created: ${path.relative(cwd, path.join(targetDir, 'omnidesign.md'))}`));
171
+
172
+ const marketplacePath = global
173
+ ? path.join(require('os').homedir(), '.claude', 'marketplace.json')
174
+ : path.join(cwd, '.claude', 'marketplace.json');
175
+
176
+ let marketplace = { name: 'local', plugins: [] };
177
+ if (fs.existsSync(marketplacePath)) {
178
+ marketplace = JSON.parse(fs.readFileSync(marketplacePath, 'utf8'));
179
+ }
180
+
181
+ if (!marketplace.plugins.find(p => p.name === 'omnidesign')) {
182
+ marketplace.plugins.push({
183
+ name: 'omnidesign',
184
+ source: './skills/omnidesign.md',
185
+ description: 'Universal design system with 25 themes and AI components',
186
+ version: '1.0.0'
187
+ });
188
+ fs.writeFileSync(marketplacePath, JSON.stringify(marketplace, null, 2));
189
+ console.log(chalk.gray(` Updated: ${path.relative(cwd, marketplacePath)}`));
190
+ }
191
+ }
192
+
193
+ async function installCursorSkill(cwd, skillsDir, global) {
194
+ const targetDir = global
195
+ ? path.join(require('os').homedir(), '.cursor', 'skills')
196
+ : path.join(cwd, '.cursor', 'skills');
197
+
198
+ fs.mkdirSync(targetDir, { recursive: true });
199
+
200
+ fs.copyFileSync(
201
+ path.join(skillsDir, 'omnidesign.md'),
202
+ path.join(targetDir, 'omnidesign.md')
203
+ );
204
+
205
+ console.log(chalk.gray(` Created: ${path.relative(cwd, path.join(targetDir, 'omnidesign.md'))}`));
206
+ }
207
+
208
+ async function installOpenCodeSkill(cwd, skillsDir, global) {
209
+ const targetDir = global
210
+ ? path.join(require('os').homedir(), '.config', 'opencode', 'skills')
211
+ : path.join(cwd, '.opencode', 'skills');
212
+
213
+ fs.mkdirSync(targetDir, { recursive: true });
214
+
215
+ fs.copyFileSync(
216
+ path.join(skillsDir, 'omnidesign.md'),
217
+ path.join(targetDir, 'omnidesign.md')
218
+ );
219
+
220
+ console.log(chalk.gray(` Created: ${path.relative(cwd, path.join(targetDir, 'omnidesign.md'))}`));
221
+
222
+ const configPath = global
223
+ ? path.join(require('os').homedir(), '.config', 'opencode', 'config.json')
224
+ : path.join(cwd, '.opencode', 'config.json');
225
+
226
+ let config = { plugins: [] };
227
+ if (fs.existsSync(configPath)) {
228
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
229
+ }
230
+
231
+ if (!config.plugins.includes('omnidesign')) {
232
+ config.plugins.push('omnidesign');
233
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
234
+ console.log(chalk.gray(` Updated: ${path.relative(cwd, configPath)}`));
235
+ }
236
+ }
237
+
238
+ async function installVSCodeSkill(cwd, skillsDir, global) {
239
+ const targetDir = path.join(cwd, '.vscode');
240
+ fs.mkdirSync(targetDir, { recursive: true });
241
+
242
+ const settingsPath = path.join(targetDir, 'settings.json');
243
+ let settings = {};
244
+
245
+ if (fs.existsSync(settingsPath)) {
246
+ settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
247
+ }
248
+
249
+ settings['omnidesign.enabled'] = true;
250
+ settings['omnidesign.theme'] = 'corporate';
251
+
252
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
253
+ console.log(chalk.gray(` Updated: ${path.relative(cwd, settingsPath)}`));
254
+ }
255
+
256
+ async function installAiderSkill(cwd, skillsDir, global) {
257
+ const conventionsPath = path.join(cwd, 'CONVENTIONS.md');
258
+
259
+ fs.copyFileSync(path.join(skillsDir, 'omnidesign.md'), conventionsPath);
260
+ console.log(chalk.gray(` Created: ${path.relative(cwd, conventionsPath)}`));
261
+
262
+ const configPath = path.join(cwd, '.aider.conf.yml');
263
+ if (fs.existsSync(configPath)) {
264
+ let config = fs.readFileSync(configPath, 'utf8');
265
+ if (!config.includes('CONVENTIONS.md')) {
266
+ config += '\nread: CONVENTIONS.md\n';
267
+ fs.writeFileSync(configPath, config);
268
+ console.log(chalk.gray(` Updated: ${path.relative(cwd, configPath)}`));
269
+ }
270
+ }
271
+ }
272
+
273
+ async function installContinueSkill(cwd, skillsDir, global) {
274
+ const targetDir = path.join(cwd, '.continue');
275
+ fs.mkdirSync(targetDir, { recursive: true });
276
+
277
+ const skillRefPath = path.join(targetDir, 'omnidesign.yaml');
278
+ fs.copyFileSync(path.join(skillsDir, 'omnidesign.yaml'), skillRefPath);
279
+ console.log(chalk.gray(` Created: ${path.relative(cwd, skillRefPath)}`));
280
+ console.log(chalk.yellow(' Note: Please manually add OmniDesign to your Continue config'));
281
+ }
282
+
283
+ async function installZedSkill(cwd, skillsDir, global) {
284
+ const targetDir = path.join(cwd, '.zed');
285
+ fs.mkdirSync(targetDir, { recursive: true });
286
+
287
+ const configPath = path.join(targetDir, 'omnidesign.json');
288
+ const config = {
289
+ name: 'OmniDesign',
290
+ version: '1.0.0',
291
+ description: 'Universal design system skill',
292
+ enabled: true
293
+ };
294
+
295
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
296
+ console.log(chalk.gray(` Created: ${path.relative(cwd, configPath)}`));
297
+ console.log(chalk.yellow(' Note: Add OmniDesign to your Zed settings.json'));
298
+ }
299
+
300
+ async function installAmpSkill(cwd, skillsDir, global) {
301
+ const targetDir = global
302
+ ? path.join(require('os').homedir(), '.config', 'agents', 'skills', 'omnidesign')
303
+ : path.join(cwd, '.agents', 'skills', 'omnidesign');
304
+
305
+ fs.mkdirSync(targetDir, { recursive: true });
306
+
307
+ fs.copyFileSync(
308
+ path.join(skillsDir, 'SKILL.md'),
309
+ path.join(targetDir, 'SKILL.md')
310
+ );
311
+
312
+ console.log(chalk.gray(` Created: ${path.relative(cwd, path.join(targetDir, 'SKILL.md'))}`));
313
+ console.log(chalk.blue(' You can also use: amp skill add owner/omnidesign'));
314
+ }
315
+
316
+ async function installKiloSkill(cwd, skillsDir, global) {
317
+ const targetDir = global
318
+ ? path.join(require('os').homedir(), '.kilocode', 'skills', 'omnidesign')
319
+ : path.join(cwd, '.kilocode', 'skills', 'omnidesign');
320
+
321
+ fs.mkdirSync(targetDir, { recursive: true });
322
+
323
+ fs.copyFileSync(
324
+ path.join(skillsDir, 'SKILL.md'),
325
+ path.join(targetDir, 'SKILL.md')
326
+ );
327
+
328
+ console.log(chalk.gray(` Created: ${path.relative(cwd, path.join(targetDir, 'SKILL.md'))}`));
329
+ console.log(chalk.yellow(' Reload VS Code window to activate skill'));
330
+ }
331
+
332
+ async function installAntigravitySkill(cwd, skillsDir, global) {
333
+ const targetDir = global
334
+ ? path.join(require('os').homedir(), '.gemini', 'antigravity', 'skills', 'omnidesign')
335
+ : path.join(cwd, '.agent', 'skills', 'omnidesign');
336
+
337
+ fs.mkdirSync(targetDir, { recursive: true });
338
+
339
+ fs.copyFileSync(
340
+ path.join(skillsDir, 'SKILL.md'),
341
+ path.join(targetDir, 'SKILL.md')
342
+ );
343
+
344
+ console.log(chalk.gray(` Created: ${path.relative(cwd, path.join(targetDir, 'SKILL.md'))}`));
345
+ }
346
+
347
+ async function uninstallSkill(ide) {
348
+ const cwd = process.cwd();
349
+
350
+ switch (ide) {
351
+ case 'claude':
352
+ fs.rmSync(path.join(cwd, '.claude', 'skills', 'omnidesign.md'), { force: true });
353
+ break;
354
+ case 'cursor':
355
+ fs.rmSync(path.join(cwd, '.cursor', 'skills', 'omnidesign.md'), { force: true });
356
+ break;
357
+ case 'opencode':
358
+ fs.rmSync(path.join(cwd, '.opencode', 'skills', 'omnidesign.md'), { force: true });
359
+ break;
360
+ case 'vscode':
361
+ const settingsPath = path.join(cwd, '.vscode', 'settings.json');
362
+ if (fs.existsSync(settingsPath)) {
363
+ const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
364
+ delete settings['omnidesign.enabled'];
365
+ delete settings['omnidesign.theme'];
366
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
367
+ }
368
+ break;
369
+ case 'zed':
370
+ fs.rmSync(path.join(cwd, '.zed', 'omnidesign.json'), { force: true });
371
+ break;
372
+ case 'amp':
373
+ fs.rmSync(path.join(cwd, '.agents', 'skills', 'omnidesign'), { force: true, recursive: true });
374
+ break;
375
+ case 'kilo':
376
+ fs.rmSync(path.join(cwd, '.kilocode', 'skills', 'omnidesign'), { force: true, recursive: true });
377
+ break;
378
+ case 'antigravity':
379
+ fs.rmSync(path.join(cwd, '.agent', 'skills', 'omnidesign'), { force: true, recursive: true });
380
+ break;
381
+ case 'aider':
382
+ fs.rmSync(path.join(cwd, 'CONVENTIONS.md'), { force: true });
383
+ break;
384
+ case 'continue':
385
+ fs.rmSync(path.join(cwd, '.continue', 'omnidesign.yaml'), { force: true });
386
+ break;
387
+ }
388
+ }
389
+
390
+ program.parse();
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ import chalk from 'chalk';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import { execSync } from 'child_process';
7
+
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+
10
+ function detectIDE() {
11
+ const cwd = process.cwd();
12
+
13
+ if (fs.existsSync(path.join(cwd, '.claude'))) return 'claude';
14
+ if (fs.existsSync(path.join(cwd, '.cursor'))) return 'cursor';
15
+ if (fs.existsSync(path.join(cwd, '.opencode'))) return 'opencode';
16
+ if (fs.existsSync(path.join(cwd, '.vscode'))) return 'vscode';
17
+ if (fs.existsSync(path.join(cwd, '.zed'))) return 'zed';
18
+ if (fs.existsSync(path.join(cwd, '.agents'))) return 'amp';
19
+ if (fs.existsSync(path.join(cwd, '.kilocode'))) return 'kilo';
20
+ if (fs.existsSync(path.join(cwd, '.antigravity'))) return 'antigravity';
21
+ if (fs.existsSync(path.join(cwd, '.agent'))) return 'antigravity';
22
+ if (fs.existsSync(path.join(cwd, '.aider.conf.yml'))) return 'aider';
23
+ if (fs.existsSync(path.join(cwd, '.continue'))) return 'continue';
24
+ if (fs.existsSync(path.join(cwd, 'claude.md'))) return 'claude';
25
+ if (fs.existsSync(path.join(cwd, '.cursorrules'))) return 'cursor';
26
+ if (process.env.CLAUDE_CODE) return 'claude';
27
+ if (process.env.CURSOR_TRACE) return 'cursor';
28
+
29
+ return null;
30
+ }
31
+
32
+ function autoInstall() {
33
+ const ide = detectIDE();
34
+
35
+ if (!ide) {
36
+ console.log(chalk.gray('ℹ️ No IDE detected. Run: npx omnidesign install --ide <ide>'));
37
+ console.log(chalk.gray('Supported: claude, cursor, opencode, vscode, zed, amp, kilo, antigravity, aider, continue'));
38
+ return;
39
+ }
40
+
41
+ console.log(chalk.blue(`🎨 OmniDesign detected ${ide}. Installing...\n`));
42
+
43
+ try {
44
+ execSync(`node ${path.join(__dirname, 'cli.js')} install`, { stdio: 'inherit' });
45
+ } catch (error) {
46
+ console.log(chalk.gray('ℹ️ Run manually: npx omnidesign install'));
47
+ }
48
+ }
49
+
50
+ autoInstall();
package/bin/install.js ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { execSync } from 'child_process';
3
+ import path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+
8
+ execSync(`node ${path.join(__dirname, 'cli.js')} install`, { stdio: 'inherit' });
package/logo.jpg ADDED
Binary file
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "omnidesign",
3
+ "version": "1.0.0",
4
+ "description": "Universal design system skill for AI coding assistants - Works with Claude Code, Cursor, OpenCode, VS Code, and more",
5
+ "type": "module",
6
+ "main": "index.js",
7
+ "bin": {
8
+ "omnidesign": "./bin/cli.js",
9
+ "omnidesign-install": "./bin/install.js"
10
+ },
11
+ "scripts": {
12
+ "build": "bun run scripts/build-tokens.js",
13
+ "validate": "bun run scripts/validate-tokens.js",
14
+ "lint": "biome lint .",
15
+ "format": "biome format . --write",
16
+ "format:check": "biome format .",
17
+ "check": "bun run format:check && bun run lint && bun run validate",
18
+ "themes:list": "bun run -e \"const fs=require('fs');const themes=fs.readdirSync('tokens/themes').filter(f=>f.endsWith('.json')).map(f=>f.replace('.json','')).sort();console.log('\\n🎨 Available Themes ('+themes.length+'):\\n');themes.forEach(t=>console.log(' •',t));console.log();\"",
19
+ "fonts:list": "bun run -e \"const data=require('./tokens/typography/font-collection.json');console.log('\\n🔤 Font Families:\\n');Object.entries(data.families).forEach(([cat,families])=>{console.log(cat+':');Object.keys(families).forEach(f=>console.log(' •',f));console.log();});\"",
20
+ "postinstall": "node bin/detect-ide.js"
21
+ },
22
+ "keywords": [
23
+ "design-system",
24
+ "design-tokens",
25
+ "themes",
26
+ "components",
27
+ "ui-library",
28
+ "css-variables",
29
+ "typography",
30
+ "nerd-fonts",
31
+ "ai-components",
32
+ "claude-code",
33
+ "cursor",
34
+ "opencode",
35
+ "vscode",
36
+ "skill",
37
+ "plugin"
38
+ ],
39
+ "author": "OmniDesign Team",
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/codewithkenzo/omnidesign.git"
44
+ },
45
+ "bugs": {
46
+ "url": "https://github.com/codewithkenzo/omnidesign/issues"
47
+ },
48
+ "homepage": "https://omnidesign.dev",
49
+ "files": [
50
+ "tokens/",
51
+ "recipes/",
52
+ "components/",
53
+ "packages/",
54
+ "bin/",
55
+ "skills/",
56
+ "README.md",
57
+ "QUICKREF.md",
58
+ "logo.jpg"
59
+ ],
60
+ "exports": {
61
+ "./tokens": "./packages/tokens-css/dist/tokens.css",
62
+ "./tokens-ts": "./packages/tokens-ts/dist/tokens.ts",
63
+ "./react": "./packages/react/dist/index.js",
64
+ "./skill/claude": "./skills/claude/",
65
+ "./skill/cursor": "./skills/cursor/",
66
+ "./skill/opencode": "./skills/opencode/",
67
+ "./skill/vscode": "./skills/vscode/",
68
+ "./skill/aider": "./skills/aider/",
69
+ "./skill/continue": "./skills/continue/"
70
+ },
71
+ "engines": {
72
+ "node": ">=18.0.0"
73
+ },
74
+ "devDependencies": {
75
+ "@biomejs/biome": "^1.9.4",
76
+ "typescript": "^5.0.0"
77
+ },
78
+ "dependencies": {
79
+ "chalk": "^5.3.0",
80
+ "commander": "^11.1.0",
81
+ "inquirer": "^9.2.12",
82
+ "ora": "^8.0.1"
83
+ }
84
+ }
@@ -0,0 +1,29 @@
1
+ # Components
2
+
3
+ Markdown documentation of UI component implementations. Each file describes a component's anatomy, variants, and usage patterns.
4
+
5
+ ## Core Components
6
+ - [Hero Section](./hero-section.md) - Landing page hero with CTA
7
+ - [Bento Grid](./bento-grid.md) - Feature showcase grid
8
+ - [Navbar](./navbar.md) - Navigation header
9
+ - [Forms](./forms.md) - Input components and patterns
10
+
11
+ ## AI Industry Components
12
+ Modern components for AI-powered applications:
13
+
14
+ - [AI Chat](./ai-chat.md) - ChatGPT/Claude-style chat interface
15
+ - [Prompt Input](./prompt-input.md) - Smart prompt with suggestions
16
+ - [Agent Card](./agent-card.md) - AI model/agent display card
17
+ - [Thinking Indicator](./thinking-indicator.md) - Loading/streaming states
18
+ - [Code Block](./code-block.md) - Syntax-highlighted code with actions
19
+ - [File Upload](./file-upload.md) - Drag-drop upload with AI context
20
+
21
+ ## Component Structure
22
+ Each component recipe includes:
23
+ - **When to Use** - Context and use cases
24
+ - **Anatomy** - Structural breakdown
25
+ - **Token Usage** - Design token implementation
26
+ - **State Matrix** - Interactive states
27
+ - **Accessibility** - ARIA and screen reader support
28
+ - **Responsive Behavior** - Breakpoint adaptations
29
+ - **Code Examples** - React/TSX implementations