@svg-gen/tech-svg-generator 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.
- package/LICENSE +21 -0
- package/README.md +320 -0
- package/dist/cartoon.d.ts +53 -0
- package/dist/cartoon.d.ts.map +1 -0
- package/dist/cartoon.js +233 -0
- package/dist/characters.d.ts +47 -0
- package/dist/characters.d.ts.map +1 -0
- package/dist/characters.js +422 -0
- package/dist/generator.d.ts +36 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +103 -0
- package/dist/icons.d.ts +10 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +44 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/parser.d.ts +83 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +204 -0
- package/dist/primitives.d.ts +42 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +141 -0
- package/dist/scenes.d.ts +11 -0
- package/dist/scenes.d.ts.map +1 -0
- package/dist/scenes.js +257 -0
- package/dist/themes.d.ts +32 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +106 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/package.json +65 -0
package/dist/scenes.js
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scene definitions for different technical contexts
|
|
3
|
+
*/
|
|
4
|
+
import { card, metric, status, arrow, codeSnippet, terminalBlock, titleBar } from './primitives.js';
|
|
5
|
+
/**
|
|
6
|
+
* Architecture: 3 cards in a row with arrows
|
|
7
|
+
*/
|
|
8
|
+
const architecture = (title, c, w, h) => `
|
|
9
|
+
${card(80, 100, 120, 100, 'globe', 'Client', c, c.cyan)}
|
|
10
|
+
${card(290, 100, 120, 100, 'server', 'Server', c, c.blue)}
|
|
11
|
+
${card(500, 100, 120, 100, 'database', 'Database', c, c.purple)}
|
|
12
|
+
${arrow(200, 150, 290, 150, c.cyan, 'HTTP', false, c)}
|
|
13
|
+
${arrow(410, 150, 500, 150, c.purple, 'SQL', false, c)}
|
|
14
|
+
${metric(80, 250, 'Latency', '12', c, 'ms', c.green)}
|
|
15
|
+
${metric(210, 250, 'Uptime', '99.9', c, '%', c.green)}
|
|
16
|
+
${status(360, 280, 'ok', 'All systems operational', c)}
|
|
17
|
+
${titleBar(title, w, h, c)}
|
|
18
|
+
`;
|
|
19
|
+
/**
|
|
20
|
+
* Scaling: Load balancer + multiple nodes
|
|
21
|
+
*/
|
|
22
|
+
const scaling = (title, c, w, h) => `
|
|
23
|
+
${card(290, 50, 120, 80, 'cloud', 'Load Balancer', c, c.cyan)}
|
|
24
|
+
${card(80, 180, 100, 80, 'server', 'Node 1', c, c.green)}
|
|
25
|
+
${card(220, 180, 100, 80, 'server', 'Node 2', c, c.green)}
|
|
26
|
+
${card(360, 180, 100, 80, 'server', 'Node 3', c, c.green)}
|
|
27
|
+
${card(500, 180, 100, 80, 'server', 'Node 4', c, c.orange)}
|
|
28
|
+
${arrow(350, 130, 130, 180, c.cyan, '', false, c)}
|
|
29
|
+
${arrow(350, 130, 270, 180, c.cyan, '', false, c)}
|
|
30
|
+
${arrow(350, 130, 410, 180, c.cyan, '', false, c)}
|
|
31
|
+
${arrow(350, 130, 550, 180, c.cyan, '', false, c)}
|
|
32
|
+
${metric(150, 290, 'RPS', '45K', c, '', c.blue)}
|
|
33
|
+
${metric(290, 290, 'Nodes', '4', c, '', c.green)}
|
|
34
|
+
${metric(430, 290, 'CPU', '72', c, '%', c.orange)}
|
|
35
|
+
${titleBar(title, w, h, c)}
|
|
36
|
+
`;
|
|
37
|
+
/**
|
|
38
|
+
* Database: Primary + Replicas
|
|
39
|
+
*/
|
|
40
|
+
const database = (title, c, w, h) => `
|
|
41
|
+
${card(180, 80, 140, 100, 'database', 'Primary', c, c.purple)}
|
|
42
|
+
${card(380, 80, 140, 100, 'database', 'Replica', c, c.cyan)}
|
|
43
|
+
${arrow(320, 130, 380, 130, c.green, 'sync', false, c)}
|
|
44
|
+
${metric(80, 220, 'QPS', '2.3K', c, '', c.purple)}
|
|
45
|
+
${metric(210, 220, 'Latency', '4', c, 'ms', c.green)}
|
|
46
|
+
${metric(340, 220, 'Connections', '128', c, '', c.blue)}
|
|
47
|
+
${metric(470, 220, 'Cache Hit', '94', c, '%', c.green)}
|
|
48
|
+
${status(200, 320, 'ok', 'Replication healthy', c)}
|
|
49
|
+
${status(400, 320, 'ok', 'Replica in sync', c)}
|
|
50
|
+
${titleBar(title, w, h, c)}
|
|
51
|
+
`;
|
|
52
|
+
/**
|
|
53
|
+
* Deployment: CI/CD Pipeline
|
|
54
|
+
*/
|
|
55
|
+
const deployment = (title, c, w, h) => `
|
|
56
|
+
${card(60, 120, 100, 80, 'code', 'Code', c, c.muted)}
|
|
57
|
+
${card(200, 120, 100, 80, 'git', 'Build', c, c.orange)}
|
|
58
|
+
${card(340, 120, 100, 80, 'target', 'Test', c, c.blue)}
|
|
59
|
+
${card(480, 120, 100, 80, 'rocket', 'Deploy', c, c.green)}
|
|
60
|
+
${arrow(160, 160, 200, 160, c.muted, '', false, c)}
|
|
61
|
+
${arrow(300, 160, 340, 160, c.orange, '', false, c)}
|
|
62
|
+
${arrow(440, 160, 480, 160, c.blue, '', false, c)}
|
|
63
|
+
${metric(140, 240, 'Build', '2.3', c, 'min', c.orange)}
|
|
64
|
+
${metric(290, 240, 'Tests', '141', c, '', c.green)}
|
|
65
|
+
${metric(440, 240, 'Coverage', '87', c, '%', c.blue)}
|
|
66
|
+
${status(280, 330, 'ok', 'Pipeline passed • Ready for production', c)}
|
|
67
|
+
${titleBar(title, w, h, c)}
|
|
68
|
+
`;
|
|
69
|
+
/**
|
|
70
|
+
* Security: Firewall flow
|
|
71
|
+
*/
|
|
72
|
+
const security = (title, c, w, h) => `
|
|
73
|
+
${card(80, 120, 120, 90, 'globe', 'Internet', c, c.muted)}
|
|
74
|
+
${card(290, 120, 120, 90, 'shield', 'Firewall', c, c.green)}
|
|
75
|
+
${card(500, 120, 120, 90, 'lock', 'Auth', c, c.purple)}
|
|
76
|
+
${arrow(200, 165, 290, 165, c.muted, 'HTTPS', false, c)}
|
|
77
|
+
${arrow(410, 165, 500, 165, c.green, 'mTLS', false, c)}
|
|
78
|
+
${metric(100, 250, 'Blocked', '847', c, '', c.red)}
|
|
79
|
+
${metric(250, 250, 'Auth Rate', '99.2', c, '%', c.green)}
|
|
80
|
+
${metric(400, 250, 'Threats', '0', c, '', c.green)}
|
|
81
|
+
${status(280, 340, 'ok', 'Zero Trust • All traffic encrypted', c)}
|
|
82
|
+
${titleBar(title, w, h, c)}
|
|
83
|
+
`;
|
|
84
|
+
/**
|
|
85
|
+
* Debugging: Code + Terminal side by side
|
|
86
|
+
*/
|
|
87
|
+
const debugging = (title, c, w, h) => `
|
|
88
|
+
${codeSnippet(40, 50, 300, 130, [
|
|
89
|
+
{ t: 'async function fetch() {' },
|
|
90
|
+
{ t: ' const res = await api.get();', hl: true },
|
|
91
|
+
{ t: ' return res.data;' },
|
|
92
|
+
{ t: '}' }
|
|
93
|
+
], c, 'debug.ts')}
|
|
94
|
+
${terminalBlock(360, 50, 300, 130, [
|
|
95
|
+
{ t: 'node debug.ts' },
|
|
96
|
+
{ t: 'TypeError: Cannot read undefined', err: true },
|
|
97
|
+
{ t: ' at fetch (debug.ts:2)', err: true }
|
|
98
|
+
], c)}
|
|
99
|
+
${card(150, 220, 120, 80, 'alert', 'Bug Found', c, c.red)}
|
|
100
|
+
${card(430, 220, 120, 80, 'check', 'Fixed', c, c.green)}
|
|
101
|
+
${arrow(270, 260, 430, 260, c.orange, 'debug', false, c)}
|
|
102
|
+
${status(280, 340, 'ok', 'Issue resolved', c)}
|
|
103
|
+
${titleBar(title, w, h, c)}
|
|
104
|
+
`;
|
|
105
|
+
/**
|
|
106
|
+
* Testing: Test results
|
|
107
|
+
*/
|
|
108
|
+
const testing = (title, c, w, h) => `
|
|
109
|
+
${codeSnippet(40, 50, 280, 120, [
|
|
110
|
+
{ t: 'describe("API", () => {' },
|
|
111
|
+
{ t: ' it("returns 200", async () => {', hl: true },
|
|
112
|
+
{ t: ' expect(res.status).toBe(200);' },
|
|
113
|
+
{ t: ' });' }
|
|
114
|
+
], c, 'api.test.ts')}
|
|
115
|
+
${metric(360, 50, 'Passed', '141', c, '', c.green)}
|
|
116
|
+
${metric(490, 50, 'Failed', '1', c, '', c.red)}
|
|
117
|
+
${metric(360, 120, 'Coverage', '87', c, '%', c.blue)}
|
|
118
|
+
${metric(490, 120, 'Duration', '4.2', c, 's', c.muted)}
|
|
119
|
+
${card(150, 220, 120, 80, 'target', 'Unit', c, c.green)}
|
|
120
|
+
${card(310, 220, 120, 80, 'layers', 'Integration', c, c.blue)}
|
|
121
|
+
${card(470, 220, 120, 80, 'globe', 'E2E', c, c.purple)}
|
|
122
|
+
${status(280, 340, 'ok', 'All test suites passed', c)}
|
|
123
|
+
${titleBar(title, w, h, c)}
|
|
124
|
+
`;
|
|
125
|
+
/**
|
|
126
|
+
* Performance: Metrics focused
|
|
127
|
+
*/
|
|
128
|
+
const performance = (title, c, w, h) => `
|
|
129
|
+
${metric(80, 60, 'P99 Latency', '23', c, 'ms', c.green)}
|
|
130
|
+
${metric(210, 60, 'RPS', '45K', c, '', c.blue)}
|
|
131
|
+
${metric(340, 60, 'Error Rate', '0.1', c, '%', c.green)}
|
|
132
|
+
${metric(470, 60, 'CPU', '45', c, '%', c.orange)}
|
|
133
|
+
${terminalBlock(120, 150, 460, 100, [
|
|
134
|
+
{ t: '$ perf analyze --profile' },
|
|
135
|
+
{ t: 'Hotspot: db.query() - 45% CPU', err: true },
|
|
136
|
+
{ t: '✓ Optimized: -65% latency', ok: true }
|
|
137
|
+
], c)}
|
|
138
|
+
${card(200, 280, 120, 70, 'zap', 'Optimized', c, c.green)}
|
|
139
|
+
${card(380, 280, 120, 70, 'activity', 'Monitoring', c, c.blue)}
|
|
140
|
+
${titleBar(title, w, h, c)}
|
|
141
|
+
`;
|
|
142
|
+
/**
|
|
143
|
+
* API: Request/Response
|
|
144
|
+
*/
|
|
145
|
+
const api = (title, c, w, h) => `
|
|
146
|
+
${codeSnippet(40, 50, 300, 120, [
|
|
147
|
+
{ t: 'GET /api/v2/users HTTP/1.1' },
|
|
148
|
+
{ t: 'Authorization: Bearer ***', hl: true },
|
|
149
|
+
{ t: 'Accept: application/json' }
|
|
150
|
+
], c, 'request.http')}
|
|
151
|
+
${codeSnippet(360, 50, 300, 120, [
|
|
152
|
+
{ t: '200 OK (12ms)' },
|
|
153
|
+
{ t: '{ "users": [...] }', hl: true },
|
|
154
|
+
{ t: 'Content-Type: application/json' }
|
|
155
|
+
], c, 'response')}
|
|
156
|
+
${metric(80, 200, 'RPS', '8.4K', c, '', c.blue)}
|
|
157
|
+
${metric(210, 200, 'P99', '45', c, 'ms', c.green)}
|
|
158
|
+
${metric(340, 200, 'Errors', '0.01', c, '%', c.green)}
|
|
159
|
+
${metric(470, 200, 'Cache', '78', c, '%', c.cyan)}
|
|
160
|
+
${status(280, 300, 'ok', 'API healthy • Rate limit OK', c)}
|
|
161
|
+
${titleBar(title, w, h, c)}
|
|
162
|
+
`;
|
|
163
|
+
/**
|
|
164
|
+
* Monitoring: Dashboard
|
|
165
|
+
*/
|
|
166
|
+
const monitoring = (title, c, w, h) => `
|
|
167
|
+
${metric(80, 50, 'Uptime', '99.99', c, '%', c.green)}
|
|
168
|
+
${metric(210, 50, 'Alerts', '0', c, '', c.green)}
|
|
169
|
+
${metric(340, 50, 'P95', '23', c, 'ms', c.blue)}
|
|
170
|
+
${metric(470, 50, 'Memory', '62', c, '%', c.orange)}
|
|
171
|
+
${card(120, 150, 120, 80, 'activity', 'Metrics', c, c.blue)}
|
|
172
|
+
${card(290, 150, 120, 80, 'eye', 'Traces', c, c.purple)}
|
|
173
|
+
${card(460, 150, 120, 80, 'terminal', 'Logs', c, c.cyan)}
|
|
174
|
+
${metric(80, 270, 'Events', '1.2M', c, '/day', c.muted)}
|
|
175
|
+
${metric(210, 270, 'Retention', '30', c, 'days', c.muted)}
|
|
176
|
+
${status(380, 300, 'ok', 'All systems healthy', c)}
|
|
177
|
+
${titleBar(title, w, h, c)}
|
|
178
|
+
`;
|
|
179
|
+
/**
|
|
180
|
+
* Frontend: Web vitals
|
|
181
|
+
*/
|
|
182
|
+
const frontend = (title, c, w, h) => `
|
|
183
|
+
${metric(80, 50, 'LCP', '1.2', c, 's', c.green)}
|
|
184
|
+
${metric(210, 50, 'FID', '45', c, 'ms', c.green)}
|
|
185
|
+
${metric(340, 50, 'CLS', '0.02', c, '', c.green)}
|
|
186
|
+
${metric(470, 50, 'TTI', '2.1', c, 's', c.orange)}
|
|
187
|
+
${codeSnippet(150, 140, 400, 100, [
|
|
188
|
+
{ t: 'const App = () => {' },
|
|
189
|
+
{ t: ' return <Suspense fallback={<Loader />}>', hl: true },
|
|
190
|
+
{ t: ' <MainContent />' },
|
|
191
|
+
{ t: ' </Suspense>;' }
|
|
192
|
+
], c, 'App.tsx')}
|
|
193
|
+
${card(200, 280, 120, 70, 'globe', 'Browser', c, c.cyan)}
|
|
194
|
+
${card(380, 280, 120, 70, 'zap', 'Optimized', c, c.green)}
|
|
195
|
+
${titleBar(title, w, h, c)}
|
|
196
|
+
`;
|
|
197
|
+
/**
|
|
198
|
+
* Success: Celebration
|
|
199
|
+
*/
|
|
200
|
+
const success = (title, c, w, h) => `
|
|
201
|
+
${card(290, 60, 120, 100, 'check', 'Success!', c, c.green)}
|
|
202
|
+
${metric(80, 200, 'Uptime', '100', c, '%', c.green)}
|
|
203
|
+
${metric(210, 200, 'Users', '12.4K', c, '', c.blue)}
|
|
204
|
+
${metric(340, 200, 'Revenue', '+24', c, '%', c.green)}
|
|
205
|
+
${metric(470, 200, 'NPS', '72', c, '', c.purple)}
|
|
206
|
+
${status(200, 320, 'ok', 'Deployment successful', c)}
|
|
207
|
+
${status(400, 320, 'ok', 'Zero downtime', c)}
|
|
208
|
+
${titleBar(title, w, h, c)}
|
|
209
|
+
`;
|
|
210
|
+
/**
|
|
211
|
+
* Error: Incident
|
|
212
|
+
*/
|
|
213
|
+
const error = (title, c, w, h) => `
|
|
214
|
+
${card(290, 50, 120, 90, 'alert', 'Incident', c, c.red)}
|
|
215
|
+
${terminalBlock(150, 160, 400, 100, [
|
|
216
|
+
{ t: '$ kubectl logs pod/api-7d8f9' },
|
|
217
|
+
{ t: 'ERROR: OOMKilled - Exit code 137', err: true },
|
|
218
|
+
{ t: 'Memory limit exceeded: 512Mi', err: true }
|
|
219
|
+
], c)}
|
|
220
|
+
${metric(100, 290, 'Status', '503', c, '', c.red)}
|
|
221
|
+
${metric(240, 290, 'Errors', '2.3K', c, '', c.red)}
|
|
222
|
+
${metric(380, 290, 'MTTR', '4.2', c, 'min', c.orange)}
|
|
223
|
+
${status(280, 370, 'error', 'Service degraded • Investigating', c)}
|
|
224
|
+
${titleBar(title, w, h, c)}
|
|
225
|
+
`;
|
|
226
|
+
/**
|
|
227
|
+
* Default: Simple overview
|
|
228
|
+
*/
|
|
229
|
+
const defaultScene = (title, c, w, h) => `
|
|
230
|
+
${card(290, 80, 120, 100, 'layers', 'System', c, c.blue)}
|
|
231
|
+
${metric(80, 220, 'Requests', '8.2K', c, '/s', c.blue)}
|
|
232
|
+
${metric(220, 220, 'Latency', '12', c, 'ms', c.green)}
|
|
233
|
+
${metric(360, 220, 'Errors', '0.1', c, '%', c.green)}
|
|
234
|
+
${metric(500, 220, 'Uptime', '99.9', c, '%', c.green)}
|
|
235
|
+
${status(280, 340, 'ok', 'All systems operational', c)}
|
|
236
|
+
${titleBar(title, w, h, c)}
|
|
237
|
+
`;
|
|
238
|
+
/**
|
|
239
|
+
* All available scenes
|
|
240
|
+
*/
|
|
241
|
+
export const SCENES = {
|
|
242
|
+
architecture,
|
|
243
|
+
scaling,
|
|
244
|
+
database,
|
|
245
|
+
deployment,
|
|
246
|
+
security,
|
|
247
|
+
debugging,
|
|
248
|
+
testing,
|
|
249
|
+
performance,
|
|
250
|
+
api,
|
|
251
|
+
monitoring,
|
|
252
|
+
frontend,
|
|
253
|
+
success,
|
|
254
|
+
error,
|
|
255
|
+
default: defaultScene,
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=scenes.js.map
|
package/dist/themes.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme color definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface ThemeColors {
|
|
5
|
+
bg: string;
|
|
6
|
+
card: string;
|
|
7
|
+
elevated: string;
|
|
8
|
+
border: string;
|
|
9
|
+
text: string;
|
|
10
|
+
muted: string;
|
|
11
|
+
dim: string;
|
|
12
|
+
blue: string;
|
|
13
|
+
purple: string;
|
|
14
|
+
green: string;
|
|
15
|
+
cyan: string;
|
|
16
|
+
orange: string;
|
|
17
|
+
red: string;
|
|
18
|
+
pink: string;
|
|
19
|
+
}
|
|
20
|
+
export interface Theme {
|
|
21
|
+
name: string;
|
|
22
|
+
colors: ThemeColors;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Available themes
|
|
26
|
+
*/
|
|
27
|
+
export declare const THEMES: Record<string, Theme>;
|
|
28
|
+
/**
|
|
29
|
+
* Get theme by name, defaults to github-dark
|
|
30
|
+
*/
|
|
31
|
+
export declare function getTheme(name?: string): Theme;
|
|
32
|
+
//# sourceMappingURL=themes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB;AA8FD;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAKxC,CAAC;AAEF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAG7C"}
|
package/dist/themes.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub-inspired dark theme (default)
|
|
3
|
+
*/
|
|
4
|
+
const githubDark = {
|
|
5
|
+
name: 'github-dark',
|
|
6
|
+
colors: {
|
|
7
|
+
bg: '#0d1117',
|
|
8
|
+
card: '#161b22',
|
|
9
|
+
elevated: '#21262d',
|
|
10
|
+
border: '#30363d',
|
|
11
|
+
text: '#e6edf3',
|
|
12
|
+
muted: '#8b949e',
|
|
13
|
+
dim: '#6e7681',
|
|
14
|
+
blue: '#58a6ff',
|
|
15
|
+
purple: '#a371f7',
|
|
16
|
+
green: '#3fb950',
|
|
17
|
+
cyan: '#39c5cf',
|
|
18
|
+
orange: '#d29922',
|
|
19
|
+
red: '#f85149',
|
|
20
|
+
pink: '#f778ba',
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Dracula theme
|
|
25
|
+
*/
|
|
26
|
+
const dracula = {
|
|
27
|
+
name: 'dracula',
|
|
28
|
+
colors: {
|
|
29
|
+
bg: '#282a36',
|
|
30
|
+
card: '#44475a',
|
|
31
|
+
elevated: '#6272a4',
|
|
32
|
+
border: '#44475a',
|
|
33
|
+
text: '#f8f8f2',
|
|
34
|
+
muted: '#6272a4',
|
|
35
|
+
dim: '#44475a',
|
|
36
|
+
blue: '#8be9fd',
|
|
37
|
+
purple: '#bd93f9',
|
|
38
|
+
green: '#50fa7b',
|
|
39
|
+
cyan: '#8be9fd',
|
|
40
|
+
orange: '#ffb86c',
|
|
41
|
+
red: '#ff5555',
|
|
42
|
+
pink: '#ff79c6',
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Nord theme
|
|
47
|
+
*/
|
|
48
|
+
const nord = {
|
|
49
|
+
name: 'nord',
|
|
50
|
+
colors: {
|
|
51
|
+
bg: '#2e3440',
|
|
52
|
+
card: '#3b4252',
|
|
53
|
+
elevated: '#434c5e',
|
|
54
|
+
border: '#4c566a',
|
|
55
|
+
text: '#eceff4',
|
|
56
|
+
muted: '#d8dee9',
|
|
57
|
+
dim: '#4c566a',
|
|
58
|
+
blue: '#88c0d0',
|
|
59
|
+
purple: '#b48ead',
|
|
60
|
+
green: '#a3be8c',
|
|
61
|
+
cyan: '#8fbcbb',
|
|
62
|
+
orange: '#d08770',
|
|
63
|
+
red: '#bf616a',
|
|
64
|
+
pink: '#b48ead',
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* One Dark theme
|
|
69
|
+
*/
|
|
70
|
+
const oneDark = {
|
|
71
|
+
name: 'one-dark',
|
|
72
|
+
colors: {
|
|
73
|
+
bg: '#282c34',
|
|
74
|
+
card: '#21252b',
|
|
75
|
+
elevated: '#2c313a',
|
|
76
|
+
border: '#3e4451',
|
|
77
|
+
text: '#abb2bf',
|
|
78
|
+
muted: '#5c6370',
|
|
79
|
+
dim: '#4b5263',
|
|
80
|
+
blue: '#61afef',
|
|
81
|
+
purple: '#c678dd',
|
|
82
|
+
green: '#98c379',
|
|
83
|
+
cyan: '#56b6c2',
|
|
84
|
+
orange: '#d19a66',
|
|
85
|
+
red: '#e06c75',
|
|
86
|
+
pink: '#c678dd',
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Available themes
|
|
91
|
+
*/
|
|
92
|
+
export const THEMES = {
|
|
93
|
+
'github-dark': githubDark,
|
|
94
|
+
'dracula': dracula,
|
|
95
|
+
'nord': nord,
|
|
96
|
+
'one-dark': oneDark,
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Get theme by name, defaults to github-dark
|
|
100
|
+
*/
|
|
101
|
+
export function getTheme(name) {
|
|
102
|
+
if (!name)
|
|
103
|
+
return githubDark;
|
|
104
|
+
return THEMES[name] || githubDark;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=themes.js.map
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Available scene types for SVG generation
|
|
3
|
+
*/
|
|
4
|
+
export type SceneType = 'architecture' | 'scaling' | 'database' | 'deployment' | 'security' | 'debugging' | 'testing' | 'performance' | 'api' | 'monitoring' | 'frontend' | 'success' | 'error' | 'default';
|
|
5
|
+
/**
|
|
6
|
+
* Options for SVG generation
|
|
7
|
+
*/
|
|
8
|
+
export interface GenerateOptions {
|
|
9
|
+
/** Width of the SVG (default: 700) */
|
|
10
|
+
width?: number;
|
|
11
|
+
/** Height of the SVG (default: 420) */
|
|
12
|
+
height?: number;
|
|
13
|
+
/** Theme name or custom theme colors */
|
|
14
|
+
theme?: string;
|
|
15
|
+
/** Force a specific scene type instead of auto-detection */
|
|
16
|
+
scene?: SceneType;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Result of SVG generation
|
|
20
|
+
*/
|
|
21
|
+
export interface GenerateResult {
|
|
22
|
+
/** The generated SVG string */
|
|
23
|
+
svg: string;
|
|
24
|
+
/** The detected or specified scene type */
|
|
25
|
+
scene: SceneType;
|
|
26
|
+
/** Width of the generated SVG */
|
|
27
|
+
width: number;
|
|
28
|
+
/** Height of the generated SVG */
|
|
29
|
+
height: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Code line for code snippet component
|
|
33
|
+
*/
|
|
34
|
+
export interface CodeLine {
|
|
35
|
+
/** The text content of the line */
|
|
36
|
+
t: string;
|
|
37
|
+
/** Whether to highlight this line */
|
|
38
|
+
hl?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Terminal line for terminal block component
|
|
42
|
+
*/
|
|
43
|
+
export interface TerminalLine {
|
|
44
|
+
/** The text content of the line */
|
|
45
|
+
t: string;
|
|
46
|
+
/** Whether this is an error line */
|
|
47
|
+
err?: boolean;
|
|
48
|
+
/** Whether this is a success line */
|
|
49
|
+
ok?: boolean;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,SAAS,GACT,UAAU,GACV,YAAY,GACZ,UAAU,GACV,WAAW,GACX,SAAS,GACT,aAAa,GACb,KAAK,GACL,YAAY,GACZ,UAAU,GACV,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,KAAK,EAAE,SAAS,CAAC;IACjB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,qCAAqC;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,qCAAqC;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;CACd"}
|
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@svg-gen/tech-svg-generator",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Generate clean, professional SVG illustrations for technical content. Perfect for blogs, documentation, and presentations.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist/**/*.js",
|
|
17
|
+
"dist/**/*.d.ts",
|
|
18
|
+
"dist/**/*.d.ts.map",
|
|
19
|
+
"!dist/**/*.test.*",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"dev": "tsc --watch",
|
|
26
|
+
"test": "node --test dist/*.test.js",
|
|
27
|
+
"prepublishOnly": "pnpm run build",
|
|
28
|
+
"demo": "node examples/demo.js"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"svg",
|
|
32
|
+
"illustration",
|
|
33
|
+
"technical",
|
|
34
|
+
"blog",
|
|
35
|
+
"documentation",
|
|
36
|
+
"diagram",
|
|
37
|
+
"generator",
|
|
38
|
+
"dark-theme",
|
|
39
|
+
"github-style"
|
|
40
|
+
],
|
|
41
|
+
"author": "Satishkumar Dhule",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "https://github.com/open-tech-svg-gen/tech-svg-generator"
|
|
46
|
+
},
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/open-tech-svg-gen/tech-svg-generator/issues"
|
|
49
|
+
},
|
|
50
|
+
"homepage": "https://github.com/open-tech-svg-gen/tech-svg-generator#readme",
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.0.0"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
56
|
+
"@semantic-release/git": "^10.0.1",
|
|
57
|
+
"@types/js-yaml": "^4.0.9",
|
|
58
|
+
"@types/node": "^22.0.0",
|
|
59
|
+
"semantic-release": "^24.0.0",
|
|
60
|
+
"typescript": "^5.3.0"
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"js-yaml": "^4.1.1"
|
|
64
|
+
}
|
|
65
|
+
}
|