@smoove/core 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/engine/sequence.d.ts +30 -0
  2. package/dist/engine/sequence.d.ts.map +1 -1
  3. package/dist/engine/sequence.js +66 -14
  4. package/dist/engine/sequence.js.map +1 -1
  5. package/dist/index.d.ts +2 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/layout/block.d.ts +3 -0
  10. package/dist/layout/block.d.ts.map +1 -1
  11. package/dist/layout/block.js +5 -0
  12. package/dist/layout/block.js.map +1 -1
  13. package/dist/layout/contract.d.ts +20 -0
  14. package/dist/layout/contract.d.ts.map +1 -1
  15. package/dist/layout/contract.js.map +1 -1
  16. package/dist/layout/flex/flex.d.ts +3 -0
  17. package/dist/layout/flex/flex.d.ts.map +1 -1
  18. package/dist/layout/flex/flex.js +5 -0
  19. package/dist/layout/flex/flex.js.map +1 -1
  20. package/dist/layout/flex/mixin.d.ts +4 -1
  21. package/dist/layout/flex/mixin.d.ts.map +1 -1
  22. package/dist/layout/flex/mixin.js +5 -0
  23. package/dist/layout/flex/mixin.js.map +1 -1
  24. package/dist/layout/image.d.ts +3 -0
  25. package/dist/layout/image.d.ts.map +1 -1
  26. package/dist/layout/image.js +5 -0
  27. package/dist/layout/image.js.map +1 -1
  28. package/dist/layout/measure.d.ts +48 -0
  29. package/dist/layout/measure.d.ts.map +1 -0
  30. package/dist/layout/measure.js +105 -0
  31. package/dist/layout/measure.js.map +1 -0
  32. package/dist/layout/shapes.d.ts +39 -13
  33. package/dist/layout/shapes.d.ts.map +1 -1
  34. package/dist/layout/text/ink.d.ts +25 -0
  35. package/dist/layout/text/ink.d.ts.map +1 -0
  36. package/dist/layout/text/ink.js +62 -0
  37. package/dist/layout/text/ink.js.map +1 -0
  38. package/dist/layout/text/text.d.ts +6 -1
  39. package/dist/layout/text/text.d.ts.map +1 -1
  40. package/dist/layout/text/text.js +33 -0
  41. package/dist/layout/text/text.js.map +1 -1
  42. package/package.json +7 -1
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/layout/image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/layout/image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import Konva from "konva";
2
+ export type MeasureOptions = {
3
+ /**
4
+ * Owning sequence's local frame to measure at. Runs the sequence's
5
+ * updaters + non-media ticks (no visibility change, no draw) first.
6
+ */
7
+ at?: number;
8
+ };
9
+ /** A stage-space axis-aligned rectangle. */
10
+ export type MeasuredRect = {
11
+ x: number;
12
+ y: number;
13
+ width: number;
14
+ height: number;
15
+ };
16
+ export type MeasuredLine = MeasuredRect & {
17
+ /**
18
+ * Tight rect around the rendered glyph ink. Falls back to the line box
19
+ * where `actualBoundingBox` metrics are unavailable.
20
+ */
21
+ ink: MeasuredRect;
22
+ /** Stage-space y of the alphabetic baseline — the underline anchor. */
23
+ baseline: number;
24
+ /** Char offsets into the displayed (post-fit/clamp) text. */
25
+ range: {
26
+ start: number;
27
+ end: number;
28
+ };
29
+ };
30
+ export type Measurement = MeasuredRect & {
31
+ /** Text only: one entry per rendered (wrapped) line, top to bottom. */
32
+ lines?: MeasuredLine[];
33
+ };
34
+ /**
35
+ * Measure a node's rendered bounds independent of its sequence's lifetime.
36
+ *
37
+ * Runs the flex compute path for the node's outermost layout root on demand
38
+ * (so a node in a never-activated sequence still measures correctly) and
39
+ * returns stage-space bounds. With `{ at }`, the owning sequence's updaters
40
+ * and ticks are first driven to that local frame — an active sequence is
41
+ * restored to its live frame afterwards (frame purity makes that exact).
42
+ *
43
+ * Bounds reflect currently-loaded fonts; await `comp.whenReady()` first for
44
+ * final glyph bounds in the browser. Rotated nodes yield the axis-aligned
45
+ * bounding box of their rotated geometry.
46
+ */
47
+ export declare function measure(node: Konva.Node, opts?: MeasureOptions): Measurement;
48
+ //# sourceMappingURL=measure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../src/layout/measure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IACxC;;;OAGG;IACH,GAAG,EAAE,YAAY,CAAC;IAClB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IACvC,uEAAuE;IACvE,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;CACxB,CAAC;AAMF;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,GAAE,cAAmB,GAAG,WAAW,CA2BhF"}
@@ -0,0 +1,105 @@
1
+ import Konva from "konva";
2
+ import { Sequence } from "../engine/sequence.js";
3
+ import { isKMLayoutNode, isKMLayoutRoot } from "./contract.js";
4
+ // Re-entrancy guard: an updater running inside a measure-driven frame pass
5
+ // must not start another frame pass (updater → measure → updater recursion).
6
+ let measuring = false;
7
+ /**
8
+ * Measure a node's rendered bounds independent of its sequence's lifetime.
9
+ *
10
+ * Runs the flex compute path for the node's outermost layout root on demand
11
+ * (so a node in a never-activated sequence still measures correctly) and
12
+ * returns stage-space bounds. With `{ at }`, the owning sequence's updaters
13
+ * and ticks are first driven to that local frame — an active sequence is
14
+ * restored to its live frame afterwards (frame purity makes that exact).
15
+ *
16
+ * Bounds reflect currently-loaded fonts; await `comp.whenReady()` first for
17
+ * final glyph bounds in the browser. Rotated nodes yield the axis-aligned
18
+ * bounding box of their rotated geometry.
19
+ */
20
+ export function measure(node, opts = {}) {
21
+ const at = opts.at;
22
+ if (at === undefined) {
23
+ computeRootOf(node);
24
+ return read(node);
25
+ }
26
+ if (!Number.isInteger(at) || at < 0) {
27
+ throw new Error("measure: at must be a non-negative integer local frame");
28
+ }
29
+ const layer = node.getLayer();
30
+ const seq = layer instanceof Sequence ? layer : null;
31
+ if (!seq)
32
+ throw new Error("measure: { at } requires the node to be inside a Sequence");
33
+ if (measuring) {
34
+ throw new Error("measure: cannot re-enter with { at } from a frame updater");
35
+ }
36
+ const live = seq._kmLiveLocal();
37
+ measuring = true;
38
+ try {
39
+ seq._kmRunFrame(at, false);
40
+ return read(node);
41
+ }
42
+ finally {
43
+ // Restore an ACTIVE sequence to its live frame so the visible canvas
44
+ // can't be left desynced (frame purity makes this exact). An inactive
45
+ // sequence keeps the measured state — activation re-derives everything.
46
+ if (live !== null && live !== at)
47
+ seq._kmRunFrame(live, false);
48
+ measuring = false;
49
+ }
50
+ }
51
+ /** Lay out the outermost KM layout root on the node's ancestor chain. */
52
+ function computeRootOf(node) {
53
+ let root = null;
54
+ let cur = node;
55
+ while (cur && !(cur instanceof Konva.Layer) && !(cur instanceof Konva.Stage)) {
56
+ if (isKMLayoutRoot(cur))
57
+ root = cur;
58
+ cur = cur.getParent();
59
+ }
60
+ root?._kmComputeLayout();
61
+ }
62
+ function read(node) {
63
+ const t = node.getAbsoluteTransform();
64
+ const box = transformRect(t, localRect(node));
65
+ const lined = node;
66
+ if (typeof lined._kmMeasureLines !== "function")
67
+ return box;
68
+ const lines = lined._kmMeasureLines().map((l) => ({
69
+ ...transformRect(t, l.rect),
70
+ ink: transformRect(t, l.ink),
71
+ baseline: t.point({ x: l.rect.left, y: l.baseline }).y,
72
+ range: l.range,
73
+ }));
74
+ return { ...box, lines };
75
+ }
76
+ /**
77
+ * The node's own local-space box: shapes report their self rect (origin-
78
+ * corrected for centered shapes), KM wrappers their layout box, and raw
79
+ * containers the union of their children.
80
+ */
81
+ function localRect(node) {
82
+ if (node instanceof Konva.Shape) {
83
+ const r = node.getSelfRect();
84
+ return { left: r.x, top: r.y, width: r.width, height: r.height };
85
+ }
86
+ if (isKMLayoutNode(node)) {
87
+ return { left: 0, top: 0, width: node.width(), height: node.height() };
88
+ }
89
+ const r = node.getClientRect({ relativeTo: node });
90
+ return { left: r.x, top: r.y, width: r.width, height: r.height };
91
+ }
92
+ function transformRect(t, r) {
93
+ const pts = [
94
+ t.point({ x: r.left, y: r.top }),
95
+ t.point({ x: r.left + r.width, y: r.top }),
96
+ t.point({ x: r.left, y: r.top + r.height }),
97
+ t.point({ x: r.left + r.width, y: r.top + r.height }),
98
+ ];
99
+ const xs = pts.map((p) => p.x);
100
+ const ys = pts.map((p) => p.y);
101
+ const x = Math.min(...xs);
102
+ const y = Math.min(...ys);
103
+ return { x, y, width: Math.max(...xs) - x, height: Math.max(...ys) - y };
104
+ }
105
+ //# sourceMappingURL=measure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.js","sourceRoot":"","sources":["../../src/layout/measure.ts"],"names":[],"mappings":"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"}
@@ -17,55 +17,81 @@ type WithFlex<C> = Omit<C, "width" | "height"> & FlexChildProps & {
17
17
  height?: SizeValue;
18
18
  };
19
19
  export type RectConfig = WithFlex<Konva.RectConfig>;
20
- declare const Rect_base: new (config: RectConfig) => import("konva/lib/shapes/Rect").Rect & import("./contract.js").KMLayoutNode;
20
+ declare const Rect_base: new (config: RectConfig) => import("konva/lib/shapes/Rect").Rect & import("./contract.js").KMLayoutNode & {
21
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
22
+ };
21
23
  export declare class Rect extends Rect_base {
22
24
  }
23
25
  export type CircleConfig = WithFlex<Konva.CircleConfig>;
24
- declare const Circle_base: new (config: CircleConfig) => import("konva/lib/shapes/Circle").Circle & import("./contract.js").KMLayoutNode;
26
+ declare const Circle_base: new (config: CircleConfig) => import("konva/lib/shapes/Circle").Circle & import("./contract.js").KMLayoutNode & {
27
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
28
+ };
25
29
  export declare class Circle extends Circle_base {
26
30
  }
27
31
  export type EllipseConfig = WithFlex<Konva.EllipseConfig>;
28
- declare const Ellipse_base: new (config: EllipseConfig) => import("konva/lib/shapes/Ellipse").Ellipse & import("./contract.js").KMLayoutNode;
32
+ declare const Ellipse_base: new (config: EllipseConfig) => import("konva/lib/shapes/Ellipse").Ellipse & import("./contract.js").KMLayoutNode & {
33
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
34
+ };
29
35
  export declare class Ellipse extends Ellipse_base {
30
36
  }
31
37
  export type LineConfig = WithFlex<Konva.LineConfig>;
32
- declare const Line_base: new (config: LineConfig) => import("konva/lib/shapes/Line").Line<import("konva/lib/shapes/Line").LineConfig> & import("./contract.js").KMLayoutNode;
38
+ declare const Line_base: new (config: LineConfig) => import("konva/lib/shapes/Line").Line<import("konva/lib/shapes/Line").LineConfig> & import("./contract.js").KMLayoutNode & {
39
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
40
+ };
33
41
  export declare class Line extends Line_base {
34
42
  }
35
43
  export type ArrowConfig = WithFlex<Konva.ArrowConfig>;
36
- declare const Arrow_base: new (config: ArrowConfig) => import("konva/lib/shapes/Arrow").Arrow & import("./contract.js").KMLayoutNode;
44
+ declare const Arrow_base: new (config: ArrowConfig) => import("konva/lib/shapes/Arrow").Arrow & import("./contract.js").KMLayoutNode & {
45
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
46
+ };
37
47
  export declare class Arrow extends Arrow_base {
38
48
  }
39
49
  export type StarConfig = WithFlex<Konva.StarConfig>;
40
- declare const Star_base: new (config: StarConfig) => import("konva/lib/shapes/Star").Star & import("./contract.js").KMLayoutNode;
50
+ declare const Star_base: new (config: StarConfig) => import("konva/lib/shapes/Star").Star & import("./contract.js").KMLayoutNode & {
51
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
52
+ };
41
53
  export declare class Star extends Star_base {
42
54
  }
43
55
  export type RingConfig = WithFlex<Konva.RingConfig>;
44
- declare const Ring_base: new (config: RingConfig) => import("konva/lib/shapes/Ring").Ring & import("./contract.js").KMLayoutNode;
56
+ declare const Ring_base: new (config: RingConfig) => import("konva/lib/shapes/Ring").Ring & import("./contract.js").KMLayoutNode & {
57
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
58
+ };
45
59
  export declare class Ring extends Ring_base {
46
60
  }
47
61
  export type ArcConfig = WithFlex<Konva.ArcConfig>;
48
- declare const Arc_base: new (config: ArcConfig) => import("konva/lib/shapes/Arc").Arc & import("./contract.js").KMLayoutNode;
62
+ declare const Arc_base: new (config: ArcConfig) => import("konva/lib/shapes/Arc").Arc & import("./contract.js").KMLayoutNode & {
63
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
64
+ };
49
65
  export declare class Arc extends Arc_base {
50
66
  }
51
67
  export type WedgeConfig = WithFlex<Konva.WedgeConfig>;
52
- declare const Wedge_base: new (config: WedgeConfig) => import("konva/lib/shapes/Wedge").Wedge & import("./contract.js").KMLayoutNode;
68
+ declare const Wedge_base: new (config: WedgeConfig) => import("konva/lib/shapes/Wedge").Wedge & import("./contract.js").KMLayoutNode & {
69
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
70
+ };
53
71
  export declare class Wedge extends Wedge_base {
54
72
  }
55
73
  export type RegularPolygonConfig = WithFlex<Konva.RegularPolygonConfig>;
56
- declare const RegularPolygon_base: new (config: RegularPolygonConfig) => import("konva/lib/shapes/RegularPolygon").RegularPolygon & import("./contract.js").KMLayoutNode;
74
+ declare const RegularPolygon_base: new (config: RegularPolygonConfig) => import("konva/lib/shapes/RegularPolygon").RegularPolygon & import("./contract.js").KMLayoutNode & {
75
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
76
+ };
57
77
  export declare class RegularPolygon extends RegularPolygon_base {
58
78
  }
59
79
  export type PathConfig = WithFlex<Konva.PathConfig>;
60
- declare const Path_base: new (config: PathConfig) => import("konva/lib/shapes/Path").Path & import("./contract.js").KMLayoutNode;
80
+ declare const Path_base: new (config: PathConfig) => import("konva/lib/shapes/Path").Path & import("./contract.js").KMLayoutNode & {
81
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
82
+ };
61
83
  export declare class Path extends Path_base {
62
84
  }
63
85
  export type TextPathConfig = WithFlex<Konva.TextPathConfig>;
64
- declare const TextPath_base: new (config: TextPathConfig) => import("konva/lib/shapes/TextPath").TextPath & import("./contract.js").KMLayoutNode;
86
+ declare const TextPath_base: new (config: TextPathConfig) => import("konva/lib/shapes/TextPath").TextPath & import("./contract.js").KMLayoutNode & {
87
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
88
+ };
65
89
  export declare class TextPath extends TextPath_base {
66
90
  }
67
91
  export type SpriteConfig = WithFlex<Konva.SpriteConfig>;
68
- declare const Sprite_base: new (config: SpriteConfig) => import("konva/lib/shapes/Sprite").Sprite & import("./contract.js").KMLayoutNode;
92
+ declare const Sprite_base: new (config: SpriteConfig) => import("konva/lib/shapes/Sprite").Sprite & import("./contract.js").KMLayoutNode & {
93
+ measure(opts?: import("./measure.js").MeasureOptions): import("./measure.js").Measurement;
94
+ };
69
95
  export declare class Sprite extends Sprite_base {
70
96
  }
71
97
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/layout/shapes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;;;;;;;;;GAWG;AAEH,KAAK,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,GAC5C,cAAc,GAAG;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;;AACxD,qBAAa,MAAO,SAAQ,WAAmD;CAAG;AAElF,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;;AAC1D,qBAAa,OAAQ,SAAQ,YAAsD;CAAG;AAEtF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;;AACtD,qBAAa,KAAM,SAAQ,UAAgD;CAAG;AAE9E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;;AAClD,qBAAa,GAAI,SAAQ,QAA0C;CAAG;AAEtE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;;AACtD,qBAAa,KAAM,SAAQ,UAAgD;CAAG;AAE9E,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;;AACxE,qBAAa,cAAe,SAAQ,mBAEnC;CAAG;AAEJ,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;;AAC5D,qBAAa,QAAS,SAAQ,aAAyD;CAAG;AAE1F,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;;AACxD,qBAAa,MAAO,SAAQ,WAAmD;CAAG"}
1
+ {"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/layout/shapes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;;;;;;;;;GAWG;AAEH,KAAK,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,GAC5C,cAAc,GAAG;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;;;;AACxD,qBAAa,MAAO,SAAQ,WAAmD;CAAG;AAElF,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;;;;AAC1D,qBAAa,OAAQ,SAAQ,YAAsD;CAAG;AAEtF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;;;;AACtD,qBAAa,KAAM,SAAQ,UAAgD;CAAG;AAE9E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;;;;AAClD,qBAAa,GAAI,SAAQ,QAA0C;CAAG;AAEtE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;;;;AACtD,qBAAa,KAAM,SAAQ,UAAgD;CAAG;AAE9E,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;;;;AACxE,qBAAa,cAAe,SAAQ,mBAEnC;CAAG;AAEJ,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;;;AACpD,qBAAa,IAAK,SAAQ,SAA6C;CAAG;AAE1E,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;;;;AAC5D,qBAAa,QAAS,SAAQ,aAAyD;CAAG;AAE1F,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;;;;AACxD,qBAAa,MAAO,SAAQ,WAAmD;CAAG"}
@@ -0,0 +1,25 @@
1
+ import Konva from "konva";
2
+ export type LineInk = {
3
+ /** Ink extent left/right of the line's draw start point (both >= 0). */
4
+ left: number;
5
+ right: number;
6
+ /** Ink extent above/below the alphabetic baseline. */
7
+ ascent: number;
8
+ descent: number;
9
+ };
10
+ /**
11
+ * The alphabetic baseline's y offset from the top of a line box. Mirrors
12
+ * Konva 10.3 `Text._sceneFunc` (non-legacy): `(fontAscent − fontDescent) / 2
13
+ * + lineH / 2`, with the font metrics of "M" (fontBoundingBox, falling back
14
+ * to actualBoundingBox). Legacy rendering (middle baseline) and metric-less
15
+ * environments fall back to `lineH / 2 + fontSize * 0.35` — approximate, and
16
+ * paired with ink falling back to the line box.
17
+ */
18
+ export declare function baselineOffset(text: Konva.Text, lineH: number): number;
19
+ /**
20
+ * Measure a rendered line's glyph ink relative to its draw start point and
21
+ * baseline. Returns `null` when `actualBoundingBox` metrics are unavailable
22
+ * (caller falls back to the line box).
23
+ */
24
+ export declare function measureLineInk(text: Konva.Text, line: string): LineInk | null;
25
+ //# sourceMappingURL=ink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink.d.ts","sourceRoot":"","sources":["../../../src/layout/text/ink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,MAAM,MAAM,OAAO,GAAG;IACpB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAYF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYtE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAyB7E"}
@@ -0,0 +1,62 @@
1
+ import Konva from "konva";
2
+ let scratch = null;
3
+ function scratchCtx() {
4
+ if (!scratch) {
5
+ // Konva.Util.createCanvasElement is patched by the skia backend on the
6
+ // server, so this is a browser canvas or a skia canvas as appropriate.
7
+ scratch = Konva.Util.createCanvasElement().getContext("2d");
8
+ }
9
+ return scratch;
10
+ }
11
+ /**
12
+ * The alphabetic baseline's y offset from the top of a line box. Mirrors
13
+ * Konva 10.3 `Text._sceneFunc` (non-legacy): `(fontAscent − fontDescent) / 2
14
+ * + lineH / 2`, with the font metrics of "M" (fontBoundingBox, falling back
15
+ * to actualBoundingBox). Legacy rendering (middle baseline) and metric-less
16
+ * environments fall back to `lineH / 2 + fontSize * 0.35` — approximate, and
17
+ * paired with ink falling back to the line box.
18
+ */
19
+ export function baselineOffset(text, lineH) {
20
+ const src = text;
21
+ const legacy = Konva.legacyTextRendering;
22
+ if (!legacy) {
23
+ const m = src.measureSize("M");
24
+ const ascent = m.fontBoundingBoxAscent ?? m.actualBoundingBoxAscent;
25
+ const descent = m.fontBoundingBoxDescent ?? m.actualBoundingBoxDescent;
26
+ if (ascent !== undefined && descent !== undefined) {
27
+ return (ascent - descent) / 2 + lineH / 2;
28
+ }
29
+ }
30
+ return lineH / 2 + text.fontSize() * 0.35;
31
+ }
32
+ /**
33
+ * Measure a rendered line's glyph ink relative to its draw start point and
34
+ * baseline. Returns `null` when `actualBoundingBox` metrics are unavailable
35
+ * (caller falls back to the line box).
36
+ */
37
+ export function measureLineInk(text, line) {
38
+ if (!line)
39
+ return null;
40
+ const ctx = scratchCtx();
41
+ ctx.font = text._getContextFont();
42
+ ctx.textBaseline = "alphabetic";
43
+ ctx.textAlign = "left";
44
+ const ls = text.letterSpacing() || 0;
45
+ if ("letterSpacing" in ctx) {
46
+ ctx.letterSpacing = `${ls}px`;
47
+ }
48
+ const m = ctx.measureText(line);
49
+ if (m.actualBoundingBoxAscent === undefined ||
50
+ m.actualBoundingBoxDescent === undefined ||
51
+ m.actualBoundingBoxLeft === undefined ||
52
+ m.actualBoundingBoxRight === undefined) {
53
+ return null;
54
+ }
55
+ return {
56
+ left: m.actualBoundingBoxLeft,
57
+ right: m.actualBoundingBoxRight,
58
+ ascent: m.actualBoundingBoxAscent,
59
+ descent: m.actualBoundingBoxDescent,
60
+ };
61
+ }
62
+ //# sourceMappingURL=ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink.js","sourceRoot":"","sources":["../../../src/layout/text/ink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAuB1B,IAAI,OAAO,GAAoC,IAAI,CAAC;AACpD,SAAS,UAAU;IACjB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,uEAAuE;QACvE,uEAAuE;QACvE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;IAC1F,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,KAAa;IAC5D,MAAM,GAAG,GAAG,IAA8B,CAAC;IAC3C,MAAM,MAAM,GAAI,KAAsD,CAAC,mBAAmB,CAAC;IAC3F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,qBAAqB,IAAI,CAAC,CAAC,uBAAuB,CAAC;QACpE,MAAM,OAAO,GAAG,CAAC,CAAC,sBAAsB,IAAI,CAAC,CAAC,wBAAwB,CAAC;QACvE,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAClD,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,IAAY;IAC3D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,GAAG,CAAC,IAAI,GAAI,IAA+B,CAAC,eAAe,EAAE,CAAC;IAC9D,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;IAChC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,eAAe,IAAI,GAAG,EAAE,CAAC;QAC1B,GAA4D,CAAC,aAAa,GAAG,GAAG,EAAE,IAAI,CAAC;IAC1F,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,IACE,CAAC,CAAC,uBAAuB,KAAK,SAAS;QACvC,CAAC,CAAC,wBAAwB,KAAK,SAAS;QACxC,CAAC,CAAC,qBAAqB,KAAK,SAAS;QACrC,CAAC,CAAC,sBAAsB,KAAK,SAAS,EACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,qBAAqB;QAC7B,KAAK,EAAE,CAAC,CAAC,sBAAsB;QAC/B,MAAM,EAAE,CAAC,CAAC,uBAAuB;QACjC,OAAO,EAAE,CAAC,CAAC,wBAAwB;KACpC,CAAC;AACJ,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import Konva from "konva";
2
- import type { KMLayoutNode, LayoutBox, MeasureContext } from "../contract.js";
2
+ import type { KMLayoutNode, LayoutBox, LocalMeasuredLine, MeasureContext } from "../contract.js";
3
3
  import { type FlexilyNode } from "../flex/engine.js";
4
+ import { type Measurement, type MeasureOptions } from "../measure.js";
4
5
  import { Font, type FontFaceRef } from "./font.js";
5
6
  import type { TextConfig } from "./types.js";
6
7
  /**
@@ -52,6 +53,10 @@ export declare class Text extends Konva.Group implements KMLayoutNode {
52
53
  _kmMeasure(node: FlexilyNode, ctx: MeasureContext): void;
53
54
  /** @internal — {@link KMLayoutNode}: write the computed box back + re-layout glyphs. */
54
55
  _kmPlace(box: LayoutBox): void;
56
+ /** Measure this node's stage-space bounds — see {@link measureNode}. */
57
+ measure(opts?: MeasureOptions): Measurement;
58
+ /** @internal — {@link KMLayoutNode}: per-rendered-line geometry for `measure()`. */
59
+ _kmMeasureLines(): LocalMeasuredLine[];
55
60
  /**
56
61
  * @internal Intrinsic size for the flex engine. Lays out the FULL text at the
57
62
  * given available width (honoring fitText / maxWidth / maxHeight / maxLines).
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/layout/text/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAa,KAAK,WAAW,EAAoC,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AASnD,OAAO,KAAK,EAIV,UAAU,EAEX,MAAM,YAAY,CAAC;AAkDpB;;;;;;GAMG;AACH,qBAAa,IAAK,SAAQ,KAAK,CAAC,KAAM,YAAW,YAAY;IAC3D,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAW;IAC7B,4FAA4F;IAC5F,OAAO,CAAC,SAAS,CAAW;IAC5B,6DAA6D;IAC7D,OAAO,CAAC,SAAS,CAAW;IAE5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,UAAU;IAuF9B,8DAA8D;IAC9D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU3B;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO3B;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,IAAI;IAiBvC,+EAA+E;IAC/E,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAaxD,wFAAwF;IACxF,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAQ9B;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAuBjE,qFAAqF;IACrF,WAAW,IAAI,IAAI;IAUnB,OAAO,CAAC,SAAS;IAoCjB,uEAAuE;IACvE,OAAO,CAAC,aAAa;IAUrB,mFAAmF;IACnF,OAAO,CAAC,UAAU;IAgBlB,+CAA+C;IAC/C,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKjC,mEAAmE;IACnE,aAAa,IAAI,IAAI;IAMrB,+EAA+E;IAC/E,OAAO,CAAC,YAAY;IAsBpB,8EAA8E;IAC9E,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,UAAU;IAQlB,qFAAqF;IACrF,OAAO,CAAC,SAAS;IA+CjB,2FAA2F;IAC3F,OAAO,CAAC,MAAM;IAgDd,8DAA8D;IAC9D,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,UAAU;IAYlB,mFAAmF;IACnF,OAAO,CAAC,QAAQ;IAahB,4EAA4E;IAC5E,OAAO,CAAC,cAAc;IA+BtB,iFAAiF;IACjF,OAAO,CAAC,YAAY;IAMpB,kEAAkE;IAClE,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,iBAAiB;IAwDzB,OAAO,CAAC,UAAU;IAKlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA6BrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,aAAa;IAsCrB,iEAAiE;IACjE,OAAO,CAAC,SAAS;CAkBlB"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/layout/text/text.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@ import Konva from "konva";
2
2
  import { stringToArray } from "konva/lib/shapes/Text.js";
3
3
  import { TICK_MARK } from "../../markers.js";
4
4
  import { applySize, parseSize, setTextWrapperMeasure } from "../flex/engine.js";
5
+ import { measure as measureNode } from "../measure.js";
5
6
  import { Font } from "./font.js";
6
7
  import { buildWordIndex, clamp, pickKonvaConfig, snapToWord, } from "./geometry.js";
8
+ import { baselineOffset, measureLineInk } from "./ink.js";
7
9
  const ELLIPSIS = "…";
8
10
  const BIG = 1e9;
9
11
  /**
@@ -213,6 +215,37 @@ export class Text extends Konva.Group {
213
215
  this.height(box.height);
214
216
  this._layoutText();
215
217
  }
218
+ /** Measure this node's stage-space bounds — see {@link measureNode}. */
219
+ measure(opts) {
220
+ return measureNode(this, opts);
221
+ }
222
+ /** @internal — {@link KMLayoutNode}: per-rendered-line geometry for `measure()`. */
223
+ _kmMeasureLines() {
224
+ const geo = this._geo;
225
+ if (!geo)
226
+ return [];
227
+ const blOff = baselineOffset(this._text, geo.lineH);
228
+ return geo.ranges.map((r, li) => {
229
+ const x = geo.pad + this._alignOffset(geo, r.width);
230
+ const y = geo.pad + li * geo.lineH;
231
+ const rect = { left: x, top: y, width: r.width, height: geo.lineH };
232
+ const baseline = y + blOff;
233
+ const ink = measureLineInk(this._text, geo.chars.slice(r.start, r.end).join(""));
234
+ return {
235
+ rect,
236
+ ink: ink
237
+ ? {
238
+ left: x - ink.left,
239
+ top: baseline - ink.ascent,
240
+ width: ink.left + ink.right,
241
+ height: ink.ascent + ink.descent,
242
+ }
243
+ : { ...rect },
244
+ baseline,
245
+ range: { start: r.start, end: r.end },
246
+ };
247
+ });
248
+ }
216
249
  /**
217
250
  * @internal Intrinsic size for the flex engine. Lays out the FULL text at the
218
251
  * given available width (honoring fitText / maxWidth / maxHeight / maxLines).