@pixerate/editor 0.270.0 → 0.272.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation-editor/index.cjs +62 -62
- package/dist/animation-editor/index.js +5 -5
- package/dist/brushes/index.cjs +69 -66
- package/dist/brushes/index.js +6 -3
- package/dist/brushes/patch.d.cts +1 -1
- package/dist/brushes/patch.d.ts +1 -1
- package/dist/brushes/schema.d.cts +1 -0
- package/dist/brushes/schema.d.ts +1 -0
- package/dist/brushes/types.d.cts +8 -0
- package/dist/brushes/types.d.ts +8 -0
- package/dist/{brushstrokeRender-WR2N5HHY.cjs → brushstrokeRender-5YBCLFDQ.cjs} +15 -15
- package/dist/{brushstrokeRender-A727TTNQ.js → brushstrokeRender-DZGFU3J4.js} +3 -3
- package/dist/canvas/index.cjs +15 -15
- package/dist/canvas/index.js +2 -2
- package/dist/{chunk-THBJHPUL.js → chunk-2F3YDXCN.js} +1 -1
- package/dist/{chunk-4CPOKP27.js → chunk-2XDNF73E.js} +1 -1
- package/dist/{chunk-3KNQ2W6X.cjs → chunk-3JKCREEU.cjs} +59 -53
- package/dist/{chunk-4YSPQGZW.js → chunk-5HP2VSAS.js} +1 -1
- package/dist/{chunk-BPJSI4NT.cjs → chunk-7W2EQQBP.cjs} +2 -2
- package/dist/{chunk-LETF75CA.js → chunk-CLB2I2FU.js} +1 -1
- package/dist/{chunk-BAZMCFVL.js → chunk-DZVRH63Y.js} +1 -1
- package/dist/{chunk-PY4GWSE2.cjs → chunk-EBFPMSJO.cjs} +27 -5
- package/dist/{chunk-VBRHE4AM.cjs → chunk-FXVCB6YG.cjs} +35 -35
- package/dist/{chunk-EU2ZZA6L.cjs → chunk-GHGBIAWQ.cjs} +126 -39
- package/dist/{chunk-CBVNCWJM.cjs → chunk-LBDC5434.cjs} +2 -2
- package/dist/{chunk-2WOGXEDX.cjs → chunk-M3RZOF3G.cjs} +1 -1
- package/dist/{chunk-GSTSZPSR.js → chunk-N3SKPQEH.js} +225 -18
- package/dist/{chunk-J5VQYK7T.cjs → chunk-N5IMDAHM.cjs} +251 -44
- package/dist/{chunk-ININNHLM.js → chunk-NAHJV3O6.js} +11 -5
- package/dist/{chunk-MWUZCEFT.js → chunk-S2XPXA47.js} +1 -1
- package/dist/{chunk-56RHCIJV.cjs → chunk-SNAFFCAX.cjs} +296 -203
- package/dist/{chunk-EHLOCVWB.js → chunk-T2URHAJX.js} +27 -5
- package/dist/{chunk-BENSE3VX.cjs → chunk-TNLKFW7D.cjs} +23 -23
- package/dist/{chunk-KZI3YWKW.js → chunk-UXYCY3HP.js} +93 -6
- package/dist/{chunk-4NMPUJUK.cjs → chunk-YJANF2BL.cjs} +86 -86
- package/dist/{chunk-FUDP5QBB.js → chunk-ZEI7ZEA4.js} +101 -8
- package/dist/effects/index.cjs +5 -2
- package/dist/effects/index.js +4 -1
- package/dist/effects/pool.d.cts +9 -0
- package/dist/effects/pool.d.ts +9 -0
- package/dist/effects/types.d.cts +2 -0
- package/dist/effects/types.d.ts +2 -0
- package/dist/image-editor/index.cjs +791 -791
- package/dist/image-editor/index.js +6 -6
- package/dist/paint/index.cjs +2 -2
- package/dist/paint/index.js +1 -1
- package/dist/paint/wet/world.d.cts +37 -1
- package/dist/paint/wet/world.d.ts +37 -1
- package/dist/paint-editor/brush-controls.d.cts +2 -0
- package/dist/paint-editor/brush-controls.d.ts +2 -0
- package/dist/paint-editor/brush-model.d.cts +14 -1
- package/dist/paint-editor/brush-model.d.ts +14 -1
- package/dist/paint-editor/controller.d.cts +75 -4
- package/dist/paint-editor/controller.d.ts +75 -4
- package/dist/paint-editor/effect-paint.d.cts +33 -8
- package/dist/paint-editor/effect-paint.d.ts +33 -8
- package/dist/paint-editor/effects.d.cts +4 -0
- package/dist/paint-editor/effects.d.ts +4 -0
- package/dist/paint-editor/index.cjs +814 -483
- package/dist/paint-editor/index.js +408 -77
- package/dist/paint-editor/stroke.d.cts +13 -5
- package/dist/paint-editor/stroke.d.ts +13 -5
- package/dist/paint-editor/ui.d.cts +1 -1
- package/dist/paint-editor/ui.d.ts +1 -1
- package/dist/paint-editor/wet.d.cts +8 -1
- package/dist/paint-editor/wet.d.ts +8 -1
- package/dist/vector/index.cjs +999 -999
- package/dist/vector/index.js +5 -5
- package/dist/video-editor/index.cjs +317 -317
- package/dist/video-editor/index.js +2 -2
- package/package.json +1 -1
- package/skills/pixerate-brushes/SKILL.md +1 -0
- package/skills/pixerate-paint-editor/SKILL.md +6 -13
- package/skills/pixerate-paint-editor/references/brush-facets.md +1 -0
- package/skills/pixerate-paint-editor/references/effect-paint.md +28 -6
- package/skills/pixerate-paint-editor/references/ghost.md +47 -0
- package/skills/pixerate-paint-watercolour/SKILL.md +1 -0
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _chunkGHGBIAWQcjs = require('./chunk-GHGBIAWQ.cjs');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
@@ -73,7 +73,8 @@ var _chunkJBZRVLXVcjs = require('./chunk-JBZRVLXV.cjs');
|
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
|
|
77
|
+
var _chunkN5IMDAHMcjs = require('./chunk-N5IMDAHM.cjs');
|
|
77
78
|
|
|
78
79
|
|
|
79
80
|
|
|
@@ -2601,13 +2602,76 @@ function vectorExtrudeFaces(path, params) {
|
|
|
2601
2602
|
// src/paint-editor/effect-paint.ts
|
|
2602
2603
|
var EFFECT_STRIP_HEIGHT = 256;
|
|
2603
2604
|
var EFFECT_MAP_REPEATS = ["repeat", "mirror", "clamp"];
|
|
2605
|
+
var MAX_EFFECT_PATH_POINTS = 256;
|
|
2606
|
+
var roundPathCoord = (v2) => Math.round(v2 * 100) / 100;
|
|
2607
|
+
function strokePathPoints(points, maxPoints = MAX_EFFECT_PATH_POINTS) {
|
|
2608
|
+
if (!points.length) return [];
|
|
2609
|
+
const clean2 = [points[0]];
|
|
2610
|
+
for (let i = 1; i < points.length; i++) {
|
|
2611
|
+
const p = points[i];
|
|
2612
|
+
const prev = clean2[clean2.length - 1];
|
|
2613
|
+
if (p.x !== prev.x || p.y !== prev.y) clean2.push(p);
|
|
2614
|
+
}
|
|
2615
|
+
if (clean2.length === 1) {
|
|
2616
|
+
const x = roundPathCoord(clean2[0].x);
|
|
2617
|
+
const y = roundPathCoord(clean2[0].y);
|
|
2618
|
+
return [x, y, x, y];
|
|
2619
|
+
}
|
|
2620
|
+
if (clean2.length <= maxPoints) {
|
|
2621
|
+
const out2 = [];
|
|
2622
|
+
for (const p of clean2) out2.push(roundPathCoord(p.x), roundPathCoord(p.y));
|
|
2623
|
+
return out2;
|
|
2624
|
+
}
|
|
2625
|
+
const lengths = [0];
|
|
2626
|
+
for (let i = 1; i < clean2.length; i++) {
|
|
2627
|
+
lengths.push(lengths[i - 1] + Math.hypot(clean2[i].x - clean2[i - 1].x, clean2[i].y - clean2[i - 1].y));
|
|
2628
|
+
}
|
|
2629
|
+
const total = lengths[lengths.length - 1];
|
|
2630
|
+
if (total <= 0) {
|
|
2631
|
+
const x = roundPathCoord(clean2[0].x);
|
|
2632
|
+
const y = roundPathCoord(clean2[0].y);
|
|
2633
|
+
return [x, y, x, y];
|
|
2634
|
+
}
|
|
2635
|
+
const out = [];
|
|
2636
|
+
let j = 0;
|
|
2637
|
+
for (let k = 0; k < maxPoints; k++) {
|
|
2638
|
+
const at2 = total * k / (maxPoints - 1);
|
|
2639
|
+
while (j < clean2.length - 2 && lengths[j + 1] < at2) j++;
|
|
2640
|
+
const span = lengths[j + 1] - lengths[j] || 1;
|
|
2641
|
+
const f = Math.min(1, Math.max(0, (at2 - lengths[j]) / span));
|
|
2642
|
+
const a = clean2[j];
|
|
2643
|
+
const b = clean2[j + 1];
|
|
2644
|
+
out.push(roundPathCoord(a.x + (b.x - a.x) * f), roundPathCoord(a.y + (b.y - a.y) * f));
|
|
2645
|
+
}
|
|
2646
|
+
return out;
|
|
2647
|
+
}
|
|
2648
|
+
function inferEffectPathControl(values) {
|
|
2649
|
+
if ("path" in values) return "path";
|
|
2650
|
+
for (const [k, v2] of Object.entries(values)) {
|
|
2651
|
+
if (Array.isArray(v2) && v2.length >= 4 && v2.every((n) => typeof n === "number")) return k;
|
|
2652
|
+
}
|
|
2653
|
+
for (const [k, v2] of Object.entries(values)) {
|
|
2654
|
+
if (typeof v2 === "string") return k;
|
|
2655
|
+
}
|
|
2656
|
+
return "path";
|
|
2657
|
+
}
|
|
2658
|
+
function withStrokePath(paint, points, control) {
|
|
2659
|
+
if (_optionalChain([paint, 'access', _55 => _55.map, 'optionalAccess', _56 => _56.by]) !== "path") return paint;
|
|
2660
|
+
const key = _nullishCoalesce(control, () => ( inferEffectPathControl(paint.values)));
|
|
2661
|
+
return {
|
|
2662
|
+
...paint,
|
|
2663
|
+
values: { ...paint.values, [key]: strokePathPoints(points) }
|
|
2664
|
+
};
|
|
2665
|
+
}
|
|
2604
2666
|
function effectPaintSize(p, canvas) {
|
|
2605
|
-
return p.map ? { width: p.map.length, height: EFFECT_STRIP_HEIGHT } : { width: canvas.width, height: canvas.height };
|
|
2667
|
+
return _optionalChain([p, 'access', _57 => _57.map, 'optionalAccess', _58 => _58.by]) === "stroke" ? { width: p.map.length, height: EFFECT_STRIP_HEIGHT } : { width: canvas.width, height: canvas.height };
|
|
2606
2668
|
}
|
|
2607
2669
|
function readEffectStrokeMap(raw) {
|
|
2608
|
-
if (raw === void 0 || raw === null || raw.by === "canvas") return void 0;
|
|
2670
|
+
if (raw === void 0 || raw === null || raw === "canvas" || raw.by === "canvas") return void 0;
|
|
2671
|
+
if (raw === "path") return { by: "path" };
|
|
2609
2672
|
const r = raw;
|
|
2610
|
-
if (r.by
|
|
2673
|
+
if (r.by === "path") return { by: "path" };
|
|
2674
|
+
if (r.by !== "stroke") throw new Error(`map.by ${JSON.stringify(r.by)} is not a mapping; use "canvas" (fixed to the canvas), "stroke" (along each stroke) or "path" (native path control).`);
|
|
2611
2675
|
const length2 = r.length === void 0 ? 300 : Number(r.length);
|
|
2612
2676
|
if (!(Number.isFinite(length2) && length2 >= 16 && length2 <= 4096)) throw new Error(`map.length ${JSON.stringify(r.length)} is out of range; use 16..4096 px of stroke per repeat.`);
|
|
2613
2677
|
const repeat = r.repeat === void 0 ? "repeat" : r.repeat;
|
|
@@ -2729,7 +2793,7 @@ function effectDabField(img, rect, cov, centre, mixed, field, steps = 0, dab = n
|
|
|
2729
2793
|
var samplers = /* @__PURE__ */ new WeakMap();
|
|
2730
2794
|
function stampSampler(ref, art, hardness = 1) {
|
|
2731
2795
|
const sampler = baseSampler(ref, art);
|
|
2732
|
-
if (!sampler || hardness >= 1 || !
|
|
2796
|
+
if (!sampler || hardness >= 1 || !_chunkGHGBIAWQcjs.isBrushSourceRef.call(void 0, ref)) return sampler;
|
|
2733
2797
|
const h = Math.max(0, hardness);
|
|
2734
2798
|
return (u, v2, seed) => {
|
|
2735
2799
|
const r = Math.hypot(u, v2) / Math.SQRT2;
|
|
@@ -2749,7 +2813,7 @@ function baseSampler(ref, art) {
|
|
|
2749
2813
|
const k = kind;
|
|
2750
2814
|
return (u, v2, seed) => _chunkRDFHWAHLcjs.stampCoverage.call(void 0, k, u, v2, seed);
|
|
2751
2815
|
}
|
|
2752
|
-
const a = _optionalChain([art, 'optionalCall',
|
|
2816
|
+
const a = _optionalChain([art, 'optionalCall', _59 => _59(ref)]);
|
|
2753
2817
|
if (!a || !(a.width > 0 && a.height > 0)) return null;
|
|
2754
2818
|
const hit = samplers.get(a);
|
|
2755
2819
|
if (hit) return hit;
|
|
@@ -2804,7 +2868,7 @@ function rasterizeStampDab(d, sample, seed, rect, out) {
|
|
|
2804
2868
|
}
|
|
2805
2869
|
function brushStickerRefs(brush) {
|
|
2806
2870
|
const refs = brush.engine === "sticker" ? [...brush.sticker.stamps] : brush.engine === "particle" ? [...brush.particle.dotTextures] : brush.engine === "dab" && brush.stamp ? [brush.stamp] : [];
|
|
2807
|
-
return [...new Set(refs.filter((r) => r.includes(":") && !r.startsWith("editor:") && !
|
|
2871
|
+
return [...new Set(refs.filter((r) => r.includes(":") && !r.startsWith("editor:") && !_chunkGHGBIAWQcjs.isBrushSourceRef.call(void 0, r)))];
|
|
2808
2872
|
}
|
|
2809
2873
|
function sprayDroplets(d, spray, seed) {
|
|
2810
2874
|
const count = 1 + Math.round(spray.density * 31);
|
|
@@ -2871,8 +2935,8 @@ function clonePaper(p) {
|
|
|
2871
2935
|
}
|
|
2872
2936
|
function readOffset(raw, d) {
|
|
2873
2937
|
const o = raw && typeof raw === "object" ? raw : null;
|
|
2874
|
-
const x = o && typeof o.x === "number" && Number.isFinite(o.x) ? Math.round(o.x) : _nullishCoalesce(_optionalChain([d, 'optionalAccess',
|
|
2875
|
-
const y = o && typeof o.y === "number" && Number.isFinite(o.y) ? Math.round(o.y) : _nullishCoalesce(_optionalChain([d, 'optionalAccess',
|
|
2938
|
+
const x = o && typeof o.x === "number" && Number.isFinite(o.x) ? Math.round(o.x) : _nullishCoalesce(_optionalChain([d, 'optionalAccess', _60 => _60.x]), () => ( 0));
|
|
2939
|
+
const y = o && typeof o.y === "number" && Number.isFinite(o.y) ? Math.round(o.y) : _nullishCoalesce(_optionalChain([d, 'optionalAccess', _61 => _61.y]), () => ( 0));
|
|
2876
2940
|
return x || y ? { offset: { x, y } } : {};
|
|
2877
2941
|
}
|
|
2878
2942
|
function readTuning(raw, d) {
|
|
@@ -3001,7 +3065,7 @@ var TipGrain = class _TipGrain {
|
|
|
3001
3065
|
const paper = new (0, _chunkNIBFKXMDcjs.PaperGrain)({ pattern: settings.source, seed: 0, scale: settings.scale, tiling: "repeat", dry: tuning2, wet: tuning2 });
|
|
3002
3066
|
return new _TipGrain(paper, settings);
|
|
3003
3067
|
}
|
|
3004
|
-
const a = _optionalChain([art, 'optionalCall',
|
|
3068
|
+
const a = _optionalChain([art, 'optionalCall', _62 => _62(settings.source)]);
|
|
3005
3069
|
if (!a || !(a.width > 0 && a.height > 0)) return null;
|
|
3006
3070
|
return new _TipGrain(new ImageGrain(a.width, a.height, a.data, settings.contrast, settings.invert, settings.scale), settings);
|
|
3007
3071
|
}
|
|
@@ -3262,7 +3326,7 @@ var DryStroke = (_class3 = class {
|
|
|
3262
3326
|
this.stamp = brush.stamp ? stampSampler(brush.stamp, options.stampArt, brush.tip.hardness) : null;
|
|
3263
3327
|
this.tipGrain = TipGrain.create(brush.tipGrain, options.stampArt);
|
|
3264
3328
|
this.smoother = new PenSmoother(brush.tip.smoothing, brush.pressureSmoothing);
|
|
3265
|
-
this.copies = _optionalChain([options, 'access',
|
|
3329
|
+
this.copies = _optionalChain([options, 'access', _63 => _63.copies, 'optionalAccess', _64 => _64.length]) ? options.copies : [IDENTITY_COPY];
|
|
3266
3330
|
this.walkers = this.copies.map((c, i) => new PenDabWalker(brush, (_nullishCoalesce(options.seed, () => ( 0))) + i * 7919 | 0, c.linear));
|
|
3267
3331
|
this.depth = options.grain && !options.grain.flat ? Math.min(1, Math.max(0, options.paperDepth * brush.grain)) : 0;
|
|
3268
3332
|
}
|
|
@@ -3325,7 +3389,7 @@ var DryStroke = (_class3 = class {
|
|
|
3325
3389
|
const vals = this.buf.subarray(0, n);
|
|
3326
3390
|
if (this.stamp) rasterizeStampDab(m, this.stamp, d.index, rect, vals);
|
|
3327
3391
|
else _chunkNIBFKXMDcjs.rasterizeDab.call(void 0, m, hardness, rect, vals);
|
|
3328
|
-
_optionalChain([this, 'access',
|
|
3392
|
+
_optionalChain([this, 'access', _65 => _65.tipGrain, 'optionalAccess', _66 => _66.apply, 'call', _67 => _67(vals, rect, { x: m.x, y: m.y, angle: m.angle, travel: d.travel })]);
|
|
3329
3393
|
if (this.depth > 0 && grain) {
|
|
3330
3394
|
for (let yy = 0, k = 0; yy < rect.height; yy++) {
|
|
3331
3395
|
const y = rect.y + yy + 0.5;
|
|
@@ -3406,7 +3470,7 @@ var PaintDabStroke = (_class4 = class {
|
|
|
3406
3470
|
this.stamp = brush.engine === "dab" && brush.stamp ? stampSampler(brush.stamp, options.stampArt, brush.tip.hardness) : null;
|
|
3407
3471
|
this.tipGrain = TipGrain.create(brush.tipGrain, options.stampArt);
|
|
3408
3472
|
this.smoother = new PenSmoother(brush.tip.smoothing, brush.pressureSmoothing);
|
|
3409
|
-
this.copies = _optionalChain([options, 'access',
|
|
3473
|
+
this.copies = _optionalChain([options, 'access', _68 => _68.copies, 'optionalAccess', _69 => _69.length]) ? options.copies : [IDENTITY_COPY];
|
|
3410
3474
|
const exchanging = brush.engine === "mixer" || brush.engine === "dab";
|
|
3411
3475
|
const rates = brush.engine === "mixer" ? _chunkNIBFKXMDcjs.mixerRates.call(void 0, brush.mixer) : _chunkNIBFKXMDcjs.exchangeRates.call(void 0, brush.behavior.pickup, brush.behavior.mix, 1, brush.behavior.mixing);
|
|
3412
3476
|
this.mixing = brush.engine === "mixer" ? brush.mixer.mixing : brush.behavior.mixing;
|
|
@@ -3419,7 +3483,7 @@ var PaintDabStroke = (_class4 = class {
|
|
|
3419
3483
|
this.depth = options.grain && !options.grain.flat ? Math.min(1, Math.max(0, options.paperDepth * brush.grain)) : 0;
|
|
3420
3484
|
this.coverage = brush.engine === "dab" ? new (0, _chunkNIBFKXMDcjs.CoverageMap)() : null;
|
|
3421
3485
|
this.sampler = exchanging && options.paint ? new (0, _chunkNIBFKXMDcjs.PaintGradientSampler)(options.paint, _nullishCoalesce(options.seed, () => ( 0))) : null;
|
|
3422
|
-
const table = _optionalChain([this, 'access',
|
|
3486
|
+
const table = _optionalChain([this, 'access', _70 => _70.sampler, 'optionalAccess', _71 => _71.acrossTip]) ? this.sampler.tipTable(GRADIENT_STEPS) : null;
|
|
3423
3487
|
this.gradient = table ? table.map((e) => e.rgb) : null;
|
|
3424
3488
|
this.gradientAlpha = table && table.some((e) => e.alpha < 1) ? table.map((e) => e.alpha) : null;
|
|
3425
3489
|
this.scratch = brush.engine === "blender" ? _chunkNIBFKXMDcjs.createBlenderScratch.call(void 0, ) : null;
|
|
@@ -3454,7 +3518,7 @@ var PaintDabStroke = (_class4 = class {
|
|
|
3454
3518
|
|
|
3455
3519
|
/** What copy 0's brush carries after the dabs so far (mixer and wet-capable dab brushes). */
|
|
3456
3520
|
get load() {
|
|
3457
|
-
return _nullishCoalesce(_optionalChain([this, 'access',
|
|
3521
|
+
return _nullishCoalesce(_optionalChain([this, 'access', _72 => _72.states, 'access', _73 => _73[0], 'access', _74 => _74.exchange, 'optionalAccess', _75 => _75.load]), () => ( null));
|
|
3458
3522
|
}
|
|
3459
3523
|
push(points) {
|
|
3460
3524
|
const rects = [];
|
|
@@ -3504,7 +3568,7 @@ var PaintDabStroke = (_class4 = class {
|
|
|
3504
3568
|
tip.fill(0);
|
|
3505
3569
|
if (this.stamp) rasterizeStampDab({ ...d, alpha: 1 }, this.stamp, d.index, rect, tip);
|
|
3506
3570
|
else _chunkNIBFKXMDcjs.rasterizeDab.call(void 0, { ...d, alpha: 1 }, this.brush.tip.hardness, rect, tip);
|
|
3507
|
-
_optionalChain([this, 'access',
|
|
3571
|
+
_optionalChain([this, 'access', _76 => _76.tipGrain, 'optionalAccess', _77 => _77.apply, 'call', _78 => _78(tip, rect, d)]);
|
|
3508
3572
|
if (!(this.depth > 0 && this.options.grain)) return { tip, cov: tip };
|
|
3509
3573
|
const cov = this.cov.subarray(0, n);
|
|
3510
3574
|
const grain = this.options.grain;
|
|
@@ -3636,7 +3700,7 @@ var PaintDabStroke = (_class4 = class {
|
|
|
3636
3700
|
|
|
3637
3701
|
// src/paint-editor/wet.ts
|
|
3638
3702
|
var STROKE_WATER = 0.9;
|
|
3639
|
-
var STROKE_MASS =
|
|
3703
|
+
var STROKE_MASS = _chunkN5IMDAHMcjs.PIGMENT_UNIT * 2.5;
|
|
3640
3704
|
var STROKE_LIGHT = 1.5;
|
|
3641
3705
|
var COVERAGE_STEPS = 4096;
|
|
3642
3706
|
function union(a, b) {
|
|
@@ -3666,12 +3730,17 @@ var WetStrokeDriver = (_class5 = class {
|
|
|
3666
3730
|
const spacing = Math.max(0.02, brush.tip.spacing);
|
|
3667
3731
|
const perDab = Math.min(1, spacing * 1.2);
|
|
3668
3732
|
const thin = wet.thinner;
|
|
3669
|
-
|
|
3733
|
+
const body = wet.body * (1 - thin);
|
|
3734
|
+
this.medium = new (0, _chunkN5IMDAHMcjs.WetMedium)(init.world, init.laneId, {
|
|
3670
3735
|
water: STROKE_WATER * Math.min(1, wet.water * (1 + thin)) * perDab,
|
|
3671
3736
|
mass: STROKE_MASS * wet.pigment * (1 - 0.6 * thin) * perDab,
|
|
3672
|
-
body
|
|
3737
|
+
body,
|
|
3673
3738
|
light: 0
|
|
3674
3739
|
});
|
|
3740
|
+
if (wet.tool === "paint" && brush.ghost && wet.pigment > 0) {
|
|
3741
|
+
const one = _chunkN5IMDAHMcjs.pigmentOf.call(void 0, init.color, body);
|
|
3742
|
+
init.world.startGhost(init.laneId, [one[0], one[1], one[2], one[3]], brush.ghost.linger, _nullishCoalesce(init.speed, () => ( 120)));
|
|
3743
|
+
}
|
|
3675
3744
|
this.lightBase = wet.tool === "paint" ? STROKE_LIGHT * brush.light.amount * (1 - 0.6 * thin) * perDab : 0;
|
|
3676
3745
|
const rates = _chunkNIBFKXMDcjs.exchangeRates.call(void 0, brush.behavior.pickup, brush.behavior.mix, wet.load, brush.behavior.mixing);
|
|
3677
3746
|
this.states = copies.map((c, i) => ({
|
|
@@ -3708,7 +3777,7 @@ var WetStrokeDriver = (_class5 = class {
|
|
|
3708
3777
|
|
|
3709
3778
|
/** What copy 0's brush carries after the dabs so far. */
|
|
3710
3779
|
get load() {
|
|
3711
|
-
return _nullishCoalesce(_optionalChain([this, 'access',
|
|
3780
|
+
return _nullishCoalesce(_optionalChain([this, 'access', _79 => _79.states, 'access', _80 => _80[0], 'access', _81 => _81.exchange, 'optionalAccess', _82 => _82.load]), () => ( null));
|
|
3712
3781
|
}
|
|
3713
3782
|
/** Whether every point (and the end) has been applied. */
|
|
3714
3783
|
get done() {
|
|
@@ -3800,6 +3869,22 @@ var WetStrokeDriver = (_class5 = class {
|
|
|
3800
3869
|
if (!(k > 0)) return;
|
|
3801
3870
|
switch (wet.tool) {
|
|
3802
3871
|
case "paint": {
|
|
3872
|
+
if (brush.ghost) {
|
|
3873
|
+
const smear = brush.ghost.smear;
|
|
3874
|
+
if (wet.pigment > 0) {
|
|
3875
|
+
this.medium.options.light = this.medium.options.mass;
|
|
3876
|
+
this.medium.deposit(rect, cov, k, this.init.color, null);
|
|
3877
|
+
} else {
|
|
3878
|
+
this.medium.options.light = 0;
|
|
3879
|
+
world.paint(laneId, rect, cov, this.medium.options.water * k * (wet.water > 0 ? 1 : 0), null);
|
|
3880
|
+
}
|
|
3881
|
+
if (smear > 0) {
|
|
3882
|
+
const rw = Math.max(wet.rewet, 0.6) * smear;
|
|
3883
|
+
if (rw > 0) world.rewet(laneId, rect, cov, rw * k * 0.5, this.init.paperColor, true);
|
|
3884
|
+
if (st.last) world.drag(laneId, rect, tip, d.x - st.last.x, d.y - st.last.y, smear * k);
|
|
3885
|
+
}
|
|
3886
|
+
break;
|
|
3887
|
+
}
|
|
3803
3888
|
const ex = st.exchange;
|
|
3804
3889
|
this.medium.options.light = this.lightBase * (brush.light.pressure ? d.pressure : 1);
|
|
3805
3890
|
let flow = 1;
|
|
@@ -3872,7 +3957,7 @@ var PaintWetLayers = (_class6 = class {
|
|
|
3872
3957
|
|
|
3873
3958
|
|
|
3874
3959
|
__init41() {this.world = null}
|
|
3875
|
-
__init42() {this.tilt = { ...
|
|
3960
|
+
__init42() {this.tilt = { ..._chunkN5IMDAHMcjs.FLAT }}
|
|
3876
3961
|
__init43() {this.settings = /* @__PURE__ */ new Map()}
|
|
3877
3962
|
__init44() {this.paused = false}
|
|
3878
3963
|
/** Wet strokes dry as soon as they end (one undo step with the stroke). */
|
|
@@ -3896,8 +3981,8 @@ var PaintWetLayers = (_class6 = class {
|
|
|
3896
3981
|
/** Starts the GPU engine for the world (once; it may turn out unavailable). */
|
|
3897
3982
|
startGpu() {
|
|
3898
3983
|
if (this.gpuMode === "off" || this.gpu || this.gpuStarting || this.gpuSupport) return;
|
|
3899
|
-
const provider = this.options.gpuProvider === void 0 ?
|
|
3900
|
-
this.gpuStarting =
|
|
3984
|
+
const provider = this.options.gpuProvider === void 0 ? _chunkN5IMDAHMcjs.findWebGpu.call(void 0, ) : this.options.gpuProvider;
|
|
3985
|
+
this.gpuStarting = _chunkN5IMDAHMcjs.createWetGpuEngine.call(void 0, provider).then(({ engine, support }) => {
|
|
3901
3986
|
this.gpuSupport = support;
|
|
3902
3987
|
if (!engine) return;
|
|
3903
3988
|
if (this.gpuMode === "off" || !this.world) {
|
|
@@ -3927,8 +4012,8 @@ var PaintWetLayers = (_class6 = class {
|
|
|
3927
4012
|
if (mode === this.gpuMode) return this.engineInfo();
|
|
3928
4013
|
this.gpuMode = mode;
|
|
3929
4014
|
if (mode === "off") {
|
|
3930
|
-
_optionalChain([this, 'access',
|
|
3931
|
-
_optionalChain([this, 'access',
|
|
4015
|
+
_optionalChain([this, 'access', _83 => _83.world, 'optionalAccess', _84 => _84.attachGpu, 'call', _85 => _85(null)]);
|
|
4016
|
+
_optionalChain([this, 'access', _86 => _86.gpu, 'optionalAccess', _87 => _87.destroy, 'call', _88 => _88()]);
|
|
3932
4017
|
this.gpu = null;
|
|
3933
4018
|
this.gpuSupport = null;
|
|
3934
4019
|
} else if (this.world) this.startGpu();
|
|
@@ -3936,13 +4021,13 @@ var PaintWetLayers = (_class6 = class {
|
|
|
3936
4021
|
}
|
|
3937
4022
|
engineInfo() {
|
|
3938
4023
|
const w = this.world;
|
|
3939
|
-
const base = { mode: this.gpuMode, adapter: _nullishCoalesce(_optionalChain([this, 'access',
|
|
4024
|
+
const base = { mode: this.gpuMode, adapter: _nullishCoalesce(_optionalChain([this, 'access', _89 => _89.gpuSupport, 'optionalAccess', _90 => _90.adapter]), () => ( null)), maxTiles: _nullishCoalesce(_optionalChain([this, 'access', _91 => _91.gpuSupport, 'optionalAccess', _92 => _92.maxSlots]), () => ( 0)), minTiles: this.gpuMinTiles, activeTiles: _nullishCoalesce(_optionalChain([w, 'optionalAccess', _93 => _93.activeTiles, 'call', _94 => _94()]), () => ( 0)), cpu: this.backend() };
|
|
3940
4025
|
if (this.gpuMode === "off") return { ...base, state: "off", reason: "Forced to the CPU." };
|
|
3941
4026
|
if (this.gpuStarting) return { ...base, state: "starting", reason: null };
|
|
3942
|
-
if (_optionalChain([w, 'optionalAccess',
|
|
4027
|
+
if (_optionalChain([w, 'optionalAccess', _95 => _95.gpuError])) return { ...base, state: "failed", reason: w.gpuError };
|
|
3943
4028
|
if (this.gpuSupport && !this.gpuSupport.supported) return { ...base, state: "unavailable", reason: this.gpuSupport.reason };
|
|
3944
4029
|
if (!this.gpu) return { ...base, state: "not-started", reason: "Starts with the first wet stroke." };
|
|
3945
|
-
if (_optionalChain([w, 'optionalAccess',
|
|
4030
|
+
if (_optionalChain([w, 'optionalAccess', _96 => _96.gpuActive])) return { ...base, state: "active", reason: null };
|
|
3946
4031
|
return { ...base, state: "standby", reason: `The GPU takes over at ${this.gpuMinTiles} wet tiles (256 px).` };
|
|
3947
4032
|
}
|
|
3948
4033
|
/** The world (made on first use, at the canvas size). */
|
|
@@ -3956,7 +4041,7 @@ var PaintWetLayers = (_class6 = class {
|
|
|
3956
4041
|
return this.world;
|
|
3957
4042
|
}
|
|
3958
4043
|
makeWorld(width, height, paper) {
|
|
3959
|
-
const world = new (0,
|
|
4044
|
+
const world = new (0, _chunkN5IMDAHMcjs.WetWorld)(width, height, wetPaperInput(paper), { kernel: this.options.kernel, threads: this.options.threads });
|
|
3960
4045
|
world.setTilt(this.tilt);
|
|
3961
4046
|
world.gpuMinTiles = this.gpuMinTiles;
|
|
3962
4047
|
if (this.gpu) world.attachGpu(this.gpu);
|
|
@@ -3968,7 +4053,7 @@ var PaintWetLayers = (_class6 = class {
|
|
|
3968
4053
|
* sides: the shift has to be whole wet tiles (256 px), and no wet stroke may be live.
|
|
3969
4054
|
*/
|
|
3970
4055
|
canExtend(left2, top) {
|
|
3971
|
-
return left2 %
|
|
4056
|
+
return left2 % _chunkN5IMDAHMcjs.WET_TILE === 0 && top % _chunkN5IMDAHMcjs.WET_TILE === 0 && !this.driver;
|
|
3972
4057
|
}
|
|
3973
4058
|
/**
|
|
3974
4059
|
* Keeps the wet paint while the canvas grows to `width`×`height` by `left` / `top` on those
|
|
@@ -3981,17 +4066,17 @@ var PaintWetLayers = (_class6 = class {
|
|
|
3981
4066
|
if (!this.canExtend(left2, top)) throw new Error("Wet paint only moves by whole 256 px tiles, between strokes.");
|
|
3982
4067
|
for (const [id, s] of this.settings) if (s.flow.center) this.settings.set(id, { ...s, flow: { ...s.flow, center: { x: s.flow.center.x + left2, y: s.flow.center.y + top } } });
|
|
3983
4068
|
const old = this.world;
|
|
3984
|
-
const snap = _optionalChain([old, 'optionalAccess',
|
|
4069
|
+
const snap = _optionalChain([old, 'optionalAccess', _97 => _97.laneIds, 'call', _98 => _98(), 'access', _99 => _99.length]) ? old.snapshot() : null;
|
|
3985
4070
|
this.dropWorld();
|
|
3986
4071
|
this.lastTick = null;
|
|
3987
4072
|
this.stepsOwed = 0;
|
|
3988
4073
|
if (!old || !snap) return;
|
|
3989
|
-
const moved =
|
|
3990
|
-
const flow = _optionalChain([this, 'access',
|
|
4074
|
+
const moved = _chunkN5IMDAHMcjs.moveWetSnapshot.call(void 0, snap, old, { width, height }, left2, top, (l) => {
|
|
4075
|
+
const flow = _optionalChain([this, 'access', _100 => _100.settings, 'access', _101 => _101.get, 'call', _102 => _102(l.id), 'optionalAccess', _103 => _103.flow]);
|
|
3991
4076
|
return {
|
|
3992
4077
|
base: _chunk474IQG74cjs.translateSurface.call(void 0, l.base, left2, top),
|
|
3993
4078
|
...l.light ? { light: _chunk474IQG74cjs.translateSurface.call(void 0, l.light, left2, top) } : {},
|
|
3994
|
-
flow: l.flow && flow && flow.kind !== "none" ?
|
|
4079
|
+
flow: l.flow && flow && flow.kind !== "none" ? _chunkN5IMDAHMcjs.flowField.call(void 0, flow, width, height) : l.flow
|
|
3995
4080
|
};
|
|
3996
4081
|
});
|
|
3997
4082
|
this.world = this.makeWorld(width, height, paper);
|
|
@@ -4006,11 +4091,11 @@ var PaintWetLayers = (_class6 = class {
|
|
|
4006
4091
|
}
|
|
4007
4092
|
/** Layers holding a wet layer (wet or drying). */
|
|
4008
4093
|
wetLayerIds() {
|
|
4009
|
-
return _nullishCoalesce(_optionalChain([this, 'access',
|
|
4094
|
+
return _nullishCoalesce(_optionalChain([this, 'access', _104 => _104.world, 'optionalAccess', _105 => _105.laneIds, 'call', _106 => _106()]), () => ( []));
|
|
4010
4095
|
}
|
|
4011
4096
|
/** Whether a batch is running (edits wait). */
|
|
4012
4097
|
get busy() {
|
|
4013
|
-
return Boolean(_optionalChain([this, 'access',
|
|
4098
|
+
return Boolean(_optionalChain([this, 'access', _107 => _107.world, 'optionalAccess', _108 => _108.busy]));
|
|
4014
4099
|
}
|
|
4015
4100
|
/** Resolves when no batch is running. */
|
|
4016
4101
|
async idle() {
|
|
@@ -4019,7 +4104,7 @@ var PaintWetLayers = (_class6 = class {
|
|
|
4019
4104
|
settingsOf(layerId, medium = "watercolor") {
|
|
4020
4105
|
let s = this.settings.get(layerId);
|
|
4021
4106
|
if (!s) {
|
|
4022
|
-
s = { params:
|
|
4107
|
+
s = { params: _chunkN5IMDAHMcjs.normalizeWetParams.call(void 0, WET_MEDIUM_PARAMS[medium], _chunkN5IMDAHMcjs.DEFAULT_WET_PARAMS), flow: { ..._chunkN5IMDAHMcjs.DEFAULT_FLOW } };
|
|
4023
4108
|
this.settings.set(layerId, s);
|
|
4024
4109
|
}
|
|
4025
4110
|
return s;
|
|
@@ -4030,52 +4115,54 @@ var PaintWetLayers = (_class6 = class {
|
|
|
4030
4115
|
if (!w.hasLane(layerId)) {
|
|
4031
4116
|
const base = _nullishCoalesce(this.host.layerSurface(layerId), () => ( new (0, _chunk474IQG74cjs.TiledSurface)(4, /* @__PURE__ */ new Map(), 0)));
|
|
4032
4117
|
const s = this.settingsOf(layerId, medium);
|
|
4033
|
-
w.ensureLane(layerId, { params: s.params, base, light: this.host.layerLight(layerId) });
|
|
4118
|
+
w.ensureLane(layerId, { params: s.params, base, light: this.host.layerLight(layerId), ghost: s.ghost });
|
|
4034
4119
|
const { width, height } = this.host.canvas();
|
|
4035
|
-
if (s.flow.kind !== "none") w.setFlow(layerId,
|
|
4120
|
+
if (s.flow.kind !== "none") w.setFlow(layerId, _chunkN5IMDAHMcjs.flowField.call(void 0, s.flow, width, height), s.flow.strength);
|
|
4036
4121
|
}
|
|
4037
4122
|
return w;
|
|
4038
4123
|
}
|
|
4039
4124
|
setParams(layerId, update) {
|
|
4040
4125
|
const s = this.settingsOf(layerId);
|
|
4041
|
-
s.params =
|
|
4042
|
-
if (_optionalChain([this, 'access',
|
|
4126
|
+
s.params = _chunkN5IMDAHMcjs.normalizeWetParams.call(void 0, update, s.params);
|
|
4127
|
+
if (_optionalChain([this, 'access', _109 => _109.world, 'optionalAccess', _110 => _110.hasLane, 'call', _111 => _111(layerId)])) this.world.setParams(layerId, s.params);
|
|
4043
4128
|
return { ...s.params };
|
|
4044
4129
|
}
|
|
4045
4130
|
setFlow(layerId, update) {
|
|
4046
4131
|
const s = this.settingsOf(layerId);
|
|
4047
|
-
s.flow =
|
|
4048
|
-
if (_optionalChain([this, 'access',
|
|
4132
|
+
s.flow = _chunkN5IMDAHMcjs.normalizeFlow.call(void 0, update, s.flow);
|
|
4133
|
+
if (_optionalChain([this, 'access', _112 => _112.world, 'optionalAccess', _113 => _113.hasLane, 'call', _114 => _114(layerId)])) {
|
|
4049
4134
|
const { width, height } = this.host.canvas();
|
|
4050
|
-
this.world.setFlow(layerId,
|
|
4135
|
+
this.world.setFlow(layerId, _chunkN5IMDAHMcjs.flowField.call(void 0, s.flow, width, height), s.flow.strength);
|
|
4051
4136
|
}
|
|
4052
4137
|
return { ...s.flow };
|
|
4053
4138
|
}
|
|
4054
4139
|
setTilt(update) {
|
|
4055
|
-
this.tilt =
|
|
4056
|
-
_optionalChain([this, 'access',
|
|
4140
|
+
this.tilt = _chunkN5IMDAHMcjs.normalizeTilt.call(void 0, update, this.tilt);
|
|
4141
|
+
_optionalChain([this, 'access', _115 => _115.world, 'optionalAccess', _116 => _116.setTilt, 'call', _117 => _117(this.tilt)]);
|
|
4057
4142
|
return { ...this.tilt };
|
|
4058
4143
|
}
|
|
4059
4144
|
/** The paper changed. */
|
|
4060
4145
|
paperChanged() {
|
|
4061
|
-
_optionalChain([this, 'access',
|
|
4146
|
+
_optionalChain([this, 'access', _118 => _118.world, 'optionalAccess', _119 => _119.setPaper, 'call', _120 => _120(wetPaperInput(this.host.paper()))]);
|
|
4062
4147
|
}
|
|
4063
4148
|
/** A layer as tools describe it. */
|
|
4064
4149
|
info(layerId) {
|
|
4065
4150
|
const s = this.settingsOf(layerId);
|
|
4066
|
-
const st = _optionalChain([this, 'access',
|
|
4151
|
+
const st = _optionalChain([this, 'access', _121 => _121.world, 'optionalAccess', _122 => _122.hasLane, 'call', _123 => _123(layerId)]) ? this.world.stats(layerId) : null;
|
|
4152
|
+
const g = _optionalChain([this, 'access', _124 => _124.world, 'optionalAccess', _125 => _125.hasLane, 'call', _126 => _126(layerId)]) ? this.world.getGhost(layerId) : _nullishCoalesce(s.ghost, () => ( null));
|
|
4067
4153
|
return {
|
|
4068
4154
|
layerId,
|
|
4069
4155
|
wet: Boolean(st && st.wetCells > 0),
|
|
4070
|
-
wetCells: _nullishCoalesce(_optionalChain([st, 'optionalAccess',
|
|
4071
|
-
wetBounds: _nullishCoalesce(_optionalChain([st, 'optionalAccess',
|
|
4072
|
-
activeTiles: _nullishCoalesce(_optionalChain([st, 'optionalAccess',
|
|
4156
|
+
wetCells: _nullishCoalesce(_optionalChain([st, 'optionalAccess', _127 => _127.wetCells]), () => ( 0)),
|
|
4157
|
+
wetBounds: _nullishCoalesce(_optionalChain([st, 'optionalAccess', _128 => _128.wetBounds]), () => ( null)),
|
|
4158
|
+
activeTiles: _nullishCoalesce(_optionalChain([st, 'optionalAccess', _129 => _129.activeTiles]), () => ( 0)),
|
|
4073
4159
|
params: { ...s.params },
|
|
4074
|
-
flow: { ...s.flow }
|
|
4160
|
+
flow: { ...s.flow },
|
|
4161
|
+
...g ? { ghost: { remaining: Math.round(g.remaining * _chunkN5IMDAHMcjs.FREE_INTERVAL / this.speed * 100) / 100 } } : {}
|
|
4075
4162
|
};
|
|
4076
4163
|
}
|
|
4077
4164
|
backend() {
|
|
4078
|
-
return _nullishCoalesce(_optionalChain([this, 'access',
|
|
4165
|
+
return _nullishCoalesce(_optionalChain([this, 'access', _130 => _130.world, 'optionalAccess', _131 => _131.backend, 'call', _132 => _132()]), () => ( null));
|
|
4079
4166
|
}
|
|
4080
4167
|
/** Shows the current wet pixels (at most `maxTiles` reshaded per layer). */
|
|
4081
4168
|
syncDisplays(maxTiles = Infinity) {
|
|
@@ -4124,10 +4211,12 @@ var PaintWetLayers = (_class6 = class {
|
|
|
4124
4211
|
const w = this.world;
|
|
4125
4212
|
if (!w) return;
|
|
4126
4213
|
for (const id of w.laneIds()) {
|
|
4127
|
-
if (w.isActive(id) || _optionalChain([this, 'access',
|
|
4214
|
+
if (w.isActive(id) || _optionalChain([this, 'access', _133 => _133.driver, 'optionalAccess', _134 => _134.init, 'access', _135 => _135.laneId]) === id) continue;
|
|
4128
4215
|
const base = w.getBase(id);
|
|
4129
4216
|
const light = w.isLit(id) ? w.getLight(id) : null;
|
|
4130
4217
|
w.removeLane(id);
|
|
4218
|
+
const s = this.settings.get(id);
|
|
4219
|
+
if (_optionalChain([s, 'optionalAccess', _136 => _136.ghost])) delete s.ghost;
|
|
4131
4220
|
if (light && this.host.layerLight(id) !== light) this.host.updateLights(/* @__PURE__ */ new Map([[id, light]]));
|
|
4132
4221
|
this.host.updateSurfaces(/* @__PURE__ */ new Map([[id, base]]), []);
|
|
4133
4222
|
}
|
|
@@ -4206,7 +4295,7 @@ var PaintWetLayers = (_class6 = class {
|
|
|
4206
4295
|
if (!d || !this.world) return;
|
|
4207
4296
|
const rects = d.flush();
|
|
4208
4297
|
if (rects.length) this.syncDisplays(DISPLAY_TILES_PER_TICK);
|
|
4209
|
-
if (d.done) _optionalChain([this, 'access',
|
|
4298
|
+
if (d.done) _optionalChain([this, 'access', _137 => _137.onDriverDone, 'optionalCall', _138 => _138(d)]);
|
|
4210
4299
|
}
|
|
4211
4300
|
/** Called when a live stroke that ended mid-batch has finished applying. */
|
|
4212
4301
|
__init56() {this.onDriverDone = null}
|
|
@@ -4250,13 +4339,13 @@ var PaintWetLayers = (_class6 = class {
|
|
|
4250
4339
|
/** The layer's light paint with all its wet paint dried (`null` without a wet layer or light), without changing anything. */
|
|
4251
4340
|
bakedLight(layerId) {
|
|
4252
4341
|
const w = this.world;
|
|
4253
|
-
if (!_optionalChain([w, 'optionalAccess',
|
|
4342
|
+
if (!_optionalChain([w, 'optionalAccess', _139 => _139.hasLane, 'call', _140 => _140(layerId)]) || !w.isLit(layerId)) return null;
|
|
4254
4343
|
return w.bakedLight(layerId);
|
|
4255
4344
|
}
|
|
4256
4345
|
/** The layer's pixels with all its wet paint dried (deterministic), without changing anything. */
|
|
4257
4346
|
bakedSurface(layerId) {
|
|
4258
4347
|
const w = this.world;
|
|
4259
|
-
if (!_optionalChain([w, 'optionalAccess',
|
|
4348
|
+
if (!_optionalChain([w, 'optionalAccess', _141 => _141.hasLane, 'call', _142 => _142(layerId)])) return null;
|
|
4260
4349
|
return w.bakedSurface(layerId);
|
|
4261
4350
|
}
|
|
4262
4351
|
/** A snapshot of the world for undo (`null` when there is none). */
|
|
@@ -4277,13 +4366,13 @@ var PaintWetLayers = (_class6 = class {
|
|
|
4277
4366
|
this.syncDisplays();
|
|
4278
4367
|
}
|
|
4279
4368
|
dropWorld() {
|
|
4280
|
-
_optionalChain([this, 'access',
|
|
4369
|
+
_optionalChain([this, 'access', _143 => _143.world, 'optionalAccess', _144 => _144.destroy, 'call', _145 => _145()]);
|
|
4281
4370
|
this.world = null;
|
|
4282
4371
|
this.driver = null;
|
|
4283
4372
|
}
|
|
4284
4373
|
/** Forgets everything wet (a new canvas, a resize, opening a document). */
|
|
4285
4374
|
reset() {
|
|
4286
|
-
_optionalChain([this, 'access',
|
|
4375
|
+
_optionalChain([this, 'access', _146 => _146.world, 'optionalAccess', _147 => _147.destroy, 'call', _148 => _148()]);
|
|
4287
4376
|
this.world = null;
|
|
4288
4377
|
this.driver = null;
|
|
4289
4378
|
this.settings.clear();
|
|
@@ -4313,15 +4402,15 @@ var PaintWetLayers = (_class6 = class {
|
|
|
4313
4402
|
return out;
|
|
4314
4403
|
}
|
|
4315
4404
|
destroy() {
|
|
4316
|
-
_optionalChain([this, 'access',
|
|
4405
|
+
_optionalChain([this, 'access', _149 => _149.world, 'optionalAccess', _150 => _150.destroy, 'call', _151 => _151()]);
|
|
4317
4406
|
this.world = null;
|
|
4318
|
-
_optionalChain([this, 'access',
|
|
4407
|
+
_optionalChain([this, 'access', _152 => _152.gpu, 'optionalAccess', _153 => _153.destroy, 'call', _154 => _154()]);
|
|
4319
4408
|
this.gpu = null;
|
|
4320
4409
|
}
|
|
4321
4410
|
}, _class6);
|
|
4322
4411
|
function wetPigmentOf(hex, body) {
|
|
4323
4412
|
const [r, g, b] = hexToRgb8(hex);
|
|
4324
|
-
return Array.from(
|
|
4413
|
+
return Array.from(_chunkN5IMDAHMcjs.pigmentOf.call(void 0, [r / 255, g / 255, b / 255], body));
|
|
4325
4414
|
}
|
|
4326
4415
|
|
|
4327
4416
|
// src/vector/brushstrokeMedia.ts
|
|
@@ -4357,8 +4446,8 @@ function place(input, brush, options, pad = 0) {
|
|
|
4357
4446
|
const [r, g, b, a] = options.color;
|
|
4358
4447
|
const hex = "#" + [r, g, b].map((v2) => Math.round(Math.min(255, Math.max(0, v2))).toString(16).padStart(2, "0")).join("");
|
|
4359
4448
|
const source = _nullishCoalesce(options.paint, () => ( null));
|
|
4360
|
-
const paint = _optionalChain([source, 'optionalAccess',
|
|
4361
|
-
const color2 = _optionalChain([source, 'optionalAccess',
|
|
4449
|
+
const paint = _optionalChain([source, 'optionalAccess', _155 => _155.type]) === "gradient" ? _chunkNIBFKXMDcjs.resolvePaintGradient.call(void 0, _chunkNIBFKXMDcjs.scalePaintGradient.call(void 0, source, scale3), { paint: hex, secondary: "#ffffff" }) : null;
|
|
4450
|
+
const color2 = _optionalChain([source, 'optionalAccess', _156 => _156.type]) === "color" ? hexRgb(source.color) : [r / 255, g / 255, b / 255];
|
|
4362
4451
|
return { points, brush: sized, rect, scale: scale3, color: color2, alpha: Math.min(1, Math.max(0, a / 255)), paint };
|
|
4363
4452
|
}
|
|
4364
4453
|
function hexRgb(hex) {
|
|
@@ -4409,7 +4498,7 @@ var WetBrushstrokeJob = (_class7 = class {
|
|
|
4409
4498
|
return;
|
|
4410
4499
|
}
|
|
4411
4500
|
const { rect, points } = this.placed;
|
|
4412
|
-
this.world = new (0,
|
|
4501
|
+
this.world = new (0, _chunkN5IMDAHMcjs.WetWorld)(rect.width, rect.height, wetPaperInput(DEFAULT_PAPER), { kernel: "typescript", threads: 0 });
|
|
4413
4502
|
const medium = _nullishCoalesce(this.placed.brush.wet.medium, () => ( "watercolor"));
|
|
4414
4503
|
this.world.ensureLane("s", { params: _nullishCoalesce(WET_MEDIUM_PARAMS[medium], () => ( {})) });
|
|
4415
4504
|
const color2 = this.placed.color;
|
|
@@ -4468,7 +4557,7 @@ var WetBrushstrokeJob = (_class7 = class {
|
|
|
4468
4557
|
return this.final;
|
|
4469
4558
|
}
|
|
4470
4559
|
destroy() {
|
|
4471
|
-
_optionalChain([this, 'access',
|
|
4560
|
+
_optionalChain([this, 'access', _157 => _157.world, 'optionalAccess', _158 => _158.destroy, 'call', _159 => _159()]);
|
|
4472
4561
|
}
|
|
4473
4562
|
bake() {
|
|
4474
4563
|
if (!this.world || !this.placed) return EMPTY;
|
|
@@ -4493,8 +4582,8 @@ function renderBackdropBrushstroke(input, brush, options) {
|
|
|
4493
4582
|
const area = { x: 0, y: 0, width: rect.width, height: rect.height };
|
|
4494
4583
|
const before = options.backdrop ? options.backdrop(rect, placed.scale) : new Uint8ClampedArray(rect.width * rect.height * 4);
|
|
4495
4584
|
if (before.length !== rect.width * rect.height * 4) throw new Error(`The backdrop must be ${rect.width}\xD7${rect.height} RGBA pixels.`);
|
|
4496
|
-
const cached = _optionalChain([options, 'access',
|
|
4497
|
-
const hit = _optionalChain([cached, 'optionalAccess',
|
|
4585
|
+
const cached = _optionalChain([options, 'access', _160 => _160.cache, 'optionalCall', _161 => _161(before)]);
|
|
4586
|
+
const hit = _optionalChain([cached, 'optionalAccess', _162 => _162.get, 'call', _163 => _163()]);
|
|
4498
4587
|
if (hit) return hit;
|
|
4499
4588
|
const base = _chunk474IQG74cjs.writeRegion.call(void 0, _chunk474IQG74cjs.emptySurface.call(void 0, 4), area, before);
|
|
4500
4589
|
const live = /* @__PURE__ */ new Map();
|
|
@@ -4502,7 +4591,7 @@ function renderBackdropBrushstroke(input, brush, options) {
|
|
|
4502
4591
|
offset: { x: 0, y: 0 },
|
|
4503
4592
|
lockTransparency: false,
|
|
4504
4593
|
selection: null,
|
|
4505
|
-
readTile: (tx, ty) => _nullishCoalesce(_nullishCoalesce(live.get(_chunk474IQG74cjs.tileKey.call(void 0, tx, ty)), () => ( _optionalChain([base, 'access',
|
|
4594
|
+
readTile: (tx, ty) => _nullishCoalesce(_nullishCoalesce(live.get(_chunk474IQG74cjs.tileKey.call(void 0, tx, ty)), () => ( _optionalChain([base, 'access', _164 => _164.tiles, 'access', _165 => _165.get, 'call', _166 => _166(_chunk474IQG74cjs.tileKey.call(void 0, tx, ty)), 'optionalAccess', _167 => _167.data]))), () => ( null)),
|
|
4506
4595
|
writeTile: (tx, ty) => {
|
|
4507
4596
|
const key = _chunk474IQG74cjs.tileKey.call(void 0, tx, ty);
|
|
4508
4597
|
let t = live.get(key);
|
|
@@ -4520,17 +4609,17 @@ function renderBackdropBrushstroke(input, brush, options) {
|
|
|
4520
4609
|
for (const [key, data] of live) tiles.set(key, { data, uniform: null });
|
|
4521
4610
|
_chunk474IQG74cjs.readRegion.call(void 0, new (0, _chunk474IQG74cjs.TiledSurface)(4, tiles), area, after);
|
|
4522
4611
|
const result = cropped(after, placed, stroke.dabCount, (i) => after[i] !== before[i] || after[i + 1] !== before[i + 1] || after[i + 2] !== before[i + 2] || after[i + 3] !== before[i + 3]);
|
|
4523
|
-
_optionalChain([cached, 'optionalAccess',
|
|
4612
|
+
_optionalChain([cached, 'optionalAccess', _168 => _168.set, 'call', _169 => _169(result)]);
|
|
4524
4613
|
return result;
|
|
4525
4614
|
}
|
|
4526
4615
|
|
|
4527
4616
|
// src/vector/brushstroke.ts
|
|
4528
4617
|
var VECTOR_BRUSHSTROKE_SCALE = 2;
|
|
4529
|
-
var PRESETS =
|
|
4618
|
+
var PRESETS = _chunkGHGBIAWQcjs.listPresets.call(void 0, _chunkGHGBIAWQcjs.VECTOR_PROFILE).map((spec) => _chunkGHGBIAWQcjs.BUILTIN_BRUSHES.find((b) => b.id === spec.id));
|
|
4530
4619
|
function admitted(spec) {
|
|
4531
4620
|
try {
|
|
4532
|
-
const brush =
|
|
4533
|
-
return
|
|
4621
|
+
const brush = _chunkGHGBIAWQcjs.normalizeBrushSpec.call(void 0, spec);
|
|
4622
|
+
return _chunkGHGBIAWQcjs.checkBrush.call(void 0, brush, _chunkGHGBIAWQcjs.VECTOR_PROFILE).ok && isVectorBrushstrokeEngine(_chunkGHGBIAWQcjs.resolveBrush.call(void 0, brush)) ? brush : null;
|
|
4534
4623
|
} catch (e6) {
|
|
4535
4624
|
return null;
|
|
4536
4625
|
}
|
|
@@ -4542,7 +4631,7 @@ function vectorBrushstrokeBrushes(user = []) {
|
|
|
4542
4631
|
const out = [...PRESETS];
|
|
4543
4632
|
for (const raw of user) {
|
|
4544
4633
|
const brush = admitted(raw);
|
|
4545
|
-
if (brush && !out.some((b) => b.id === brush.id)) out.push(
|
|
4634
|
+
if (brush && !out.some((b) => b.id === brush.id)) out.push(_chunkGHGBIAWQcjs.resolveBrush.call(void 0, brush));
|
|
4546
4635
|
}
|
|
4547
4636
|
return out;
|
|
4548
4637
|
}
|
|
@@ -4552,7 +4641,7 @@ function vectorBrushstrokeBrush(id) {
|
|
|
4552
4641
|
function vectorBrushstrokeBrushOf(brush) {
|
|
4553
4642
|
if (brush.spec) {
|
|
4554
4643
|
const saved = admitted(brush.spec);
|
|
4555
|
-
return saved && saved.id === brush.brushId ?
|
|
4644
|
+
return saved && saved.id === brush.brushId ? _chunkGHGBIAWQcjs.resolveBrush.call(void 0, saved) : null;
|
|
4556
4645
|
}
|
|
4557
4646
|
return vectorBrushstrokeBrush(brush.brushId);
|
|
4558
4647
|
}
|
|
@@ -4560,15 +4649,15 @@ function vectorBrushstrokeBrushError(id, user = []) {
|
|
|
4560
4649
|
if (vectorBrushstrokeBrush(id)) return null;
|
|
4561
4650
|
const saved = user.find((b) => b.id === id);
|
|
4562
4651
|
const ids = vectorBrushstrokeBrushes(user).map((b) => b.id);
|
|
4563
|
-
const reasons = (b) =>
|
|
4652
|
+
const reasons = (b) => _chunkGHGBIAWQcjs.checkBrush.call(void 0, b, _chunkGHGBIAWQcjs.VECTOR_PROFILE).issues.filter((i) => i.severity === "error").map((i) => `${i.reason} ${i.fix}`).join(" ") || "its engine does not paint brushstrokes.";
|
|
4564
4653
|
if (saved) return admitted(saved) ? null : `Brush "${id}" (${saved.name}) can't paint a brushstroke: ${reasons(saved)} Use one of: ${ids.join(", ")}.`;
|
|
4565
|
-
const preset2 =
|
|
4654
|
+
const preset2 = _chunkGHGBIAWQcjs.BRUSH_PRESETS.find((b) => b.id === id);
|
|
4566
4655
|
if (preset2) return `Brush "${id}" (${preset2.name}) can't paint a brushstroke: ${reasons(preset2)} Use one of: ${ids.join(", ")}.`;
|
|
4567
|
-
return `Unknown brush "${id}". ${
|
|
4656
|
+
return `Unknown brush "${id}". ${_chunkGHGBIAWQcjs.closest.call(void 0, id, ids)}Use one of: ${ids.join(", ")} (vector.listBrushes lists them).`;
|
|
4568
4657
|
}
|
|
4569
4658
|
function vectorBrushstrokeDefaultColour(id, user = [], scheme = "light") {
|
|
4570
|
-
const brush = _nullishCoalesce(
|
|
4571
|
-
return brush ? _chunkJBZRVLXVcjs.brushColourHex.call(void 0, _optionalChain([brush, 'access',
|
|
4659
|
+
const brush = _nullishCoalesce(_chunkGHGBIAWQcjs.BRUSH_PRESETS.find((b) => b.id === id), () => ( user.find((b) => b.id === id)));
|
|
4660
|
+
return brush ? _chunkJBZRVLXVcjs.brushColourHex.call(void 0, _optionalChain([brush, 'access', _170 => _170.colour, 'optionalAccess', _171 => _171.default]), scheme) : null;
|
|
4572
4661
|
}
|
|
4573
4662
|
function sanitizeVectorBrushstroke(value, user = []) {
|
|
4574
4663
|
if (!value || typeof value !== "object") return null;
|
|
@@ -4692,7 +4781,7 @@ function strokePaintOf(node, layer, brush, length2) {
|
|
|
4692
4781
|
const color2 = [c[0] * 255, c[1] * 255, c[2] * 255, c[3] * 255].map(Math.round);
|
|
4693
4782
|
if (layer.brush.paint) return { color: color2, paint: layer.brush.paint, within: null };
|
|
4694
4783
|
const g = layer.paint;
|
|
4695
|
-
if (isVectorGradient(g) && _optionalChain([g, 'access',
|
|
4784
|
+
if (isVectorGradient(g) && _optionalChain([g, 'access', _172 => _172.stops, 'optionalAccess', _173 => _173.length])) {
|
|
4696
4785
|
const mode = _nullishCoalesce(g.strokeMode, () => ( "within"));
|
|
4697
4786
|
if (mode === "along") return { color: [color2[0], color2[1], color2[2], 255], paint: gradientPaint(g, { by: "distance", length: Math.max(1, length2), repeat: REPEAT[_nullishCoalesce(g.spread, () => ( "pad"))], unit: "px" }), within: null };
|
|
4698
4787
|
if (mode === "across") return { color: [color2[0], color2[1], color2[2], 255], paint: gradientPaint(g, { by: "across-tip" }), within: null };
|
|
@@ -4847,7 +4936,7 @@ function vectorBrushstrokeImages(node, layer, context = {}) {
|
|
|
4847
4936
|
const source = usesVectorBackdrop(engine) && backdropSource ? backdropSource(document2, node, Math.max(0, index), settle) : null;
|
|
4848
4937
|
const deps = source ? [...source.deps, wetGeneration] : null;
|
|
4849
4938
|
let byLayer = layerCache.get(node);
|
|
4850
|
-
const hit = _optionalChain([byLayer, 'optionalAccess',
|
|
4939
|
+
const hit = _optionalChain([byLayer, 'optionalAccess', _174 => _174.get, 'call', _175 => _175(layer)]);
|
|
4851
4940
|
const stale = hit && (hit.pending.length && hit.pending.some((k) => wetSettled.has(k)) || settle === "now" && !hit.settled);
|
|
4852
4941
|
if (hit && sameDeps(hit.deps, deps) && !stale) return hit.images;
|
|
4853
4942
|
const brush = layer.brush.size ? { ...preset2, tip: { ...preset2.tip, size: layer.brush.size } } : preset2;
|
|
@@ -4872,7 +4961,7 @@ function vectorBrushstrokeImages(node, layer, context = {}) {
|
|
|
4872
4961
|
const key = mediaKey(input, brush, options);
|
|
4873
4962
|
stroke = renderBackdropBrushstroke(input, brush, {
|
|
4874
4963
|
...options,
|
|
4875
|
-
backdrop: _nullishCoalesce(_optionalChain([source, 'optionalAccess',
|
|
4964
|
+
backdrop: _nullishCoalesce(_optionalChain([source, 'optionalAccess', _176 => _176.backdrop]), () => ( null)),
|
|
4876
4965
|
cache: (bytes) => {
|
|
4877
4966
|
const k = `${key}:${hashBytes(bytes).toString(16)}`;
|
|
4878
4967
|
return { get: () => backdropResults.get(k), set: (img) => backdropResults.set(k, img) };
|
|
@@ -4976,7 +5065,7 @@ function withVectorFills(node, fills) {
|
|
|
4976
5065
|
const next = { ...node };
|
|
4977
5066
|
if (fills.length === 0 || fills.length === 1 && isPlainVectorPaintLayer(fills[0])) {
|
|
4978
5067
|
delete next.fills;
|
|
4979
|
-
next.fill = _nullishCoalesce(_optionalChain([fills, 'access',
|
|
5068
|
+
next.fill = _nullishCoalesce(_optionalChain([fills, 'access', _177 => _177[0], 'optionalAccess', _178 => _178.paint]), () => ( null));
|
|
4980
5069
|
return next;
|
|
4981
5070
|
}
|
|
4982
5071
|
next.fills = fills.map((l) => ({ ...l }));
|
|
@@ -5001,8 +5090,8 @@ function withVectorStrokes(node, strokes) {
|
|
|
5001
5090
|
var json = (v2) => JSON.stringify(_nullishCoalesce(v2, () => ( null)));
|
|
5002
5091
|
function strokeShorthandDiff(node, top) {
|
|
5003
5092
|
const out = [];
|
|
5004
|
-
if (json(node.stroke) !== json(_optionalChain([top, 'optionalAccess',
|
|
5005
|
-
for (const key of VECTOR_STROKE_SETTING_KEYS) if (json(node[key]) !== json(_optionalChain([top, 'optionalAccess',
|
|
5093
|
+
if (json(node.stroke) !== json(_optionalChain([top, 'optionalAccess', _179 => _179.paint]))) out.push("stroke");
|
|
5094
|
+
for (const key of VECTOR_STROKE_SETTING_KEYS) if (json(node[key]) !== json(_optionalChain([top, 'optionalAccess', _180 => _180[key]]))) out.push(key);
|
|
5006
5095
|
return out;
|
|
5007
5096
|
}
|
|
5008
5097
|
var checked = /* @__PURE__ */ new WeakSet();
|
|
@@ -5019,7 +5108,7 @@ function normalizeVectorPaintStacks(node, prefer = "shorthand") {
|
|
|
5019
5108
|
if (Array.isArray(node.fills)) {
|
|
5020
5109
|
let fills = node.fills;
|
|
5021
5110
|
const top = fills[fills.length - 1];
|
|
5022
|
-
if (prefer === "shorthand" && json(node.fill) !== json(_optionalChain([top, 'optionalAccess',
|
|
5111
|
+
if (prefer === "shorthand" && json(node.fill) !== json(_optionalChain([top, 'optionalAccess', _181 => _181.paint]))) {
|
|
5023
5112
|
if (!draws(node.fill)) fills = [];
|
|
5024
5113
|
else fills = top ? [...fills.slice(0, -1), { ...top, paint: node.fill }] : [{ paint: node.fill }];
|
|
5025
5114
|
}
|
|
@@ -5235,8 +5324,8 @@ var Measured = class {
|
|
|
5235
5324
|
append(sa, sb, out) {
|
|
5236
5325
|
for (const piece of _chunkGF2RBSDMcjs.trimSegments.call(void 0, this.segs, sa, sb, this.lens)) {
|
|
5237
5326
|
if (degenerate(piece)) continue;
|
|
5238
|
-
const last = _optionalChain([out, 'access',
|
|
5239
|
-
const end = _optionalChain([last, 'optionalAccess',
|
|
5327
|
+
const last = _optionalChain([out, 'access', _182 => _182[out.length - 1], 'optionalAccess', _183 => _183.segs]);
|
|
5328
|
+
const end = _optionalChain([last, 'optionalAccess', _184 => _184[last.length - 1], 'optionalAccess', _185 => _185.at, 'call', _186 => _186(-1)]);
|
|
5240
5329
|
if (!end || Math.hypot(end[0] - piece[0][0], end[1] - piece[0][1]) > 1e-6) out.push({ segs: [piece], closed: false });
|
|
5241
5330
|
else last.push(piece);
|
|
5242
5331
|
}
|
|
@@ -5548,9 +5637,9 @@ function vectorRepeaterCopies(r, pivot) {
|
|
|
5548
5637
|
for (let i = 0; i < n; i++) {
|
|
5549
5638
|
const k = i + offset;
|
|
5550
5639
|
let m = translateMatrix(-pivot.x, -pivot.y);
|
|
5551
|
-
m = multiplyMatrices(m, scaleMatrix(Math.pow((_nullishCoalesce(_optionalChain([r, 'access',
|
|
5640
|
+
m = multiplyMatrices(m, scaleMatrix(Math.pow((_nullishCoalesce(_optionalChain([r, 'access', _187 => _187.scale, 'optionalAccess', _188 => _188.x]), () => ( 100))) / 100, k), Math.pow((_nullishCoalesce(_optionalChain([r, 'access', _189 => _189.scale, 'optionalAccess', _190 => _190.y]), () => ( 100))) / 100, k)));
|
|
5552
5641
|
m = multiplyMatrices(m, rotateMatrix((_nullishCoalesce(r.rotation, () => ( 0))) * k));
|
|
5553
|
-
m = multiplyMatrices(m, translateMatrix(pivot.x + (_nullishCoalesce(_optionalChain([r, 'access',
|
|
5642
|
+
m = multiplyMatrices(m, translateMatrix(pivot.x + (_nullishCoalesce(_optionalChain([r, 'access', _191 => _191.position, 'optionalAccess', _192 => _192.x]), () => ( 0))) * k, pivot.y + (_nullishCoalesce(_optionalChain([r, 'access', _193 => _193.position, 'optionalAccess', _194 => _194.y]), () => ( 0))) * k));
|
|
5554
5643
|
const t = n > 1 ? i / (n - 1) : 0;
|
|
5555
5644
|
const partial = i + 1 === n && fract > 0 ? fract : 1;
|
|
5556
5645
|
out.push({ index: i, matrix: m, opacity: Math.min(1, Math.max(0, (so + (eo - so) * t) * partial)) });
|
|
@@ -5714,7 +5803,7 @@ function mapBezierPath(path, f, tolerance = 0.1, options = {}) {
|
|
|
5714
5803
|
|
|
5715
5804
|
// src/vector/frames.ts
|
|
5716
5805
|
function isVectorFrame(node) {
|
|
5717
|
-
return _optionalChain([node, 'optionalAccess',
|
|
5806
|
+
return _optionalChain([node, 'optionalAccess', _195 => _195.type]) === "group" && !!node.frame && !node.blend && !node.liveBoolean && !node.mask;
|
|
5718
5807
|
}
|
|
5719
5808
|
function vectorFrameRectPath(frame) {
|
|
5720
5809
|
const { x, y, width: w, height: h } = frame;
|
|
@@ -5759,8 +5848,8 @@ function placeSpan(rule, a0, a1, f0, f1, g0, g1) {
|
|
|
5759
5848
|
}
|
|
5760
5849
|
}
|
|
5761
5850
|
function vectorFrameChildMatrix(resizing, box, from, to) {
|
|
5762
|
-
const [x0, x1] = placeSpan(_nullishCoalesce(H[_nullishCoalesce(_optionalChain([resizing, 'optionalAccess',
|
|
5763
|
-
const [y0, y1] = placeSpan(_nullishCoalesce(V[_nullishCoalesce(_optionalChain([resizing, 'optionalAccess',
|
|
5851
|
+
const [x0, x1] = placeSpan(_nullishCoalesce(H[_nullishCoalesce(_optionalChain([resizing, 'optionalAccess', _196 => _196.horizontal]), () => ( "left"))], () => ( "start")), box.x, box.x + box.width, from.x, from.x + from.width, to.x, to.x + to.width);
|
|
5852
|
+
const [y0, y1] = placeSpan(_nullishCoalesce(V[_nullishCoalesce(_optionalChain([resizing, 'optionalAccess', _197 => _197.vertical]), () => ( "top"))], () => ( "start")), box.y, box.y + box.height, from.y, from.y + from.height, to.y, to.y + to.height);
|
|
5764
5853
|
const sx = box.width > 1e-9 ? (x1 - x0) / box.width : 1;
|
|
5765
5854
|
const sy = box.height > 1e-9 ? (y1 - y0) / box.height : 1;
|
|
5766
5855
|
return [sx, 0, 0, sy, x0 - sx * box.x, y0 - sy * box.y];
|
|
@@ -5816,7 +5905,7 @@ function vectorFrameDocument(doc, id, find) {
|
|
|
5816
5905
|
height,
|
|
5817
5906
|
...doc.background ? { background: doc.background } : {},
|
|
5818
5907
|
nodes: [placed],
|
|
5819
|
-
..._optionalChain([doc, 'access',
|
|
5908
|
+
..._optionalChain([doc, 'access', _198 => _198.symbols, 'optionalAccess', _199 => _199.length]) ? { symbols: doc.symbols } : {}
|
|
5820
5909
|
};
|
|
5821
5910
|
}
|
|
5822
5911
|
function getVectorFramePanel(state) {
|
|
@@ -5836,7 +5925,7 @@ function getVectorFramePanel(state) {
|
|
|
5836
5925
|
const one = (values) => values.every((v2) => v2 === values[0]) ? values[0] : "mixed";
|
|
5837
5926
|
return {
|
|
5838
5927
|
frame: f ? { id: f.id, name: _nullishCoalesce(f.name, () => ( "Frame")), artboard: parents.get(f.id) === null, frame: f.frame } : null,
|
|
5839
|
-
resizing: children.length ? { ids: children.map((c) => c.id), horizontal: one(children.map((c) => _nullishCoalesce(_optionalChain([c, 'access',
|
|
5928
|
+
resizing: children.length ? { ids: children.map((c) => c.id), horizontal: one(children.map((c) => _nullishCoalesce(_optionalChain([c, 'access', _200 => _200.resizing, 'optionalAccess', _201 => _201.horizontal]), () => ( "left")))), vertical: one(children.map((c) => _nullishCoalesce(_optionalChain([c, 'access', _202 => _202.resizing, 'optionalAccess', _203 => _203.vertical]), () => ( "top")))) } : null
|
|
5840
5929
|
};
|
|
5841
5930
|
}
|
|
5842
5931
|
|
|
@@ -6222,7 +6311,7 @@ function normalizeVectorFilterParams(type, params, base) {
|
|
|
6222
6311
|
if (!isVectorFilterType(type)) return null;
|
|
6223
6312
|
const out = { ...VECTOR_FILTER_DEFAULTS[type], ..._nullishCoalesce(base, () => ( {})) };
|
|
6224
6313
|
for (const spec of VECTOR_FILTER_PARAM_SPECS[type]) {
|
|
6225
|
-
const v2 = _optionalChain([params, 'optionalAccess',
|
|
6314
|
+
const v2 = _optionalChain([params, 'optionalAccess', _204 => _204[spec.key]]);
|
|
6226
6315
|
if (v2 === void 0) continue;
|
|
6227
6316
|
if (spec.kind === "number" && typeof v2 === "number" && Number.isFinite(v2)) out[spec.key] = Math.min(_nullishCoalesce(spec.max, () => ( Infinity)), Math.max(_nullishCoalesce(spec.min, () => ( -Infinity)), v2));
|
|
6228
6317
|
else if (spec.kind === "color" && typeof v2 === "string" && v2.trim()) out[spec.key] = v2.trim();
|
|
@@ -6354,7 +6443,7 @@ function vectorFilterSvg(filters, id, bounds) {
|
|
|
6354
6443
|
primitives.push(fe("feGaussianBlur", { in: body, stdDeviation: round(f.params.radius / 2), result: name("body") }));
|
|
6355
6444
|
body = name("body");
|
|
6356
6445
|
}
|
|
6357
|
-
const lastResult = _optionalChain([primitives, 'access',
|
|
6446
|
+
const lastResult = _optionalChain([primitives, 'access', _205 => _205[primitives.length - 1], 'optionalAccess', _206 => _206.attrs, 'access', _207 => _207.result]);
|
|
6358
6447
|
if (lastResult !== body) primitives.push(fe("feMerge", {}, [fe("feMergeNode", { in: body })]));
|
|
6359
6448
|
const pad = vectorFilterReach(active) + 2;
|
|
6360
6449
|
return {
|
|
@@ -6369,7 +6458,7 @@ function vectorFilterSvg(filters, id, bounds) {
|
|
|
6369
6458
|
var escapeAttr = (value) => value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
6370
6459
|
function primitiveMarkup(p) {
|
|
6371
6460
|
const attrs = Object.entries(p.attrs).map(([k, v2]) => ` ${k}="${escapeAttr(String(v2))}"`).join("");
|
|
6372
|
-
return _optionalChain([p, 'access',
|
|
6461
|
+
return _optionalChain([p, 'access', _208 => _208.children, 'optionalAccess', _209 => _209.length]) ? `<${p.tag}${attrs}>${p.children.map(primitiveMarkup).join("")}</${p.tag}>` : `<${p.tag}${attrs}/>`;
|
|
6373
6462
|
}
|
|
6374
6463
|
function vectorFilterMarkup(filter, extra = "") {
|
|
6375
6464
|
return `<filter id="${escapeAttr(filter.id)}" filterUnits="userSpaceOnUse" x="${filter.x}" y="${filter.y}" width="${filter.width}" height="${filter.height}" color-interpolation-filters="sRGB"${extra}>${filter.primitives.map(primitiveMarkup).join("")}</filter>`;
|
|
@@ -6387,7 +6476,7 @@ function sanitizeVectorMask(value) {
|
|
|
6387
6476
|
return r.invert === true ? { type: r.type, invert: true } : { type: r.type };
|
|
6388
6477
|
}
|
|
6389
6478
|
function isVectorMaskGroup(node) {
|
|
6390
|
-
return _optionalChain([node, 'optionalAccess',
|
|
6479
|
+
return _optionalChain([node, 'optionalAccess', _210 => _210.type]) === "group" && !!node.mask && isVectorMaskType(node.mask.type) && !node.blend && !node.liveBoolean && node.children.length > 0;
|
|
6391
6480
|
}
|
|
6392
6481
|
function isVectorMaskActive(node) {
|
|
6393
6482
|
return isVectorMaskGroup(node) && node.children[0].visible !== false;
|
|
@@ -6422,7 +6511,7 @@ function vectorMaskRegionShapes(node, type, parent = IDENTITY_MATRIX, self = tru
|
|
|
6422
6511
|
if (!self && node.visible === false) return [];
|
|
6423
6512
|
if (isVectorFrame(node)) node = vectorFrameDrawn(node);
|
|
6424
6513
|
const m = multiplyMatrices(nodeMatrix(node), parent);
|
|
6425
|
-
if (isVectorMaskActive(node) || node.type === "group" && _optionalChain([node, 'access',
|
|
6514
|
+
if (isVectorMaskActive(node) || node.type === "group" && _optionalChain([node, 'access', _211 => _211.effects, 'optionalAccess', _212 => _212.length])) {
|
|
6426
6515
|
return vectorAppearanceShapes(node).flatMap((s) => regionOfPath(s.path, s.source, type, m));
|
|
6427
6516
|
}
|
|
6428
6517
|
const drawn = expandVectorAppearance(node);
|
|
@@ -6627,7 +6716,7 @@ function fitRuns(runs, length2, fallback) {
|
|
|
6627
6716
|
}
|
|
6628
6717
|
if (left2 > 0) {
|
|
6629
6718
|
if (out.length) out[out.length - 1] = { ...out[out.length - 1], length: out[out.length - 1].length + left2 };
|
|
6630
|
-
else out.push({ length: left2, style: _nullishCoalesce(_optionalChain([runs, 'access',
|
|
6719
|
+
else out.push({ length: left2, style: _nullishCoalesce(_optionalChain([runs, 'access', _213 => _213[runs.length - 1], 'optionalAccess', _214 => _214.style]), () => ( fallback)) });
|
|
6631
6720
|
}
|
|
6632
6721
|
return compact(out);
|
|
6633
6722
|
}
|
|
@@ -6637,7 +6726,7 @@ function styleAt(runs, index, fallback) {
|
|
|
6637
6726
|
if (index < at2 + r.length) return r.style;
|
|
6638
6727
|
at2 += r.length;
|
|
6639
6728
|
}
|
|
6640
|
-
return _nullishCoalesce(_optionalChain([runs, 'access',
|
|
6729
|
+
return _nullishCoalesce(_optionalChain([runs, 'access', _215 => _215[runs.length - 1], 'optionalAccess', _216 => _216.style]), () => ( fallback));
|
|
6641
6730
|
}
|
|
6642
6731
|
function restyleRange(runs, start, end, patch) {
|
|
6643
6732
|
const out = [];
|
|
@@ -6693,7 +6782,7 @@ function paragraphRanges(text) {
|
|
|
6693
6782
|
return out;
|
|
6694
6783
|
}
|
|
6695
6784
|
function fitParagraphRuns(runs, text) {
|
|
6696
|
-
const fallback = _nullishCoalesce(_optionalChain([runs, 'access',
|
|
6785
|
+
const fallback = _nullishCoalesce(_optionalChain([runs, 'access', _217 => _217[0], 'optionalAccess', _218 => _218.style]), () => ( {}));
|
|
6697
6786
|
const out = compact(paragraphRanges(text).map((p) => ({ length: p.end - p.start, style: styleAt(runs, p.start, fallback) })));
|
|
6698
6787
|
return out.length ? out : [{ length: 0, style: fallback }];
|
|
6699
6788
|
}
|
|
@@ -6743,7 +6832,7 @@ function textLineRect(l) {
|
|
|
6743
6832
|
var layoutCache = /* @__PURE__ */ new WeakMap();
|
|
6744
6833
|
function layoutText(layer, shaper) {
|
|
6745
6834
|
let byShaper = layoutCache.get(layer);
|
|
6746
|
-
const hit = _optionalChain([byShaper, 'optionalAccess',
|
|
6835
|
+
const hit = _optionalChain([byShaper, 'optionalAccess', _219 => _219.get, 'call', _220 => _220(shaper.id)]);
|
|
6747
6836
|
if (hit) return hit;
|
|
6748
6837
|
const out = computeLayout(layer, shaper);
|
|
6749
6838
|
if (!byShaper) {
|
|
@@ -6807,7 +6896,7 @@ function computeLayout(layer, shaper) {
|
|
|
6807
6896
|
const code = seg.charCodeAt(k);
|
|
6808
6897
|
if (isLow(code) && index > 0 && isHigh(text.charCodeAt(index - 1))) {
|
|
6809
6898
|
const prev = chars[chars.length - 1];
|
|
6810
|
-
if (_optionalChain([prev, 'optionalAccess',
|
|
6899
|
+
if (_optionalChain([prev, 'optionalAccess', _221 => _221.up])) {
|
|
6811
6900
|
chars.push({ index, ch: seg[k], advance: 0, style, up: prev.up, low: true });
|
|
6812
6901
|
} else chars.push({ index, ch: seg[k], advance, style, low: true });
|
|
6813
6902
|
continue;
|
|
@@ -7135,7 +7224,7 @@ function createCanvasTextShaper(options = {}) {
|
|
|
7135
7224
|
return null;
|
|
7136
7225
|
})));
|
|
7137
7226
|
const canvas = make(1, 1);
|
|
7138
|
-
const ctx = _optionalChain([canvas, 'optionalAccess',
|
|
7227
|
+
const ctx = _optionalChain([canvas, 'optionalAccess', _222 => _222.getContext, 'call', _223 => _223("2d")]);
|
|
7139
7228
|
if (!ctx || typeof ctx.measureText !== "function") return null;
|
|
7140
7229
|
const fallback = _nullishCoalesce(options.fallbackFamily, () => ( "sans-serif"));
|
|
7141
7230
|
const available = /* @__PURE__ */ new Map();
|
|
@@ -7208,10 +7297,10 @@ function createOutlineTextShaper(fonts, options = {}) {
|
|
|
7208
7297
|
const entries = fonts.map((f) => {
|
|
7209
7298
|
const e = "face" in f ? f : { face: f };
|
|
7210
7299
|
const names = e.face.names;
|
|
7211
|
-
const family = _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(e.family, () => ( _optionalChain([names, 'optionalAccess',
|
|
7212
|
-
const weight = _nullishCoalesce(_nullishCoalesce(e.weight, () => ( _optionalChain([e, 'access',
|
|
7213
|
-
const italic = _nullishCoalesce(e.italic, () => ( Boolean((_nullishCoalesce(_optionalChain([e, 'access',
|
|
7214
|
-
const postScript = _nullishCoalesce(_optionalChain([names, 'optionalAccess',
|
|
7300
|
+
const family = _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(e.family, () => ( _optionalChain([names, 'optionalAccess', _224 => _224.fontFamily, 'optionalAccess', _225 => _225.en]))), () => ( Object.values(_nullishCoalesce(_optionalChain([names, 'optionalAccess', _226 => _226.fontFamily]), () => ( {})))[0])), () => ( "Font"));
|
|
7301
|
+
const weight = _nullishCoalesce(_nullishCoalesce(e.weight, () => ( _optionalChain([e, 'access', _227 => _227.face, 'access', _228 => _228.tables, 'optionalAccess', _229 => _229.os2, 'optionalAccess', _230 => _230.usWeightClass]))), () => ( 400));
|
|
7302
|
+
const italic = _nullishCoalesce(e.italic, () => ( Boolean((_nullishCoalesce(_optionalChain([e, 'access', _231 => _231.face, 'access', _232 => _232.tables, 'optionalAccess', _233 => _233.os2, 'optionalAccess', _234 => _234.fsSelection]), () => ( 0))) & 1)));
|
|
7303
|
+
const postScript = _nullishCoalesce(_optionalChain([names, 'optionalAccess', _235 => _235.postScriptName, 'optionalAccess', _236 => _236.en]), () => ( Object.values(_nullishCoalesce(_optionalChain([names, 'optionalAccess', _237 => _237.postScriptName]), () => ( {})))[0]));
|
|
7215
7304
|
return { face: e.face, family, key: family.toLowerCase(), weight, italic, postScript };
|
|
7216
7305
|
});
|
|
7217
7306
|
const fallbackKey = (_nullishCoalesce(options.fallback, () => ( entries[0].family))).toLowerCase();
|
|
@@ -7258,12 +7347,12 @@ function createOutlineTextShaper(fonts, options = {}) {
|
|
|
7258
7347
|
return out;
|
|
7259
7348
|
},
|
|
7260
7349
|
outline(text, font, x, y, opts) {
|
|
7261
|
-
return toPath(pick(font).entry.face.getPath(text, x, y, font.size, _optionalChain([opts, 'optionalAccess',
|
|
7350
|
+
return toPath(pick(font).entry.face.getPath(text, x, y, font.size, _optionalChain([opts, 'optionalAccess', _238 => _238.vertical]) ? { kerning: true, vertical: true } : { kerning: true }).commands);
|
|
7262
7351
|
},
|
|
7263
7352
|
vertical(char, font) {
|
|
7264
7353
|
const { face } = pick(font).entry;
|
|
7265
7354
|
const k = font.size / face.unitsPerEm;
|
|
7266
|
-
const v2 = _optionalChain([face, 'access',
|
|
7355
|
+
const v2 = _optionalChain([face, 'access', _239 => _239.getVerticalMetrics, 'optionalCall', _240 => _240(char)]);
|
|
7267
7356
|
if (v2) return { advance: v2.advance * k, originY: v2.originY * k, alternate: v2.alternate };
|
|
7268
7357
|
return { advance: (face.ascender - face.descender) * k, originY: face.ascender * k, alternate: false };
|
|
7269
7358
|
},
|
|
@@ -7324,7 +7413,7 @@ function vectorTextHasOutlines() {
|
|
|
7324
7413
|
return typeof getVectorTextShaper().outline === "function";
|
|
7325
7414
|
}
|
|
7326
7415
|
function vectorTextFamilies() {
|
|
7327
|
-
return _nullishCoalesce(_optionalChain([getVectorTextShaper, 'call',
|
|
7416
|
+
return _nullishCoalesce(_optionalChain([getVectorTextShaper, 'call', _241 => _241(), 'access', _242 => _242.families, 'optionalCall', _243 => _243()]), () => ( ["sans-serif", "serif", "monospace"]));
|
|
7328
7417
|
}
|
|
7329
7418
|
var DEFAULT_VECTOR_FONT = { fontFamily: "sans-serif", fontWeight: 400, fontSize: 24 };
|
|
7330
7419
|
var VECTOR_CHARACTER_STYLE_KEYS = ["fontFamily", "fontWeight", "italic", "fontSize", "tracking", "leading", "baselineShift", "underline", "strikethrough", "upright"];
|
|
@@ -7500,7 +7589,7 @@ function computeLayout2(node, shaper) {
|
|
|
7500
7589
|
const fragments = [];
|
|
7501
7590
|
const lines = [];
|
|
7502
7591
|
let overflow = false;
|
|
7503
|
-
const fillOf = (f) => _optionalChain([runs, 'access',
|
|
7592
|
+
const fillOf = (f) => _optionalChain([runs, 'access', _244 => _244.find, 'call', _245 => _245((r) => f.start >= r.start && f.start < r.end), 'optionalAccess', _246 => _246.fill]);
|
|
7504
7593
|
const styleOf = (f) => {
|
|
7505
7594
|
const { color: _c, opacity: _o, postScriptName: _p, ...style } = f.style;
|
|
7506
7595
|
return style;
|
|
@@ -7539,11 +7628,11 @@ function computeLayout2(node, shaper) {
|
|
|
7539
7628
|
} else {
|
|
7540
7629
|
const line = text.lines[0];
|
|
7541
7630
|
const measure = measureVectorPath(subpathPath(frame.path), !!frame.flip);
|
|
7542
|
-
const align = _nullishCoalesce(_optionalChain([node, 'access',
|
|
7631
|
+
const align = _nullishCoalesce(_optionalChain([node, 'access', _247 => _247.paragraph, 'optionalAccess', _248 => _248.align]), () => ( "left"));
|
|
7543
7632
|
const start = Math.max(0, _nullishCoalesce(frame.start, () => ( 0)));
|
|
7544
7633
|
const end = Math.max(0, _nullishCoalesce(frame.end, () => ( 0)));
|
|
7545
7634
|
const upright = frame.orientation === "upright";
|
|
7546
|
-
const baselineOffset = pathBaselineOffset(_nullishCoalesce(frame.baseline, () => ( "baseline")), _nullishCoalesce(_optionalChain([line, 'optionalAccess',
|
|
7635
|
+
const baselineOffset = pathBaselineOffset(_nullishCoalesce(frame.baseline, () => ( "baseline")), _nullishCoalesce(_optionalChain([line, 'optionalAccess', _249 => _249.ascent]), () => ( 0)), _nullishCoalesce(_optionalChain([line, 'optionalAccess', _250 => _250.descent]), () => ( 0)));
|
|
7547
7636
|
if (line) {
|
|
7548
7637
|
const chars = line.chars.filter((c) => {
|
|
7549
7638
|
const lo = block.text.charCodeAt(c.index);
|
|
@@ -7552,7 +7641,7 @@ function computeLayout2(node, shaper) {
|
|
|
7552
7641
|
const advanceOf = (c) => {
|
|
7553
7642
|
const pair = charAt(block.text, c.index).length === 2;
|
|
7554
7643
|
const low = pair ? line.chars.find((d) => d.index === c.index + 1) : void 0;
|
|
7555
|
-
return c.advance + (_nullishCoalesce(_optionalChain([low, 'optionalAccess',
|
|
7644
|
+
return c.advance + (_nullishCoalesce(_optionalChain([low, 'optionalAccess', _251 => _251.advance]), () => ( 0)));
|
|
7556
7645
|
};
|
|
7557
7646
|
const pivots = chars.map((c) => c.x + advanceOf(c) / 2);
|
|
7558
7647
|
const positions = vectorPathTextPositions(pivots, [line.x, line.x + line.width], align, measure.length, start, end);
|
|
@@ -7607,7 +7696,7 @@ function computeLayout2(node, shaper) {
|
|
|
7607
7696
|
if (x0 < Infinity) bounds = { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };
|
|
7608
7697
|
else if (frame.kind === "point") {
|
|
7609
7698
|
const l = text.lines[0];
|
|
7610
|
-
bounds = { x: frame.x, y: frame.y - (_nullishCoalesce(_optionalChain([l, 'optionalAccess',
|
|
7699
|
+
bounds = { x: frame.x, y: frame.y - (_nullishCoalesce(_optionalChain([l, 'optionalAccess', _252 => _252.ascent]), () => ( 0))), width: 0, height: (_nullishCoalesce(_optionalChain([l, 'optionalAccess', _253 => _253.ascent]), () => ( 0))) + (_nullishCoalesce(_optionalChain([l, 'optionalAccess', _254 => _254.descent]), () => ( 0))) };
|
|
7611
7700
|
}
|
|
7612
7701
|
}
|
|
7613
7702
|
return { shaper: shaper.id, glyphs, fragments, lines, origin, text, bounds, overflow, missingFonts: text.missingFonts };
|
|
@@ -7728,7 +7817,7 @@ function vectorTextCaret(node, index) {
|
|
|
7728
7817
|
const t = { x: Math.cos(r), y: Math.sin(r) };
|
|
7729
7818
|
const n2 = { x: -t.y, y: t.x };
|
|
7730
7819
|
const o = { x: g2.x + t.x * u, y: g2.y + t.y * u };
|
|
7731
|
-
return { top: { x: o.x - n2.x * g2.ascent, y: o.y - n2.y * g2.ascent }, bottom: { x: o.x + n2.x * g2.descent, y: o.y + n2.y * g2.descent }, line: _nullishCoalesce(_optionalChain([layout, 'access',
|
|
7820
|
+
return { top: { x: o.x - n2.x * g2.ascent, y: o.y - n2.y * g2.ascent }, bottom: { x: o.x + n2.x * g2.descent, y: o.y + n2.y * g2.descent }, line: _nullishCoalesce(_optionalChain([layout, 'access', _255 => _255.fragments, 'access', _256 => _256[g2.fragment], 'optionalAccess', _257 => _257.line]), () => ( 0)) };
|
|
7732
7821
|
};
|
|
7733
7822
|
if (node.frame.kind !== "path") {
|
|
7734
7823
|
const c = caretAt(layout.text, index);
|
|
@@ -7868,7 +7957,7 @@ function sanitizeVectorTextFrame(value, path = "frame") {
|
|
|
7868
7957
|
return { kind: "area", x: num2(f.x, `${path}.x`, -1e7, 1e7), y: num2(f.y, `${path}.y`, -1e7, 1e7), width: num2(f.width, `${path}.width`, 0, 1e7), height: num2(f.height, `${path}.height`, 0, 1e7) };
|
|
7869
7958
|
if (f.kind === "path") {
|
|
7870
7959
|
const sp = f.path;
|
|
7871
|
-
if (!sp || !Array.isArray(sp.anchors) || sp.anchors.length < 2 || !sp.anchors.every((a) => isNum(_optionalChain([a, 'optionalAccess',
|
|
7960
|
+
if (!sp || !Array.isArray(sp.anchors) || sp.anchors.length < 2 || !sp.anchors.every((a) => isNum(_optionalChain([a, 'optionalAccess', _258 => _258.x])) && isNum(_optionalChain([a, 'optionalAccess', _259 => _259.y])))) fail(`${path}.path must be a subpath with at least two anchors.`);
|
|
7872
7961
|
const out = { kind: "path", path: { closed: !!sp.closed, anchors: sp.anchors.map((a) => ({ ...a })) } };
|
|
7873
7962
|
if (f.start !== void 0 && f.start !== 0) out.start = num2(f.start, `${path}.start`, 0, 1e7);
|
|
7874
7963
|
if (f.end !== void 0 && f.end !== 0) out.end = num2(f.end, `${path}.end`, 0, 1e7);
|
|
@@ -7886,7 +7975,7 @@ function sanitizeVectorTextFrame(value, path = "frame") {
|
|
|
7886
7975
|
return fail(`${path}.kind must be point, area or path, got ${JSON.stringify(f.kind)}.`);
|
|
7887
7976
|
}
|
|
7888
7977
|
function normalizeVectorTextRuns(text, runs) {
|
|
7889
|
-
if (!_optionalChain([runs, 'optionalAccess',
|
|
7978
|
+
if (!_optionalChain([runs, 'optionalAccess', _260 => _260.length])) return null;
|
|
7890
7979
|
const cleaned = fitVectorTextRuns(
|
|
7891
7980
|
runs.map((r) => ({ length: r.length, style: stripUndefined(r.style) })),
|
|
7892
7981
|
text.length
|
|
@@ -7926,7 +8015,7 @@ function replaceVectorText(node, start, end, insert) {
|
|
|
7926
8015
|
const clean2 = insert.replace(/\r\n?/g, "\n");
|
|
7927
8016
|
const text = node.text.slice(0, start) + clean2 + node.text.slice(end);
|
|
7928
8017
|
let runs = null;
|
|
7929
|
-
if (_optionalChain([node, 'access',
|
|
8018
|
+
if (_optionalChain([node, 'access', _261 => _261.runs, 'optionalAccess', _262 => _262.length])) {
|
|
7930
8019
|
const fitted = fitVectorTextRuns(node.runs, node.text.length);
|
|
7931
8020
|
const style = styleAt(fitted, start > 0 ? start - 1 : start, {});
|
|
7932
8021
|
runs = normalizeVectorTextRuns(text, spliceRuns(fitted, start, end, clean2.length, style));
|
|
@@ -7942,7 +8031,7 @@ function styleVectorText(node, start, end, patch) {
|
|
|
7942
8031
|
if (whole) {
|
|
7943
8032
|
let next2 = { ...node, font: patchVectorCharacterStyle(node.font, fields, "style") };
|
|
7944
8033
|
const keys = Object.keys(fields).filter((k) => fields[k] !== void 0);
|
|
7945
|
-
if (_optionalChain([next2, 'access',
|
|
8034
|
+
if (_optionalChain([next2, 'access', _263 => _263.runs, 'optionalAccess', _264 => _264.length]) && (keys.length || fill !== void 0)) {
|
|
7946
8035
|
const runs2 = normalizeVectorTextRuns(
|
|
7947
8036
|
next2.text,
|
|
7948
8037
|
next2.runs.map((r) => {
|
|
@@ -7987,7 +8076,7 @@ function bakeVectorTextGeometry(node, m) {
|
|
|
7987
8076
|
...s.baselineShift !== void 0 ? { baselineShift: s.baselineShift * k } : {}
|
|
7988
8077
|
});
|
|
7989
8078
|
const font = scaleStyle(node.font);
|
|
7990
|
-
const runs = _optionalChain([node, 'access',
|
|
8079
|
+
const runs = _optionalChain([node, 'access', _265 => _265.runs, 'optionalAccess', _266 => _266.map, 'call', _267 => _267((r) => ({ length: r.length, style: scaleStyle(r.style) }))]);
|
|
7991
8080
|
const p = node.paragraph;
|
|
7992
8081
|
const paragraph = p ? {
|
|
7993
8082
|
...p,
|
|
@@ -8276,7 +8365,7 @@ function vectorInstanceGroup(node, bake) {
|
|
|
8276
8365
|
const m = _nullishCoalesce(node.transform, () => ( [1, 0, 0, 1, 0, 0]));
|
|
8277
8366
|
const { rigid, residual } = decomposeRigid(m);
|
|
8278
8367
|
const k = Math.sqrt(Math.abs(residual[0] * residual[3] - residual[1] * residual[2]));
|
|
8279
|
-
const hidden = new Set(_nullishCoalesce(_optionalChain([node, 'access',
|
|
8368
|
+
const hidden = new Set(_nullishCoalesce(_optionalChain([node, 'access', _268 => _268.overrides, 'optionalAccess', _269 => _269.hidden]), () => ( [])));
|
|
8280
8369
|
const keep = (list) => list.filter((n) => !hidden.has(n.id)).map((n) => n.type === "group" ? { ...n, children: keep(n.children) } : n);
|
|
8281
8370
|
let children = prefixVectorIds(keep(_nullishCoalesce(node.art, () => ( []))), node.id);
|
|
8282
8371
|
if (!isIdentityMatrix(residual)) children = children.map((c) => bake(c, residual));
|
|
@@ -8289,8 +8378,8 @@ function vectorInstanceGroup(node, bake) {
|
|
|
8289
8378
|
if (node.locked) group.locked = true;
|
|
8290
8379
|
if (node.opacity !== void 0) group.opacity = node.opacity;
|
|
8291
8380
|
if (node.blendMode) group.blendMode = node.blendMode;
|
|
8292
|
-
if (_optionalChain([node, 'access',
|
|
8293
|
-
if (_optionalChain([node, 'access',
|
|
8381
|
+
if (_optionalChain([node, 'access', _270 => _270.filters, 'optionalAccess', _271 => _271.length])) group.filters = node.filters;
|
|
8382
|
+
if (_optionalChain([node, 'access', _272 => _272.effects, 'optionalAccess', _273 => _273.length])) group.effects = node.effects;
|
|
8294
8383
|
if (node.booleanOperation) group.booleanOperation = node.booleanOperation;
|
|
8295
8384
|
if (node.blendStep) group.blendStep = true;
|
|
8296
8385
|
return group;
|
|
@@ -8543,8 +8632,8 @@ function vectorLensDrawn(node) {
|
|
|
8543
8632
|
if (wire) {
|
|
8544
8633
|
contents.push(shapePath(shape, id, changed, { fill: null, fills: void 0, stroke: wire, strokes: void 0, strokeWidth: 1, strokeAlign: void 0, strokeDasharray: void 0, strokeWidthProfile: void 0, opacity: Math.min(1, Math.max(0, lens.amount / 100)) }));
|
|
8545
8634
|
} else if (recolour) {
|
|
8546
|
-
const fills = _optionalChain([shape, 'access',
|
|
8547
|
-
const strokes = _optionalChain([shape, 'access',
|
|
8635
|
+
const fills = _optionalChain([shape, 'access', _274 => _274.source, 'access', _275 => _275.fills, 'optionalAccess', _276 => _276.map, 'call', _277 => _277((l) => ({ ...l, paint: _nullishCoalesce(mapVectorPaintColors(l.paint, recolour), () => ( null)) }))]);
|
|
8636
|
+
const strokes = _optionalChain([shape, 'access', _278 => _278.source, 'access', _279 => _279.strokes, 'optionalAccess', _280 => _280.map, 'call', _281 => _281((l) => ({ ...l, paint: _nullishCoalesce(mapVectorPaintColors(l.paint, recolour), () => ( null)) }))]);
|
|
8548
8637
|
contents.push(shapePath(shape, id, changed, { fill: _nullishCoalesce(mapVectorPaintColors(shape.source.fill, recolour), () => ( null)), stroke: _nullishCoalesce(mapVectorPaintColors(shape.source.stroke, recolour), () => ( null)), ...fills ? { fills } : {}, ...strokes ? { strokes } : {} }));
|
|
8549
8638
|
} else contents.push(shapePath(shape, id, changed));
|
|
8550
8639
|
}
|
|
@@ -8557,7 +8646,7 @@ function vectorLensDrawn(node) {
|
|
|
8557
8646
|
const { lens: _l, lensView: _v, transform: _t, opacity: _o, effects: _e, blendMode: _bm, filters: _f, ...style } = node;
|
|
8558
8647
|
const fillOpacity = lens.type === "transparency" ? 1 - Math.min(100, Math.max(0, lens.amount)) / 100 : 0;
|
|
8559
8648
|
children.push({ ...style, id: `${node.id}~lens-fill`, stroke: null, strokes: void 0, opacity: fillOpacity });
|
|
8560
|
-
const stroked = (_nullishCoalesce(_optionalChain([node, 'access',
|
|
8649
|
+
const stroked = (_nullishCoalesce(_optionalChain([node, 'access', _282 => _282.strokes, 'optionalAccess', _283 => _283.length]), () => ( 0))) > 0 || node.stroke != null && node.stroke !== "none";
|
|
8561
8650
|
if (stroked) children.push({ ...style, id: `${node.id}~lens-stroke`, fill: null, fills: void 0 });
|
|
8562
8651
|
const out = {
|
|
8563
8652
|
id: node.id,
|
|
@@ -8566,7 +8655,7 @@ function vectorLensDrawn(node) {
|
|
|
8566
8655
|
...node.transform ? { transform: node.transform } : {},
|
|
8567
8656
|
...node.opacity !== void 0 ? { opacity: node.opacity } : {},
|
|
8568
8657
|
...node.blendMode ? { blendMode: node.blendMode } : {},
|
|
8569
|
-
..._optionalChain([node, 'access',
|
|
8658
|
+
..._optionalChain([node, 'access', _284 => _284.filters, 'optionalAccess', _285 => _285.length]) ? { filters: node.filters } : {},
|
|
8570
8659
|
children
|
|
8571
8660
|
};
|
|
8572
8661
|
drawnCache2.set(node, out);
|
|
@@ -9567,7 +9656,7 @@ function normalizeVectorEffectParams(type, params, base) {
|
|
|
9567
9656
|
if (!defaults) return null;
|
|
9568
9657
|
const out = { ...defaults, ..._nullishCoalesce(base, () => ( {})) };
|
|
9569
9658
|
for (const spec of VECTOR_EFFECT_PARAM_SPECS[type]) {
|
|
9570
|
-
const v2 = _optionalChain([params, 'optionalAccess',
|
|
9659
|
+
const v2 = _optionalChain([params, 'optionalAccess', _286 => _286[spec.key]]);
|
|
9571
9660
|
if (v2 === void 0) continue;
|
|
9572
9661
|
if (spec.kind === "number" && typeof v2 === "number" && Number.isFinite(v2)) out[spec.key] = Math.min(_nullishCoalesce(spec.max, () => ( Infinity)), Math.max(_nullishCoalesce(spec.min, () => ( -Infinity)), v2));
|
|
9573
9662
|
else if (spec.kind === "boolean" && typeof v2 === "boolean") out[spec.key] = v2;
|
|
@@ -9579,7 +9668,7 @@ function normalizeVectorEffectParams(type, params, base) {
|
|
|
9579
9668
|
const o = out;
|
|
9580
9669
|
o.rows = Math.round(o.rows);
|
|
9581
9670
|
o.columns = Math.round(o.columns);
|
|
9582
|
-
const given = _optionalChain([params, 'optionalAccess',
|
|
9671
|
+
const given = _optionalChain([params, 'optionalAccess', _287 => _287.mesh]);
|
|
9583
9672
|
let mesh = given !== void 0 ? isValidWarpMesh(given) ? cloneMesh(given) : null : o.mesh;
|
|
9584
9673
|
if (o.style !== "mesh") mesh = null;
|
|
9585
9674
|
if (mesh && given !== void 0) {
|
|
@@ -9596,10 +9685,10 @@ function createVectorEffect(type, id, params) {
|
|
|
9596
9685
|
}
|
|
9597
9686
|
var isEnabled = (e) => e.enabled !== false && !!VECTOR_EFFECT_DEFAULTS[e.type];
|
|
9598
9687
|
function activeVectorEffects(node) {
|
|
9599
|
-
return _nullishCoalesce(_optionalChain([node, 'access',
|
|
9688
|
+
return _nullishCoalesce(_optionalChain([node, 'access', _288 => _288.effects, 'optionalAccess', _289 => _289.filter, 'call', _290 => _290(isEnabled)]), () => ( []));
|
|
9600
9689
|
}
|
|
9601
9690
|
function hasOwnVectorAppearance(node) {
|
|
9602
|
-
return node.type === "text" || node.type === "instance" || node.type === "group" && !!node.liveBoolean || isVectorFrame(node) || isVectorSymmetryGroup(node) || isVectorLens(node) || !!_optionalChain([node, 'access',
|
|
9691
|
+
return node.type === "text" || node.type === "instance" || node.type === "group" && !!node.liveBoolean || isVectorFrame(node) || isVectorSymmetryGroup(node) || isVectorLens(node) || !!_optionalChain([node, 'access', _291 => _291.effects, 'optionalAccess', _292 => _292.some, 'call', _293 => _293(isEnabled)]);
|
|
9603
9692
|
}
|
|
9604
9693
|
var liveCache = /* @__PURE__ */ new WeakMap();
|
|
9605
9694
|
function hasVectorAppearance(node) {
|
|
@@ -9611,7 +9700,7 @@ function hasVectorAppearance(node) {
|
|
|
9611
9700
|
return v2;
|
|
9612
9701
|
}
|
|
9613
9702
|
function isVectorLiveBoolean(node) {
|
|
9614
|
-
return _optionalChain([node, 'optionalAccess',
|
|
9703
|
+
return _optionalChain([node, 'optionalAccess', _294 => _294.type]) === "group" && !!node.liveBoolean;
|
|
9615
9704
|
}
|
|
9616
9705
|
function vectorOperandOperation(group, child) {
|
|
9617
9706
|
return _nullishCoalesce(_nullishCoalesce(child.booleanOperation, () => ( group.liveBoolean)), () => ( "union"));
|
|
@@ -9728,7 +9817,7 @@ var compareOrder = (a, b) => {
|
|
|
9728
9817
|
for (let i = 0; i < n; i++) if (a[i] !== b[i]) return a[i] - b[i];
|
|
9729
9818
|
return a.length - b.length;
|
|
9730
9819
|
};
|
|
9731
|
-
var add3 = (a, b) => ({ x: a.x + (_nullishCoalesce(_optionalChain([b, 'optionalAccess',
|
|
9820
|
+
var add3 = (a, b) => ({ x: a.x + (_nullishCoalesce(_optionalChain([b, 'optionalAccess', _295 => _295.x]), () => ( 0))), y: a.y + (_nullishCoalesce(_optionalChain([b, 'optionalAccess', _296 => _296.y]), () => ( 0))) });
|
|
9732
9821
|
var mapPaths = (shapes, fn) => {
|
|
9733
9822
|
const out = fn(shapes.map((s) => s.path));
|
|
9734
9823
|
return shapes.map((s, i) => ({ ...s, path: _nullishCoalesce(out[i], () => ( [])) }));
|
|
@@ -9756,7 +9845,7 @@ function contourShapes(shapes, c) {
|
|
|
9756
9845
|
const power = 2 ** (Math.min(100, Math.max(-100, c.acceleration)) / 50);
|
|
9757
9846
|
for (let k = 1; k <= n; k++) {
|
|
9758
9847
|
const [path] = offsetPaths([s.path], (outside ? 1 : -1) * step * k, c.join, c.miterLimit, 1, 0);
|
|
9759
|
-
if (!_optionalChain([path, 'optionalAccess',
|
|
9848
|
+
if (!_optionalChain([path, 'optionalAccess', _297 => _297.length])) break;
|
|
9760
9849
|
const t = (k / n) ** power;
|
|
9761
9850
|
const source = { ...s.source, fill: _nullishCoalesce(blendPaint(s.source.fill, c.fillColor, t), () => ( null)), stroke: _nullishCoalesce(blendPaint(s.source.stroke, c.strokeColor, t), () => ( null)), fills: void 0, strokes: void 0 };
|
|
9762
9851
|
out.push({ source, path, opacity: s.opacity, order: [outside ? n - k : k, ...s.order] });
|
|
@@ -9831,8 +9920,8 @@ function bevelShapes(shapes, b) {
|
|
|
9831
9920
|
out.push({ source, path: f.path, opacity: s.opacity, order: [...s.order, 1, k] });
|
|
9832
9921
|
});
|
|
9833
9922
|
const [middle] = offsetPaths([s.path], -b.width, "miter", 4, 1, 0);
|
|
9834
|
-
if (_optionalChain([middle, 'optionalAccess',
|
|
9835
|
-
const hasStroke = _optionalChain([s, 'access',
|
|
9923
|
+
if (_optionalChain([middle, 'optionalAccess', _298 => _298.length])) out.push({ ...s, source: fillOnly, path: middle, order: [...s.order, 2] });
|
|
9924
|
+
const hasStroke = _optionalChain([s, 'access', _299 => _299.source, 'access', _300 => _300.strokes, 'optionalAccess', _301 => _301.length]) || s.source.stroke != null && s.source.stroke !== "none";
|
|
9836
9925
|
if (hasStroke) out.push({ ...s, source: { ...s.source, fill: null, fills: void 0 }, order: [...s.order, 3] });
|
|
9837
9926
|
}
|
|
9838
9927
|
return out;
|
|
@@ -9965,10 +10054,10 @@ function vectorEffectInputBounds(node, effectId) {
|
|
|
9965
10054
|
return paths ? pathsBounds(paths) : null;
|
|
9966
10055
|
}
|
|
9967
10056
|
function vectorNodeEnvelope(node) {
|
|
9968
|
-
return _nullishCoalesce(_optionalChain([node, 'optionalAccess',
|
|
10057
|
+
return _nullishCoalesce(_optionalChain([node, 'optionalAccess', _302 => _302.effects, 'optionalAccess', _303 => _303.find, 'call', _304 => _304((e) => e.type === "envelope" && e.enabled !== false)]), () => ( null));
|
|
9969
10058
|
}
|
|
9970
10059
|
function vectorEnvelopeFrame(node, effectId) {
|
|
9971
|
-
const e = effectId ? _optionalChain([node, 'access',
|
|
10060
|
+
const e = effectId ? _optionalChain([node, 'access', _305 => _305.effects, 'optionalAccess', _306 => _306.find, 'call', _307 => _307((x) => x.id === effectId)]) : vectorNodeEnvelope(node);
|
|
9972
10061
|
if (!e || e.type !== "envelope") return null;
|
|
9973
10062
|
const bounds = vectorEffectInputBounds(node, e.id);
|
|
9974
10063
|
if (!bounds || !(bounds.width > 0 && bounds.height > 0)) return null;
|
|
@@ -10029,7 +10118,7 @@ function placement(node) {
|
|
|
10029
10118
|
...node.blendStep ? { blendStep: true } : {},
|
|
10030
10119
|
...node.booleanOperation ? { booleanOperation: node.booleanOperation } : {},
|
|
10031
10120
|
...node.blendMode ? { blendMode: node.blendMode } : {},
|
|
10032
|
-
..._optionalChain([node, 'access',
|
|
10121
|
+
..._optionalChain([node, 'access', _308 => _308.filters, 'optionalAccess', _309 => _309.length]) ? { filters: node.filters } : {}
|
|
10033
10122
|
};
|
|
10034
10123
|
}
|
|
10035
10124
|
function vectorAppearanceNodes(node) {
|
|
@@ -10161,7 +10250,7 @@ function vectorMasterPages(doc) {
|
|
|
10161
10250
|
function fillTokens(node, page, pages) {
|
|
10162
10251
|
const map = (s) => s.replace(/\{page\}/g, String(page)).replace(/\{pages\}/g, String(pages));
|
|
10163
10252
|
if (!/\{pages?\}/.test(node.text)) return node;
|
|
10164
|
-
if (!_optionalChain([node, 'access',
|
|
10253
|
+
if (!_optionalChain([node, 'access', _310 => _310.runs, 'optionalAccess', _311 => _311.length])) return { ...node, text: map(node.text) };
|
|
10165
10254
|
let at2 = 0;
|
|
10166
10255
|
let text = "";
|
|
10167
10256
|
const runs = [];
|
|
@@ -10184,7 +10273,7 @@ function vectorMasterArt(master, page, number, count) {
|
|
|
10184
10273
|
const f = page.frame;
|
|
10185
10274
|
const key = `${page.id}|${f.x}|${f.y}|${f.width}|${f.height}|${number}|${count}`;
|
|
10186
10275
|
let byKey = artCache.get(master);
|
|
10187
|
-
const hit = _optionalChain([byKey, 'optionalAccess',
|
|
10276
|
+
const hit = _optionalChain([byKey, 'optionalAccess', _312 => _312.get, 'call', _313 => _313(key)]);
|
|
10188
10277
|
if (hit) return hit;
|
|
10189
10278
|
const art = master.children.filter((c) => c.visible !== false).map((c) => {
|
|
10190
10279
|
const box = vectorNodeBounds(c);
|
|
@@ -10229,7 +10318,7 @@ function stripVectorMasterArt(doc) {
|
|
|
10229
10318
|
// src/vector/connectors.ts
|
|
10230
10319
|
var SIDES = ["top", "right", "bottom", "left", "center"];
|
|
10231
10320
|
function isVectorConnector(node) {
|
|
10232
|
-
return _optionalChain([node, 'optionalAccess',
|
|
10321
|
+
return _optionalChain([node, 'optionalAccess', _314 => _314.type]) === "path" && !!node.connector;
|
|
10233
10322
|
}
|
|
10234
10323
|
function vectorConnectionSites(nodes, id) {
|
|
10235
10324
|
const node = findVectorNode(nodes, id);
|
|
@@ -10286,7 +10375,7 @@ function facingSite(sites, toward) {
|
|
|
10286
10375
|
}
|
|
10287
10376
|
function storedEnds(node, world) {
|
|
10288
10377
|
const sp = node.subpaths[0];
|
|
10289
|
-
if (!_optionalChain([sp, 'optionalAccess',
|
|
10378
|
+
if (!_optionalChain([sp, 'optionalAccess', _315 => _315.anchors, 'access', _316 => _316.length])) return null;
|
|
10290
10379
|
const a = sp.anchors[0];
|
|
10291
10380
|
const b = sp.anchors[sp.anchors.length - 1];
|
|
10292
10381
|
return [applyMatrix(world, a), applyMatrix(world, b)];
|
|
@@ -10393,8 +10482,8 @@ function routeVectorConnector(nodes, id) {
|
|
|
10393
10482
|
}));
|
|
10394
10483
|
return {
|
|
10395
10484
|
subpaths: [{ closed: false, anchors: local }],
|
|
10396
|
-
startSide: _nullishCoalesce(_optionalChain([s, 'optionalAccess',
|
|
10397
|
-
endSide: _nullishCoalesce(_optionalChain([e, 'optionalAccess',
|
|
10485
|
+
startSide: _nullishCoalesce(_optionalChain([s, 'optionalAccess', _317 => _317.side]), () => ( null)),
|
|
10486
|
+
endSide: _nullishCoalesce(_optionalChain([e, 'optionalAccess', _318 => _318.side]), () => ( null)),
|
|
10398
10487
|
dropped: { start: !!startGlue && !s, end: !!endGlue && !e }
|
|
10399
10488
|
};
|
|
10400
10489
|
}
|
|
@@ -10406,7 +10495,7 @@ function sameSubpaths(a, b) {
|
|
|
10406
10495
|
const o = b[i];
|
|
10407
10496
|
return sp.closed === o.closed && sp.anchors.length === o.anchors.length && sp.anchors.every((p, k) => {
|
|
10408
10497
|
const q = o.anchors[k];
|
|
10409
|
-
return samePoint(p, q) && samePoint(p.in, q.in) && samePoint(p.out, q.out) && (_nullishCoalesce(_optionalChain([p, 'access',
|
|
10498
|
+
return samePoint(p, q) && samePoint(p.in, q.in) && samePoint(p.out, q.out) && (_nullishCoalesce(_optionalChain([p, 'access', _319 => _319.corner, 'optionalAccess', _320 => _320.radius]), () => ( 0))) === (_nullishCoalesce(_optionalChain([q, 'access', _321 => _321.corner, 'optionalAccess', _322 => _322.radius]), () => ( 0)));
|
|
10410
10499
|
});
|
|
10411
10500
|
});
|
|
10412
10501
|
}
|
|
@@ -10685,7 +10774,7 @@ function applyVectorCornersAttribute(subpaths, value) {
|
|
|
10685
10774
|
for (const item of value.trim().split(/\s+/)) {
|
|
10686
10775
|
const m = /^(\d+)\.(\d+):([\d.eE+-]+)(?::([a-z]+))?$/.exec(item);
|
|
10687
10776
|
if (!m) continue;
|
|
10688
|
-
const a = _optionalChain([subpaths, 'access',
|
|
10777
|
+
const a = _optionalChain([subpaths, 'access', _323 => _323[+m[1]], 'optionalAccess', _324 => _324.anchors, 'access', _325 => _325[+m[2]]]);
|
|
10689
10778
|
const radius = parseFloat(m[3]);
|
|
10690
10779
|
if (!a || !(radius > 0)) continue;
|
|
10691
10780
|
const kind = VECTOR_CORNER_KINDS.includes(m[4]) ? m[4] : void 0;
|
|
@@ -10710,7 +10799,7 @@ function vectorPaintToSvg(paint, gradientId, options = {}) {
|
|
|
10710
10799
|
const area2 = bounds2 ? { x: bounds2.x - reach2, y: bounds2.y - reach2, width: bounds2.width + 2 * reach2, height: bounds2.height + 2 * reach2 } : null;
|
|
10711
10800
|
const key2 = `${gradientId}|${_nullishCoalesce(options.role, () => ( "fill"))}|${_nullishCoalesce(options.precision, () => ( 3))}|${area2 ? [area2.x, area2.y, area2.width, area2.height].join(",") : ""}`;
|
|
10712
10801
|
let byKey2 = paintCache.get(paint);
|
|
10713
|
-
const hit = _optionalChain([byKey2, 'optionalAccess',
|
|
10802
|
+
const hit = _optionalChain([byKey2, 'optionalAccess', _326 => _326.get, 'call', _327 => _327(key2)]);
|
|
10714
10803
|
if (hit) return { value: `url(#${gradientId})`, defs: hit };
|
|
10715
10804
|
const defs2 = vectorShadedSvgDefs(paint, gradientId, { bounds: bounds2, area: area2, precision: _nullishCoalesce(options.precision, () => ( 3)) });
|
|
10716
10805
|
if (!byKey2) paintCache.set(paint, byKey2 = /* @__PURE__ */ new Map());
|
|
@@ -10722,7 +10811,7 @@ function vectorPaintToSvg(paint, gradientId, options = {}) {
|
|
|
10722
10811
|
const precision = _nullishCoalesce(options.precision, () => ( 3));
|
|
10723
10812
|
const key = `${gradientId}|${role}|${precision}`;
|
|
10724
10813
|
const owner = _nullishCoalesce(options.node, () => ( paint));
|
|
10725
|
-
const cached = _optionalChain([paintCache, 'access',
|
|
10814
|
+
const cached = _optionalChain([paintCache, 'access', _328 => _328.get, 'call', _329 => _329(owner), 'optionalAccess', _330 => _330.get, 'call', _331 => _331(key)]);
|
|
10726
10815
|
if (cached && (!options.node || (role === "fill" ? options.node.fill : options.node.stroke) === paint)) return { value: `url(#${gradientId})`, defs: cached };
|
|
10727
10816
|
const node = options.node;
|
|
10728
10817
|
const bounds = node ? vectorPathLocalBounds(node) : null;
|
|
@@ -10776,7 +10865,7 @@ function vectorNodeLocalPaintBounds(node) {
|
|
|
10776
10865
|
}
|
|
10777
10866
|
var filterCache = /* @__PURE__ */ new WeakMap();
|
|
10778
10867
|
function vectorNodeFilterSvg(node, id) {
|
|
10779
|
-
if (!_optionalChain([node, 'access',
|
|
10868
|
+
if (!_optionalChain([node, 'access', _332 => _332.filters, 'optionalAccess', _333 => _333.length])) return null;
|
|
10780
10869
|
const hit = filterCache.get(node);
|
|
10781
10870
|
if (hit && hit.id === id) return hit.filter;
|
|
10782
10871
|
const active = activeVectorFilters(node);
|
|
@@ -10862,7 +10951,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
10862
10951
|
if (node.type === "path" && node.lens) out2 += ` data-vector-lens="${escapeAttr2(JSON.stringify(node.lens))}"`;
|
|
10863
10952
|
const blend = vectorBlendModeCss(node.blendMode);
|
|
10864
10953
|
if (blend) out2 += ` style="mix-blend-mode:${blend}"`;
|
|
10865
|
-
if (_optionalChain([node, 'access',
|
|
10954
|
+
if (_optionalChain([node, 'access', _334 => _334.filters, 'optionalAccess', _335 => _335.length])) {
|
|
10866
10955
|
const filter = vectorNodeFilterSvg(node, `${prefix}filter-${node.id}`);
|
|
10867
10956
|
const data = ` data-vector-filters="${escapeAttr2(JSON.stringify(node.filters))}"`;
|
|
10868
10957
|
if (filter) {
|
|
@@ -10909,7 +10998,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
10909
10998
|
let out2 = ` stroke="${escapeAttr2(strokeValue)}" stroke-width="${num3(width)}"`;
|
|
10910
10999
|
if (node.strokeLinecap && node.strokeLinecap !== "butt") out2 += ` stroke-linecap="${node.strokeLinecap}"`;
|
|
10911
11000
|
if (node.strokeLinejoin && node.strokeLinejoin !== "miter") out2 += ` stroke-linejoin="${node.strokeLinejoin}"`;
|
|
10912
|
-
if (_optionalChain([node, 'access',
|
|
11001
|
+
if (_optionalChain([node, 'access', _336 => _336.strokeDasharray, 'optionalAccess', _337 => _337.length])) out2 += ` stroke-dasharray="${node.strokeDasharray.map(num3).join(" ")}"`;
|
|
10913
11002
|
return out2;
|
|
10914
11003
|
};
|
|
10915
11004
|
const liveCorners = (node) => {
|
|
@@ -10958,7 +11047,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
10958
11047
|
};
|
|
10959
11048
|
const emit2 = (node, depth) => {
|
|
10960
11049
|
if (node.visible === false && !options.includeHidden) return;
|
|
10961
|
-
const wrappers = _nullishCoalesce(_optionalChain([options, 'access',
|
|
11050
|
+
const wrappers = _nullishCoalesce(_optionalChain([options, 'access', _338 => _338.wrap, 'optionalAccess', _339 => _339[node.id]]), () => ( []));
|
|
10962
11051
|
wrappers.forEach((w2, i) => {
|
|
10963
11052
|
let attrs = w2.id !== void 0 ? ` id="${escapeAttr2(w2.id)}"` : "";
|
|
10964
11053
|
if (w2.transform) attrs += ` transform="${escapeAttr2(w2.transform)}"`;
|
|
@@ -10979,7 +11068,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
10979
11068
|
};
|
|
10980
11069
|
const emitMaskGroup = (node, depth) => {
|
|
10981
11070
|
const [source, ...contents] = node.children;
|
|
10982
|
-
const body = _optionalChain([node, 'access',
|
|
11071
|
+
const body = _optionalChain([node, 'access', _340 => _340.effects, 'optionalAccess', _341 => _341.length]) && contents.length ? [{ id: `${node.id}~content`, type: "group", effects: node.effects, children: contents }] : contents;
|
|
10983
11072
|
const settings = { type: node.mask.type, ...node.mask.invert ? { invert: true } : {} };
|
|
10984
11073
|
lines.push(`${indent(depth)}<g${common(node)} data-vector-mask="${escapeAttr2(JSON.stringify(settings))}">`);
|
|
10985
11074
|
const mask = vectorMaskRenderData(node, `${prefix}mask-${node.id}`, `${prefix}mask-filter-${node.id}`, precision);
|
|
@@ -10996,7 +11085,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
10996
11085
|
lines.push(`${indent(depth + 1)}<g data-vector-part="mask-source" display="none">`);
|
|
10997
11086
|
emitNode(source, depth + 2);
|
|
10998
11087
|
lines.push(`${indent(depth + 1)}</g>`);
|
|
10999
|
-
if (_optionalChain([mask, 'optionalAccess',
|
|
11088
|
+
if (_optionalChain([mask, 'optionalAccess', _342 => _342.clip])) {
|
|
11000
11089
|
defs.push(`<clipPath id="${escapeAttr2(mask.id)}">${mask.clip.map((c) => `<path d="${c.d}" clip-rule="${c.clipRule}"/>`).join("")}</clipPath>`);
|
|
11001
11090
|
ref = ` clip-path="url(#${escapeAttr2(mask.id)})"`;
|
|
11002
11091
|
}
|
|
@@ -11008,7 +11097,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
11008
11097
|
};
|
|
11009
11098
|
const emitTextElement = (node, depth, attrs) => {
|
|
11010
11099
|
const geometry = vectorTextGeometryNode(node);
|
|
11011
|
-
const fields = { text: node.text, font: node.font, ..._optionalChain([node, 'access',
|
|
11100
|
+
const fields = { text: node.text, font: node.font, ..._optionalChain([node, 'access', _343 => _343.runs, 'optionalAccess', _344 => _344.length]) ? { runs: node.runs } : {}, ...node.paragraph ? { paragraph: node.paragraph } : {}, frame: node.frame, ...node.orientation ? { orientation: node.orientation } : {}, ..._optionalChain([node, 'access', _345 => _345.effects, 'optionalAccess', _346 => _346.length]) ? { effects: node.effects } : {} };
|
|
11012
11101
|
let data = ` data-vector-text="${escapeAttr2(JSON.stringify(fields))}"`;
|
|
11013
11102
|
if (hasVectorPaintStacks(node)) data += ` data-vector-fills="${escapeAttr2(JSON.stringify(vectorFills(node)))}" data-vector-strokes="${escapeAttr2(JSON.stringify(vectorStrokes(node)))}"`;
|
|
11014
11103
|
else {
|
|
@@ -11050,12 +11139,12 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
11050
11139
|
};
|
|
11051
11140
|
const emitText = (node, depth) => {
|
|
11052
11141
|
const outlines = vectorTextPaths(node).outlines;
|
|
11053
|
-
const effects = !!_optionalChain([node, 'access',
|
|
11142
|
+
const effects = !!_optionalChain([node, 'access', _347 => _347.effects, 'optionalAccess', _348 => _348.some, 'call', _349 => _349((e) => e.enabled !== false)]);
|
|
11054
11143
|
if (!outlines || !effects && options.text !== "outlines") {
|
|
11055
11144
|
emitTextElement(node, depth, common(node));
|
|
11056
11145
|
return;
|
|
11057
11146
|
}
|
|
11058
|
-
lines.push(`${indent(depth)}<g${common(node)} data-vector-live="${escapeAttr2(JSON.stringify({ kind: "text", ..._optionalChain([node, 'access',
|
|
11147
|
+
lines.push(`${indent(depth)}<g${common(node)} data-vector-live="${escapeAttr2(JSON.stringify({ kind: "text", ..._optionalChain([node, 'access', _350 => _350.effects, 'optionalAccess', _351 => _351.length]) ? { effects: node.effects } : {} }))}">`);
|
|
11059
11148
|
lines.push(`${indent(depth + 1)}<g data-vector-part="appearance">`);
|
|
11060
11149
|
for (const shape of vectorAppearanceNodes(node)) emit2(shape, depth + 2);
|
|
11061
11150
|
lines.push(`${indent(depth + 1)}</g>`);
|
|
@@ -11069,7 +11158,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
11069
11158
|
const symbolRef = (symbolId) => {
|
|
11070
11159
|
const hit = symbolIds.get(symbolId);
|
|
11071
11160
|
if (hit) return hit;
|
|
11072
|
-
const sym2 = _optionalChain([doc, 'access',
|
|
11161
|
+
const sym2 = _optionalChain([doc, 'access', _352 => _352.symbols, 'optionalAccess', _353 => _353.find, 'call', _354 => _354((x) => x.id === symbolId)]);
|
|
11073
11162
|
if (!sym2) return null;
|
|
11074
11163
|
const id = `${prefix}symbol-${symbolId}`;
|
|
11075
11164
|
symbolIds.set(symbolId, id);
|
|
@@ -11079,20 +11168,20 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
11079
11168
|
};
|
|
11080
11169
|
const emitInstance = (node, depth) => {
|
|
11081
11170
|
const data = { symbolId: node.symbolId, ...node.scaleStrokes === false ? { scaleStrokes: false } : {}, ...node.overrides ? { overrides: node.overrides } : {} };
|
|
11082
|
-
const exact2 = !node.overrides && node.scaleStrokes !== false && !_optionalChain([node, 'access',
|
|
11171
|
+
const exact2 = !node.overrides && node.scaleStrokes !== false && !_optionalChain([node, 'access', _355 => _355.effects, 'optionalAccess', _356 => _356.length]) && !_optionalChain([node, 'access', _357 => _357.filters, 'optionalAccess', _358 => _358.length]);
|
|
11083
11172
|
const ref = symbolRef(node.symbolId);
|
|
11084
11173
|
if (exact2 && ref) {
|
|
11085
11174
|
lines.push(`${indent(depth)}<use${common(node)} href="#${escapeAttr2(ref)}" data-vector-instance="${escapeAttr2(JSON.stringify(data))}"/>`);
|
|
11086
11175
|
return;
|
|
11087
11176
|
}
|
|
11088
|
-
const full = { ...data, ...node.transform ? { transform: node.transform } : {}, ..._optionalChain([node, 'access',
|
|
11177
|
+
const full = { ...data, ...node.transform ? { transform: node.transform } : {}, ..._optionalChain([node, 'access', _359 => _359.effects, 'optionalAccess', _360 => _360.length]) ? { effects: node.effects } : {} };
|
|
11089
11178
|
lines.push(`${indent(depth)}<g data-vector-instance="${escapeAttr2(JSON.stringify(full))}">`);
|
|
11090
11179
|
emitNode(vectorInstanceDrawn(node), depth + 1);
|
|
11091
11180
|
lines.push(`${indent(depth)}</g>`);
|
|
11092
11181
|
};
|
|
11093
11182
|
const emitFrame = (node, depth) => {
|
|
11094
11183
|
const f = node.frame;
|
|
11095
|
-
const data = { ...f, ..._optionalChain([node, 'access',
|
|
11184
|
+
const data = { ...f, ..._optionalChain([node, 'access', _361 => _361.effects, 'optionalAccess', _362 => _362.length]) ? { effects: node.effects } : {} };
|
|
11096
11185
|
lines.push(`${indent(depth)}<g${common(node)} data-vector-frame="${escapeAttr2(JSON.stringify(data))}">`);
|
|
11097
11186
|
const rect = vectorFrameRectPath(f);
|
|
11098
11187
|
if (f.fill !== void 0 && f.fill !== null && f.fill !== "none") {
|
|
@@ -11107,7 +11196,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
11107
11196
|
ref = ` clip-path="url(#${escapeAttr2(id)})"`;
|
|
11108
11197
|
}
|
|
11109
11198
|
lines.push(`${indent(depth + 1)}<g data-vector-part="frame-contents"${ref}>`);
|
|
11110
|
-
if (_optionalChain([node, 'access',
|
|
11199
|
+
if (_optionalChain([node, 'access', _363 => _363.masterArt, 'optionalAccess', _364 => _364.length])) {
|
|
11111
11200
|
lines.push(`${indent(depth + 2)}<g data-vector-part="frame-master">`);
|
|
11112
11201
|
for (const child of node.masterArt) emit2(child, depth + 3);
|
|
11113
11202
|
lines.push(`${indent(depth + 2)}</g>`);
|
|
@@ -11136,7 +11225,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
11136
11225
|
if (hasOwnVectorAppearance(node)) {
|
|
11137
11226
|
const live2 = {
|
|
11138
11227
|
kind: node.type,
|
|
11139
|
-
..._optionalChain([node, 'access',
|
|
11228
|
+
..._optionalChain([node, 'access', _365 => _365.effects, 'optionalAccess', _366 => _366.length]) ? { effects: node.effects } : {},
|
|
11140
11229
|
...node.type === "group" && node.liveBoolean ? { liveBoolean: node.liveBoolean } : {},
|
|
11141
11230
|
...node.type === "group" && node.symmetry ? { symmetry: node.symmetry } : {}
|
|
11142
11231
|
};
|
|
@@ -11187,7 +11276,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
11187
11276
|
data += ` data-vector-width-profile="${widthProfileToAttribute(profile)}"`;
|
|
11188
11277
|
if (node.strokeLinecap && node.strokeLinecap !== "butt") data += ` data-vector-stroke-linecap="${node.strokeLinecap}"`;
|
|
11189
11278
|
if (node.strokeLinejoin && node.strokeLinejoin !== "miter") data += ` data-vector-stroke-linejoin="${node.strokeLinejoin}"`;
|
|
11190
|
-
if (_optionalChain([node, 'access',
|
|
11279
|
+
if (_optionalChain([node, 'access', _367 => _367.strokeDasharray, 'optionalAccess', _368 => _368.length])) data += ` data-vector-stroke-dasharray="${node.strokeDasharray.map(num3).join(" ")}"`;
|
|
11191
11280
|
}
|
|
11192
11281
|
lines.push(`${indent(depth)}<g${common(node)}${data}>`);
|
|
11193
11282
|
lines.push(`${indent(depth + 1)}<path data-vector-part="fill" d="${d}"${fillAttrs}${live}/>`);
|
|
@@ -11368,7 +11457,7 @@ function readStyle(el, parent, cssRules) {
|
|
|
11368
11457
|
const { mixBlendMode: _m, filter: _f, ...inherited } = parent;
|
|
11369
11458
|
const out = { ...inherited };
|
|
11370
11459
|
for (const [attr, key] of Object.entries(STYLE_KEYS)) if (el.attrs[attr] !== void 0) out[key] = el.attrs[attr].trim();
|
|
11371
|
-
if (_optionalChain([cssRules, 'optionalAccess',
|
|
11460
|
+
if (_optionalChain([cssRules, 'optionalAccess', _369 => _369.length])) {
|
|
11372
11461
|
for (const rule of cssRules) {
|
|
11373
11462
|
if (matchesSelector(el, rule.selector)) {
|
|
11374
11463
|
for (const [prop, val] of Object.entries(rule.properties)) {
|
|
@@ -11424,7 +11513,7 @@ function attrOrStyle(el, name) {
|
|
|
11424
11513
|
return el.attrs[name];
|
|
11425
11514
|
}
|
|
11426
11515
|
function urlId(value) {
|
|
11427
|
-
return _nullishCoalesce(_optionalChain([/^url\(\s*['"]?#([^'")\s]+)['"]?\s*\)/, 'access',
|
|
11516
|
+
return _nullishCoalesce(_optionalChain([/^url\(\s*['"]?#([^'")\s]+)['"]?\s*\)/, 'access', _370 => _370.exec, 'call', _371 => _371((_nullishCoalesce(value, () => ( ""))).trim()), 'optionalAccess', _372 => _372[1]]), () => ( null));
|
|
11428
11517
|
}
|
|
11429
11518
|
function clipRulesAsFillRules(el) {
|
|
11430
11519
|
const attrs = { ...el.attrs };
|
|
@@ -11489,9 +11578,9 @@ function resolveGradient(id, raw) {
|
|
|
11489
11578
|
for (let el = first; el && !chain.includes(el) && chain.length < 32; ) {
|
|
11490
11579
|
chain.push(el);
|
|
11491
11580
|
const href = _nullishCoalesce(el.attrs.href, () => ( el.attrs["xlink:href"]));
|
|
11492
|
-
el = _optionalChain([href, 'optionalAccess',
|
|
11581
|
+
el = _optionalChain([href, 'optionalAccess', _373 => _373.startsWith, 'call', _374 => _374("#")]) ? raw.get(href.slice(1)) : void 0;
|
|
11493
11582
|
}
|
|
11494
|
-
const attr = (name) => _optionalChain([chain, 'access',
|
|
11583
|
+
const attr = (name) => _optionalChain([chain, 'access', _375 => _375.find, 'call', _376 => _376((el) => el.attrs[name] !== void 0), 'optionalAccess', _377 => _377.attrs, 'access', _378 => _378[name]]);
|
|
11495
11584
|
const stops = _nullishCoalesce(chain.map(readStops).find((s) => s.length), () => ( []));
|
|
11496
11585
|
if (!stops.length) return null;
|
|
11497
11586
|
const user = attr("gradientUnits") === "userSpaceOnUse";
|
|
@@ -11663,7 +11752,7 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11663
11752
|
const stackedPath = (g, _style, m, meta) => {
|
|
11664
11753
|
const fillEl = g.children.find((c) => c.name === "path" && c.attrs["data-vector-part"] === "fill");
|
|
11665
11754
|
const subpaths = fillEl ? shapeOf(fillEl) : null;
|
|
11666
|
-
if (!_optionalChain([subpaths, 'optionalAccess',
|
|
11755
|
+
if (!_optionalChain([subpaths, 'optionalAccess', _379 => _379.length])) return null;
|
|
11667
11756
|
const parse = (v2) => {
|
|
11668
11757
|
try {
|
|
11669
11758
|
return v2 ? JSON.parse(v2) : [];
|
|
@@ -11682,7 +11771,7 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11682
11771
|
const key = (n) => JSON.stringify([n.subpaths, _nullishCoalesce(n.transform, () => ( null)), _nullishCoalesce(n.opacity, () => ( 1)), n.visible !== false, _nullishCoalesce(n.filters, () => ( null)), _nullishCoalesce(n.blendMode, () => ( "normal")), _nullishCoalesce(n.fillRule, () => ( "nonzero")), _nullishCoalesce(n.booleanOperation, () => ( null))]);
|
|
11683
11772
|
for (const n of nodes2) {
|
|
11684
11773
|
const prev = out[out.length - 1];
|
|
11685
|
-
if (_optionalChain([prev, 'optionalAccess',
|
|
11774
|
+
if (_optionalChain([prev, 'optionalAccess', _380 => _380.type]) === "path" && n.type === "path" && key(prev) === key(n)) {
|
|
11686
11775
|
const fills = vectorFills(n);
|
|
11687
11776
|
const strokesBefore = vectorStrokes(prev);
|
|
11688
11777
|
if (!(fills.length && strokesBefore.length)) {
|
|
@@ -11700,7 +11789,7 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11700
11789
|
const part = (name) => g.children.find((c) => c.name === "path" && c.attrs["data-vector-part"] === name);
|
|
11701
11790
|
const fillEl = part("fill");
|
|
11702
11791
|
const subpaths = fillEl ? shapeOf(fillEl) : null;
|
|
11703
|
-
if (!fillEl || !_optionalChain([subpaths, 'optionalAccess',
|
|
11792
|
+
if (!fillEl || !_optionalChain([subpaths, 'optionalAccess', _381 => _381.length])) return null;
|
|
11704
11793
|
const a = g.attrs;
|
|
11705
11794
|
const fs = readStyle(fillEl, style, styleRules);
|
|
11706
11795
|
const strokeEl = part("stroke");
|
|
@@ -11737,7 +11826,7 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11737
11826
|
...profile.length ? { strokeWidthProfile: profile } : {},
|
|
11738
11827
|
...keptCap ? { strokeLinecap: keptCap } : {},
|
|
11739
11828
|
...keptJoin ? { strokeLinejoin: keptJoin } : {},
|
|
11740
|
-
..._optionalChain([keptDash, 'optionalAccess',
|
|
11829
|
+
..._optionalChain([keptDash, 'optionalAccess', _382 => _382.length]) ? { strokeDasharray: keptDash } : {}
|
|
11741
11830
|
};
|
|
11742
11831
|
return placed(node, m);
|
|
11743
11832
|
};
|
|
@@ -11802,8 +11891,8 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11802
11891
|
} else {
|
|
11803
11892
|
const fill = json2(g.attrs["data-vector-fill"]);
|
|
11804
11893
|
const stroke = json2(g.attrs["data-vector-stroke"]);
|
|
11805
|
-
node.fill = fill == null ? null : _nullishCoalesce(_optionalChain([sanitizeVectorFills, 'call',
|
|
11806
|
-
node.stroke = stroke == null ? null : _nullishCoalesce(_optionalChain([sanitizeVectorFills, 'call',
|
|
11894
|
+
node.fill = fill == null ? null : _nullishCoalesce(_optionalChain([sanitizeVectorFills, 'call', _383 => _383([{ paint: fill }]), 'access', _384 => _384[0], 'optionalAccess', _385 => _385.paint]), () => ( null));
|
|
11895
|
+
node.stroke = stroke == null ? null : _nullishCoalesce(_optionalChain([sanitizeVectorFills, 'call', _386 => _386([{ paint: stroke }]), 'access', _387 => _387[0], 'optionalAccess', _388 => _388.paint]), () => ( null));
|
|
11807
11896
|
const settings = json2(g.attrs["data-vector-stroke-settings"]);
|
|
11808
11897
|
if (settings && typeof settings === "object") {
|
|
11809
11898
|
const strokes = sanitizeVectorStrokes([{ paint: _nullishCoalesce(node.stroke, () => ( "#000")), ...settings }]);
|
|
@@ -11839,8 +11928,8 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11839
11928
|
const anchor = attrOrStyle(el, "text-anchor");
|
|
11840
11929
|
const first0 = (v2) => _nullishCoalesce(numberList(v2)[0], () => ( 0));
|
|
11841
11930
|
const tspan = el.children.find((c) => c.name === "tspan");
|
|
11842
|
-
const x = el.attrs.x !== void 0 ? first0(el.attrs.x) : first0(_optionalChain([tspan, 'optionalAccess',
|
|
11843
|
-
const y = el.attrs.y !== void 0 ? first0(el.attrs.y) : first0(_optionalChain([tspan, 'optionalAccess',
|
|
11931
|
+
const x = el.attrs.x !== void 0 ? first0(el.attrs.x) : first0(_optionalChain([tspan, 'optionalAccess', _389 => _389.attrs, 'access', _390 => _390.x]));
|
|
11932
|
+
const y = el.attrs.y !== void 0 ? first0(el.attrs.y) : first0(_optionalChain([tspan, 'optionalAccess', _391 => _391.attrs, 'access', _392 => _392.y]));
|
|
11844
11933
|
const fillValue = _nullishCoalesce(attrOrStyle(el, "fill"), () => ( style.fill));
|
|
11845
11934
|
let node = {
|
|
11846
11935
|
id: idFor(el),
|
|
@@ -11871,12 +11960,12 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11871
11960
|
if (symbolOfElement.has(el)) return symbolOfElement.get(el);
|
|
11872
11961
|
symbolOfElement.set(el, null);
|
|
11873
11962
|
const own = json2(el.attrs["data-vector-symbol"]);
|
|
11874
|
-
let id = typeof _optionalChain([own, 'optionalAccess',
|
|
11963
|
+
let id = typeof _optionalChain([own, 'optionalAccess', _393 => _393.id]) === "string" && own.id ? own.id : _nullishCoalesce(el.attrs.id, () => ( createId()));
|
|
11875
11964
|
while (usedSymbolIds.has(id)) id = `${id}-${usedSymbolIds.size}`;
|
|
11876
11965
|
usedSymbolIds.add(id);
|
|
11877
11966
|
const style = readStyle(el, rootStyle, styleRules);
|
|
11878
11967
|
const nodes2 = el.name === "symbol" ? visit2(el, style, IDENTITY_MATRIX) : visitOne({ ...el, attrs: { ...el.attrs, transform: "" } }, rootStyle, parseSvgTransform(el.attrs.transform));
|
|
11879
|
-
symbols.push({ id, name: typeof _optionalChain([own, 'optionalAccess',
|
|
11968
|
+
symbols.push({ id, name: typeof _optionalChain([own, 'optionalAccess', _394 => _394.name]) === "string" && own.name ? own.name : _nullishCoalesce(el.attrs.id, () => ( "Symbol")), nodes: nodes2 });
|
|
11880
11969
|
symbolOfElement.set(el, id);
|
|
11881
11970
|
return id;
|
|
11882
11971
|
};
|
|
@@ -11888,13 +11977,13 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11888
11977
|
if (!symbolId) return null;
|
|
11889
11978
|
const own = json2(el.attrs["data-vector-instance"]);
|
|
11890
11979
|
const place3 = multiplyMatrices(translateMatrix(length(el.attrs.x), length(el.attrs.y)), m);
|
|
11891
|
-
const node = { id: idFor(el), type: "instance", ...meta, symbolId, ..._optionalChain([own, 'optionalAccess',
|
|
11980
|
+
const node = { id: idFor(el), type: "instance", ...meta, symbolId, ..._optionalChain([own, 'optionalAccess', _395 => _395.scaleStrokes]) === false ? { scaleStrokes: false } : {}, ..._optionalChain([own, 'optionalAccess', _396 => _396.overrides]) ? { overrides: own.overrides } : {} };
|
|
11892
11981
|
return isIdentityMatrix(place3) ? node : { ...node, transform: place3 };
|
|
11893
11982
|
};
|
|
11894
11983
|
const ownInstance = (g, m, meta) => {
|
|
11895
11984
|
const raw = json2(g.attrs["data-vector-instance"]);
|
|
11896
11985
|
if (!raw || typeof raw.symbolId !== "string") return null;
|
|
11897
|
-
const sym2 = [...byId.values()].find((e) => e.name === "symbol" && _optionalChain([json2, 'call',
|
|
11986
|
+
const sym2 = [...byId.values()].find((e) => e.name === "symbol" && _optionalChain([json2, 'call', _397 => _397(e.attrs["data-vector-symbol"]), 'optionalAccess', _398 => _398.id]) === raw.symbolId);
|
|
11898
11987
|
const symbolId = sym2 ? symbolFor(sym2) : raw.symbolId;
|
|
11899
11988
|
if (!symbolId) return null;
|
|
11900
11989
|
const t = Array.isArray(raw.transform) && raw.transform.length === 6 && raw.transform.every(Number.isFinite) ? raw.transform : IDENTITY_MATRIX;
|
|
@@ -11902,7 +11991,7 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11902
11991
|
const drawn = g.children.find((c) => c.name === "g");
|
|
11903
11992
|
const effects = sanitizeVectorEffects(raw.effects);
|
|
11904
11993
|
const node = {
|
|
11905
|
-
id: _nullishCoalesce(_optionalChain([drawn, 'optionalAccess',
|
|
11994
|
+
id: _nullishCoalesce(_optionalChain([drawn, 'optionalAccess', _399 => _399.attrs, 'access', _400 => _400.id]), () => ( idFor(g))),
|
|
11906
11995
|
type: "instance",
|
|
11907
11996
|
...meta,
|
|
11908
11997
|
symbolId,
|
|
@@ -11959,12 +12048,12 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11959
12048
|
const masked = (el, nodes2, m) => {
|
|
11960
12049
|
let out = nodes2;
|
|
11961
12050
|
const clipEl = rawMasks.get(_nullishCoalesce(urlId(attrOrStyle(el, "clip-path")), () => ( "")));
|
|
11962
|
-
if (_optionalChain([clipEl, 'optionalAccess',
|
|
12051
|
+
if (_optionalChain([clipEl, 'optionalAccess', _401 => _401.name]) === "clipPath") {
|
|
11963
12052
|
const source = maskNode(clipEl, m, out, clipEl.attrs.clipPathUnits);
|
|
11964
12053
|
if (source) out = [{ id: idFor({ name: "g", attrs: {}, children: [] }), type: "group", name: "Clip Group", mask: { type: "clip" }, children: [source, ...out] }];
|
|
11965
12054
|
}
|
|
11966
12055
|
const maskEl = rawMasks.get(_nullishCoalesce(urlId(attrOrStyle(el, "mask")), () => ( "")));
|
|
11967
|
-
if (_optionalChain([maskEl, 'optionalAccess',
|
|
12056
|
+
if (_optionalChain([maskEl, 'optionalAccess', _402 => _402.name]) === "mask") {
|
|
11968
12057
|
const source = maskNode(maskEl, m, out, maskEl.attrs.maskContentUnits);
|
|
11969
12058
|
const type = attrOrStyle(maskEl, "mask-type") === "alpha" ? "alpha" : "luminance";
|
|
11970
12059
|
if (source) out = [{ id: idFor({ name: "g", attrs: {}, children: [] }), type: "group", name: "Opacity Mask", mask: { type }, children: [source, ...out] }];
|
|
@@ -11986,19 +12075,19 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
11986
12075
|
let sourceEl = part("mask-source");
|
|
11987
12076
|
if (!sourceEl) {
|
|
11988
12077
|
const el = rawMasks.get(_nullishCoalesce(urlId(maskedEl.attrs.mask), () => ( "")));
|
|
11989
|
-
const invert2 = _optionalChain([el, 'optionalAccess',
|
|
12078
|
+
const invert2 = _optionalChain([el, 'optionalAccess', _403 => _403.children, 'access', _404 => _404.find, 'call', _405 => _405((c) => c.name === "g" && c.attrs["data-vector-part"] === "mask-invert")]);
|
|
11990
12079
|
sourceEl = _nullishCoalesce(invert2, () => ( el));
|
|
11991
12080
|
}
|
|
11992
12081
|
const source = sourceEl ? visit2(sourceEl, style, m)[0] : void 0;
|
|
11993
12082
|
let contents = visit2(maskedEl, style, m);
|
|
11994
12083
|
let effects;
|
|
11995
12084
|
const wrapper = contents.length === 1 && contents[0].type === "group" && contents[0].id === `${id}~content` ? contents[0] : null;
|
|
11996
|
-
if (_optionalChain([wrapper, 'optionalAccess',
|
|
12085
|
+
if (_optionalChain([wrapper, 'optionalAccess', _406 => _406.type]) === "group") {
|
|
11997
12086
|
effects = _nullishCoalesce(wrapper.effects, () => ( void 0));
|
|
11998
12087
|
contents = wrapper.children;
|
|
11999
12088
|
}
|
|
12000
12089
|
if (!source) return contents.length ? { id, type: "group", ...meta, children: contents } : null;
|
|
12001
|
-
return { id, type: "group", ...meta, mask, ..._optionalChain([effects, 'optionalAccess',
|
|
12090
|
+
return { id, type: "group", ...meta, mask, ..._optionalChain([effects, 'optionalAccess', _407 => _407.length]) ? { effects } : {}, children: [source, ...contents] };
|
|
12002
12091
|
};
|
|
12003
12092
|
const frameGroup = (g, style, m, meta) => {
|
|
12004
12093
|
const raw = parseJson(g.attrs["data-vector-frame"]);
|
|
@@ -12010,7 +12099,7 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
12010
12099
|
const { rigid, residual } = decomposeRigid(m);
|
|
12011
12100
|
const r = _chunkGF2RBSDMcjs.bezierPathBounds.call(void 0, _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, subpathsToBezier(vectorFrameRectPath(frame)), residual));
|
|
12012
12101
|
const back = invertMatrix(rigid);
|
|
12013
|
-
const effects = sanitizeVectorEffects(_optionalChain([raw, 'optionalAccess',
|
|
12102
|
+
const effects = sanitizeVectorEffects(_optionalChain([raw, 'optionalAccess', _408 => _408.effects]));
|
|
12014
12103
|
return {
|
|
12015
12104
|
id,
|
|
12016
12105
|
type: "group",
|
|
@@ -12482,13 +12571,13 @@ function hitTestVectorNode(node, p, tolerance = 0, parent = IDENTITY_MATRIX, opt
|
|
|
12482
12571
|
}
|
|
12483
12572
|
if (isVectorMaskGroup(node)) {
|
|
12484
12573
|
const m = multiplyMatrices(nodeMatrix(node), parent);
|
|
12485
|
-
const entered = !!_optionalChain([options, 'access',
|
|
12574
|
+
const entered = !!_optionalChain([options, 'access', _409 => _409.entered, 'optionalAccess', _410 => _410.has, 'call', _411 => _411(node.id)]);
|
|
12486
12575
|
if (!entered && isVectorMaskActive(node) && !vectorMaskContains(node, applyMatrix(invertMatrix(m), p), tolerance)) return false;
|
|
12487
12576
|
const shown = !entered && hasOwnVectorAppearance(node) ? expandVectorAppearance(node).children : node.children;
|
|
12488
12577
|
for (let i = shown.length - 1; i >= 1; i--) if (hitTestVectorNode(shown[i], p, tolerance, m, options)) return true;
|
|
12489
12578
|
return entered && hitTestVectorMaskSource(node, p, tolerance, m, options);
|
|
12490
12579
|
}
|
|
12491
|
-
if (!(node.type === "group" && (!hasOwnVectorAppearance(node) || _optionalChain([options, 'access',
|
|
12580
|
+
if (!(node.type === "group" && (!hasOwnVectorAppearance(node) || _optionalChain([options, 'access', _412 => _412.entered, 'optionalAccess', _413 => _413.has, 'call', _414 => _414(node.id)])))) node = expandVectorAppearance(node);
|
|
12492
12581
|
if (node.type === "group") {
|
|
12493
12582
|
const m = multiplyMatrices(nodeMatrix(node), parent);
|
|
12494
12583
|
return node.children.some((c) => hitTestVectorNode(c, p, tolerance, m, options));
|
|
@@ -12500,7 +12589,7 @@ function hitTestVectorNode(node, p, tolerance = 0, parent = IDENTITY_MATRIX, opt
|
|
|
12500
12589
|
function hitTestVectorMaskSource(group, p, tolerance, m, options) {
|
|
12501
12590
|
const source = group.children[0];
|
|
12502
12591
|
if (source.visible === false) return false;
|
|
12503
|
-
if (_optionalChain([group, 'access',
|
|
12592
|
+
if (_optionalChain([group, 'access', _415 => _415.mask, 'optionalAccess', _416 => _416.type]) !== "clip") return hitTestVectorNode(source, p, tolerance, m, options);
|
|
12504
12593
|
const paths = collectPathNodes(source).filter((n) => n.visible !== false);
|
|
12505
12594
|
const pt2 = [p.x, p.y];
|
|
12506
12595
|
return paths.some((n) => {
|
|
@@ -12549,24 +12638,24 @@ function mapAnchor(a, m) {
|
|
|
12549
12638
|
}
|
|
12550
12639
|
function bakeIntoGeometry(node, m) {
|
|
12551
12640
|
if (isIdentityMatrix(m)) return node;
|
|
12552
|
-
if (_optionalChain([node, 'access',
|
|
12641
|
+
if (_optionalChain([node, 'access', _417 => _417.effects, 'optionalAccess', _418 => _418.length])) node = { ...node, effects: transformVectorEffects(node.effects, m, node) };
|
|
12553
12642
|
if (isVectorFrame(node)) return bakeFrame(node, m);
|
|
12554
12643
|
if (node.type === "group") {
|
|
12555
12644
|
const group = node;
|
|
12556
12645
|
const children = group.children.map((c) => transformVectorNode(c, m));
|
|
12557
12646
|
const sym2 = group.symmetry ? { symmetry: transformVectorSymmetry(group.symmetry, m) } : {};
|
|
12558
|
-
const spine = _optionalChain([group, 'access',
|
|
12647
|
+
const spine = _optionalChain([group, 'access', _419 => _419.blend, 'optionalAccess', _420 => _420.spine]);
|
|
12559
12648
|
if (!spine) return { ...group, ...sym2, children };
|
|
12560
12649
|
const moved = { closed: spine.closed, anchors: spine.anchors.map((a) => mapAnchor(a, m)) };
|
|
12561
12650
|
return { ...group, children, blend: { ...group.blend, spine: moved } };
|
|
12562
12651
|
}
|
|
12563
12652
|
const path = node.type === "text" ? bakeVectorTextGeometry(node, m) : node;
|
|
12564
12653
|
const flips = m[0] * m[3] - m[1] * m[2] < 0;
|
|
12565
|
-
const mirrored = flips && _optionalChain([path, 'access',
|
|
12654
|
+
const mirrored = flips && _optionalChain([path, 'access', _421 => _421.strokeWidthProfile, 'optionalAccess', _422 => _422.length]);
|
|
12566
12655
|
const layer = (l) => ({
|
|
12567
12656
|
...l,
|
|
12568
12657
|
...isVectorGradient(l.paint) || isVectorShadedPaint(l.paint) ? { paint: transformVectorPaint(l.paint, m) } : {},
|
|
12569
|
-
...flips && _optionalChain([l, 'access',
|
|
12658
|
+
...flips && _optionalChain([l, 'access', _423 => _423.strokeWidthProfile, 'optionalAccess', _424 => _424.length]) ? { strokeWidthProfile: mirrorWidthProfile(l.strokeWidthProfile) } : {}
|
|
12570
12659
|
});
|
|
12571
12660
|
return {
|
|
12572
12661
|
...path,
|
|
@@ -12801,7 +12890,7 @@ function roundSubpaths(subpaths, precision = 3) {
|
|
|
12801
12890
|
|
|
12802
12891
|
// src/vector/symmetry.ts
|
|
12803
12892
|
function isVectorSymmetryGroup(node) {
|
|
12804
|
-
return _optionalChain([node, 'optionalAccess',
|
|
12893
|
+
return _optionalChain([node, 'optionalAccess', _425 => _425.type]) === "group" && !!node.symmetry && !node.blend && !node.liveBoolean && !node.mask && !node.frame;
|
|
12805
12894
|
}
|
|
12806
12895
|
var rad = (deg) => deg * Math.PI / 180;
|
|
12807
12896
|
var exact = (v2) => Math.abs(v2) < 1e-12 ? 0 : v2;
|
|
@@ -13444,4 +13533,8 @@ function transformVectorSymmetry(s, m) {
|
|
|
13444
13533
|
|
|
13445
13534
|
|
|
13446
13535
|
|
|
13447
|
-
exports.isVectorMeshGradient = isVectorMeshGradient; exports.isVectorFreeformGradient = isVectorFreeformGradient; exports.isVectorShadedPaint = isVectorShadedPaint; exports.vectorRgbaToCss = vectorRgbaToCss; exports.VECTOR_MESH_MAX = VECTOR_MESH_MAX; exports.createVectorMeshGradient = createVectorMeshGradient; exports.vectorMeshPointAt = vectorMeshPointAt; exports.vectorMeshColorAt = vectorMeshColorAt; exports.vectorMeshLines = vectorMeshLines; exports.vectorFreeformSpreadScale = vectorFreeformSpreadScale; exports.vectorFreeformLineSegments = vectorFreeformLineSegments; exports.vectorFreeformField = vectorFreeformField; exports.sampleVectorFreeform = sampleVectorFreeform; exports.autoVectorFreeformGradient = autoVectorFreeformGradient; exports.vectorShadedSvgDefs = vectorShadedSvgDefs; exports.mapVectorShadedPaint = mapVectorShadedPaint; exports.transformVectorShadedPaint = transformVectorShadedPaint; exports.sanitizeVectorShadedPaint = sanitizeVectorShadedPaint; exports.removeVectorFreeformPoint = removeVectorFreeformPoint; exports.nearestVectorShadingPoint = nearestVectorShadingPoint; exports.VECTOR_CORNER_KINDS = VECTOR_CORNER_KINDS; exports.VECTOR_GRADIENT_TYPES = VECTOR_GRADIENT_TYPES; exports.VECTOR_GRADIENT_SPREADS = VECTOR_GRADIENT_SPREADS; exports.VECTOR_GRADIENT_INTERPOLATIONS = VECTOR_GRADIENT_INTERPOLATIONS; exports.VECTOR_STROKE_GRADIENT_MODES = VECTOR_STROKE_GRADIENT_MODES; exports.VECTOR_ARROWHEADS = VECTOR_ARROWHEADS; exports.VECTOR_BLEND_MODES = VECTOR_BLEND_MODES; exports.VECTOR_HORIZONTAL_RESIZING = VECTOR_HORIZONTAL_RESIZING; exports.VECTOR_VERTICAL_RESIZING = VECTOR_VERTICAL_RESIZING; exports.VECTOR_LENS_TYPES = VECTOR_LENS_TYPES; exports.VECTOR_CONNECTOR_SIDES = VECTOR_CONNECTOR_SIDES; exports.VECTOR_CONNECTOR_ROUTES = VECTOR_CONNECTOR_ROUTES; exports.VECTOR_BLEND_SPACINGS = VECTOR_BLEND_SPACINGS; exports.VECTOR_MASK_TYPES = VECTOR_MASK_TYPES; exports.VECTOR_SYMMETRY_MODES = VECTOR_SYMMETRY_MODES; exports.VECTOR_TEXT_ALIGNS = VECTOR_TEXT_ALIGNS; exports.VECTOR_PATH_TEXT_BASELINES = VECTOR_PATH_TEXT_BASELINES; exports.VECTOR_PERSPECTIVE_PLANES = VECTOR_PERSPECTIVE_PLANES; exports.VECTOR_CONSTRAINT_KINDS = VECTOR_CONSTRAINT_KINDS; exports.VECTOR_TOOLS = VECTOR_TOOLS; exports.VECTOR_TRANSFORM_HANDLES = VECTOR_TRANSFORM_HANDLES; exports.VECTOR_PATHFINDER_OPERATIONS = VECTOR_PATHFINDER_OPERATIONS; exports.VECTOR_EFFECT_TYPES = VECTOR_EFFECT_TYPES; exports.VECTOR_MERGE_MODES = VECTOR_MERGE_MODES; exports.VECTOR_FILTER_TYPES = VECTOR_FILTER_TYPES; exports.isVectorGradient = isVectorGradient; exports.parseVectorColor = parseVectorColor; exports.VECTOR_GRADIENT_MIN_STOPS = VECTOR_GRADIENT_MIN_STOPS; exports.gradientMidpointRemap = gradientMidpointRemap; exports.sortedVectorGradientStops = sortedVectorGradientStops; exports.vectorGradientNeedsExpansion = vectorGradientNeedsExpansion; exports.vectorGradientRamp = vectorGradientRamp; exports.sampleVectorGradient = sampleVectorGradient; exports.expandVectorGradientStops = expandVectorGradientStops; exports.samplePlainStops = samplePlainStops; exports.reverseVectorGradient = reverseVectorGradient; exports.insertVectorGradientStop = insertVectorGradientStop; exports.moveVectorGradientStop = moveVectorGradientStop; exports.removeVectorGradientStop = removeVectorGradientStop; exports.vectorGradientMidpointPosition = vectorGradientMidpointPosition; exports.vectorGradientMidpointFromPosition = vectorGradientMidpointFromPosition; exports.spanVectorGradientStops = spanVectorGradientStops; exports.hasExplicitGradientGeometry = hasExplicitGradientGeometry; exports.vectorGradientPoints = vectorGradientPoints; exports.vectorBoxMatrix = vectorBoxMatrix; exports.vectorGradientUnitsMatrix = vectorGradientUnitsMatrix; exports.vectorGradientMatrix = vectorGradientMatrix; exports.vectorGradientFocalParam = vectorGradientFocalParam; exports.vectorGradientParam = vectorGradientParam; exports.applyVectorGradientSpread = applyVectorGradientSpread; exports.vectorGradientTAt = vectorGradientTAt; exports.sampleVectorGradientAt = sampleVectorGradientAt; exports.vectorGradientAspect = vectorGradientAspect; exports.explicitVectorGradient = explicitVectorGradient; exports.pinVectorGradient = pinVectorGradient; exports.transformVectorGradient = transformVectorGradient; exports.mapVectorGradient = mapVectorGradient; exports.mapVectorPaint = mapVectorPaint; exports.transformVectorPaint = transformVectorPaint; exports.isCentredVectorGradient = isCentredVectorGradient; exports.vectorGradientHandles = vectorGradientHandles; exports.moveVectorGradientHandle = moveVectorGradientHandle; exports.setVectorGradientVector = setVectorGradientVector; exports.VECTOR_GRADIENT_MAX_PERIODS = VECTOR_GRADIENT_MAX_PERIODS; exports.periodicVectorGradientStops = periodicVectorGradientStops; exports.expandVectorGradientSpread = expandVectorGradientSpread; exports.vectorGradientArea = vectorGradientArea; exports.patternAttrs = patternAttrs; exports.vectorGradientSvgDefs = vectorGradientSvgDefs; exports.sampleVectorPaintDefAt = sampleVectorPaintDefAt; exports.sanitizeVectorGradient = sanitizeVectorGradient; exports.convertVectorGradient = convertVectorGradient; exports.defaultVectorGradient = defaultVectorGradient; exports.applyVectorGradientPatch = applyVectorGradientPatch; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; exports.multiplyMatrices = multiplyMatrices; exports.translateMatrix = translateMatrix; exports.scaleMatrix = scaleMatrix; exports.rotateMatrix = rotateMatrix; exports.matrixAbout = matrixAbout; exports.skewMatrix = skewMatrix; exports.applyMatrix = applyMatrix; exports.isIdentityMatrix = isIdentityMatrix; exports.invertMatrix = invertMatrix; exports.applyMatrixLinear = applyMatrixLinear; exports.matrixRotation = matrixRotation; exports.decomposeRigid = decomposeRigid; exports.isVectorSymmetryGroup = isVectorSymmetryGroup; exports.vectorSymmetryMatrices = vectorSymmetryMatrices; exports.vectorSymmetryDrawn = vectorSymmetryDrawn; exports.vectorSymmetryAxes = vectorSymmetryAxes; exports.sanitizeVectorSymmetry = sanitizeVectorSymmetry; exports.VECTOR_SYMMETRY_MODE_LABELS = VECTOR_SYMMETRY_MODE_LABELS; exports.transformVectorSymmetry = transformVectorSymmetry; exports.vectorCornerAt = vectorCornerAt; exports.vectorCorners = vectorCorners; exports.cornerSetback = cornerSetback; exports.fitCornerRadius = fitCornerRadius; exports.cornerBisectorPoint = cornerBisectorPoint; exports.cornerRadiusChange = cornerRadiusChange; exports.hasVectorCorners = hasVectorCorners; exports.expandVectorCornersOf = expandVectorCornersOf; exports.expandVectorCorners = expandVectorCorners; exports.setAnchorCorner = setAnchorCorner; exports.nextVectorCornerKind = nextVectorCornerKind; exports.setSubpathCorners = setSubpathCorners; exports.VECTOR_WIDTH_PROFILE_MAX_POINTS = VECTOR_WIDTH_PROFILE_MAX_POINTS; exports.VECTOR_WIDTH_PROFILE_MAX_SCALE = VECTOR_WIDTH_PROFILE_MAX_SCALE; exports.VECTOR_WIDTH_SAME_T = VECTOR_WIDTH_SAME_T; exports.VECTOR_WIDTH_PRESETS = VECTOR_WIDTH_PRESETS; exports.VECTOR_WIDTH_PRESET_IDS = VECTOR_WIDTH_PRESET_IDS; exports.sanitizeWidthProfile = sanitizeWidthProfile; exports.isUniformWidthProfile = isUniformWidthProfile; exports.widthProfileAt = widthProfileAt; exports.widthProfileMaxScale = widthProfileMaxScale; exports.widthProfilePreset = widthProfilePreset; exports.widthProfilePresetId = widthProfilePresetId; exports.reverseWidthProfile = reverseWidthProfile; exports.mirrorWidthProfile = mirrorWidthProfile; exports.insertWidthPoint = insertWidthPoint; exports.setWidthPoint = setWidthPoint; exports.removeWidthPoints = removeWidthPoints; exports.taperWaveFactor = taperWaveFactor; exports.generateWidthProfile = generateWidthProfile; exports.VECTOR_PRESSURE_NOMINAL = VECTOR_PRESSURE_NOMINAL; exports.pressureWidthProfile = pressureWidthProfile; exports.dashIntervals = dashIntervals; exports.variableStrokeRings = variableStrokeRings; exports.variableStrokeOutline = variableStrokeOutline; exports.nearestStrokePosition = nearestStrokePosition; exports.strokePositionPoint = strokePositionPoint; exports.isClosedBezierShape = isClosedBezierShape; exports.effectiveStrokeAlign = effectiveStrokeAlign; exports.strokeWidthProfileOf = strokeWidthProfileOf; exports.hasStrokeExtras = hasStrokeExtras; exports.vectorStrokeLineArea = vectorStrokeLineArea; exports.arrowheadWeight = arrowheadWeight; exports.arrowheadInset = arrowheadInset; exports.arrowheadPath = arrowheadPath; exports.vectorStrokeParts = vectorStrokeParts; exports.vectorStrokeOutlinePath = vectorStrokeOutlinePath; exports.hitTestVectorStroke = hitTestVectorStroke; exports.vectorStrokeReach = vectorStrokeReach; exports.vectorPaintSolid = vectorPaintSolid; exports.shadeVectorColor = shadeVectorColor; exports.vectorPathRings = vectorPathRings; exports.vectorExtrudeFaces = vectorExtrudeFaces; exports.EFFECT_STRIP_HEIGHT = EFFECT_STRIP_HEIGHT; exports.EFFECT_MAP_REPEATS = EFFECT_MAP_REPEATS; exports.effectPaintSize = effectPaintSize; exports.readEffectStrokeMap = readEffectStrokeMap; exports.effectPaintKey = effectPaintKey; exports.isPaintEffectPaint = isPaintEffectPaint; exports.readPaintEffectPaint = readPaintEffectPaint; exports.sampleEffectField = sampleEffectField; exports.sampleEffectAt = sampleEffectAt; exports.effectDabField = effectDabField; exports.stampSampler = stampSampler; exports.brushStickerRefs = brushStickerRefs; exports.PAPER_FAMILIES = PAPER_FAMILIES; exports.PAPER_LIBRARY = PAPER_LIBRARY; exports.DEFAULT_PAPER = DEFAULT_PAPER; exports.paperPreset = paperPreset; exports.clonePaper = clonePaper; exports.normalizePaper = normalizePaper; exports.hexToRgb8 = hexToRgb8; exports.renderPaper = renderPaper; exports.TipGrain = TipGrain; exports.penOrientation = penOrientation; exports.tiltToOrientation = tiltToOrientation; exports.PenSmoother = PenSmoother; exports.IDENTITY_COPY = IDENTITY_COPY; exports.PenDabWalker = PenDabWalker; exports.DryStroke = DryStroke; exports.mixerTip = mixerTip; exports.toStrokePoint = toStrokePoint; exports.multiColorPalette = multiColorPalette; exports.multiColorGradient = multiColorGradient; exports.multiColorForDab = multiColorForDab; exports.PaintDabStroke = PaintDabStroke; exports.wetPaperInput = wetPaperInput; exports.WetStrokeDriver = WetStrokeDriver; exports.WET_MEDIUM_PARAMS = WET_MEDIUM_PARAMS; exports.WET_GPU_MODES = WET_GPU_MODES; exports.GPU_LEAD = GPU_LEAD; exports.PaintWetLayers = PaintWetLayers; exports.wetPigmentOf = wetPigmentOf; exports.VECTOR_WET_STEPS = VECTOR_WET_STEPS; exports.vectorMediaEngine = vectorMediaEngine; exports.usesVectorBackdrop = usesVectorBackdrop; exports.WetBrushstrokeJob = WetBrushstrokeJob; exports.renderWetBrushstroke = renderWetBrushstroke; exports.vectorBackdropRect = vectorBackdropRect; exports.renderBackdropBrushstroke = renderBackdropBrushstroke; exports.VECTOR_BRUSHSTROKE_SCALE = VECTOR_BRUSHSTROKE_SCALE; exports.isVectorBrushstrokeEngine = isVectorBrushstrokeEngine; exports.vectorBrushstrokeBrushes = vectorBrushstrokeBrushes; exports.vectorBrushstrokeBrush = vectorBrushstrokeBrush; exports.vectorBrushstrokeBrushOf = vectorBrushstrokeBrushOf; exports.vectorBrushstrokeBrushError = vectorBrushstrokeBrushError; exports.vectorBrushstrokeDefaultColour = vectorBrushstrokeDefaultColour; exports.sanitizeVectorBrushstroke = sanitizeVectorBrushstroke; exports.vectorBrushstrokePaintError = vectorBrushstrokePaintError; exports.readVectorBrushstrokePaint = readVectorBrushstrokePaint; exports.VECTOR_BRUSHSTROKE_MAX_SEED = VECTOR_BRUSHSTROKE_MAX_SEED; exports.sanitizeVectorBrushstrokePaper = sanitizeVectorBrushstrokePaper; exports.vectorBrushstrokeCharacterError = vectorBrushstrokeCharacterError; exports.randomVectorBrushstrokeSeed = randomVectorBrushstrokeSeed; exports.isVectorBrushstrokeLayer = isVectorBrushstrokeLayer; exports.vectorBrushstrokeReach = vectorBrushstrokeReach; exports.setVectorBackdropSource = setVectorBackdropSource; exports.onVectorBrushstrokesSettled = onVectorBrushstrokesSettled; exports.vectorBrushstrokesSettling = vectorBrushstrokesSettling; exports.settleVectorBrushstrokes = settleVectorBrushstrokes; exports.vectorBrushstrokeImages = vectorBrushstrokeImages; exports.VECTOR_STROKE_SETTING_KEYS = VECTOR_STROKE_SETTING_KEYS; exports.VECTOR_BLEND_MODE_LABELS = VECTOR_BLEND_MODE_LABELS; exports.isVectorBlendMode = isVectorBlendMode; exports.vectorBlendModeCss = vectorBlendModeCss; exports.vectorBlendModeFromCss = vectorBlendModeFromCss; exports.isPlainVectorPaintLayer = isPlainVectorPaintLayer; exports.isDrawnVectorPaintLayer = isDrawnVectorPaintLayer; exports.vectorFills = vectorFills; exports.vectorStrokeSettings = vectorStrokeSettings; exports.vectorStrokes = vectorStrokes; exports.hasVectorPaintStacks = hasVectorPaintStacks; exports.withVectorFills = withVectorFills; exports.withVectorStrokes = withVectorStrokes; exports.normalizeVectorPaintStacks = normalizeVectorPaintStacks; exports.sanitizeVectorFills = sanitizeVectorFills; exports.sanitizeVectorStrokeSettings = sanitizeVectorStrokeSettings; exports.sanitizeVectorStrokes = sanitizeVectorStrokes; exports.vectorPaintLayerNodes = vectorPaintLayerNodes; exports.needsVectorPaintLayers = needsVectorPaintLayers; exports.vectorStrokeStackReach = vectorStrokeStackReach; exports.hitTestVectorPaintLayer = hitTestVectorPaintLayer; exports.hitTestVectorPaintStack = hitTestVectorPaintStack; exports.vectorStacksHaveGradient = vectorStacksHaveGradient; exports.newVectorStrokeLayer = newVectorStrokeLayer; exports.vectorTargetPaint = vectorTargetPaint; exports.withVectorTargetPaint = withVectorTargetPaint; exports.effectPathLength = effectPathLength; exports.effectPathVertexCount = effectPathVertexCount; exports.trimIntervals = trimIntervals; exports.trimPaths = trimPaths; exports.trimPathsIndividually = trimPathsIndividually; exports.puckerBloatPaths = puckerBloatPaths; exports.roundCornerPaths = roundCornerPaths; exports.offsetPaths = offsetPaths; exports.sweepPath = sweepPath; exports.twistPaths = twistPaths; exports.zigzagPaths = zigzagPaths; exports.wigglePaths = wigglePaths; exports.mergePaths = mergePaths; exports.vectorRepeaterCopies = vectorRepeaterCopies; exports.repeatPaths = repeatPaths; exports.pathsCenter = pathsCenter; exports.mapVectorPoints = mapVectorPoints; exports.mapVectorSubpaths = mapVectorSubpaths; exports.mapBezierPath = mapBezierPath; exports.isVectorFrame = isVectorFrame; exports.vectorFrameRectPath = vectorFrameRectPath; exports.vectorFrameDrawn = vectorFrameDrawn; exports.vectorFrameContains = vectorFrameContains; exports.vectorFrameChildMatrix = vectorFrameChildMatrix; exports.sanitizeVectorFrame = sanitizeVectorFrame; exports.sanitizeVectorResizing = sanitizeVectorResizing; exports.VECTOR_HORIZONTAL_RESIZING_LABELS = VECTOR_HORIZONTAL_RESIZING_LABELS; exports.VECTOR_VERTICAL_RESIZING_LABELS = VECTOR_VERTICAL_RESIZING_LABELS; exports.vectorBoundsInside = vectorBoundsInside; exports.vectorArtboards = vectorArtboards; exports.vectorFrameDocument = vectorFrameDocument; exports.getVectorFramePanel = getVectorFramePanel; exports.splitIntoFaces = splitIntoFaces; exports.knifePath = knifePath; exports.eraserRegion = eraserRegion; exports.eraseFromFill = eraseFromFill; exports.eraseFromOutline = eraseFromOutline; exports.polylineBounds = polylineBounds; exports.simplifyPolyline = simplifyPolyline; exports.VECTOR_FILTER_DEFAULTS = VECTOR_FILTER_DEFAULTS; exports.VECTOR_FILTER_LABELS = VECTOR_FILTER_LABELS; exports.VECTOR_FILTER_PARAM_SPECS = VECTOR_FILTER_PARAM_SPECS; exports.isVectorFilterType = isVectorFilterType; exports.normalizeVectorFilterParams = normalizeVectorFilterParams; exports.vectorFilterParamKeys = vectorFilterParamKeys; exports.createVectorFilter = createVectorFilter; exports.sanitizeVectorFilters = sanitizeVectorFilters; exports.activeVectorFilters = activeVectorFilters; exports.vectorFilterReach = vectorFilterReach; exports.vectorFilterSvg = vectorFilterSvg; exports.vectorFilterMarkup = vectorFilterMarkup; exports.VECTOR_FILTER_MENU = VECTOR_FILTER_MENU; exports.isVectorMaskType = isVectorMaskType; exports.sanitizeVectorMask = sanitizeVectorMask; exports.isVectorMaskGroup = isVectorMaskGroup; exports.isVectorMaskActive = isVectorMaskActive; exports.vectorMaskSource = vectorMaskSource; exports.vectorMaskContents = vectorMaskContents; exports.vectorMaskOwner = vectorMaskOwner; exports.vectorMaskSummary = vectorMaskSummary; exports.vectorMaskRegionShapes = vectorMaskRegionShapes; exports.vectorMaskRegion = vectorMaskRegion; exports.vectorMaskRegionPath = vectorMaskRegionPath; exports.vectorMaskContains = vectorMaskContains; exports.vectorMaskedShapes = vectorMaskedShapes; exports.vectorMaskedGeometry = vectorMaskedGeometry; exports.vectorMaskedLocalBounds = vectorMaskedLocalBounds; exports.vectorMaskContentBounds = vectorMaskContentBounds; exports.vectorMaskRenderData = vectorMaskRenderData; exports.DEFAULT_TEXT_STYLE = DEFAULT_TEXT_STYLE; exports.DEFAULT_AUTO_LEADING = DEFAULT_AUTO_LEADING; exports.fitRuns = fitRuns; exports.styleAt = styleAt; exports.restyleRange = restyleRange; exports.spliceRuns = spliceRuns; exports.paragraphRanges = paragraphRanges; exports.fitParagraphRuns = fitParagraphRuns; exports.fontOf = fontOf; exports.transformTextRect = transformTextRect; exports.lineToTextSpace = lineToTextSpace; exports.layoutText = layoutText; exports.textIndexAt = textIndexAt; exports.caretAt = caretAt; exports.textSelectionQuads = textSelectionQuads; exports.textArrowStep = textArrowStep; exports.textLineMove = textLineMove; exports.textDecorations = textDecorations; exports.textRectPath = textRectPath; exports.textFragmentOutline = textFragmentOutline; exports.drawTextFragment = drawTextFragment; exports.cssFontFamily = cssFontFamily; exports.cssFont = cssFont; exports.createCanvasTextShaper = createCanvasTextShaper; exports.createOutlineTextShaper = createOutlineTextShaper; exports.createMetricTextShaper = createMetricTextShaper; exports.setVectorTextShaper = setVectorTextShaper; exports.getVectorTextShaper = getVectorTextShaper; exports.vectorTextShaperGeneration = vectorTextShaperGeneration; exports.vectorTextHasOutlines = vectorTextHasOutlines; exports.vectorTextFamilies = vectorTextFamilies; exports.DEFAULT_VECTOR_FONT = DEFAULT_VECTOR_FONT; exports.VECTOR_CHARACTER_STYLE_KEYS = VECTOR_CHARACTER_STYLE_KEYS; exports.VECTOR_PARAGRAPH_STYLE_KEYS = VECTOR_PARAGRAPH_STYLE_KEYS; exports.VectorTextError = VectorTextError; exports.fitVectorTextRuns = fitVectorTextRuns; exports.vectorTextRuns = vectorTextRuns; exports.vectorTextStyleAt = vectorTextStyleAt; exports.measureVectorPath = measureVectorPath; exports.vectorPathAt = vectorPathAt; exports.vectorPathTextPositions = vectorPathTextPositions; exports.layoutVectorText = layoutVectorText; exports.glyphBox = glyphBox; exports.vectorTextPaths = vectorTextPaths; exports.vectorTextPaintSource = vectorTextPaintSource; exports.vectorTextCaret = vectorTextCaret; exports.vectorTextIndexAt = vectorTextIndexAt; exports.vectorTextSelectionQuads = vectorTextSelectionQuads; exports.patchVectorCharacterStyle = patchVectorCharacterStyle; exports.patchVectorParagraphStyle = patchVectorParagraphStyle; exports.sanitizeVectorTextFrame = sanitizeVectorTextFrame; exports.normalizeVectorTextRuns = normalizeVectorTextRuns; exports.vectorTextOrientation = vectorTextOrientation; exports.sanitizeVectorTextFields = sanitizeVectorTextFields; exports.vectorTextRange = vectorTextRange; exports.replaceVectorText = replaceVectorText; exports.styleVectorText = styleVectorText; exports.bakeVectorTextGeometry = bakeVectorTextGeometry; exports.vectorTextName = vectorTextName; exports.pathTextFrameFromBezier = pathTextFrameFromBezier; exports.vectorTextBoxOutline = vectorTextBoxOutline; exports.vectorTextSpans = vectorTextSpans; exports.vectorTextGeometryNode = vectorTextGeometryNode; exports.vectorTextSpanSvg = vectorTextSpanSvg; exports.VECTOR_SYMBOL_MAX_DEPTH = VECTOR_SYMBOL_MAX_DEPTH; exports.vectorSymbolsUsedIn = vectorSymbolsUsedIn; exports.vectorSymbolUses = vectorSymbolUses; exports.resolveVectorSymbols = resolveVectorSymbols; exports.stripVectorSymbolArt = stripVectorSymbolArt; exports.scaleVectorStrokeWidths = scaleVectorStrokeWidths; exports.tintVectorNode = tintVectorNode; exports.prefixVectorIds = prefixVectorIds; exports.vectorInstanceGroup = vectorInstanceGroup; exports.composeVectorMatrices = composeVectorMatrices; exports.vectorBevelFaces = vectorBevelFaces; exports.isVectorLens = isVectorLens; exports.VECTOR_LENS_LABELS = VECTOR_LENS_LABELS; exports.VECTOR_LENS_SPECS = VECTOR_LENS_SPECS; exports.sanitizeVectorLens = sanitizeVectorLens; exports.vectorLensColorMap = vectorLensColorMap; exports.mapVectorPaintColors = mapVectorPaintColors; exports.vectorLensDrawn = vectorLensDrawn; exports.resolveVectorLenses = resolveVectorLenses; exports.stripVectorLensViews = stripVectorLensViews; exports.WARP_STYLES = WARP_STYLES; exports.WARP_STYLE_LABELS = WARP_STYLE_LABELS; exports.warpPresetGrid = warpPresetGrid; exports.warpPresetMesh = warpPresetMesh; exports.warpMeshColumns = warpMeshColumns; exports.warpMeshRows = warpMeshRows; exports.isValidWarpMesh = isValidWarpMesh; exports.fitWarpMesh = fitWarpMesh; exports.identityWarpMesh = identityWarpMesh; exports.evalWarpMesh = evalWarpMesh; exports.splitWarpMeshU = splitWarpMeshU; exports.splitWarpMeshV = splitWarpMeshV; exports.removeWarpMeshSplitU = removeWarpMeshSplitU; exports.removeWarpMeshSplitV = removeWarpMeshSplitV; exports.mapWarpMeshPoints = mapWarpMeshPoints; exports.resizeWarpMesh = resizeWarpMesh; exports.warpMeshControlBounds = warpMeshControlBounds; exports.warpMeshParamAt = warpMeshParamAt; exports.dragWarpMeshPoint = dragWarpMeshPoint; exports.pullWarpMesh = pullWarpMesh; exports.warpMeshEditPoints = warpMeshEditPoints; exports.warpMeshGridCurves = warpMeshGridCurves; exports.vectorMeshFromOutline = vectorMeshFromOutline; exports.vectorMeshOutline = vectorMeshOutline; exports.VECTOR_EFFECT_DEFAULTS = VECTOR_EFFECT_DEFAULTS; exports.VECTOR_EFFECT_LABELS = VECTOR_EFFECT_LABELS; exports.VECTOR_EFFECT_PARAM_SPECS = VECTOR_EFFECT_PARAM_SPECS; exports.vectorEnvelopeMesh = vectorEnvelopeMesh; exports.vectorEnvelopeMap = vectorEnvelopeMap; exports.normalizeVectorEffectParams = normalizeVectorEffectParams; exports.createVectorEffect = createVectorEffect; exports.activeVectorEffects = activeVectorEffects; exports.hasOwnVectorAppearance = hasOwnVectorAppearance; exports.hasVectorAppearance = hasVectorAppearance; exports.isVectorLiveBoolean = isVectorLiveBoolean; exports.vectorOperandOperation = vectorOperandOperation; exports.vectorLiveBooleanSteps = vectorLiveBooleanSteps; exports.clearVectorLiveBooleanCache = clearVectorLiveBooleanCache; exports.foldVectorBooleanOperands = foldVectorBooleanOperands; exports.applyVectorEffects = applyVectorEffects; exports.vectorInstanceDrawn = vectorInstanceDrawn; exports.vectorChildAppearanceShapes = vectorChildAppearanceShapes; exports.vectorEffectInputPaths = vectorEffectInputPaths; exports.vectorEffectInputBounds = vectorEffectInputBounds; exports.vectorNodeEnvelope = vectorNodeEnvelope; exports.vectorEnvelopeFrame = vectorEnvelopeFrame; exports.vectorAppearanceShapes = vectorAppearanceShapes; exports.vectorAppearanceOutline = vectorAppearanceOutline; exports.vectorAppearanceNodes = vectorAppearanceNodes; exports.expandVectorAppearance = expandVectorAppearance; exports.expandVectorAppearances = expandVectorAppearances; exports.sanitizeVectorEffects = sanitizeVectorEffects; exports.transformVectorEffects = transformVectorEffects; exports.vectorEnteredGroups = vectorEnteredGroups; exports.isVectorMasterPage = isVectorMasterPage; exports.vectorPages = vectorPages; exports.vectorMasterPages = vectorMasterPages; exports.vectorMasterArt = vectorMasterArt; exports.resolveVectorMasterPages = resolveVectorMasterPages; exports.stripVectorMasterArt = stripVectorMasterArt; exports.isVectorConnector = isVectorConnector; exports.vectorConnectionSites = vectorConnectionSites; exports.nearestVectorConnectionSite = nearestVectorConnectionSite; exports.vectorConnectorWorldAnchors = vectorConnectorWorldAnchors; exports.routeVectorConnector = routeVectorConnector; exports.rerouteVectorConnectors = rerouteVectorConnectors; exports.sanitizeVectorConnector = sanitizeVectorConnector; exports.VECTOR_CONNECTOR_ROUTE_LABELS = VECTOR_CONNECTOR_ROUTE_LABELS; exports.VECTOR_CONNECTOR_SIDE_LABELS = VECTOR_CONNECTOR_SIDE_LABELS; exports.getVectorConnectorPanel = getVectorConnectorPanel; exports.vectorConnectorTargetAt = vectorConnectorTargetAt; exports.vectorStrokeGradientDefs = vectorStrokeGradientDefs; exports.vectorCornersAttribute = vectorCornersAttribute; exports.applyVectorCornersAttribute = applyVectorCornersAttribute; exports.vectorPathLocalBounds = vectorPathLocalBounds; exports.vectorPaintToSvg = vectorPaintToSvg; exports.vectorStrokeSvgParts = vectorStrokeSvgParts; exports.vectorNodeLocalPaintBounds = vectorNodeLocalPaintBounds; exports.vectorNodeFilterSvg = vectorNodeFilterSvg; exports.widthProfileToAttribute = widthProfileToAttribute; exports.widthProfileFromAttribute = widthProfileFromAttribute; exports.vectorDocumentToSvg = vectorDocumentToSvg; exports.parseSvgTransform = parseSvgTransform; exports.parseVectorSvg = parseVectorSvg; exports.VECTOR_SPATIAL_MIN = VECTOR_SPATIAL_MIN; exports.VectorRTree = VectorRTree; exports.vectorNodePaintBox = vectorNodePaintBox; exports.vectorSpatialIndex = vectorSpatialIndex; exports.vectorNodesNear = vectorNodesNear; exports.cloneAnchor = cloneAnchor; exports.cloneSubpath = cloneSubpath; exports.cloneVectorNode = cloneVectorNode; exports.cloneVectorDocument = cloneVectorDocument; exports.hasPaint = hasPaint; exports.subpathSegmentCount = subpathSegmentCount; exports.subpathSegment = subpathSegment; exports.subpathsToBezier = subpathsToBezier; exports.vectorNodeToBezier = vectorNodeToBezier; exports.vectorPathData = vectorPathData; exports.inferAnchorType = inferAnchorType; exports.bezierToSubpaths = bezierToSubpaths; exports.walkVectorNodes = walkVectorNodes; exports.findVectorNode = findVectorNode; exports.locateVectorNode = locateVectorNode; exports.collectPaintedNodes = collectPaintedNodes; exports.collectPathNodes = collectPathNodes; exports.nodeMatrix = nodeMatrix; exports.vectorPathWorldBezier = vectorPathWorldBezier; exports.vectorNodeBounds = vectorNodeBounds; exports.unionBounds = unionBounds; exports.boundsIntersect = boundsIntersect; exports.boundsFromPoints = boundsFromPoints; exports.hitTestVectorNode = hitTestVectorNode; exports.vectorStrokeOutline = vectorStrokeOutline; exports.hitTestVectorNodes = hitTestVectorNodes; exports.nearestSegment = nearestSegment; exports.transformVectorNode = transformVectorNode; exports.vectorNodeRotation = vectorNodeRotation; exports.vectorWorldMatrix = vectorWorldMatrix; exports.vectorParentMatrix = vectorParentMatrix; exports.translateAnchor = translateAnchor; exports.moveAnchorHandle = moveAnchorHandle; exports.convertAnchor = convertAnchor; exports.insertAnchor = insertAnchor; exports.removeAnchors = removeAnchors; exports.reverseSubpath = reverseSubpath; exports.KAPPA = KAPPA2; exports.rectSubpath = rectSubpath; exports.ellipseSubpath = ellipseSubpath; exports.polygonSubpath = polygonSubpath; exports.starSubpath = starSubpath; exports.lineSubpath = lineSubpath; exports.roundSubpaths = roundSubpaths;
|
|
13536
|
+
|
|
13537
|
+
|
|
13538
|
+
|
|
13539
|
+
|
|
13540
|
+
exports.isVectorMeshGradient = isVectorMeshGradient; exports.isVectorFreeformGradient = isVectorFreeformGradient; exports.isVectorShadedPaint = isVectorShadedPaint; exports.vectorRgbaToCss = vectorRgbaToCss; exports.VECTOR_MESH_MAX = VECTOR_MESH_MAX; exports.createVectorMeshGradient = createVectorMeshGradient; exports.vectorMeshPointAt = vectorMeshPointAt; exports.vectorMeshColorAt = vectorMeshColorAt; exports.vectorMeshLines = vectorMeshLines; exports.vectorFreeformSpreadScale = vectorFreeformSpreadScale; exports.vectorFreeformLineSegments = vectorFreeformLineSegments; exports.vectorFreeformField = vectorFreeformField; exports.sampleVectorFreeform = sampleVectorFreeform; exports.autoVectorFreeformGradient = autoVectorFreeformGradient; exports.vectorShadedSvgDefs = vectorShadedSvgDefs; exports.mapVectorShadedPaint = mapVectorShadedPaint; exports.transformVectorShadedPaint = transformVectorShadedPaint; exports.sanitizeVectorShadedPaint = sanitizeVectorShadedPaint; exports.removeVectorFreeformPoint = removeVectorFreeformPoint; exports.nearestVectorShadingPoint = nearestVectorShadingPoint; exports.VECTOR_CORNER_KINDS = VECTOR_CORNER_KINDS; exports.VECTOR_GRADIENT_TYPES = VECTOR_GRADIENT_TYPES; exports.VECTOR_GRADIENT_SPREADS = VECTOR_GRADIENT_SPREADS; exports.VECTOR_GRADIENT_INTERPOLATIONS = VECTOR_GRADIENT_INTERPOLATIONS; exports.VECTOR_STROKE_GRADIENT_MODES = VECTOR_STROKE_GRADIENT_MODES; exports.VECTOR_ARROWHEADS = VECTOR_ARROWHEADS; exports.VECTOR_BLEND_MODES = VECTOR_BLEND_MODES; exports.VECTOR_HORIZONTAL_RESIZING = VECTOR_HORIZONTAL_RESIZING; exports.VECTOR_VERTICAL_RESIZING = VECTOR_VERTICAL_RESIZING; exports.VECTOR_LENS_TYPES = VECTOR_LENS_TYPES; exports.VECTOR_CONNECTOR_SIDES = VECTOR_CONNECTOR_SIDES; exports.VECTOR_CONNECTOR_ROUTES = VECTOR_CONNECTOR_ROUTES; exports.VECTOR_BLEND_SPACINGS = VECTOR_BLEND_SPACINGS; exports.VECTOR_MASK_TYPES = VECTOR_MASK_TYPES; exports.VECTOR_SYMMETRY_MODES = VECTOR_SYMMETRY_MODES; exports.VECTOR_TEXT_ALIGNS = VECTOR_TEXT_ALIGNS; exports.VECTOR_PATH_TEXT_BASELINES = VECTOR_PATH_TEXT_BASELINES; exports.VECTOR_PERSPECTIVE_PLANES = VECTOR_PERSPECTIVE_PLANES; exports.VECTOR_CONSTRAINT_KINDS = VECTOR_CONSTRAINT_KINDS; exports.VECTOR_TOOLS = VECTOR_TOOLS; exports.VECTOR_TRANSFORM_HANDLES = VECTOR_TRANSFORM_HANDLES; exports.VECTOR_PATHFINDER_OPERATIONS = VECTOR_PATHFINDER_OPERATIONS; exports.VECTOR_EFFECT_TYPES = VECTOR_EFFECT_TYPES; exports.VECTOR_MERGE_MODES = VECTOR_MERGE_MODES; exports.VECTOR_FILTER_TYPES = VECTOR_FILTER_TYPES; exports.isVectorGradient = isVectorGradient; exports.parseVectorColor = parseVectorColor; exports.VECTOR_GRADIENT_MIN_STOPS = VECTOR_GRADIENT_MIN_STOPS; exports.gradientMidpointRemap = gradientMidpointRemap; exports.sortedVectorGradientStops = sortedVectorGradientStops; exports.vectorGradientNeedsExpansion = vectorGradientNeedsExpansion; exports.vectorGradientRamp = vectorGradientRamp; exports.sampleVectorGradient = sampleVectorGradient; exports.expandVectorGradientStops = expandVectorGradientStops; exports.samplePlainStops = samplePlainStops; exports.reverseVectorGradient = reverseVectorGradient; exports.insertVectorGradientStop = insertVectorGradientStop; exports.moveVectorGradientStop = moveVectorGradientStop; exports.removeVectorGradientStop = removeVectorGradientStop; exports.vectorGradientMidpointPosition = vectorGradientMidpointPosition; exports.vectorGradientMidpointFromPosition = vectorGradientMidpointFromPosition; exports.spanVectorGradientStops = spanVectorGradientStops; exports.hasExplicitGradientGeometry = hasExplicitGradientGeometry; exports.vectorGradientPoints = vectorGradientPoints; exports.vectorBoxMatrix = vectorBoxMatrix; exports.vectorGradientUnitsMatrix = vectorGradientUnitsMatrix; exports.vectorGradientMatrix = vectorGradientMatrix; exports.vectorGradientFocalParam = vectorGradientFocalParam; exports.vectorGradientParam = vectorGradientParam; exports.applyVectorGradientSpread = applyVectorGradientSpread; exports.vectorGradientTAt = vectorGradientTAt; exports.sampleVectorGradientAt = sampleVectorGradientAt; exports.vectorGradientAspect = vectorGradientAspect; exports.explicitVectorGradient = explicitVectorGradient; exports.pinVectorGradient = pinVectorGradient; exports.transformVectorGradient = transformVectorGradient; exports.mapVectorGradient = mapVectorGradient; exports.mapVectorPaint = mapVectorPaint; exports.transformVectorPaint = transformVectorPaint; exports.isCentredVectorGradient = isCentredVectorGradient; exports.vectorGradientHandles = vectorGradientHandles; exports.moveVectorGradientHandle = moveVectorGradientHandle; exports.setVectorGradientVector = setVectorGradientVector; exports.VECTOR_GRADIENT_MAX_PERIODS = VECTOR_GRADIENT_MAX_PERIODS; exports.periodicVectorGradientStops = periodicVectorGradientStops; exports.expandVectorGradientSpread = expandVectorGradientSpread; exports.vectorGradientArea = vectorGradientArea; exports.patternAttrs = patternAttrs; exports.vectorGradientSvgDefs = vectorGradientSvgDefs; exports.sampleVectorPaintDefAt = sampleVectorPaintDefAt; exports.sanitizeVectorGradient = sanitizeVectorGradient; exports.convertVectorGradient = convertVectorGradient; exports.defaultVectorGradient = defaultVectorGradient; exports.applyVectorGradientPatch = applyVectorGradientPatch; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; exports.multiplyMatrices = multiplyMatrices; exports.translateMatrix = translateMatrix; exports.scaleMatrix = scaleMatrix; exports.rotateMatrix = rotateMatrix; exports.matrixAbout = matrixAbout; exports.skewMatrix = skewMatrix; exports.applyMatrix = applyMatrix; exports.isIdentityMatrix = isIdentityMatrix; exports.invertMatrix = invertMatrix; exports.applyMatrixLinear = applyMatrixLinear; exports.matrixRotation = matrixRotation; exports.decomposeRigid = decomposeRigid; exports.isVectorSymmetryGroup = isVectorSymmetryGroup; exports.vectorSymmetryMatrices = vectorSymmetryMatrices; exports.vectorSymmetryDrawn = vectorSymmetryDrawn; exports.vectorSymmetryAxes = vectorSymmetryAxes; exports.sanitizeVectorSymmetry = sanitizeVectorSymmetry; exports.VECTOR_SYMMETRY_MODE_LABELS = VECTOR_SYMMETRY_MODE_LABELS; exports.transformVectorSymmetry = transformVectorSymmetry; exports.vectorCornerAt = vectorCornerAt; exports.vectorCorners = vectorCorners; exports.cornerSetback = cornerSetback; exports.fitCornerRadius = fitCornerRadius; exports.cornerBisectorPoint = cornerBisectorPoint; exports.cornerRadiusChange = cornerRadiusChange; exports.hasVectorCorners = hasVectorCorners; exports.expandVectorCornersOf = expandVectorCornersOf; exports.expandVectorCorners = expandVectorCorners; exports.setAnchorCorner = setAnchorCorner; exports.nextVectorCornerKind = nextVectorCornerKind; exports.setSubpathCorners = setSubpathCorners; exports.VECTOR_WIDTH_PROFILE_MAX_POINTS = VECTOR_WIDTH_PROFILE_MAX_POINTS; exports.VECTOR_WIDTH_PROFILE_MAX_SCALE = VECTOR_WIDTH_PROFILE_MAX_SCALE; exports.VECTOR_WIDTH_SAME_T = VECTOR_WIDTH_SAME_T; exports.VECTOR_WIDTH_PRESETS = VECTOR_WIDTH_PRESETS; exports.VECTOR_WIDTH_PRESET_IDS = VECTOR_WIDTH_PRESET_IDS; exports.sanitizeWidthProfile = sanitizeWidthProfile; exports.isUniformWidthProfile = isUniformWidthProfile; exports.widthProfileAt = widthProfileAt; exports.widthProfileMaxScale = widthProfileMaxScale; exports.widthProfilePreset = widthProfilePreset; exports.widthProfilePresetId = widthProfilePresetId; exports.reverseWidthProfile = reverseWidthProfile; exports.mirrorWidthProfile = mirrorWidthProfile; exports.insertWidthPoint = insertWidthPoint; exports.setWidthPoint = setWidthPoint; exports.removeWidthPoints = removeWidthPoints; exports.taperWaveFactor = taperWaveFactor; exports.generateWidthProfile = generateWidthProfile; exports.VECTOR_PRESSURE_NOMINAL = VECTOR_PRESSURE_NOMINAL; exports.pressureWidthProfile = pressureWidthProfile; exports.dashIntervals = dashIntervals; exports.variableStrokeRings = variableStrokeRings; exports.variableStrokeOutline = variableStrokeOutline; exports.nearestStrokePosition = nearestStrokePosition; exports.strokePositionPoint = strokePositionPoint; exports.isClosedBezierShape = isClosedBezierShape; exports.effectiveStrokeAlign = effectiveStrokeAlign; exports.strokeWidthProfileOf = strokeWidthProfileOf; exports.hasStrokeExtras = hasStrokeExtras; exports.vectorStrokeLineArea = vectorStrokeLineArea; exports.arrowheadWeight = arrowheadWeight; exports.arrowheadInset = arrowheadInset; exports.arrowheadPath = arrowheadPath; exports.vectorStrokeParts = vectorStrokeParts; exports.vectorStrokeOutlinePath = vectorStrokeOutlinePath; exports.hitTestVectorStroke = hitTestVectorStroke; exports.vectorStrokeReach = vectorStrokeReach; exports.vectorPaintSolid = vectorPaintSolid; exports.shadeVectorColor = shadeVectorColor; exports.vectorPathRings = vectorPathRings; exports.vectorExtrudeFaces = vectorExtrudeFaces; exports.EFFECT_STRIP_HEIGHT = EFFECT_STRIP_HEIGHT; exports.EFFECT_MAP_REPEATS = EFFECT_MAP_REPEATS; exports.MAX_EFFECT_PATH_POINTS = MAX_EFFECT_PATH_POINTS; exports.strokePathPoints = strokePathPoints; exports.inferEffectPathControl = inferEffectPathControl; exports.withStrokePath = withStrokePath; exports.effectPaintSize = effectPaintSize; exports.readEffectStrokeMap = readEffectStrokeMap; exports.effectPaintKey = effectPaintKey; exports.isPaintEffectPaint = isPaintEffectPaint; exports.readPaintEffectPaint = readPaintEffectPaint; exports.sampleEffectField = sampleEffectField; exports.sampleEffectAt = sampleEffectAt; exports.effectDabField = effectDabField; exports.stampSampler = stampSampler; exports.brushStickerRefs = brushStickerRefs; exports.PAPER_FAMILIES = PAPER_FAMILIES; exports.PAPER_LIBRARY = PAPER_LIBRARY; exports.DEFAULT_PAPER = DEFAULT_PAPER; exports.paperPreset = paperPreset; exports.clonePaper = clonePaper; exports.normalizePaper = normalizePaper; exports.hexToRgb8 = hexToRgb8; exports.renderPaper = renderPaper; exports.TipGrain = TipGrain; exports.penOrientation = penOrientation; exports.tiltToOrientation = tiltToOrientation; exports.PenSmoother = PenSmoother; exports.IDENTITY_COPY = IDENTITY_COPY; exports.PenDabWalker = PenDabWalker; exports.DryStroke = DryStroke; exports.mixerTip = mixerTip; exports.toStrokePoint = toStrokePoint; exports.multiColorPalette = multiColorPalette; exports.multiColorGradient = multiColorGradient; exports.multiColorForDab = multiColorForDab; exports.PaintDabStroke = PaintDabStroke; exports.wetPaperInput = wetPaperInput; exports.WetStrokeDriver = WetStrokeDriver; exports.WET_MEDIUM_PARAMS = WET_MEDIUM_PARAMS; exports.WET_GPU_MODES = WET_GPU_MODES; exports.GPU_LEAD = GPU_LEAD; exports.PaintWetLayers = PaintWetLayers; exports.wetPigmentOf = wetPigmentOf; exports.VECTOR_WET_STEPS = VECTOR_WET_STEPS; exports.vectorMediaEngine = vectorMediaEngine; exports.usesVectorBackdrop = usesVectorBackdrop; exports.WetBrushstrokeJob = WetBrushstrokeJob; exports.renderWetBrushstroke = renderWetBrushstroke; exports.vectorBackdropRect = vectorBackdropRect; exports.renderBackdropBrushstroke = renderBackdropBrushstroke; exports.VECTOR_BRUSHSTROKE_SCALE = VECTOR_BRUSHSTROKE_SCALE; exports.isVectorBrushstrokeEngine = isVectorBrushstrokeEngine; exports.vectorBrushstrokeBrushes = vectorBrushstrokeBrushes; exports.vectorBrushstrokeBrush = vectorBrushstrokeBrush; exports.vectorBrushstrokeBrushOf = vectorBrushstrokeBrushOf; exports.vectorBrushstrokeBrushError = vectorBrushstrokeBrushError; exports.vectorBrushstrokeDefaultColour = vectorBrushstrokeDefaultColour; exports.sanitizeVectorBrushstroke = sanitizeVectorBrushstroke; exports.vectorBrushstrokePaintError = vectorBrushstrokePaintError; exports.readVectorBrushstrokePaint = readVectorBrushstrokePaint; exports.VECTOR_BRUSHSTROKE_MAX_SEED = VECTOR_BRUSHSTROKE_MAX_SEED; exports.sanitizeVectorBrushstrokePaper = sanitizeVectorBrushstrokePaper; exports.vectorBrushstrokeCharacterError = vectorBrushstrokeCharacterError; exports.randomVectorBrushstrokeSeed = randomVectorBrushstrokeSeed; exports.isVectorBrushstrokeLayer = isVectorBrushstrokeLayer; exports.vectorBrushstrokeReach = vectorBrushstrokeReach; exports.setVectorBackdropSource = setVectorBackdropSource; exports.onVectorBrushstrokesSettled = onVectorBrushstrokesSettled; exports.vectorBrushstrokesSettling = vectorBrushstrokesSettling; exports.settleVectorBrushstrokes = settleVectorBrushstrokes; exports.vectorBrushstrokeImages = vectorBrushstrokeImages; exports.VECTOR_STROKE_SETTING_KEYS = VECTOR_STROKE_SETTING_KEYS; exports.VECTOR_BLEND_MODE_LABELS = VECTOR_BLEND_MODE_LABELS; exports.isVectorBlendMode = isVectorBlendMode; exports.vectorBlendModeCss = vectorBlendModeCss; exports.vectorBlendModeFromCss = vectorBlendModeFromCss; exports.isPlainVectorPaintLayer = isPlainVectorPaintLayer; exports.isDrawnVectorPaintLayer = isDrawnVectorPaintLayer; exports.vectorFills = vectorFills; exports.vectorStrokeSettings = vectorStrokeSettings; exports.vectorStrokes = vectorStrokes; exports.hasVectorPaintStacks = hasVectorPaintStacks; exports.withVectorFills = withVectorFills; exports.withVectorStrokes = withVectorStrokes; exports.normalizeVectorPaintStacks = normalizeVectorPaintStacks; exports.sanitizeVectorFills = sanitizeVectorFills; exports.sanitizeVectorStrokeSettings = sanitizeVectorStrokeSettings; exports.sanitizeVectorStrokes = sanitizeVectorStrokes; exports.vectorPaintLayerNodes = vectorPaintLayerNodes; exports.needsVectorPaintLayers = needsVectorPaintLayers; exports.vectorStrokeStackReach = vectorStrokeStackReach; exports.hitTestVectorPaintLayer = hitTestVectorPaintLayer; exports.hitTestVectorPaintStack = hitTestVectorPaintStack; exports.vectorStacksHaveGradient = vectorStacksHaveGradient; exports.newVectorStrokeLayer = newVectorStrokeLayer; exports.vectorTargetPaint = vectorTargetPaint; exports.withVectorTargetPaint = withVectorTargetPaint; exports.effectPathLength = effectPathLength; exports.effectPathVertexCount = effectPathVertexCount; exports.trimIntervals = trimIntervals; exports.trimPaths = trimPaths; exports.trimPathsIndividually = trimPathsIndividually; exports.puckerBloatPaths = puckerBloatPaths; exports.roundCornerPaths = roundCornerPaths; exports.offsetPaths = offsetPaths; exports.sweepPath = sweepPath; exports.twistPaths = twistPaths; exports.zigzagPaths = zigzagPaths; exports.wigglePaths = wigglePaths; exports.mergePaths = mergePaths; exports.vectorRepeaterCopies = vectorRepeaterCopies; exports.repeatPaths = repeatPaths; exports.pathsCenter = pathsCenter; exports.mapVectorPoints = mapVectorPoints; exports.mapVectorSubpaths = mapVectorSubpaths; exports.mapBezierPath = mapBezierPath; exports.isVectorFrame = isVectorFrame; exports.vectorFrameRectPath = vectorFrameRectPath; exports.vectorFrameDrawn = vectorFrameDrawn; exports.vectorFrameContains = vectorFrameContains; exports.vectorFrameChildMatrix = vectorFrameChildMatrix; exports.sanitizeVectorFrame = sanitizeVectorFrame; exports.sanitizeVectorResizing = sanitizeVectorResizing; exports.VECTOR_HORIZONTAL_RESIZING_LABELS = VECTOR_HORIZONTAL_RESIZING_LABELS; exports.VECTOR_VERTICAL_RESIZING_LABELS = VECTOR_VERTICAL_RESIZING_LABELS; exports.vectorBoundsInside = vectorBoundsInside; exports.vectorArtboards = vectorArtboards; exports.vectorFrameDocument = vectorFrameDocument; exports.getVectorFramePanel = getVectorFramePanel; exports.splitIntoFaces = splitIntoFaces; exports.knifePath = knifePath; exports.eraserRegion = eraserRegion; exports.eraseFromFill = eraseFromFill; exports.eraseFromOutline = eraseFromOutline; exports.polylineBounds = polylineBounds; exports.simplifyPolyline = simplifyPolyline; exports.VECTOR_FILTER_DEFAULTS = VECTOR_FILTER_DEFAULTS; exports.VECTOR_FILTER_LABELS = VECTOR_FILTER_LABELS; exports.VECTOR_FILTER_PARAM_SPECS = VECTOR_FILTER_PARAM_SPECS; exports.isVectorFilterType = isVectorFilterType; exports.normalizeVectorFilterParams = normalizeVectorFilterParams; exports.vectorFilterParamKeys = vectorFilterParamKeys; exports.createVectorFilter = createVectorFilter; exports.sanitizeVectorFilters = sanitizeVectorFilters; exports.activeVectorFilters = activeVectorFilters; exports.vectorFilterReach = vectorFilterReach; exports.vectorFilterSvg = vectorFilterSvg; exports.vectorFilterMarkup = vectorFilterMarkup; exports.VECTOR_FILTER_MENU = VECTOR_FILTER_MENU; exports.isVectorMaskType = isVectorMaskType; exports.sanitizeVectorMask = sanitizeVectorMask; exports.isVectorMaskGroup = isVectorMaskGroup; exports.isVectorMaskActive = isVectorMaskActive; exports.vectorMaskSource = vectorMaskSource; exports.vectorMaskContents = vectorMaskContents; exports.vectorMaskOwner = vectorMaskOwner; exports.vectorMaskSummary = vectorMaskSummary; exports.vectorMaskRegionShapes = vectorMaskRegionShapes; exports.vectorMaskRegion = vectorMaskRegion; exports.vectorMaskRegionPath = vectorMaskRegionPath; exports.vectorMaskContains = vectorMaskContains; exports.vectorMaskedShapes = vectorMaskedShapes; exports.vectorMaskedGeometry = vectorMaskedGeometry; exports.vectorMaskedLocalBounds = vectorMaskedLocalBounds; exports.vectorMaskContentBounds = vectorMaskContentBounds; exports.vectorMaskRenderData = vectorMaskRenderData; exports.DEFAULT_TEXT_STYLE = DEFAULT_TEXT_STYLE; exports.DEFAULT_AUTO_LEADING = DEFAULT_AUTO_LEADING; exports.fitRuns = fitRuns; exports.styleAt = styleAt; exports.restyleRange = restyleRange; exports.spliceRuns = spliceRuns; exports.paragraphRanges = paragraphRanges; exports.fitParagraphRuns = fitParagraphRuns; exports.fontOf = fontOf; exports.transformTextRect = transformTextRect; exports.lineToTextSpace = lineToTextSpace; exports.layoutText = layoutText; exports.textIndexAt = textIndexAt; exports.caretAt = caretAt; exports.textSelectionQuads = textSelectionQuads; exports.textArrowStep = textArrowStep; exports.textLineMove = textLineMove; exports.textDecorations = textDecorations; exports.textRectPath = textRectPath; exports.textFragmentOutline = textFragmentOutline; exports.drawTextFragment = drawTextFragment; exports.cssFontFamily = cssFontFamily; exports.cssFont = cssFont; exports.createCanvasTextShaper = createCanvasTextShaper; exports.createOutlineTextShaper = createOutlineTextShaper; exports.createMetricTextShaper = createMetricTextShaper; exports.setVectorTextShaper = setVectorTextShaper; exports.getVectorTextShaper = getVectorTextShaper; exports.vectorTextShaperGeneration = vectorTextShaperGeneration; exports.vectorTextHasOutlines = vectorTextHasOutlines; exports.vectorTextFamilies = vectorTextFamilies; exports.DEFAULT_VECTOR_FONT = DEFAULT_VECTOR_FONT; exports.VECTOR_CHARACTER_STYLE_KEYS = VECTOR_CHARACTER_STYLE_KEYS; exports.VECTOR_PARAGRAPH_STYLE_KEYS = VECTOR_PARAGRAPH_STYLE_KEYS; exports.VectorTextError = VectorTextError; exports.fitVectorTextRuns = fitVectorTextRuns; exports.vectorTextRuns = vectorTextRuns; exports.vectorTextStyleAt = vectorTextStyleAt; exports.measureVectorPath = measureVectorPath; exports.vectorPathAt = vectorPathAt; exports.vectorPathTextPositions = vectorPathTextPositions; exports.layoutVectorText = layoutVectorText; exports.glyphBox = glyphBox; exports.vectorTextPaths = vectorTextPaths; exports.vectorTextPaintSource = vectorTextPaintSource; exports.vectorTextCaret = vectorTextCaret; exports.vectorTextIndexAt = vectorTextIndexAt; exports.vectorTextSelectionQuads = vectorTextSelectionQuads; exports.patchVectorCharacterStyle = patchVectorCharacterStyle; exports.patchVectorParagraphStyle = patchVectorParagraphStyle; exports.sanitizeVectorTextFrame = sanitizeVectorTextFrame; exports.normalizeVectorTextRuns = normalizeVectorTextRuns; exports.vectorTextOrientation = vectorTextOrientation; exports.sanitizeVectorTextFields = sanitizeVectorTextFields; exports.vectorTextRange = vectorTextRange; exports.replaceVectorText = replaceVectorText; exports.styleVectorText = styleVectorText; exports.bakeVectorTextGeometry = bakeVectorTextGeometry; exports.vectorTextName = vectorTextName; exports.pathTextFrameFromBezier = pathTextFrameFromBezier; exports.vectorTextBoxOutline = vectorTextBoxOutline; exports.vectorTextSpans = vectorTextSpans; exports.vectorTextGeometryNode = vectorTextGeometryNode; exports.vectorTextSpanSvg = vectorTextSpanSvg; exports.VECTOR_SYMBOL_MAX_DEPTH = VECTOR_SYMBOL_MAX_DEPTH; exports.vectorSymbolsUsedIn = vectorSymbolsUsedIn; exports.vectorSymbolUses = vectorSymbolUses; exports.resolveVectorSymbols = resolveVectorSymbols; exports.stripVectorSymbolArt = stripVectorSymbolArt; exports.scaleVectorStrokeWidths = scaleVectorStrokeWidths; exports.tintVectorNode = tintVectorNode; exports.prefixVectorIds = prefixVectorIds; exports.vectorInstanceGroup = vectorInstanceGroup; exports.composeVectorMatrices = composeVectorMatrices; exports.vectorBevelFaces = vectorBevelFaces; exports.isVectorLens = isVectorLens; exports.VECTOR_LENS_LABELS = VECTOR_LENS_LABELS; exports.VECTOR_LENS_SPECS = VECTOR_LENS_SPECS; exports.sanitizeVectorLens = sanitizeVectorLens; exports.vectorLensColorMap = vectorLensColorMap; exports.mapVectorPaintColors = mapVectorPaintColors; exports.vectorLensDrawn = vectorLensDrawn; exports.resolveVectorLenses = resolveVectorLenses; exports.stripVectorLensViews = stripVectorLensViews; exports.WARP_STYLES = WARP_STYLES; exports.WARP_STYLE_LABELS = WARP_STYLE_LABELS; exports.warpPresetGrid = warpPresetGrid; exports.warpPresetMesh = warpPresetMesh; exports.warpMeshColumns = warpMeshColumns; exports.warpMeshRows = warpMeshRows; exports.isValidWarpMesh = isValidWarpMesh; exports.fitWarpMesh = fitWarpMesh; exports.identityWarpMesh = identityWarpMesh; exports.evalWarpMesh = evalWarpMesh; exports.splitWarpMeshU = splitWarpMeshU; exports.splitWarpMeshV = splitWarpMeshV; exports.removeWarpMeshSplitU = removeWarpMeshSplitU; exports.removeWarpMeshSplitV = removeWarpMeshSplitV; exports.mapWarpMeshPoints = mapWarpMeshPoints; exports.resizeWarpMesh = resizeWarpMesh; exports.warpMeshControlBounds = warpMeshControlBounds; exports.warpMeshParamAt = warpMeshParamAt; exports.dragWarpMeshPoint = dragWarpMeshPoint; exports.pullWarpMesh = pullWarpMesh; exports.warpMeshEditPoints = warpMeshEditPoints; exports.warpMeshGridCurves = warpMeshGridCurves; exports.vectorMeshFromOutline = vectorMeshFromOutline; exports.vectorMeshOutline = vectorMeshOutline; exports.VECTOR_EFFECT_DEFAULTS = VECTOR_EFFECT_DEFAULTS; exports.VECTOR_EFFECT_LABELS = VECTOR_EFFECT_LABELS; exports.VECTOR_EFFECT_PARAM_SPECS = VECTOR_EFFECT_PARAM_SPECS; exports.vectorEnvelopeMesh = vectorEnvelopeMesh; exports.vectorEnvelopeMap = vectorEnvelopeMap; exports.normalizeVectorEffectParams = normalizeVectorEffectParams; exports.createVectorEffect = createVectorEffect; exports.activeVectorEffects = activeVectorEffects; exports.hasOwnVectorAppearance = hasOwnVectorAppearance; exports.hasVectorAppearance = hasVectorAppearance; exports.isVectorLiveBoolean = isVectorLiveBoolean; exports.vectorOperandOperation = vectorOperandOperation; exports.vectorLiveBooleanSteps = vectorLiveBooleanSteps; exports.clearVectorLiveBooleanCache = clearVectorLiveBooleanCache; exports.foldVectorBooleanOperands = foldVectorBooleanOperands; exports.applyVectorEffects = applyVectorEffects; exports.vectorInstanceDrawn = vectorInstanceDrawn; exports.vectorChildAppearanceShapes = vectorChildAppearanceShapes; exports.vectorEffectInputPaths = vectorEffectInputPaths; exports.vectorEffectInputBounds = vectorEffectInputBounds; exports.vectorNodeEnvelope = vectorNodeEnvelope; exports.vectorEnvelopeFrame = vectorEnvelopeFrame; exports.vectorAppearanceShapes = vectorAppearanceShapes; exports.vectorAppearanceOutline = vectorAppearanceOutline; exports.vectorAppearanceNodes = vectorAppearanceNodes; exports.expandVectorAppearance = expandVectorAppearance; exports.expandVectorAppearances = expandVectorAppearances; exports.sanitizeVectorEffects = sanitizeVectorEffects; exports.transformVectorEffects = transformVectorEffects; exports.vectorEnteredGroups = vectorEnteredGroups; exports.isVectorMasterPage = isVectorMasterPage; exports.vectorPages = vectorPages; exports.vectorMasterPages = vectorMasterPages; exports.vectorMasterArt = vectorMasterArt; exports.resolveVectorMasterPages = resolveVectorMasterPages; exports.stripVectorMasterArt = stripVectorMasterArt; exports.isVectorConnector = isVectorConnector; exports.vectorConnectionSites = vectorConnectionSites; exports.nearestVectorConnectionSite = nearestVectorConnectionSite; exports.vectorConnectorWorldAnchors = vectorConnectorWorldAnchors; exports.routeVectorConnector = routeVectorConnector; exports.rerouteVectorConnectors = rerouteVectorConnectors; exports.sanitizeVectorConnector = sanitizeVectorConnector; exports.VECTOR_CONNECTOR_ROUTE_LABELS = VECTOR_CONNECTOR_ROUTE_LABELS; exports.VECTOR_CONNECTOR_SIDE_LABELS = VECTOR_CONNECTOR_SIDE_LABELS; exports.getVectorConnectorPanel = getVectorConnectorPanel; exports.vectorConnectorTargetAt = vectorConnectorTargetAt; exports.vectorStrokeGradientDefs = vectorStrokeGradientDefs; exports.vectorCornersAttribute = vectorCornersAttribute; exports.applyVectorCornersAttribute = applyVectorCornersAttribute; exports.vectorPathLocalBounds = vectorPathLocalBounds; exports.vectorPaintToSvg = vectorPaintToSvg; exports.vectorStrokeSvgParts = vectorStrokeSvgParts; exports.vectorNodeLocalPaintBounds = vectorNodeLocalPaintBounds; exports.vectorNodeFilterSvg = vectorNodeFilterSvg; exports.widthProfileToAttribute = widthProfileToAttribute; exports.widthProfileFromAttribute = widthProfileFromAttribute; exports.vectorDocumentToSvg = vectorDocumentToSvg; exports.parseSvgTransform = parseSvgTransform; exports.parseVectorSvg = parseVectorSvg; exports.VECTOR_SPATIAL_MIN = VECTOR_SPATIAL_MIN; exports.VectorRTree = VectorRTree; exports.vectorNodePaintBox = vectorNodePaintBox; exports.vectorSpatialIndex = vectorSpatialIndex; exports.vectorNodesNear = vectorNodesNear; exports.cloneAnchor = cloneAnchor; exports.cloneSubpath = cloneSubpath; exports.cloneVectorNode = cloneVectorNode; exports.cloneVectorDocument = cloneVectorDocument; exports.hasPaint = hasPaint; exports.subpathSegmentCount = subpathSegmentCount; exports.subpathSegment = subpathSegment; exports.subpathsToBezier = subpathsToBezier; exports.vectorNodeToBezier = vectorNodeToBezier; exports.vectorPathData = vectorPathData; exports.inferAnchorType = inferAnchorType; exports.bezierToSubpaths = bezierToSubpaths; exports.walkVectorNodes = walkVectorNodes; exports.findVectorNode = findVectorNode; exports.locateVectorNode = locateVectorNode; exports.collectPaintedNodes = collectPaintedNodes; exports.collectPathNodes = collectPathNodes; exports.nodeMatrix = nodeMatrix; exports.vectorPathWorldBezier = vectorPathWorldBezier; exports.vectorNodeBounds = vectorNodeBounds; exports.unionBounds = unionBounds; exports.boundsIntersect = boundsIntersect; exports.boundsFromPoints = boundsFromPoints; exports.hitTestVectorNode = hitTestVectorNode; exports.vectorStrokeOutline = vectorStrokeOutline; exports.hitTestVectorNodes = hitTestVectorNodes; exports.nearestSegment = nearestSegment; exports.transformVectorNode = transformVectorNode; exports.vectorNodeRotation = vectorNodeRotation; exports.vectorWorldMatrix = vectorWorldMatrix; exports.vectorParentMatrix = vectorParentMatrix; exports.translateAnchor = translateAnchor; exports.moveAnchorHandle = moveAnchorHandle; exports.convertAnchor = convertAnchor; exports.insertAnchor = insertAnchor; exports.removeAnchors = removeAnchors; exports.reverseSubpath = reverseSubpath; exports.KAPPA = KAPPA2; exports.rectSubpath = rectSubpath; exports.ellipseSubpath = ellipseSubpath; exports.polygonSubpath = polygonSubpath; exports.starSubpath = starSubpath; exports.lineSubpath = lineSubpath; exports.roundSubpaths = roundSubpaths;
|