image-edit-tools 1.0.6 → 1.0.8
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/CHANGELOG.md +23 -0
- package/dist/ops/add-text.d.ts +28 -0
- package/dist/ops/add-text.d.ts.map +1 -1
- package/dist/ops/add-text.js +241 -47
- package/dist/ops/add-text.js.map +1 -1
- package/dist/types.d.ts +30 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/font-loader.d.ts +26 -0
- package/dist/utils/font-loader.d.ts.map +1 -0
- package/dist/utils/font-loader.js +103 -0
- package/dist/utils/font-loader.js.map +1 -0
- package/package.json +1 -1
- package/src/ops/add-text.ts +267 -53
- package/src/types.ts +31 -0
- package/src/utils/font-loader.ts +119 -0
- package/tests/integration/font-url.test.ts +62 -0
- package/tests/unit/add-text.test.ts +110 -0
- package/tests/unit/font-loader.test.ts +39 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.0.7] - 2026-03-14
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **Inline Spans** (`TextLayer.spans`): Render mixed-style text within a single layer.
|
|
8
|
+
Each span supports `bold`, `italic`, `color`, `fontSize`, and `highlight` overrides.
|
|
9
|
+
Line breaks via `\n` within span text are fully supported.
|
|
10
|
+
- **fontUrl auto-fetch & cache**: When `fontUrl` starts with `https://`, the font binary
|
|
11
|
+
is automatically downloaded and cached in `os.tmpdir()`. Google Fonts CSS URLs
|
|
12
|
+
(`fonts.googleapis.com/css*`) are parsed to extract the actual font binary URL.
|
|
13
|
+
- `TextSpan` interface exported from `types.ts`.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Font injection switched from `@import url()` to `@font-face { src: url() }` for
|
|
18
|
+
better librsvg compatibility with local files.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- `fontUrl: 'https://...'` now works correctly (previously failed due to librsvg
|
|
23
|
+
blocking external network requests).
|
package/dist/ops/add-text.d.ts
CHANGED
|
@@ -1,4 +1,32 @@
|
|
|
1
1
|
import { TextLayer, ImageInput, ImageResult } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Adds text layers onto an image using SVG overlay compositing.
|
|
4
|
+
*
|
|
5
|
+
* Supports two rendering modes:
|
|
6
|
+
* 1. **Plain text** — uses `layer.text` with optional `maxWidth` wrapping
|
|
7
|
+
* 2. **Inline spans** — uses `layer.spans[]` for mixed-style rendering
|
|
8
|
+
*
|
|
9
|
+
* Font loading: if `layer.fontUrl` starts with `https://`, the font is
|
|
10
|
+
* automatically downloaded and cached locally for librsvg compatibility.
|
|
11
|
+
*
|
|
12
|
+
* @param input - Source image (Buffer, URL, data-URI, or file path)
|
|
13
|
+
* @param options - Object containing `layers` array of `TextLayer`
|
|
14
|
+
* @returns ImageResult with the composited image buffer
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Plain text
|
|
18
|
+
* await addText(buffer, { layers: [{ text: 'Hello', x: 10, y: 50 }] });
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Inline spans
|
|
22
|
+
* await addText(buffer, { layers: [{
|
|
23
|
+
* x: 10, y: 50, fontSize: 28, color: '#333',
|
|
24
|
+
* spans: [
|
|
25
|
+
* { text: 'normal ' },
|
|
26
|
+
* { text: 'bold', bold: true, color: '#000' },
|
|
27
|
+
* ]
|
|
28
|
+
* }] });
|
|
29
|
+
*/
|
|
2
30
|
export declare function addText(input: ImageInput, options: {
|
|
3
31
|
layers: TextLayer[];
|
|
4
32
|
}): Promise<ImageResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-text.d.ts","sourceRoot":"","sources":["../../src/ops/add-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"add-text.d.ts","sourceRoot":"","sources":["../../src/ops/add-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAY,UAAU,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAC;AA2KlG;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CA8NvG"}
|
package/dist/ops/add-text.js
CHANGED
|
@@ -3,6 +3,16 @@ import { ErrorCode } from '../types.js';
|
|
|
3
3
|
import { loadImage } from '../utils/load-image.js';
|
|
4
4
|
import { err, ok } from '../utils/result.js';
|
|
5
5
|
import { getImageMetadata } from '../utils/validate.js';
|
|
6
|
+
import { resolveFontUrl } from '../utils/font-loader.js';
|
|
7
|
+
/**
|
|
8
|
+
* Wraps text into lines that fit within a maximum pixel width.
|
|
9
|
+
* Uses a character-width approximation of `fontSize * 0.6`.
|
|
10
|
+
*
|
|
11
|
+
* @param text - The text to wrap
|
|
12
|
+
* @param fontSize - Font size in pixels
|
|
13
|
+
* @param maxWidth - Maximum line width in pixels (optional)
|
|
14
|
+
* @returns Array of text lines
|
|
15
|
+
*/
|
|
6
16
|
function wrapText(text, fontSize, maxWidth) {
|
|
7
17
|
if (!maxWidth)
|
|
8
18
|
return [text];
|
|
@@ -25,6 +35,12 @@ function wrapText(text, fontSize, maxWidth) {
|
|
|
25
35
|
lines.push(currentLine);
|
|
26
36
|
return lines;
|
|
27
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Escapes special XML characters to prevent SVG injection.
|
|
40
|
+
*
|
|
41
|
+
* @param text - Raw text to escape
|
|
42
|
+
* @returns XML-safe string
|
|
43
|
+
*/
|
|
28
44
|
function escapeXml(text) {
|
|
29
45
|
return text
|
|
30
46
|
.replace(/&/g, '&')
|
|
@@ -33,15 +49,19 @@ function escapeXml(text) {
|
|
|
33
49
|
.replace(/"/g, '"')
|
|
34
50
|
.replace(/'/g, ''');
|
|
35
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Computes SVG text-anchor and y-offset based on the anchor setting.
|
|
54
|
+
* librsvg only reliably supports `dominant-baseline: auto` (alphabetic),
|
|
55
|
+
* so vertical alignment is achieved via manual y-offset.
|
|
56
|
+
*
|
|
57
|
+
* @param anchor - The text anchor position
|
|
58
|
+
* @param fontSize - Font size for offset calculation
|
|
59
|
+
* @returns Object with `textAnchor` SVG attribute and `yOffset` pixel shift
|
|
60
|
+
*/
|
|
36
61
|
function getAnchorProps(anchor = 'top-left', fontSize = 24) {
|
|
37
62
|
const parts = anchor.split('-');
|
|
38
63
|
const yAlign = parts.length === 2 ? parts[0] : parts[0] === 'center' ? 'middle' : parts[0];
|
|
39
64
|
const xAlign = parts.length === 2 ? parts[1] : parts[0] === 'center' ? 'center' : 'left';
|
|
40
|
-
// librsvg does NOT reliably support dominant-baseline values other than 'auto' (alphabetic).
|
|
41
|
-
// Instead of relying on dominant-baseline, we compute a y-offset to position text correctly.
|
|
42
|
-
// With 'auto' (alphabetic baseline), y = text baseline (bottom of caps).
|
|
43
|
-
// To make y = text top, we shift down by ~0.8 * fontSize.
|
|
44
|
-
// To make y = text middle, we shift down by ~0.35 * fontSize.
|
|
45
65
|
let yOffset = 0;
|
|
46
66
|
if (yAlign === 'top') {
|
|
47
67
|
yOffset = Math.round(fontSize * 0.8);
|
|
@@ -49,7 +69,6 @@ function getAnchorProps(anchor = 'top-left', fontSize = 24) {
|
|
|
49
69
|
else if (yAlign === 'middle' || yAlign === 'center') {
|
|
50
70
|
yOffset = Math.round(fontSize * 0.35);
|
|
51
71
|
}
|
|
52
|
-
// 'bottom' / 'auto' → yOffset = 0 (alphabetic baseline is already at y)
|
|
53
72
|
let textAnchor = 'start';
|
|
54
73
|
if (xAlign === 'center')
|
|
55
74
|
textAnchor = 'middle';
|
|
@@ -57,6 +76,117 @@ function getAnchorProps(anchor = 'top-left', fontSize = 24) {
|
|
|
57
76
|
textAnchor = 'end';
|
|
58
77
|
return { textAnchor, yOffset };
|
|
59
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Builds SVG `<tspan>` elements from an array of inline spans.
|
|
81
|
+
* Handles style inheritance, `\n` line breaks, and highlight rects.
|
|
82
|
+
*
|
|
83
|
+
* @param spans - Array of TextSpan objects
|
|
84
|
+
* @param layer - Parent TextLayer for default values
|
|
85
|
+
* @param renderY - The computed y position for the text element
|
|
86
|
+
* @returns Object containing `tspanSvg`, `highlightSvg`, and `approxMaxWidth`
|
|
87
|
+
*/
|
|
88
|
+
function buildSpansSvg(spans, layer, renderY) {
|
|
89
|
+
const baseFontSize = layer.fontSize ?? 24;
|
|
90
|
+
const baseColor = layer.color ?? '#000000';
|
|
91
|
+
const lineHeight = layer.lineHeight ?? 1.2;
|
|
92
|
+
let tspanSvg = '';
|
|
93
|
+
let highlightSvg = '';
|
|
94
|
+
// Track cursor position for highlight rects and line breaks
|
|
95
|
+
let cursorX = layer.x;
|
|
96
|
+
let currentLineY = renderY;
|
|
97
|
+
let isFirstOnLine = true;
|
|
98
|
+
let maxLineWidth = 0;
|
|
99
|
+
let currentLineWidth = 0;
|
|
100
|
+
for (const span of spans) {
|
|
101
|
+
const spanFontSize = span.fontSize ?? baseFontSize;
|
|
102
|
+
const spanColor = span.color ?? baseColor;
|
|
103
|
+
// Split on \n to handle line breaks within a single span
|
|
104
|
+
const segments = span.text.split('\n');
|
|
105
|
+
for (let segIdx = 0; segIdx < segments.length; segIdx++) {
|
|
106
|
+
// Handle line break (every segment after the first means a \n was found)
|
|
107
|
+
if (segIdx > 0) {
|
|
108
|
+
// Flush current line width
|
|
109
|
+
if (currentLineWidth > maxLineWidth)
|
|
110
|
+
maxLineWidth = currentLineWidth;
|
|
111
|
+
currentLineWidth = 0;
|
|
112
|
+
cursorX = layer.x;
|
|
113
|
+
currentLineY += baseFontSize * lineHeight;
|
|
114
|
+
isFirstOnLine = true;
|
|
115
|
+
}
|
|
116
|
+
const segText = segments[segIdx];
|
|
117
|
+
if (segText.length === 0)
|
|
118
|
+
continue;
|
|
119
|
+
const segWidth = segText.length * spanFontSize * 0.6;
|
|
120
|
+
// Highlight rect (rendered BEFORE text so it appears behind)
|
|
121
|
+
if (span.highlight) {
|
|
122
|
+
highlightSvg += `<rect x="${cursorX}" y="${currentLineY - spanFontSize * 0.8}" width="${segWidth}" height="${spanFontSize}" fill="${span.highlight}" />`;
|
|
123
|
+
}
|
|
124
|
+
// Build inline style overrides
|
|
125
|
+
const styleAttrs = [];
|
|
126
|
+
if (span.bold)
|
|
127
|
+
styleAttrs.push('font-weight: bold');
|
|
128
|
+
if (span.italic)
|
|
129
|
+
styleAttrs.push('font-style: italic');
|
|
130
|
+
if (span.color)
|
|
131
|
+
styleAttrs.push(`fill: ${spanColor}`);
|
|
132
|
+
if (span.fontSize)
|
|
133
|
+
styleAttrs.push(`font-size: ${spanFontSize}px`);
|
|
134
|
+
const styleAttr = styleAttrs.length > 0 ? ` style="${styleAttrs.join('; ')};"` : '';
|
|
135
|
+
if (isFirstOnLine) {
|
|
136
|
+
// First tspan on a line: reset x and apply dy for line break
|
|
137
|
+
const dy = currentLineY === renderY ? 0 : baseFontSize * lineHeight;
|
|
138
|
+
if (dy > 0) {
|
|
139
|
+
tspanSvg += `<tspan x="${layer.x}" dy="${dy}"${styleAttr}>${escapeXml(segText)}</tspan>`;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
tspanSvg += `<tspan${styleAttr}>${escapeXml(segText)}</tspan>`;
|
|
143
|
+
}
|
|
144
|
+
isFirstOnLine = false;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
tspanSvg += `<tspan${styleAttr}>${escapeXml(segText)}</tspan>`;
|
|
148
|
+
}
|
|
149
|
+
cursorX += segWidth;
|
|
150
|
+
currentLineWidth += segWidth;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Final line width check
|
|
154
|
+
if (currentLineWidth > maxLineWidth)
|
|
155
|
+
maxLineWidth = currentLineWidth;
|
|
156
|
+
return {
|
|
157
|
+
tspanSvg,
|
|
158
|
+
highlightSvg,
|
|
159
|
+
approxMaxWidth: maxLineWidth,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Adds text layers onto an image using SVG overlay compositing.
|
|
164
|
+
*
|
|
165
|
+
* Supports two rendering modes:
|
|
166
|
+
* 1. **Plain text** — uses `layer.text` with optional `maxWidth` wrapping
|
|
167
|
+
* 2. **Inline spans** — uses `layer.spans[]` for mixed-style rendering
|
|
168
|
+
*
|
|
169
|
+
* Font loading: if `layer.fontUrl` starts with `https://`, the font is
|
|
170
|
+
* automatically downloaded and cached locally for librsvg compatibility.
|
|
171
|
+
*
|
|
172
|
+
* @param input - Source image (Buffer, URL, data-URI, or file path)
|
|
173
|
+
* @param options - Object containing `layers` array of `TextLayer`
|
|
174
|
+
* @returns ImageResult with the composited image buffer
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* // Plain text
|
|
178
|
+
* await addText(buffer, { layers: [{ text: 'Hello', x: 10, y: 50 }] });
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* // Inline spans
|
|
182
|
+
* await addText(buffer, { layers: [{
|
|
183
|
+
* x: 10, y: 50, fontSize: 28, color: '#333',
|
|
184
|
+
* spans: [
|
|
185
|
+
* { text: 'normal ' },
|
|
186
|
+
* { text: 'bold', bold: true, color: '#000' },
|
|
187
|
+
* ]
|
|
188
|
+
* }] });
|
|
189
|
+
*/
|
|
60
190
|
export async function addText(input, options) {
|
|
61
191
|
try {
|
|
62
192
|
const buffer = await loadImage(input);
|
|
@@ -76,12 +206,12 @@ export async function addText(input, options) {
|
|
|
76
206
|
const color = layer.color ?? '#000000';
|
|
77
207
|
const opacity = layer.opacity ?? 1.0;
|
|
78
208
|
const fontFamily = layer.fontFamily ?? 'sans-serif';
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
209
|
+
// ── Font loading ──────────────────────────────────────────────
|
|
210
|
+
if (layer.fontUrl) {
|
|
211
|
+
const localUrl = await resolveFontUrl(layer.fontUrl);
|
|
212
|
+
fontImports.add(`@font-face { font-family: '${fontFamily}'; src: url('${localUrl}'); }`);
|
|
213
|
+
}
|
|
82
214
|
const lineHeight = layer.lineHeight ?? 1.2;
|
|
83
|
-
const totalHeight = lines.length * fontSize * lineHeight;
|
|
84
|
-
const approxMaxWidth = Math.max(...lines.map(l => l.length * fontSize * 0.6));
|
|
85
215
|
const { textAnchor, yOffset } = getAnchorProps(layer.anchor, fontSize);
|
|
86
216
|
const renderY = layer.y + yOffset;
|
|
87
217
|
let align = textAnchor;
|
|
@@ -99,52 +229,113 @@ export async function addText(input, options) {
|
|
|
99
229
|
style += ` stroke: ${layer.stroke.color}; stroke-width: ${layer.stroke.width}px; paint-order: stroke;`;
|
|
100
230
|
}
|
|
101
231
|
let layerSvg = '';
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
//
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (textAnchor === 'middle') {
|
|
111
|
-
rectX = layer.x - (approxMaxWidth / 2) - pad;
|
|
232
|
+
let totalHeight;
|
|
233
|
+
let approxMaxWidth;
|
|
234
|
+
let layerTextPreview;
|
|
235
|
+
// ── Spans mode vs plain text mode ─────────────────────────────
|
|
236
|
+
if (layer.spans && layer.spans.length > 0) {
|
|
237
|
+
// Emit warnings for spans mode edge cases
|
|
238
|
+
if (layer.text) {
|
|
239
|
+
warnings.push('text field ignored when spans is provided');
|
|
112
240
|
}
|
|
113
|
-
|
|
114
|
-
|
|
241
|
+
if (layer.maxWidth) {
|
|
242
|
+
warnings.push('maxWidth is not supported with spans');
|
|
115
243
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
244
|
+
const spansResult = buildSpansSvg(layer.spans, layer, renderY);
|
|
245
|
+
approxMaxWidth = spansResult.approxMaxWidth;
|
|
246
|
+
// Count line breaks to compute totalHeight
|
|
247
|
+
const fullText = layer.spans.map((s) => s.text).join('');
|
|
248
|
+
const lineCount = (fullText.match(/\n/g) ?? []).length + 1;
|
|
249
|
+
totalHeight = lineCount * fontSize * lineHeight;
|
|
250
|
+
layerTextPreview = fullText.slice(0, 20);
|
|
251
|
+
// Background rect
|
|
252
|
+
if (layer.background) {
|
|
253
|
+
const bg = layer.background;
|
|
254
|
+
const pad = bg.padding ?? 0;
|
|
255
|
+
const bgOpacity = bg.opacity ?? 1.0;
|
|
256
|
+
const radius = bg.borderRadius ?? 0;
|
|
257
|
+
let rectX = layer.x - pad;
|
|
258
|
+
let rectY = layer.y - pad;
|
|
259
|
+
if (textAnchor === 'middle') {
|
|
260
|
+
rectX = layer.x - (approxMaxWidth / 2) - pad;
|
|
261
|
+
}
|
|
262
|
+
else if (textAnchor === 'end') {
|
|
263
|
+
rectX = layer.x - approxMaxWidth - pad;
|
|
264
|
+
}
|
|
265
|
+
const parts = (layer.anchor ?? 'top-left').split('-');
|
|
266
|
+
const vAlign = parts.length === 2 ? parts[0] : parts[0] === 'center' ? 'middle' : parts[0];
|
|
267
|
+
if (vAlign === 'middle' || vAlign === 'center') {
|
|
268
|
+
rectY = layer.y - (totalHeight / 2) - pad;
|
|
269
|
+
}
|
|
270
|
+
else if (vAlign === 'bottom') {
|
|
271
|
+
rectY = layer.y - totalHeight - pad + fontSize;
|
|
272
|
+
}
|
|
273
|
+
layerSvg += `<rect x="${rectX}" y="${rectY}" width="${approxMaxWidth + pad * 2}" height="${totalHeight + pad * 2}" fill="${bg.color}" opacity="${bgOpacity}" rx="${radius}" ry="${radius}" />`;
|
|
121
274
|
}
|
|
122
|
-
|
|
123
|
-
|
|
275
|
+
// Highlight rects (behind text)
|
|
276
|
+
layerSvg += spansResult.highlightSvg;
|
|
277
|
+
// Shadow for spans mode
|
|
278
|
+
if (layer.textShadow) {
|
|
279
|
+
const ts = layer.textShadow;
|
|
280
|
+
const shadowStyle = `font-family: ${fontFamily}; font-size: ${fontSize}px; fill: ${ts.color}; opacity: ${opacity}; text-anchor: ${align}; dominant-baseline: auto;${layer.letterSpacing ? ` letter-spacing: ${layer.letterSpacing}px;` : ''}`;
|
|
281
|
+
const sx = layer.x + ts.offsetX;
|
|
282
|
+
const sy = renderY + ts.offsetY;
|
|
283
|
+
layerSvg += `<text x="${sx}" y="${sy}" style="${shadowStyle}">${spansResult.tspanSvg}</text>`;
|
|
124
284
|
}
|
|
125
|
-
|
|
285
|
+
// Main text element with spans
|
|
286
|
+
layerSvg += `<text x="${layer.x}" y="${renderY}" style="${style}">${spansResult.tspanSvg}</text>`;
|
|
126
287
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
288
|
+
else {
|
|
289
|
+
// ── Plain text mode (existing logic) ─────────────────────────
|
|
290
|
+
const lines = wrapText(layer.text, fontSize, layer.maxWidth);
|
|
291
|
+
totalHeight = lines.length * fontSize * lineHeight;
|
|
292
|
+
approxMaxWidth = Math.max(...lines.map(l => l.length * fontSize * 0.6));
|
|
293
|
+
layerTextPreview = layer.text.slice(0, 20);
|
|
294
|
+
if (layer.background) {
|
|
295
|
+
const bg = layer.background;
|
|
296
|
+
const pad = bg.padding ?? 0;
|
|
297
|
+
const bgOpacity = bg.opacity ?? 1.0;
|
|
298
|
+
const radius = bg.borderRadius ?? 0;
|
|
299
|
+
let rectX = layer.x - pad;
|
|
300
|
+
let rectY = layer.y - pad;
|
|
301
|
+
if (textAnchor === 'middle') {
|
|
302
|
+
rectX = layer.x - (approxMaxWidth / 2) - pad;
|
|
303
|
+
}
|
|
304
|
+
else if (textAnchor === 'end') {
|
|
305
|
+
rectX = layer.x - approxMaxWidth - pad;
|
|
306
|
+
}
|
|
307
|
+
const parts = (layer.anchor ?? 'top-left').split('-');
|
|
308
|
+
const vAlign = parts.length === 2 ? parts[0] : parts[0] === 'center' ? 'middle' : parts[0];
|
|
309
|
+
if (vAlign === 'middle' || vAlign === 'center') {
|
|
310
|
+
rectY = layer.y - (totalHeight / 2) - pad;
|
|
311
|
+
}
|
|
312
|
+
else if (vAlign === 'bottom') {
|
|
313
|
+
rectY = layer.y - totalHeight - pad + fontSize;
|
|
314
|
+
}
|
|
315
|
+
layerSvg += `<rect x="${rectX}" y="${rectY}" width="${approxMaxWidth + pad * 2}" height="${totalHeight + pad * 2}" fill="${bg.color}" opacity="${bgOpacity}" rx="${radius}" ry="${radius}" />`;
|
|
316
|
+
}
|
|
317
|
+
// Text shadow: render a duplicate text behind the main text
|
|
318
|
+
if (layer.textShadow) {
|
|
319
|
+
const ts = layer.textShadow;
|
|
320
|
+
const shadowStyle = `font-family: ${fontFamily}; font-size: ${fontSize}px; fill: ${ts.color}; opacity: ${opacity}; text-anchor: ${align}; dominant-baseline: auto;${layer.letterSpacing ? ` letter-spacing: ${layer.letterSpacing}px;` : ''}`;
|
|
321
|
+
const sx = layer.x + ts.offsetX;
|
|
322
|
+
const sy = renderY + ts.offsetY;
|
|
323
|
+
layerSvg += `<text x="${sx}" y="${sy}" style="${shadowStyle}">`;
|
|
324
|
+
lines.forEach((line, idx) => {
|
|
325
|
+
let dy = idx === 0 ? 0 : fontSize * lineHeight;
|
|
326
|
+
layerSvg += `<tspan x="${sx}" dy="${dy}">${escapeXml(line)}</tspan>`;
|
|
327
|
+
});
|
|
328
|
+
layerSvg += `</text>`;
|
|
329
|
+
}
|
|
330
|
+
layerSvg += `<text x="${layer.x}" y="${renderY}" style="${style}">`;
|
|
134
331
|
lines.forEach((line, idx) => {
|
|
135
332
|
let dy = idx === 0 ? 0 : fontSize * lineHeight;
|
|
136
|
-
layerSvg += `<tspan x="${
|
|
333
|
+
layerSvg += `<tspan x="${layer.x}" dy="${dy}">${escapeXml(line)}</tspan>`;
|
|
137
334
|
});
|
|
138
335
|
layerSvg += `</text>`;
|
|
139
336
|
}
|
|
140
|
-
layerSvg += `<text x="${layer.x}" y="${renderY}" style="${style}">`;
|
|
141
|
-
lines.forEach((line, idx) => {
|
|
142
|
-
let dy = idx === 0 ? 0 : fontSize * lineHeight;
|
|
143
|
-
layerSvg += `<tspan x="${layer.x}" dy="${dy}">${escapeXml(line)}</tspan>`;
|
|
144
|
-
});
|
|
145
|
-
layerSvg += `</text>`;
|
|
146
337
|
svgBody += `<g style="isolation: isolate">${layerSvg}</g>`;
|
|
147
|
-
//
|
|
338
|
+
// ── Bounding box / overflow detection ──────────────────────────
|
|
148
339
|
let boxX = layer.x;
|
|
149
340
|
let boxY = layer.y;
|
|
150
341
|
if (textAnchor === 'middle')
|
|
@@ -162,7 +353,7 @@ export async function addText(input, options) {
|
|
|
162
353
|
if (boxBottom > contentBottom)
|
|
163
354
|
contentBottom = boxBottom;
|
|
164
355
|
if (boxX < 0 || boxY < 0 || boxRight > width || boxBottom > height) {
|
|
165
|
-
warnings.push(`Text layer ${i} ("${
|
|
356
|
+
warnings.push(`Text layer ${i} ("${layerTextPreview}...") extends beyond canvas bounds.`);
|
|
166
357
|
}
|
|
167
358
|
}
|
|
168
359
|
const fontStyle = fontImports.size > 0 ? `<style>${Array.from(fontImports).join('\n')}</style>` : '';
|
|
@@ -186,6 +377,9 @@ export async function addText(input, options) {
|
|
|
186
377
|
return err('File not found', ErrorCode.INVALID_INPUT);
|
|
187
378
|
if (msg.includes('unsupported image format'))
|
|
188
379
|
return err('Corrupt or unsupported input', ErrorCode.INVALID_INPUT);
|
|
380
|
+
if (msg.includes('Font download failed') || msg.includes('Google Fonts CSS fetch failed')) {
|
|
381
|
+
return err(msg, ErrorCode.FETCH_FAILED);
|
|
382
|
+
}
|
|
189
383
|
return err(msg, ErrorCode.PROCESSING_FAILED);
|
|
190
384
|
}
|
|
191
385
|
}
|
package/dist/ops/add-text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-text.js","sourceRoot":"","sources":["../../src/ops/add-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAsC,SAAS,EAAc,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAgB,EAAE,QAAiB;IACjE,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,gBAAgB;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YACzD,WAAW,GAAG,CAAC,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,IAAI,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IACD,IAAI,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,SAAqB,UAAU,EAAE,WAAmB,EAAE;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzF,6FAA6F;IAC7F,6FAA6F;IAC7F,yEAAyE;IACzE,0DAA0D;IAC1D,8DAA8D;IAC9D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,wEAAwE;IAExE,IAAI,UAAU,GAAG,OAAO,CAAC;IACzB,IAAI,MAAM,KAAK,QAAQ;QAAE,UAAU,GAAG,QAAQ,CAAC;SAC1C,IAAI,MAAM,KAAK,OAAO;QAAE,UAAU,GAAG,KAAK,CAAC;IAEhD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAiB,EAAE,OAAgC;IAC/E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,OAAO,GAAG,CAAC,uBAAuB,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAE/B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC;YACrC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,YAAY,CAAC;YACpD,IAAI,KAAK,CAAC,OAAO;gBAAE,WAAW,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;YAEvE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;YAC3C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;YACzD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;YAE9E,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC;YAElC,IAAI,KAAK,GAAG,UAAU,CAAC;YACvB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;YACxF,CAAC;YAED,6FAA6F;YAC7F,IAAI,KAAK,GAAG,gBAAgB,UAAU,gBAAgB,QAAQ,aAAa,KAAK,cAAc,OAAO,kBAAkB,KAAK,4BAA4B,CAAC;YAEzJ,iBAAiB;YACjB,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,KAAK,IAAI,oBAAoB,KAAK,CAAC,aAAa,KAAK,CAAC;YACxD,CAAC;YAED,4DAA4D;YAC5D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,KAAK,IAAI,YAAY,KAAK,CAAC,MAAM,CAAC,KAAK,mBAAmB,KAAK,CAAC,MAAM,CAAC,KAAK,0BAA0B,CAAC;YACzG,CAAC;YAED,IAAI,QAAQ,GAAG,EAAE,CAAC;YAElB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC;gBAC5B,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,IAAI,GAAG,CAAC;gBACpC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,IAAI,CAAC,CAAC;gBAEpC,oFAAoF;gBACpF,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC1B,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;gBAE1B,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAC5B,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC/C,CAAC;qBAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;oBAChC,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,cAAc,GAAG,GAAG,CAAC;gBACzC,CAAC;gBAED,uCAAuC;gBACvC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3F,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/C,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC5C,CAAC;qBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,GAAG,QAAQ,CAAC;gBACjD,CAAC;gBAED,QAAQ,IAAI,YAAY,KAAK,QAAQ,KAAK,YAAY,cAAc,GAAG,GAAG,GAAG,CAAC,aAAa,WAAW,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,cAAc,SAAS,SAAS,MAAM,SAAS,MAAM,MAAM,CAAC;YACjM,CAAC;YAED,4DAA4D;YAC5D,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC5B,MAAM,WAAW,GAAG,gBAAgB,UAAU,gBAAgB,QAAQ,aAAa,EAAE,CAAC,KAAK,cAAc,OAAO,kBAAkB,KAAK,6BAA6B,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,KAAK,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC9O,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;gBAChC,MAAM,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;gBAChC,QAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,YAAY,WAAW,IAAI,CAAC;gBAChE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oBAC1B,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC;oBAC/C,QAAQ,IAAI,aAAa,EAAE,SAAS,EAAE,KAAK,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;gBACvE,CAAC,CAAC,CAAC;gBACH,QAAQ,IAAI,SAAS,CAAC;YACxB,CAAC;YAED,QAAQ,IAAI,YAAY,KAAK,CAAC,CAAC,QAAQ,OAAO,YAAY,KAAK,IAAI,CAAC;YACpE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBAC1B,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC;gBAC/C,QAAQ,IAAI,aAAa,KAAK,CAAC,CAAC,SAAS,EAAE,KAAK,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5E,CAAC,CAAC,CAAC;YACH,QAAQ,IAAI,SAAS,CAAC;YAEtB,OAAO,IAAI,iCAAiC,QAAQ,MAAM,CAAC;YAE3D,8EAA8E;YAC9E,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACnB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACnB,IAAI,UAAU,KAAK,QAAQ;gBAAE,IAAI,IAAI,cAAc,GAAG,CAAC,CAAC;iBACnD,IAAI,UAAU,KAAK,KAAK;gBAAE,IAAI,IAAI,cAAc,CAAC;YAEtD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACtH,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ;gBAAE,IAAI,IAAI,WAAW,GAAG,CAAC,CAAC;iBACzE,IAAI,SAAS,KAAK,QAAQ;gBAAE,IAAI,IAAI,WAAW,GAAG,QAAQ,CAAC;YAEhE,MAAM,SAAS,GAAG,IAAI,GAAG,WAAW,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,cAAc,CAAC;YACvC,IAAI,SAAS,GAAG,aAAa;gBAAE,aAAa,GAAG,SAAS,CAAC;YAEzD,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,QAAQ,GAAG,KAAK,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;gBACnE,QAAQ,CAAC,IAAI,CACX,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,qCAAqC,CAClF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAErG,MAAM,SAAS,GAAG,eAAe,KAAK,aAAa,MAAM;QACrD,SAAS;QACT,IAAI;QACJ,OAAO;WACJ,CAAC;QAER,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;aAC/B,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;aAC7D,QAAQ,EAAE,CAAC;QAEd,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnC,MAAc,CAAC,MAAM,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;QAClE,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAClF,IAAI,GAAG,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAAE,OAAO,GAAG,CAAC,8BAA8B,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAClH,OAAO,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"add-text.js","sourceRoot":"","sources":["../../src/ops/add-text.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -105,6 +105,25 @@ export interface TextBackground {
|
|
|
105
105
|
opacity?: number;
|
|
106
106
|
borderRadius?: number;
|
|
107
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* A styled inline span within a text layer.
|
|
110
|
+
* Each span maps to a single SVG `<tspan>` element.
|
|
111
|
+
* Unset fields inherit from the parent `TextLayer`.
|
|
112
|
+
*/
|
|
113
|
+
export interface TextSpan {
|
|
114
|
+
/** The text content for this span */
|
|
115
|
+
text: string;
|
|
116
|
+
/** Override color for this span. Inherits `layer.color` if omitted. */
|
|
117
|
+
color?: string;
|
|
118
|
+
/** If true, renders with `font-weight: bold` */
|
|
119
|
+
bold?: boolean;
|
|
120
|
+
/** If true, renders with `font-style: italic` */
|
|
121
|
+
italic?: boolean;
|
|
122
|
+
/** Override fontSize for this span. Inherits `layer.fontSize` if omitted. */
|
|
123
|
+
fontSize?: number;
|
|
124
|
+
/** Background highlight color for this span */
|
|
125
|
+
highlight?: string;
|
|
126
|
+
}
|
|
108
127
|
export interface TextLayer {
|
|
109
128
|
text: string;
|
|
110
129
|
x: number;
|
|
@@ -135,6 +154,17 @@ export interface TextLayer {
|
|
|
135
154
|
offsetY: number;
|
|
136
155
|
blur?: number;
|
|
137
156
|
};
|
|
157
|
+
/**
|
|
158
|
+
* Inline mixed-style spans.
|
|
159
|
+
* When provided, `text` field is ignored and this array is rendered instead.
|
|
160
|
+
* Use `\n` within span text or a separate `{ text: '\n' }` span for line breaks.
|
|
161
|
+
* @example
|
|
162
|
+
* spans: [
|
|
163
|
+
* { text: '캠핑장, 북스테이 등 ' },
|
|
164
|
+
* { text: '다양한 주제별 숙소 추천', bold: true, color: '#1A1A1A' },
|
|
165
|
+
* ]
|
|
166
|
+
*/
|
|
167
|
+
spans?: TextSpan[];
|
|
138
168
|
}
|
|
139
169
|
export type BlendMode = 'over' | 'multiply' | 'screen' | 'overlay' | 'darken' | 'lighten';
|
|
140
170
|
export interface CompositeLayer {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a fontUrl to a local `file://` path usable by librsvg.
|
|
3
|
+
*
|
|
4
|
+
* Handles three cases:
|
|
5
|
+
* - `file://` or absolute path → returned as `file://` URI
|
|
6
|
+
* - `https://fonts.googleapis.com/css*` → fetches CSS, extracts font URL, downloads binary
|
|
7
|
+
* - Direct binary URL (`.woff`, `.woff2`, `.ttf`, `.otf`) → downloads and caches
|
|
8
|
+
*
|
|
9
|
+
* Cache is stored in `os.tmpdir()` with prefix `iet-font-`. No TTL (font files are immutable).
|
|
10
|
+
*
|
|
11
|
+
* @param fontUrl - The font URL to resolve
|
|
12
|
+
* @returns A `file://` URI pointing to a local font file
|
|
13
|
+
* @throws {Error} If network fetch fails or CSS contains no font URLs
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // Google Fonts CSS URL
|
|
17
|
+
* const path = await resolveFontUrl('https://fonts.googleapis.com/css2?family=Jua');
|
|
18
|
+
* // → 'file:///tmp/iet-font-abcdef1234567890.woff2'
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Direct font binary URL
|
|
22
|
+
* const path = await resolveFontUrl('https://example.com/font.woff2');
|
|
23
|
+
* // → 'file:///tmp/iet-font-0123456789abcdef.woff2'
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveFontUrl(fontUrl: string): Promise<string>;
|
|
26
|
+
//# sourceMappingURL=font-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font-loader.d.ts","sourceRoot":"","sources":["../../src/utils/font-loader.ts"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0DrE"}
|