sketchmark 1.3.6 → 1.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EAIV,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,cAAc,CAAC;AAsS9D,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB1E;AAMD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACtE,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,EAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,CAAC,MAAM,EAAE,MAAM,CAAC,CA6ClB;AAyGD,wBAAgB,MAAM,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU,CA8JjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EAIV,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,UAAU,EAA4B,MAAM,cAAc,CAAC;AAsSzE,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB1E;AAMD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACtE,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,EAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,CAAC,MAAM,EAAE,MAAM,CAAC,CA6ClB;AA8ID,wBAAgB,MAAM,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU,CA8JjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,UAAU,EAoBX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAqC/C,qBAAa,UAAW,SAAQ,KAAK;IAG1B,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;gBAFlB,GAAG,EAAE,MAAM,EACJ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM;CAKrB;AAwCD,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,UAAU,CA6gCzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,UAAU,EAsBX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAqC/C,qBAAa,UAAW,SAAQ,KAAK;IAG1B,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;gBAFlB,GAAG,EAAE,MAAM,EACJ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM;CAKrB;AA0FD,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,UAAU,CA6jCzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/canvas/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EAEX,MAAM,aAAa,CAAC;AAiCrB,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAQ,MAAM,CAAC;IACrB,UAAU,CAAC,EAAG,MAAM,CAAC;IACrB,SAAS,CAAC,EAAI,MAAM,CAAC;IACrB,MAAM,CAAC,EAAO,MAAM,CAAC;IACrB,KAAK,CAAC,EAAQ,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,OAAO,CAAC,EAAM,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAoGD,wBAAgB,cAAc,CAC5B,EAAE,EAAO,UAAU,EACnB,MAAM,EAAG,iBAAiB,EAC1B,OAAO,GAAE,qBAA0B,GAClC,IAAI,CAoaN;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/canvas/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EAEX,MAAM,aAAa,CAAC;AAmCrB,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAQ,MAAM,CAAC;IACrB,UAAU,CAAC,EAAG,MAAM,CAAC;IACrB,SAAS,CAAC,EAAI,MAAM,CAAC;IACrB,MAAM,CAAC,EAAO,MAAM,CAAC;IACrB,KAAK,CAAC,EAAQ,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,OAAO,CAAC,EAAM,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAoGD,wBAAgB,cAAc,CAC5B,EAAE,EAAO,UAAU,EACnB,MAAM,EAAG,iBAAiB,EAC1B,OAAO,GAAE,qBAA0B,GAClC,IAAI,CA2aN;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEpE"}
@@ -1,4 +1,5 @@
1
1
  import type { SceneNode, SceneGroup, SceneTable, SceneChart } from "../scene";
2
+ import type { EdgePoint } from "../ast/types";
2
3
  export declare function hashStr(s: string): number;
3
4
  export declare function darkenHex(hex: string, amount?: number): string;
4
5
  export declare function resolveStyleFont(style: Record<string, unknown>, fallback: string): string;
@@ -23,5 +24,20 @@ export declare function getConnPoint(src: {
23
24
  h: number;
24
25
  shape?: string;
25
26
  }, dstCX: number, dstCY: number, anchor?: string): [number, number];
27
+ export declare function compactPolylinePoints(points: EdgePoint[]): EdgePoint[];
28
+ export declare function polylinePathData(points: EdgePoint[]): string;
29
+ export declare function polylineEndpointDirection(points: EdgePoint[], end: "start" | "end"): EdgePoint;
30
+ export declare function insetPolylineEndpoints(points: EdgePoint[], arrowAt: "end" | "start" | "both" | "none", inset: number): EdgePoint[];
31
+ export declare function polylineLabelPosition(points: EdgePoint[], offset: number, dx?: number, dy?: number): {
32
+ x: number;
33
+ y: number;
34
+ };
35
+ export declare function polylineArrowTipPoint(entity: {
36
+ x: number;
37
+ y: number;
38
+ w: number;
39
+ h: number;
40
+ shape?: string;
41
+ }, points: EdgePoint[], end: "start" | "end"): EdgePoint;
26
42
  export declare function groupDepth(g: SceneGroup, gm: Map<string, SceneGroup>): number;
27
43
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/renderer/shared.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACX,MAAM,UAAU,CAAC;AAKlB,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIzC;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAO,GAAG,MAAM,CAK5D;AAGD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR;AAGD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAUjF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIrF;AAGD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG;IAC3C,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB,CASA;AAGD,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAC9C,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GACrB,CAAC,MAAM,EAAE,MAAM,CAAC,CASlB;AAGD,wBAAgB,eAAe,CAC7B,EAAE,EAAG,MAAM,EACX,EAAE,EAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC3B,EAAE,EAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC5B,EAAE,EAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC5B,EAAE,EAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAC3B;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEvE;AAGD,wBAAgB,YAAY,CAC1B,GAAG,EAAI;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACrE,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,CAAC,MAAM,EAAE,MAAM,CAAC,CAElB;AAGD,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,CAK7E"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/renderer/shared.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/svg/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EAEX,MAAM,aAAa,CAAC;AAoQrB,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,WAAW,CACzB,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,WAAW,GAAG,aAAa,EACtC,OAAO,GAAE,kBAAuB,GAC/B,aAAa,CAglBf;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAKtD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/svg/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,aAAa,CAAC;AA4TrB,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,WAAW,CACzB,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,WAAW,GAAG,aAAa,EACtC,OAAO,GAAE,kBAAuB,GAC/B,aAAa,CAylBf;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAKtD"}
@@ -1,4 +1,4 @@
1
- import type { DiagramAST, ASTNode, ASTStepItem, StyleProps, GroupChildRef, RootItemRef, ASTTableRow } from "../ast/types";
1
+ import type { DiagramAST, ASTNode, ASTStepItem, StyleProps, EdgePoint, EdgeRoute, GroupChildRef, RootItemRef, ASTTableRow } from "../ast/types";
2
2
  import type { MarkdownLine } from '../markdown/parser';
3
3
  export type { GroupChildRef, RootItemRef };
4
4
  export interface SceneRect {
@@ -42,10 +42,12 @@ export interface SceneEdge {
42
42
  labelDy?: number;
43
43
  fromAnchor?: string;
44
44
  toAnchor?: string;
45
+ route?: EdgeRoute;
46
+ via?: EdgePoint[];
45
47
  dashed: boolean;
46
48
  bidirectional: boolean;
47
49
  style: StyleProps;
48
- points?: [number, number][];
50
+ points?: EdgePoint[];
49
51
  }
50
52
  export interface SceneGroup {
51
53
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scene/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scene/index.ts"],"names":[],"mappings":"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"}
@@ -360,6 +360,39 @@ var AIDiagram = (function (exports) {
360
360
  function isPropKeyToken(t) {
361
361
  return !!t && (t.type === "IDENT" || t.type === "KEYWORD");
362
362
  }
363
+ const NUMBER_RE = /[-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?/g;
364
+ function parseEdgeWaypoints(value, token) {
365
+ if (!value)
366
+ return undefined;
367
+ const numbers = (value.match(NUMBER_RE) ?? []).map((part) => Number(part));
368
+ if (!numbers.length)
369
+ return undefined;
370
+ if (numbers.length % 2 !== 0) {
371
+ throw new ParseError(`Edge via must contain x,y coordinate pairs`, token.line, token.col);
372
+ }
373
+ const points = [];
374
+ for (let index = 0; index < numbers.length; index += 2) {
375
+ const x = numbers[index];
376
+ const y = numbers[index + 1];
377
+ if (!Number.isFinite(x) || !Number.isFinite(y)) {
378
+ throw new ParseError(`Edge via contains a non-numeric coordinate`, token.line, token.col);
379
+ }
380
+ points.push([x, y]);
381
+ }
382
+ return points.length ? points : undefined;
383
+ }
384
+ function normalizeEdgeRoute(value, token) {
385
+ if (!value)
386
+ return undefined;
387
+ const normalized = value.toLowerCase();
388
+ if (normalized === "straight" || normalized === "polyline" || normalized === "orthogonal") {
389
+ return normalized;
390
+ }
391
+ if (normalized === "ortho" || normalized === "elbow") {
392
+ return "orthogonal";
393
+ }
394
+ throw new ParseError(`Unsupported edge route "${value}"; use straight, orthogonal, or polyline`, token.line, token.col);
395
+ }
363
396
  function parse(src, options = {}) {
364
397
  resetUid();
365
398
  const preparedSource = applyPluginPreprocessors(src, options.plugins);
@@ -718,28 +751,63 @@ var AIDiagram = (function (exports) {
718
751
  height: props.height !== undefined ? parseFloat(props.height) : undefined,
719
752
  };
720
753
  }
721
- function parseEdge(fromId, connector, rest) {
722
- const toTok = rest.shift();
723
- if (!toTok)
724
- throw new ParseError("Expected edge target", 0, 0);
754
+ function parseEdgeProps(toks) {
725
755
  const props = {};
726
756
  let j = 0;
727
- while (j < rest.length) {
728
- const t = rest[j];
729
- if ((t.type === "IDENT" || t.type === "KEYWORD") &&
730
- j + 1 < rest.length &&
731
- rest[j + 1].type === "EQUALS") {
732
- props[t.value] = rest[j + 2]?.value ?? "";
733
- j += 3;
757
+ while (j < toks.length) {
758
+ const key = toks[j];
759
+ const eq = toks[j + 1];
760
+ if (!isPropKeyToken(key) || eq?.type !== "EQUALS") {
761
+ j++;
762
+ continue;
734
763
  }
735
- else {
764
+ const value = toks[j + 2];
765
+ if (!value) {
736
766
  j++;
767
+ continue;
737
768
  }
769
+ if (value.type === "LBRACKET") {
770
+ const parts = [];
771
+ let depth = 1;
772
+ j += 3;
773
+ while (j < toks.length && depth > 0) {
774
+ const tok = toks[j];
775
+ if (tok.type === "LBRACKET") {
776
+ depth++;
777
+ }
778
+ else if (tok.type === "RBRACKET") {
779
+ depth--;
780
+ if (depth === 0) {
781
+ j++;
782
+ break;
783
+ }
784
+ }
785
+ if (depth > 0)
786
+ parts.push(tok.value);
787
+ j++;
788
+ }
789
+ if (depth > 0) {
790
+ throw new ParseError(`Unterminated edge property list; expected ']'`, key.line, key.col);
791
+ }
792
+ props[key.value] = parts.join(" ");
793
+ continue;
794
+ }
795
+ props[key.value] = value.value;
796
+ j += 3;
738
797
  }
798
+ return props;
799
+ }
800
+ function parseEdge(fromId, connector, rest) {
801
+ const toTok = rest.shift();
802
+ if (!toTok)
803
+ throw new ParseError("Expected edge target", 0, 0);
804
+ const props = parseEdgeProps(rest);
739
805
  const dashed = connector.includes("--") ||
740
806
  connector.includes(".-") ||
741
807
  connector.includes("-.");
742
808
  const bidirectional = connector.includes("<") && connector.includes(">");
809
+ const via = parseEdgeWaypoints(props.via, toTok);
810
+ const route = normalizeEdgeRoute(props.route, toTok) ?? (via?.length ? "polyline" : undefined);
743
811
  return {
744
812
  kind: "edge",
745
813
  id: uid("edge"),
@@ -751,6 +819,8 @@ var AIDiagram = (function (exports) {
751
819
  labelDy: props["label-dy"] !== undefined ? parseFloat(props["label-dy"]) : undefined,
752
820
  fromAnchor: props["anchor-from"],
753
821
  toAnchor: props["anchor-to"],
822
+ route,
823
+ via,
754
824
  dashed,
755
825
  bidirectional,
756
826
  style: propsToStyle(props),
@@ -3684,6 +3754,8 @@ var AIDiagram = (function (exports) {
3684
3754
  labelDy: e.labelDy,
3685
3755
  fromAnchor: e.fromAnchor,
3686
3756
  toAnchor: e.toAnchor,
3757
+ route: e.route,
3758
+ via: e.via,
3687
3759
  dashed: e.dashed ?? false,
3688
3760
  bidirectional: e.bidirectional ?? false,
3689
3761
  style: e.style ?? {},
@@ -4285,6 +4357,151 @@ var AIDiagram = (function (exports) {
4285
4357
  return anchoredConnPoint(src, anchor, dstCX, dstCY);
4286
4358
  }
4287
4359
  // ── Group depth (for paint order) ────────────────────────────────────────
4360
+ function segmentLength(a, b) {
4361
+ return Math.hypot(b[0] - a[0], b[1] - a[1]);
4362
+ }
4363
+ function compactPolylinePoints(points) {
4364
+ const compacted = [];
4365
+ for (const point of points) {
4366
+ const previous = compacted[compacted.length - 1];
4367
+ if (!previous || segmentLength(previous, point) > 0.01) {
4368
+ compacted.push(point);
4369
+ }
4370
+ }
4371
+ return compacted;
4372
+ }
4373
+ function polylinePathData(points) {
4374
+ return points
4375
+ .map(([x, y], index) => `${index === 0 ? "M" : "L"} ${x} ${y}`)
4376
+ .join(" ");
4377
+ }
4378
+ function polylineEndpointDirection(points, end) {
4379
+ const step = end === "start" ? 1 : -1;
4380
+ let index = end === "start" ? 0 : points.length - 1;
4381
+ while (index + step >= 0 && index + step < points.length) {
4382
+ const from = points[index];
4383
+ const to = points[index + step];
4384
+ const dx = to[0] - from[0];
4385
+ const dy = to[1] - from[1];
4386
+ const len = Math.hypot(dx, dy);
4387
+ if (len > 0.01) {
4388
+ return end === "start" ? [dx / len, dy / len] : [-dx / len, -dy / len];
4389
+ }
4390
+ index += step;
4391
+ }
4392
+ return [1, 0];
4393
+ }
4394
+ function insetPolylineEndpoints(points, arrowAt, inset) {
4395
+ const next = points.map((point) => [point[0], point[1]]);
4396
+ if (next.length < 2)
4397
+ return next;
4398
+ if (arrowAt === "start" || arrowAt === "both") {
4399
+ const [dx, dy] = polylineEndpointDirection(next, "start");
4400
+ next[0] = [next[0][0] + dx * inset, next[0][1] + dy * inset];
4401
+ }
4402
+ if (arrowAt === "end" || arrowAt === "both") {
4403
+ const [dx, dy] = polylineEndpointDirection(next, "end");
4404
+ const last = next.length - 1;
4405
+ next[last] = [next[last][0] - dx * inset, next[last][1] - dy * inset];
4406
+ }
4407
+ return compactPolylinePoints(next);
4408
+ }
4409
+ function polylineLabelPosition(points, offset, dx = 0, dy = 0) {
4410
+ if (points.length < 2) {
4411
+ const [x, y] = points[0] ?? [0, 0];
4412
+ return { x: x + dx, y: y + dy };
4413
+ }
4414
+ const lengths = points.slice(1).map((point, index) => segmentLength(points[index], point));
4415
+ const total = lengths.reduce((sum, value) => sum + value, 0);
4416
+ if (total <= 0.01) {
4417
+ const [x, y] = points[0];
4418
+ return { x: x + dx, y: y + dy };
4419
+ }
4420
+ let travelled = 0;
4421
+ const target = total / 2;
4422
+ for (let index = 0; index < lengths.length; index += 1) {
4423
+ const length = lengths[index];
4424
+ if (travelled + length >= target) {
4425
+ const from = points[index];
4426
+ const to = points[index + 1];
4427
+ const t = length > 0 ? (target - travelled) / length : 0;
4428
+ const ux = (to[0] - from[0]) / length;
4429
+ const uy = (to[1] - from[1]) / length;
4430
+ return {
4431
+ x: from[0] + (to[0] - from[0]) * t - uy * offset + dx,
4432
+ y: from[1] + (to[1] - from[1]) * t + ux * offset + dy,
4433
+ };
4434
+ }
4435
+ travelled += length;
4436
+ }
4437
+ const [x, y] = points[points.length - 1];
4438
+ return { x: x + dx, y: y + dy };
4439
+ }
4440
+ function rectBoundaryPoint(entity, point, direction) {
4441
+ const [px, py] = point;
4442
+ const [dx, dy] = direction;
4443
+ const candidates = [];
4444
+ const minX = entity.x;
4445
+ const maxX = entity.x + entity.w;
4446
+ const minY = entity.y;
4447
+ const maxY = entity.y + entity.h;
4448
+ const epsilon = 0.01;
4449
+ if (Math.abs(dx) > epsilon) {
4450
+ candidates.push((minX - px) / dx, (maxX - px) / dx);
4451
+ }
4452
+ if (Math.abs(dy) > epsilon) {
4453
+ candidates.push((minY - py) / dy, (maxY - py) / dy);
4454
+ }
4455
+ const valid = candidates
4456
+ .filter((t) => t >= -epsilon)
4457
+ .map((t) => ({
4458
+ t: Math.max(0, t),
4459
+ x: px + dx * t,
4460
+ y: py + dy * t,
4461
+ }))
4462
+ .filter(({ x, y }) => x >= minX - epsilon &&
4463
+ x <= maxX + epsilon &&
4464
+ y >= minY - epsilon &&
4465
+ y <= maxY + epsilon)
4466
+ .sort((a, b) => a.t - b.t);
4467
+ const hit = valid[0];
4468
+ return hit ? [hit.x, hit.y] : point;
4469
+ }
4470
+ function ellipseBoundaryPoint(entity, point, direction) {
4471
+ const [px, py] = point;
4472
+ const [dx, dy] = direction;
4473
+ const cx = entity.x + entity.w / 2;
4474
+ const cy = entity.y + entity.h / 2;
4475
+ const rx = Math.max(1, entity.w * 0.44);
4476
+ const ry = Math.max(1, entity.h * 0.44);
4477
+ const x0 = px - cx;
4478
+ const y0 = py - cy;
4479
+ const a = (dx * dx) / (rx * rx) + (dy * dy) / (ry * ry);
4480
+ const b = 2 * ((x0 * dx) / (rx * rx) + (y0 * dy) / (ry * ry));
4481
+ const c = (x0 * x0) / (rx * rx) + (y0 * y0) / (ry * ry) - 1;
4482
+ const disc = b * b - 4 * a * c;
4483
+ if (a <= 0 || disc < 0)
4484
+ return point;
4485
+ const sqrt = Math.sqrt(disc);
4486
+ const hits = [(-b - sqrt) / (2 * a), (-b + sqrt) / (2 * a)]
4487
+ .filter((t) => t >= -0.01)
4488
+ .sort((left, right) => left - right);
4489
+ const t = Math.max(0, hits[0] ?? 0);
4490
+ return [px + dx * t, py + dy * t];
4491
+ }
4492
+ function polylineArrowTipPoint(entity, points, end) {
4493
+ const point = end === "start" ? points[0] : points[points.length - 1];
4494
+ if (!point)
4495
+ return [0, 0];
4496
+ const [dx, dy] = polylineEndpointDirection(points, end);
4497
+ const outward = end === "start" ? [dx, dy] : [-dx, -dy];
4498
+ if (Math.hypot(outward[0], outward[1]) <= 0.01)
4499
+ return point;
4500
+ if (entity.shape === "circle") {
4501
+ return ellipseBoundaryPoint(entity, point, outward);
4502
+ }
4503
+ return rectBoundaryPoint(entity, point, outward);
4504
+ }
4288
4505
  function groupDepth(g, gm) {
4289
4506
  let d = 0;
4290
4507
  let cur = g;
@@ -5245,6 +5462,31 @@ var AIDiagram = (function (exports) {
5245
5462
  const t = Math.min(tx, ty);
5246
5463
  return [cx + t * dx, cy + t * dy];
5247
5464
  }
5465
+ function distance$1(a, b) {
5466
+ return Math.hypot(b[0] - a[0], b[1] - a[1]);
5467
+ }
5468
+ function compactEdgePoints(points) {
5469
+ const compacted = [];
5470
+ for (const point of points) {
5471
+ const previous = compacted[compacted.length - 1];
5472
+ if (!previous || distance$1(previous, point) > 0.01) {
5473
+ compacted.push(point);
5474
+ }
5475
+ }
5476
+ return compacted;
5477
+ }
5478
+ function orthogonalEdgePoints(start, end) {
5479
+ if (Math.abs(start[0] - end[0]) < 0.01 || Math.abs(start[1] - end[1]) < 0.01) {
5480
+ return [start, end];
5481
+ }
5482
+ const midX = (start[0] + end[0]) / 2;
5483
+ return compactEdgePoints([
5484
+ start,
5485
+ [midX, start[1]],
5486
+ [midX, end[1]],
5487
+ end,
5488
+ ]);
5489
+ }
5248
5490
  function routeEdges(sg) {
5249
5491
  const nm = nodeMap(sg);
5250
5492
  const tm = tableMap(sg);
@@ -5274,10 +5516,17 @@ var AIDiagram = (function (exports) {
5274
5516
  }
5275
5517
  const dstCX = dst.x + dst.w / 2, dstCY = dst.y + dst.h / 2;
5276
5518
  const srcCX = src.x + src.w / 2, srcCY = src.y + src.h / 2;
5277
- e.points = [
5278
- anchoredConnPoint(src, e.fromAnchor, dstCX, dstCY),
5279
- anchoredConnPoint(dst, e.toAnchor, srcCX, srcCY),
5280
- ];
5519
+ const start = anchoredConnPoint(src, e.fromAnchor, dstCX, dstCY);
5520
+ const end = anchoredConnPoint(dst, e.toAnchor, srcCX, srcCY);
5521
+ if (e.via?.length) {
5522
+ e.points = compactEdgePoints([start, ...e.via, end]);
5523
+ }
5524
+ else if (e.route === "orthogonal") {
5525
+ e.points = orthogonalEdgePoints(start, end);
5526
+ }
5527
+ else {
5528
+ e.points = [start, end];
5529
+ }
5281
5530
  }
5282
5531
  }
5283
5532
  function computeBounds(sg, margin) {
@@ -5287,6 +5536,7 @@ var AIDiagram = (function (exports) {
5287
5536
  ...sg.tables.map((t) => t.x + t.w),
5288
5537
  ...sg.charts.map((c) => c.x + c.w),
5289
5538
  ...sg.markdowns.map((m) => m.x + m.w),
5539
+ ...sg.edges.flatMap((e) => (e.points ?? []).map(([x]) => x)),
5290
5540
  ];
5291
5541
  const allY = [
5292
5542
  ...sg.nodes.map((n) => n.y + n.h),
@@ -5294,6 +5544,7 @@ var AIDiagram = (function (exports) {
5294
5544
  ...sg.tables.map((t) => t.y + t.h),
5295
5545
  ...sg.charts.map((c) => c.y + c.h),
5296
5546
  ...sg.markdowns.map((m) => m.y + m.h),
5547
+ ...sg.edges.flatMap((e) => (e.points ?? []).map(([, y]) => y)),
5297
5548
  ];
5298
5549
  const autoWidth = (allX.length ? Math.max(...allX) : 400) + margin;
5299
5550
  const autoHeight = (allY.length ? Math.max(...allY) : 300) + margin;
@@ -8281,6 +8532,36 @@ var AIDiagram = (function (exports) {
8281
8532
  if (groupId)
8282
8533
  el.dataset.parentGroup = groupId;
8283
8534
  }
8535
+ function resolveEdgeEndpointKind(id, nm, tm, gm, cm) {
8536
+ if (nm.has(id))
8537
+ return "node";
8538
+ if (gm.has(id))
8539
+ return "group";
8540
+ if (tm.has(id))
8541
+ return "table";
8542
+ if (cm.has(id))
8543
+ return "chart";
8544
+ return null;
8545
+ }
8546
+ function collectEdgeGroupLineage(endpointId, endpointKind, parentGroups) {
8547
+ const lineage = [];
8548
+ let groupId = endpointKind === "group"
8549
+ ? endpointId
8550
+ : parentGroups.get(`${endpointKind}:${endpointId}`);
8551
+ while (groupId) {
8552
+ lineage.push(groupId);
8553
+ groupId = parentGroups.get(`group:${groupId}`);
8554
+ }
8555
+ return lineage;
8556
+ }
8557
+ function resolveEdgeParentGroupId(fromId, toId, nm, tm, gm, cm, parentGroups) {
8558
+ const fromKind = resolveEdgeEndpointKind(fromId, nm, tm, gm, cm);
8559
+ const toKind = resolveEdgeEndpointKind(toId, nm, tm, gm, cm);
8560
+ if (!fromKind || !toKind)
8561
+ return undefined;
8562
+ const toLineage = new Set(collectEdgeGroupLineage(toId, toKind, parentGroups));
8563
+ return collectEdgeGroupLineage(fromId, fromKind, parentGroups).find((groupId) => toLineage.has(groupId));
8564
+ }
8284
8565
  // ── Node shapes ───────────────────────────────────────────────────────────
8285
8566
  function renderShape$1(rc, n, palette) {
8286
8567
  const s = n.style ?? {};
@@ -8437,19 +8718,16 @@ var AIDiagram = (function (exports) {
8437
8718
  const srcCX = src.x + src.w / 2, srcCY = src.y + src.h / 2;
8438
8719
  const [x1, y1] = getConnPoint(src, dstCX, dstCY, e.fromAnchor);
8439
8720
  const [x2, y2] = getConnPoint(dst, srcCX, srcCY, e.toAnchor);
8721
+ const points = compactPolylinePoints(e.points?.length && e.points.length >= 2 ? e.points : [[x1, y1], [x2, y2]]);
8440
8722
  const eg = mkGroup(`edge-${e.from}-${e.to}`, "eg");
8723
+ setParentGroupData(eg, resolveEdgeParentGroupId(e.from, e.to, nm, tm, gmMap, cm, parentGroups));
8441
8724
  if (e.style?.opacity != null)
8442
8725
  eg.setAttribute("opacity", String(e.style.opacity));
8443
- const len = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) || 1;
8444
- const nx = (x2 - x1) / len, ny = (y2 - y1) / len;
8445
8726
  const ecol = String(e.style?.stroke ?? palette.edgeStroke);
8446
8727
  const { arrowAt, dashed } = connMeta(e.connector);
8447
8728
  const HEAD = EDGE.headInset;
8448
- const sx1 = arrowAt === "start" || arrowAt === "both" ? x1 + nx * HEAD : x1;
8449
- const sy1 = arrowAt === "start" || arrowAt === "both" ? y1 + ny * HEAD : y1;
8450
- const sx2 = arrowAt === "end" || arrowAt === "both" ? x2 - nx * HEAD : x2;
8451
- const sy2 = arrowAt === "end" || arrowAt === "both" ? y2 - ny * HEAD : y2;
8452
- const shaft = rc.line(sx1, sy1, sx2, sy2, {
8729
+ const shaftPoints = insetPolylineEndpoints(points, arrowAt, HEAD);
8730
+ const shaft = rc.path(polylinePathData(shaftPoints), {
8453
8731
  ...BASE_ROUGH,
8454
8732
  roughness: 0.9,
8455
8733
  seed: hashStr$3(e.from + e.to),
@@ -8460,18 +8738,21 @@ var AIDiagram = (function (exports) {
8460
8738
  shaft.setAttribute("data-edge-role", "shaft");
8461
8739
  eg.appendChild(shaft);
8462
8740
  if (arrowAt === "end" || arrowAt === "both") {
8463
- const endHead = arrowHead(rc, x2, y2, Math.atan2(y2 - y1, x2 - x1), ecol, hashStr$3(e.to));
8741
+ const [endDx, endDy] = polylineEndpointDirection(points, "end");
8742
+ const [endX, endY] = polylineArrowTipPoint(dst, points, "end");
8743
+ const endHead = arrowHead(rc, endX, endY, Math.atan2(endDy, endDx), ecol, hashStr$3(e.to));
8464
8744
  endHead.setAttribute("data-edge-role", "head");
8465
8745
  eg.appendChild(endHead);
8466
8746
  }
8467
8747
  if (arrowAt === "start" || arrowAt === "both") {
8468
- const startHead = arrowHead(rc, x1, y1, Math.atan2(y1 - y2, x1 - x2), ecol, hashStr$3(e.from + "back"));
8748
+ const [startDx, startDy] = polylineEndpointDirection(points, "start");
8749
+ const [startX, startY] = polylineArrowTipPoint(src, points, "start");
8750
+ const startHead = arrowHead(rc, startX, startY, Math.atan2(-startDy, -startDx), ecol, hashStr$3(e.from + "back"));
8469
8751
  startHead.setAttribute("data-edge-role", "head");
8470
8752
  eg.appendChild(startHead);
8471
8753
  }
8472
8754
  if (e.label) {
8473
- const mx = (x1 + x2) / 2 - ny * EDGE.labelOffset + (e.labelDx ?? 0);
8474
- const my = (y1 + y2) / 2 + nx * EDGE.labelOffset + (e.labelDy ?? 0);
8755
+ const { x: mx, y: my } = polylineLabelPosition(points, EDGE.labelOffset, e.labelDx ?? 0, e.labelDy ?? 0);
8475
8756
  const tw = Math.max(e.label.length * 7 + 12, 36);
8476
8757
  const bg = se("rect");
8477
8758
  bg.setAttribute("x", String(mx - tw / 2));
@@ -9183,31 +9464,31 @@ var AIDiagram = (function (exports) {
9183
9464
  const srcCX = src.x + src.w / 2, srcCY = src.y + src.h / 2;
9184
9465
  const [x1, y1] = getConnPoint(src, dstCX, dstCY, e.fromAnchor);
9185
9466
  const [x2, y2] = getConnPoint(dst, srcCX, srcCY, e.toAnchor);
9467
+ const points = compactPolylinePoints(e.points?.length && e.points.length >= 2 ? e.points : [[x1, y1], [x2, y2]]);
9186
9468
  if (e.style?.opacity != null)
9187
9469
  ctx.globalAlpha = Number(e.style.opacity);
9188
9470
  const ecol = String(e.style?.stroke ?? palette.edgeStroke);
9189
9471
  const { arrowAt, dashed } = connMeta(e.connector);
9190
- const len = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) || 1;
9191
- const nx = (x2 - x1) / len, ny = (y2 - y1) / len;
9192
9472
  const HEAD = EDGE.headInset;
9193
- const sx1 = arrowAt === 'start' || arrowAt === 'both' ? x1 + nx * HEAD : x1;
9194
- const sy1 = arrowAt === 'start' || arrowAt === 'both' ? y1 + ny * HEAD : y1;
9195
- const sx2 = arrowAt === 'end' || arrowAt === 'both' ? x2 - nx * HEAD : x2;
9196
- const sy2 = arrowAt === 'end' || arrowAt === 'both' ? y2 - ny * HEAD : y2;
9197
- rc.line(sx1, sy1, sx2, sy2, {
9473
+ const shaftPoints = insetPolylineEndpoints(points, arrowAt, HEAD);
9474
+ rc.path(polylinePathData(shaftPoints), {
9198
9475
  ...R, roughness: 0.9, seed: hashStr$3(e.from + e.to),
9199
9476
  stroke: ecol,
9200
9477
  strokeWidth: Number(e.style?.strokeWidth ?? 1.6),
9201
9478
  ...(dashed ? { strokeLineDash: EDGE.dashPattern } : {}),
9202
9479
  });
9203
- const ang = Math.atan2(y2 - y1, x2 - x1);
9204
- if (arrowAt === 'end' || arrowAt === 'both')
9205
- drawArrowHead(rc, x2, y2, ang, ecol, hashStr$3(e.to));
9206
- if (arrowAt === 'start' || arrowAt === 'both')
9207
- drawArrowHead(rc, x1, y1, Math.atan2(y1 - y2, x1 - x2), ecol, hashStr$3(e.from + 'back'));
9480
+ if (arrowAt === 'end' || arrowAt === 'both') {
9481
+ const [endDx, endDy] = polylineEndpointDirection(points, 'end');
9482
+ const [endX, endY] = polylineArrowTipPoint(dst, points, 'end');
9483
+ drawArrowHead(rc, endX, endY, Math.atan2(endDy, endDx), ecol, hashStr$3(e.to));
9484
+ }
9485
+ if (arrowAt === 'start' || arrowAt === 'both') {
9486
+ const [startDx, startDy] = polylineEndpointDirection(points, 'start');
9487
+ const [startX, startY] = polylineArrowTipPoint(src, points, 'start');
9488
+ drawArrowHead(rc, startX, startY, Math.atan2(-startDy, -startDx), ecol, hashStr$3(e.from + 'back'));
9489
+ }
9208
9490
  if (e.label) {
9209
- const mx = (x1 + x2) / 2 - ny * EDGE.labelOffset + (e.labelDx ?? 0);
9210
- const my = (y1 + y2) / 2 + nx * EDGE.labelOffset + (e.labelDy ?? 0);
9491
+ const { x: mx, y: my } = polylineLabelPosition(points, EDGE.labelOffset, e.labelDx ?? 0, e.labelDy ?? 0);
9211
9492
  // ── Edge label: font, font-size, letter-spacing ──
9212
9493
  // always center-anchored (single line)
9213
9494
  const eFontSize = Number(e.style?.fontSize ?? EDGE.labelFontSize);
@@ -9484,7 +9765,7 @@ var AIDiagram = (function (exports) {
9484
9765
  const getNoteEl = (svg, id) => getEl(svg, `note-${id}`);
9485
9766
  const getChartEl = (svg, id) => getEl(svg, `chart-${id}`);
9486
9767
  const getMarkdownEl = (svg, id) => getEl(svg, `markdown-${id}`);
9487
- const POSITIONABLE_SELECTOR = ".ng, .gg, .tg, .ntg, .cg, .mdg";
9768
+ const POSITIONABLE_SELECTOR = ".ng, .gg, .tg, .ntg, .cg, .eg, .mdg";
9488
9769
  function resolveNonEdgeDrawEl(svg, target) {
9489
9770
  return (getGroupEl(svg, target) ??
9490
9771
  getTableEl(svg, target) ??
@@ -9904,7 +10185,7 @@ var AIDiagram = (function (exports) {
9904
10185
  }));
9905
10186
  }
9906
10187
  // ── Edge draw helpers ─────────────────────────────────────
9907
- const EDGE_SHAFT_SELECTOR = '[data-edge-role="shaft"] path';
10188
+ const EDGE_SHAFT_SELECTOR = '[data-edge-role="shaft"] path, path[data-edge-role="shaft"]';
9908
10189
  const EDGE_DECOR_SELECTOR = '[data-edge-role="head"], [data-edge-role="label"], [data-edge-role="label-bg"]';
9909
10190
  function edgeShaftPaths(el) {
9910
10191
  return Array.from(el.querySelectorAll(EDGE_SHAFT_SELECTOR));
@@ -10078,8 +10359,16 @@ var AIDiagram = (function (exports) {
10078
10359
  _buildDrawStepIndex() {
10079
10360
  const drawStepIndexByElementId = new Map();
10080
10361
  forEachPlaybackStep(this.steps, (step, stepIndex) => {
10081
- if (step.action !== "draw" || parseEdgeTarget(step.target))
10362
+ if (step.action !== "draw")
10363
+ return;
10364
+ const edge = parseEdgeTarget(step.target);
10365
+ if (edge) {
10366
+ const edgeEl = getEdgeEl(this.svg, edge.from, edge.to);
10367
+ if (edgeEl && !drawStepIndexByElementId.has(edgeEl.id)) {
10368
+ drawStepIndexByElementId.set(edgeEl.id, stepIndex);
10369
+ }
10082
10370
  return;
10371
+ }
10083
10372
  const el = resolveNonEdgeDrawEl(this.svg, step.target);
10084
10373
  if (el && !drawStepIndexByElementId.has(el.id)) {
10085
10374
  drawStepIndexByElementId.set(el.id, stepIndex);
@@ -10779,6 +11068,7 @@ var AIDiagram = (function (exports) {
10779
11068
  const el = getEdgeEl(this.svg, edge.from, edge.to);
10780
11069
  if (!el)
10781
11070
  return;
11071
+ showDrawEl(el);
10782
11072
  if (silent) {
10783
11073
  revealEdgeInstant(el);
10784
11074
  requestAnimationFrame(() => requestAnimationFrame(() => {
@@ -11392,11 +11682,12 @@ var AIDiagram = (function (exports) {
11392
11682
  .cg.faded, .eg.faded, .mdg.faded { opacity: 0.22; }
11393
11683
 
11394
11684
  .ng.hidden { opacity: 0; pointer-events: none; }
11395
- .gg.gg-hidden { opacity: 0; }
11396
- .tg.gg-hidden { opacity: 0; }
11397
- .ntg.gg-hidden { opacity: 0; }
11398
- .cg.gg-hidden { opacity: 0; }
11399
- .mdg.gg-hidden { opacity: 0; }
11685
+ .gg.gg-hidden { opacity: 0; }
11686
+ .tg.gg-hidden { opacity: 0; }
11687
+ .ntg.gg-hidden { opacity: 0; }
11688
+ .cg.gg-hidden { opacity: 0; }
11689
+ .eg.gg-hidden { opacity: 0; }
11690
+ .mdg.gg-hidden { opacity: 0; }
11400
11691
 
11401
11692
  /* narration caption */
11402
11693
  .skm-caption { pointer-events: none; user-select: none; }