@pixerate/editor 0.29.0 → 0.30.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.
@@ -41,6 +41,7 @@ var _chunkK2UYKJ6Mcjs = require('../chunk-K2UYKJ6M.cjs');
41
41
 
42
42
 
43
43
 
44
+ var _chunkXHRZSB77cjs = require('../chunk-XHRZSB77.cjs');
44
45
 
45
46
 
46
47
 
@@ -53,7 +54,9 @@ var _chunkK2UYKJ6Mcjs = require('../chunk-K2UYKJ6M.cjs');
53
54
 
54
55
 
55
56
 
56
- var _chunkTTYCN6ZHcjs = require('../chunk-TTYCN6ZH.cjs');
57
+
58
+
59
+ var _chunkXZ4L3R4Kcjs = require('../chunk-XZ4L3R4K.cjs');
57
60
 
58
61
 
59
62
  var _chunkA6PHCAGXcjs = require('../chunk-A6PHCAGX.cjs');
@@ -138,7 +141,7 @@ function runMultiNodeTransition(transitions, options = {}) {
138
141
  const {
139
142
  defaultDuration = 400,
140
143
  defaultEasing: easingFunc = defaultEasing,
141
- clock = _chunkTTYCN6ZHcjs.realClock,
144
+ clock = _chunkXHRZSB77cjs.realClock,
142
145
  styleFormat = "string",
143
146
  onUpdate,
144
147
  onComplete
@@ -574,7 +577,7 @@ var StreamingLayoutManager = (_class = class {
574
577
  this.throttleMs = _nullishCoalesce(options.throttleMs, () => ( 200));
575
578
  this.glideDurationMs = _nullishCoalesce(options.glideDurationMs, () => ( 300));
576
579
  this.connectedOnly = _nullishCoalesce(options.connectedOnly, () => ( false));
577
- this.clock = _nullishCoalesce(options.clock, () => ( _chunkTTYCN6ZHcjs.realClock));
580
+ this.clock = _nullishCoalesce(options.clock, () => ( _chunkXHRZSB77cjs.realClock));
578
581
  this.layoutOptions = _nullishCoalesce(options.layoutOptions, () => ( { direction: "LR" }));
579
582
  this.onLayoutUpdated = options.onLayoutUpdated;
580
583
  }
@@ -7949,7 +7952,7 @@ function getNodeAnimation(node) {
7949
7952
  }
7950
7953
  function getAnimationTrack(node, property) {
7951
7954
  const track = _optionalChain([getNodeAnimation, 'call', _217 => _217(node), 'optionalAccess', _218 => _218.tracks, 'access', _219 => _219[property]]);
7952
- return track && Array.isArray(track.keyframes) && _chunkTTYCN6ZHcjs.normalizeKeyframes.call(void 0, track.keyframes).length > 0 ? track : void 0;
7955
+ return track && Array.isArray(track.keyframes) && _chunkXHRZSB77cjs.normalizeKeyframes.call(void 0, track.keyframes).length > 0 ? track : void 0;
7953
7956
  }
7954
7957
  function isNodeAnimated(node) {
7955
7958
  const animation = getNodeAnimation(node);
@@ -7986,7 +7989,7 @@ function getAnimationDuration(doc) {
7986
7989
  if (!animation) continue;
7987
7990
  for (const track of Object.values(animation.tracks)) {
7988
7991
  if (!track || track.enabled === false) continue;
7989
- const keys = _chunkTTYCN6ZHcjs.normalizeKeyframes.call(void 0, track.keyframes);
7992
+ const keys = _chunkXHRZSB77cjs.normalizeKeyframes.call(void 0, track.keyframes);
7990
7993
  if (keys.length > 0) end = Math.max(end, keys[keys.length - 1].time);
7991
7994
  }
7992
7995
  }
@@ -8003,7 +8006,7 @@ function evaluateAnimation(doc, time, options = {}) {
8003
8006
  for (const [key, track] of Object.entries(animation.tracks)) {
8004
8007
  if (!track || track.enabled === false) continue;
8005
8008
  const property = (_nullishCoalesce(options.properties, () => ( ANIMATABLE_PROPERTIES))).find((p) => p.key === key);
8006
- const value = _chunkTTYCN6ZHcjs.evaluateTrack.call(void 0, track, time, _nullishCoalesce(_optionalChain([property, 'optionalAccess', _221 => _221.type]), () => ( "number")));
8009
+ const value = _chunkXHRZSB77cjs.evaluateTrack.call(void 0, track, time, _nullishCoalesce(_optionalChain([property, 'optionalAccess', _221 => _221.type]), () => ( "number")));
8007
8010
  if (value === void 0) continue;
8008
8011
  (values ??= {})[key] = clampAnimationValue(property, value);
8009
8012
  }
@@ -8041,7 +8044,7 @@ var AnimationEditError = class extends Error {
8041
8044
  }
8042
8045
  };
8043
8046
  var MAX_KEYFRAME_REFS = 4096;
8044
- var sameTime = (a, b) => Math.abs(a - b) <= _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON;
8047
+ var sameTime = (a, b) => Math.abs(a - b) <= _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON;
8045
8048
  var refKey = (r) => `${r.nodeId}\0${r.property}`;
8046
8049
  function snapTimeToFrame(time, fps) {
8047
8050
  if (!(fps > 0)) return time;
@@ -8061,9 +8064,9 @@ function coerceValue(property, value) {
8061
8064
  }
8062
8065
  function coerceEasing(easing) {
8063
8066
  if (typeof easing === "string") {
8064
- const parsed = _chunkTTYCN6ZHcjs.parseCssEasing.call(void 0, easing);
8067
+ const parsed = _chunkXZ4L3R4Kcjs.parseCssEasing.call(void 0, easing);
8065
8068
  if (parsed) return parsed;
8066
- } else if (_chunkTTYCN6ZHcjs.isAnimationEasing.call(void 0, easing)) return easing;
8069
+ } else if (_chunkXZ4L3R4Kcjs.isAnimationEasing.call(void 0, easing)) return easing;
8067
8070
  throw new AnimationEditError("invalid_easing", `Unknown easing ${JSON.stringify(easing)}.`);
8068
8071
  }
8069
8072
  function coerceTime(time) {
@@ -8095,7 +8098,7 @@ var Draft = (_class7 = class {
8095
8098
  const current = getNodeAnimation(this.node(id));
8096
8099
  const tracks = {};
8097
8100
  for (const [key, track] of Object.entries(_nullishCoalesce(_optionalChain([current, 'optionalAccess', _223 => _223.tracks]), () => ( {})))) {
8098
- if (track) tracks[key] = { ...track, keyframes: _chunkTTYCN6ZHcjs.normalizeKeyframes.call(void 0, track.keyframes) };
8101
+ if (track) tracks[key] = { ...track, keyframes: _chunkXHRZSB77cjs.normalizeKeyframes.call(void 0, track.keyframes) };
8099
8102
  }
8100
8103
  animation = { ..._nullishCoalesce(current, () => ( {})), tracks };
8101
8104
  this.animations.set(id, animation);
@@ -8165,7 +8168,7 @@ function readAnimatableValue(node, property) {
8165
8168
  function getAnimatedValue(node, propertyKey, time, options = {}) {
8166
8169
  const property = getAnimatableProperty(propertyKey, options);
8167
8170
  const track = getAnimationTrack(node, propertyKey);
8168
- if (track && track.enabled !== false) return _chunkTTYCN6ZHcjs.evaluateTrack.call(void 0, track, time, _nullishCoalesce(_optionalChain([property, 'optionalAccess', _229 => _229.type]), () => ( "number")));
8171
+ if (track && track.enabled !== false) return _chunkXHRZSB77cjs.evaluateTrack.call(void 0, track, time, _nullishCoalesce(_optionalChain([property, 'optionalAccess', _229 => _229.type]), () => ( "number")));
8169
8172
  return property ? readAnimatableValue(node, property) : void 0;
8170
8173
  }
8171
8174
  function putKey(draft, nodeId, property, time, value, easing, inherit = true) {
@@ -8267,7 +8270,7 @@ function removeTrack(nodes, nodeId, property, options = {}) {
8267
8270
  if (!track) return nodes;
8268
8271
  const p = draft.property(property);
8269
8272
  if (options.keepValueAt !== void 0 && p && property !== "motionPath") {
8270
- const value = _chunkTTYCN6ZHcjs.evaluateTrack.call(void 0, track, options.keepValueAt, p.type);
8273
+ const value = _chunkXHRZSB77cjs.evaluateTrack.call(void 0, track, options.keepValueAt, p.type);
8271
8274
  if (value !== void 0) draft.writeNode(nodeId, (n) => p.write(n, value));
8272
8275
  }
8273
8276
  draft.setKeys(nodeId, property, []);
@@ -8296,10 +8299,10 @@ function moveKeyframes(nodes, refs, delta, options = {}) {
8296
8299
  low = Math.max(low, min - time);
8297
8300
  high = Math.min(high, max - time);
8298
8301
  }
8299
- if (low > high + _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON) throw new AnimationEditError("no_movement_range", "The keyframes have no common movement range.");
8302
+ if (low > high + _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON) throw new AnimationEditError("no_movement_range", "The keyframes have no common movement range.");
8300
8303
  const applied = Math.min(high, Math.max(low, delta));
8301
8304
  const moved = refs.map((ref) => ({ ...ref, time: draft.keys(ref.nodeId, ref.property)[draft.find(ref)].time + applied }));
8302
- if (Math.abs(applied) <= _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON) return { nodes, delta: 0, refs: refs.map((r) => ({ ...r })) };
8305
+ if (Math.abs(applied) <= _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON) return { nodes, delta: 0, refs: refs.map((r) => ({ ...r })) };
8303
8306
  retime(draft, refs, (time) => time + applied);
8304
8307
  return { nodes: draft.commit(), delta: applied, refs: moved };
8305
8308
  }
@@ -8345,7 +8348,7 @@ function getKeyframeTimes(nodes, options = {}) {
8345
8348
  if (!animation) continue;
8346
8349
  for (const [property, track] of Object.entries(animation.tracks)) {
8347
8350
  const skip = _nullishCoalesce(excluded.get(refKey({ nodeId: node.id, property })), () => ( []));
8348
- for (const k of _chunkTTYCN6ZHcjs.normalizeKeyframes.call(void 0, _optionalChain([track, 'optionalAccess', _231 => _231.keyframes]))) if (!skip.some((t) => sameTime(t, k.time))) times.push(k.time);
8351
+ for (const k of _chunkXHRZSB77cjs.normalizeKeyframes.call(void 0, _optionalChain([track, 'optionalAccess', _231 => _231.keyframes]))) if (!skip.some((t) => sameTime(t, k.time))) times.push(k.time);
8349
8352
  }
8350
8353
  }
8351
8354
  times.sort((a, b) => a - b);
@@ -8403,7 +8406,7 @@ function parseKeyframeClipboard(input) {
8403
8406
  const clip = value;
8404
8407
  if (clip.type !== "pixerate/keyframes" || clip.version !== 1 || !Array.isArray(clip.keyframes)) return null;
8405
8408
  const keyframes = clip.keyframes.filter(
8406
- (k) => k && typeof k.nodeId === "string" && typeof k.property === "string" && typeof k.offset === "number" && Number.isFinite(k.offset) && (typeof k.value === "number" && Number.isFinite(k.value) || typeof k.value === "string") && (k.easing === void 0 || _chunkTTYCN6ZHcjs.isAnimationEasing.call(void 0, k.easing))
8409
+ (k) => k && typeof k.nodeId === "string" && typeof k.property === "string" && typeof k.offset === "number" && Number.isFinite(k.offset) && (typeof k.value === "number" && Number.isFinite(k.value) || typeof k.value === "string") && (k.easing === void 0 || _chunkXZ4L3R4Kcjs.isAnimationEasing.call(void 0, k.easing))
8407
8410
  );
8408
8411
  return keyframes.length > 0 ? { type: "pixerate/keyframes", version: 1, keyframes } : null;
8409
8412
  }
@@ -8464,7 +8467,7 @@ function recordAnimationChanges(base, before, after, time, options = {}) {
8464
8467
  };
8465
8468
  if (animated) {
8466
8469
  if (changed) {
8467
- const keys = _chunkTTYCN6ZHcjs.normalizeKeyframes.call(void 0, track.keyframes).filter((k) => !sameTime(k.time, t));
8470
+ const keys = _chunkXHRZSB77cjs.normalizeKeyframes.call(void 0, track.keyframes).filter((k) => !sameTime(k.time, t));
8468
8471
  const before2 = [...keys].reverse().find((k) => k.time < t);
8469
8472
  keys.push({ time: t, value: now, ..._optionalChain([before2, 'optionalAccess', _233 => _233.easing]) !== void 0 ? { easing: before2.easing } : {} });
8470
8473
  tracksOf()[p.key] = { ...track, keyframes: keys.sort((a, b) => a.time - b.time) };
@@ -8473,7 +8476,7 @@ function recordAnimationChanges(base, before, after, time, options = {}) {
8473
8476
  restore();
8474
8477
  } else if (changed && options.recording && !track) {
8475
8478
  const keys = [];
8476
- if (t > _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON && was !== void 0) keys.push({ time: 0, value: was });
8479
+ if (t > _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON && was !== void 0) keys.push({ time: 0, value: was });
8477
8480
  keys.push({ time: t, value: now });
8478
8481
  tracksOf()[p.key] = { keyframes: keys };
8479
8482
  keyed.push({ nodeId: next.id, property: p.key, time: t });
@@ -8576,7 +8579,7 @@ function exactStops(keys, duration, format) {
8576
8579
  stops.push({
8577
8580
  offset: Math.min(1, Math.max(0, k.time / duration)),
8578
8581
  value: format(k, i),
8579
- ...next ? { easing: _chunkTTYCN6ZHcjs.easingToCss.call(void 0, k.easing, next.time - k.time) } : {}
8582
+ ...next ? { easing: _chunkXZ4L3R4Kcjs.easingToCss.call(void 0, k.easing, next.time - k.time) } : {}
8580
8583
  });
8581
8584
  });
8582
8585
  const last = keys[keys.length - 1];
@@ -8600,7 +8603,7 @@ function getCssPropertyAnimations(nodes, nodeId, options = {}) {
8600
8603
  const tracks = /* @__PURE__ */ new Map();
8601
8604
  for (const [key, track] of Object.entries(animation.tracks)) {
8602
8605
  if (!track || track.enabled === false || !map[key]) continue;
8603
- const keys = _chunkTTYCN6ZHcjs.normalizeKeyframes.call(void 0, track.keyframes);
8606
+ const keys = _chunkXHRZSB77cjs.normalizeKeyframes.call(void 0, track.keyframes);
8604
8607
  if (keys.length > 0) tracks.set(key, keys);
8605
8608
  }
8606
8609
  const typeOf = (key) => _nullishCoalesce(_optionalChain([ANIMATABLE_PROPERTIES, 'access', _238 => _238.find, 'call', _239 => _239((p) => p.key === key), 'optionalAccess', _240 => _240.type]), () => ( "number"));
@@ -8613,7 +8616,7 @@ function getCssPropertyAnimations(nodes, nodeId, options = {}) {
8613
8616
  for (const [css, sources] of groups) {
8614
8617
  const camel2 = map[sources[0]].camel;
8615
8618
  const keysOf = (k) => tracks.get(k);
8616
- const evalAt = (k, t) => _chunkTTYCN6ZHcjs.evaluateTrack.call(void 0, keysOf(k), t, typeOf(k));
8619
+ const evalAt = (k, t) => _chunkXHRZSB77cjs.evaluateTrack.call(void 0, keysOf(k), t, typeOf(k));
8617
8620
  const allTimes = sources.flatMap((k) => keysOf(k).map((x) => x.time));
8618
8621
  if (sources.includes("motionPath")) {
8619
8622
  const position = (t) => {
@@ -8709,7 +8712,7 @@ function isCssExportExact(nodes, nodeId) {
8709
8712
 
8710
8713
  // src/canvas/animation/timeline.ts
8711
8714
  function isKeyframeSelected(selection, ref) {
8712
- return selection.some((s) => s.nodeId === ref.nodeId && s.property === ref.property && Math.abs(s.time - ref.time) <= _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON);
8715
+ return selection.some((s) => s.nodeId === ref.nodeId && s.property === ref.property && Math.abs(s.time - ref.time) <= _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON);
8713
8716
  }
8714
8717
  var defaultLabel = (node) => typeof _optionalChain([node, 'access', _241 => _241.data, 'optionalAccess', _242 => _242.label]) === "string" && node.data.label.trim() ? node.data.label : node.id;
8715
8718
  function getTimelineRows(nodes, ids, options = {}) {
@@ -8730,7 +8733,7 @@ function getTimelineRows(nodes, ids, options = {}) {
8730
8733
  property,
8731
8734
  label,
8732
8735
  enabled: track.enabled !== false,
8733
- keyframes: _chunkTTYCN6ZHcjs.normalizeKeyframes.call(void 0, track.keyframes).map((k) => {
8736
+ keyframes: _chunkXHRZSB77cjs.normalizeKeyframes.call(void 0, track.keyframes).map((k) => {
8734
8737
  const ref = { nodeId: id, property, time: k.time };
8735
8738
  const selected = isKeyframeSelected(selection, ref);
8736
8739
  return {
@@ -8790,7 +8793,7 @@ function createCanvasAnimationController(options) {
8790
8793
  }
8791
8794
  return _nullishCoalesce(fixedDuration, () => ( durationValue));
8792
8795
  };
8793
- const player = new (0, _chunkTTYCN6ZHcjs.AnimationPlayer)({
8796
+ const player = new (0, _chunkXHRZSB77cjs.AnimationPlayer)({
8794
8797
  clock: options.clock,
8795
8798
  duration,
8796
8799
  loop: options.loop,
@@ -8869,7 +8872,7 @@ function createCanvasAnimationController(options) {
8869
8872
  const byId = new Map(options.getNodes().map((n) => [n.id, n]));
8870
8873
  const kept = selection.filter((ref) => {
8871
8874
  const track = _optionalChain([getNodeAnimation, 'call', _255 => _255(byId.get(ref.nodeId)), 'optionalAccess', _256 => _256.tracks, 'access', _257 => _257[ref.property]]);
8872
- return !!track && _chunkTTYCN6ZHcjs.normalizeKeyframes.call(void 0, track.keyframes).some((k) => Math.abs(k.time - ref.time) <= _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON);
8875
+ return !!track && _chunkXHRZSB77cjs.normalizeKeyframes.call(void 0, track.keyframes).some((k) => Math.abs(k.time - ref.time) <= _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON);
8873
8876
  });
8874
8877
  if (kept.length !== selection.length) selection = kept;
8875
8878
  }
@@ -8941,7 +8944,7 @@ function createCanvasAnimationController(options) {
8941
8944
  nextKeyframe(ids = selectedIds()) {
8942
8945
  const list = [...ids];
8943
8946
  const times = getKeyframeTimes(options.getNodes(), list.length ? { ids: list } : {});
8944
- const next = times.find((t) => t > player.currentTime + _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON);
8947
+ const next = times.find((t) => t > player.currentTime + _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON);
8945
8948
  if (next === void 0) return null;
8946
8949
  player.seek(next);
8947
8950
  return next;
@@ -8949,7 +8952,7 @@ function createCanvasAnimationController(options) {
8949
8952
  previousKeyframe(ids = selectedIds()) {
8950
8953
  const list = [...ids];
8951
8954
  const times = getKeyframeTimes(options.getNodes(), list.length ? { ids: list } : {});
8952
- const prev = [...times].reverse().find((t) => t < player.currentTime - _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON);
8955
+ const prev = [...times].reverse().find((t) => t < player.currentTime - _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON);
8953
8956
  if (prev === void 0) return null;
8954
8957
  player.seek(prev);
8955
8958
  return prev;
@@ -11398,6 +11401,313 @@ function getCanvasComponentDragId(dataTransfer) {
11398
11401
  return id ? id : void 0;
11399
11402
  }
11400
11403
 
11404
+ // src/canvas/freehand.ts
11405
+ function createDefaultStrokeStyle(tool) {
11406
+ if (tool === "highlighter") {
11407
+ return {
11408
+ color: "#facc15",
11409
+ width: 24,
11410
+ opacity: 0.35,
11411
+ cap: "round",
11412
+ join: "round"
11413
+ };
11414
+ }
11415
+ return {
11416
+ color: "#3b82f6",
11417
+ width: 3,
11418
+ opacity: 1,
11419
+ cap: "round",
11420
+ join: "round"
11421
+ };
11422
+ }
11423
+ function streamlinePoints(points, factor = 0.35) {
11424
+ if (points.length < 3 || factor <= 0) return [...points];
11425
+ const clampedFactor = Math.min(Math.max(factor, 0), 0.95);
11426
+ const smoothed = [points[0]];
11427
+ for (let i = 1; i < points.length - 1; i++) {
11428
+ const prev = smoothed[i - 1];
11429
+ const curr = points[i];
11430
+ const x = prev[0] * clampedFactor + curr[0] * (1 - clampedFactor);
11431
+ const y = prev[1] * clampedFactor + curr[1] * (1 - clampedFactor);
11432
+ smoothed.push([x, y]);
11433
+ }
11434
+ smoothed.push(points[points.length - 1]);
11435
+ return smoothed;
11436
+ }
11437
+ function strokeBoundingBox(points, margin = 0) {
11438
+ if (points.length === 0) {
11439
+ return { x: 0, y: 0, width: 0, height: 0 };
11440
+ }
11441
+ let minX = Infinity;
11442
+ let minY = Infinity;
11443
+ let maxX = -Infinity;
11444
+ let maxY = -Infinity;
11445
+ for (const [x, y] of points) {
11446
+ if (x < minX) minX = x;
11447
+ if (y < minY) minY = y;
11448
+ if (x > maxX) maxX = x;
11449
+ if (y > maxY) maxY = y;
11450
+ }
11451
+ const w = Math.max(maxX - minX, 0);
11452
+ const h = Math.max(maxY - minY, 0);
11453
+ return {
11454
+ x: minX - margin,
11455
+ y: minY - margin,
11456
+ width: Math.max(w + margin * 2, 1),
11457
+ height: Math.max(h + margin * 2, 1)
11458
+ };
11459
+ }
11460
+ function strokePointsToPathData(points, options = {}) {
11461
+ if (points.length === 0) return "";
11462
+ if (points.length === 1) {
11463
+ const [x, y] = points[0];
11464
+ return `M ${x} ${y} L ${x + 0.01} ${y}`;
11465
+ }
11466
+ if (points.length === 2) {
11467
+ const [p0, p1] = points;
11468
+ return `M ${p0[0]} ${p0[1]} L ${p1[0]} ${p1[1]}`;
11469
+ }
11470
+ const fitted = fitFreehandPath(points, options);
11471
+ return fitted.length > 0 ? fitted : `M ${points[0][0]} ${points[0][1]}`;
11472
+ }
11473
+ function strokeToShapeNode(stroke, options = {}) {
11474
+ const points = stroke.points;
11475
+ const strokeWidth = stroke.style.width || 3;
11476
+ const bounds = strokeBoundingBox(points, 0);
11477
+ const localPoints = points.map(
11478
+ ([x, y]) => [x - bounds.x, y - bounds.y]
11479
+ );
11480
+ const d = strokePointsToPathData(localPoints, {
11481
+ tolerance: _nullishCoalesce(options.tolerance, () => ( 1)),
11482
+ cornerAngleDeg: _nullishCoalesce(options.cornerAngleDeg, () => ( 40))
11483
+ });
11484
+ const width = Math.max(bounds.width, 1);
11485
+ const height = Math.max(bounds.height, 1);
11486
+ return {
11487
+ id: _nullishCoalesce(options.id, () => ( stroke.id)),
11488
+ type: "shape",
11489
+ position: { x: bounds.x, y: bounds.y },
11490
+ width,
11491
+ height,
11492
+ style: {
11493
+ width,
11494
+ height
11495
+ },
11496
+ data: {
11497
+ shape: {
11498
+ kind: "path",
11499
+ d,
11500
+ viewBox: [0, 0, width, height],
11501
+ stroke: stroke.style.color,
11502
+ strokeWidth,
11503
+ opacity: stroke.style.opacity,
11504
+ fill: "none"
11505
+ },
11506
+ tool: stroke.tool
11507
+ }
11508
+ };
11509
+ }
11510
+ function findStrokesAtPoint(point, nodes, radius = 12) {
11511
+ const matches2 = [];
11512
+ for (const node of nodes) {
11513
+ const shape = getNodeShape(node);
11514
+ if (!shape || shape.kind !== "path") continue;
11515
+ const rect = getNodeRect(node);
11516
+ const strokeWidth = _nullishCoalesce(shape.strokeWidth, () => ( 2));
11517
+ const effectiveRadius = radius + strokeWidth / 2;
11518
+ if (point[0] < rect.x - effectiveRadius || point[0] > rect.x + rect.width + effectiveRadius || point[1] < rect.y - effectiveRadius || point[1] > rect.y + rect.height + effectiveRadius) {
11519
+ continue;
11520
+ }
11521
+ const localPoint = [point[0] - rect.x, point[1] - rect.y];
11522
+ try {
11523
+ const dist3 = distanceToBezierPath(shape.d, localPoint);
11524
+ if (dist3 <= effectiveRadius) {
11525
+ matches2.push(node);
11526
+ }
11527
+ } catch (e12) {
11528
+ if (point[0] >= rect.x && point[0] <= rect.x + rect.width && point[1] >= rect.y && point[1] <= rect.y + rect.height) {
11529
+ matches2.push(node);
11530
+ }
11531
+ }
11532
+ }
11533
+ return matches2;
11534
+ }
11535
+
11536
+ // src/canvas/drawController.ts
11537
+ function createCanvasDrawController(options) {
11538
+ let currentTool = _nullishCoalesce(options.tool, () => ( "select"));
11539
+ let currentStyle = {
11540
+ ...createDefaultStrokeStyle(currentTool),
11541
+ ...options.style
11542
+ };
11543
+ let activeStroke = null;
11544
+ const erasedInDrag = /* @__PURE__ */ new Map();
11545
+ let dragStartNodes = null;
11546
+ function setTool(tool) {
11547
+ if (currentTool === tool) return;
11548
+ cancelStroke();
11549
+ currentTool = tool;
11550
+ if (tool === "pen" || tool === "highlighter") {
11551
+ currentStyle = {
11552
+ ...createDefaultStrokeStyle(tool),
11553
+ ...options.style
11554
+ };
11555
+ _optionalChain([options, 'access', _332 => _332.onStyleChange, 'optionalCall', _333 => _333(currentStyle)]);
11556
+ }
11557
+ _optionalChain([options, 'access', _334 => _334.onToolChange, 'optionalCall', _335 => _335(tool)]);
11558
+ }
11559
+ function setStyle(style) {
11560
+ currentStyle = { ...currentStyle, ...style };
11561
+ _optionalChain([options, 'access', _336 => _336.onStyleChange, 'optionalCall', _337 => _337(currentStyle)]);
11562
+ }
11563
+ function startStroke(point) {
11564
+ if (currentTool === "select") return;
11565
+ if (currentTool === "eraser") {
11566
+ erasedInDrag.clear();
11567
+ dragStartNodes = [...options.getNodes()];
11568
+ eraseAt(point);
11569
+ return;
11570
+ }
11571
+ const id = _nullishCoalesce(_optionalChain([options, 'access', _338 => _338.generateNodeId, 'optionalCall', _339 => _339()]), () => ( `stroke-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`));
11572
+ activeStroke = {
11573
+ id,
11574
+ tool: currentTool,
11575
+ points: [point],
11576
+ style: { ...currentStyle },
11577
+ startTime: Date.now()
11578
+ };
11579
+ _optionalChain([options, 'access', _340 => _340.onActiveStrokeChange, 'optionalCall', _341 => _341(activeStroke)]);
11580
+ }
11581
+ function continueStroke(point) {
11582
+ if (currentTool === "eraser") {
11583
+ eraseAt(point);
11584
+ return;
11585
+ }
11586
+ if (!activeStroke) return;
11587
+ const points = activeStroke.points;
11588
+ const last = points[points.length - 1];
11589
+ if (Math.hypot(point[0] - last[0], point[1] - last[1]) < 0.25) return;
11590
+ points.push(point);
11591
+ _optionalChain([options, 'access', _342 => _342.onActiveStrokeChange, 'optionalCall', _343 => _343({ ...activeStroke, points: [...points] })]);
11592
+ }
11593
+ function endStroke() {
11594
+ if (currentTool === "eraser") {
11595
+ const startSnapshot = dragStartNodes;
11596
+ dragStartNodes = null;
11597
+ if (erasedInDrag.size > 0 && options.history && startSnapshot) {
11598
+ const erasedIds = new Set(Array.from(erasedInDrag.keys()));
11599
+ options.history.execute({
11600
+ name: "Erase strokes",
11601
+ execute: () => {
11602
+ const remaining = options.getNodes().filter((n) => !erasedIds.has(n.id));
11603
+ options.setNodes(remaining);
11604
+ },
11605
+ undo: () => {
11606
+ options.setNodes(startSnapshot);
11607
+ }
11608
+ });
11609
+ }
11610
+ erasedInDrag.clear();
11611
+ return null;
11612
+ }
11613
+ if (!activeStroke) return null;
11614
+ const stroke = activeStroke;
11615
+ activeStroke = null;
11616
+ _optionalChain([options, 'access', _344 => _344.onActiveStrokeChange, 'optionalCall', _345 => _345(null)]);
11617
+ if (stroke.points.length === 0) return null;
11618
+ const drawOpts = _nullishCoalesce(options.drawOptions, () => ( {}));
11619
+ const smoothed = streamlinePoints(stroke.points, _nullishCoalesce(drawOpts.streamline, () => ( 0.35)));
11620
+ const node = strokeToShapeNode(
11621
+ { ...stroke, points: smoothed },
11622
+ {
11623
+ tolerance: _nullishCoalesce(drawOpts.tolerance, () => ( 1)),
11624
+ cornerAngleDeg: _nullishCoalesce(drawOpts.cornerAngleDeg, () => ( 40))
11625
+ }
11626
+ );
11627
+ if (options.history) {
11628
+ options.history.execute({
11629
+ name: `Draw ${stroke.tool}`,
11630
+ execute: () => {
11631
+ options.setNodes([...options.getNodes(), node]);
11632
+ },
11633
+ undo: () => {
11634
+ options.setNodes(options.getNodes().filter((n) => n.id !== node.id));
11635
+ }
11636
+ });
11637
+ } else {
11638
+ options.setNodes([...options.getNodes(), node]);
11639
+ }
11640
+ _optionalChain([options, 'access', _346 => _346.onStrokeComplete, 'optionalCall', _347 => _347(node)]);
11641
+ return node;
11642
+ }
11643
+ function cancelStroke() {
11644
+ if (activeStroke) {
11645
+ activeStroke = null;
11646
+ _optionalChain([options, 'access', _348 => _348.onActiveStrokeChange, 'optionalCall', _349 => _349(null)]);
11647
+ }
11648
+ if (erasedInDrag.size > 0) {
11649
+ const entries = Array.from(erasedInDrag.values());
11650
+ const current = [...options.getNodes()];
11651
+ const sorted = [...entries].sort((a, b) => a.index - b.index);
11652
+ for (const { node, index } of sorted) {
11653
+ const insertAt = Math.min(index, current.length);
11654
+ current.splice(insertAt, 0, node);
11655
+ }
11656
+ options.setNodes(current);
11657
+ erasedInDrag.clear();
11658
+ }
11659
+ }
11660
+ function eraseAt(point, radius = 12) {
11661
+ const nodes = options.getNodes();
11662
+ const candidates = findStrokesAtPoint(point, nodes, radius);
11663
+ const newlyErased = [];
11664
+ for (const candidate of candidates) {
11665
+ if (erasedInDrag.has(candidate.id) || isLocked(candidate)) continue;
11666
+ const index = nodes.findIndex((n) => n.id === candidate.id);
11667
+ if (index !== -1) {
11668
+ erasedInDrag.set(candidate.id, { node: candidate, index });
11669
+ newlyErased.push(candidate);
11670
+ }
11671
+ }
11672
+ if (newlyErased.length > 0) {
11673
+ const erasedSet = new Set(newlyErased.map((n) => n.id));
11674
+ const nextNodes = nodes.filter((n) => !erasedSet.has(n.id));
11675
+ options.setNodes(nextNodes);
11676
+ _optionalChain([options, 'access', _350 => _350.onNodesErase, 'optionalCall', _351 => _351(newlyErased)]);
11677
+ }
11678
+ return newlyErased;
11679
+ }
11680
+ return {
11681
+ get tool() {
11682
+ return currentTool;
11683
+ },
11684
+ setTool,
11685
+ get style() {
11686
+ return currentStyle;
11687
+ },
11688
+ setStyle,
11689
+ get activeStroke() {
11690
+ return activeStroke;
11691
+ },
11692
+ get isDrawing() {
11693
+ return activeStroke !== null;
11694
+ },
11695
+ startStroke,
11696
+ continueStroke,
11697
+ endStroke,
11698
+ cancelStroke,
11699
+ eraseAt
11700
+ };
11701
+ }
11702
+
11703
+
11704
+
11705
+
11706
+
11707
+
11708
+
11709
+
11710
+
11401
11711
 
11402
11712
 
11403
11713
 
@@ -11752,5 +12062,5 @@ function getCanvasComponentDragId(dataTransfer) {
11752
12062
 
11753
12063
 
11754
12064
 
11755
- exports.ANIMATABLE_PROPERTIES = ANIMATABLE_PROPERTIES; exports.ANIMATION_DATA_KEY = ANIMATION_DATA_KEY; exports.ANIMATION_EASING_LABELS = _chunkTTYCN6ZHcjs.ANIMATION_EASING_LABELS; exports.ANIMATION_EASING_PRESETS = _chunkTTYCN6ZHcjs.ANIMATION_EASING_PRESETS; exports.ANIMATION_TIME_EPSILON = _chunkTTYCN6ZHcjs.ANIMATION_TIME_EPSILON; exports.AUTO_LAYOUT_DATA_KEY = AUTO_LAYOUT_DATA_KEY; exports.AnimationEditError = AnimationEditError; exports.AnimationPlayer = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.easingFromInfluence; exports.easingLabel = _chunkTTYCN6ZHcjs.easingLabel; exports.easingToCss = _chunkTTYCN6ZHcjs.easingToCss; exports.ensureLayout = _chunkWADCJ7A7cjs.ensureLayout; exports.estimateCanvasHeight = estimateCanvasHeight; exports.estimateNodeSize = _chunkWADCJ7A7cjs.estimateNodeSize; exports.evaluateAnimation = evaluateAnimation; exports.evaluateEasing = _chunkTTYCN6ZHcjs.evaluateEasing; exports.evaluateTrack = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.interpolateAnimationValue; exports.intersectPaths = intersectPaths; exports.intersectPolygons = intersectPolygons; exports.invertNodeUpdates = invertNodeUpdates; exports.isAnimationEasing = _chunkTTYCN6ZHcjs.isAnimationEasing; exports.isAnimationKeyframe = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.mixColorsOklab; exports.moveKeyframes = moveKeyframes; exports.moveLayoutChild = moveLayoutChild; exports.multiPolygonArea = multiPolygonArea; exports.multiPolygonBounds = multiPolygonBounds; exports.nearestHandlePositions = nearestHandlePositions; exports.normalizeBezierPath = normalizeBezierPath; exports.normalizeKeyframes = _chunkTTYCN6ZHcjs.normalizeKeyframes; exports.offsetPath = offsetPath; exports.offsetShapeNodes = offsetShapeNodes; exports.oklabToRgb = _chunkTTYCN6ZHcjs.oklabToRgb; exports.oppositePosition = oppositePosition; exports.outlineShapeNodeStrokes = outlineShapeNodeStrokes; exports.outlineStroke = outlineStroke; exports.overlaps = _chunkWADCJ7A7cjs.overlaps; exports.pageHidden = _chunkTTYCN6ZHcjs.pageHidden; exports.parseCanvasClipboardData = parseCanvasClipboardData; exports.parseCanvasScenes = parseCanvasScenes; exports.parseCssEasing = _chunkTTYCN6ZHcjs.parseCssEasing; exports.parseKeyframeClipboard = parseKeyframeClipboard; exports.parseNodeStyleDeclarations = parseNodeStyleDeclarations; exports.parseOklab = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.resolveEasing; exports.resolvePadding = resolvePadding; exports.restoreCanvasMainComponent = restoreCanvasMainComponent; exports.revertShapeCombination = revertShapeCombination; exports.rgbToOklab = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.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 = _chunkTTYCN6ZHcjs.wrapAnimationTime; exports.writeNodeStyleProperty = writeNodeStyleProperty; exports.writeOverrideGroup = writeOverrideGroup; exports.xToTime = xToTime; exports.xorPolygons = xorPolygons;
12065
+ exports.ANIMATABLE_PROPERTIES = ANIMATABLE_PROPERTIES; exports.ANIMATION_DATA_KEY = ANIMATION_DATA_KEY; exports.ANIMATION_EASING_LABELS = _chunkXZ4L3R4Kcjs.ANIMATION_EASING_LABELS; exports.ANIMATION_EASING_PRESETS = _chunkXZ4L3R4Kcjs.ANIMATION_EASING_PRESETS; exports.ANIMATION_TIME_EPSILON = _chunkXHRZSB77cjs.ANIMATION_TIME_EPSILON; exports.AUTO_LAYOUT_DATA_KEY = AUTO_LAYOUT_DATA_KEY; exports.AnimationEditError = AnimationEditError; exports.AnimationPlayer = _chunkXHRZSB77cjs.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 = _chunkXZ4L3R4Kcjs.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 = _chunkXHRZSB77cjs.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 = _chunkXHRZSB77cjs.createAnimationPlayer; exports.createBezierTrajectory = createBezierTrajectory; exports.createCanvasAnimationController = createCanvasAnimationController; exports.createCanvasArrangeController = createCanvasArrangeController; exports.createCanvasAutoLayoutController = createCanvasAutoLayoutController; exports.createCanvasComponent = createCanvasComponent; exports.createCanvasComponentsController = createCanvasComponentsController; exports.createCanvasDrawController = createCanvasDrawController; exports.createCanvasInstance = createCanvasInstance; exports.createCanvasScenesStore = createCanvasScenesStore; exports.createDefaultStrokeStyle = createDefaultStrokeStyle; exports.createFanOutTrajectory = createFanOutTrajectory; exports.createGuideIndex = createGuideIndex; exports.createNodeGuideIndex = createNodeGuideIndex; exports.createNodeLookup = createNodeLookup; exports.cubicBezierAt = _chunkXZ4L3R4Kcjs.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 = _chunkXZ4L3R4Kcjs.easingFromInfluence; exports.easingLabel = _chunkXZ4L3R4Kcjs.easingLabel; exports.easingToCss = _chunkXZ4L3R4Kcjs.easingToCss; exports.elasticAt = _chunkXZ4L3R4Kcjs.elasticAt; exports.ensureLayout = _chunkWADCJ7A7cjs.ensureLayout; exports.estimateCanvasHeight = estimateCanvasHeight; exports.estimateNodeSize = _chunkWADCJ7A7cjs.estimateNodeSize; exports.evaluateAnimation = evaluateAnimation; exports.evaluateEasing = _chunkXZ4L3R4Kcjs.evaluateEasing; exports.evaluateTrack = _chunkXHRZSB77cjs.evaluateTrack; exports.excludePaths = excludePaths; exports.exportCssAnimation = exportCssAnimation; exports.findConnectorSnap = findConnectorSnap; exports.findStrokesAtPoint = findStrokesAtPoint; 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 = _chunkXHRZSB77cjs.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 = _chunkXHRZSB77cjs.interpolateAnimationValue; exports.intersectPaths = intersectPaths; exports.intersectPolygons = intersectPolygons; exports.invertNodeUpdates = invertNodeUpdates; exports.isAnimationEasing = _chunkXZ4L3R4Kcjs.isAnimationEasing; exports.isAnimationKeyframe = _chunkXHRZSB77cjs.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 = _chunkXHRZSB77cjs.mixColorsOklab; exports.moveKeyframes = moveKeyframes; exports.moveLayoutChild = moveLayoutChild; exports.multiPolygonArea = multiPolygonArea; exports.multiPolygonBounds = multiPolygonBounds; exports.nearestHandlePositions = nearestHandlePositions; exports.normalizeBezierPath = normalizeBezierPath; exports.normalizeKeyframes = _chunkXHRZSB77cjs.normalizeKeyframes; exports.offsetPath = offsetPath; exports.offsetShapeNodes = offsetShapeNodes; exports.oklabToRgb = _chunkXHRZSB77cjs.oklabToRgb; exports.oppositePosition = oppositePosition; exports.outlineShapeNodeStrokes = outlineShapeNodeStrokes; exports.outlineStroke = outlineStroke; exports.overlaps = _chunkWADCJ7A7cjs.overlaps; exports.pageHidden = _chunkXHRZSB77cjs.pageHidden; exports.parseCanvasClipboardData = parseCanvasClipboardData; exports.parseCanvasScenes = parseCanvasScenes; exports.parseCssEasing = _chunkXZ4L3R4Kcjs.parseCssEasing; exports.parseKeyframeClipboard = parseKeyframeClipboard; exports.parseNodeStyleDeclarations = parseNodeStyleDeclarations; exports.parseOklab = _chunkXHRZSB77cjs.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 = _chunkXHRZSB77cjs.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 = _chunkXZ4L3R4Kcjs.resolveEasing; exports.resolvePadding = resolvePadding; exports.restoreCanvasMainComponent = restoreCanvasMainComponent; exports.revertShapeCombination = revertShapeCombination; exports.rgbToOklab = _chunkXHRZSB77cjs.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 = _chunkXZ4L3R4Kcjs.springAt; exports.streamlinePoints = streamlinePoints; exports.strokeBoundingBox = strokeBoundingBox; exports.strokeOutlineRings = strokeOutlineRings; exports.strokePointsToPathData = strokePointsToPathData; exports.strokeToShapeNode = strokeToShapeNode; 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 = _chunkXHRZSB77cjs.wrapAnimationTime; exports.writeNodeStyleProperty = writeNodeStyleProperty; exports.writeOverrideGroup = writeOverrideGroup; exports.xToTime = xToTime; exports.xorPolygons = xorPolygons;
11756
12066
  //# sourceMappingURL=index.cjs.map