@idle-screens/schema 3.15.0 → 3.16.1

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
@@ -150,8 +150,8 @@ interface BackgroundDrift {
150
150
  /**
151
151
  * A paint-level transform applied to a whole layer at draw time, about the
152
152
  * viewport centre: translate by (`x`, `y`) in `min(w, h)` units, rotate by
153
- * `rotate` degrees, scale by `scale` (× `scaleX` horizontally — `scaleX`
154
- * toward 0 reads as a turn about the vertical axis). Kept out of the
153
+ * `rotate` degrees, scale by `scale` (× `scaleX` horizontally, × `scaleY`
154
+ * vertically — `scaleX` toward 0 reads as a turn about the vertical axis). Kept out of the
155
155
  * structural signature, so it glides under steering, a `timeline` key or a
156
156
  * `morph` — a camera for timed pieces, a slow drift for ambient ones. Every
157
157
  * field optional; an empty transform is the identity. **Native:** ignored ⇒
@@ -162,9 +162,15 @@ interface LayerTransform {
162
162
  y?: number;
163
163
  scale?: number;
164
164
  scaleX?: number;
165
+ /**
166
+ * Extra vertical scale, × `scale` (default 1; ±8, negative flips upside
167
+ * down). With `scaleX` it squashes and stretches: wide-and-short on a
168
+ * landing, narrow-and-tall on take-off.
169
+ */
170
+ scaleY?: number;
165
171
  rotate?: number;
166
172
  /**
167
- * What `scale` / `scaleX` / `rotate` turn about. `'viewport'` (default) is
173
+ * What `scale` / `scaleX` / `scaleY` / `rotate` turn about. `'viewport'` (default) is
168
174
  * the viewport centre — a camera move. `'anchor'` is the layer's own
169
175
  * `position` point (with `dx`/`dy`; for a `list`/`table` layout, the block's
170
176
  * anchor; without `position`, the centre of its `region`) — a slam word
@@ -252,7 +258,7 @@ interface LayerSpec {
252
258
  y?: [number, number];
253
259
  };
254
260
  /**
255
- * Sinusoidal opacity breathing. SAFETY: amp is capped (LIMITS.maxPulseAmp),
261
+ * Sinusoidal opacity breathing (`amp: 0` is none). SAFETY: amp is capped (LIMITS.maxPulseAmp),
256
262
  * period has a floor (LIMITS.minPulsePeriod — max 2 Hz), and every entity gets
257
263
  * its own seeded phase, so a layer can never strobe in unison. Effective alpha
258
264
  * is clamped to 0..1.
@@ -578,7 +584,9 @@ type SpriteSpec = {
578
584
  * n-gon of the seeded `radius` (circumradius), point up; `points` (3..24
579
585
  * unit coordinates in −1..1, scaled by the radius) draws any facet — a
580
586
  * Picasso shard, a Kandinsky triangle, a Mondrian plane. `soft` feathers
581
- * the fill from the centre like a soft circle. Rotates with `spin`.
587
+ * the fill from the centre like a soft circle. Rotates with `spin`. A
588
+ * `points` polygon with `stroke`, `fill: false` or `gradient` draws as the
589
+ * closed path through its points (X711) — keyed points become line art.
582
590
  */
583
591
  | {
584
592
  kind: 'polygon';
@@ -684,6 +692,14 @@ interface TextNumber {
684
692
  prefix?: string;
685
693
  suffix?: string;
686
694
  grouping?: boolean;
695
+ /**
696
+ * Zero-pad the integer part to at least this many digits (1..12, default
697
+ * 1): `minDigits: 4` paints 42 as `0042` — a fixed-width frame counter.
698
+ * Padding happens before grouping, as `Intl`'s `minimumIntegerDigits`
699
+ * does, so pair it with `grouping: false` unless you want `0,042`. The
700
+ * sign stays outside the padding (`-0042`). Paint, like the rest.
701
+ */
702
+ minDigits?: number;
687
703
  }
688
704
  /**
689
705
  * What a text layer is *for* — a declaration, not a pixel. `read` says the
@@ -958,6 +974,7 @@ declare const LIMITS: {
958
974
  readonly maxPolygonSides: 12;
959
975
  readonly maxShapePoints: 24;
960
976
  readonly maxTextNumberDecimals: 6;
977
+ readonly maxTextNumberMinDigits: 12;
961
978
  readonly maxTextAffix: 64;
962
979
  readonly maxRevealRise: 1;
963
980
  readonly maxRockAmp: 45;
@@ -1104,7 +1121,8 @@ interface PathGradientStop {
1104
1121
  * An outline drawn along every subpath of a path polygon (open ones too).
1105
1122
  * `width` is in unit-box units. `draw` paints only a stretch of it — see
1106
1123
  * `StrokeDraw`: every subpath of the part counts as one pen line, in the
1107
- * order the path draws them.
1124
+ * order the path draws them (or, with `draw.mode: 'each'`, each subpath
1125
+ * draws over the whole span at once).
1108
1126
  */
1109
1127
  interface PathStroke {
1110
1128
  color: string;
@@ -1125,6 +1143,15 @@ interface PathStroke {
1125
1143
  interface StrokeDraw {
1126
1144
  start?: number;
1127
1145
  end?: number;
1146
+ /**
1147
+ * How a path stroke's subpaths share the span. `'run'` (default): one pen
1148
+ * run through every subpath in draw order — a signature, a contour.
1149
+ * `'each'`: every subpath is cut to the same `start`..`end` of its **own**
1150
+ * length, so they all draw at once — a burst, a tick dial, hatching. An
1151
+ * enum: a steer or key on it steps. No effect on a `stroke` sprite (one
1152
+ * line either way).
1153
+ */
1154
+ mode?: 'run' | 'each';
1128
1155
  }
1129
1156
  /**
1130
1157
  * One piece of a multi-colour path drawing (`polygon.parts`), drawn back to
@@ -1329,9 +1356,9 @@ declare function spriteVariants(sprite: SpriteSpec): number;
1329
1356
  declare function buildEntities(layer: LayerSpec, rng: Rng, w: number, h: number, scale?: number, countScale?: number): Entity[];
1330
1357
  /**
1331
1358
  * The string a `textBlock` paints: its `text`, or with `number` the
1332
- * counter's `prefix + value + suffix` — rounded to `decimals`, thousands
1333
- * grouped with commas unless `grouping: false`. Locale-free, so every
1334
- * device draws the same digits.
1359
+ * counter's `prefix + value + suffix` — rounded to `decimals`, the integer
1360
+ * part zero-padded to `minDigits`, thousands grouped with commas unless
1361
+ * `grouping: false`. Locale-free, so every device draws the same digits.
1335
1362
  */
1336
1363
  declare function textBlockText(s: {
1337
1364
  text: string;
@@ -1897,6 +1924,32 @@ declare function describeScene(spec: SaverSpec, options?: {
1897
1924
  times?: number[];
1898
1925
  }): SceneDescription;
1899
1926
 
1927
+ /**
1928
+ * Analytic models of the paint-level layer fields — `transform` (with its
1929
+ * `origin`), `opacity`, and the `groups` a layer paints through — shared by
1930
+ * the renderer's maths, perception and the advisories. Internal, not
1931
+ * exported from the package. They mirror SpecInstance's draw-time canvas
1932
+ * transform: a member of a group is drawn through G·L, where L is the layer's
1933
+ * own transform (about its origin) and G the group's (about the viewport
1934
+ * centre), so a point p lands at G(L(p)).
1935
+ */
1936
+
1937
+ /** The numeric fields of a `LayerTransform`, at their identity values. */
1938
+ declare const TRANSFORM_FIELDS: {
1939
+ readonly x: 0;
1940
+ readonly y: 0;
1941
+ readonly scale: 1;
1942
+ readonly scaleX: 1;
1943
+ readonly scaleY: 1;
1944
+ readonly rotate: 0;
1945
+ };
1946
+ type TransformField = keyof typeof TRANSFORM_FIELDS;
1947
+ /**
1948
+ * Every value each numeric transform field takes over some stretch of time,
1949
+ * as `[min, max]` — what a timeline that glides a transform sweeps through.
1950
+ */
1951
+ type TransformRange = Record<TransformField, [number, number]>;
1952
+
1900
1953
  interface PerceiveOptions {
1901
1954
  viewport?: {
1902
1955
  width: number;
@@ -1957,8 +2010,16 @@ declare function luminanceGrid(spec: SaverSpec, opts?: LuminanceGridOptions): Lu
1957
2010
  * fixed — it moves, emits, links, trails, orbits or cycles its text — and so may reach
1958
2011
  * any cell. Each entity is a disc about its position that holds its whole
1959
2012
  * outline at its largest size under any rotation: generous, never short.
2013
+ *
2014
+ * `sweep` (by layer index) widens a layer to everywhere its own and its
2015
+ * group's transforms can carry it while they range over the given values —
2016
+ * a timeline that glides them (X681). Either side missing is held at the
2017
+ * spec's own transform.
1960
2018
  */
1961
- declare function layerCellFootprints(spec: SaverSpec, opts?: LuminanceGridOptions): Array<number[] | null>;
2019
+ declare function layerCellFootprints(spec: SaverSpec, opts?: LuminanceGridOptions, sweep?: ReadonlyMap<number, {
2020
+ layer?: TransformRange;
2021
+ group?: TransformRange;
2022
+ }>): Array<number[] | null>;
1962
2023
  /**
1963
2024
  * Encode a luminance grid as a braille "image": each output character is a 2×4
1964
2025
  * pixel cell, ordered-dithered so mid-tones render as dot density. A grid of
@@ -2284,6 +2345,41 @@ interface TimelineFlashReport {
2284
2345
  boundariesPerSecond?: number;
2285
2346
  }
2286
2347
  declare function timelineFlashReport(spec: SaverSpec): TimelineFlashReport;
2348
+ interface FlashSamplingForecast {
2349
+ /**
2350
+ * The check would run out of frames to resolve. {@link timelineFlashReport}
2351
+ * is then certain to fail: with `incomplete` at this `at` and
2352
+ * `boundariesPerSecond`, unless it finds a flash in the frames it does
2353
+ * resolve first. False means it is never `incomplete`, and its verdict
2354
+ * turns on the pixels.
2355
+ */
2356
+ exhausted: boolean;
2357
+ /** With `exhausted`: start (scene ms, within the lap) of the window the budget runs out in; otherwise null. */
2358
+ at: number | null;
2359
+ /** With `exhausted`: paint-key changes in that window's busiest second. */
2360
+ boundariesPerSecond?: number;
2361
+ /** Frames the check resolves if it finds no flash: at most `budget`. */
2362
+ samples: number;
2363
+ /** Frames the whole walk would take with no budget (more than `budget` exactly when `exhausted`). */
2364
+ needed: number;
2365
+ /** The check's frame budget ({@link MAX_TOTAL_SAMPLES}). */
2366
+ budget: number;
2367
+ /**
2368
+ * The report {@link timelineFlashReport} returns if it finds no flash: the
2369
+ * pass, or the fail-closed `incomplete` one (its `flashesPerSecond` and
2370
+ * `flashingArea` are 0 here; the real report carries whatever it checked).
2371
+ */
2372
+ report: TimelineFlashReport;
2373
+ }
2374
+ /**
2375
+ * {@link timelineFlashReport}'s sampling plan, with no frame resolved: the
2376
+ * same dense windows, per-cell pre-check and budgeted walk, so whether the
2377
+ * check will run out of budget is known for the cost of the arithmetic. A
2378
+ * caller that cannot afford the full check (it resolves up to
2379
+ * {@link MAX_TOTAL_SAMPLES} luminance grids) can refuse `exhausted` scenes
2380
+ * outright: publishing refuses them too.
2381
+ */
2382
+ declare function flashSamplingForecast(spec: SaverSpec): FlashSamplingForecast;
2287
2383
 
2288
2384
  /**
2289
2385
  * The `field` background sampler — seeded, dependency-free value noise that
@@ -2661,17 +2757,48 @@ interface ScenePeriod {
2661
2757
  period: number | null;
2662
2758
  /** One line per part that sets or breaks the period, e.g. `layers[2] pulse: 4000 ms`. */
2663
2759
  parts: string[];
2760
+ /** What drives each of `parts`, index for index: `pulse`, `grow`, `rock`, `spin`, `path`, `orbit`, `emit`, `cycle`, `caret`, `background`, `timeline`. */
2761
+ kinds: PeriodKind[];
2664
2762
  /** Why it is null (empty otherwise). */
2665
2763
  reasons: string[];
2666
2764
  }
2667
- /** The repeat period of `spec` — see the module comment. */
2668
- declare function scenePeriod(spec: SaverSpec): ScenePeriod;
2765
+ type PeriodKind = 'timeline' | 'background' | 'pulse' | 'grow' | 'rock' | 'emit' | 'spin' | 'cycle' | 'caret' | 'path' | 'orbit';
2766
+ /**
2767
+ * Periodic parts that run on scene time and change smoothly, so a looping
2768
+ * timeline's wrap never makes them jump: they carry on through it. A lap
2769
+ * that does not divide their period still loops seamlessly on screen — only
2770
+ * an exact export of one lap would differ (F145, X725, X823).
2771
+ */
2772
+ declare const SEAMLESS_PERIOD_KINDS: ReadonlySet<PeriodKind>;
2773
+ /**
2774
+ * The repeat period of `spec` — see the module comment. `skip` leaves out the
2775
+ * periodic parts of those kinds, as if they were static (the loop-seam
2776
+ * advisory passes `SEAMLESS_PERIOD_KINDS`).
2777
+ */
2778
+ declare function scenePeriod(spec: SaverSpec, skip?: ReadonlySet<PeriodKind>): ScenePeriod;
2669
2779
  /**
2670
2780
  * The period of everything in the scene except its timeline — what a
2671
2781
  * looping timeline's lap has to be a multiple of for one lap to loop
2672
2782
  * seamlessly.
2673
2783
  */
2674
- declare function periodWithoutTimeline(spec: SaverSpec): ScenePeriod;
2784
+ declare function periodWithoutTimeline(spec: SaverSpec, skip?: ReadonlySet<PeriodKind>): ScenePeriod;
2785
+ /**
2786
+ * How many-fold rotationally symmetric a sprite's drawing is about the point
2787
+ * `spin` turns it on: a spinning layer looks the same again after 360°/n,
2788
+ * so its spin repeats n times a lap (X709). `Infinity` for a circle or ring
2789
+ * (spin never shows); 1 when no symmetry is found, or the drawing has
2790
+ * something the check does not model (a gradient, a part-drawn stroke, a
2791
+ * stretched `span`, a soft fill off its pivot) — 1 is the old behaviour, a
2792
+ * period that is never too short.
2793
+ *
2794
+ * Regular `sides` n-gons are n-fold. For `points` and path drawings, each
2795
+ * paint (fill colour and rule, stroke colour and width, opacity) is checked
2796
+ * on its own: every vertex and segment midpoint of its outline, turned by
2797
+ * ±360°/n, must lie on that same paint's outline, to within 0.2 % of the
2798
+ * drawing's radius — sub-pixel, past the path flattener's own error. Draw
2799
+ * order between overlapping parts is not modelled.
2800
+ */
2801
+ declare function spinSymmetry(sp: SpriteSpec): number;
2675
2802
 
2676
2803
  /**
2677
2804
  * Reproduces the hand-coded Fish Aquarium saver as pure DATA — the discriminating test
@@ -3088,13 +3215,15 @@ declare function trimPolyline(pts: Array<{
3088
3215
  /**
3089
3216
  * A part's subpaths cut to a `draw` span: the lines are one pen run in draw
3090
3217
  * order (a closed ring counts its closing edge), so `end` sweeps through the
3091
- * first subpath, then the next. A trimmed ring comes back open; untouched
3092
- * lines are returned as they were. Memoised per (lines, span).
3218
+ * first subpath, then the next. With `mode: 'each'` every line is cut to the
3219
+ * same fractions of its own length instead, so all of them draw at once. A
3220
+ * trimmed ring comes back open; untouched lines are returned as they were.
3221
+ * Memoised per (lines, span, mode).
3093
3222
  */
3094
3223
  declare function trimLines(lines: Array<{
3095
3224
  points: Array<[number, number]>;
3096
3225
  closed: boolean;
3097
- }>, a: number, b: number): Array<{
3226
+ }>, a: number, b: number, mode?: StrokeDraw['mode']): Array<{
3098
3227
  points: Array<[number, number]>;
3099
3228
  closed: boolean;
3100
3229
  }>;
@@ -3134,7 +3263,11 @@ interface FlattenedPath {
3134
3263
  */
3135
3264
  type PathFillRule = 'auto' | 'nonzero' | 'evenodd';
3136
3265
  declare function flattenPath(d: string, rule?: PathFillRule): FlattenedPath;
3137
- /** A polygon drawn from SVG paths: one `path`, or a multi-colour drawing of `parts`. */
3266
+ /**
3267
+ * A polygon drawn from SVG paths: one `path`, a multi-colour drawing of
3268
+ * `parts`, or a `points` polygon that carries path paint (see
3269
+ * `isPointsPath`).
3270
+ */
3138
3271
  declare function isPathPolygon(s: SpriteSpec): boolean;
3139
3272
  /** One drawable piece of a path polygon, resolved: its outline, paint and part-space box. */
3140
3273
  interface ResolvedPart {
@@ -3181,5 +3314,5 @@ declare function pathFrame(s: PolygonSprite, r: number, w: number, h: number): {
3181
3314
  uniform: boolean;
3182
3315
  };
3183
3316
 
3184
- export { AQUARIUM_SPEC, AURORA_SPEC, COHESION_T, COMETS_SPEC, CONSTELLATION_SPEC, DASHBOARD_SPEC, DEFAULT_KEY_DUR, DITHER_ALPHA, DITHER_TILE, EXAMPLE_BY_ID, EXAMPLE_SEQUENCES, EXAMPLE_SPECS, FACETS_SPEC, FIELD_BUCKET_MS, FIELD_DRIFT_DEFAULT_AMOUNT, FIELD_RASTER_SHORT_SIDE, FIELD_RASTER_SHORT_SIDE_LOW, FINISH_ANIMATE_HZ, GRAIN_ALPHA, GRAIN_TILE, HAIKU_SPEC, LANTERNS_SPEC, LIMITS, LOBBY_TALK_SPEC, MATRIX_RAIN_SPEC, MAX_PATH_POINTS, MAX_SCENE_PERIOD, MOTION_FIELDS, MURMUR_SPEC, NOSTALGHIA_CANDLE_SPEC, ORRERY_SPEC, PHASE_DUET_SPEC, PINGS_SPEC, POLYGONS_SPEC, PROCESSION_SPEC, RAIN_SPEC, RELAY_BOARD_SPEC, SAKURA_SPEC, SCHEMA_EXAMPLES, SCHEMA_VERSION, SHARD_FALL_SPEC, SIGNAL_BOARD_SPEC, SNOWFALL_SPEC, SPARSE_NIGHT_SPEC, STEER_EASES, THERMAL_FIELD_SPEC, THREE_MOVEMENTS_SEQUENCE, TYPED_CUE_SPEC, WARP_MAX_SCALE, WARP_NEAR, WARP_TUNNEL_SPEC, WEB_WORK_SPEC, adviseSequence, adviseSpec, alphaAt, applyDeltasShared, applyDeltasToSpec, assertValidSequence, assertValidSpec, bayerMatrix, bayerTilePixels, bedRenderSeed, breakTextBlock, buildEntities, buriedAreaOf, canMorph, canWrapMorph, canonicalSpecPath, cohesionOf, compileSaver, compileSequence, createFinishPass, createSceneCanvas, describeScene, diffScenes, dominanceRanking, drawSpan, easeGlide, easeSmooth, emitEnvelope, emitWindow, entityScales, fieldAt, fieldOctaves, fieldRgb, fieldRgbAt, fieldSampleTime, finishStrength, flattenPath, grainOffset, grainTilePixels, graphemeClusters, hasHotSwapSequence, headingAt, hexToRgb255, ignoredPropertyPaths, isCombiningKana, isFullWidth, isPathPolygon, latticeHash, layerCellFootprints, layerCohesion, lerpPathD, lerpSpec, lerpValue, lifeAlphaAt, lifeStaggerAt, linkEdges, linkMaxDistPx, linkPairs, luminanceGrid, manifestFor, morphChainRoot, morphNothingMorphable, motionStats, nextKeyAfter, normalizeSeed, pathFrame, pathParts, perceiveScene, perceiveSequenceFrame, periodWithoutTimeline, pickScreenOp, positionAt, presentWithFinish, readSpecPath, renderBrailleMap, renderDensityMap, resolveSegment, resolveSpecPath, resolveTimelineAt, revealState, rgb255Luma, rotationAt, sceneColour, scenePeriod, seamCauseOf, seamsWorthWarning, segmentRenderSeed, segmentStart, sequenceSteerablePaths, sequenceSwapCompatible, sequenceWantsFinish, sizeAt, spriteIndexAt, spriteVariants, steerablePaths, strokeDrawnSamples, strokeLines, structuralSignature, textBlockAnchorOffset, textBlockText, textMetricsClassFor, textSprites, textStringsDiffer, textStringsOf, textWidthEm, timelineFlashReport, timelineLocalTime, timelineSampleTimes, timelineSampleTimesAfter, timelineTracks, trimLines, trimPolyline, validateSequence, validateSpec, validateSpecPaths, wipeMask, withoutTimeline };
3185
- export type { BackgroundDrift, BackgroundSpec, BandSpec, CapabilityTier, CohesionRead, CycleSpec, DominanceEntry, Entity, FieldBackground, FieldDrift, FinishPass, FinishSpec, FlattenedPath, GlideEase, GradientStop, IdleSequence, LayerCohesion, LayerGroup, LayerMotionStats, LayerSnapshot, LayerSpec, LayerTransform, LinkEdge, LuminanceGrid, LuminanceGridOptions, MotionEase, MotionSpec, PathGradient, PathGradientStop, PathPart, PathStroke, PerceiveOptions, PerceiveSequenceOptions, Placed, ResolveOptions, ResolvedPart, ResolvedSegment, RevealState, SaverSpec, SceneColour, SceneDescription, SceneDiff, ScenePerception, ScenePeriod, SceneSnapshot, SchemaExample, ScreenOp, SequenceExample, SequenceFramePerception, SequenceMountContext, SequenceSaverInstance, SequenceSaverPlugin, SequenceSegment, SequenceTransition, SpecError, SpecMountContext, SpecWarning, SpriteSpec, SteerDelta, StrokeDraw, TextBlockAnchor, TextBlockLine, TextMetricsClass, TextNumber, TextRevealInput, TextRevealSpec, TextRole, TextSpriteInfo, Timeline, TimelineFlashReport, TimelineKey, ValidationResult, WanderOsc, WarningBox, WipeTransition };
3317
+ export { AQUARIUM_SPEC, AURORA_SPEC, COHESION_T, COMETS_SPEC, CONSTELLATION_SPEC, DASHBOARD_SPEC, DEFAULT_KEY_DUR, DITHER_ALPHA, DITHER_TILE, EXAMPLE_BY_ID, EXAMPLE_SEQUENCES, EXAMPLE_SPECS, FACETS_SPEC, FIELD_BUCKET_MS, FIELD_DRIFT_DEFAULT_AMOUNT, FIELD_RASTER_SHORT_SIDE, FIELD_RASTER_SHORT_SIDE_LOW, FINISH_ANIMATE_HZ, GRAIN_ALPHA, GRAIN_TILE, HAIKU_SPEC, LANTERNS_SPEC, LIMITS, LOBBY_TALK_SPEC, MATRIX_RAIN_SPEC, MAX_PATH_POINTS, MAX_SCENE_PERIOD, MOTION_FIELDS, MURMUR_SPEC, NOSTALGHIA_CANDLE_SPEC, ORRERY_SPEC, PHASE_DUET_SPEC, PINGS_SPEC, POLYGONS_SPEC, PROCESSION_SPEC, RAIN_SPEC, RELAY_BOARD_SPEC, SAKURA_SPEC, SCHEMA_EXAMPLES, SCHEMA_VERSION, SEAMLESS_PERIOD_KINDS, SHARD_FALL_SPEC, SIGNAL_BOARD_SPEC, SNOWFALL_SPEC, SPARSE_NIGHT_SPEC, STEER_EASES, THERMAL_FIELD_SPEC, THREE_MOVEMENTS_SEQUENCE, TYPED_CUE_SPEC, WARP_MAX_SCALE, WARP_NEAR, WARP_TUNNEL_SPEC, WEB_WORK_SPEC, adviseSequence, adviseSpec, alphaAt, applyDeltasShared, applyDeltasToSpec, assertValidSequence, assertValidSpec, bayerMatrix, bayerTilePixels, bedRenderSeed, breakTextBlock, buildEntities, buriedAreaOf, canMorph, canWrapMorph, canonicalSpecPath, cohesionOf, compileSaver, compileSequence, createFinishPass, createSceneCanvas, describeScene, diffScenes, dominanceRanking, drawSpan, easeGlide, easeSmooth, emitEnvelope, emitWindow, entityScales, fieldAt, fieldOctaves, fieldRgb, fieldRgbAt, fieldSampleTime, finishStrength, flashSamplingForecast, flattenPath, grainOffset, grainTilePixels, graphemeClusters, hasHotSwapSequence, headingAt, hexToRgb255, ignoredPropertyPaths, isCombiningKana, isFullWidth, isPathPolygon, latticeHash, layerCellFootprints, layerCohesion, lerpPathD, lerpSpec, lerpValue, lifeAlphaAt, lifeStaggerAt, linkEdges, linkMaxDistPx, linkPairs, luminanceGrid, manifestFor, morphChainRoot, morphNothingMorphable, motionStats, nextKeyAfter, normalizeSeed, pathFrame, pathParts, perceiveScene, perceiveSequenceFrame, periodWithoutTimeline, pickScreenOp, positionAt, presentWithFinish, readSpecPath, renderBrailleMap, renderDensityMap, resolveSegment, resolveSpecPath, resolveTimelineAt, revealState, rgb255Luma, rotationAt, sceneColour, scenePeriod, seamCauseOf, seamsWorthWarning, segmentRenderSeed, segmentStart, sequenceSteerablePaths, sequenceSwapCompatible, sequenceWantsFinish, sizeAt, spinSymmetry, spriteIndexAt, spriteVariants, steerablePaths, strokeDrawnSamples, strokeLines, structuralSignature, textBlockAnchorOffset, textBlockText, textMetricsClassFor, textSprites, textStringsDiffer, textStringsOf, textWidthEm, timelineFlashReport, timelineLocalTime, timelineSampleTimes, timelineSampleTimesAfter, timelineTracks, trimLines, trimPolyline, validateSequence, validateSpec, validateSpecPaths, wipeMask, withoutTimeline };
3318
+ export type { BackgroundDrift, BackgroundSpec, BandSpec, CapabilityTier, CohesionRead, CycleSpec, DominanceEntry, Entity, FieldBackground, FieldDrift, FinishPass, FinishSpec, FlashSamplingForecast, FlattenedPath, GlideEase, GradientStop, IdleSequence, LayerCohesion, LayerGroup, LayerMotionStats, LayerSnapshot, LayerSpec, LayerTransform, LinkEdge, LuminanceGrid, LuminanceGridOptions, MotionEase, MotionSpec, PathGradient, PathGradientStop, PathPart, PathStroke, PerceiveOptions, PerceiveSequenceOptions, PeriodKind, Placed, ResolveOptions, ResolvedPart, ResolvedSegment, RevealState, SaverSpec, SceneColour, SceneDescription, SceneDiff, ScenePerception, ScenePeriod, SceneSnapshot, SchemaExample, ScreenOp, SequenceExample, SequenceFramePerception, SequenceMountContext, SequenceSaverInstance, SequenceSaverPlugin, SequenceSegment, SequenceTransition, SpecError, SpecMountContext, SpecWarning, SpriteSpec, SteerDelta, StrokeDraw, TextBlockAnchor, TextBlockLine, TextMetricsClass, TextNumber, TextRevealInput, TextRevealSpec, TextRole, TextSpriteInfo, Timeline, TimelineFlashReport, TimelineKey, ValidationResult, WanderOsc, WarningBox, WipeTransition };