@glissade/scene 0.19.0-pre.2 → 0.19.0-pre.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.
package/dist/describe.js CHANGED
@@ -22,7 +22,7 @@ import { easings, listValueTypes } from "@glissade/core";
22
22
  * never pulled onto the base embed path — a scene that never calls `describe()`
23
23
  * pays zero bytes for it.
24
24
  */
25
- const RAW_VERSION = "0.19.0-pre.2";
25
+ const RAW_VERSION = "0.19.0-pre.3";
26
26
  const PACKAGE_VERSION = RAW_VERSION.includes("GLISSADE_".concat("VERSION")) ? "0.0.0-dev" : RAW_VERSION;
27
27
  /** Arity of a value type's numeric repr: vec2/vec2-arc → 2, number → 1; others (color/paint/path/string/boolean) carry no scalar arity. */
28
28
  function arityOf(type) {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { C as Mat2x3, D as matEquals, E as invert, O as multiply, S as IDENTITY, T as fromTRS, _ as StrokeStyle, a as FilterSpec, b as glow, c as MeshInterpolation, d as Paint, f as PathSeg, g as ShaderRef, h as ResourceId, i as DrawCommand, l as MeshPaint, m as Resource, n as DisplayList, o as FilterValidationError, p as Rect$1, r as DisplayListBuilder, s as FontSpec, t as BlendMode, u as MeshPoint, v as createDisplayListBuilder, w as applyToPoint, x as validateFilters, y as filtersToCanvasFilter } from "./displayList.js";
2
- import { A as resolveSketch, B as NodeProps, C as Polyline, D as arcLength, E as SketchValidationError, F as AnchorSpec, G as TextMetricsLite, H as resolveAnchor, I as BindablePropTarget, J as quantize, K as breakLines, L as EvalContext, M as sketchStrokes, N as validateHachure, O as flatten, P as validateSketch, R as HitArea, S as HachureSpec, T as SketchStyle, U as MEASURE_QUANTUM_PX, V as PropInit, W as TextMeasurer, X as segmentWords, Y as segmentGraphemes, Z as setDefaultMeasurer, _ as WordBox, a as ImageNode, b as revealSchedule, c as Path, d as RevealMark, f as ShapeProps, g as VideoProps, h as Video, i as Group, j as roughen, k as hachureLines, l as PathProps, m as TextProps, n as Custom, o as ImageProps, p as Text, q as estimatingMeasurer, r as GraphemeBox, s as LineBox, t as Circle, u as Rect, v as coercePathData, w as ResolvedSketch, x as roundedRectSegs, y as pathFromSegs, z as Node } from "./nodes.js";
2
+ import { $ as setDefaultMeasurer, A as resolveSketch, B as NodeProps, C as Polyline, D as arcLength, E as SketchValidationError, F as AnchorSpec, G as TextMetricsLite, H as resolveAnchor, I as BindablePropTarget, J as estimatingMeasurer, K as __resetEstimateWarnings, L as EvalContext, M as sketchStrokes, N as validateHachure, O as flatten, P as validateSketch, Q as segmentWords, R as HitArea, S as HachureSpec, T as SketchStyle, U as MEASURE_QUANTUM_PX, V as PropInit, W as TextMeasurer, X as quantize, Y as isEstimatingMeasurer, Z as segmentGraphemes, _ as WordBox, a as ImageNode, b as revealSchedule, c as Path, d as RevealMark, f as ShapeProps, g as VideoProps, h as Video, i as Group, j as roughen, k as hachureLines, l as PathProps, m as TextProps, n as Custom, o as ImageProps, p as Text, q as breakLines, r as GraphemeBox, s as LineBox, t as Circle, u as Rect, v as coercePathData, w as ResolvedSketch, x as roundedRectSegs, y as pathFromSegs, z as Node } from "./nodes.js";
3
3
  import { a as LayoutEngineMissingError, c as requireLayoutEngine, i as LayoutEngine, l as setLayoutEngine, n as LayoutChildSpec, r as LayoutContainerSpec, s as getLayoutEngine, t as LayoutBox } from "./layoutEngine.js";
4
4
  import { BindableSignal, BoundTimeline, CompiledTimeline, CoverageReport, EaseSpec, FontMode, FontUsage, MeshPaint as MeshPaint$1, PathValue, Playhead, Rng, Timeline, Track, Vec2 } from "@glissade/core";
5
5
  import { ChannelOverride, Clip } from "@glissade/core/clips";
@@ -907,4 +907,4 @@ declare function meshRasterSize(bw: number, bh: number): {
907
907
  h: number;
908
908
  };
909
909
  //#endregion
910
- export { ALL_FILTER_KINDS, type AnchorSpec, type BackendCaps, type BindablePropTarget, type BlendMode, type CacheColdResult, type CanvasLike, Circle, ColdAssetError, type CommandDelta, type Ctx2DLike, Custom, DL_SNAPSHOT_VERSION, DeterminismViolationError, type DisplayDiff, type DisplayList, type DisplayListBuilder, type DlSnapshot, DlSnapshotError, type DrawCommand, type DrawOnEachOptions, type DrawOnOptions, DuplicateNodeIdError, type EachBox, type EachContext, type EachDistribute, EachError, type EachLayout, type EachMotion, type EachOpts, type EachResult, type EditMark, type EvalContext, type FieldChange, type FilterKind, type FilterSpec, FilterValidationError, FollowPath, type FollowPathProps, type FontByteLoader, type FontSpec, type GraphemeBox, Group, type GuardMode, type HachureSpec, Highlight, type HighlightProps, type HitArea, IDENTITY, ImageNode as Image, ImageNode, type ImageDataLike, type ImageHandle, type ImageProps, type LayoutBox, type LayoutChildSpec, type LayoutContainerSpec, type LayoutEngine, LayoutEngineMissingError, type LineBox, MEASURE_QUANTUM_PX, MESH_DOWNSCALE, MESH_SHEPARD_POWER, MESH_SIGMA, type Mat2x3, type MeshInterpolation, type MeshPaint, type MeshPoint, NODE_TAXONOMY, Node, type NodeProps, type NodeTypeName, type Paint, Path, type PathLike, type PathProps, type PathSampler, type PathSeg, type Place, type Polyline, type PropInit, Raster2D, type Raster2DHost, Rect, type Rect$1 as RectShape, type RenderBackend, ReservedNodeIdError, type ResolvedSketch, type Resource, type ResourceId, type RevealMark, type Scene, type SceneInit, type SceneModule, type ShaderCaps, ShaderEffect, type ShaderEffectProps, type ShaderRef, type ShapeProps, type SketchStyle, SketchValidationError, type StepMark, type StrokeStyle, Text, TextCursor, type TextCursorProps, type TextMeasurer, type TextMetricsLite, type TextProps, TokenHighlight, type TokenHighlightProps, TokenMatchError, type TokenRange, type TypeEdit, type TypewriterResult, type ValidateSceneFontsOptions, Video, type VideoFrameSource, type VideoProps, type WordBox, applyToPoint, arcLength, auditCacheCold, bindScene, breakLines, coercePathData, collapseReplacer, collectLocalizedTextUsages, collectTextUsages, createDisplayListBuilder, createScene, diffDisplayLists, drawOn, drawOnEach, each, estimatingMeasurer, evaluate, filtersToCanvasFilter, flatten, followPath, fontString, formatDisplayDiff, fromTRS, getLayoutEngine, glow, hachureLines, highlight, invert, matEquals, matchTokenRun, meshRasterSize, motionPath, multiply, parseDisplaySnapshot, pathFromSegs, pathLength, pointAtLength, quantize, rasterizeMesh, requireLayoutEngine, resolveAnchor, resolveSketch, revealSchedule, roughen, roundedRectSegs, segmentGraphemes, segmentWords, serializeDisplayList, setDefaultMeasurer, setLayoutEngine, sketchStrokes, textCursor, tokenHighlight, typewriter, validateFilters, validateHachure, validateSceneFonts, validateSketch, withDeterminismGuards };
910
+ export { ALL_FILTER_KINDS, type AnchorSpec, type BackendCaps, type BindablePropTarget, type BlendMode, type CacheColdResult, type CanvasLike, Circle, ColdAssetError, type CommandDelta, type Ctx2DLike, Custom, DL_SNAPSHOT_VERSION, DeterminismViolationError, type DisplayDiff, type DisplayList, type DisplayListBuilder, type DlSnapshot, DlSnapshotError, type DrawCommand, type DrawOnEachOptions, type DrawOnOptions, DuplicateNodeIdError, type EachBox, type EachContext, type EachDistribute, EachError, type EachLayout, type EachMotion, type EachOpts, type EachResult, type EditMark, type EvalContext, type FieldChange, type FilterKind, type FilterSpec, FilterValidationError, FollowPath, type FollowPathProps, type FontByteLoader, type FontSpec, type GraphemeBox, Group, type GuardMode, type HachureSpec, Highlight, type HighlightProps, type HitArea, IDENTITY, ImageNode as Image, ImageNode, type ImageDataLike, type ImageHandle, type ImageProps, type LayoutBox, type LayoutChildSpec, type LayoutContainerSpec, type LayoutEngine, LayoutEngineMissingError, type LineBox, MEASURE_QUANTUM_PX, MESH_DOWNSCALE, MESH_SHEPARD_POWER, MESH_SIGMA, type Mat2x3, type MeshInterpolation, type MeshPaint, type MeshPoint, NODE_TAXONOMY, Node, type NodeProps, type NodeTypeName, type Paint, Path, type PathLike, type PathProps, type PathSampler, type PathSeg, type Place, type Polyline, type PropInit, Raster2D, type Raster2DHost, Rect, type Rect$1 as RectShape, type RenderBackend, ReservedNodeIdError, type ResolvedSketch, type Resource, type ResourceId, type RevealMark, type Scene, type SceneInit, type SceneModule, type ShaderCaps, ShaderEffect, type ShaderEffectProps, type ShaderRef, type ShapeProps, type SketchStyle, SketchValidationError, type StepMark, type StrokeStyle, Text, TextCursor, type TextCursorProps, type TextMeasurer, type TextMetricsLite, type TextProps, TokenHighlight, type TokenHighlightProps, TokenMatchError, type TokenRange, type TypeEdit, type TypewriterResult, type ValidateSceneFontsOptions, Video, type VideoFrameSource, type VideoProps, type WordBox, __resetEstimateWarnings, applyToPoint, arcLength, auditCacheCold, bindScene, breakLines, coercePathData, collapseReplacer, collectLocalizedTextUsages, collectTextUsages, createDisplayListBuilder, createScene, diffDisplayLists, drawOn, drawOnEach, each, estimatingMeasurer, evaluate, filtersToCanvasFilter, flatten, followPath, fontString, formatDisplayDiff, fromTRS, getLayoutEngine, glow, hachureLines, highlight, invert, isEstimatingMeasurer, matEquals, matchTokenRun, meshRasterSize, motionPath, multiply, parseDisplaySnapshot, pathFromSegs, pathLength, pointAtLength, quantize, rasterizeMesh, requireLayoutEngine, resolveAnchor, resolveSketch, revealSchedule, roughen, roundedRectSegs, segmentGraphemes, segmentWords, serializeDisplayList, setDefaultMeasurer, setLayoutEngine, sketchStrokes, textCursor, tokenHighlight, typewriter, validateFilters, validateHachure, validateSceneFonts, validateSketch, withDeterminismGuards };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as sketchStrokes, B as collapseReplacer, C as SketchValidationError, D as hashStr, E as hachureLines, F as filtersToCanvasFilter, G as IDENTITY, H as formatDisplayDiff, I as glow, J as invert, K as applyToPoint, L as validateFilters, M as validateSketch, N as FilterValidationError, O as resolveSketch, P as createDisplayListBuilder, R as DL_SNAPSHOT_VERSION, S as setDefaultMeasurer, T as flatten, U as parseDisplaySnapshot, V as diffDisplayLists, W as serializeDisplayList, X as multiply, Y as matEquals, _ as estimatingMeasurer, a as Path, b as segmentGraphemes, c as Video, d as revealSchedule, f as roundedRectSegs, g as breakLines, h as MEASURE_QUANTUM_PX, i as ImageNode, j as validateHachure, k as roughen, l as coercePathData, m as resolveAnchor, n as Custom, o as Rect, p as Node, q as fromTRS, r as Group, s as Text, t as Circle, u as pathFromSegs, v as fallbackMeasurer, w as arcLength, x as segmentWords, y as quantize, z as DlSnapshotError } from "./nodes.js";
1
+ import { $ as multiply, A as hashStr, B as validateFilters, C as segmentWords, D as arcLength, E as SketchValidationError, F as validateSketch, G as formatDisplayDiff, H as DlSnapshotError, I as FilterValidationError, J as IDENTITY, K as parseDisplaySnapshot, L as createDisplayListBuilder, M as roughen, N as sketchStrokes, O as flatten, P as validateHachure, Q as matEquals, R as filtersToCanvasFilter, S as segmentGraphemes, U as collapseReplacer, V as DL_SNAPSHOT_VERSION, W as diffDisplayLists, X as fromTRS, Y as applyToPoint, Z as invert, _ as breakLines, a as Path, b as isEstimatingMeasurer, c as Video, d as revealSchedule, f as roundedRectSegs, g as __resetEstimateWarnings, h as MEASURE_QUANTUM_PX, i as ImageNode, j as resolveSketch, k as hachureLines, l as coercePathData, m as resolveAnchor, n as Custom, o as Rect, p as Node, q as serializeDisplayList, r as Group, s as Text, t as Circle, u as pathFromSegs, v as estimatingMeasurer, w as setDefaultMeasurer, x as quantize, y as fallbackMeasurer, z as glow } from "./nodes.js";
2
2
  import { i as setLayoutEngine, n as getLayoutEngine, r as requireLayoutEngine, t as LayoutEngineMissingError } from "./layoutEngine.js";
3
3
  import { bindTimeline, buildFontRegistry, compileTimeline, createPlayhead, emitDevWarning, evaluateAt, key, lerpColor, oklabToRgba, parseCmap, parseColor, random, rgbaToOklab, signal, stagger, track, validateFonts, vec2Signal } from "@glissade/core";
4
4
  //#region src/taxonomy.ts
@@ -1857,4 +1857,4 @@ var Raster2D = class {
1857
1857
  }
1858
1858
  };
1859
1859
  //#endregion
1860
- export { ALL_FILTER_KINDS, Circle, ColdAssetError, Custom, DL_SNAPSHOT_VERSION, DeterminismViolationError, DlSnapshotError, DuplicateNodeIdError, EachError, FilterValidationError, FollowPath, Group, Highlight, IDENTITY, ImageNode as Image, ImageNode, LayoutEngineMissingError, MEASURE_QUANTUM_PX, MESH_DOWNSCALE, MESH_SHEPARD_POWER, MESH_SIGMA, NODE_TAXONOMY, Node, Path, Raster2D, Rect, ReservedNodeIdError, ShaderEffect, SketchValidationError, Text, TextCursor, TokenHighlight, TokenMatchError, Video, applyToPoint, arcLength, auditCacheCold, bindScene, breakLines, coercePathData, collapseReplacer, collectLocalizedTextUsages, collectTextUsages, createDisplayListBuilder, createScene, diffDisplayLists, drawOn, drawOnEach, each, estimatingMeasurer, evaluate, filtersToCanvasFilter, flatten, followPath, fontString, formatDisplayDiff, fromTRS, getLayoutEngine, glow, hachureLines, highlight, invert, matEquals, matchTokenRun, meshRasterSize, motionPath, multiply, parseDisplaySnapshot, pathFromSegs, pathLength, pointAtLength, quantize, rasterizeMesh, requireLayoutEngine, resolveAnchor, resolveSketch, revealSchedule, roughen, roundedRectSegs, segmentGraphemes, segmentWords, serializeDisplayList, setDefaultMeasurer, setLayoutEngine, sketchStrokes, textCursor, tokenHighlight, typewriter, validateFilters, validateHachure, validateSceneFonts, validateSketch, withDeterminismGuards };
1860
+ export { ALL_FILTER_KINDS, Circle, ColdAssetError, Custom, DL_SNAPSHOT_VERSION, DeterminismViolationError, DlSnapshotError, DuplicateNodeIdError, EachError, FilterValidationError, FollowPath, Group, Highlight, IDENTITY, ImageNode as Image, ImageNode, LayoutEngineMissingError, MEASURE_QUANTUM_PX, MESH_DOWNSCALE, MESH_SHEPARD_POWER, MESH_SIGMA, NODE_TAXONOMY, Node, Path, Raster2D, Rect, ReservedNodeIdError, ShaderEffect, SketchValidationError, Text, TextCursor, TokenHighlight, TokenMatchError, Video, __resetEstimateWarnings, applyToPoint, arcLength, auditCacheCold, bindScene, breakLines, coercePathData, collapseReplacer, collectLocalizedTextUsages, collectTextUsages, createDisplayListBuilder, createScene, diffDisplayLists, drawOn, drawOnEach, each, estimatingMeasurer, evaluate, filtersToCanvasFilter, flatten, followPath, fontString, formatDisplayDiff, fromTRS, getLayoutEngine, glow, hachureLines, highlight, invert, isEstimatingMeasurer, matEquals, matchTokenRun, meshRasterSize, motionPath, multiply, parseDisplaySnapshot, pathFromSegs, pathLength, pointAtLength, quantize, rasterizeMesh, requireLayoutEngine, resolveAnchor, resolveSketch, revealSchedule, roughen, roundedRectSegs, segmentGraphemes, segmentWords, serializeDisplayList, setDefaultMeasurer, setLayoutEngine, sketchStrokes, textCursor, tokenHighlight, typewriter, validateFilters, validateHachure, validateSceneFonts, validateSketch, withDeterminismGuards };
package/dist/layout.js CHANGED
@@ -1,4 +1,4 @@
1
- import { r as Group, v as fallbackMeasurer } from "./nodes.js";
1
+ import { r as Group, y as fallbackMeasurer } from "./nodes.js";
2
2
  import { i as setLayoutEngine, n as getLayoutEngine, r as requireLayoutEngine, t as LayoutEngineMissingError } from "./layoutEngine.js";
3
3
  import { computed, signal } from "@glissade/core";
4
4
  //#region src/layout.ts
package/dist/nodes.d.ts CHANGED
@@ -33,6 +33,25 @@ declare function setDefaultMeasurer(m: TextMeasurer | null): void;
33
33
  /** The default-or-estimating chain end; internal fallback for measurer pulls. */
34
34
 
35
35
  declare const estimatingMeasurer: TextMeasurer;
36
+ /**
37
+ * True when `m` is the per-character ESTIMATING fallback (the module singleton)
38
+ * — i.e. no real backend measurer and no registered `defaultMeasurer` was
39
+ * available. Identity-compare so a real backend or a `setDefaultMeasurer`-
40
+ * registered measurer never trips it.
41
+ */
42
+ declare function isEstimatingMeasurer(m: TextMeasurer): boolean;
43
+ /**
44
+ * One-shot dev-warning when a build-time geometry getter resolved its measurer
45
+ * to the rough per-character estimate (no backend, no `setDefaultMeasurer`).
46
+ * `site` keys the de-dupe so each distinct caller warns at most once. Silent
47
+ * when a real measurer is in play — the estimate is the only footgun here.
48
+ */
49
+
50
+ /**
51
+ * Test-only: clear the one-shot de-dupe so the estimate warning can re-assert.
52
+ * @internal
53
+ */
54
+ declare function __resetEstimateWarnings(): void;
36
55
  /**
37
56
  * The draw-path word segmentation (Intl.Segmenter boundaries, punctuation
38
57
  * glued to its predecessor) — exported so Text.wordBoxes() boxes EXACTLY the
@@ -719,4 +738,4 @@ interface RevealMark {
719
738
  */
720
739
  declare function revealSchedule(text: Text, reveal: Track<number>, measurer?: TextMeasurer): RevealMark[];
721
740
  //#endregion
722
- export { resolveSketch as A, NodeProps as B, Polyline as C, arcLength as D, SketchValidationError as E, AnchorSpec as F, TextMetricsLite as G, resolveAnchor as H, BindablePropTarget as I, quantize as J, breakLines as K, EvalContext as L, sketchStrokes as M, validateHachure as N, flatten as O, validateSketch as P, HitArea as R, HachureSpec as S, SketchStyle as T, MEASURE_QUANTUM_PX as U, PropInit as V, TextMeasurer as W, segmentWords as X, segmentGraphemes as Y, setDefaultMeasurer as Z, WordBox as _, ImageNode as a, revealSchedule as b, Path as c, RevealMark as d, ShapeProps as f, VideoProps as g, Video as h, Group as i, roughen as j, hachureLines as k, PathProps as l, TextProps as m, Custom as n, ImageProps as o, Text as p, estimatingMeasurer as q, GraphemeBox as r, LineBox as s, Circle as t, Rect as u, coercePathData as v, ResolvedSketch as w, roundedRectSegs as x, pathFromSegs as y, Node as z };
741
+ export { setDefaultMeasurer as $, resolveSketch as A, NodeProps as B, Polyline as C, arcLength as D, SketchValidationError as E, AnchorSpec as F, TextMetricsLite as G, resolveAnchor as H, BindablePropTarget as I, estimatingMeasurer as J, __resetEstimateWarnings as K, EvalContext as L, sketchStrokes as M, validateHachure as N, flatten as O, validateSketch as P, segmentWords as Q, HitArea as R, HachureSpec as S, SketchStyle as T, MEASURE_QUANTUM_PX as U, PropInit as V, TextMeasurer as W, quantize as X, isEstimatingMeasurer as Y, segmentGraphemes as Z, WordBox as _, ImageNode as a, revealSchedule as b, Path as c, RevealMark as d, ShapeProps as f, VideoProps as g, Video as h, Group as i, roughen as j, hachureLines as k, PathProps as l, TextProps as m, Custom as n, ImageProps as o, Text as p, breakLines as q, GraphemeBox as r, LineBox as s, Circle as t, Rect as u, coercePathData as v, ResolvedSketch as w, roundedRectSegs as x, pathFromSegs as y, Node as z };
package/dist/nodes.js CHANGED
@@ -662,6 +662,13 @@ function sketchStrokes(segs, style, seed) {
662
662
  //#endregion
663
663
  //#region src/text.ts
664
664
  /**
665
+ * Text measurement + line breaking (DESIGN.md §3.6). Shaping is delegated to
666
+ * the canvas implementation; line breaking is OURS, driven by the injected
667
+ * TextMeasurer so the breaker always measures with the rasterizer that will
668
+ * draw. Layout-feeding measurements are quantized (0.5px) so sub-pixel
669
+ * advance drift between Skia/HarfBuzz versions cannot move whole layouts.
670
+ */
671
+ /**
665
672
  * §3.6 measurement quantum (px). Scene-owned pre-measure quantizes every
666
673
  * layout-feeding advance to this grid ONCE, then hands Yoga frozen integers —
667
674
  * so sub-pixel measureText drift between Skia/HarfBuzz versions cannot move a
@@ -701,6 +708,35 @@ const estimatingMeasurer = { measureText(text, font) {
701
708
  descent: font.size * .2
702
709
  };
703
710
  } };
711
+ /**
712
+ * True when `m` is the per-character ESTIMATING fallback (the module singleton)
713
+ * — i.e. no real backend measurer and no registered `defaultMeasurer` was
714
+ * available. Identity-compare so a real backend or a `setDefaultMeasurer`-
715
+ * registered measurer never trips it.
716
+ */
717
+ function isEstimatingMeasurer(m) {
718
+ return m === estimatingMeasurer;
719
+ }
720
+ const warnedEstimate = /* @__PURE__ */ new Set();
721
+ /**
722
+ * One-shot dev-warning when a build-time geometry getter resolved its measurer
723
+ * to the rough per-character estimate (no backend, no `setDefaultMeasurer`).
724
+ * `site` keys the de-dupe so each distinct caller warns at most once. Silent
725
+ * when a real measurer is in play — the estimate is the only footgun here.
726
+ */
727
+ function warnIfEstimating(m, site) {
728
+ if (!isEstimatingMeasurer(m)) return;
729
+ if (warnedEstimate.has(site)) return;
730
+ warnedEstimate.add(site);
731
+ emitDevWarning(`${site}: no text measurer available — using a rough per-character estimate; pass { measurer } or call after setTextMeasurer()/setDefaultMeasurer() for exact layout.`);
732
+ }
733
+ /**
734
+ * Test-only: clear the one-shot de-dupe so the estimate warning can re-assert.
735
+ * @internal
736
+ */
737
+ function __resetEstimateWarnings() {
738
+ warnedEstimate.clear();
739
+ }
704
740
  let wordSegmenter;
705
741
  /**
706
742
  * The draw-path word segmentation (Intl.Segmenter boundaries, punctuation
@@ -1787,6 +1823,7 @@ var Text = class extends Node {
1787
1823
  */
1788
1824
  lineBoxes(measurer) {
1789
1825
  const m = measurer ?? this.measurerSource?.() ?? fallbackMeasurer();
1826
+ if (measurer === void 0) warnIfEstimating(m, "Text.lineBoxes");
1790
1827
  const text = this.text();
1791
1828
  if (!text) return [];
1792
1829
  const font = {
@@ -1825,6 +1862,7 @@ var Text = class extends Node {
1825
1862
  */
1826
1863
  wordBoxes(measurer) {
1827
1864
  const m = measurer ?? this.measurerSource?.() ?? fallbackMeasurer();
1865
+ if (measurer === void 0) warnIfEstimating(m, "Text.wordBoxes");
1828
1866
  const text = this.text();
1829
1867
  if (!text) return [];
1830
1868
  const font = {
@@ -1879,6 +1917,7 @@ var Text = class extends Node {
1879
1917
  */
1880
1918
  graphemeBoxes(measurer) {
1881
1919
  const m = measurer ?? this.measurerSource?.() ?? fallbackMeasurer();
1920
+ if (measurer === void 0) warnIfEstimating(m, "Text.graphemeBoxes");
1882
1921
  const text = this.text();
1883
1922
  if (!text) return [];
1884
1923
  const font = {
@@ -2120,4 +2159,4 @@ function revealSchedule(text, reveal, measurer) {
2120
2159
  return marks;
2121
2160
  }
2122
2161
  //#endregion
2123
- export { sketchStrokes as A, collapseReplacer as B, SketchValidationError as C, hashStr as D, hachureLines as E, filtersToCanvasFilter as F, IDENTITY as G, formatDisplayDiff as H, glow as I, invert as J, applyToPoint as K, validateFilters as L, validateSketch as M, FilterValidationError as N, resolveSketch as O, createDisplayListBuilder as P, DL_SNAPSHOT_VERSION as R, setDefaultMeasurer as S, flatten as T, parseDisplaySnapshot as U, diffDisplayLists as V, serializeDisplayList as W, multiply as X, matEquals as Y, estimatingMeasurer as _, Path as a, segmentGraphemes as b, Video as c, revealSchedule as d, roundedRectSegs as f, breakLines as g, MEASURE_QUANTUM_PX as h, ImageNode as i, validateHachure as j, roughen as k, coercePathData as l, resolveAnchor as m, Custom as n, Rect as o, Node as p, fromTRS as q, Group as r, Text as s, Circle as t, pathFromSegs as u, fallbackMeasurer as v, arcLength as w, segmentWords as x, quantize as y, DlSnapshotError as z };
2162
+ export { multiply as $, hashStr as A, validateFilters as B, segmentWords as C, arcLength as D, SketchValidationError as E, validateSketch as F, formatDisplayDiff as G, DlSnapshotError as H, FilterValidationError as I, IDENTITY as J, parseDisplaySnapshot as K, createDisplayListBuilder as L, roughen as M, sketchStrokes as N, flatten as O, validateHachure as P, matEquals as Q, filtersToCanvasFilter as R, segmentGraphemes as S, warnIfEstimating as T, collapseReplacer as U, DL_SNAPSHOT_VERSION as V, diffDisplayLists as W, fromTRS as X, applyToPoint as Y, invert as Z, breakLines as _, Path as a, isEstimatingMeasurer as b, Video as c, revealSchedule as d, roundedRectSegs as f, __resetEstimateWarnings as g, MEASURE_QUANTUM_PX as h, ImageNode as i, resolveSketch as j, hachureLines as k, coercePathData as l, resolveAnchor as m, Custom as n, Rect as o, Node as p, serializeDisplayList as q, Group as r, Text as s, Circle as t, pathFromSegs as u, estimatingMeasurer as v, setDefaultMeasurer as w, quantize as x, fallbackMeasurer as y, glow as z };
package/dist/type.js CHANGED
@@ -1,4 +1,4 @@
1
- import { r as Group, s as Text, v as fallbackMeasurer, y as quantize } from "./nodes.js";
1
+ import { T as warnIfEstimating, r as Group, s as Text, x as quantize, y as fallbackMeasurer } from "./nodes.js";
2
2
  //#region src/type.ts
3
3
  /**
4
4
  * `@glissade/scene/type` — `splitText()`: build-time split-text sub-targets
@@ -45,6 +45,7 @@ function splitText(source, opts = {}) {
45
45
  if (id === void 0) throw new SplitTextError("splitText() needs a stable id — pass { id } or give the source Text an id (the parts bind tracks against ${id}/${i})");
46
46
  const by = opts.by ?? "word";
47
47
  const m = opts.measurer ?? text.measurerSource?.() ?? fallbackMeasurer();
48
+ warnIfEstimating(m, "splitText");
48
49
  const font = {
49
50
  fontFamily: text.fontFamily,
50
51
  fontSize: text.fontSize(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glissade/scene",
3
- "version": "0.19.0-pre.2",
3
+ "version": "0.19.0-pre.3",
4
4
  "description": "glissade scene graph: nodes, transforms, DisplayList emission. Renderer-agnostic; zero DOM/Node dependencies.",
5
5
  "license": "Apache-2.0",
6
6
  "engines": {
@@ -35,7 +35,7 @@
35
35
  ],
36
36
  "dependencies": {
37
37
  "yoga-layout": "^3.2.1",
38
- "@glissade/core": "0.19.0-pre.2"
38
+ "@glissade/core": "0.19.0-pre.3"
39
39
  },
40
40
  "repository": {
41
41
  "type": "git",