@shotstack/shotstack-canvas 1.9.2 → 1.9.4
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 +13 -13
- package/dist/entry.node.cjs +17 -13
- package/dist/entry.node.d.cts +54 -54
- package/dist/entry.node.d.ts +54 -54
- package/dist/entry.node.js +17 -13
- package/dist/entry.web.d.ts +54 -54
- package/dist/entry.web.js +34 -22
- package/dist/{hb-KXF2MJ2J.js → hb-ODWKSLMB.js} +2 -2
- package/dist/{hbjs-ZTRARROF.js → hbjs-HHU2TAW7.js} +2 -2
- package/package.json +65 -65
- package/scripts/postinstall.js +58 -58
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# @shotstack/shotstack-canvas
|
|
2
|
-
|
|
3
|
-
One package → identical text shaping/wrapping/animation on Web & Node.
|
|
4
|
-
- HarfBuzz WASM for shaping and glyph outlines (via `harfbuzzjs`).
|
|
5
|
-
- Device-independent draw-ops.
|
|
6
|
-
- Painters: Canvas2D (web) and node-canvas (node).
|
|
7
|
-
- Deterministic time-driven animations.
|
|
8
|
-
|
|
9
|
-
## Install
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
pnpm add @shotstack/shotstack-canvas
|
|
13
|
-
# or npm i / yarn add
|
|
1
|
+
# @shotstack/shotstack-canvas
|
|
2
|
+
|
|
3
|
+
One package → identical text shaping/wrapping/animation on Web & Node.
|
|
4
|
+
- HarfBuzz WASM for shaping and glyph outlines (via `harfbuzzjs`).
|
|
5
|
+
- Device-independent draw-ops.
|
|
6
|
+
- Painters: Canvas2D (web) and node-canvas (node).
|
|
7
|
+
- Deterministic time-driven animations.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm add @shotstack/shotstack-canvas
|
|
13
|
+
# or npm i / yarn add
|
package/dist/entry.node.cjs
CHANGED
|
@@ -3123,6 +3123,10 @@ function quadraticToCubic(x0, y0, qx, qy, x, y) {
|
|
|
3123
3123
|
}
|
|
3124
3124
|
|
|
3125
3125
|
// src/core/resvg-renderer.ts
|
|
3126
|
+
function toNumber(value, defaultValue) {
|
|
3127
|
+
if (value === void 0) return defaultValue;
|
|
3128
|
+
return typeof value === "string" ? parseFloat(value) : value;
|
|
3129
|
+
}
|
|
3126
3130
|
var resvgModule = null;
|
|
3127
3131
|
async function getResvg() {
|
|
3128
3132
|
if (!resvgModule) {
|
|
@@ -3156,8 +3160,8 @@ function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
|
3156
3160
|
if (!asset.shape) {
|
|
3157
3161
|
throw new Error("Shape is required for shape mode");
|
|
3158
3162
|
}
|
|
3159
|
-
const width = asset.width
|
|
3160
|
-
const height = asset.height
|
|
3163
|
+
const width = toNumber(asset.width, defaultWidth);
|
|
3164
|
+
const height = toNumber(asset.height, defaultHeight);
|
|
3161
3165
|
const pathData = generateShapePathData(asset.shape);
|
|
3162
3166
|
const bounds = computeSimplePathBounds(pathData);
|
|
3163
3167
|
const centerX = width / 2;
|
|
@@ -3167,15 +3171,15 @@ function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
|
3167
3171
|
let offsetX = centerX - pathCenterX;
|
|
3168
3172
|
let offsetY = centerY - pathCenterY;
|
|
3169
3173
|
if (asset.transform) {
|
|
3170
|
-
offsetX += asset.transform.x
|
|
3171
|
-
offsetY += asset.transform.y
|
|
3174
|
+
offsetX += toNumber(asset.transform.x, 0);
|
|
3175
|
+
offsetY += toNumber(asset.transform.y, 0);
|
|
3172
3176
|
}
|
|
3173
3177
|
const elements = [];
|
|
3174
3178
|
if (asset.shadow) {
|
|
3175
|
-
const shadowOffsetX = asset.shadow.offsetX
|
|
3176
|
-
const shadowOffsetY = asset.shadow.offsetY
|
|
3179
|
+
const shadowOffsetX = toNumber(asset.shadow.offsetX, 4);
|
|
3180
|
+
const shadowOffsetY = toNumber(asset.shadow.offsetY, 4);
|
|
3177
3181
|
const shadowColor = asset.shadow.color ?? "#000000";
|
|
3178
|
-
const shadowOpacity = asset.shadow.opacity
|
|
3182
|
+
const shadowOpacity = toNumber(asset.shadow.opacity, 0.5);
|
|
3179
3183
|
elements.push(
|
|
3180
3184
|
`<path d="${pathData}" transform="translate(${offsetX + shadowOffsetX}, ${offsetY + shadowOffsetY})" fill="${shadowColor}" fill-opacity="${shadowOpacity}"/>`
|
|
3181
3185
|
);
|
|
@@ -3194,7 +3198,7 @@ function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
|
3194
3198
|
} else {
|
|
3195
3199
|
pathAttrs.push(`fill="none"`);
|
|
3196
3200
|
}
|
|
3197
|
-
if (asset.stroke && asset.stroke.width && asset.stroke.width > 0) {
|
|
3201
|
+
if (asset.stroke && asset.stroke.width && toNumber(asset.stroke.width, 0) > 0) {
|
|
3198
3202
|
pathAttrs.push(`stroke="${asset.stroke.color ?? "#000000"}"`);
|
|
3199
3203
|
pathAttrs.push(`stroke-width="${asset.stroke.width}"`);
|
|
3200
3204
|
if (asset.stroke.opacity !== void 0 && asset.stroke.opacity !== 1) {
|
|
@@ -3223,18 +3227,18 @@ function generateFillDefinition(fill, id, bounds) {
|
|
|
3223
3227
|
return { fill: fill.color };
|
|
3224
3228
|
}
|
|
3225
3229
|
if (fill.type === "linear") {
|
|
3226
|
-
const angle = fill.angle
|
|
3230
|
+
const angle = toNumber(fill.angle, 0);
|
|
3227
3231
|
const rad = angle * Math.PI / 180;
|
|
3228
3232
|
const x1 = 50 - Math.cos(rad) * 50;
|
|
3229
3233
|
const y1 = 50 - Math.sin(rad) * 50;
|
|
3230
3234
|
const x2 = 50 + Math.cos(rad) * 50;
|
|
3231
3235
|
const y2 = 50 + Math.sin(rad) * 50;
|
|
3232
|
-
const stops = fill.stops.map((s) => `<stop offset="${s.offset * 100}%" stop-color="${s.color}"/>`).join("");
|
|
3236
|
+
const stops = fill.stops.map((s) => `<stop offset="${toNumber(s.offset, 0) * 100}%" stop-color="${s.color}"/>`).join("");
|
|
3233
3237
|
const defs = `<defs><linearGradient id="${id}" x1="${x1}%" y1="${y1}%" x2="${x2}%" y2="${y2}%">${stops}</linearGradient></defs>`;
|
|
3234
3238
|
return { fill: `url(#${id})`, defs };
|
|
3235
3239
|
}
|
|
3236
3240
|
if (fill.type === "radial") {
|
|
3237
|
-
const stops = fill.stops.map((s) => `<stop offset="${s.offset * 100}%" stop-color="${s.color}"/>`).join("");
|
|
3241
|
+
const stops = fill.stops.map((s) => `<stop offset="${toNumber(s.offset, 0) * 100}%" stop-color="${s.color}"/>`).join("");
|
|
3238
3242
|
const defs = `<defs><radialGradient id="${id}" cx="50%" cy="50%" r="50%">${stops}</radialGradient></defs>`;
|
|
3239
3243
|
return { fill: `url(#${id})`, defs };
|
|
3240
3244
|
}
|
|
@@ -3636,8 +3640,8 @@ async function renderSvgAssetToPng(asset, options = {}) {
|
|
|
3636
3640
|
targetWidth = dimensions.width || defaultWidth;
|
|
3637
3641
|
targetHeight = dimensions.height || defaultHeight;
|
|
3638
3642
|
} else if (asset.shape) {
|
|
3639
|
-
targetWidth = asset.width
|
|
3640
|
-
targetHeight = asset.height
|
|
3643
|
+
targetWidth = toNumber(asset.width, defaultWidth);
|
|
3644
|
+
targetHeight = toNumber(asset.height, defaultHeight);
|
|
3641
3645
|
svgString = shapeToSvgString(asset, targetWidth, targetHeight);
|
|
3642
3646
|
} else {
|
|
3643
3647
|
throw new Error("Either 'src' or 'shape' must be provided");
|
package/dist/entry.node.d.cts
CHANGED
|
@@ -9,9 +9,9 @@ declare const CanvasRichTextAssetSchema: z.ZodObject<{
|
|
|
9
9
|
height: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
10
10
|
font: z.ZodOptional<z.ZodObject<{
|
|
11
11
|
stroke: z.ZodOptional<z.ZodObject<{
|
|
12
|
-
width: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
13
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
14
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
12
|
+
width: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
13
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
14
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
15
15
|
}, z.core.$strip>>;
|
|
16
16
|
family: z.ZodDefault<z.ZodString>;
|
|
17
17
|
size: z.ZodDefault<z.ZodNumber>;
|
|
@@ -59,7 +59,7 @@ declare const CanvasRichTextAssetSchema: z.ZodObject<{
|
|
|
59
59
|
opacity: z.ZodDefault<z.ZodNumber>;
|
|
60
60
|
}, z.core.$strip>>;
|
|
61
61
|
background: z.ZodOptional<z.ZodObject<{
|
|
62
|
-
borderRadius: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
62
|
+
borderRadius: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
63
63
|
color: z.ZodOptional<z.ZodString>;
|
|
64
64
|
opacity: z.ZodDefault<z.ZodNumber>;
|
|
65
65
|
}, z.core.$strip>>;
|
|
@@ -127,65 +127,65 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
127
127
|
type: z.ZodEnum<{
|
|
128
128
|
rectangle: "rectangle";
|
|
129
129
|
}>;
|
|
130
|
-
width: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
131
|
-
height: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
132
|
-
cornerRadius: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
130
|
+
width: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
131
|
+
height: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
132
|
+
cornerRadius: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
133
133
|
}, z.core.$strip>, z.ZodObject<{
|
|
134
134
|
type: z.ZodEnum<{
|
|
135
135
|
circle: "circle";
|
|
136
136
|
}>;
|
|
137
|
-
radius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
137
|
+
radius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
138
138
|
}, z.core.$strip>, z.ZodObject<{
|
|
139
139
|
type: z.ZodEnum<{
|
|
140
140
|
ellipse: "ellipse";
|
|
141
141
|
}>;
|
|
142
|
-
radiusX: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
143
|
-
radiusY: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
142
|
+
radiusX: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
143
|
+
radiusY: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
144
144
|
}, z.core.$strip>, z.ZodObject<{
|
|
145
145
|
type: z.ZodEnum<{
|
|
146
146
|
line: "line";
|
|
147
147
|
}>;
|
|
148
|
-
length: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
149
|
-
thickness: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
148
|
+
length: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
149
|
+
thickness: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
150
150
|
}, z.core.$strip>, z.ZodObject<{
|
|
151
151
|
type: z.ZodEnum<{
|
|
152
152
|
polygon: "polygon";
|
|
153
153
|
}>;
|
|
154
|
-
sides: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
155
|
-
radius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
154
|
+
sides: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
155
|
+
radius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
156
156
|
}, z.core.$strip>, z.ZodObject<{
|
|
157
157
|
type: z.ZodEnum<{
|
|
158
158
|
star: "star";
|
|
159
159
|
}>;
|
|
160
|
-
points: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
161
|
-
outerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
162
|
-
innerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
160
|
+
points: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
161
|
+
outerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
162
|
+
innerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
163
163
|
}, z.core.$strip>, z.ZodObject<{
|
|
164
164
|
type: z.ZodEnum<{
|
|
165
165
|
arrow: "arrow";
|
|
166
166
|
}>;
|
|
167
|
-
length: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
168
|
-
headWidth: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
169
|
-
headLength: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
170
|
-
shaftWidth: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
167
|
+
length: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
168
|
+
headWidth: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
169
|
+
headLength: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
170
|
+
shaftWidth: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
171
171
|
}, z.core.$strip>, z.ZodObject<{
|
|
172
172
|
type: z.ZodEnum<{
|
|
173
173
|
heart: "heart";
|
|
174
174
|
}>;
|
|
175
|
-
size: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
175
|
+
size: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
176
176
|
}, z.core.$strip>, z.ZodObject<{
|
|
177
177
|
type: z.ZodEnum<{
|
|
178
178
|
cross: "cross";
|
|
179
179
|
}>;
|
|
180
|
-
width: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
181
|
-
height: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
182
|
-
thickness: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
180
|
+
width: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
181
|
+
height: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
182
|
+
thickness: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
183
183
|
}, z.core.$strip>, z.ZodObject<{
|
|
184
184
|
type: z.ZodEnum<{
|
|
185
185
|
ring: "ring";
|
|
186
186
|
}>;
|
|
187
|
-
outerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
188
|
-
innerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
187
|
+
outerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
188
|
+
innerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
189
189
|
}, z.core.$strip>, z.ZodObject<{
|
|
190
190
|
type: z.ZodEnum<{
|
|
191
191
|
path: "path";
|
|
@@ -197,31 +197,31 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
197
197
|
solid: "solid";
|
|
198
198
|
}>;
|
|
199
199
|
color: z.ZodDefault<z.ZodString>;
|
|
200
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
200
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
201
201
|
}, z.core.$strip>, z.ZodObject<{
|
|
202
202
|
type: z.ZodEnum<{
|
|
203
203
|
linear: "linear";
|
|
204
204
|
}>;
|
|
205
|
-
angle: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
205
|
+
angle: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
206
206
|
stops: z.ZodArray<z.ZodObject<{
|
|
207
|
-
offset: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
208
|
-
color: z.ZodString
|
|
207
|
+
offset: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
208
|
+
color: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
|
|
209
209
|
}, z.core.$strip>>;
|
|
210
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
210
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
211
211
|
}, z.core.$strip>, z.ZodObject<{
|
|
212
212
|
type: z.ZodEnum<{
|
|
213
213
|
radial: "radial";
|
|
214
214
|
}>;
|
|
215
215
|
stops: z.ZodArray<z.ZodObject<{
|
|
216
|
-
offset: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
217
|
-
color: z.ZodString
|
|
216
|
+
offset: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
217
|
+
color: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
|
|
218
218
|
}, z.core.$strip>>;
|
|
219
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
219
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
220
220
|
}, z.core.$strip>], "type">>;
|
|
221
221
|
stroke: z.ZodOptional<z.ZodObject<{
|
|
222
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
223
|
-
width: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
224
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
222
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
223
|
+
width: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
224
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
225
225
|
lineCap: z.ZodOptional<z.ZodEnum<{
|
|
226
226
|
butt: "butt";
|
|
227
227
|
round: "round";
|
|
@@ -232,27 +232,27 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
232
232
|
miter: "miter";
|
|
233
233
|
bevel: "bevel";
|
|
234
234
|
}>>;
|
|
235
|
-
dashArray: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
236
|
-
dashOffset: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
235
|
+
dashArray: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
236
|
+
dashOffset: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
237
237
|
}, z.core.$strip>>;
|
|
238
238
|
shadow: z.ZodOptional<z.ZodObject<{
|
|
239
|
-
offsetX: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
240
|
-
offsetY: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
241
|
-
blur: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
242
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
243
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
239
|
+
offsetX: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
240
|
+
offsetY: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
241
|
+
blur: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
242
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
243
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
244
244
|
}, z.core.$strip>>;
|
|
245
245
|
transform: z.ZodOptional<z.ZodObject<{
|
|
246
|
-
x: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
247
|
-
y: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
248
|
-
rotation: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
249
|
-
scale: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
250
|
-
originX: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
251
|
-
originY: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
246
|
+
x: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
247
|
+
y: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
248
|
+
rotation: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
249
|
+
scale: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
250
|
+
originX: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
251
|
+
originY: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
252
252
|
}, z.core.$strip>>;
|
|
253
|
-
opacity: z.ZodDefault<z.ZodOptional<z.
|
|
254
|
-
width: z.ZodOptional<z.
|
|
255
|
-
height: z.ZodOptional<z.
|
|
253
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
254
|
+
width: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>;
|
|
255
|
+
height: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>;
|
|
256
256
|
}, z.core.$strip>;
|
|
257
257
|
type CanvasSvgAsset = z.infer<typeof CanvasSvgAssetSchema>;
|
|
258
258
|
|
package/dist/entry.node.d.ts
CHANGED
|
@@ -9,9 +9,9 @@ declare const CanvasRichTextAssetSchema: z.ZodObject<{
|
|
|
9
9
|
height: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
10
10
|
font: z.ZodOptional<z.ZodObject<{
|
|
11
11
|
stroke: z.ZodOptional<z.ZodObject<{
|
|
12
|
-
width: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
13
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
14
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
12
|
+
width: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
13
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
14
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
15
15
|
}, z.core.$strip>>;
|
|
16
16
|
family: z.ZodDefault<z.ZodString>;
|
|
17
17
|
size: z.ZodDefault<z.ZodNumber>;
|
|
@@ -59,7 +59,7 @@ declare const CanvasRichTextAssetSchema: z.ZodObject<{
|
|
|
59
59
|
opacity: z.ZodDefault<z.ZodNumber>;
|
|
60
60
|
}, z.core.$strip>>;
|
|
61
61
|
background: z.ZodOptional<z.ZodObject<{
|
|
62
|
-
borderRadius: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
62
|
+
borderRadius: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
63
63
|
color: z.ZodOptional<z.ZodString>;
|
|
64
64
|
opacity: z.ZodDefault<z.ZodNumber>;
|
|
65
65
|
}, z.core.$strip>>;
|
|
@@ -127,65 +127,65 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
127
127
|
type: z.ZodEnum<{
|
|
128
128
|
rectangle: "rectangle";
|
|
129
129
|
}>;
|
|
130
|
-
width: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
131
|
-
height: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
132
|
-
cornerRadius: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
130
|
+
width: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
131
|
+
height: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
132
|
+
cornerRadius: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
133
133
|
}, z.core.$strip>, z.ZodObject<{
|
|
134
134
|
type: z.ZodEnum<{
|
|
135
135
|
circle: "circle";
|
|
136
136
|
}>;
|
|
137
|
-
radius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
137
|
+
radius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
138
138
|
}, z.core.$strip>, z.ZodObject<{
|
|
139
139
|
type: z.ZodEnum<{
|
|
140
140
|
ellipse: "ellipse";
|
|
141
141
|
}>;
|
|
142
|
-
radiusX: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
143
|
-
radiusY: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
142
|
+
radiusX: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
143
|
+
radiusY: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
144
144
|
}, z.core.$strip>, z.ZodObject<{
|
|
145
145
|
type: z.ZodEnum<{
|
|
146
146
|
line: "line";
|
|
147
147
|
}>;
|
|
148
|
-
length: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
149
|
-
thickness: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
148
|
+
length: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
149
|
+
thickness: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
150
150
|
}, z.core.$strip>, z.ZodObject<{
|
|
151
151
|
type: z.ZodEnum<{
|
|
152
152
|
polygon: "polygon";
|
|
153
153
|
}>;
|
|
154
|
-
sides: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
155
|
-
radius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
154
|
+
sides: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
155
|
+
radius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
156
156
|
}, z.core.$strip>, z.ZodObject<{
|
|
157
157
|
type: z.ZodEnum<{
|
|
158
158
|
star: "star";
|
|
159
159
|
}>;
|
|
160
|
-
points: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
161
|
-
outerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
162
|
-
innerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
160
|
+
points: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
161
|
+
outerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
162
|
+
innerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
163
163
|
}, z.core.$strip>, z.ZodObject<{
|
|
164
164
|
type: z.ZodEnum<{
|
|
165
165
|
arrow: "arrow";
|
|
166
166
|
}>;
|
|
167
|
-
length: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
168
|
-
headWidth: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
169
|
-
headLength: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
170
|
-
shaftWidth: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
167
|
+
length: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
168
|
+
headWidth: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
169
|
+
headLength: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
170
|
+
shaftWidth: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
171
171
|
}, z.core.$strip>, z.ZodObject<{
|
|
172
172
|
type: z.ZodEnum<{
|
|
173
173
|
heart: "heart";
|
|
174
174
|
}>;
|
|
175
|
-
size: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
175
|
+
size: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
176
176
|
}, z.core.$strip>, z.ZodObject<{
|
|
177
177
|
type: z.ZodEnum<{
|
|
178
178
|
cross: "cross";
|
|
179
179
|
}>;
|
|
180
|
-
width: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
181
|
-
height: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
182
|
-
thickness: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
180
|
+
width: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
181
|
+
height: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
182
|
+
thickness: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
183
183
|
}, z.core.$strip>, z.ZodObject<{
|
|
184
184
|
type: z.ZodEnum<{
|
|
185
185
|
ring: "ring";
|
|
186
186
|
}>;
|
|
187
|
-
outerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
188
|
-
innerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
187
|
+
outerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
188
|
+
innerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
189
189
|
}, z.core.$strip>, z.ZodObject<{
|
|
190
190
|
type: z.ZodEnum<{
|
|
191
191
|
path: "path";
|
|
@@ -197,31 +197,31 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
197
197
|
solid: "solid";
|
|
198
198
|
}>;
|
|
199
199
|
color: z.ZodDefault<z.ZodString>;
|
|
200
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
200
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
201
201
|
}, z.core.$strip>, z.ZodObject<{
|
|
202
202
|
type: z.ZodEnum<{
|
|
203
203
|
linear: "linear";
|
|
204
204
|
}>;
|
|
205
|
-
angle: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
205
|
+
angle: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
206
206
|
stops: z.ZodArray<z.ZodObject<{
|
|
207
|
-
offset: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
208
|
-
color: z.ZodString
|
|
207
|
+
offset: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
208
|
+
color: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
|
|
209
209
|
}, z.core.$strip>>;
|
|
210
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
210
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
211
211
|
}, z.core.$strip>, z.ZodObject<{
|
|
212
212
|
type: z.ZodEnum<{
|
|
213
213
|
radial: "radial";
|
|
214
214
|
}>;
|
|
215
215
|
stops: z.ZodArray<z.ZodObject<{
|
|
216
|
-
offset: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
217
|
-
color: z.ZodString
|
|
216
|
+
offset: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
217
|
+
color: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
|
|
218
218
|
}, z.core.$strip>>;
|
|
219
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
219
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
220
220
|
}, z.core.$strip>], "type">>;
|
|
221
221
|
stroke: z.ZodOptional<z.ZodObject<{
|
|
222
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
223
|
-
width: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
224
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
222
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
223
|
+
width: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
224
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
225
225
|
lineCap: z.ZodOptional<z.ZodEnum<{
|
|
226
226
|
butt: "butt";
|
|
227
227
|
round: "round";
|
|
@@ -232,27 +232,27 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
232
232
|
miter: "miter";
|
|
233
233
|
bevel: "bevel";
|
|
234
234
|
}>>;
|
|
235
|
-
dashArray: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
236
|
-
dashOffset: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
235
|
+
dashArray: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
236
|
+
dashOffset: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
237
237
|
}, z.core.$strip>>;
|
|
238
238
|
shadow: z.ZodOptional<z.ZodObject<{
|
|
239
|
-
offsetX: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
240
|
-
offsetY: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
241
|
-
blur: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
242
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
243
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
239
|
+
offsetX: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
240
|
+
offsetY: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
241
|
+
blur: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
242
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
243
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
244
244
|
}, z.core.$strip>>;
|
|
245
245
|
transform: z.ZodOptional<z.ZodObject<{
|
|
246
|
-
x: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
247
|
-
y: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
248
|
-
rotation: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
249
|
-
scale: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
250
|
-
originX: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
251
|
-
originY: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
246
|
+
x: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
247
|
+
y: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
248
|
+
rotation: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
249
|
+
scale: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
250
|
+
originX: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
251
|
+
originY: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
252
252
|
}, z.core.$strip>>;
|
|
253
|
-
opacity: z.ZodDefault<z.ZodOptional<z.
|
|
254
|
-
width: z.ZodOptional<z.
|
|
255
|
-
height: z.ZodOptional<z.
|
|
253
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
254
|
+
width: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>;
|
|
255
|
+
height: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>;
|
|
256
256
|
}, z.core.$strip>;
|
|
257
257
|
type CanvasSvgAsset = z.infer<typeof CanvasSvgAssetSchema>;
|
|
258
258
|
|
package/dist/entry.node.js
CHANGED
|
@@ -3079,6 +3079,10 @@ function quadraticToCubic(x0, y0, qx, qy, x, y) {
|
|
|
3079
3079
|
}
|
|
3080
3080
|
|
|
3081
3081
|
// src/core/resvg-renderer.ts
|
|
3082
|
+
function toNumber(value, defaultValue) {
|
|
3083
|
+
if (value === void 0) return defaultValue;
|
|
3084
|
+
return typeof value === "string" ? parseFloat(value) : value;
|
|
3085
|
+
}
|
|
3082
3086
|
var resvgModule = null;
|
|
3083
3087
|
async function getResvg() {
|
|
3084
3088
|
if (!resvgModule) {
|
|
@@ -3112,8 +3116,8 @@ function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
|
3112
3116
|
if (!asset.shape) {
|
|
3113
3117
|
throw new Error("Shape is required for shape mode");
|
|
3114
3118
|
}
|
|
3115
|
-
const width = asset.width
|
|
3116
|
-
const height = asset.height
|
|
3119
|
+
const width = toNumber(asset.width, defaultWidth);
|
|
3120
|
+
const height = toNumber(asset.height, defaultHeight);
|
|
3117
3121
|
const pathData = generateShapePathData(asset.shape);
|
|
3118
3122
|
const bounds = computeSimplePathBounds(pathData);
|
|
3119
3123
|
const centerX = width / 2;
|
|
@@ -3123,15 +3127,15 @@ function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
|
3123
3127
|
let offsetX = centerX - pathCenterX;
|
|
3124
3128
|
let offsetY = centerY - pathCenterY;
|
|
3125
3129
|
if (asset.transform) {
|
|
3126
|
-
offsetX += asset.transform.x
|
|
3127
|
-
offsetY += asset.transform.y
|
|
3130
|
+
offsetX += toNumber(asset.transform.x, 0);
|
|
3131
|
+
offsetY += toNumber(asset.transform.y, 0);
|
|
3128
3132
|
}
|
|
3129
3133
|
const elements = [];
|
|
3130
3134
|
if (asset.shadow) {
|
|
3131
|
-
const shadowOffsetX = asset.shadow.offsetX
|
|
3132
|
-
const shadowOffsetY = asset.shadow.offsetY
|
|
3135
|
+
const shadowOffsetX = toNumber(asset.shadow.offsetX, 4);
|
|
3136
|
+
const shadowOffsetY = toNumber(asset.shadow.offsetY, 4);
|
|
3133
3137
|
const shadowColor = asset.shadow.color ?? "#000000";
|
|
3134
|
-
const shadowOpacity = asset.shadow.opacity
|
|
3138
|
+
const shadowOpacity = toNumber(asset.shadow.opacity, 0.5);
|
|
3135
3139
|
elements.push(
|
|
3136
3140
|
`<path d="${pathData}" transform="translate(${offsetX + shadowOffsetX}, ${offsetY + shadowOffsetY})" fill="${shadowColor}" fill-opacity="${shadowOpacity}"/>`
|
|
3137
3141
|
);
|
|
@@ -3150,7 +3154,7 @@ function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
|
3150
3154
|
} else {
|
|
3151
3155
|
pathAttrs.push(`fill="none"`);
|
|
3152
3156
|
}
|
|
3153
|
-
if (asset.stroke && asset.stroke.width && asset.stroke.width > 0) {
|
|
3157
|
+
if (asset.stroke && asset.stroke.width && toNumber(asset.stroke.width, 0) > 0) {
|
|
3154
3158
|
pathAttrs.push(`stroke="${asset.stroke.color ?? "#000000"}"`);
|
|
3155
3159
|
pathAttrs.push(`stroke-width="${asset.stroke.width}"`);
|
|
3156
3160
|
if (asset.stroke.opacity !== void 0 && asset.stroke.opacity !== 1) {
|
|
@@ -3179,18 +3183,18 @@ function generateFillDefinition(fill, id, bounds) {
|
|
|
3179
3183
|
return { fill: fill.color };
|
|
3180
3184
|
}
|
|
3181
3185
|
if (fill.type === "linear") {
|
|
3182
|
-
const angle = fill.angle
|
|
3186
|
+
const angle = toNumber(fill.angle, 0);
|
|
3183
3187
|
const rad = angle * Math.PI / 180;
|
|
3184
3188
|
const x1 = 50 - Math.cos(rad) * 50;
|
|
3185
3189
|
const y1 = 50 - Math.sin(rad) * 50;
|
|
3186
3190
|
const x2 = 50 + Math.cos(rad) * 50;
|
|
3187
3191
|
const y2 = 50 + Math.sin(rad) * 50;
|
|
3188
|
-
const stops = fill.stops.map((s) => `<stop offset="${s.offset * 100}%" stop-color="${s.color}"/>`).join("");
|
|
3192
|
+
const stops = fill.stops.map((s) => `<stop offset="${toNumber(s.offset, 0) * 100}%" stop-color="${s.color}"/>`).join("");
|
|
3189
3193
|
const defs = `<defs><linearGradient id="${id}" x1="${x1}%" y1="${y1}%" x2="${x2}%" y2="${y2}%">${stops}</linearGradient></defs>`;
|
|
3190
3194
|
return { fill: `url(#${id})`, defs };
|
|
3191
3195
|
}
|
|
3192
3196
|
if (fill.type === "radial") {
|
|
3193
|
-
const stops = fill.stops.map((s) => `<stop offset="${s.offset * 100}%" stop-color="${s.color}"/>`).join("");
|
|
3197
|
+
const stops = fill.stops.map((s) => `<stop offset="${toNumber(s.offset, 0) * 100}%" stop-color="${s.color}"/>`).join("");
|
|
3194
3198
|
const defs = `<defs><radialGradient id="${id}" cx="50%" cy="50%" r="50%">${stops}</radialGradient></defs>`;
|
|
3195
3199
|
return { fill: `url(#${id})`, defs };
|
|
3196
3200
|
}
|
|
@@ -3592,8 +3596,8 @@ async function renderSvgAssetToPng(asset, options = {}) {
|
|
|
3592
3596
|
targetWidth = dimensions.width || defaultWidth;
|
|
3593
3597
|
targetHeight = dimensions.height || defaultHeight;
|
|
3594
3598
|
} else if (asset.shape) {
|
|
3595
|
-
targetWidth = asset.width
|
|
3596
|
-
targetHeight = asset.height
|
|
3599
|
+
targetWidth = toNumber(asset.width, defaultWidth);
|
|
3600
|
+
targetHeight = toNumber(asset.height, defaultHeight);
|
|
3597
3601
|
svgString = shapeToSvgString(asset, targetWidth, targetHeight);
|
|
3598
3602
|
} else {
|
|
3599
3603
|
throw new Error("Either 'src' or 'shape' must be provided");
|
package/dist/entry.web.d.ts
CHANGED
|
@@ -9,9 +9,9 @@ declare const CanvasRichTextAssetSchema: z.ZodObject<{
|
|
|
9
9
|
height: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
10
10
|
font: z.ZodOptional<z.ZodObject<{
|
|
11
11
|
stroke: z.ZodOptional<z.ZodObject<{
|
|
12
|
-
width: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
13
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
14
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
12
|
+
width: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
13
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
14
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
15
15
|
}, z.core.$strip>>;
|
|
16
16
|
family: z.ZodDefault<z.ZodString>;
|
|
17
17
|
size: z.ZodDefault<z.ZodNumber>;
|
|
@@ -59,7 +59,7 @@ declare const CanvasRichTextAssetSchema: z.ZodObject<{
|
|
|
59
59
|
opacity: z.ZodDefault<z.ZodNumber>;
|
|
60
60
|
}, z.core.$strip>>;
|
|
61
61
|
background: z.ZodOptional<z.ZodObject<{
|
|
62
|
-
borderRadius: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
62
|
+
borderRadius: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
63
63
|
color: z.ZodOptional<z.ZodString>;
|
|
64
64
|
opacity: z.ZodDefault<z.ZodNumber>;
|
|
65
65
|
}, z.core.$strip>>;
|
|
@@ -127,65 +127,65 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
127
127
|
type: z.ZodEnum<{
|
|
128
128
|
rectangle: "rectangle";
|
|
129
129
|
}>;
|
|
130
|
-
width: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
131
|
-
height: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
132
|
-
cornerRadius: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
130
|
+
width: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
131
|
+
height: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
132
|
+
cornerRadius: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
133
133
|
}, z.core.$strip>, z.ZodObject<{
|
|
134
134
|
type: z.ZodEnum<{
|
|
135
135
|
circle: "circle";
|
|
136
136
|
}>;
|
|
137
|
-
radius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
137
|
+
radius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
138
138
|
}, z.core.$strip>, z.ZodObject<{
|
|
139
139
|
type: z.ZodEnum<{
|
|
140
140
|
ellipse: "ellipse";
|
|
141
141
|
}>;
|
|
142
|
-
radiusX: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
143
|
-
radiusY: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
142
|
+
radiusX: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
143
|
+
radiusY: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
144
144
|
}, z.core.$strip>, z.ZodObject<{
|
|
145
145
|
type: z.ZodEnum<{
|
|
146
146
|
line: "line";
|
|
147
147
|
}>;
|
|
148
|
-
length: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
149
|
-
thickness: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
148
|
+
length: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
149
|
+
thickness: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
150
150
|
}, z.core.$strip>, z.ZodObject<{
|
|
151
151
|
type: z.ZodEnum<{
|
|
152
152
|
polygon: "polygon";
|
|
153
153
|
}>;
|
|
154
|
-
sides: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
155
|
-
radius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
154
|
+
sides: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
155
|
+
radius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
156
156
|
}, z.core.$strip>, z.ZodObject<{
|
|
157
157
|
type: z.ZodEnum<{
|
|
158
158
|
star: "star";
|
|
159
159
|
}>;
|
|
160
|
-
points: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
161
|
-
outerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
162
|
-
innerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
160
|
+
points: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
161
|
+
outerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
162
|
+
innerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
163
163
|
}, z.core.$strip>, z.ZodObject<{
|
|
164
164
|
type: z.ZodEnum<{
|
|
165
165
|
arrow: "arrow";
|
|
166
166
|
}>;
|
|
167
|
-
length: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
168
|
-
headWidth: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
169
|
-
headLength: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
170
|
-
shaftWidth: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
167
|
+
length: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
168
|
+
headWidth: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
169
|
+
headLength: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
170
|
+
shaftWidth: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
171
171
|
}, z.core.$strip>, z.ZodObject<{
|
|
172
172
|
type: z.ZodEnum<{
|
|
173
173
|
heart: "heart";
|
|
174
174
|
}>;
|
|
175
|
-
size: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
175
|
+
size: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
176
176
|
}, z.core.$strip>, z.ZodObject<{
|
|
177
177
|
type: z.ZodEnum<{
|
|
178
178
|
cross: "cross";
|
|
179
179
|
}>;
|
|
180
|
-
width: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
181
|
-
height: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
182
|
-
thickness: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
180
|
+
width: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
181
|
+
height: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
182
|
+
thickness: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
183
183
|
}, z.core.$strip>, z.ZodObject<{
|
|
184
184
|
type: z.ZodEnum<{
|
|
185
185
|
ring: "ring";
|
|
186
186
|
}>;
|
|
187
|
-
outerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
188
|
-
innerRadius: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
187
|
+
outerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
188
|
+
innerRadius: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
189
189
|
}, z.core.$strip>, z.ZodObject<{
|
|
190
190
|
type: z.ZodEnum<{
|
|
191
191
|
path: "path";
|
|
@@ -197,31 +197,31 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
197
197
|
solid: "solid";
|
|
198
198
|
}>;
|
|
199
199
|
color: z.ZodDefault<z.ZodString>;
|
|
200
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
200
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
201
201
|
}, z.core.$strip>, z.ZodObject<{
|
|
202
202
|
type: z.ZodEnum<{
|
|
203
203
|
linear: "linear";
|
|
204
204
|
}>;
|
|
205
|
-
angle: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
205
|
+
angle: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
206
206
|
stops: z.ZodArray<z.ZodObject<{
|
|
207
|
-
offset: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
208
|
-
color: z.ZodString
|
|
207
|
+
offset: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
208
|
+
color: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
|
|
209
209
|
}, z.core.$strip>>;
|
|
210
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
210
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
211
211
|
}, z.core.$strip>, z.ZodObject<{
|
|
212
212
|
type: z.ZodEnum<{
|
|
213
213
|
radial: "radial";
|
|
214
214
|
}>;
|
|
215
215
|
stops: z.ZodArray<z.ZodObject<{
|
|
216
|
-
offset: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>;
|
|
217
|
-
color: z.ZodString
|
|
216
|
+
offset: z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>;
|
|
217
|
+
color: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
|
|
218
218
|
}, z.core.$strip>>;
|
|
219
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
219
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
220
220
|
}, z.core.$strip>], "type">>;
|
|
221
221
|
stroke: z.ZodOptional<z.ZodObject<{
|
|
222
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
223
|
-
width: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
224
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
222
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
223
|
+
width: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
224
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
225
225
|
lineCap: z.ZodOptional<z.ZodEnum<{
|
|
226
226
|
butt: "butt";
|
|
227
227
|
round: "round";
|
|
@@ -232,27 +232,27 @@ declare const CanvasSvgAssetSchema: z.ZodObject<{
|
|
|
232
232
|
miter: "miter";
|
|
233
233
|
bevel: "bevel";
|
|
234
234
|
}>>;
|
|
235
|
-
dashArray: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
236
|
-
dashOffset: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
235
|
+
dashArray: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
236
|
+
dashOffset: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
237
237
|
}, z.core.$strip>>;
|
|
238
238
|
shadow: z.ZodOptional<z.ZodObject<{
|
|
239
|
-
offsetX: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
240
|
-
offsetY: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
241
|
-
blur: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
242
|
-
color: z.ZodDefault<z.ZodOptional<z.ZodString
|
|
243
|
-
opacity: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
239
|
+
offsetX: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
240
|
+
offsetY: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
241
|
+
blur: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
242
|
+
color: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>>;
|
|
243
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
244
244
|
}, z.core.$strip>>;
|
|
245
245
|
transform: z.ZodOptional<z.ZodObject<{
|
|
246
|
-
x: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
247
|
-
y: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
248
|
-
rotation: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
249
|
-
scale: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
250
|
-
originX: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
251
|
-
originY: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>>>;
|
|
246
|
+
x: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
247
|
+
y: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
248
|
+
rotation: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
249
|
+
scale: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
250
|
+
originX: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
251
|
+
originY: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
252
252
|
}, z.core.$strip>>;
|
|
253
|
-
opacity: z.ZodDefault<z.ZodOptional<z.
|
|
254
|
-
width: z.ZodOptional<z.
|
|
255
|
-
height: z.ZodOptional<z.
|
|
253
|
+
opacity: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>>;
|
|
254
|
+
width: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>;
|
|
255
|
+
height: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodNumber>, z.ZodString]>>;
|
|
256
256
|
}, z.core.$strip>;
|
|
257
257
|
type CanvasSvgAsset = z.infer<typeof CanvasSvgAssetSchema>;
|
|
258
258
|
|
package/dist/entry.web.js
CHANGED
|
@@ -357,10 +357,10 @@ async function initHB(wasmBaseURL) {
|
|
|
357
357
|
}
|
|
358
358
|
};
|
|
359
359
|
}
|
|
360
|
-
const hbModule = await import("./hb-
|
|
360
|
+
const hbModule = await import("./hb-ODWKSLMB.js");
|
|
361
361
|
const hbFactory = hbModule.default || hbModule;
|
|
362
362
|
const hbInstance = await hbFactory({ wasmBinary });
|
|
363
|
-
const hbjsModule = await import("./hbjs-
|
|
363
|
+
const hbjsModule = await import("./hbjs-HHU2TAW7.js");
|
|
364
364
|
const hbjsWrapper = hbjsModule.default || hbjsModule;
|
|
365
365
|
const hb = hbjsWrapper(hbInstance);
|
|
366
366
|
if (!hb || typeof hb.createBuffer !== "function" || typeof hb.createFont !== "function") {
|
|
@@ -2738,6 +2738,10 @@ function quadraticToCubic(x0, y0, qx, qy, x, y) {
|
|
|
2738
2738
|
}
|
|
2739
2739
|
|
|
2740
2740
|
// src/core/resvg-renderer-web.ts
|
|
2741
|
+
function toNumber(value, defaultValue) {
|
|
2742
|
+
if (value === void 0) return defaultValue;
|
|
2743
|
+
return typeof value === "string" ? parseFloat(value) : value;
|
|
2744
|
+
}
|
|
2741
2745
|
var resvgWasmModule = null;
|
|
2742
2746
|
var wasmInitialized = false;
|
|
2743
2747
|
var DEFAULT_RESVG_WASM_URL = "https://unpkg.com/@resvg/resvg-wasm@2.6.2/index_bg.wasm";
|
|
@@ -2830,20 +2834,28 @@ async function renderSvgToPng(svgString, options = {}) {
|
|
|
2830
2834
|
resvgOptions.fitTo = { mode: "height", value: options.height };
|
|
2831
2835
|
}
|
|
2832
2836
|
const resvg = new Resvg(svgString, resvgOptions);
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2837
|
+
try {
|
|
2838
|
+
const rendered = resvg.render();
|
|
2839
|
+
try {
|
|
2840
|
+
const png = rendered.asPng();
|
|
2841
|
+
return {
|
|
2842
|
+
png,
|
|
2843
|
+
width: rendered.width,
|
|
2844
|
+
height: rendered.height
|
|
2845
|
+
};
|
|
2846
|
+
} finally {
|
|
2847
|
+
rendered.free();
|
|
2848
|
+
}
|
|
2849
|
+
} finally {
|
|
2850
|
+
resvg.free();
|
|
2851
|
+
}
|
|
2840
2852
|
}
|
|
2841
2853
|
function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
2842
2854
|
if (!asset.shape) {
|
|
2843
2855
|
throw new Error("Shape is required for shape mode");
|
|
2844
2856
|
}
|
|
2845
|
-
const width = asset.width
|
|
2846
|
-
const height = asset.height
|
|
2857
|
+
const width = toNumber(asset.width, defaultWidth);
|
|
2858
|
+
const height = toNumber(asset.height, defaultHeight);
|
|
2847
2859
|
const pathData = generateShapePathData(asset.shape);
|
|
2848
2860
|
const bounds = computeSimplePathBounds(pathData);
|
|
2849
2861
|
const centerX = width / 2;
|
|
@@ -2853,15 +2865,15 @@ function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
|
2853
2865
|
let offsetX = centerX - pathCenterX;
|
|
2854
2866
|
let offsetY = centerY - pathCenterY;
|
|
2855
2867
|
if (asset.transform) {
|
|
2856
|
-
offsetX += asset.transform.x
|
|
2857
|
-
offsetY += asset.transform.y
|
|
2868
|
+
offsetX += toNumber(asset.transform.x, 0);
|
|
2869
|
+
offsetY += toNumber(asset.transform.y, 0);
|
|
2858
2870
|
}
|
|
2859
2871
|
const elements = [];
|
|
2860
2872
|
if (asset.shadow) {
|
|
2861
|
-
const shadowOffsetX = asset.shadow.offsetX
|
|
2862
|
-
const shadowOffsetY = asset.shadow.offsetY
|
|
2873
|
+
const shadowOffsetX = toNumber(asset.shadow.offsetX, 4);
|
|
2874
|
+
const shadowOffsetY = toNumber(asset.shadow.offsetY, 4);
|
|
2863
2875
|
const shadowColor = asset.shadow.color ?? "#000000";
|
|
2864
|
-
const shadowOpacity = asset.shadow.opacity
|
|
2876
|
+
const shadowOpacity = toNumber(asset.shadow.opacity, 0.5);
|
|
2865
2877
|
elements.push(
|
|
2866
2878
|
`<path d="${pathData}" transform="translate(${offsetX + shadowOffsetX}, ${offsetY + shadowOffsetY})" fill="${shadowColor}" fill-opacity="${shadowOpacity}"/>`
|
|
2867
2879
|
);
|
|
@@ -2880,7 +2892,7 @@ function shapeToSvgString(asset, defaultWidth, defaultHeight) {
|
|
|
2880
2892
|
} else {
|
|
2881
2893
|
pathAttrs.push(`fill="none"`);
|
|
2882
2894
|
}
|
|
2883
|
-
if (asset.stroke && asset.stroke.width && asset.stroke.width > 0) {
|
|
2895
|
+
if (asset.stroke && asset.stroke.width && toNumber(asset.stroke.width, 0) > 0) {
|
|
2884
2896
|
pathAttrs.push(`stroke="${asset.stroke.color ?? "#000000"}"`);
|
|
2885
2897
|
pathAttrs.push(`stroke-width="${asset.stroke.width}"`);
|
|
2886
2898
|
if (asset.stroke.opacity !== void 0 && asset.stroke.opacity !== 1) {
|
|
@@ -2909,18 +2921,18 @@ function generateFillDefinition(fill, id, _bounds) {
|
|
|
2909
2921
|
return { fill: fill.color };
|
|
2910
2922
|
}
|
|
2911
2923
|
if (fill.type === "linear") {
|
|
2912
|
-
const angle = fill.angle
|
|
2924
|
+
const angle = toNumber(fill.angle, 0);
|
|
2913
2925
|
const rad = angle * Math.PI / 180;
|
|
2914
2926
|
const x1 = 50 - Math.cos(rad) * 50;
|
|
2915
2927
|
const y1 = 50 - Math.sin(rad) * 50;
|
|
2916
2928
|
const x2 = 50 + Math.cos(rad) * 50;
|
|
2917
2929
|
const y2 = 50 + Math.sin(rad) * 50;
|
|
2918
|
-
const stops = fill.stops.map((s) => `<stop offset="${s.offset * 100}%" stop-color="${s.color}"/>`).join("");
|
|
2930
|
+
const stops = fill.stops.map((s) => `<stop offset="${toNumber(s.offset, 0) * 100}%" stop-color="${s.color}"/>`).join("");
|
|
2919
2931
|
const defs = `<defs><linearGradient id="${id}" x1="${x1}%" y1="${y1}%" x2="${x2}%" y2="${y2}%">${stops}</linearGradient></defs>`;
|
|
2920
2932
|
return { fill: `url(#${id})`, defs };
|
|
2921
2933
|
}
|
|
2922
2934
|
if (fill.type === "radial") {
|
|
2923
|
-
const stops = fill.stops.map((s) => `<stop offset="${s.offset * 100}%" stop-color="${s.color}"/>`).join("");
|
|
2935
|
+
const stops = fill.stops.map((s) => `<stop offset="${toNumber(s.offset, 0) * 100}%" stop-color="${s.color}"/>`).join("");
|
|
2924
2936
|
const defs = `<defs><radialGradient id="${id}" cx="50%" cy="50%" r="50%">${stops}</radialGradient></defs>`;
|
|
2925
2937
|
return { fill: `url(#${id})`, defs };
|
|
2926
2938
|
}
|
|
@@ -3314,8 +3326,8 @@ async function renderSvgAssetToPng(asset, options = {}) {
|
|
|
3314
3326
|
targetWidth = dimensions.width || defaultWidth;
|
|
3315
3327
|
targetHeight = dimensions.height || defaultHeight;
|
|
3316
3328
|
} else if (asset.shape) {
|
|
3317
|
-
targetWidth = asset.width
|
|
3318
|
-
targetHeight = asset.height
|
|
3329
|
+
targetWidth = toNumber(asset.width, defaultWidth);
|
|
3330
|
+
targetHeight = toNumber(asset.height, defaultHeight);
|
|
3319
3331
|
svgString = shapeToSvgString(asset, targetWidth, targetHeight);
|
|
3320
3332
|
} else {
|
|
3321
3333
|
throw new Error("Either 'src' or 'shape' must be provided");
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
__require
|
|
5
5
|
} from "./chunk-HYGMWVDX.js";
|
|
6
6
|
|
|
7
|
-
// node_modules/harfbuzzjs/hb.js
|
|
7
|
+
// node_modules/.pnpm/harfbuzzjs@0.4.12/node_modules/harfbuzzjs/hb.js
|
|
8
8
|
var require_hb = __commonJS({
|
|
9
|
-
"node_modules/harfbuzzjs/hb.js"(exports, module) {
|
|
9
|
+
"node_modules/.pnpm/harfbuzzjs@0.4.12/node_modules/harfbuzzjs/hb.js"(exports, module) {
|
|
10
10
|
var createHarfBuzz = (() => {
|
|
11
11
|
var _scriptName = typeof document != "undefined" ? document.currentScript?.src : void 0;
|
|
12
12
|
return async function(moduleArg = {}) {
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
__commonJS
|
|
3
3
|
} from "./chunk-HYGMWVDX.js";
|
|
4
4
|
|
|
5
|
-
// node_modules/harfbuzzjs/hbjs.js
|
|
5
|
+
// node_modules/.pnpm/harfbuzzjs@0.4.12/node_modules/harfbuzzjs/hbjs.js
|
|
6
6
|
var require_hbjs = __commonJS({
|
|
7
|
-
"node_modules/harfbuzzjs/hbjs.js"(exports, module) {
|
|
7
|
+
"node_modules/.pnpm/harfbuzzjs@0.4.12/node_modules/harfbuzzjs/hbjs.js"(exports, module) {
|
|
8
8
|
function hbjs(Module) {
|
|
9
9
|
"use strict";
|
|
10
10
|
var exports2 = Module.wasmExports;
|
package/package.json
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@shotstack/shotstack-canvas",
|
|
3
|
-
"version": "1.9.
|
|
4
|
-
"description": "Text layout & animation engine (HarfBuzz) for Node & Web - fully self-contained.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/entry.node.cjs",
|
|
7
|
-
"module": "./dist/entry.node.js",
|
|
8
|
-
"browser": "./dist/entry.web.js",
|
|
9
|
-
"types": "./dist/entry.node.d.ts",
|
|
10
|
-
"exports": {
|
|
11
|
-
".": {
|
|
12
|
-
"node": {
|
|
13
|
-
"import": "./dist/entry.node.js",
|
|
14
|
-
"require": "./dist/entry.node.cjs"
|
|
15
|
-
},
|
|
16
|
-
"browser": "./dist/entry.web.js",
|
|
17
|
-
"default": "./dist/entry.web.js"
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
"files": [
|
|
21
|
-
"dist/**",
|
|
22
|
-
"scripts/postinstall.js",
|
|
23
|
-
"README.md",
|
|
24
|
-
"LICENSE"
|
|
25
|
-
],
|
|
26
|
-
"scripts": {
|
|
27
|
-
"dev": "tsup --watch",
|
|
28
|
-
"build": "tsup",
|
|
29
|
-
"postinstall": "node scripts/postinstall.js",
|
|
30
|
-
"vendor:harfbuzz": "node scripts/vendor-harfbuzz.js",
|
|
31
|
-
"example:node": "node examples/node-example.mjs",
|
|
32
|
-
"example:video": "node examples/node-video.mjs",
|
|
33
|
-
"example:web": "vite dev examples/web-example",
|
|
34
|
-
"prepublishOnly": "npm run build"
|
|
35
|
-
},
|
|
36
|
-
"publishConfig": {
|
|
37
|
-
"access": "public",
|
|
38
|
-
"registry": "https://registry.npmjs.org/"
|
|
39
|
-
},
|
|
40
|
-
"engines": {
|
|
41
|
-
"node": ">=18"
|
|
42
|
-
},
|
|
43
|
-
"sideEffects": false,
|
|
44
|
-
"dependencies": {
|
|
45
|
-
"@resvg/resvg-js": "^2.6.2",
|
|
46
|
-
"@resvg/resvg-wasm": "^2.6.2",
|
|
47
|
-
"@shotstack/schemas": "^1.4
|
|
48
|
-
"canvas": "npm:@napi-rs/canvas@^0.1.54",
|
|
49
|
-
"ffmpeg-static": "^5.2.0",
|
|
50
|
-
"fontkit": "^2.0.4",
|
|
51
|
-
"harfbuzzjs": "0.4.12",
|
|
52
|
-
"opentype.js": "^1.3.4",
|
|
53
|
-
"zod": "^4.2.0"
|
|
54
|
-
},
|
|
55
|
-
"devDependencies": {
|
|
56
|
-
"@types/fluent-ffmpeg": "2.1.27",
|
|
57
|
-
"@types/node": "^20.14.10",
|
|
58
|
-
"fluent-ffmpeg": "^2.1.3",
|
|
59
|
-
"tsup": "^8.2.3",
|
|
60
|
-
"typescript": "^5.5.3",
|
|
61
|
-
"vite": "^5.3.3",
|
|
62
|
-
"vite-plugin-top-level-await": "1.6.0",
|
|
63
|
-
"vite-plugin-wasm": "3.5.0"
|
|
64
|
-
}
|
|
65
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@shotstack/shotstack-canvas",
|
|
3
|
+
"version": "1.9.4",
|
|
4
|
+
"description": "Text layout & animation engine (HarfBuzz) for Node & Web - fully self-contained.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/entry.node.cjs",
|
|
7
|
+
"module": "./dist/entry.node.js",
|
|
8
|
+
"browser": "./dist/entry.web.js",
|
|
9
|
+
"types": "./dist/entry.node.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"node": {
|
|
13
|
+
"import": "./dist/entry.node.js",
|
|
14
|
+
"require": "./dist/entry.node.cjs"
|
|
15
|
+
},
|
|
16
|
+
"browser": "./dist/entry.web.js",
|
|
17
|
+
"default": "./dist/entry.web.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist/**",
|
|
22
|
+
"scripts/postinstall.js",
|
|
23
|
+
"README.md",
|
|
24
|
+
"LICENSE"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"dev": "tsup --watch",
|
|
28
|
+
"build": "tsup",
|
|
29
|
+
"postinstall": "node scripts/postinstall.js",
|
|
30
|
+
"vendor:harfbuzz": "node scripts/vendor-harfbuzz.js",
|
|
31
|
+
"example:node": "node examples/node-example.mjs",
|
|
32
|
+
"example:video": "node examples/node-video.mjs",
|
|
33
|
+
"example:web": "vite dev examples/web-example",
|
|
34
|
+
"prepublishOnly": "npm run build"
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public",
|
|
38
|
+
"registry": "https://registry.npmjs.org/"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=18"
|
|
42
|
+
},
|
|
43
|
+
"sideEffects": false,
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@resvg/resvg-js": "^2.6.2",
|
|
46
|
+
"@resvg/resvg-wasm": "^2.6.2",
|
|
47
|
+
"@shotstack/schemas": "^1.5.4",
|
|
48
|
+
"canvas": "npm:@napi-rs/canvas@^0.1.54",
|
|
49
|
+
"ffmpeg-static": "^5.2.0",
|
|
50
|
+
"fontkit": "^2.0.4",
|
|
51
|
+
"harfbuzzjs": "0.4.12",
|
|
52
|
+
"opentype.js": "^1.3.4",
|
|
53
|
+
"zod": "^4.2.0"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/fluent-ffmpeg": "2.1.27",
|
|
57
|
+
"@types/node": "^20.14.10",
|
|
58
|
+
"fluent-ffmpeg": "^2.1.3",
|
|
59
|
+
"tsup": "^8.2.3",
|
|
60
|
+
"typescript": "^5.5.3",
|
|
61
|
+
"vite": "^5.3.3",
|
|
62
|
+
"vite-plugin-top-level-await": "1.6.0",
|
|
63
|
+
"vite-plugin-wasm": "3.5.0"
|
|
64
|
+
}
|
|
65
|
+
}
|
package/scripts/postinstall.js
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Postinstall script to verify native canvas bindings are available
|
|
5
|
-
* This helps catch issues early and provides helpful guidance
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { platform as _platform, arch as _arch } from 'os';
|
|
9
|
-
import { dirname } from 'path';
|
|
10
|
-
import { readdirSync } from 'fs';
|
|
11
|
-
import { createRequire } from 'module';
|
|
12
|
-
|
|
13
|
-
const require = createRequire(import.meta.url);
|
|
14
|
-
|
|
15
|
-
const platform = _platform();
|
|
16
|
-
const arch = _arch();
|
|
17
|
-
|
|
18
|
-
// Map platform/arch to package names
|
|
19
|
-
const platformMap = {
|
|
20
|
-
'darwin-arm64': '@napi-rs/canvas-darwin-arm64',
|
|
21
|
-
'darwin-x64': '@napi-rs/canvas-darwin-x64',
|
|
22
|
-
'linux-arm64': '@napi-rs/canvas-linux-arm64-gnu',
|
|
23
|
-
'linux-x64': '@napi-rs/canvas-linux-x64-gnu',
|
|
24
|
-
'win32-x64': '@napi-rs/canvas-win32-x64-msvc',
|
|
25
|
-
'linux-arm': '@napi-rs/canvas-linux-arm-gnueabihf',
|
|
26
|
-
'android-arm64': '@napi-rs/canvas-android-arm64',
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const platformKey = `${platform}-${arch}`;
|
|
30
|
-
const requiredPackage = platformMap[platformKey];
|
|
31
|
-
|
|
32
|
-
if (!requiredPackage) {
|
|
33
|
-
console.warn(`\n⚠️ Warning: Unsupported platform ${platformKey} for @napi-rs/canvas`);
|
|
34
|
-
console.warn(' Canvas rendering may not work on this platform.\n');
|
|
35
|
-
process.exit(0);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Check if the native binding package is installed
|
|
39
|
-
try {
|
|
40
|
-
const packagePath = require.resolve(`${requiredPackage}/package.json`);
|
|
41
|
-
const packageDir = dirname(packagePath);
|
|
42
|
-
|
|
43
|
-
// Verify the .node file exists
|
|
44
|
-
const nodeFiles = readdirSync(packageDir).filter(f => f.endsWith('.node'));
|
|
45
|
-
|
|
46
|
-
if (nodeFiles.length > 0) {
|
|
47
|
-
console.log(`✅ @shotstack/shotstack-canvas: Native canvas binding found for ${platformKey}`);
|
|
48
|
-
} else {
|
|
49
|
-
throw new Error('No .node file found');
|
|
50
|
-
}
|
|
51
|
-
} catch (error) {
|
|
52
|
-
console.warn(`\n⚠️ Warning: Native canvas binding not found for ${platformKey}`);
|
|
53
|
-
console.warn(` Expected package: ${requiredPackage}`);
|
|
54
|
-
console.warn('\n If you see "Cannot find native binding" errors, try:');
|
|
55
|
-
console.warn(' 1. Delete node_modules and package-lock.json');
|
|
56
|
-
console.warn(' 2. Run: npm install');
|
|
57
|
-
console.warn(` 3. Or manually install: npm install ${requiredPackage}\n`);
|
|
58
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Postinstall script to verify native canvas bindings are available
|
|
5
|
+
* This helps catch issues early and provides helpful guidance
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { platform as _platform, arch as _arch } from 'os';
|
|
9
|
+
import { dirname } from 'path';
|
|
10
|
+
import { readdirSync } from 'fs';
|
|
11
|
+
import { createRequire } from 'module';
|
|
12
|
+
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
|
|
15
|
+
const platform = _platform();
|
|
16
|
+
const arch = _arch();
|
|
17
|
+
|
|
18
|
+
// Map platform/arch to package names
|
|
19
|
+
const platformMap = {
|
|
20
|
+
'darwin-arm64': '@napi-rs/canvas-darwin-arm64',
|
|
21
|
+
'darwin-x64': '@napi-rs/canvas-darwin-x64',
|
|
22
|
+
'linux-arm64': '@napi-rs/canvas-linux-arm64-gnu',
|
|
23
|
+
'linux-x64': '@napi-rs/canvas-linux-x64-gnu',
|
|
24
|
+
'win32-x64': '@napi-rs/canvas-win32-x64-msvc',
|
|
25
|
+
'linux-arm': '@napi-rs/canvas-linux-arm-gnueabihf',
|
|
26
|
+
'android-arm64': '@napi-rs/canvas-android-arm64',
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const platformKey = `${platform}-${arch}`;
|
|
30
|
+
const requiredPackage = platformMap[platformKey];
|
|
31
|
+
|
|
32
|
+
if (!requiredPackage) {
|
|
33
|
+
console.warn(`\n⚠️ Warning: Unsupported platform ${platformKey} for @napi-rs/canvas`);
|
|
34
|
+
console.warn(' Canvas rendering may not work on this platform.\n');
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Check if the native binding package is installed
|
|
39
|
+
try {
|
|
40
|
+
const packagePath = require.resolve(`${requiredPackage}/package.json`);
|
|
41
|
+
const packageDir = dirname(packagePath);
|
|
42
|
+
|
|
43
|
+
// Verify the .node file exists
|
|
44
|
+
const nodeFiles = readdirSync(packageDir).filter(f => f.endsWith('.node'));
|
|
45
|
+
|
|
46
|
+
if (nodeFiles.length > 0) {
|
|
47
|
+
console.log(`✅ @shotstack/shotstack-canvas: Native canvas binding found for ${platformKey}`);
|
|
48
|
+
} else {
|
|
49
|
+
throw new Error('No .node file found');
|
|
50
|
+
}
|
|
51
|
+
} catch (error) {
|
|
52
|
+
console.warn(`\n⚠️ Warning: Native canvas binding not found for ${platformKey}`);
|
|
53
|
+
console.warn(` Expected package: ${requiredPackage}`);
|
|
54
|
+
console.warn('\n If you see "Cannot find native binding" errors, try:');
|
|
55
|
+
console.warn(' 1. Delete node_modules and package-lock.json');
|
|
56
|
+
console.warn(' 2. Run: npm install');
|
|
57
|
+
console.warn(` 3. Or manually install: npm install ${requiredPackage}\n`);
|
|
58
|
+
}
|