system-canvas 0.2.11 → 0.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export type { CanvasColor, NodeType, Side, EndShape, EdgeStyle, BackgroundStyle, CanvasNode, CanvasEdge, CanvasData, CanvasThemeHint, CategoryDefinition, PresetColor, GridConfig, RefIndicatorConfig, NodeTheme, EdgeTheme, GroupTheme, BreadcrumbTheme, LanesTheme, CanvasLane, CanvasTheme, ContextMenuTheme, ResolvedNode, AnchorPoint, ViewportState, BreadcrumbEntry, BoundingBox, ContextMenuEvent, CanvasSelection, NodeContextMenuItem, NodeContextMenuConfig, NodeContextMenuMatchContext, NodeContextMenuSelectContext, NodeUpdate, EdgeUpdate, NodeMenuOption, NodeAction, NodeActionGroup, SlotPosition, CategorySlots, SlotSpec, ColorSlot, ProgressSlot, CountSlot, TextSlot, LinearGradientFill, DotSlot, PillSlot, IconSlot, IconPathSpec, IconPathData, CustomSlot, NodeAccessor, SlotContext, SlotRect, RollupResult, EditableField, EditableFieldKind, RevealPlacement, CategoryReveals, RevealSpec, BaseReveal, TextReveal, ListReveal, RevealListRow, MetricsReveal, RevealMetricBlock, CustomReveal, RevealContext, RevealsTheme, } from './types.js';
2
2
  export { darkTheme, midnightTheme, lightTheme, blueprintTheme, warmTheme, roadmapTheme, resolveTheme, resolveColor, resolveNode, } from './themes/index.js';
3
- export { computeAnchorPoint, inferSide, computeEdgePath, computeEdgeMidpoint, computeBoundingBox, fitToBounds, fitBoundsIntoRect, canvasRectToScreenRect, screenToCanvas, canvasToScreen, } from './rendering/index.js';
3
+ export { computeAnchorPoint, inferSide, computeEdgePath, computeEdgeMidpoint, buildParallelEdgeGroups, computeBoundingBox, fitToBounds, fitBoundsIntoRect, canvasRectToScreenRect, screenToCanvas, canvasToScreen, } from './rendering/index.js';
4
4
  export type { Rect } from './rendering/index.js';
5
5
  export { findLaneAt, snapToLane, evenLanes, lanesExtent } from './lanes.js';
6
6
  export { resolveActionPatch, buildDefaultColorActions, getNodeActions, getNodeActionsForNode, buildDefaultToolbar, filterActionsForNode, } from './actions.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Themes
2
2
  export { darkTheme, midnightTheme, lightTheme, blueprintTheme, warmTheme, roadmapTheme, resolveTheme, resolveColor, resolveNode, } from './themes/index.js';
3
3
  // Rendering utilities
4
- export { computeAnchorPoint, inferSide, computeEdgePath, computeEdgeMidpoint, computeBoundingBox, fitToBounds, fitBoundsIntoRect, canvasRectToScreenRect, screenToCanvas, canvasToScreen, } from './rendering/index.js';
4
+ export { computeAnchorPoint, inferSide, computeEdgePath, computeEdgeMidpoint, buildParallelEdgeGroups, computeBoundingBox, fitToBounds, fitBoundsIntoRect, canvasRectToScreenRect, screenToCanvas, canvasToScreen, } from './rendering/index.js';
5
5
  // Lane helpers
6
6
  export { findLaneAt, snapToLane, evenLanes, lanesExtent } from './lanes.js';
7
7
  // Action helpers
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4EA,SAAS;AACT,OAAO,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAA;AAG7B,eAAe;AACf,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE3E,iBAAiB;AACjB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AAErB,iCAAiC;AACjC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AAEzB,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE1D,wBAAwB;AACxB,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,yBAAyB,GAC1B,MAAM,YAAY,CAAA;AAGnB,wEAAwE;AACxE,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAErB,wEAAwE;AACxE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEjD,0EAA0E;AAC1E,uEAAuE;AACvE,kBAAkB;AAClB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAElB,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,UAAU,EACV,UAAU,EACV,cAAc,EACd,OAAO,EACP,UAAU,EACV,UAAU,GACX,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEpF,+BAA+B;AAC/B,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,cAAc,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,YAAY,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,UAAU;IACrB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,QAAQ;CACT,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4EA,SAAS;AACT,OAAO,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAA;AAG7B,eAAe;AACf,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE3E,iBAAiB;AACjB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AAErB,iCAAiC;AACjC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AAEzB,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE1D,wBAAwB;AACxB,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,yBAAyB,GAC1B,MAAM,YAAY,CAAA;AAGnB,wEAAwE;AACxE,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAErB,wEAAwE;AACxE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEjD,0EAA0E;AAC1E,uEAAuE;AACvE,kBAAkB;AAClB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAElB,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,UAAU,EACV,UAAU,EACV,cAAc,EACd,OAAO,EACP,UAAU,EACV,UAAU,GACX,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEpF,+BAA+B;AAC/B,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,cAAc,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,YAAY,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,UAAU;IACrB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,QAAQ;CACT,CAAA"}
@@ -1,8 +1,17 @@
1
1
  import type { CanvasEdge, ResolvedNode, EdgeStyle, AnchorPoint } from '../types.js';
2
+ /**
3
+ * Build a map from edge id to parallel group info.
4
+ * Edges sharing the same node pair (A->B and B->A treated as the same pair)
5
+ * are assigned sequential indices within their group.
6
+ */
7
+ export declare function buildParallelEdgeGroups(edges: CanvasEdge[]): Map<string, {
8
+ index: number;
9
+ total: number;
10
+ }>;
2
11
  /**
3
12
  * Compute the SVG path `d` attribute for an edge between two nodes.
4
13
  */
5
- export declare function computeEdgePath(edge: CanvasEdge, fromNode: ResolvedNode, toNode: ResolvedNode, style?: EdgeStyle): string;
14
+ export declare function computeEdgePath(edge: CanvasEdge, fromNode: ResolvedNode, toNode: ResolvedNode, style?: EdgeStyle, parallelIndex?: number, parallelTotal?: number): string;
6
15
  /**
7
16
  * Compute the midpoint of an edge path (for label placement).
8
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"edge-routing.d.ts","sourceRoot":"","sources":["../../src/rendering/edge-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACZ,MAAM,aAAa,CAAA;AAGpB;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,SAAoB,GAC1B,MAAM,CAoBR;AAgFD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,GACnB,WAAW,CA8Bb"}
1
+ {"version":3,"file":"edge-routing.d.ts","sourceRoot":"","sources":["../../src/rendering/edge-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACZ,MAAM,aAAa,CAAA;AAGpB;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,UAAU,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAY/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,SAAoB,EAC3B,aAAa,SAAI,EACjB,aAAa,SAAI,GAChB,MAAM,CAoBR;AAkGD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,YAAY,GACnB,WAAW,CA8Bb"}
@@ -1,8 +1,27 @@
1
1
  import { computeAnchorPoint, inferSide } from './anchor-points.js';
2
+ /**
3
+ * Build a map from edge id to parallel group info.
4
+ * Edges sharing the same node pair (A->B and B->A treated as the same pair)
5
+ * are assigned sequential indices within their group.
6
+ */
7
+ export function buildParallelEdgeGroups(edges) {
8
+ const groups = new Map();
9
+ for (const edge of edges) {
10
+ const key = [edge.fromNode, edge.toNode].sort().join('|');
11
+ if (!groups.has(key))
12
+ groups.set(key, []);
13
+ groups.get(key).push(edge.id);
14
+ }
15
+ const result = new Map();
16
+ for (const ids of groups.values()) {
17
+ ids.forEach((id, i) => result.set(id, { index: i, total: ids.length }));
18
+ }
19
+ return result;
20
+ }
2
21
  /**
3
22
  * Compute the SVG path `d` attribute for an edge between two nodes.
4
23
  */
5
- export function computeEdgePath(edge, fromNode, toNode, style = 'bezier') {
24
+ export function computeEdgePath(edge, fromNode, toNode, style = 'bezier', parallelIndex = 0, parallelTotal = 1) {
6
25
  // Determine connection sides
7
26
  const inferred = inferSide(fromNode, toNode);
8
27
  const fromSide = edge.fromSide ?? inferred.fromSide;
@@ -17,7 +36,7 @@ export function computeEdgePath(edge, fromNode, toNode, style = 'bezier') {
17
36
  return computeOrthogonalPath(from, to, fromSide, toSide);
18
37
  case 'bezier':
19
38
  default:
20
- return computeBezierPath(from, to, fromSide, toSide);
39
+ return computeBezierPath(from, to, fromSide, toSide, parallelIndex, parallelTotal);
21
40
  }
22
41
  }
23
42
  /** Straight line between two points. */
@@ -26,13 +45,28 @@ function computeStraightPath(from, to) {
26
45
  }
27
46
  /**
28
47
  * Cubic bezier curve with control points offset along the connection sides.
29
- * Uses a tightness factor of 0.75 (matching the Obsidian reference).
48
+ * Uses a tightness factor of 0.4. When parallelTotal > 1, control points are
49
+ * shifted laterally (perpendicular to the from->to axis) so parallel edges fan out.
30
50
  */
31
- function computeBezierPath(from, to, fromSide, toSide) {
51
+ function computeBezierPath(from, to, fromSide, toSide, parallelIndex = 0, parallelTotal = 1) {
32
52
  const dist = Math.sqrt((to.x - from.x) ** 2 + (to.y - from.y) ** 2);
33
53
  const offset = Math.max(50, dist * 0.4);
34
54
  const cp1 = controlPointOffset(from, fromSide, offset);
35
55
  const cp2 = controlPointOffset(to, toSide, offset);
56
+ if (parallelTotal > 1) {
57
+ // Lateral shift perpendicular to the from->to direction
58
+ const lateralShift = (parallelIndex - (parallelTotal - 1) / 2) * 30;
59
+ const dx = to.x - from.x;
60
+ const dy = to.y - from.y;
61
+ const len = Math.sqrt(dx * dx + dy * dy) || 1;
62
+ // Perpendicular unit vector (rotate 90 degrees)
63
+ const perpX = -dy / len;
64
+ const perpY = dx / len;
65
+ cp1.x += perpX * lateralShift;
66
+ cp1.y += perpY * lateralShift;
67
+ cp2.x += perpX * lateralShift;
68
+ cp2.y += perpY * lateralShift;
69
+ }
36
70
  return `M ${from.x} ${from.y} C ${cp1.x} ${cp1.y}, ${cp2.x} ${cp2.y}, ${to.x} ${to.y}`;
37
71
  }
38
72
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"edge-routing.js","sourceRoot":"","sources":["../../src/rendering/edge-routing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edge-routing.js","sourceRoot":"","sources":["../../src/rendering/edge-routing.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export { computeAnchorPoint, inferSide } from './anchor-points.js';
2
- export { computeEdgePath, computeEdgeMidpoint } from './edge-routing.js';
2
+ export { computeEdgePath, computeEdgeMidpoint, buildParallelEdgeGroups } from './edge-routing.js';
3
3
  export { computeBoundingBox, fitToBounds, fitBoundsIntoRect, canvasRectToScreenRect, screenToCanvas, canvasToScreen, } from './viewport-math.js';
4
4
  export type { Rect } from './viewport-math.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rendering/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rendering/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA"}
@@ -1,4 +1,4 @@
1
1
  export { computeAnchorPoint, inferSide } from './anchor-points.js';
2
- export { computeEdgePath, computeEdgeMidpoint } from './edge-routing.js';
2
+ export { computeEdgePath, computeEdgeMidpoint, buildParallelEdgeGroups } from './edge-routing.js';
3
3
  export { computeBoundingBox, fitToBounds, fitBoundsIntoRect, canvasRectToScreenRect, screenToCanvas, canvasToScreen, } from './viewport-math.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rendering/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rendering/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "system-canvas",
3
- "version": "0.2.11",
3
+ "version": "0.2.13",
4
4
  "description": "Interactive, zoomable SVG diagrams from JSON Canvas documents. Pure TypeScript core with types, themes, edge routing, and viewport math.",
5
5
  "license": "MIT",
6
6
  "repository": {