appshot-cli 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +377 -5
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +4 -1
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/gradients.d.ts +3 -0
- package/dist/commands/gradients.d.ts.map +1 -0
- package/dist/commands/gradients.js +343 -0
- package/dist/commands/gradients.js.map +1 -0
- package/dist/commands/style.d.ts +3 -0
- package/dist/commands/style.d.ts.map +1 -0
- package/dist/commands/style.js +375 -0
- package/dist/commands/style.js.map +1 -0
- package/dist/core/compose.d.ts.map +1 -1
- package/dist/core/compose.js +128 -52
- package/dist/core/compose.js.map +1 -1
- package/dist/core/devices.d.ts.map +1 -1
- package/dist/core/devices.js +413 -31
- package/dist/core/devices.js.map +1 -1
- package/dist/core/gradient-presets.d.ts +25 -0
- package/dist/core/gradient-presets.d.ts.map +1 -0
- package/dist/core/gradient-presets.js +222 -0
- package/dist/core/gradient-presets.js.map +1 -0
- package/dist/core/text-utils.d.ts +39 -0
- package/dist/core/text-utils.d.ts.map +1 -0
- package/dist/core/text-utils.js +137 -0
- package/dist/core/text-utils.js.map +1 -0
- package/dist/types.d.ts +16 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset gradients for App Store screenshots
|
|
3
|
+
*/
|
|
4
|
+
export const gradientPresets = [
|
|
5
|
+
// Warm Gradients
|
|
6
|
+
{
|
|
7
|
+
id: 'sunset',
|
|
8
|
+
name: 'Sunset',
|
|
9
|
+
description: 'Warm orange to pink sunset',
|
|
10
|
+
colors: ['#FF5733', '#FFC300'],
|
|
11
|
+
direction: 'top-bottom',
|
|
12
|
+
category: 'warm'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: 'sunrise',
|
|
16
|
+
name: 'Sunrise',
|
|
17
|
+
description: 'Golden morning glow',
|
|
18
|
+
colors: ['#F37335', '#FDC830'],
|
|
19
|
+
direction: 'diagonal',
|
|
20
|
+
category: 'warm'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'autumn',
|
|
24
|
+
name: 'Autumn',
|
|
25
|
+
description: 'Fall foliage colors',
|
|
26
|
+
colors: ['#D38312', '#A83279'],
|
|
27
|
+
direction: 'top-bottom',
|
|
28
|
+
category: 'warm'
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'peach',
|
|
32
|
+
name: 'Peach',
|
|
33
|
+
description: 'Soft peach to coral',
|
|
34
|
+
colors: ['#FFCCCC', '#FF6B6B'],
|
|
35
|
+
direction: 'top-bottom',
|
|
36
|
+
category: 'warm'
|
|
37
|
+
},
|
|
38
|
+
// Cool Gradients
|
|
39
|
+
{
|
|
40
|
+
id: 'ocean',
|
|
41
|
+
name: 'Ocean',
|
|
42
|
+
description: 'Deep blue ocean waves',
|
|
43
|
+
colors: ['#0077BE', '#33CCCC'],
|
|
44
|
+
direction: 'top-bottom',
|
|
45
|
+
category: 'cool'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'arctic',
|
|
49
|
+
name: 'Arctic',
|
|
50
|
+
description: 'Cool ice blue',
|
|
51
|
+
colors: ['#72EDF2', '#5151E5'],
|
|
52
|
+
direction: 'diagonal',
|
|
53
|
+
category: 'cool'
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'mint',
|
|
57
|
+
name: 'Mint',
|
|
58
|
+
description: 'Fresh mint green',
|
|
59
|
+
colors: ['#00B09B', '#96C93D'],
|
|
60
|
+
direction: 'left-right',
|
|
61
|
+
category: 'cool'
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: 'lavender',
|
|
65
|
+
name: 'Lavender',
|
|
66
|
+
description: 'Soft purple hues',
|
|
67
|
+
colors: ['#9796F0', '#FBC7D4'],
|
|
68
|
+
direction: 'top-bottom',
|
|
69
|
+
category: 'cool'
|
|
70
|
+
},
|
|
71
|
+
// Vibrant Gradients
|
|
72
|
+
{
|
|
73
|
+
id: 'rainbow',
|
|
74
|
+
name: 'Rainbow',
|
|
75
|
+
description: 'Vibrant rainbow spectrum',
|
|
76
|
+
colors: ['#FF0080', '#FF8C00', '#40E0D0'],
|
|
77
|
+
direction: 'left-right',
|
|
78
|
+
category: 'vibrant'
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'neon',
|
|
82
|
+
name: 'Neon',
|
|
83
|
+
description: 'Electric neon glow',
|
|
84
|
+
colors: ['#FF006E', '#8338EC', '#3A86FF'],
|
|
85
|
+
direction: 'diagonal',
|
|
86
|
+
category: 'vibrant'
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: 'tropical',
|
|
90
|
+
name: 'Tropical',
|
|
91
|
+
description: 'Tropical paradise',
|
|
92
|
+
colors: ['#FA709A', '#FEE140'],
|
|
93
|
+
direction: 'top-bottom',
|
|
94
|
+
category: 'vibrant'
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 'candy',
|
|
98
|
+
name: 'Candy',
|
|
99
|
+
description: 'Sweet candy colors',
|
|
100
|
+
colors: ['#FF61D2', '#FE9090', '#FFCC5C'],
|
|
101
|
+
direction: 'left-right',
|
|
102
|
+
category: 'vibrant'
|
|
103
|
+
},
|
|
104
|
+
// Subtle Gradients
|
|
105
|
+
{
|
|
106
|
+
id: 'pastel',
|
|
107
|
+
name: 'Pastel',
|
|
108
|
+
description: 'Soft pastel blend',
|
|
109
|
+
colors: ['#E8D8F5', '#D6E6FF'],
|
|
110
|
+
direction: 'top-bottom',
|
|
111
|
+
category: 'subtle'
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: 'mist',
|
|
115
|
+
name: 'Mist',
|
|
116
|
+
description: 'Morning mist',
|
|
117
|
+
colors: ['#E0EAFC', '#CFDEF3'],
|
|
118
|
+
direction: 'top-bottom',
|
|
119
|
+
category: 'subtle'
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: 'pearl',
|
|
123
|
+
name: 'Pearl',
|
|
124
|
+
description: 'Pearlescent shine',
|
|
125
|
+
colors: ['#F5F5F5', '#E8E8E8', '#F0F0F0'],
|
|
126
|
+
direction: 'diagonal',
|
|
127
|
+
category: 'subtle'
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
id: 'cloud',
|
|
131
|
+
name: 'Cloud',
|
|
132
|
+
description: 'Soft cloud white',
|
|
133
|
+
colors: ['#FFFFFF', '#F0F0F0'],
|
|
134
|
+
direction: 'top-bottom',
|
|
135
|
+
category: 'subtle'
|
|
136
|
+
},
|
|
137
|
+
// Monochrome Gradients
|
|
138
|
+
{
|
|
139
|
+
id: 'noir',
|
|
140
|
+
name: 'Noir',
|
|
141
|
+
description: 'Deep black fade',
|
|
142
|
+
colors: ['#000000', '#434343'],
|
|
143
|
+
direction: 'top-bottom',
|
|
144
|
+
category: 'monochrome'
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'graphite',
|
|
148
|
+
name: 'Graphite',
|
|
149
|
+
description: 'Professional gray',
|
|
150
|
+
colors: ['#283048', '#859398'],
|
|
151
|
+
direction: 'diagonal',
|
|
152
|
+
category: 'monochrome'
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: 'charcoal',
|
|
156
|
+
name: 'Charcoal',
|
|
157
|
+
description: 'Dark charcoal gradient',
|
|
158
|
+
colors: ['#1C1C1C', '#494949'],
|
|
159
|
+
direction: 'top-bottom',
|
|
160
|
+
category: 'monochrome'
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: 'silver',
|
|
164
|
+
name: 'Silver',
|
|
165
|
+
description: 'Metallic silver',
|
|
166
|
+
colors: ['#B8B8B8', '#E8E8E8'],
|
|
167
|
+
direction: 'diagonal',
|
|
168
|
+
category: 'monochrome'
|
|
169
|
+
},
|
|
170
|
+
// Brand-Inspired Gradients
|
|
171
|
+
{
|
|
172
|
+
id: 'instagram',
|
|
173
|
+
name: 'Instagram',
|
|
174
|
+
description: 'Instagram brand colors',
|
|
175
|
+
colors: ['#833AB4', '#FD1D1D', '#FCB045'],
|
|
176
|
+
direction: 'diagonal',
|
|
177
|
+
category: 'brand'
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
id: 'twitter',
|
|
181
|
+
name: 'Twitter Blue',
|
|
182
|
+
description: 'Twitter brand blue',
|
|
183
|
+
colors: ['#1DA1F2', '#14171A'],
|
|
184
|
+
direction: 'top-bottom',
|
|
185
|
+
category: 'brand'
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: 'spotify',
|
|
189
|
+
name: 'Spotify',
|
|
190
|
+
description: 'Spotify green to black',
|
|
191
|
+
colors: ['#1DB954', '#191414'],
|
|
192
|
+
direction: 'diagonal',
|
|
193
|
+
category: 'brand'
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
id: 'apple',
|
|
197
|
+
name: 'Apple',
|
|
198
|
+
description: 'Apple-inspired gradient',
|
|
199
|
+
colors: ['#A1C4FD', '#C2E9FB'],
|
|
200
|
+
direction: 'diagonal',
|
|
201
|
+
category: 'brand'
|
|
202
|
+
}
|
|
203
|
+
];
|
|
204
|
+
/**
|
|
205
|
+
* Get gradient preset by ID
|
|
206
|
+
*/
|
|
207
|
+
export function getGradientPreset(id) {
|
|
208
|
+
return gradientPresets.find(g => g.id === id);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get gradients by category
|
|
212
|
+
*/
|
|
213
|
+
export function getGradientsByCategory(category) {
|
|
214
|
+
return gradientPresets.filter(g => g.category === category);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get all gradient categories
|
|
218
|
+
*/
|
|
219
|
+
export function getGradientCategories() {
|
|
220
|
+
return [...new Set(gradientPresets.map(g => g.category))];
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=gradient-presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient-presets.js","sourceRoot":"","sources":["../../src/core/gradient-presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text utilities for caption rendering
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Estimate text width in pixels for SVG rendering
|
|
6
|
+
* This is an approximation based on average character widths
|
|
7
|
+
*/
|
|
8
|
+
export declare function estimateTextWidth(text: string, fontSize: number): number;
|
|
9
|
+
/**
|
|
10
|
+
* Calculate how many characters fit in a given width
|
|
11
|
+
*/
|
|
12
|
+
export declare function calculateCharsPerLine(width: number, fontSize: number, padding?: number): number;
|
|
13
|
+
/**
|
|
14
|
+
* Smart word wrapping algorithm
|
|
15
|
+
* Wraps text to fit within specified width, returning array of lines
|
|
16
|
+
*/
|
|
17
|
+
export declare function wrapText(text: string, maxWidth: number, fontSize: number, maxLines?: number): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Calculate optimal caption height based on content and constraints
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculateCaptionHeight(text: string, fontSize: number, canvasWidth: number, options?: {
|
|
22
|
+
lineHeight?: number;
|
|
23
|
+
paddingTop?: number;
|
|
24
|
+
paddingBottom?: number;
|
|
25
|
+
minHeight?: number;
|
|
26
|
+
maxHeight?: number;
|
|
27
|
+
maxLines?: number;
|
|
28
|
+
}): {
|
|
29
|
+
height: number;
|
|
30
|
+
lines: string[];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Calculate dynamic caption height based on device position
|
|
34
|
+
*/
|
|
35
|
+
export declare function calculateAdaptiveCaptionHeight(text: string, fontSize: number, canvasWidth: number, canvasHeight: number, deviceTop: number, deviceHeight: number, framePosition: string | number | undefined): {
|
|
36
|
+
height: number;
|
|
37
|
+
lines: string[];
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=text-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-utils.d.ts","sourceRoot":"","sources":["../../src/core/text-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAwB,GAAG,MAAM,CAShH;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,EAAE,CAiDV;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBrC;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GACzC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CA6BrC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text utilities for caption rendering
|
|
3
|
+
*/
|
|
4
|
+
// Character width factors for text estimation
|
|
5
|
+
const CHAR_WIDTH_FACTOR_NORMAL = 0.65; // Average character width relative to font size
|
|
6
|
+
const CHAR_WIDTH_FACTOR_NARROW = 0.5; // Character width for narrow displays (watch)
|
|
7
|
+
// Width thresholds
|
|
8
|
+
const NARROW_WIDTH_THRESHOLD = 500; // Width below which to use narrow character factor
|
|
9
|
+
// Padding values
|
|
10
|
+
const PADDING_NARROW = 30; // Padding for narrow displays
|
|
11
|
+
const PADDING_DEFAULT = 40; // Default padding
|
|
12
|
+
/**
|
|
13
|
+
* Estimate text width in pixels for SVG rendering
|
|
14
|
+
* This is an approximation based on average character widths
|
|
15
|
+
*/
|
|
16
|
+
export function estimateTextWidth(text, fontSize) {
|
|
17
|
+
// Average character width is roughly 0.65 of font size for most fonts
|
|
18
|
+
// Adjust for bold text (slightly wider)
|
|
19
|
+
const avgCharWidth = fontSize * CHAR_WIDTH_FACTOR_NORMAL;
|
|
20
|
+
return text.length * avgCharWidth;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Calculate how many characters fit in a given width
|
|
24
|
+
*/
|
|
25
|
+
export function calculateCharsPerLine(width, fontSize, padding = PADDING_DEFAULT) {
|
|
26
|
+
// For very narrow widths (watch), use moderate padding
|
|
27
|
+
const actualPadding = width < NARROW_WIDTH_THRESHOLD ? PADDING_NARROW : padding;
|
|
28
|
+
const availableWidth = width - (actualPadding * 2);
|
|
29
|
+
// For watch (narrow width), use smaller character width factor since font is smaller
|
|
30
|
+
const avgCharWidth = width < NARROW_WIDTH_THRESHOLD
|
|
31
|
+
? fontSize * CHAR_WIDTH_FACTOR_NARROW
|
|
32
|
+
: fontSize * CHAR_WIDTH_FACTOR_NORMAL;
|
|
33
|
+
return Math.floor(availableWidth / avgCharWidth);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Smart word wrapping algorithm
|
|
37
|
+
* Wraps text to fit within specified width, returning array of lines
|
|
38
|
+
*/
|
|
39
|
+
export function wrapText(text, maxWidth, fontSize, maxLines) {
|
|
40
|
+
if (!text)
|
|
41
|
+
return [];
|
|
42
|
+
const words = text.split(' ');
|
|
43
|
+
const lines = [];
|
|
44
|
+
let currentLine = '';
|
|
45
|
+
const charsPerLine = calculateCharsPerLine(maxWidth, fontSize);
|
|
46
|
+
for (const word of words) {
|
|
47
|
+
const testLine = currentLine ? `${currentLine} ${word}` : word;
|
|
48
|
+
if (testLine.length <= charsPerLine) {
|
|
49
|
+
currentLine = testLine;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
if (currentLine) {
|
|
53
|
+
lines.push(currentLine);
|
|
54
|
+
currentLine = word;
|
|
55
|
+
// Check if we've reached max lines
|
|
56
|
+
if (maxLines && lines.length >= maxLines - 1) {
|
|
57
|
+
// Add remaining text with ellipsis if needed
|
|
58
|
+
const wordIndex = words.indexOf(word);
|
|
59
|
+
const remainingWords = words.slice(wordIndex);
|
|
60
|
+
const remainingText = remainingWords.join(' ');
|
|
61
|
+
if (remainingText.length > charsPerLine) {
|
|
62
|
+
const truncated = remainingText.substring(0, charsPerLine - 3) + '...';
|
|
63
|
+
lines.push(truncated);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
lines.push(remainingText);
|
|
67
|
+
}
|
|
68
|
+
return lines; // Return immediately
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Single word is too long, truncate it
|
|
73
|
+
const truncated = word.substring(0, charsPerLine - 3) + '...';
|
|
74
|
+
lines.push(truncated);
|
|
75
|
+
currentLine = '';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Add any remaining text
|
|
80
|
+
if (currentLine && (!maxLines || lines.length < maxLines)) {
|
|
81
|
+
lines.push(currentLine);
|
|
82
|
+
}
|
|
83
|
+
return lines;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Calculate optimal caption height based on content and constraints
|
|
87
|
+
*/
|
|
88
|
+
export function calculateCaptionHeight(text, fontSize, canvasWidth, options = {}) {
|
|
89
|
+
const { lineHeight = 1.4, paddingTop = 40, paddingBottom = 40, minHeight = 100, maxHeight = 500, maxLines = 3 } = options;
|
|
90
|
+
// Wrap text to get actual lines needed
|
|
91
|
+
const lines = wrapText(text, canvasWidth, fontSize, maxLines);
|
|
92
|
+
// Calculate height based on number of lines
|
|
93
|
+
const textHeight = lines.length * fontSize * lineHeight;
|
|
94
|
+
const totalHeight = paddingTop + textHeight + paddingBottom;
|
|
95
|
+
// Apply constraints
|
|
96
|
+
const constrainedHeight = Math.max(minHeight, Math.min(maxHeight, totalHeight));
|
|
97
|
+
return {
|
|
98
|
+
height: Math.ceil(constrainedHeight),
|
|
99
|
+
lines
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Calculate dynamic caption height based on device position
|
|
104
|
+
*/
|
|
105
|
+
export function calculateAdaptiveCaptionHeight(text, fontSize, canvasWidth, canvasHeight, deviceTop, deviceHeight, framePosition) {
|
|
106
|
+
// Calculate available space based on device position
|
|
107
|
+
let availableSpace;
|
|
108
|
+
if (framePosition === 'top' || framePosition === 0) {
|
|
109
|
+
// Device at top, limited caption space
|
|
110
|
+
availableSpace = canvasHeight * 0.15;
|
|
111
|
+
}
|
|
112
|
+
else if (framePosition === 'bottom' || framePosition === 100) {
|
|
113
|
+
// Device at bottom, maximum caption space
|
|
114
|
+
availableSpace = Math.max(deviceTop - 20, canvasHeight * 0.5); // Use significant space
|
|
115
|
+
}
|
|
116
|
+
else if (typeof framePosition === 'number') {
|
|
117
|
+
// Custom position, calculate available space
|
|
118
|
+
availableSpace = deviceTop - 20;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Default centered or unspecified
|
|
122
|
+
// Use space above device or default calculation
|
|
123
|
+
if (deviceTop > canvasHeight * 0.3) {
|
|
124
|
+
availableSpace = deviceTop - 20;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
availableSpace = canvasHeight * 0.25;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Calculate with constraints
|
|
131
|
+
return calculateCaptionHeight(text, fontSize, canvasWidth, {
|
|
132
|
+
maxHeight: availableSpace,
|
|
133
|
+
minHeight: fontSize * 2,
|
|
134
|
+
maxLines: Math.floor(availableSpace / (fontSize * 1.4))
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=text-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-utils.js","sourceRoot":"","sources":["../../src/core/text-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -2,6 +2,13 @@ export interface GradientConfig {
|
|
|
2
2
|
colors: string[];
|
|
3
3
|
direction: 'top-bottom' | 'bottom-top' | 'left-right' | 'right-left' | 'diagonal';
|
|
4
4
|
}
|
|
5
|
+
export interface CaptionBoxConfig {
|
|
6
|
+
autoSize?: boolean;
|
|
7
|
+
maxLines?: number;
|
|
8
|
+
lineHeight?: number;
|
|
9
|
+
minHeight?: number;
|
|
10
|
+
maxHeight?: number;
|
|
11
|
+
}
|
|
5
12
|
export interface CaptionConfig {
|
|
6
13
|
font: string;
|
|
7
14
|
fontsize: number;
|
|
@@ -12,8 +19,16 @@ export interface CaptionConfig {
|
|
|
12
19
|
paddingLeft?: number;
|
|
13
20
|
paddingRight?: number;
|
|
14
21
|
position?: 'overlay' | 'above';
|
|
22
|
+
box?: CaptionBoxConfig;
|
|
23
|
+
}
|
|
24
|
+
export interface DeviceStyleConfig {
|
|
25
|
+
framePosition?: 'top' | 'center' | 'bottom' | number;
|
|
26
|
+
frameScale?: number;
|
|
27
|
+
captionSize?: number;
|
|
28
|
+
captionPosition?: 'above' | 'overlay';
|
|
29
|
+
captionBox?: CaptionBoxConfig;
|
|
15
30
|
}
|
|
16
|
-
export interface DeviceConfig {
|
|
31
|
+
export interface DeviceConfig extends DeviceStyleConfig {
|
|
17
32
|
input: string;
|
|
18
33
|
resolution: string;
|
|
19
34
|
frame?: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACnF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACnF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC/B,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE;QACP,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|