@pixerate/editor 0.26.0 → 0.27.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.
Files changed (79) hide show
  1. package/README.md +8 -2
  2. package/dist/agent/index.cjs +59 -9
  3. package/dist/agent/index.cjs.map +1 -1
  4. package/dist/agent/index.d.cts +6 -4
  5. package/dist/agent/index.d.ts +6 -4
  6. package/dist/agent/index.js +52 -2
  7. package/dist/agent/index.js.map +1 -1
  8. package/dist/{builtins-Chj6zv_O.d.ts → builtins-haN82vjT.d.ts} +33 -3
  9. package/dist/{builtins-CdPcLwwF.d.cts → builtins-nMXh9sT3.d.cts} +33 -3
  10. package/dist/canvas/index.cjs +372 -8
  11. package/dist/canvas/index.cjs.map +1 -1
  12. package/dist/canvas/index.d.cts +72 -4
  13. package/dist/canvas/index.d.ts +72 -4
  14. package/dist/canvas/index.js +368 -4
  15. package/dist/canvas/index.js.map +1 -1
  16. package/dist/{chunk-UBCFIABU.js → chunk-5H2OPMXZ.js} +183 -6
  17. package/dist/chunk-5H2OPMXZ.js.map +1 -0
  18. package/dist/{chunk-NFVBT3UZ.cjs → chunk-66IMF6OD.cjs} +108 -25
  19. package/dist/chunk-66IMF6OD.cjs.map +1 -0
  20. package/dist/{chunk-Q2OHWD2A.js → chunk-6IO7WUSU.js} +19 -5
  21. package/dist/chunk-6IO7WUSU.js.map +1 -0
  22. package/dist/{chunk-YOMYSFJU.cjs → chunk-AGR7EVRW.cjs} +49 -35
  23. package/dist/chunk-AGR7EVRW.cjs.map +1 -0
  24. package/dist/{chunk-RRREAOVM.cjs → chunk-HNDSPZ5T.cjs} +4 -4
  25. package/dist/{chunk-RRREAOVM.cjs.map → chunk-HNDSPZ5T.cjs.map} +1 -1
  26. package/dist/chunk-HXDMZQTD.cjs +497 -0
  27. package/dist/chunk-HXDMZQTD.cjs.map +1 -0
  28. package/dist/chunk-IB3ZHQAX.js +497 -0
  29. package/dist/chunk-IB3ZHQAX.js.map +1 -0
  30. package/dist/{chunk-X7HXL2SB.js → chunk-JT7AXQTE.js} +336 -10
  31. package/dist/chunk-JT7AXQTE.js.map +1 -0
  32. package/dist/{chunk-HDYMLS3X.cjs → chunk-MC2LQN5S.cjs} +196 -19
  33. package/dist/chunk-MC2LQN5S.cjs.map +1 -0
  34. package/dist/{chunk-JOIREKL7.js → chunk-UKI64KUD.js} +85 -2
  35. package/dist/chunk-UKI64KUD.js.map +1 -0
  36. package/dist/{chunk-MHEPLBFB.js → chunk-WON34HKM.js} +2 -2
  37. package/dist/{chunk-NQF32I6Z.cjs → chunk-YK5TATOF.cjs} +461 -135
  38. package/dist/chunk-YK5TATOF.cjs.map +1 -0
  39. package/dist/commands/index.cjs +30 -410
  40. package/dist/commands/index.cjs.map +1 -1
  41. package/dist/commands/index.d.cts +1 -1
  42. package/dist/commands/index.d.ts +1 -1
  43. package/dist/commands/index.js +17 -397
  44. package/dist/commands/index.js.map +1 -1
  45. package/dist/{controller-CxXGOEmy.d.cts → controller-w6eRTjF8.d.cts} +67 -2
  46. package/dist/{controller-CxXGOEmy.d.ts → controller-w6eRTjF8.d.ts} +67 -2
  47. package/dist/extensions/index.cjs +23 -5
  48. package/dist/extensions/index.cjs.map +1 -1
  49. package/dist/extensions/index.d.cts +1 -1
  50. package/dist/extensions/index.d.ts +1 -1
  51. package/dist/extensions/index.js +23 -5
  52. package/dist/{index-jcJwmBYt.d.cts → index-C6gaQRH0.d.cts} +53 -4
  53. package/dist/{index-B273Zllk.d.ts → index-DXAv_R08.d.ts} +53 -4
  54. package/dist/index.cjs +66 -26
  55. package/dist/index.cjs.map +1 -1
  56. package/dist/index.d.cts +8 -6
  57. package/dist/index.d.ts +8 -6
  58. package/dist/index.js +46 -6
  59. package/dist/index.js.map +1 -1
  60. package/dist/serializers/index.cjs +5 -3
  61. package/dist/serializers/index.cjs.map +1 -1
  62. package/dist/serializers/index.d.cts +13 -3
  63. package/dist/serializers/index.d.ts +13 -3
  64. package/dist/serializers/index.js +4 -2
  65. package/dist/spreadsheet/index.cjs +22 -2
  66. package/dist/spreadsheet/index.cjs.map +1 -1
  67. package/dist/spreadsheet/index.d.cts +76 -3
  68. package/dist/spreadsheet/index.d.ts +76 -3
  69. package/dist/spreadsheet/index.js +21 -1
  70. package/package.json +1 -1
  71. package/dist/chunk-HDYMLS3X.cjs.map +0 -1
  72. package/dist/chunk-JOIREKL7.js.map +0 -1
  73. package/dist/chunk-NFVBT3UZ.cjs.map +0 -1
  74. package/dist/chunk-NQF32I6Z.cjs.map +0 -1
  75. package/dist/chunk-Q2OHWD2A.js.map +0 -1
  76. package/dist/chunk-UBCFIABU.js.map +0 -1
  77. package/dist/chunk-X7HXL2SB.js.map +0 -1
  78. package/dist/chunk-YOMYSFJU.cjs.map +0 -1
  79. /package/dist/{chunk-MHEPLBFB.js.map → chunk-WON34HKM.js.map} +0 -0
@@ -1,17 +1,16 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2; var _class3; var _class4; var _class5; var _class6; var _class7; var _class8; var _class9; var _class10;
2
2
 
3
3
 
4
- var _chunk26BVFKHUcjs = require('../chunk-26BVFKHU.cjs');
5
4
 
6
5
 
7
6
 
8
7
 
9
8
 
10
9
 
10
+ var _chunk4BVP64JJcjs = require('../chunk-4BVP64JJ.cjs');
11
11
 
12
12
 
13
13
 
14
- var _chunk4BVP64JJcjs = require('../chunk-4BVP64JJ.cjs');
15
14
 
16
15
 
17
16
 
@@ -23,10 +22,11 @@ var _chunk4BVP64JJcjs = require('../chunk-4BVP64JJ.cjs');
23
22
 
24
23
 
25
24
 
25
+ var _chunkWADCJ7A7cjs = require('../chunk-WADCJ7A7.cjs');
26
26
 
27
27
 
28
28
 
29
- var _chunkWADCJ7A7cjs = require('../chunk-WADCJ7A7.cjs');
29
+ var _chunk26BVFKHUcjs = require('../chunk-26BVFKHU.cjs');
30
30
 
31
31
  // src/canvas/clock.ts
32
32
  var pageHidden = () => typeof document !== "undefined" && document.hidden;
@@ -11382,6 +11382,289 @@ function restoreCanvasMainComponent(nodes, id, options = {}) {
11382
11382
  for (const nn of nested) after = rebaseInstance(after, nn, options.tokens);
11383
11383
  return done(nodes, after, [compId], options);
11384
11384
  }
11385
+ var VARIANT_GAP = 20;
11386
+ var variantKey = (values) => formatVariantName(values);
11387
+ function variantNameProblem(kind, s) {
11388
+ const label = kind === "property" ? "Variant property names" : "Variant values";
11389
+ if (!s) return `${label} must not be empty.`;
11390
+ if (/[,=]/.test(s)) return `${label} can't contain "," or "=".`;
11391
+ return void 0;
11392
+ }
11393
+ function cleanVariantPairs(pairs) {
11394
+ const out = {};
11395
+ for (const [rawKey, rawValue] of Object.entries(pairs)) {
11396
+ if (typeof rawValue !== "string") return `"${rawKey}" takes a text value.`;
11397
+ const k = rawKey.trim();
11398
+ const v = rawValue.trim();
11399
+ const problem = _nullishCoalesce(variantNameProblem("property", k), () => ( variantNameProblem("value", v)));
11400
+ if (problem) return problem;
11401
+ out[k] = v;
11402
+ }
11403
+ return out;
11404
+ }
11405
+ function variantOrder(ids, values) {
11406
+ const order = [];
11407
+ for (const id of ids) for (const k of Object.keys(_nullishCoalesce(values.get(id), () => ( {})))) if (!order.includes(k)) order.push(k);
11408
+ return order;
11409
+ }
11410
+ function withVariantValues(node, values, order) {
11411
+ const name = formatVariantName(values, order);
11412
+ const data = { ...dataOf(node), [COMPONENT_DATA_KEY]: { ..._nullishCoalesce(getComponentData(node), () => ( {})), variant: values }, label: name };
11413
+ if (typeof data.name === "string" && data.name.includes("=")) data.name = name;
11414
+ return same(dataOf(node), data) ? node : withData(node, data);
11415
+ }
11416
+ function closestVariant(list, wanted) {
11417
+ const entries = Object.entries(wanted);
11418
+ let best;
11419
+ const better = (a, b) => {
11420
+ for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return a[i] > b[i];
11421
+ return false;
11422
+ };
11423
+ for (const v of list) {
11424
+ const values = getVariantValues(v);
11425
+ const matches2 = entries.map(([k, val]) => values[k] === val ? 1 : 0);
11426
+ const score = [matches2.reduce((a, b) => a + b, 0), ...matches2];
11427
+ if (!best || better(score, best.score)) best = { score, id: v.id };
11428
+ }
11429
+ return _optionalChain([best, 'optionalAccess', _320 => _320.id]);
11430
+ }
11431
+ function variantEditIn(g, setId) {
11432
+ const set = g.get(setId);
11433
+ if (!isCanvasComponentSet(set)) return { code: "not-found", reason: "Choose a component set." };
11434
+ if (owningInstanceIn(g, setId)) return { code: "inside-instance", reason: "A component set inside an instance can't be edited: edit its main." };
11435
+ const variants = variantsIn(g, setId);
11436
+ return { set, variants, values: new Map(variants.map((v) => [v.id, getVariantValues(v)])) };
11437
+ }
11438
+ function addMissingProperties(edit, pairs, defaultValue) {
11439
+ const known = /* @__PURE__ */ new Set();
11440
+ for (const v of edit.values.values()) for (const k of Object.keys(v)) known.add(k);
11441
+ const added = Object.keys(pairs).filter((k) => !known.has(k));
11442
+ if (added.length === 0) return void 0;
11443
+ const problem = variantNameProblem("value", defaultValue);
11444
+ if (problem) return problem;
11445
+ const defs = _optionalChain([dataOf, 'call', _321 => _321(edit.set), 'access', _322 => _322[COMPONENT_SET_DATA_KEY], 'optionalAccess', _323 => _323.properties]);
11446
+ const clash = isRecord(defs) ? added.find((k) => k in defs) : void 0;
11447
+ if (clash) return `"${clash}" is a component property.`;
11448
+ for (const [id, v] of edit.values) {
11449
+ const next = { ...v };
11450
+ for (const k of added) next[k] = defaultValue;
11451
+ edit.values.set(id, next);
11452
+ }
11453
+ return void 0;
11454
+ }
11455
+ function duplicateAmong(values, ids) {
11456
+ for (const id of ids) {
11457
+ const key = variantKey(values.get(id));
11458
+ for (const [other, v] of values) {
11459
+ if (other !== id && variantKey(v) === key) return formatVariantName(values.get(id), variantOrder([...values.keys()], values));
11460
+ }
11461
+ }
11462
+ return void 0;
11463
+ }
11464
+ function writeVariantEdit(edit, extra = []) {
11465
+ const order = variantOrder([...edit.variants.map((v) => v.id), ...extra], edit.values);
11466
+ const updates = /* @__PURE__ */ new Map();
11467
+ for (const v of edit.variants) {
11468
+ const next = withVariantValues(v, edit.values.get(v.id), order);
11469
+ if (next !== v) updates.set(v.id, next);
11470
+ }
11471
+ return updates;
11472
+ }
11473
+ function nextVariantValuesIn(g, setId, fromId) {
11474
+ const variants = variantsIn(g, setId);
11475
+ const base = getVariantValues(g.get(fromId));
11476
+ const first = variantOptionsIn(g, setId)[0];
11477
+ const prop = _nullishCoalesce(_optionalChain([first, 'optionalAccess', _324 => _324.name]), () => ( "Property 1"));
11478
+ const used = new Set(variants.map((v) => variantKey(getVariantValues(v))));
11479
+ for (let k = variants.length + 1; ; k++) {
11480
+ const values = { ...base, [prop]: `Variant${k}` };
11481
+ if (!_optionalChain([first, 'optionalAccess', _325 => _325.values, 'access', _326 => _326.includes, 'call', _327 => _327(`Variant${k}`)]) && !used.has(variantKey(values))) return values;
11482
+ }
11483
+ }
11484
+ function getNextVariantValues(nodes, setId, from) {
11485
+ const g = new Graph(nodes);
11486
+ return nextVariantValuesIn(g, setId, _nullishCoalesce(from, () => ( defaultVariantIn(g, setId))));
11487
+ }
11488
+ function relayoutSet(nodes, setId, options) {
11489
+ if (options.layout === false || !getAutoLayout(nodes.find((n) => n.id === setId))) return nodes;
11490
+ return applyNodeUpdates(nodes, layoutUpMany(nodes, [setId], typeof options.layout === "object" ? options.layout : {}));
11491
+ }
11492
+ function addCanvasVariant(nodes, setId, options = {}) {
11493
+ const g = new Graph(nodes);
11494
+ const edit = variantEditIn(g, setId);
11495
+ if (!("set" in edit)) return fail(nodes, edit.code, edit.reason);
11496
+ if (edit.variants.length === 0) return fail(nodes, "invalid", "The set has no variant to duplicate.");
11497
+ const fromId = _nullishCoalesce(options.from, () => ( defaultVariantIn(g, setId)));
11498
+ const source = edit.variants.find((v) => v.id === fromId);
11499
+ if (!source) return fail(nodes, "not-found", `"${fromId}" is not a variant of this set.`);
11500
+ const wanted = cleanVariantPairs(_nullishCoalesce(options.variant, () => ( nextVariantValuesIn(g, setId, fromId))));
11501
+ if (typeof wanted === "string") return fail(nodes, "invalid", wanted);
11502
+ const problem = addMissingProperties(edit, wanted, (_nullishCoalesce(options.defaultValue, () => ( "Default"))).trim());
11503
+ if (problem) return fail(nodes, "invalid", problem);
11504
+ const id = _nullishCoalesce(options.id, () => ( uniqueId(`${setId}-variant`, g.byId)));
11505
+ if (g.get(id)) return fail(nodes, "invalid", `Id "${id}" is taken.`);
11506
+ edit.values.set(id, { ...edit.values.get(fromId), ...wanted });
11507
+ const dup = duplicateAmong(edit.values, [id]);
11508
+ if (dup) return fail(nodes, "invalid", `A variant with ${dup} exists already.`);
11509
+ const autoLayout = !!getAutoLayout(edit.set);
11510
+ const { width, height } = getNodeSize(source);
11511
+ let position = options.position ? { ...options.position } : { ...source.position };
11512
+ if (!options.position && !autoLayout) {
11513
+ const rects = edit.variants.map((v) => ({ ...v.position, ...getNodeSize(v) }));
11514
+ position = { x: source.position.x + width + VARIANT_GAP, y: source.position.y };
11515
+ for (let k = 0; k <= rects.length; k++) {
11516
+ const hit = rects.find((r) => position.x < r.x + r.width && r.x < position.x + width && position.y < r.y + r.height && r.y < position.y + height);
11517
+ if (!hit) break;
11518
+ position = { x: hit.x + hit.width + VARIANT_GAP, y: position.y };
11519
+ }
11520
+ }
11521
+ const taken = new Set(g.byId.keys());
11522
+ taken.add(id);
11523
+ const map = /* @__PURE__ */ new Map([[fromId, id]]);
11524
+ const sub3 = g.subtree(fromId);
11525
+ for (const d of sub3) {
11526
+ if (d === fromId) continue;
11527
+ const nid = uniqueId(`${id}-${d}`, taken);
11528
+ taken.add(nid);
11529
+ map.set(d, nid);
11530
+ }
11531
+ const order = variantOrder([...edit.variants.map((v) => v.id), id], edit.values);
11532
+ const subSet = new Set(sub3);
11533
+ const copies = nodes.filter((n) => subSet.has(n.id)).map((n) => {
11534
+ const next = { ...n, id: map.get(n.id) };
11535
+ if (n.parentId !== void 0 && n.id !== fromId) next.parentId = _nullishCoalesce(map.get(n.parentId), () => ( n.parentId));
11536
+ for (const k of RUNTIME_KEYS) delete next[k];
11537
+ if (n.id !== fromId) return next;
11538
+ next.position = position;
11539
+ return withVariantValues(next, edit.values.get(id), order);
11540
+ });
11541
+ const updates = writeVariantEdit(edit, [id]);
11542
+ const inSet = new Set(g.subtree(setId));
11543
+ let last = -1;
11544
+ nodes.forEach((n, i) => {
11545
+ if (inSet.has(n.id)) last = i;
11546
+ });
11547
+ let after = [];
11548
+ nodes.forEach((n, i) => {
11549
+ after.push(_nullishCoalesce(updates.get(n.id), () => ( n)));
11550
+ if (i === last) after.push(...copies);
11551
+ });
11552
+ if (autoLayout && !options.position) after = relayoutSet(after, setId, options);
11553
+ else {
11554
+ const size = getNodeSize(edit.set);
11555
+ const w = Math.max(size.width, position.x + width + VARIANT_GAP);
11556
+ const h = Math.max(size.height, position.y + height + VARIANT_GAP);
11557
+ if (w !== size.width || h !== size.height) after = applyNodeUpdates(after, [{ id: setId, width: w, height: h }]);
11558
+ }
11559
+ return done(nodes, after, [id], options);
11560
+ }
11561
+ function removeCanvasVariant(nodes, variantId, options = {}) {
11562
+ const g = new Graph(nodes);
11563
+ const set = variantSetIn(g, variantId);
11564
+ if (!set) return fail(nodes, "not-found", "Choose a variant of a component set.");
11565
+ if (owningInstanceIn(g, set.id)) return fail(nodes, "inside-instance", "A component set inside an instance can't be edited: edit its main.");
11566
+ const others = variantsIn(g, set.id).filter((v) => v.id !== variantId);
11567
+ if (others.length === 0) return fail(nodes, "invalid", "A component set needs at least one variant: delete the set instead.");
11568
+ const replacement = closestVariant(others, getVariantValues(g.get(variantId)));
11569
+ const swap = (v) => v === variantId ? replacement : v;
11570
+ const repointed = nodes.map((n) => {
11571
+ const data = dataOf(n);
11572
+ let next;
11573
+ const inst = getInstanceData(n);
11574
+ if (inst) {
11575
+ const moved = { ...inst, componentId: swap(inst.componentId) };
11576
+ if (inst.properties) moved.properties = Object.fromEntries(Object.entries(inst.properties).map(([k, v]) => [k, swap(v)]));
11577
+ if (!same(moved, inst)) next = { ...data, [INSTANCE_DATA_KEY]: moved };
11578
+ }
11579
+ for (const key of [COMPONENT_DATA_KEY, COMPONENT_SET_DATA_KEY]) {
11580
+ const owner = data[key];
11581
+ if (!isRecord(owner) || !isRecord(owner.properties)) continue;
11582
+ const defs = {};
11583
+ for (const [k, def] of Object.entries(owner.properties)) {
11584
+ defs[k] = def.type === "instanceSwap" ? { ...def, default: swap(def.default), ...def.preferred ? { preferred: [...new Set(def.preferred.map(swap))] } : {} } : def;
11585
+ }
11586
+ if (!same(defs, owner.properties)) next = { ..._nullishCoalesce(next, () => ( data)), [key]: { ...owner, properties: defs } };
11587
+ }
11588
+ return next ? withData(n, next) : n;
11589
+ });
11590
+ const mid = syncCanvasComponents(nodes, repointed, options);
11591
+ const gone = new Set(new Graph(mid).subtree(variantId));
11592
+ const after = relayoutSet(
11593
+ mid.filter((n) => !gone.has(n.id)),
11594
+ set.id,
11595
+ options
11596
+ );
11597
+ return { ok: true, nodes: syncCanvasComponents(mid, after, options), ids: [replacement] };
11598
+ }
11599
+ function setCanvasVariantProperties(nodes, variantId, values, options = {}) {
11600
+ const g = new Graph(nodes);
11601
+ const set = variantSetIn(g, variantId);
11602
+ if (!set) return fail(nodes, "not-found", "Choose a variant of a component set.");
11603
+ const edit = variantEditIn(g, set.id);
11604
+ if (!("set" in edit)) return fail(nodes, edit.code, edit.reason);
11605
+ const wanted = cleanVariantPairs(values);
11606
+ if (typeof wanted === "string") return fail(nodes, "invalid", wanted);
11607
+ const problem = addMissingProperties(edit, wanted, (_nullishCoalesce(options.defaultValue, () => ( "Default"))).trim());
11608
+ if (problem) return fail(nodes, "invalid", problem);
11609
+ edit.values.set(variantId, { ...edit.values.get(variantId), ...wanted });
11610
+ const dup = duplicateAmong(edit.values, [variantId]);
11611
+ if (dup) return fail(nodes, "invalid", `A variant with ${dup} exists already.`);
11612
+ const updates = writeVariantEdit(edit);
11613
+ if (updates.size === 0) return { ok: true, nodes, ids: [variantId] };
11614
+ return done(nodes, nodes.map((n) => _nullishCoalesce(updates.get(n.id), () => ( n))), [variantId], options);
11615
+ }
11616
+ function updateInstanceValues(g, setId, updates, fn) {
11617
+ const ids = new Set(variantsIn(g, setId).map((v) => v.id));
11618
+ for (const n of g.nodes) {
11619
+ const inst = getInstanceData(n);
11620
+ if (!_optionalChain([inst, 'optionalAccess', _328 => _328.properties]) || !ids.has(inst.componentId)) continue;
11621
+ const props = fn({ ...inst.properties });
11622
+ if (same(props, inst.properties)) continue;
11623
+ const cur = _nullishCoalesce(updates.get(n.id), () => ( n));
11624
+ updates.set(n.id, withData(cur, { ...dataOf(cur), [INSTANCE_DATA_KEY]: { ...inst, properties: props } }));
11625
+ }
11626
+ }
11627
+ function renameCanvasVariantProperty(nodes, setId, name, newName, options = {}) {
11628
+ const g = new Graph(nodes);
11629
+ const edit = variantEditIn(g, setId);
11630
+ if (!("set" in edit)) return fail(nodes, edit.code, edit.reason);
11631
+ const known = variantOptionsIn(g, setId);
11632
+ if (!known.some((o) => o.name === name)) return fail(nodes, "unknown-property", `Unknown variant property "${name}".`);
11633
+ const to = newName.trim();
11634
+ const problem = variantNameProblem("property", to);
11635
+ if (problem) return fail(nodes, "invalid", problem);
11636
+ if (to === name) return { ok: true, nodes, ids: [setId] };
11637
+ if (known.some((o) => o.name === to)) return fail(nodes, "invalid", `"${to}" exists already.`);
11638
+ if (to in propertyDefsIn(g, edit.variants[0].id)) return fail(nodes, "invalid", `"${to}" is a component property.`);
11639
+ const rename = (v) => Object.fromEntries(Object.entries(v).map(([k, val]) => [k === name ? to : k, val]));
11640
+ for (const [id, v] of edit.values) edit.values.set(id, rename(v));
11641
+ const updates = writeVariantEdit(edit);
11642
+ updateInstanceValues(g, setId, updates, (props) => name in props ? rename(props) : props);
11643
+ return done(nodes, nodes.map((n) => _nullishCoalesce(updates.get(n.id), () => ( n))), [setId], options);
11644
+ }
11645
+ function renameCanvasVariantValue(nodes, setId, property, value, newValue, options = {}) {
11646
+ const g = new Graph(nodes);
11647
+ const edit = variantEditIn(g, setId);
11648
+ if (!("set" in edit)) return fail(nodes, edit.code, edit.reason);
11649
+ const option = variantOptionsIn(g, setId).find((o) => o.name === property);
11650
+ if (!option) return fail(nodes, "unknown-property", `Unknown variant property "${property}".`);
11651
+ if (!option.values.includes(value)) return fail(nodes, "invalid", `"${property}" has no value "${value}".`);
11652
+ const to = newValue.trim();
11653
+ const problem = variantNameProblem("value", to);
11654
+ if (problem) return fail(nodes, "invalid", problem);
11655
+ if (to === value) return { ok: true, nodes, ids: [setId] };
11656
+ const touched = [];
11657
+ for (const [id, v] of edit.values) {
11658
+ if (v[property] !== value) continue;
11659
+ edit.values.set(id, { ...v, [property]: to });
11660
+ touched.push(id);
11661
+ }
11662
+ const dup = duplicateAmong(edit.values, touched);
11663
+ if (dup) return fail(nodes, "invalid", `A variant with ${dup} exists already.`);
11664
+ const updates = writeVariantEdit(edit);
11665
+ updateInstanceValues(g, setId, updates, (props) => props[property] === value ? { ...props, [property]: to } : props);
11666
+ return done(nodes, nodes.map((n) => _nullishCoalesce(updates.get(n.id), () => ( n))), [setId], options);
11667
+ }
11385
11668
 
11386
11669
  // src/canvas/componentsController.ts
11387
11670
  function makePatch(from, to) {
@@ -11418,7 +11701,7 @@ function createCanvasComponentsController(options) {
11418
11701
  layout: options.layout,
11419
11702
  tokens: options.tokens
11420
11703
  });
11421
- const selection = (ids) => ids ? [...ids] : _nullishCoalesce(_optionalChain([options, 'access', _320 => _320.getSelectedIds, 'optionalCall', _321 => _321()]), () => ( options.getNodes().filter((n) => n.selected).map((n) => n.id)));
11704
+ const selection = (ids) => ids ? [...ids] : _nullishCoalesce(_optionalChain([options, 'access', _329 => _329.getSelectedIds, 'optionalCall', _330 => _330()]), () => ( options.getNodes().filter((n) => n.selected).map((n) => n.id)));
11422
11705
  const target = (id) => _nullishCoalesce(id, () => ( selection()[0]));
11423
11706
  function set(next) {
11424
11707
  synced = next;
@@ -11449,6 +11732,24 @@ function createCanvasComponentsController(options) {
11449
11732
  }
11450
11733
  const reason = (result) => result.ok ? true : result.reason;
11451
11734
  const nodes = () => options.getNodes();
11735
+ const refused = (why) => ({ ok: false, nodes: nodes(), code: "not-found", reason: why });
11736
+ const setOf = (id) => {
11737
+ const at = target(id);
11738
+ const node = at ? nodes().find((n) => n.id === at) : void 0;
11739
+ if (!node) return void 0;
11740
+ return isCanvasComponentSet(node) ? node.id : getVariantSet(nodes(), node.id);
11741
+ };
11742
+ const variantOf = (id) => {
11743
+ const at = target(id);
11744
+ return at && getVariantSet(nodes(), at) ? at : void 0;
11745
+ };
11746
+ const NO_SET = "Select a component set or one of its variants.";
11747
+ const NO_VARIANT = "Select a variant of a component set.";
11748
+ const addOptions = (setId, addOptions_) => {
11749
+ if (addOptions_.from !== void 0 || setId !== void 0) return addOptions_;
11750
+ const v = variantOf();
11751
+ return v ? { ...addOptions_, from: v } : addOptions_;
11752
+ };
11452
11753
  const controller = {
11453
11754
  sync,
11454
11755
  /** Rebuilds every instance from its main (e.g. after loading), not recorded in history. */
@@ -11563,6 +11864,63 @@ function createCanvasComponentsController(options) {
11563
11864
  (n) => setCanvasComponentProperty(n, componentId, name, def, { ...syncOptions(), ...propertyOptions })
11564
11865
  );
11565
11866
  },
11867
+ /**
11868
+ * Adds a variant to a set (default: the selection's set) by duplicating `from` (default:
11869
+ * the selected variant, else the default variant) with the given `variant` values.
11870
+ */
11871
+ addVariant(setId, variantOptions = {}) {
11872
+ const set2 = setOf(setId);
11873
+ if (!set2) return refused(NO_SET);
11874
+ const opts = addOptions(setId, variantOptions);
11875
+ return run("Add Variant", (n) => addCanvasVariant(n, set2, { ...syncOptions(), ...opts }));
11876
+ },
11877
+ canAddVariant(setId, variantOptions = {}) {
11878
+ const set2 = setOf(setId);
11879
+ return set2 ? reason(addCanvasVariant(nodes(), set2, { ...addOptions(setId, variantOptions), layout: false })) : NO_SET;
11880
+ },
11881
+ /** Removes a variant (default: the selected one); its instances switch to the closest variant. */
11882
+ removeVariant(variantId) {
11883
+ const v = variantOf(variantId);
11884
+ if (!v) return refused(NO_VARIANT);
11885
+ return run("Remove Variant", (n) => removeCanvasVariant(n, v, syncOptions()));
11886
+ },
11887
+ canRemoveVariant(variantId) {
11888
+ const v = variantOf(variantId);
11889
+ return v ? reason(removeCanvasVariant(nodes(), v, { layout: false })) : NO_VARIANT;
11890
+ },
11891
+ /** Edits a variant's property values (default: the selected variant). */
11892
+ setVariantProperties(values, variantId, variantOptions = {}) {
11893
+ const v = variantOf(variantId);
11894
+ if (!v) return refused(NO_VARIANT);
11895
+ return run("Edit Variant", (n) => setCanvasVariantProperties(n, v, values, { ...syncOptions(), ...variantOptions }));
11896
+ },
11897
+ canSetVariantProperties(values, variantId) {
11898
+ const v = variantOf(variantId);
11899
+ if (!v) return NO_VARIANT;
11900
+ return values ? reason(setCanvasVariantProperties(nodes(), v, values, { layout: false })) : true;
11901
+ },
11902
+ /** Renames a variant property across a set (default: the selection's set). */
11903
+ renameVariantProperty(name, newName, setId) {
11904
+ const set2 = setOf(setId);
11905
+ if (!set2) return refused(NO_SET);
11906
+ return run("Rename Variant Property", (n) => renameCanvasVariantProperty(n, set2, name, newName, syncOptions()));
11907
+ },
11908
+ canRenameVariantProperty(name, newName, setId) {
11909
+ const set2 = setOf(setId);
11910
+ if (!set2) return NO_SET;
11911
+ return name !== void 0 && newName !== void 0 ? reason(renameCanvasVariantProperty(nodes(), set2, name, newName, { layout: false })) : true;
11912
+ },
11913
+ /** Renames a value of a variant property across a set (default: the selection's set). */
11914
+ renameVariantValue(property, value, newValue, setId) {
11915
+ const set2 = setOf(setId);
11916
+ if (!set2) return refused(NO_SET);
11917
+ return run("Rename Variant Value", (n) => renameCanvasVariantValue(n, set2, property, value, newValue, syncOptions()));
11918
+ },
11919
+ canRenameVariantValue(property, value, newValue, setId) {
11920
+ const set2 = setOf(setId);
11921
+ if (!set2) return NO_SET;
11922
+ return property !== void 0 && value !== void 0 && newValue !== void 0 ? reason(renameCanvasVariantValue(nodes(), set2, property, value, newValue, { layout: false })) : true;
11923
+ },
11566
11924
  /** Binds (or with `null` unbinds) a main layer's field to a component property. */
11567
11925
  bindComponentProperty(layerId, field, name) {
11568
11926
  return run("Bind Component Property", (n) => bindCanvasComponentProperty(n, layerId, field, name, syncOptions()));
@@ -11572,12 +11930,12 @@ function createCanvasComponentsController(options) {
11572
11930
  const at = target(id);
11573
11931
  const list = sync();
11574
11932
  const inst = at ? getOwningInstance(list, at) : void 0;
11575
- const main = inst ? _optionalChain([getInstanceData, 'call', _322 => _322(list.find((n) => n.id === inst)), 'optionalAccess', _323 => _323.componentId]) : void 0;
11933
+ const main = inst ? _optionalChain([getInstanceData, 'call', _331 => _331(list.find((n) => n.id === inst)), 'optionalAccess', _332 => _332.componentId]) : void 0;
11576
11934
  const node = main ? list.find((n) => n.id === main) : void 0;
11577
11935
  if (!node) return void 0;
11578
11936
  const next = list.map((n) => !!n.selected === (n.id === main) ? n : { ...n, selected: n.id === main });
11579
11937
  set(next);
11580
- _optionalChain([options, 'access', _324 => _324.onReveal, 'optionalCall', _325 => _325(next.find((n) => n.id === main))]);
11938
+ _optionalChain([options, 'access', _333 => _333.onReveal, 'optionalCall', _334 => _334(next.find((n) => n.id === main))]);
11581
11939
  return main;
11582
11940
  },
11583
11941
  canGoToMainComponent(id) {
@@ -11602,7 +11960,7 @@ function createCanvasComponentsController(options) {
11602
11960
  }
11603
11961
  var CANVAS_COMPONENT_DRAG_TYPE = "application/x-pixerate-component";
11604
11962
  function getCanvasComponentDragId(dataTransfer) {
11605
- const id = _optionalChain([dataTransfer, 'optionalAccess', _326 => _326.getData, 'call', _327 => _327(CANVAS_COMPONENT_DRAG_TYPE)]);
11963
+ const id = _optionalChain([dataTransfer, 'optionalAccess', _335 => _335.getData, 'call', _336 => _336(CANVAS_COMPONENT_DRAG_TYPE)]);
11606
11964
  return id ? id : void 0;
11607
11965
  }
11608
11966
 
@@ -11954,5 +12312,11 @@ function getCanvasComponentDragId(dataTransfer) {
11954
12312
 
11955
12313
 
11956
12314
 
11957
- exports.ANIMATABLE_PROPERTIES = ANIMATABLE_PROPERTIES; exports.ANIMATION_DATA_KEY = ANIMATION_DATA_KEY; exports.ANIMATION_EASING_LABELS = ANIMATION_EASING_LABELS; exports.ANIMATION_EASING_PRESETS = ANIMATION_EASING_PRESETS; exports.ANIMATION_TIME_EPSILON = ANIMATION_TIME_EPSILON; exports.AUTO_LAYOUT_DATA_KEY = AUTO_LAYOUT_DATA_KEY; exports.AnimationEditError = AnimationEditError; exports.AnimationPlayer = AnimationPlayer; exports.CANVAS_COMPONENT_DRAG_TYPE = CANVAS_COMPONENT_DRAG_TYPE; exports.CANVAS_TOKEN_PROPERTIES = CANVAS_TOKEN_PROPERTIES; exports.CHILD_LAYOUT_DATA_KEY = CHILD_LAYOUT_DATA_KEY; exports.COMPONENT_DATA_KEY = COMPONENT_DATA_KEY; exports.COMPONENT_OVERRIDES_DATA_KEY = COMPONENT_OVERRIDES_DATA_KEY; exports.COMPONENT_PROPERTY_REFS_DATA_KEY = COMPONENT_PROPERTY_REFS_DATA_KEY; exports.COMPONENT_SET_DATA_KEY = COMPONENT_SET_DATA_KEY; exports.COMPONENT_SOURCE_DATA_KEY = COMPONENT_SOURCE_DATA_KEY; exports.CONNECTION_LINE_TYPES = CONNECTION_LINE_TYPES; exports.CSS_ANIMATION_PROPERTIES = CSS_ANIMATION_PROPERTIES; exports.CUBIC_BEZIER_PRESETS = CUBIC_BEZIER_PRESETS; exports.CanvasScenesStore = CanvasScenesStore; exports.DEFAULT_ARRANGE_SHORTCUTS = _chunk26BVFKHUcjs.DEFAULT_ARRANGE_SHORTCUTS; exports.DEFAULT_NODE_HEIGHT = _chunkWADCJ7A7cjs.DEFAULT_NODE_HEIGHT; exports.DEFAULT_NODE_WIDTH = _chunkWADCJ7A7cjs.DEFAULT_NODE_WIDTH; exports.DEFAULT_PLACEMENT_GAP = _chunkWADCJ7A7cjs.DEFAULT_PLACEMENT_GAP; exports.INSTANCE_DATA_KEY = INSTANCE_DATA_KEY; exports.LOCKED_DATA_KEY = LOCKED_DATA_KEY; exports.LOCKED_PREVIOUS_FLAGS_KEY = LOCKED_PREVIOUS_FLAGS_KEY; exports.MAX_KEYFRAME_REFS = MAX_KEYFRAME_REFS; exports.ManualClock = ManualClock; exports.PathOpsError = PathOpsError; exports.RESIZE_HANDLES = RESIZE_HANDLES; exports.SHAPE_DATA_KEY = SHAPE_DATA_KEY; exports.SHAPE_KINDS = SHAPE_KINDS; exports.SHAPE_NODE_TYPE = SHAPE_NODE_TYPE; exports.SHAPE_OPERATIONS = SHAPE_OPERATIONS; exports.StreamingLayoutManager = StreamingLayoutManager; exports.TOKEN_BINDINGS_DATA_KEY = TOKEN_BINDINGS_DATA_KEY; exports.TOKEN_MODES_DATA_KEY = TOKEN_MODES_DATA_KEY; exports.addKeyframesAtTime = addKeyframesAtTime; exports.alignNodes = alignNodes; exports.animateNode = animateNode; exports.applyAnimation = applyAnimation; exports.applyAnimationOverrides = applyAnimationOverrides; exports.applyConstraints = applyConstraints; exports.applyNodeUpdates = applyNodeUpdates; exports.applyShapeCombination = applyShapeCombination; exports.applyShapeReplacement = applyShapeReplacement; exports.arcToCubics = arcToCubics; exports.bezierPathArea = bezierPathArea; exports.bezierPathBounds = bezierPathBounds; exports.bezierPathLength = bezierPathLength; exports.bezierPathPointAtLength = bezierPathPointAtLength; exports.bezierPathSignedArea = bezierPathSignedArea; exports.bezierPathToSvg = bezierPathToSvg; exports.bindCanvasComponentProperty = bindCanvasComponentProperty; exports.bindCanvasToken = bindCanvasToken; exports.blendLayout = blendLayout; exports.boundsOf = _chunkWADCJ7A7cjs.boundsOf; exports.calculateDagreReflowDisplacement = calculateDagreReflowDisplacement; exports.calculateDirectionalDisplacement = calculateDirectionalDisplacement; exports.canCombineShapeNodes = canCombineShapeNodes; exports.canOffsetShapeNodes = canOffsetShapeNodes; exports.canOutlineShapeNodeStrokes = canOutlineShapeNodeStrokes; exports.canvasHeight = canvasHeight; exports.centerNodes = _chunkWADCJ7A7cjs.centerNodes; exports.centre = _chunkWADCJ7A7cjs.centre; exports.clampAnimationValue = clampAnimationValue; exports.clampLayoutSize = clampLayoutSize; exports.closeContour = closeContour; exports.collectDescendantIds = collectDescendantIds; exports.combineCanvasComponentsAsVariants = combineCanvasComponentsAsVariants; exports.combineShapeNodes = combineShapeNodes; exports.computeNodesBoundingBox = computeNodesBoundingBox; exports.computeSnapGuides = computeSnapGuides; exports.connectedOnly = connectedOnly; exports.contourSignedArea = contourSignedArea; exports.contoursToPath = contoursToPath; exports.copyKeyframes = copyKeyframes; exports.countPathSegments = countPathSegments; exports.createAnimationPlayer = createAnimationPlayer; exports.createBezierTrajectory = createBezierTrajectory; exports.createCanvasAnimationController = createCanvasAnimationController; exports.createCanvasArrangeController = createCanvasArrangeController; exports.createCanvasAutoLayoutController = createCanvasAutoLayoutController; exports.createCanvasComponent = createCanvasComponent; exports.createCanvasComponentsController = createCanvasComponentsController; exports.createCanvasInstance = createCanvasInstance; exports.createCanvasScenesStore = createCanvasScenesStore; exports.createFanOutTrajectory = createFanOutTrajectory; exports.createGuideIndex = createGuideIndex; exports.createNodeGuideIndex = createNodeGuideIndex; exports.createNodeLookup = createNodeLookup; exports.cubicBezierAt = cubicBezierAt; exports.cubicPointAt = cubicPointAt; exports.cubicsToPathData = cubicsToPathData; exports.dashContours = dashContours; exports.defaultEasing = defaultEasing; exports.deleteKeyframes = deleteKeyframes; exports.detachCanvasInstance = detachCanvasInstance; exports.detachTokenBindings = detachTokenBindings; exports.diffOverrideGroups = diffOverrideGroups; exports.distanceToBezierPath = distanceToBezierPath; exports.distributeNodes = distributeNodes; exports.dividePaths = dividePaths; exports.dividePolygons = dividePolygons; exports.easingFromInfluence = easingFromInfluence; exports.easingLabel = easingLabel; exports.easingToCss = easingToCss; exports.ensureLayout = _chunkWADCJ7A7cjs.ensureLayout; exports.estimateCanvasHeight = estimateCanvasHeight; exports.estimateNodeSize = _chunkWADCJ7A7cjs.estimateNodeSize; exports.evaluateAnimation = evaluateAnimation; exports.evaluateEasing = evaluateEasing; exports.evaluateTrack = evaluateTrack; exports.excludePaths = excludePaths; exports.exportCssAnimation = exportCssAnimation; exports.findConnectorSnap = findConnectorSnap; exports.findVariant = findVariant; exports.fitCubicRun = fitCubicRun; exports.fitCubics = fitCubics; exports.fitFreehandPath = fitFreehandPath; exports.fitPathData = fitPathData; exports.fitViewportToNodes = fitViewportToNodes; exports.fitViewportToRect = fitViewportToRect; exports.flattenSvgPath = flattenSvgPath; exports.flowSide = _chunkWADCJ7A7cjs.flowSide; exports.formatAnimationTime = formatAnimationTime; exports.formatNumber = formatNumber2; exports.formatOklab = formatOklab; exports.formatVariantName = formatVariantName; exports.getAbsolutePosition = getAbsolutePosition; exports.getAnimatableProperty = getAnimatableProperty; exports.getAnimatedProperties = getAnimatedProperties; exports.getAnimatedValue = getAnimatedValue; exports.getAnimationDuration = getAnimationDuration; exports.getAnimationTrack = getAnimationTrack; exports.getAutoLayout = getAutoLayout; exports.getAutoLayoutGrid = getAutoLayoutGrid; exports.getAutoLayoutInsertTarget = getAutoLayoutInsertTarget; exports.getBindableTokenProperties = getBindableTokenProperties; exports.getCanvasComponentDragId = getCanvasComponentDragId; exports.getCanvasTokenProperty = getCanvasTokenProperty; exports.getCenteredNodePosition = _chunkWADCJ7A7cjs.getCenteredNodePosition; exports.getChildLayout = getChildLayout; exports.getComponentData = getComponentData; exports.getComponentInstances = getComponentInstances; exports.getComponentPropertyDefs = getComponentPropertyDefs; exports.getComponentPropertyRefs = getComponentPropertyRefs; exports.getComponentSourceId = getComponentSourceId; exports.getCssPropertyAnimations = getCssPropertyAnimations; exports.getDefaultVariant = getDefaultVariant; exports.getEffectiveTokenModes = getEffectiveTokenModes; exports.getFlowChildren = getFlowChildren; exports.getInstanceData = getInstanceData; exports.getInstanceProperties = getInstanceProperties; exports.getInstanceStatus = getInstanceStatus; exports.getKeyframeTimes = getKeyframeTimes; exports.getLayerName = getLayerName; exports.getLayoutParent = getLayoutParent; exports.getLayoutSizing = getLayoutSizing; exports.getLayoutedNodes = _chunkWADCJ7A7cjs.getLayoutedNodes; exports.getNodeAnimation = getNodeAnimation; exports.getNodeOverrides = getNodeOverrides; exports.getNodeRect = getNodeRect; exports.getNodeShape = getNodeShape; exports.getNodeSize = getNodeSize; exports.getNodeTokenBindings = getNodeTokenBindings; exports.getNodeTokenModes = getNodeTokenModes; exports.getOwningComponent = getOwningComponent; exports.getOwningInstance = getOwningInstance; exports.getResizingNodeRect = getResizingNodeRect; exports.getRootInstance = getRootInstance; exports.getShapeRenderData = getShapeRenderData; exports.getShapeSvg = getShapeSvg; exports.getTimelineRows = getTimelineRows; exports.getTimelineTicks = getTimelineTicks; exports.getTokenPropertyScope = getTokenPropertyScope; exports.getTokensForProperty = getTokensForProperty; exports.getVariantConflicts = getVariantConflicts; exports.getVariantOptions = getVariantOptions; exports.getVariantSet = getVariantSet; exports.getVariantValues = getVariantValues; exports.handlePoint = handlePoint; exports.hasVisibleStroke = hasVisibleStroke; exports.inferResizeHandle = inferResizeHandle; exports.inspectCanvasInstance = inspectCanvasInstance; exports.inspectNodeTokens = inspectNodeTokens; exports.interpolateAnimationValue = interpolateAnimationValue; exports.intersectPaths = intersectPaths; exports.intersectPolygons = intersectPolygons; exports.invertNodeUpdates = invertNodeUpdates; exports.isAnimationEasing = isAnimationEasing; exports.isAnimationKeyframe = isAnimationKeyframe; exports.isAutoLayoutFrame = isAutoLayoutFrame; exports.isCanvasComponent = isCanvasComponent; exports.isCanvasComponentSet = isCanvasComponentSet; exports.isCanvasInstance = isCanvasInstance; exports.isCssExportExact = isCssExportExact; exports.isEventFromTextInput = isEventFromTextInput; exports.isInsideInstance = isInsideInstance; exports.isKeyframeSelected = isKeyframeSelected; exports.isLocked = isLocked; exports.isMeasureModifierHeld = isMeasureModifierHeld; exports.isNodeAnimated = isNodeAnimated; exports.isShapeDescription = isShapeDescription; exports.isShapeNode = isShapeNode; exports.isStraightCubic = isStraightCubic; exports.isValidCanvasEdge = isValidCanvasEdge; exports.isValidCanvasNode = isValidCanvasNode; exports.isValidCanvasScene = isValidCanvasScene; exports.isValidUrl = isValidUrl; exports.layoutAll = layoutAll; exports.layoutBounds = layoutBounds; exports.layoutFrame = layoutFrame; exports.layoutUp = layoutUp; exports.layoutUpMany = layoutUpMany; exports.linearPositionTrajectory = linearPositionTrajectory; exports.linearTrajectory = linearTrajectory; exports.listCanvasComponents = listCanvasComponents; exports.lockNodes = lockNodes; exports.makeSizingCoherent = makeSizingCoherent; exports.matchArrangeShortcut = _chunk26BVFKHUcjs.matchArrangeShortcut; exports.matchSize = matchSize; exports.measureBetween = measureBetween; exports.measureLabel = measureLabel; exports.measureSelection = measureSelection; exports.measureToLine = measureToLine; exports.mergeNodeUpdates = mergeNodeUpdates; exports.mixColorsOklab = mixColorsOklab; exports.moveKeyframes = moveKeyframes; exports.moveLayoutChild = moveLayoutChild; exports.multiPolygonArea = multiPolygonArea; exports.multiPolygonBounds = multiPolygonBounds; exports.nearestHandlePositions = nearestHandlePositions; exports.normalizeBezierPath = normalizeBezierPath; exports.normalizeKeyframes = normalizeKeyframes; exports.offsetPath = offsetPath; exports.offsetShapeNodes = offsetShapeNodes; exports.oklabToRgb = oklabToRgb; exports.oppositePosition = oppositePosition; exports.outlineShapeNodeStrokes = outlineShapeNodeStrokes; exports.outlineStroke = outlineStroke; exports.overlaps = _chunkWADCJ7A7cjs.overlaps; exports.pageHidden = pageHidden; exports.parseCanvasClipboardData = parseCanvasClipboardData; exports.parseCanvasScenes = parseCanvasScenes; exports.parseCssEasing = parseCssEasing; exports.parseKeyframeClipboard = parseKeyframeClipboard; exports.parseNodeStyleDeclarations = parseNodeStyleDeclarations; exports.parseOklab = parseOklab; exports.parseSvgPath = parseSvgPath; exports.parseVariantName = parseVariantName; exports.pasteKeyframes = pasteKeyframes; exports.pathBoolean = pathBoolean; exports.pathToContours = pathToContours; exports.placeBeside = _chunkWADCJ7A7cjs.placeBeside; exports.playWebAnimations = playWebAnimations; exports.pointInBezierPath = pointInBezierPath; exports.pointInMultiPolygon = pointInMultiPolygon; exports.pointInRings = pointInRings; exports.polygonArea = polygonArea; exports.polygonBoolean = polygonBoolean; exports.polygonToSvgPath = polygonToSvgPath; exports.positionToSide = positionToSide; exports.pruneCanvasTokenModes = pruneCanvasTokenModes; exports.pushCanvasInstanceOverrides = pushCanvasInstanceOverrides; exports.readAnimatableValue = readAnimatableValue; exports.readNodeStyleProperty = readNodeStyleProperty; exports.readOverrideGroup = readOverrideGroup; exports.readStyleSize = readStyleSize; exports.realClock = realClock; exports.recordAnimationChanges = recordAnimationChanges; exports.relayoutUpdates = relayoutUpdates; exports.remapPastedNodes = remapPastedNodes; exports.removeTrack = removeTrack; exports.reorderNodes = reorderNodes; exports.repositionNodesTo = repositionNodesTo; exports.resetCanvasInstanceOverrides = resetCanvasInstanceOverrides; exports.resizeHandleAxes = resizeHandleAxes; exports.resolveCanvasTokens = resolveCanvasTokens; exports.resolveEasing = resolveEasing; exports.resolvePadding = resolvePadding; exports.restoreCanvasMainComponent = restoreCanvasMainComponent; exports.revertShapeCombination = revertShapeCombination; exports.rgbToOklab = rgbToOklab; exports.ringSignedArea = ringSignedArea; exports.runMultiNodeTransition = runMultiNodeTransition; exports.sampleAnimationFrames = sampleAnimationFrames; exports.scaleKeyframes = scaleKeyframes; exports.segmentBounds = segmentBounds; exports.segmentCurvature = segmentCurvature; exports.segmentDerivative = segmentDerivative; exports.segmentExtrema = segmentExtrema; exports.segmentLength = segmentLength; exports.segmentNearest = segmentNearest; exports.segmentParamAtLength = segmentParamAtLength; exports.segmentPoint = segmentPoint; exports.segmentTangent = segmentTangent; exports.serializeCanvasNodes = serializeCanvasNodes; exports.setCanvasComponentProperty = setCanvasComponentProperty; exports.setCanvasInstanceProperties = setCanvasInstanceProperties; exports.setCanvasTokenMode = setCanvasTokenMode; exports.setKeyframe = setKeyframe; exports.setKeyframeEasing = setKeyframeEasing; exports.setMotionPath = setMotionPath; exports.setTrackEnabled = setTrackEnabled; exports.shapeNodeToBezierPath = shapeNodeToBezierPath; exports.shapeNodeToPolygon = shapeNodeToPolygon; exports.shapeToBezierPath = shapeToBezierPath; exports.shapeToPolygon = shapeToPolygon; exports.sideToPosition = sideToPosition; exports.simplifyRing = simplifyRing; exports.snapKeyframeDelta = snapKeyframeDelta; exports.snapNodeDrag = snapNodeDrag; exports.snapNodeResize = snapNodeResize; exports.snapResize = snapResize; exports.snapTimeToFrame = snapTimeToFrame; exports.snapToGrid = snapToGrid; exports.splitSegment = splitSegment; exports.springAt = springAt; exports.strokeOutlineRings = strokeOutlineRings; exports.subSegment = subSegment; exports.subtractPaths = subtractPaths; exports.subtractPolygons = subtractPolygons; exports.swapCanvasInstance = swapCanvasInstance; exports.syncAllCanvasInstances = syncAllCanvasInstances; exports.syncCanvasComponents = syncCanvasComponents; exports.syncCanvasInstance = syncCanvasInstance; exports.timeToX = timeToX; exports.toBezierPath = toBezierPath; exports.toWebAnimations = toWebAnimations; exports.toggleLockNodes = toggleLockNodes; exports.transformBezierPath = transformBezierPath; exports.trimSegments = trimSegments; exports.unionPolygons = unionPolygons; exports.unitePaths = unitePaths; exports.unlockNodes = unlockNodes; exports.updateKeyframe = updateKeyframe; exports.windingNumber = windingNumber; exports.withNodeAnimation = withNodeAnimation; exports.withStyleOpacity = withStyleOpacity; exports.withStyleSize = withStyleSize; exports.wouldCreateComponentCycle = wouldCreateComponentCycle; exports.wrapAnimationTime = wrapAnimationTime; exports.writeNodeStyleProperty = writeNodeStyleProperty; exports.writeOverrideGroup = writeOverrideGroup; exports.xToTime = xToTime; exports.xorPolygons = xorPolygons;
12315
+
12316
+
12317
+
12318
+
12319
+
12320
+
12321
+ exports.ANIMATABLE_PROPERTIES = ANIMATABLE_PROPERTIES; exports.ANIMATION_DATA_KEY = ANIMATION_DATA_KEY; exports.ANIMATION_EASING_LABELS = ANIMATION_EASING_LABELS; exports.ANIMATION_EASING_PRESETS = ANIMATION_EASING_PRESETS; exports.ANIMATION_TIME_EPSILON = ANIMATION_TIME_EPSILON; exports.AUTO_LAYOUT_DATA_KEY = AUTO_LAYOUT_DATA_KEY; exports.AnimationEditError = AnimationEditError; exports.AnimationPlayer = AnimationPlayer; exports.CANVAS_COMPONENT_DRAG_TYPE = CANVAS_COMPONENT_DRAG_TYPE; exports.CANVAS_TOKEN_PROPERTIES = CANVAS_TOKEN_PROPERTIES; exports.CHILD_LAYOUT_DATA_KEY = CHILD_LAYOUT_DATA_KEY; exports.COMPONENT_DATA_KEY = COMPONENT_DATA_KEY; exports.COMPONENT_OVERRIDES_DATA_KEY = COMPONENT_OVERRIDES_DATA_KEY; exports.COMPONENT_PROPERTY_REFS_DATA_KEY = COMPONENT_PROPERTY_REFS_DATA_KEY; exports.COMPONENT_SET_DATA_KEY = COMPONENT_SET_DATA_KEY; exports.COMPONENT_SOURCE_DATA_KEY = COMPONENT_SOURCE_DATA_KEY; exports.CONNECTION_LINE_TYPES = CONNECTION_LINE_TYPES; exports.CSS_ANIMATION_PROPERTIES = CSS_ANIMATION_PROPERTIES; exports.CUBIC_BEZIER_PRESETS = CUBIC_BEZIER_PRESETS; exports.CanvasScenesStore = CanvasScenesStore; exports.DEFAULT_ARRANGE_SHORTCUTS = _chunk26BVFKHUcjs.DEFAULT_ARRANGE_SHORTCUTS; exports.DEFAULT_NODE_HEIGHT = _chunkWADCJ7A7cjs.DEFAULT_NODE_HEIGHT; exports.DEFAULT_NODE_WIDTH = _chunkWADCJ7A7cjs.DEFAULT_NODE_WIDTH; exports.DEFAULT_PLACEMENT_GAP = _chunkWADCJ7A7cjs.DEFAULT_PLACEMENT_GAP; exports.INSTANCE_DATA_KEY = INSTANCE_DATA_KEY; exports.LOCKED_DATA_KEY = LOCKED_DATA_KEY; exports.LOCKED_PREVIOUS_FLAGS_KEY = LOCKED_PREVIOUS_FLAGS_KEY; exports.MAX_KEYFRAME_REFS = MAX_KEYFRAME_REFS; exports.ManualClock = ManualClock; exports.PathOpsError = PathOpsError; exports.RESIZE_HANDLES = RESIZE_HANDLES; exports.SHAPE_DATA_KEY = SHAPE_DATA_KEY; exports.SHAPE_KINDS = SHAPE_KINDS; exports.SHAPE_NODE_TYPE = SHAPE_NODE_TYPE; exports.SHAPE_OPERATIONS = SHAPE_OPERATIONS; exports.StreamingLayoutManager = StreamingLayoutManager; exports.TOKEN_BINDINGS_DATA_KEY = TOKEN_BINDINGS_DATA_KEY; exports.TOKEN_MODES_DATA_KEY = TOKEN_MODES_DATA_KEY; exports.addCanvasVariant = addCanvasVariant; exports.addKeyframesAtTime = addKeyframesAtTime; exports.alignNodes = alignNodes; exports.animateNode = animateNode; exports.applyAnimation = applyAnimation; exports.applyAnimationOverrides = applyAnimationOverrides; exports.applyConstraints = applyConstraints; exports.applyNodeUpdates = applyNodeUpdates; exports.applyShapeCombination = applyShapeCombination; exports.applyShapeReplacement = applyShapeReplacement; exports.arcToCubics = arcToCubics; exports.bezierPathArea = bezierPathArea; exports.bezierPathBounds = bezierPathBounds; exports.bezierPathLength = bezierPathLength; exports.bezierPathPointAtLength = bezierPathPointAtLength; exports.bezierPathSignedArea = bezierPathSignedArea; exports.bezierPathToSvg = bezierPathToSvg; exports.bindCanvasComponentProperty = bindCanvasComponentProperty; exports.bindCanvasToken = bindCanvasToken; exports.blendLayout = blendLayout; exports.boundsOf = _chunkWADCJ7A7cjs.boundsOf; exports.calculateDagreReflowDisplacement = calculateDagreReflowDisplacement; exports.calculateDirectionalDisplacement = calculateDirectionalDisplacement; exports.canCombineShapeNodes = canCombineShapeNodes; exports.canOffsetShapeNodes = canOffsetShapeNodes; exports.canOutlineShapeNodeStrokes = canOutlineShapeNodeStrokes; exports.canvasHeight = canvasHeight; exports.centerNodes = _chunkWADCJ7A7cjs.centerNodes; exports.centre = _chunkWADCJ7A7cjs.centre; exports.clampAnimationValue = clampAnimationValue; exports.clampLayoutSize = clampLayoutSize; exports.closeContour = closeContour; exports.collectDescendantIds = collectDescendantIds; exports.combineCanvasComponentsAsVariants = combineCanvasComponentsAsVariants; exports.combineShapeNodes = combineShapeNodes; exports.computeNodesBoundingBox = computeNodesBoundingBox; exports.computeSnapGuides = computeSnapGuides; exports.connectedOnly = connectedOnly; exports.contourSignedArea = contourSignedArea; exports.contoursToPath = contoursToPath; exports.copyKeyframes = copyKeyframes; exports.countPathSegments = countPathSegments; exports.createAnimationPlayer = createAnimationPlayer; exports.createBezierTrajectory = createBezierTrajectory; exports.createCanvasAnimationController = createCanvasAnimationController; exports.createCanvasArrangeController = createCanvasArrangeController; exports.createCanvasAutoLayoutController = createCanvasAutoLayoutController; exports.createCanvasComponent = createCanvasComponent; exports.createCanvasComponentsController = createCanvasComponentsController; exports.createCanvasInstance = createCanvasInstance; exports.createCanvasScenesStore = createCanvasScenesStore; exports.createFanOutTrajectory = createFanOutTrajectory; exports.createGuideIndex = createGuideIndex; exports.createNodeGuideIndex = createNodeGuideIndex; exports.createNodeLookup = createNodeLookup; exports.cubicBezierAt = cubicBezierAt; exports.cubicPointAt = cubicPointAt; exports.cubicsToPathData = cubicsToPathData; exports.dashContours = dashContours; exports.defaultEasing = defaultEasing; exports.deleteKeyframes = deleteKeyframes; exports.detachCanvasInstance = detachCanvasInstance; exports.detachTokenBindings = detachTokenBindings; exports.diffOverrideGroups = diffOverrideGroups; exports.distanceToBezierPath = distanceToBezierPath; exports.distributeNodes = distributeNodes; exports.dividePaths = dividePaths; exports.dividePolygons = dividePolygons; exports.easingFromInfluence = easingFromInfluence; exports.easingLabel = easingLabel; exports.easingToCss = easingToCss; exports.ensureLayout = _chunkWADCJ7A7cjs.ensureLayout; exports.estimateCanvasHeight = estimateCanvasHeight; exports.estimateNodeSize = _chunkWADCJ7A7cjs.estimateNodeSize; exports.evaluateAnimation = evaluateAnimation; exports.evaluateEasing = evaluateEasing; exports.evaluateTrack = evaluateTrack; exports.excludePaths = excludePaths; exports.exportCssAnimation = exportCssAnimation; exports.findConnectorSnap = findConnectorSnap; exports.findVariant = findVariant; exports.fitCubicRun = fitCubicRun; exports.fitCubics = fitCubics; exports.fitFreehandPath = fitFreehandPath; exports.fitPathData = fitPathData; exports.fitViewportToNodes = fitViewportToNodes; exports.fitViewportToRect = fitViewportToRect; exports.flattenSvgPath = flattenSvgPath; exports.flowSide = _chunkWADCJ7A7cjs.flowSide; exports.formatAnimationTime = formatAnimationTime; exports.formatNumber = formatNumber2; exports.formatOklab = formatOklab; exports.formatVariantName = formatVariantName; exports.getAbsolutePosition = getAbsolutePosition; exports.getAnimatableProperty = getAnimatableProperty; exports.getAnimatedProperties = getAnimatedProperties; exports.getAnimatedValue = getAnimatedValue; exports.getAnimationDuration = getAnimationDuration; exports.getAnimationTrack = getAnimationTrack; exports.getAutoLayout = getAutoLayout; exports.getAutoLayoutGrid = getAutoLayoutGrid; exports.getAutoLayoutInsertTarget = getAutoLayoutInsertTarget; exports.getBindableTokenProperties = getBindableTokenProperties; exports.getCanvasComponentDragId = getCanvasComponentDragId; exports.getCanvasTokenProperty = getCanvasTokenProperty; exports.getCenteredNodePosition = _chunkWADCJ7A7cjs.getCenteredNodePosition; exports.getChildLayout = getChildLayout; exports.getComponentData = getComponentData; exports.getComponentInstances = getComponentInstances; exports.getComponentPropertyDefs = getComponentPropertyDefs; exports.getComponentPropertyRefs = getComponentPropertyRefs; exports.getComponentSourceId = getComponentSourceId; exports.getCssPropertyAnimations = getCssPropertyAnimations; exports.getDefaultVariant = getDefaultVariant; exports.getEffectiveTokenModes = getEffectiveTokenModes; exports.getFlowChildren = getFlowChildren; exports.getInstanceData = getInstanceData; exports.getInstanceProperties = getInstanceProperties; exports.getInstanceStatus = getInstanceStatus; exports.getKeyframeTimes = getKeyframeTimes; exports.getLayerName = getLayerName; exports.getLayoutParent = getLayoutParent; exports.getLayoutSizing = getLayoutSizing; exports.getLayoutedNodes = _chunkWADCJ7A7cjs.getLayoutedNodes; exports.getNextVariantValues = getNextVariantValues; exports.getNodeAnimation = getNodeAnimation; exports.getNodeOverrides = getNodeOverrides; exports.getNodeRect = getNodeRect; exports.getNodeShape = getNodeShape; exports.getNodeSize = getNodeSize; exports.getNodeTokenBindings = getNodeTokenBindings; exports.getNodeTokenModes = getNodeTokenModes; exports.getOwningComponent = getOwningComponent; exports.getOwningInstance = getOwningInstance; exports.getResizingNodeRect = getResizingNodeRect; exports.getRootInstance = getRootInstance; exports.getShapeRenderData = getShapeRenderData; exports.getShapeSvg = getShapeSvg; exports.getTimelineRows = getTimelineRows; exports.getTimelineTicks = getTimelineTicks; exports.getTokenPropertyScope = getTokenPropertyScope; exports.getTokensForProperty = getTokensForProperty; exports.getVariantConflicts = getVariantConflicts; exports.getVariantOptions = getVariantOptions; exports.getVariantSet = getVariantSet; exports.getVariantValues = getVariantValues; exports.handlePoint = handlePoint; exports.hasVisibleStroke = hasVisibleStroke; exports.inferResizeHandle = inferResizeHandle; exports.inspectCanvasInstance = inspectCanvasInstance; exports.inspectNodeTokens = inspectNodeTokens; exports.interpolateAnimationValue = interpolateAnimationValue; exports.intersectPaths = intersectPaths; exports.intersectPolygons = intersectPolygons; exports.invertNodeUpdates = invertNodeUpdates; exports.isAnimationEasing = isAnimationEasing; exports.isAnimationKeyframe = isAnimationKeyframe; exports.isAutoLayoutFrame = isAutoLayoutFrame; exports.isCanvasComponent = isCanvasComponent; exports.isCanvasComponentSet = isCanvasComponentSet; exports.isCanvasInstance = isCanvasInstance; exports.isCssExportExact = isCssExportExact; exports.isEventFromTextInput = isEventFromTextInput; exports.isInsideInstance = isInsideInstance; exports.isKeyframeSelected = isKeyframeSelected; exports.isLocked = isLocked; exports.isMeasureModifierHeld = isMeasureModifierHeld; exports.isNodeAnimated = isNodeAnimated; exports.isShapeDescription = isShapeDescription; exports.isShapeNode = isShapeNode; exports.isStraightCubic = isStraightCubic; exports.isValidCanvasEdge = isValidCanvasEdge; exports.isValidCanvasNode = isValidCanvasNode; exports.isValidCanvasScene = isValidCanvasScene; exports.isValidUrl = isValidUrl; exports.layoutAll = layoutAll; exports.layoutBounds = layoutBounds; exports.layoutFrame = layoutFrame; exports.layoutUp = layoutUp; exports.layoutUpMany = layoutUpMany; exports.linearPositionTrajectory = linearPositionTrajectory; exports.linearTrajectory = linearTrajectory; exports.listCanvasComponents = listCanvasComponents; exports.lockNodes = lockNodes; exports.makeSizingCoherent = makeSizingCoherent; exports.matchArrangeShortcut = _chunk26BVFKHUcjs.matchArrangeShortcut; exports.matchSize = matchSize; exports.measureBetween = measureBetween; exports.measureLabel = measureLabel; exports.measureSelection = measureSelection; exports.measureToLine = measureToLine; exports.mergeNodeUpdates = mergeNodeUpdates; exports.mixColorsOklab = mixColorsOklab; exports.moveKeyframes = moveKeyframes; exports.moveLayoutChild = moveLayoutChild; exports.multiPolygonArea = multiPolygonArea; exports.multiPolygonBounds = multiPolygonBounds; exports.nearestHandlePositions = nearestHandlePositions; exports.normalizeBezierPath = normalizeBezierPath; exports.normalizeKeyframes = normalizeKeyframes; exports.offsetPath = offsetPath; exports.offsetShapeNodes = offsetShapeNodes; exports.oklabToRgb = oklabToRgb; exports.oppositePosition = oppositePosition; exports.outlineShapeNodeStrokes = outlineShapeNodeStrokes; exports.outlineStroke = outlineStroke; exports.overlaps = _chunkWADCJ7A7cjs.overlaps; exports.pageHidden = pageHidden; exports.parseCanvasClipboardData = parseCanvasClipboardData; exports.parseCanvasScenes = parseCanvasScenes; exports.parseCssEasing = parseCssEasing; exports.parseKeyframeClipboard = parseKeyframeClipboard; exports.parseNodeStyleDeclarations = parseNodeStyleDeclarations; exports.parseOklab = parseOklab; exports.parseSvgPath = parseSvgPath; exports.parseVariantName = parseVariantName; exports.pasteKeyframes = pasteKeyframes; exports.pathBoolean = pathBoolean; exports.pathToContours = pathToContours; exports.placeBeside = _chunkWADCJ7A7cjs.placeBeside; exports.playWebAnimations = playWebAnimations; exports.pointInBezierPath = pointInBezierPath; exports.pointInMultiPolygon = pointInMultiPolygon; exports.pointInRings = pointInRings; exports.polygonArea = polygonArea; exports.polygonBoolean = polygonBoolean; exports.polygonToSvgPath = polygonToSvgPath; exports.positionToSide = positionToSide; exports.pruneCanvasTokenModes = pruneCanvasTokenModes; exports.pushCanvasInstanceOverrides = pushCanvasInstanceOverrides; exports.readAnimatableValue = readAnimatableValue; exports.readNodeStyleProperty = readNodeStyleProperty; exports.readOverrideGroup = readOverrideGroup; exports.readStyleSize = readStyleSize; exports.realClock = realClock; exports.recordAnimationChanges = recordAnimationChanges; exports.relayoutUpdates = relayoutUpdates; exports.remapPastedNodes = remapPastedNodes; exports.removeCanvasVariant = removeCanvasVariant; exports.removeTrack = removeTrack; exports.renameCanvasVariantProperty = renameCanvasVariantProperty; exports.renameCanvasVariantValue = renameCanvasVariantValue; exports.reorderNodes = reorderNodes; exports.repositionNodesTo = repositionNodesTo; exports.resetCanvasInstanceOverrides = resetCanvasInstanceOverrides; exports.resizeHandleAxes = resizeHandleAxes; exports.resolveCanvasTokens = resolveCanvasTokens; exports.resolveEasing = resolveEasing; exports.resolvePadding = resolvePadding; exports.restoreCanvasMainComponent = restoreCanvasMainComponent; exports.revertShapeCombination = revertShapeCombination; exports.rgbToOklab = rgbToOklab; exports.ringSignedArea = ringSignedArea; exports.runMultiNodeTransition = runMultiNodeTransition; exports.sampleAnimationFrames = sampleAnimationFrames; exports.scaleKeyframes = scaleKeyframes; exports.segmentBounds = segmentBounds; exports.segmentCurvature = segmentCurvature; exports.segmentDerivative = segmentDerivative; exports.segmentExtrema = segmentExtrema; exports.segmentLength = segmentLength; exports.segmentNearest = segmentNearest; exports.segmentParamAtLength = segmentParamAtLength; exports.segmentPoint = segmentPoint; exports.segmentTangent = segmentTangent; exports.serializeCanvasNodes = serializeCanvasNodes; exports.setCanvasComponentProperty = setCanvasComponentProperty; exports.setCanvasInstanceProperties = setCanvasInstanceProperties; exports.setCanvasTokenMode = setCanvasTokenMode; exports.setCanvasVariantProperties = setCanvasVariantProperties; exports.setKeyframe = setKeyframe; exports.setKeyframeEasing = setKeyframeEasing; exports.setMotionPath = setMotionPath; exports.setTrackEnabled = setTrackEnabled; exports.shapeNodeToBezierPath = shapeNodeToBezierPath; exports.shapeNodeToPolygon = shapeNodeToPolygon; exports.shapeToBezierPath = shapeToBezierPath; exports.shapeToPolygon = shapeToPolygon; exports.sideToPosition = sideToPosition; exports.simplifyRing = simplifyRing; exports.snapKeyframeDelta = snapKeyframeDelta; exports.snapNodeDrag = snapNodeDrag; exports.snapNodeResize = snapNodeResize; exports.snapResize = snapResize; exports.snapTimeToFrame = snapTimeToFrame; exports.snapToGrid = snapToGrid; exports.splitSegment = splitSegment; exports.springAt = springAt; exports.strokeOutlineRings = strokeOutlineRings; exports.subSegment = subSegment; exports.subtractPaths = subtractPaths; exports.subtractPolygons = subtractPolygons; exports.swapCanvasInstance = swapCanvasInstance; exports.syncAllCanvasInstances = syncAllCanvasInstances; exports.syncCanvasComponents = syncCanvasComponents; exports.syncCanvasInstance = syncCanvasInstance; exports.timeToX = timeToX; exports.toBezierPath = toBezierPath; exports.toWebAnimations = toWebAnimations; exports.toggleLockNodes = toggleLockNodes; exports.transformBezierPath = transformBezierPath; exports.trimSegments = trimSegments; exports.unionPolygons = unionPolygons; exports.unitePaths = unitePaths; exports.unlockNodes = unlockNodes; exports.updateKeyframe = updateKeyframe; exports.windingNumber = windingNumber; exports.withNodeAnimation = withNodeAnimation; exports.withStyleOpacity = withStyleOpacity; exports.withStyleSize = withStyleSize; exports.wouldCreateComponentCycle = wouldCreateComponentCycle; exports.wrapAnimationTime = wrapAnimationTime; exports.writeNodeStyleProperty = writeNodeStyleProperty; exports.writeOverrideGroup = writeOverrideGroup; exports.xToTime = xToTime; exports.xorPolygons = xorPolygons;
11958
12322
  //# sourceMappingURL=index.cjs.map