shellfie-cli 2.0.0 → 2.0.2

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 (44) hide show
  1. package/README.md +1 -1
  2. package/dist/animator.d.ts +8 -0
  3. package/dist/animator.d.ts.map +1 -0
  4. package/dist/animator.js +210 -0
  5. package/dist/animator.js.map +1 -0
  6. package/dist/cli.js +16 -1
  7. package/dist/cli.js.map +1 -1
  8. package/dist/dvd-executor-v2.d.ts +76 -0
  9. package/dist/dvd-executor-v2.d.ts.map +1 -0
  10. package/dist/dvd-executor-v2.js +258 -0
  11. package/dist/dvd-executor-v2.js.map +1 -0
  12. package/dist/dvd-executor.d.ts +144 -0
  13. package/dist/dvd-executor.d.ts.map +1 -0
  14. package/dist/dvd-executor.js +669 -0
  15. package/dist/dvd-executor.js.map +1 -0
  16. package/dist/dvd-parser.d.ts +96 -0
  17. package/dist/dvd-parser.d.ts.map +1 -0
  18. package/dist/dvd-parser.js +279 -0
  19. package/dist/dvd-parser.js.map +1 -0
  20. package/dist/dvd.d.ts +31 -0
  21. package/dist/dvd.d.ts.map +1 -0
  22. package/dist/dvd.js +154 -0
  23. package/dist/dvd.js.map +1 -0
  24. package/dist/frame-animator.d.ts +21 -0
  25. package/dist/frame-animator.d.ts.map +1 -0
  26. package/dist/frame-animator.js +254 -0
  27. package/dist/frame-animator.js.map +1 -0
  28. package/dist/frame-capture.d.ts +16 -0
  29. package/dist/frame-capture.d.ts.map +1 -0
  30. package/dist/frame-capture.js +162 -0
  31. package/dist/frame-capture.js.map +1 -0
  32. package/dist/svg-animator-v2.d.ts +23 -0
  33. package/dist/svg-animator-v2.d.ts.map +1 -0
  34. package/dist/svg-animator-v2.js +134 -0
  35. package/dist/svg-animator-v2.js.map +1 -0
  36. package/dist/svg-animator.d.ts +23 -0
  37. package/dist/svg-animator.d.ts.map +1 -0
  38. package/dist/svg-animator.js +134 -0
  39. package/dist/svg-animator.js.map +1 -0
  40. package/dist/terminal-renderer.d.ts +34 -0
  41. package/dist/terminal-renderer.d.ts.map +1 -0
  42. package/dist/terminal-renderer.js +229 -0
  43. package/dist/terminal-renderer.js.map +1 -0
  44. package/package.json +3 -3
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Transform your terminal output into beautiful SVG screenshots, directly from the command line.
4
4
 
5
5
  ```sh
6
- npm test | npx shellfie --title "Test Results" -o tests.svg
6
+ npm test | npx shellfie -i "npm test" -o tests.svg
7
7
  ```
8
8
 
9
9
  ![npm test](examples/tests.svg)
@@ -0,0 +1,8 @@
1
+ import type { AnimationOptions } from './utils';
2
+ /**
3
+ * Injects animations into a static SVG to create a typing effect.
4
+ * Supports both SMIL and CSS animation methods.
5
+ * Splits tspans into individual characters for true character-by-character animation.
6
+ */
7
+ export declare function injectAnimations(staticSvg: string, config: AnimationOptions): string;
8
+ //# sourceMappingURL=animator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animator.d.ts","sourceRoot":"","sources":["../src/animator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAQhD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAcpF"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.injectAnimations = injectAnimations;
4
+ /**
5
+ * Injects animations into a static SVG to create a typing effect.
6
+ * Supports both SMIL and CSS animation methods.
7
+ * Splits tspans into individual characters for true character-by-character animation.
8
+ */
9
+ function injectAnimations(staticSvg, config) {
10
+ if (!config.enabled)
11
+ return staticSvg;
12
+ // First, split all tspans into character-level tspans
13
+ const characterSvg = splitTspansIntoCharacters(staticSvg);
14
+ const spans = parseSvgTextSpans(characterSvg);
15
+ if (spans.length === 0)
16
+ return staticSvg;
17
+ if (config.method === 'smil') {
18
+ return injectSmilAnimations(characterSvg, spans, config);
19
+ }
20
+ else {
21
+ return injectCssAnimations(characterSvg, spans, config);
22
+ }
23
+ }
24
+ /**
25
+ * Splits all tspans into character-level tspans for character-by-character animation.
26
+ */
27
+ function splitTspansIntoCharacters(svg) {
28
+ const tspanRegex = /<tspan([^>]*)>(.*?)<\/tspan>/gs;
29
+ return svg.replace(tspanRegex, (match, attributes, content) => {
30
+ // Skip truly empty tspans (but NOT spaces - spaces are valid characters!)
31
+ if (!content || content.length === 0) {
32
+ return match;
33
+ }
34
+ // Extract x position from attributes
35
+ const xMatch = attributes.match(/x="([^"]*)"/);
36
+ const baseX = xMatch ? parseFloat(xMatch[1]) : 0;
37
+ // Extract font size from parent text element or use default
38
+ // We'll need to search backwards in the SVG for the font-size
39
+ const fontSizeMatch = svg.match(/font-size="(\d+)"/);
40
+ const fontSize = fontSizeMatch ? parseFloat(fontSizeMatch[1]) : 14;
41
+ // Calculate character width (monospace: ~0.6 * fontSize)
42
+ const charWidth = fontSize * 0.6;
43
+ // Extract text content
44
+ const text = content;
45
+ // Split into individual characters
46
+ const chars = [...text]; // Use spread to handle Unicode correctly
47
+ // Create a tspan for each character with progressive x positions
48
+ const charTspans = chars.map((char, index) => {
49
+ // Calculate x position for this character
50
+ const xPos = baseX + (index * charWidth);
51
+ // Remove x attribute from original attributes (handle both before and after other attrs)
52
+ let attrsWithoutX = attributes.replace(/\s*x="[^"]*"\s*/, ' ').trim();
53
+ // Escape special XML characters
54
+ const escapedChar = char
55
+ .replace(/&/g, '&amp;')
56
+ .replace(/</g, '&lt;')
57
+ .replace(/>/g, '&gt;');
58
+ // CRITICAL: Set initial opacity to 0 so character is hidden until animation starts
59
+ // Always put x first, then other attributes, then opacity
60
+ const finalAttrs = attrsWithoutX ? ` x="${xPos.toFixed(1)}" ${attrsWithoutX} opacity="0"` : ` x="${xPos.toFixed(1)}" opacity="0"`;
61
+ return `<tspan${finalAttrs}>${escapedChar}</tspan>`;
62
+ }).join('');
63
+ return charTspans;
64
+ });
65
+ }
66
+ /**
67
+ * Parses SVG string to find all <tspan> elements.
68
+ */
69
+ function parseSvgTextSpans(svg) {
70
+ const tspanRegex = /<tspan[^>]*>.*?<\/tspan>/gs;
71
+ const matches = [...svg.matchAll(tspanRegex)];
72
+ return matches.map((m) => ({
73
+ element: m[0],
74
+ startIndex: m.index,
75
+ endIndex: m.index + m[0].length,
76
+ }));
77
+ }
78
+ /**
79
+ * Injects SMIL <animate> elements into each tspan for progressive reveal.
80
+ */
81
+ function injectSmilAnimations(svg, spans, config) {
82
+ let animatedSvg = svg;
83
+ let offset = 0;
84
+ // Calculate total animation duration for looping
85
+ const lastCharDelay = calculateDelay(spans.length - 1, config);
86
+ const fadeDuration = 0.1;
87
+ const totalDuration = lastCharDelay + fadeDuration;
88
+ spans.forEach((span, index) => {
89
+ const delay = calculateDelay(index, config);
90
+ const animatedSpan = addSmilAnimation(span.element, delay, fadeDuration, config.loop, totalDuration);
91
+ const diff = animatedSpan.length - span.element.length;
92
+ const start = span.startIndex + offset;
93
+ const end = span.endIndex + offset;
94
+ animatedSvg = animatedSvg.substring(0, start) + animatedSpan + animatedSvg.substring(end);
95
+ offset += diff;
96
+ });
97
+ return animatedSvg;
98
+ }
99
+ /**
100
+ * Adds SMIL animation to a tspan element.
101
+ */
102
+ function addSmilAnimation(tspanElement, delay, duration, loop, totalDuration) {
103
+ // Check if tspan is self-closing or has content
104
+ const isSelfClosing = tspanElement.endsWith('/>');
105
+ if (isSelfClosing) {
106
+ // For self-closing tspans, convert to open/close format and add animation
107
+ const openTag = tspanElement.replace('/>', '>');
108
+ const animateTag = createSmilAnimateTag(delay, duration, loop, totalDuration);
109
+ return openTag + animateTag + '</tspan>';
110
+ }
111
+ // For regular tspans, insert animation before closing tag
112
+ const animateTag = createSmilAnimateTag(delay, duration, loop, totalDuration);
113
+ return tspanElement.replace('</tspan>', animateTag + '</tspan>');
114
+ }
115
+ /**
116
+ * Creates a SMIL <animate> tag.
117
+ * For looping: creates a sequence that fades in, stays visible, then resets and repeats.
118
+ * For non-looping: fades in and stays visible with fill="freeze".
119
+ */
120
+ function createSmilAnimateTag(delay, duration, loop, totalDuration) {
121
+ if (loop) {
122
+ // For looping: each character fades in at its delay time, stays visible, then all reset at once
123
+ // Use begin with delay to start each character's animation at the right time
124
+ // The animation itself is: fade in (0->1) over duration, then reset to 0 at end of total cycle
125
+ const pauseDuration = totalDuration + 0.5; // Add 0.5s pause between loops
126
+ return `<animate attributeName="opacity" values="0;1;1;0" keyTimes="0;${(duration / pauseDuration).toFixed(3)};${((pauseDuration - 0.01) / pauseDuration).toFixed(3)};1" begin="${delay.toFixed(3)}s" dur="${pauseDuration.toFixed(3)}s" repeatCount="indefinite"/>`;
127
+ }
128
+ else {
129
+ // For non-looping: use fill="freeze" to keep final state
130
+ return `<animate attributeName="opacity" from="0" to="1" begin="${delay.toFixed(3)}s" dur="${duration.toFixed(3)}s" fill="freeze"/>`;
131
+ }
132
+ }
133
+ /**
134
+ * Injects CSS animations by adding a stylesheet and classes to each tspan.
135
+ */
136
+ function injectCssAnimations(svg, spans, config) {
137
+ const stylesheet = generateCssStylesheet(spans.length, config);
138
+ // Find the <defs> section or create one
139
+ let animatedSvg = svg;
140
+ const defsMatch = svg.match(/<defs>[\s\S]*?<\/defs>/);
141
+ if (defsMatch) {
142
+ // Insert stylesheet inside existing <defs>
143
+ animatedSvg = svg.replace('</defs>', ` <style>${stylesheet}</style>\n </defs>`);
144
+ }
145
+ else {
146
+ // Create new <defs> section after opening <svg> tag
147
+ const svgOpenMatch = svg.match(/<svg[^>]*>/);
148
+ if (svgOpenMatch) {
149
+ const insertPos = svgOpenMatch.index + svgOpenMatch[0].length;
150
+ animatedSvg = svg.substring(0, insertPos) +
151
+ `\n <defs>\n <style>${stylesheet}</style>\n </defs>` +
152
+ svg.substring(insertPos);
153
+ }
154
+ }
155
+ // Add classes to tspans
156
+ let offset = animatedSvg.length - svg.length; // Account for added stylesheet
157
+ spans.forEach((span, index) => {
158
+ const className = `anim-char-${index}`;
159
+ const modifiedSpan = addClassToTspan(span.element, className);
160
+ const diff = modifiedSpan.length - span.element.length;
161
+ const start = span.startIndex + offset;
162
+ const end = span.endIndex + offset;
163
+ animatedSvg = animatedSvg.substring(0, start) + modifiedSpan + animatedSvg.substring(end);
164
+ offset += diff;
165
+ });
166
+ return animatedSvg;
167
+ }
168
+ /**
169
+ * Generates CSS stylesheet for animations.
170
+ */
171
+ function generateCssStylesheet(spanCount, config) {
172
+ const keyframes = `
173
+ @keyframes fadeIn {
174
+ from { opacity: 0; }
175
+ to { opacity: 1; }
176
+ }
177
+ `;
178
+ const classRules = Array.from({ length: spanCount }, (_, index) => {
179
+ const delay = calculateDelay(index, config);
180
+ const duration = 0.1;
181
+ const fillMode = 'forwards';
182
+ const iteration = config.loop ? 'infinite' : '1';
183
+ return `.anim-char-${index} { opacity: 0; animation: fadeIn ${duration}s ${delay}s ${fillMode}; animation-iteration-count: ${iteration}; }`;
184
+ }).join('\n ');
185
+ return keyframes + '\n ' + classRules;
186
+ }
187
+ /**
188
+ * Adds a class attribute to a tspan element.
189
+ */
190
+ function addClassToTspan(tspanElement, className) {
191
+ // Check if tspan already has a class attribute
192
+ const classMatch = tspanElement.match(/class="([^"]*)"/);
193
+ if (classMatch) {
194
+ // Append to existing class
195
+ return tspanElement.replace(/class="([^"]*)"/, `class="$1 ${className}"`);
196
+ }
197
+ else {
198
+ // Add new class attribute before closing >
199
+ return tspanElement.replace(/<tspan([^>]*)>/, `<tspan$1 class="${className}">`);
200
+ }
201
+ }
202
+ /**
203
+ * Calculates the delay for a given character index based on animation config.
204
+ */
205
+ function calculateDelay(index, config) {
206
+ const baseDelay = (index * config.charDelay) / 1000; // Convert ms to seconds
207
+ const adjustedDelay = baseDelay / config.speed;
208
+ return config.initialDelay + adjustedDelay;
209
+ }
210
+ //# sourceMappingURL=animator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animator.js","sourceRoot":"","sources":["../src/animator.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -11,7 +11,7 @@ const createParser = () => yargs_1.default
11
11
  .scriptName('shellfie')
12
12
  .usage('$0 [options] [file]')
13
13
  .usage('')
14
- .usage('Transform terminal output into beautiful SVG images')
14
+ .usage('Terminal output to beautiful SVGs')
15
15
  .option('output', {
16
16
  alias: 'o',
17
17
  type: 'string',
@@ -23,6 +23,7 @@ const createParser = () => yargs_1.default
23
23
  describe: 'Output filename (without extension)',
24
24
  })
25
25
  .option('stdout', {
26
+ alias: 's',
26
27
  type: 'boolean',
27
28
  describe: 'Output SVG to stdout instead of file',
28
29
  default: false,
@@ -41,6 +42,7 @@ const createParser = () => yargs_1.default
41
42
  describe: 'Color theme',
42
43
  })
43
44
  .option('title', {
45
+ alias: 'i',
44
46
  type: 'string',
45
47
  describe: 'Window title text',
46
48
  })
@@ -55,59 +57,72 @@ const createParser = () => yargs_1.default
55
57
  describe: 'Padding in pixels (single value or "top,right,bottom,left")',
56
58
  })
57
59
  .option('font-size', {
60
+ alias: 'f',
58
61
  type: 'number',
59
62
  describe: 'Font size in pixels',
60
63
  default: 14,
61
64
  })
62
65
  .option('line-height', {
66
+ alias: 'l',
63
67
  type: 'number',
64
68
  describe: 'Line height multiplier',
65
69
  default: 1.4,
66
70
  })
67
71
  .option('watermark', {
72
+ alias: 'W',
68
73
  type: 'string',
69
74
  describe: 'Watermark text (bottom-right corner)',
70
75
  })
71
76
  .option('no-controls', {
77
+ alias: 'C',
72
78
  type: 'boolean',
73
79
  describe: 'Hide window control buttons',
74
80
  default: false,
75
81
  })
76
82
  .option('no-custom-glyphs', {
83
+ alias: 'G',
77
84
  type: 'boolean',
78
85
  describe: 'Use font glyphs instead of pixel-perfect box drawing',
79
86
  default: false,
80
87
  })
81
88
  .option('font-family', {
89
+ alias: 'F',
82
90
  type: 'string',
83
91
  describe: 'CSS font-family string',
84
92
  })
85
93
  .option('embed-font', {
94
+ alias: 'e',
86
95
  type: 'boolean',
87
96
  describe: 'Embed system font in SVG (for portability)',
88
97
  default: false,
89
98
  })
90
99
  .option('header-height', {
100
+ alias: 'H',
91
101
  type: 'number',
92
102
  describe: 'Custom header bar height (enables header)',
93
103
  })
94
104
  .option('header-color', {
105
+ alias: 'c',
95
106
  type: 'string',
96
107
  describe: 'Header background color (hex)',
97
108
  })
98
109
  .option('footer-height', {
110
+ alias: 'r',
99
111
  type: 'number',
100
112
  describe: 'Footer bar height (enables footer)',
101
113
  })
102
114
  .option('footer-color', {
115
+ alias: 'R',
103
116
  type: 'string',
104
117
  describe: 'Footer background color (hex)',
105
118
  })
106
119
  .option('list-themes', {
120
+ alias: 'L',
107
121
  type: 'boolean',
108
122
  describe: 'List all available themes',
109
123
  })
110
124
  .option('list-templates', {
125
+ alias: 'P',
111
126
  type: 'boolean',
112
127
  describe: 'List all available templates',
113
128
  })
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * DVD Command Executor V2
3
+ * Executes real commands with typing effect and cursor
4
+ */
5
+ import type { DVDScript } from './dvd-parser';
6
+ import { type TerminalState } from './terminal-renderer';
7
+ export interface TerminalFrame {
8
+ timestamp: number;
9
+ svg: string;
10
+ state: TerminalState;
11
+ }
12
+ export interface SimulatorContext {
13
+ lines: string[];
14
+ currentLine: string;
15
+ cursorX: number;
16
+ cursorY: number;
17
+ frames: TerminalFrame[];
18
+ clipboard: string;
19
+ startTime: number;
20
+ width: number;
21
+ height: number;
22
+ fontSize: number;
23
+ title?: string;
24
+ template?: 'macos' | 'windows' | 'minimal';
25
+ }
26
+ export interface DVDExecutorOptions {
27
+ width?: number;
28
+ height?: number;
29
+ fontSize?: number;
30
+ title?: string;
31
+ template?: 'macos' | 'windows' | 'minimal';
32
+ onFrame?: (frame: TerminalFrame) => void;
33
+ onProgress?: (current: number, total: number) => void;
34
+ }
35
+ export declare class DVDExecutorV2 {
36
+ private context;
37
+ private options;
38
+ constructor(options?: DVDExecutorOptions);
39
+ /**
40
+ * Capture current terminal state as a frame
41
+ */
42
+ private captureFrame;
43
+ /**
44
+ * Execute Type command - simulate typing character by character
45
+ */
46
+ private executeType;
47
+ /**
48
+ * Execute Enter - run the command and capture output
49
+ */
50
+ private executeEnter;
51
+ /**
52
+ * Execute arrow keys
53
+ */
54
+ private executeArrow;
55
+ /**
56
+ * Execute Backspace
57
+ */
58
+ private executeBackspace;
59
+ /**
60
+ * Execute a single command
61
+ */
62
+ private executeCommand;
63
+ /**
64
+ * Execute complete DVD script
65
+ */
66
+ execute(script: DVDScript): Promise<TerminalFrame[]>;
67
+ /**
68
+ * Get all captured frames
69
+ */
70
+ getFrames(): TerminalFrame[];
71
+ /**
72
+ * Cleanup (no-op for simulation)
73
+ */
74
+ cleanup(): Promise<void>;
75
+ }
76
+ //# sourceMappingURL=dvd-executor-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dvd-executor-v2.d.ts","sourceRoot":"","sources":["../src/dvd-executor-v2.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIjG,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,OAAO,CAAqB;gBAExB,OAAO,GAAE,kBAAuB;IAmB5C;;OAEG;IACH,OAAO,CAAC,YAAY;IA6BpB;;OAEG;YACW,WAAW;IAazB;;OAEG;YACW,YAAY;IA2D1B;;OAEG;YACW,YAAY;IA4B1B;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,cAAc;IAsD5B;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA6B1D;;OAEG;IACH,SAAS,IAAI,aAAa,EAAE;IAI5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}