stella-coder 3.9.2 → 5.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 (176) hide show
  1. package/.mcp.json +11 -0
  2. package/.opencode/skills/banner-design/SKILL.md +196 -0
  3. package/.opencode/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
  4. package/.opencode/skills/brand/SKILL.md +97 -0
  5. package/.opencode/skills/brand/references/approval-checklist.md +169 -0
  6. package/.opencode/skills/brand/references/asset-organization.md +157 -0
  7. package/.opencode/skills/brand/references/brand-guideline-template.md +140 -0
  8. package/.opencode/skills/brand/references/color-palette-management.md +186 -0
  9. package/.opencode/skills/brand/references/consistency-checklist.md +94 -0
  10. package/.opencode/skills/brand/references/logo-usage-rules.md +185 -0
  11. package/.opencode/skills/brand/references/messaging-framework.md +85 -0
  12. package/.opencode/skills/brand/references/typography-specifications.md +214 -0
  13. package/.opencode/skills/brand/references/update.md +118 -0
  14. package/.opencode/skills/brand/references/visual-identity.md +96 -0
  15. package/.opencode/skills/brand/references/voice-framework.md +88 -0
  16. package/.opencode/skills/brand/scripts/extract-colors.cjs +341 -0
  17. package/.opencode/skills/brand/scripts/inject-brand-context.cjs +349 -0
  18. package/.opencode/skills/brand/scripts/sync-brand-to-tokens.cjs +248 -0
  19. package/.opencode/skills/brand/scripts/tests/test_sync_brand_to_tokens.py +52 -0
  20. package/.opencode/skills/brand/scripts/validate-asset.cjs +387 -0
  21. package/.opencode/skills/brand/templates/brand-guidelines-starter.md +275 -0
  22. package/.opencode/skills/design/SKILL.md +313 -0
  23. package/.opencode/skills/design/data/cip/deliverables.csv +51 -0
  24. package/.opencode/skills/design/data/cip/industries.csv +21 -0
  25. package/.opencode/skills/design/data/cip/mockup-contexts.csv +21 -0
  26. package/.opencode/skills/design/data/cip/styles.csv +21 -0
  27. package/.opencode/skills/design/data/icon/styles.csv +16 -0
  28. package/.opencode/skills/design/data/logo/colors.csv +56 -0
  29. package/.opencode/skills/design/data/logo/industries.csv +56 -0
  30. package/.opencode/skills/design/data/logo/styles.csv +56 -0
  31. package/.opencode/skills/design/references/banner-sizes-and-styles.md +118 -0
  32. package/.opencode/skills/design/references/cip-deliverable-guide.md +95 -0
  33. package/.opencode/skills/design/references/cip-design.md +121 -0
  34. package/.opencode/skills/design/references/cip-prompt-engineering.md +84 -0
  35. package/.opencode/skills/design/references/cip-style-guide.md +68 -0
  36. package/.opencode/skills/design/references/design-routing.md +207 -0
  37. package/.opencode/skills/design/references/icon-design.md +122 -0
  38. package/.opencode/skills/design/references/logo-color-psychology.md +101 -0
  39. package/.opencode/skills/design/references/logo-design.md +92 -0
  40. package/.opencode/skills/design/references/logo-prompt-engineering.md +158 -0
  41. package/.opencode/skills/design/references/logo-style-guide.md +109 -0
  42. package/.opencode/skills/design/references/slides-copywriting-formulas.md +84 -0
  43. package/.opencode/skills/design/references/slides-create.md +4 -0
  44. package/.opencode/skills/design/references/slides-html-template.md +295 -0
  45. package/.opencode/skills/design/references/slides-layout-patterns.md +137 -0
  46. package/.opencode/skills/design/references/slides-strategies.md +94 -0
  47. package/.opencode/skills/design/references/slides.md +42 -0
  48. package/.opencode/skills/design/references/social-photos-design.md +329 -0
  49. package/.opencode/skills/design/scripts/cip/core.py +215 -0
  50. package/.opencode/skills/design/scripts/cip/generate.py +484 -0
  51. package/.opencode/skills/design/scripts/cip/render-html.py +424 -0
  52. package/.opencode/skills/design/scripts/cip/search.py +127 -0
  53. package/.opencode/skills/design/scripts/icon/generate.py +487 -0
  54. package/.opencode/skills/design/scripts/logo/core.py +175 -0
  55. package/.opencode/skills/design/scripts/logo/generate.py +362 -0
  56. package/.opencode/skills/design/scripts/logo/search.py +114 -0
  57. package/.opencode/skills/design-system/SKILL.md +244 -0
  58. package/.opencode/skills/design-system/data/slide-backgrounds.csv +11 -0
  59. package/.opencode/skills/design-system/data/slide-charts.csv +26 -0
  60. package/.opencode/skills/design-system/data/slide-color-logic.csv +14 -0
  61. package/.opencode/skills/design-system/data/slide-copy.csv +26 -0
  62. package/.opencode/skills/design-system/data/slide-layout-logic.csv +16 -0
  63. package/.opencode/skills/design-system/data/slide-layouts.csv +26 -0
  64. package/.opencode/skills/design-system/data/slide-strategies.csv +16 -0
  65. package/.opencode/skills/design-system/data/slide-typography.csv +15 -0
  66. package/.opencode/skills/design-system/references/component-specs.md +236 -0
  67. package/.opencode/skills/design-system/references/component-tokens.md +214 -0
  68. package/.opencode/skills/design-system/references/primitive-tokens.md +203 -0
  69. package/.opencode/skills/design-system/references/semantic-tokens.md +215 -0
  70. package/.opencode/skills/design-system/references/states-and-variants.md +241 -0
  71. package/.opencode/skills/design-system/references/tailwind-integration.md +251 -0
  72. package/.opencode/skills/design-system/references/token-architecture.md +224 -0
  73. package/.opencode/skills/design-system/scripts/embed-tokens.cjs +99 -0
  74. package/.opencode/skills/design-system/scripts/fetch-background.py +317 -0
  75. package/.opencode/skills/design-system/scripts/generate-slide.py +770 -0
  76. package/.opencode/skills/design-system/scripts/generate-tokens.cjs +205 -0
  77. package/.opencode/skills/design-system/scripts/html-token-validator.py +327 -0
  78. package/.opencode/skills/design-system/scripts/search-slides.py +218 -0
  79. package/.opencode/skills/design-system/scripts/slide-token-validator.py +35 -0
  80. package/.opencode/skills/design-system/scripts/slide_search_core.py +453 -0
  81. package/.opencode/skills/design-system/scripts/tests/test_validate_tokens.py +48 -0
  82. package/.opencode/skills/design-system/scripts/validate-tokens.cjs +246 -0
  83. package/.opencode/skills/design-system/templates/design-tokens-starter.json +143 -0
  84. package/.opencode/skills/slides/SKILL.md +40 -0
  85. package/.opencode/skills/slides/references/copywriting-formulas.md +84 -0
  86. package/.opencode/skills/slides/references/create.md +4 -0
  87. package/.opencode/skills/slides/references/html-template.md +295 -0
  88. package/.opencode/skills/slides/references/layout-patterns.md +137 -0
  89. package/.opencode/skills/slides/references/slide-strategies.md +94 -0
  90. package/.opencode/skills/ui-styling/LICENSE.txt +202 -0
  91. package/.opencode/skills/ui-styling/SKILL.md +324 -0
  92. package/.opencode/skills/ui-styling/references/canvas-design-system.md +320 -0
  93. package/.opencode/skills/ui-styling/references/shadcn-accessibility.md +471 -0
  94. package/.opencode/skills/ui-styling/references/shadcn-components.md +424 -0
  95. package/.opencode/skills/ui-styling/references/shadcn-theming.md +373 -0
  96. package/.opencode/skills/ui-styling/references/tailwind-customization.md +483 -0
  97. package/.opencode/skills/ui-styling/references/tailwind-responsive.md +382 -0
  98. package/.opencode/skills/ui-styling/references/tailwind-utilities.md +455 -0
  99. package/.opencode/skills/ui-styling/scripts/requirements.txt +17 -0
  100. package/.opencode/skills/ui-styling/scripts/shadcn_add.py +308 -0
  101. package/.opencode/skills/ui-styling/scripts/tailwind_config_gen.py +473 -0
  102. package/.opencode/skills/ui-styling/scripts/tests/coverage-ui.json +1 -0
  103. package/.opencode/skills/ui-styling/scripts/tests/requirements.txt +3 -0
  104. package/.opencode/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
  105. package/.opencode/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +394 -0
  106. package/.opencode/skills/ui-ux-pro-max/SKILL.md +396 -0
  107. package/.opencode/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
  108. package/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
  109. package/.opencode/skills/ui-ux-pro-max/data/charts.csv +26 -0
  110. package/.opencode/skills/ui-ux-pro-max/data/colors.csv +193 -0
  111. package/.opencode/skills/ui-ux-pro-max/data/design.csv +1776 -0
  112. package/.opencode/skills/ui-ux-pro-max/data/draft.csv +1779 -0
  113. package/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
  114. package/.opencode/skills/ui-ux-pro-max/data/icons.csv +106 -0
  115. package/.opencode/skills/ui-ux-pro-max/data/landing.csv +35 -0
  116. package/.opencode/skills/ui-ux-pro-max/data/motion.csv +17 -0
  117. package/.opencode/skills/ui-ux-pro-max/data/products.csv +193 -0
  118. package/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  119. package/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
  120. package/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  121. package/.opencode/skills/ui-ux-pro-max/data/stacks/avalonia.csv +57 -0
  122. package/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  123. package/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  124. package/.opencode/skills/ui-ux-pro-max/data/stacks/javafx.csv +76 -0
  125. package/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  126. package/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
  127. package/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  128. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +71 -0
  129. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  130. package/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  131. package/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  132. package/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  133. package/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  134. package/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  135. package/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
  136. package/.opencode/skills/ui-ux-pro-max/data/stacks/uno.csv +60 -0
  137. package/.opencode/skills/ui-ux-pro-max/data/stacks/uwp.csv +56 -0
  138. package/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  139. package/.opencode/skills/ui-ux-pro-max/data/stacks/winui.csv +60 -0
  140. package/.opencode/skills/ui-ux-pro-max/data/stacks/wpf.csv +57 -0
  141. package/.opencode/skills/ui-ux-pro-max/data/styles.csv +85 -0
  142. package/.opencode/skills/ui-ux-pro-max/data/typography.csv +75 -0
  143. package/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
  144. package/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  145. package/.opencode/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
  146. package/.opencode/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  147. package/.opencode/skills/ui-ux-pro-max/scripts/core.py +274 -0
  148. package/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +1329 -0
  149. package/.opencode/skills/ui-ux-pro-max/scripts/search.py +127 -0
  150. package/README.md +25 -30
  151. package/STELLA.md +1 -1
  152. package/dist/antimalware/database.mjs +871 -0
  153. package/dist/antimalware/index.mjs +8 -0
  154. package/dist/antimalware/scanner.mjs +591 -0
  155. package/dist/antimalware/ui.mjs +570 -0
  156. package/dist/banner.mjs +46 -0
  157. package/dist/index.mjs +3073 -0
  158. package/dist/markdown.mjs +100 -0
  159. package/dist/sea-config.json +4 -0
  160. package/dist/security.mjs +237 -0
  161. package/dist/theme.mjs +89 -0
  162. package/dist/tools.mjs +3145 -0
  163. package/install-stella.bat +44 -0
  164. package/package.json +5 -4
  165. package/stella-cli/coding-brain.mjs +753 -0
  166. package/stella-cli/index.mjs +931 -15
  167. package/stella-cli/mcp.mjs +296 -0
  168. package/stella-cli/presentations.mjs +1106 -0
  169. package/stella-cli/subagents.mjs +142 -0
  170. package/stella-cli/telegram-bot.mjs +824 -0
  171. package/stella-cli/tg-bg.bat +13 -0
  172. package/stella-cli/tg-server.bat +15 -0
  173. package/stella-cli/tg-server.mjs +116 -0
  174. package/stella-cli/theme.mjs +6 -4
  175. package/create_cats_pptx.py +0 -121
  176. package/hello.py +0 -2
@@ -0,0 +1,246 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Validate token usage in codebase
4
+ * Finds hardcoded values that should use design tokens
5
+ *
6
+ * Usage:
7
+ * node validate-tokens.cjs --dir src/
8
+ * node validate-tokens.cjs --dir src/ --fix
9
+ */
10
+
11
+ const fs = require('fs');
12
+ const path = require('path');
13
+
14
+ /**
15
+ * Parse command line arguments
16
+ */
17
+ function parseArgs() {
18
+ const args = process.argv.slice(2);
19
+ const options = {
20
+ dir: null,
21
+ fix: false,
22
+ ignore: ['node_modules', '.git', 'dist', 'build', '.next']
23
+ };
24
+
25
+ for (let i = 0; i < args.length; i++) {
26
+ if (args[i] === '--dir' || args[i] === '-d') {
27
+ options.dir = args[++i];
28
+ } else if (args[i] === '--fix') {
29
+ options.fix = true;
30
+ } else if (args[i] === '--ignore' || args[i] === '-i') {
31
+ options.ignore.push(args[++i]);
32
+ } else if (args[i] === '--help' || args[i] === '-h') {
33
+ console.log(`
34
+ Usage: node validate-tokens.cjs [options]
35
+
36
+ Options:
37
+ -d, --dir <path> Directory to scan (required)
38
+ --fix Show suggested fixes (no auto-fix)
39
+ -i, --ignore <dir> Additional directories to ignore
40
+ -h, --help Show this help
41
+
42
+ Checks for:
43
+ - Hardcoded hex colors (#RGB, #RRGGBB)
44
+ - Hardcoded pixel values (except 0, 1px)
45
+ - Hardcoded rem values in CSS
46
+ `);
47
+ process.exit(0);
48
+ }
49
+ }
50
+
51
+ return options;
52
+ }
53
+
54
+ /**
55
+ * Patterns to detect hardcoded values
56
+ */
57
+ const patterns = {
58
+ hexColor: {
59
+ regex: /#([0-9A-Fa-f]{3}){1,2}\b/g,
60
+ message: 'Hardcoded hex color',
61
+ suggestion: 'Use var(--color-*) token'
62
+ },
63
+ rgbColor: {
64
+ regex: /rgb\s*\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\)/gi,
65
+ message: 'Hardcoded RGB color',
66
+ suggestion: 'Use var(--color-*) token'
67
+ },
68
+ pixelValue: {
69
+ regex: /:\s*(\d{2,})px/g, // 2+ digit px values
70
+ message: 'Hardcoded pixel value',
71
+ suggestion: 'Use var(--space-*) or var(--radius-*) token'
72
+ },
73
+ remValue: {
74
+ regex: /:\s*\d+\.?\d*rem(?![^{]*\$value)/g, // rem not in token definition
75
+ message: 'Hardcoded rem value',
76
+ suggestion: 'Use var(--space-*) or var(--font-size-*) token'
77
+ }
78
+ };
79
+
80
+ /**
81
+ * File extensions to scan
82
+ */
83
+ const extensions = ['.css', '.scss', '.tsx', '.jsx', '.ts', '.js', '.vue', '.svelte'];
84
+
85
+ /**
86
+ * Files/patterns to skip
87
+ */
88
+ const skipPatterns = [
89
+ /\.min\.(css|js)$/,
90
+ /tailwind\.config/,
91
+ /globals\.css/, // Token definitions
92
+ /tokens\.(css|json)/
93
+ ];
94
+
95
+ /**
96
+ * Get all files recursively
97
+ */
98
+ function getFiles(dir, ignore, files = []) {
99
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
100
+
101
+ for (const entry of entries) {
102
+ const fullPath = path.join(dir, entry.name);
103
+
104
+ if (entry.isDirectory()) {
105
+ if (!ignore.includes(entry.name)) {
106
+ getFiles(fullPath, ignore, files);
107
+ }
108
+ } else if (entry.isFile()) {
109
+ const ext = path.extname(entry.name);
110
+ if (extensions.includes(ext)) {
111
+ files.push(fullPath);
112
+ }
113
+ }
114
+ }
115
+
116
+ return files;
117
+ }
118
+
119
+ /**
120
+ * Check if file should be skipped
121
+ */
122
+ function shouldSkip(filePath) {
123
+ return skipPatterns.some(pattern => pattern.test(filePath));
124
+ }
125
+
126
+ /**
127
+ * Scan file for violations
128
+ */
129
+ function scanFile(filePath) {
130
+ const content = fs.readFileSync(filePath, 'utf-8');
131
+ const lines = content.split('\n');
132
+ const violations = [];
133
+
134
+ lines.forEach((line, index) => {
135
+ // Skip comments
136
+ if (line.trim().startsWith('//') || line.trim().startsWith('/*')) {
137
+ return;
138
+ }
139
+
140
+ for (const [name, pattern] of Object.entries(patterns)) {
141
+ const matches = line.match(pattern.regex);
142
+ if (matches) {
143
+ matches.forEach(match => {
144
+ // Skip common exceptions
145
+ if (name === 'hexColor' && ['#000', '#fff', '#FFF', '#000000', '#FFFFFF'].includes(match.toUpperCase())) {
146
+ return; // Skip black/white, often intentional
147
+ }
148
+
149
+ violations.push({
150
+ file: filePath,
151
+ line: index + 1,
152
+ column: line.indexOf(match) + 1,
153
+ value: match,
154
+ type: name,
155
+ message: pattern.message,
156
+ suggestion: pattern.suggestion,
157
+ context: line.trim().substring(0, 80)
158
+ });
159
+ });
160
+ }
161
+ }
162
+ });
163
+
164
+ return violations;
165
+ }
166
+
167
+ /**
168
+ * Format violation report
169
+ */
170
+ function formatReport(violations) {
171
+ if (violations.length === 0) {
172
+ return '✅ No token violations found';
173
+ }
174
+
175
+ let report = `⚠️ Found ${violations.length} potential token violations:\n\n`;
176
+
177
+ // Group by file
178
+ const byFile = {};
179
+ violations.forEach(v => {
180
+ if (!byFile[v.file]) byFile[v.file] = [];
181
+ byFile[v.file].push(v);
182
+ });
183
+
184
+ for (const [file, fileViolations] of Object.entries(byFile)) {
185
+ report += `📁 ${file}\n`;
186
+ fileViolations.forEach(v => {
187
+ report += ` Line ${v.line}: ${v.message}\n`;
188
+ report += ` Found: ${v.value}\n`;
189
+ report += ` Suggestion: ${v.suggestion}\n`;
190
+ report += ` Context: ${v.context}\n\n`;
191
+ });
192
+ }
193
+
194
+ // Summary
195
+ const byType = {};
196
+ violations.forEach(v => {
197
+ byType[v.type] = (byType[v.type] || 0) + 1;
198
+ });
199
+
200
+ report += `\n📊 Summary:\n`;
201
+ for (const [type, count] of Object.entries(byType)) {
202
+ report += ` ${patterns[type].message}: ${count}\n`;
203
+ }
204
+
205
+ return report;
206
+ }
207
+
208
+ /**
209
+ * Main
210
+ */
211
+ function main() {
212
+ const options = parseArgs();
213
+
214
+ if (!options.dir) {
215
+ console.error('Error: --dir is required');
216
+ process.exit(1);
217
+ }
218
+
219
+ const dirPath = path.resolve(process.cwd(), options.dir);
220
+
221
+ if (!fs.existsSync(dirPath)) {
222
+ console.error(`Error: Directory not found: ${dirPath}`);
223
+ process.exit(1);
224
+ }
225
+
226
+ console.log(`Scanning ${dirPath} for token violations...\n`);
227
+
228
+ const files = getFiles(dirPath, options.ignore);
229
+ const allViolations = [];
230
+
231
+ for (const file of files) {
232
+ if (shouldSkip(file)) continue;
233
+
234
+ const violations = scanFile(file);
235
+ allViolations.push(...violations);
236
+ }
237
+
238
+ console.log(formatReport(allViolations));
239
+
240
+ // Exit with error code if violations found
241
+ if (allViolations.length > 0) {
242
+ process.exit(1);
243
+ }
244
+ }
245
+
246
+ main();
@@ -0,0 +1,143 @@
1
+ {
2
+ "$schema": "https://design-tokens.org/schema.json",
3
+ "primitive": {
4
+ "color": {
5
+ "gray": {
6
+ "50": { "$value": "#F9FAFB", "$type": "color" },
7
+ "100": { "$value": "#F3F4F6", "$type": "color" },
8
+ "200": { "$value": "#E5E7EB", "$type": "color" },
9
+ "300": { "$value": "#D1D5DB", "$type": "color" },
10
+ "400": { "$value": "#9CA3AF", "$type": "color" },
11
+ "500": { "$value": "#6B7280", "$type": "color" },
12
+ "600": { "$value": "#4B5563", "$type": "color" },
13
+ "700": { "$value": "#374151", "$type": "color" },
14
+ "800": { "$value": "#1F2937", "$type": "color" },
15
+ "900": { "$value": "#111827", "$type": "color" },
16
+ "950": { "$value": "#030712", "$type": "color" }
17
+ },
18
+ "blue": {
19
+ "50": { "$value": "#EFF6FF", "$type": "color" },
20
+ "500": { "$value": "#3B82F6", "$type": "color" },
21
+ "600": { "$value": "#2563EB", "$type": "color" },
22
+ "700": { "$value": "#1D4ED8", "$type": "color" },
23
+ "800": { "$value": "#1E40AF", "$type": "color" }
24
+ },
25
+ "red": {
26
+ "500": { "$value": "#EF4444", "$type": "color" },
27
+ "600": { "$value": "#DC2626", "$type": "color" },
28
+ "700": { "$value": "#B91C1C", "$type": "color" }
29
+ },
30
+ "green": {
31
+ "500": { "$value": "#22C55E", "$type": "color" },
32
+ "600": { "$value": "#16A34A", "$type": "color" }
33
+ },
34
+ "yellow": {
35
+ "500": { "$value": "#EAB308", "$type": "color" }
36
+ },
37
+ "white": { "$value": "#FFFFFF", "$type": "color" }
38
+ },
39
+ "spacing": {
40
+ "0": { "$value": "0", "$type": "dimension" },
41
+ "1": { "$value": "0.25rem", "$type": "dimension" },
42
+ "2": { "$value": "0.5rem", "$type": "dimension" },
43
+ "3": { "$value": "0.75rem", "$type": "dimension" },
44
+ "4": { "$value": "1rem", "$type": "dimension" },
45
+ "5": { "$value": "1.25rem", "$type": "dimension" },
46
+ "6": { "$value": "1.5rem", "$type": "dimension" },
47
+ "8": { "$value": "2rem", "$type": "dimension" },
48
+ "10": { "$value": "2.5rem", "$type": "dimension" },
49
+ "12": { "$value": "3rem", "$type": "dimension" },
50
+ "16": { "$value": "4rem", "$type": "dimension" }
51
+ },
52
+ "fontSize": {
53
+ "xs": { "$value": "0.75rem", "$type": "dimension" },
54
+ "sm": { "$value": "0.875rem", "$type": "dimension" },
55
+ "base": { "$value": "1rem", "$type": "dimension" },
56
+ "lg": { "$value": "1.125rem", "$type": "dimension" },
57
+ "xl": { "$value": "1.25rem", "$type": "dimension" },
58
+ "2xl": { "$value": "1.5rem", "$type": "dimension" },
59
+ "3xl": { "$value": "1.875rem", "$type": "dimension" },
60
+ "4xl": { "$value": "2.25rem", "$type": "dimension" }
61
+ },
62
+ "radius": {
63
+ "none": { "$value": "0", "$type": "dimension" },
64
+ "sm": { "$value": "0.125rem", "$type": "dimension" },
65
+ "default": { "$value": "0.25rem", "$type": "dimension" },
66
+ "md": { "$value": "0.375rem", "$type": "dimension" },
67
+ "lg": { "$value": "0.5rem", "$type": "dimension" },
68
+ "xl": { "$value": "0.75rem", "$type": "dimension" },
69
+ "full": { "$value": "9999px", "$type": "dimension" }
70
+ },
71
+ "shadow": {
72
+ "none": { "$value": "none", "$type": "shadow" },
73
+ "sm": { "$value": "0 1px 2px 0 rgb(0 0 0 / 0.05)", "$type": "shadow" },
74
+ "default": { "$value": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)", "$type": "shadow" },
75
+ "md": { "$value": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)", "$type": "shadow" },
76
+ "lg": { "$value": "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)", "$type": "shadow" }
77
+ },
78
+ "duration": {
79
+ "fast": { "$value": "150ms", "$type": "duration" },
80
+ "normal": { "$value": "200ms", "$type": "duration" },
81
+ "slow": { "$value": "300ms", "$type": "duration" }
82
+ }
83
+ },
84
+ "semantic": {
85
+ "color": {
86
+ "background": { "$value": "{primitive.color.gray.50}", "$type": "color" },
87
+ "foreground": { "$value": "{primitive.color.gray.900}", "$type": "color" },
88
+ "primary": { "$value": "{primitive.color.blue.600}", "$type": "color" },
89
+ "primary-hover": { "$value": "{primitive.color.blue.700}", "$type": "color" },
90
+ "primary-foreground": { "$value": "{primitive.color.white}", "$type": "color" },
91
+ "secondary": { "$value": "{primitive.color.gray.100}", "$type": "color" },
92
+ "secondary-foreground": { "$value": "{primitive.color.gray.900}", "$type": "color" },
93
+ "muted": { "$value": "{primitive.color.gray.100}", "$type": "color" },
94
+ "muted-foreground": { "$value": "{primitive.color.gray.500}", "$type": "color" },
95
+ "destructive": { "$value": "{primitive.color.red.600}", "$type": "color" },
96
+ "destructive-foreground": { "$value": "{primitive.color.white}", "$type": "color" },
97
+ "border": { "$value": "{primitive.color.gray.200}", "$type": "color" },
98
+ "ring": { "$value": "{primitive.color.blue.500}", "$type": "color" }
99
+ },
100
+ "spacing": {
101
+ "component": { "$value": "{primitive.spacing.4}", "$type": "dimension" },
102
+ "section": { "$value": "{primitive.spacing.12}", "$type": "dimension" }
103
+ }
104
+ },
105
+ "component": {
106
+ "button": {
107
+ "bg": { "$value": "{semantic.color.primary}", "$type": "color" },
108
+ "fg": { "$value": "{semantic.color.primary-foreground}", "$type": "color" },
109
+ "hover-bg": { "$value": "{semantic.color.primary-hover}", "$type": "color" },
110
+ "padding-x": { "$value": "{primitive.spacing.4}", "$type": "dimension" },
111
+ "padding-y": { "$value": "{primitive.spacing.2}", "$type": "dimension" },
112
+ "radius": { "$value": "{primitive.radius.md}", "$type": "dimension" },
113
+ "font-size": { "$value": "{primitive.fontSize.sm}", "$type": "dimension" }
114
+ },
115
+ "input": {
116
+ "bg": { "$value": "{semantic.color.background}", "$type": "color" },
117
+ "border": { "$value": "{semantic.color.border}", "$type": "color" },
118
+ "focus-ring": { "$value": "{semantic.color.ring}", "$type": "color" },
119
+ "padding-x": { "$value": "{primitive.spacing.3}", "$type": "dimension" },
120
+ "padding-y": { "$value": "{primitive.spacing.2}", "$type": "dimension" },
121
+ "radius": { "$value": "{primitive.radius.md}", "$type": "dimension" }
122
+ },
123
+ "card": {
124
+ "bg": { "$value": "{primitive.color.white}", "$type": "color" },
125
+ "border": { "$value": "{semantic.color.border}", "$type": "color" },
126
+ "shadow": { "$value": "{primitive.shadow.default}", "$type": "shadow" },
127
+ "padding": { "$value": "{primitive.spacing.6}", "$type": "dimension" },
128
+ "radius": { "$value": "{primitive.radius.lg}", "$type": "dimension" }
129
+ }
130
+ },
131
+ "dark": {
132
+ "semantic": {
133
+ "color": {
134
+ "background": { "$value": "{primitive.color.gray.950}", "$type": "color" },
135
+ "foreground": { "$value": "{primitive.color.gray.50}", "$type": "color" },
136
+ "secondary": { "$value": "{primitive.color.gray.800}", "$type": "color" },
137
+ "muted": { "$value": "{primitive.color.gray.800}", "$type": "color" },
138
+ "muted-foreground": { "$value": "{primitive.color.gray.400}", "$type": "color" },
139
+ "border": { "$value": "{primitive.color.gray.800}", "$type": "color" }
140
+ }
141
+ }
142
+ }
143
+ }
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: slides
3
+ description: Create strategic HTML presentations with Chart.js, design tokens, responsive layouts, copywriting formulas, and contextual slide strategies.
4
+ argument-hint: "[topic] [slide-count]"
5
+ metadata:
6
+ author: claudekit
7
+ version: "1.0.0"
8
+ ---
9
+
10
+ # Slides
11
+
12
+ Strategic HTML presentation design with data visualization.
13
+
14
+ ## When to Use
15
+
16
+ - Marketing presentations and pitch decks
17
+ - Data-driven slides with Chart.js
18
+ - Strategic slide design with layout patterns
19
+ - Copywriting-optimized presentation content
20
+
21
+ ## Subcommands
22
+
23
+ | Subcommand | Description | Reference |
24
+ |------------|-------------|-----------|
25
+ | `create` | Create strategic presentation slides | `references/create.md` |
26
+
27
+ ## References (Knowledge Base)
28
+
29
+ | Topic | File |
30
+ |-------|------|
31
+ | Layout Patterns | `references/layout-patterns.md` |
32
+ | HTML Template | `references/html-template.md` |
33
+ | Copywriting Formulas | `references/copywriting-formulas.md` |
34
+ | Slide Strategies | `references/slide-strategies.md` |
35
+
36
+ ## Routing
37
+
38
+ 1. Parse subcommand from `$ARGUMENTS` (first word)
39
+ 2. Load corresponding `references/{subcommand}.md`
40
+ 3. Execute with remaining arguments
@@ -0,0 +1,84 @@
1
+ # Copywriting Formulas
2
+
3
+ 25 formulas for persuasive slide copy.
4
+
5
+ ## Core Formulas
6
+
7
+ ### PAS (Problem-Agitate-Solution)
8
+ **Use:** Problem slides, pain points
9
+ **Components:** Problem → Agitate → Solution
10
+ **Template:** "[Pain point]? Every [time frame], [consequence]. [Solution] fixes this."
11
+
12
+ ### AIDA (Attention-Interest-Desire-Action)
13
+ **Use:** CTAs, closing slides
14
+ **Components:** Attention → Interest → Desire → Action
15
+ **Template:** "[Bold statement]. [Benefit detail]. [Social proof]. [CTA]."
16
+
17
+ ### FAB (Features-Advantages-Benefits)
18
+ **Use:** Feature slides, product showcases
19
+ **Components:** Feature → Advantage → Benefit
20
+ **Template:** "[Feature] lets you [advantage], so you can [benefit]."
21
+
22
+ ### Cost of Inaction
23
+ **Use:** Agitation slides, urgency
24
+ **Components:** Status Quo → Loss → Time Decay
25
+ **Template:** "Without [solution], you're losing [amount] every [timeframe]."
26
+
27
+ ### Before-After-Bridge
28
+ **Use:** Transformation slides, case studies
29
+ **Components:** Before → After → Bridge
30
+ **Template:** "[Pain point before]. [Desired state after]. [Your solution] is the bridge."
31
+
32
+ ## Formula-to-Slide Mapping
33
+
34
+ | Slide Type | Primary Formula | Emotion |
35
+ |------------|-----------------|---------|
36
+ | Title/Hook | AIDA, Hook | curiosity |
37
+ | Problem | PAS, Agitate | frustration |
38
+ | Cost/Risk | Cost of Inaction | fear |
39
+ | Solution | FAB, BAB | hope |
40
+ | Features | FAB | confidence |
41
+ | Traction | Proof Stack | trust |
42
+ | Social Proof | Testimonial | trust |
43
+ | Pricing | Value Stack | confidence |
44
+ | CTA | AIDA, Urgency | urgency |
45
+
46
+ ## Headline Patterns
47
+
48
+ ### Power Words
49
+ - "Stop [bad thing]"
50
+ - "Get [desired result] in [timeframe]"
51
+ - "The [adjective] way to [action]"
52
+ - "Why [audience] choose [product]"
53
+ - "[Number] ways to [achieve goal]"
54
+
55
+ ### Contrast Patterns
56
+ - "[Old way] is dead. Meet [new way]."
57
+ - "Don't [bad action]. Instead, [good action]."
58
+ - "From [pain point] to [benefit]."
59
+
60
+ ### Social Proof Patterns
61
+ - "[Number]+ [users/companies] trust [product]"
62
+ - "Join [notable company] and [notable company]"
63
+ - "As seen in [publication]"
64
+
65
+ ## Search Commands
66
+
67
+ ```bash
68
+ # Find formula for slide type
69
+ python .claude/skills/design-system/scripts/search-slides.py "problem agitation" -d copy
70
+
71
+ # Get emotion-appropriate formula
72
+ python .claude/skills/design-system/scripts/search-slides.py "urgency cta" -d copy
73
+ ```
74
+
75
+ ## Quick Reference
76
+
77
+ | Need | Use Formula |
78
+ |------|------------|
79
+ | Create urgency | Cost of Inaction, Scarcity |
80
+ | Build trust | Social Proof, Testimonial |
81
+ | Show value | FAB, Value Stack |
82
+ | Drive action | AIDA, CTA |
83
+ | Tell story | BAB, Story Arc |
84
+ | Present data | Proof Stack |
@@ -0,0 +1,4 @@
1
+ Invoke `slides` skill to create persuasive HTML slides using design tokens, Chart.js, and the slide knowledge database.
2
+
3
+ ## Task
4
+ <task>$ARGUMENTS</task>