@glissade/core 0.13.0 → 0.14.0-pre.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/i18n.d.ts ADDED
@@ -0,0 +1,87 @@
1
+ import { l as Timeline } from "./timeline.js";
2
+
3
+ //#region src/i18n.d.ts
4
+ /** A locale's id manifest: the message ids it declares (narrate owns producing it). */
5
+ interface LocaleManifest {
6
+ locale: string;
7
+ ids: readonly string[];
8
+ }
9
+ declare class ParityError extends Error {
10
+ constructor(message: string);
11
+ }
12
+ /**
13
+ * Assert every supplied locale declares the SAME id set — the cross-language
14
+ * analogue of `narration().require`. Throws a `ParityError` listing, per locale,
15
+ * every id that is MISSING (present in the union but not this locale) or EXTRA
16
+ * (present here but in no shared reference). A pure function of its inputs — no
17
+ * time, no filesystem. The reference set is the UNION of every locale's ids, so
18
+ * the report names each gap exactly once per affected locale.
19
+ *
20
+ * Ship-alone-able: the smallest blast radius of the four pieces. One manifest
21
+ * (or zero) is trivially in parity.
22
+ */
23
+ declare function requireParity(...manifests: LocaleManifest[]): void;
24
+ /** A flat message table: id → localized string (the `messages.<locale>.json` shape). */
25
+ type MessageTable = Record<string, string>;
26
+ interface LocalizeOptions {
27
+ /** the locale being resolved (carried for error context only; no behavior depends on it). */
28
+ locale: string;
29
+ /**
30
+ * Message ids ALREADY consumed outside the doc — the free-standing `t()` ids
31
+ * resolved at module-eval / createScene() time (`getConsumedMessageIds()`).
32
+ * `localize` folds these into the "matched keys" set so the orphaned-key check
33
+ * (FIX 5) doesn't flag a legitimate `t()` key as unmatched. Omit when there is
34
+ * no ambient `t()` usage (then only node-id keys count as matched).
35
+ */
36
+ consumedIds?: ReadonlySet<string> | undefined;
37
+ }
38
+ declare class LocalizationError extends Error {
39
+ constructor(message: string);
40
+ }
41
+ /**
42
+ * Resolve a timeline document against a message `table`, returning a NEW doc
43
+ * (the input is never mutated). For every STRING track whose target node-id is a
44
+ * key in `table` — caption + narration-derived text tracks live in the doc as
45
+ * exactly these string tracks — every key's `value` is replaced with the table's
46
+ * localized string. Tracks whose node-id is absent from the table pass through
47
+ * untouched, byte-identical.
48
+ *
49
+ * Pure: no playhead, no time, no filesystem. The base-locale table (or an empty
50
+ * table) leaves the doc structurally identical to the input.
51
+ *
52
+ * FIX 5 (0.14 canary): a table key matching NO consumed id (neither a string-track
53
+ * node-id NOR a `t()` id passed via `opts.consumedIds`) is a stale/typo'd key that
54
+ * would silently never localize anything — so `localize` throws a `LocalizationError`
55
+ * naming every orphaned key (the inverse of `t()`'s hard-fail). A fully-matched
56
+ * table is silent.
57
+ */
58
+ declare function localize(doc: Timeline, table: MessageTable, opts: LocalizeOptions): Timeline;
59
+ /**
60
+ * Install the ambient message table consulted by `t()`. Called ONCE before
61
+ * scene construction (the render entry injects it from `--locale`). Pass
62
+ * `undefined` to clear it (the base-locale / no-flag path leaves it unset).
63
+ * Resets the consumed-id set (a fresh table = a fresh resolution pass).
64
+ */
65
+ declare function setMessageTable(table: MessageTable | undefined): void;
66
+ /** The currently installed ambient message table (undefined when none is set). */
67
+ declare function getMessageTable(): MessageTable | undefined;
68
+ /**
69
+ * The set of ids `t()` has resolved against the ambient table since the last
70
+ * `setMessageTable`. The render entry passes this to `localize` so a key consumed
71
+ * by a free-standing `t()` (which `localize` can't see — it isn't a doc track)
72
+ * isn't reported as an orphaned table key (FIX 5).
73
+ */
74
+ declare function getConsumedMessageIds(): ReadonlySet<string>;
75
+ /**
76
+ * Resolve a free-standing message `id` against the ambient table — build-time
77
+ * sugar for static Text-node text (text that is NOT animated by a doc track,
78
+ * so `localize()` can't reach it): `new Text({ text: t('hero.title') })`.
79
+ *
80
+ * HARD-FAILS (throws) on an unknown id, mirroring `require()` — a stale or
81
+ * mistyped id is a build error, never a silent empty string. When NO ambient
82
+ * table is installed (the base / no-flag path), `t(id)` returns `id` verbatim,
83
+ * so an un-localized build renders its keys as authored and stays byte-identical.
84
+ */
85
+ declare function t(id: string): string;
86
+ //#endregion
87
+ export { LocaleManifest, LocalizationError, LocalizeOptions, MessageTable, ParityError, getConsumedMessageIds, getMessageTable, localize, requireParity, setMessageTable, t };
package/dist/i18n.js ADDED
@@ -0,0 +1,134 @@
1
+ //#region src/i18n.ts
2
+ var ParityError = class extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "ParityError";
6
+ }
7
+ };
8
+ /**
9
+ * Assert every supplied locale declares the SAME id set — the cross-language
10
+ * analogue of `narration().require`. Throws a `ParityError` listing, per locale,
11
+ * every id that is MISSING (present in the union but not this locale) or EXTRA
12
+ * (present here but in no shared reference). A pure function of its inputs — no
13
+ * time, no filesystem. The reference set is the UNION of every locale's ids, so
14
+ * the report names each gap exactly once per affected locale.
15
+ *
16
+ * Ship-alone-able: the smallest blast radius of the four pieces. One manifest
17
+ * (or zero) is trivially in parity.
18
+ */
19
+ function requireParity(...manifests) {
20
+ if (manifests.length < 2) return;
21
+ const union = /* @__PURE__ */ new Set();
22
+ for (const m of manifests) for (const id of m.ids) union.add(id);
23
+ const problems = [];
24
+ for (const m of manifests) {
25
+ const have = new Set(m.ids);
26
+ const missing = [...union].filter((id) => !have.has(id)).sort();
27
+ const extra = [...have].filter((id) => manifests.every((other) => other === m || !other.ids.includes(id))).sort();
28
+ if (missing.length > 0 || extra.length > 0) {
29
+ const parts = [];
30
+ if (missing.length > 0) parts.push(`missing ${missing.map((id) => `'${id}'`).join(", ")}`);
31
+ if (extra.length > 0) parts.push(`extra ${extra.map((id) => `'${id}'`).join(", ")}`);
32
+ problems.push(` ${m.locale}: ${parts.join("; ")}`);
33
+ }
34
+ }
35
+ if (problems.length > 0) throw new ParityError(`locale parity mismatch across ${manifests.length} locales:\n${problems.join("\n")}`);
36
+ }
37
+ var LocalizationError = class extends Error {
38
+ constructor(message) {
39
+ super(message);
40
+ this.name = "LocalizationError";
41
+ }
42
+ };
43
+ /** The node-id of a track target ('<nodeId>/<prop.path>' → '<nodeId>'). */
44
+ function nodeIdOf(target) {
45
+ const slash = target.indexOf("/");
46
+ return slash >= 0 ? target.slice(0, slash) : target;
47
+ }
48
+ /**
49
+ * Resolve a timeline document against a message `table`, returning a NEW doc
50
+ * (the input is never mutated). For every STRING track whose target node-id is a
51
+ * key in `table` — caption + narration-derived text tracks live in the doc as
52
+ * exactly these string tracks — every key's `value` is replaced with the table's
53
+ * localized string. Tracks whose node-id is absent from the table pass through
54
+ * untouched, byte-identical.
55
+ *
56
+ * Pure: no playhead, no time, no filesystem. The base-locale table (or an empty
57
+ * table) leaves the doc structurally identical to the input.
58
+ *
59
+ * FIX 5 (0.14 canary): a table key matching NO consumed id (neither a string-track
60
+ * node-id NOR a `t()` id passed via `opts.consumedIds`) is a stale/typo'd key that
61
+ * would silently never localize anything — so `localize` throws a `LocalizationError`
62
+ * naming every orphaned key (the inverse of `t()`'s hard-fail). A fully-matched
63
+ * table is silent.
64
+ */
65
+ function localize(doc, table, opts) {
66
+ let changed = false;
67
+ const consumed = /* @__PURE__ */ new Set();
68
+ const tracks = doc.tracks.map((tr) => {
69
+ if (tr.type !== "string") return tr;
70
+ const id = nodeIdOf(tr.target);
71
+ if (!(id in table)) return tr;
72
+ consumed.add(id);
73
+ const localized = table[id];
74
+ changed = true;
75
+ return {
76
+ ...tr,
77
+ keys: tr.keys.map((k) => k.value === localized ? k : {
78
+ ...k,
79
+ value: localized
80
+ })
81
+ };
82
+ });
83
+ const orphans = Object.keys(table).filter((key) => !consumed.has(key) && !(opts.consumedIds?.has(key) ?? false)).sort();
84
+ if (orphans.length > 0) throw new LocalizationError(`message table for locale '${opts.locale}' has ${orphans.length} key(s) that match no node-id and no t() id: ${orphans.map((k) => `'${k}'`).join(", ")} — a stale/typo'd key would silently ship base text. Remove the key, or fix it to match a target id.`);
85
+ if (!changed) return { ...doc };
86
+ return {
87
+ ...doc,
88
+ tracks
89
+ };
90
+ }
91
+ let ambientTable;
92
+ let consumedIds = /* @__PURE__ */ new Set();
93
+ /**
94
+ * Install the ambient message table consulted by `t()`. Called ONCE before
95
+ * scene construction (the render entry injects it from `--locale`). Pass
96
+ * `undefined` to clear it (the base-locale / no-flag path leaves it unset).
97
+ * Resets the consumed-id set (a fresh table = a fresh resolution pass).
98
+ */
99
+ function setMessageTable(table) {
100
+ ambientTable = table;
101
+ consumedIds = /* @__PURE__ */ new Set();
102
+ }
103
+ /** The currently installed ambient message table (undefined when none is set). */
104
+ function getMessageTable() {
105
+ return ambientTable;
106
+ }
107
+ /**
108
+ * The set of ids `t()` has resolved against the ambient table since the last
109
+ * `setMessageTable`. The render entry passes this to `localize` so a key consumed
110
+ * by a free-standing `t()` (which `localize` can't see — it isn't a doc track)
111
+ * isn't reported as an orphaned table key (FIX 5).
112
+ */
113
+ function getConsumedMessageIds() {
114
+ return consumedIds;
115
+ }
116
+ /**
117
+ * Resolve a free-standing message `id` against the ambient table — build-time
118
+ * sugar for static Text-node text (text that is NOT animated by a doc track,
119
+ * so `localize()` can't reach it): `new Text({ text: t('hero.title') })`.
120
+ *
121
+ * HARD-FAILS (throws) on an unknown id, mirroring `require()` — a stale or
122
+ * mistyped id is a build error, never a silent empty string. When NO ambient
123
+ * table is installed (the base / no-flag path), `t(id)` returns `id` verbatim,
124
+ * so an un-localized build renders its keys as authored and stays byte-identical.
125
+ */
126
+ function t(id) {
127
+ if (ambientTable === void 0) return id;
128
+ const value = ambientTable[id];
129
+ if (value !== void 0) consumedIds.add(id);
130
+ if (value === void 0) throw new LocalizationError(`t('${id}'): no message for id '${id}' in the active message table (have: ${Object.keys(ambientTable).map((k) => `'${k}'`).join(", ") || "<empty>"})`);
131
+ return value;
132
+ }
133
+ //#endregion
134
+ export { LocalizationError, ParityError, getConsumedMessageIds, getMessageTable, localize, requireParity, setMessageTable, t };
package/dist/index.d.ts CHANGED
@@ -102,13 +102,19 @@ declare function setScheduler(next?: Scheduler): Scheduler;
102
102
  declare function batch<T>(fn: () => T): T;
103
103
  //#endregion
104
104
  //#region src/vec2Signal.d.ts
105
+ /** A scalar component signal carrying its bind-time type tag (§2.2). */
106
+ type Vec2Component = BindableSignal<number> & {
107
+ readonly expects: ValueTypeId;
108
+ };
105
109
  interface Vec2Signal extends ReadonlySignal<Vec2> {
106
- readonly x: BindableSignal<number>;
107
- readonly y: BindableSignal<number>;
110
+ readonly x: Vec2Component;
111
+ readonly y: Vec2Component;
108
112
  set(value: Vec2): void;
109
113
  /** Bind the compound level; component bindings on .x/.y override per component. */
110
114
  bindSource(fn: () => Vec2): void;
111
115
  unbindSource(): void;
116
+ /** Bind-time guard (§2.2): the compound accepts only a 'vec2' track. */
117
+ readonly expects: ValueTypeId;
112
118
  }
113
119
  declare function vec2Signal(initial: Vec2 | {
114
120
  x: number;
@@ -285,9 +291,33 @@ declare function createPlayhead(initial?: number): Playhead;
285
291
  declare class UnboundTargetError extends Error {
286
292
  constructor(target: string);
287
293
  }
294
+ /**
295
+ * A track's value type doesn't match the shape of the property it targets — the
296
+ * silent-NaN class (§2.2): e.g. a scalar `number` track bound to a `vec2` prop
297
+ * makes the compound a number, its `.x`/`.y` index it to `undefined`, and the
298
+ * node's matrix goes NaN — the node and its subtree vanish. Caught at BIND time
299
+ * (the track's type is known then), the precedent being UnboundTargetError:
300
+ * mismatched binds are build errors, not silent no-ops.
301
+ */
302
+ declare class BindTypeMismatchError extends Error {
303
+ readonly target: string;
304
+ readonly got: ValueTypeId;
305
+ /** The accepted type(s) — a single id, or the set a polymorphic prop (e.g. `fill`: color|paint) admits. */
306
+ readonly expected: ValueTypeId | readonly ValueTypeId[];
307
+ constructor(target: string, got: ValueTypeId, expected: ValueTypeId | readonly ValueTypeId[]);
308
+ }
288
309
  interface BindTarget {
289
310
  bindSource(fn: () => unknown): void;
290
311
  unbindSource(): void;
312
+ /**
313
+ * The value type this target accepts; a track of any other type is a bind
314
+ * error. An ARRAY for a polymorphic prop that admits more than one type
315
+ * (e.g. a Shape `fill` accepts both `color` and `paint`, or a vec2 prop that
316
+ * accepts both `vec2` and `vec2-arc`). UNDEFINED means the target opted OUT
317
+ * of the guard (an untagged custom-node prop — back-compat with 0.13, which
318
+ * had no guard): any track binds without a type check.
319
+ */
320
+ readonly expects: ValueTypeId | readonly ValueTypeId[] | undefined;
291
321
  }
292
322
  /** Analytic value/velocity access to one bound target (v2 addendum §B.6). */
293
323
  interface CurveSampler {
@@ -360,4 +390,4 @@ interface CheckpointedSim {
360
390
  }
361
391
  declare function bakeCheckpointed<W, S = W>(cfg: CheckpointedBakeConfig<W, S>): CheckpointedSim;
362
392
  //#endregion
363
- export { type AssetRef, type AudioClip, type BakeConfig, BakeError, type BindTarget, type BindableSignal, type BoundTimeline, type CheckpointedBakeConfig, type CheckpointedSim, type ChildEntry, CircularDependencyError, ColorParseError, type ColorStop, type CompiledTimeline, type CoverageReport, type CurveSampler, DEFAULT_EASE, type DevWarning, type EaseSpec, type EasingFn, type Equals, type FontFaceRef, type FontMode, type FontRegistry, type FontUsage, FontValidationError, type GainEnvelope, type GradientInterpolation, type HandoffKind, type Json, type Key, type KeyOpts, type Marker, type MergeResult, type MeshInterpolation, type MeshPaint, type MeshPoint, type MissingGlyphs, type OkLab, type OrphanReason, type Paint, type PathContour, type PathValue, type Playhead, type Position, PositionError, type ReadonlySignal, type ResolvedFace, type RetargetSpring, type Rgba, type Rng, type Scheduler, type SidecarDoc, type SidecarDocV1, type SidecarOrphan, type SidecarTimelineEntry, type SidecarTrackEntry, SidecarVersionError, type Signal, type SignalOptions, type SpringConfig, type SpringEase, TARGET_PATH, type TargetCarrier, type Timeline, type TimelineBuilder, type TimelineInit, TimelineValidationError, type Track, TrackValidationError, type TweenOpts, type TweenTarget, UnboundTargetError, UnknownEasingError, UnknownValueTypeError, UnresolvableTargetError, type ValidateFontsOptions, type ValueType, type ValueTypeId, ValueTypeInferenceError, type Vec2, type Vec2Signal, WriteDuringEvaluationError, assignKeyIds, audioOffsetSamples, bake, bakeCheckpointed, batch, beginReadPhase, bindTimeline, booleanType, buildFontRegistry, buildTimeline, colorType, compileTimeline, computed, createPlayhead, cubicBezier, cubicBezierDerivative, deleteSidecarTrack, easingDerivatives, easings, emitDevWarning, emptySidecar, endReadPhase, evaluateAt, formatColor, getTimelineCallbacks, getValueType, hashKeys, inReadPhase, inferValueType, isDurationEditable, isEditableNodeId, isExemptFamily, key, lerpColor, mergeSidecar, mergeSidecarDetailed, migrateSidecar, namedEasing, normalizeEditedKeys, numberType, oklabToRgba, paintType, parseCmap, parseColor, pathType, random, registerValueType, resolveEase, resolveEaseDerivative, resolveTweenTarget, rgbaToOklab, sampleTrack, setDevWarning, setScheduler, setSidecarTrack, signal, spring, springEasing, springEasingDerivative, springPresets, springTo, stagger, stringType, synchronousScheduler, targetNodeId, timeline, track, untracked, validateFonts, validateTrack, vec2ArcType, vec2Equals, vec2Signal, vec2Type, velocityAt };
393
+ export { type AssetRef, type AudioClip, type BakeConfig, BakeError, type BindTarget, BindTypeMismatchError, type BindableSignal, type BoundTimeline, type CheckpointedBakeConfig, type CheckpointedSim, type ChildEntry, CircularDependencyError, ColorParseError, type ColorStop, type CompiledTimeline, type CoverageReport, type CurveSampler, DEFAULT_EASE, type DevWarning, type EaseSpec, type EasingFn, type Equals, type FontFaceRef, type FontMode, type FontRegistry, type FontUsage, FontValidationError, type GainEnvelope, type GradientInterpolation, type HandoffKind, type Json, type Key, type KeyOpts, type Marker, type MergeResult, type MeshInterpolation, type MeshPaint, type MeshPoint, type MissingGlyphs, type OkLab, type OrphanReason, type Paint, type PathContour, type PathValue, type Playhead, type Position, PositionError, type ReadonlySignal, type ResolvedFace, type RetargetSpring, type Rgba, type Rng, type Scheduler, type SidecarDoc, type SidecarDocV1, type SidecarOrphan, type SidecarTimelineEntry, type SidecarTrackEntry, SidecarVersionError, type Signal, type SignalOptions, type SpringConfig, type SpringEase, TARGET_PATH, type TargetCarrier, type Timeline, type TimelineBuilder, type TimelineInit, TimelineValidationError, type Track, TrackValidationError, type TweenOpts, type TweenTarget, UnboundTargetError, UnknownEasingError, UnknownValueTypeError, UnresolvableTargetError, type ValidateFontsOptions, type ValueType, type ValueTypeId, ValueTypeInferenceError, type Vec2, type Vec2Component, type Vec2Signal, WriteDuringEvaluationError, assignKeyIds, audioOffsetSamples, bake, bakeCheckpointed, batch, beginReadPhase, bindTimeline, booleanType, buildFontRegistry, buildTimeline, colorType, compileTimeline, computed, createPlayhead, cubicBezier, cubicBezierDerivative, deleteSidecarTrack, easingDerivatives, easings, emitDevWarning, emptySidecar, endReadPhase, evaluateAt, formatColor, getTimelineCallbacks, getValueType, hashKeys, inReadPhase, inferValueType, isDurationEditable, isEditableNodeId, isExemptFamily, key, lerpColor, mergeSidecar, mergeSidecarDetailed, migrateSidecar, namedEasing, normalizeEditedKeys, numberType, oklabToRgba, paintType, parseCmap, parseColor, pathType, random, registerValueType, resolveEase, resolveEaseDerivative, resolveTweenTarget, rgbaToOklab, sampleTrack, setDevWarning, setScheduler, setSidecarTrack, signal, spring, springEasing, springEasingDerivative, springPresets, springTo, stagger, stringType, synchronousScheduler, targetNodeId, timeline, track, untracked, validateFonts, validateTrack, vec2ArcType, vec2Equals, vec2Signal, vec2Type, velocityAt };
package/dist/index.js CHANGED
@@ -348,6 +348,8 @@ function vec2Signal(initial) {
348
348
  const [ix, iy] = Array.isArray(initial) ? initial : [initial.x, initial.y];
349
349
  const x = signal(ix);
350
350
  const y = signal(iy);
351
+ x.expects = "number";
352
+ y.expects = "number";
351
353
  const compound = signal(null, { equals: (a, b) => a === null || b === null ? a === b : a[0] === b[0] && a[1] === b[1] });
352
354
  const baseX = signal(ix);
353
355
  const baseY = signal(iy);
@@ -373,6 +375,7 @@ function vec2Signal(initial) {
373
375
  compound.unbindSource();
374
376
  compound.set(null);
375
377
  };
378
+ sig["expects"] = "vec2";
376
379
  Object.defineProperty(sig, "x", {
377
380
  value: x,
378
381
  enumerable: true
@@ -815,6 +818,30 @@ var UnboundTargetError = class extends Error {
815
818
  }
816
819
  };
817
820
  /**
821
+ * A track's value type doesn't match the shape of the property it targets — the
822
+ * silent-NaN class (§2.2): e.g. a scalar `number` track bound to a `vec2` prop
823
+ * makes the compound a number, its `.x`/`.y` index it to `undefined`, and the
824
+ * node's matrix goes NaN — the node and its subtree vanish. Caught at BIND time
825
+ * (the track's type is known then), the precedent being UnboundTargetError:
826
+ * mismatched binds are build errors, not silent no-ops.
827
+ */
828
+ var BindTypeMismatchError = class extends Error {
829
+ target;
830
+ got;
831
+ /** The accepted type(s) — a single id, or the set a polymorphic prop (e.g. `fill`: color|paint) admits. */
832
+ expected;
833
+ constructor(target, got, expected) {
834
+ const prop = target.slice(target.lastIndexOf("/") + 1);
835
+ const want = [expected].flat();
836
+ const hint = got === "number" && want.includes("vec2") ? `; target '${prop}.x'/'${prop}.y' or author a vec2 track` : "";
837
+ super(`track '${target}' is '${got}' but '${prop}' expects '${want.join("'|'")}' (would silently NaN evaluation)${hint}`);
838
+ this.target = target;
839
+ this.got = got;
840
+ this.name = "BindTypeMismatchError";
841
+ this.expected = expected;
842
+ }
843
+ };
844
+ /**
818
845
  * Bind a compiled timeline's tracks to property signals. `resolve` returns
819
846
  * the signal for a target path, or undefined — which is a compile-time-style
820
847
  * error (§2.2: unbound tracks are build errors, not silent no-ops).
@@ -825,6 +852,11 @@ function bindTimeline(compiled, resolve, playhead = createPlayhead()) {
825
852
  for (const [target, tr] of compiled.tracks) {
826
853
  const sig = resolve(target);
827
854
  if (!sig) throw new UnboundTargetError(target);
855
+ const got = tr.type;
856
+ const expects = sig.expects;
857
+ if (expects !== void 0) {
858
+ if (!(Array.isArray(expects) ? expects.includes(got) : got === expects)) throw new BindTypeMismatchError(target, got, expects);
859
+ }
828
860
  sig.bindSource(() => sampleTrack(tr, playhead()));
829
861
  bound.push(sig);
830
862
  samplers.set(target, {
@@ -974,4 +1006,4 @@ function bakeCheckpointed(cfg) {
974
1006
  };
975
1007
  }
976
1008
  //#endregion
977
- export { BakeError, CircularDependencyError, ColorParseError, DEFAULT_EASE, FontValidationError, PositionError, SidecarVersionError, TARGET_PATH, TimelineValidationError, TrackValidationError, UnboundTargetError, UnknownEasingError, UnknownValueTypeError, UnresolvableTargetError, ValueTypeInferenceError, WriteDuringEvaluationError, assignKeyIds, audioOffsetSamples, bake, bakeCheckpointed, batch, beginReadPhase, bindTimeline, booleanType, buildFontRegistry, buildTimeline, colorType, compileTimeline, computed, createPlayhead, cubicBezier, cubicBezierDerivative, deleteSidecarTrack, easingDerivatives, easings, emitDevWarning, emptySidecar, endReadPhase, evaluateAt, formatColor, getTimelineCallbacks, getValueType, hashKeys, inReadPhase, inferValueType, isDurationEditable, isEditableNodeId, isExemptFamily, key, lerpColor, mergeSidecar, mergeSidecarDetailed, migrateSidecar, namedEasing, normalizeEditedKeys, numberType, oklabToRgba, paintType, parseCmap, parseColor, pathType, random, registerValueType, resolveEase, resolveEaseDerivative, resolveTweenTarget, rgbaToOklab, sampleTrack, setDevWarning, setScheduler, setSidecarTrack, signal, spring, springEasing, springEasingDerivative, springPresets, springTo, stagger, stringType, synchronousScheduler, targetNodeId, timeline, track, untracked, validateFonts, validateTrack, vec2ArcType, vec2Equals, vec2Signal, vec2Type, velocityAt };
1009
+ export { BakeError, BindTypeMismatchError, CircularDependencyError, ColorParseError, DEFAULT_EASE, FontValidationError, PositionError, SidecarVersionError, TARGET_PATH, TimelineValidationError, TrackValidationError, UnboundTargetError, UnknownEasingError, UnknownValueTypeError, UnresolvableTargetError, ValueTypeInferenceError, WriteDuringEvaluationError, assignKeyIds, audioOffsetSamples, bake, bakeCheckpointed, batch, beginReadPhase, bindTimeline, booleanType, buildFontRegistry, buildTimeline, colorType, compileTimeline, computed, createPlayhead, cubicBezier, cubicBezierDerivative, deleteSidecarTrack, easingDerivatives, easings, emitDevWarning, emptySidecar, endReadPhase, evaluateAt, formatColor, getTimelineCallbacks, getValueType, hashKeys, inReadPhase, inferValueType, isDurationEditable, isEditableNodeId, isExemptFamily, key, lerpColor, mergeSidecar, mergeSidecarDetailed, migrateSidecar, namedEasing, normalizeEditedKeys, numberType, oklabToRgba, paintType, parseCmap, parseColor, pathType, random, registerValueType, resolveEase, resolveEaseDerivative, resolveTweenTarget, rgbaToOklab, sampleTrack, setDevWarning, setScheduler, setSidecarTrack, signal, spring, springEasing, springEasingDerivative, springPresets, springTo, stagger, stringType, synchronousScheduler, targetNodeId, timeline, track, untracked, validateFonts, validateTrack, vec2ArcType, vec2Equals, vec2Signal, vec2Type, velocityAt };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glissade/core",
3
- "version": "0.13.0",
3
+ "version": "0.14.0-pre.1",
4
4
  "description": "glissade core: signals, tracks, timeline document, evaluation, easing, springs, seeded RNG. Zero DOM/Node dependencies.",
5
5
  "license": "Apache-2.0",
6
6
  "engines": {
@@ -21,6 +21,10 @@
21
21
  "types": "./dist/clips.d.ts",
22
22
  "default": "./dist/clips.js"
23
23
  },
24
+ "./i18n": {
25
+ "types": "./dist/i18n.d.ts",
26
+ "default": "./dist/i18n.js"
27
+ },
24
28
  "./font-ingest": {
25
29
  "types": "./dist/font-ingest.d.ts",
26
30
  "default": "./dist/font-ingest.js"