@pixodesk/svg-animator-web 1.0.10 → 1.0.15

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.cts CHANGED
@@ -1,224 +1,2778 @@
1
+ /**
2
+ * Lightweight Zod-like schema system — type declaration + runtime sanitization.
3
+ *
4
+ * Two operations per schema:
5
+ * isValid(raw) — true only when raw already conforms; no repair needed.
6
+ * sanitize(raw) — always returns T; fixes or replaces invalid input with defaults.
7
+ *
8
+ * Field rules inside px.object():
9
+ * required field → if absent/invalid, field's declared default is used.
10
+ * optional field → if absent/invalid (or wrong JS type), field becomes undefined.
11
+ *
12
+ * Array: items that cannot even be attempted are filtered out.
13
+ * Record: values that cannot even be attempted are dropped.
14
+ *
15
+ * The distinction between isValid and _canSanitize:
16
+ * isValid — strict; ALL fields must be correct, no repairs accepted.
17
+ * _canSanitize — permissive; "is the JS type right enough to attempt repair?"
18
+ * For containers (object/array/record) this is a structural check
19
+ * so that partially-valid nested objects are sanitized rather than dropped.
20
+ * For primitives it equals isValid (a wrong primitive type is unrecoverable).
21
+ *
22
+ * Validation context (optional):
23
+ * Pass a PxValidationContext as the second arg to isValid() to collect per-field
24
+ * error and warning messages with their dot-paths.
25
+ * e.g. schema.isValid(raw, ctx, []) where ctx = { errors: [], warnings: [] }
26
+ * Path segments are pushed/popped during recursion; join with '.' only when reporting.
27
+ */
28
+ /** Collects structured validation feedback. Pass to isValid() as the second argument. */
29
+ interface PxValidationContext {
30
+ /** Per-field errors — each entry is "<dot.path>: <reason>". */
31
+ errors: Array<string>;
32
+ /** Per-field warnings — same format as errors but non-fatal. */
33
+ warnings: Array<string>;
34
+ /**
35
+ * When true, closed objects (`px.object` / `px.extendedObject`) report any
36
+ * extra (undeclared) keys as errors. Default `false` (or omitted) — extras
37
+ * are ignored, matching `sanitize`'s strip-extras behaviour, which is what
38
+ * production app code wants (forward-compat with unknown future fields).
39
+ * Tests that want to lock the wire shape down to its declared schema
40
+ * should pass `strict: true`.
41
+ *
42
+ * Open objects (`px.openObject`) are unaffected by `strict` — they accept
43
+ * extras by design (used for SVG element nodes that carry arbitrary attrs).
44
+ */
45
+ strict?: boolean;
46
+ }
47
+ interface PxSchema<T, IsOptional extends boolean = false> {
48
+ /** Phantom discriminator — `false` for required schemas, `true` for optional. Used by InferShape. */
49
+ readonly _optional: IsOptional;
50
+ sanitize(raw: unknown): T;
51
+ /**
52
+ * Returns true when raw already conforms to this schema.
53
+ * Pass an optional PxValidationContext to collect per-field error messages.
54
+ * Pass a mutable Array<string> as `path` — segments are pushed/popped during
55
+ * recursion so only a single array allocation is needed per validation call.
56
+ */
57
+ isValid(raw: unknown, ctx?: PxValidationContext, path?: Array<string>): boolean;
58
+ /** True if raw has the right structure to attempt sanitization (may still need repair). */
59
+ _canSanitize(raw: unknown): boolean;
60
+ readonly _default: T;
61
+ /** Returns a new schema that marks this field as optional (?: in object shapes). */
62
+ optional(): PxSchema<T | undefined, true>;
63
+ }
64
+ /** Extract the TypeScript type from a schema. */
65
+ type PxInfer<S> = S extends PxSchema<infer T, any> ? T : never;
66
+ /**
67
+ * Removes string/number index signatures from T, leaving only explicitly named properties.
68
+ * Useful for strict property-access checking on types that have an open `[key: string]: any`.
69
+ *
70
+ * @example
71
+ * type Strict = RemoveIndex<PxAnimatedSvgDocument>;
72
+ * Strict['animator'] // PxAnimatorConfig | undefined ✓
73
+ * Strict['anything'] // compile error ✓
74
+ */
75
+ type RemoveIndex<T> = {
76
+ [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
77
+ };
78
+ type UnionMembers<T extends ReadonlyArray<PxSchema<any, any>>> = T extends ReadonlyArray<PxSchema<infer U, any>> ? U : never;
79
+ type AnyShape = Record<string, PxSchema<any, any>>;
80
+ type InferShape<S extends AnyShape> = {
81
+ [K in keyof S as S[K] extends PxSchema<any, true> ? never : K]: PxInfer<S[K]>;
82
+ } & {
83
+ [K in keyof S as S[K] extends PxSchema<any, true> ? K : never]?: Exclude<PxInfer<S[K]>, undefined>;
84
+ };
85
+ type InferOpenShape<S extends AnyShape, _V = any> = InferShape<S> & {
86
+ [key: string]: any;
87
+ };
88
+ type TupleItems<T extends ReadonlyArray<PxSchema<any, any>>> = {
89
+ -readonly [K in keyof T]: T[K] extends PxSchema<infer U, any> ? U : never;
90
+ };
91
+ /**
92
+ * Evaluates to `true` when A and B have exactly the same set of keys; `false` otherwise.
93
+ * Use with a `const` assertion to get a compile-time error on key renames:
94
+ * ```ts
95
+ * const _ck: KeysMatch<PxFoo, _PxFoo> = true;
96
+ * ```
97
+ */
98
+ type KeysMatch<A, B> = [
99
+ Exclude<keyof A, keyof B>
100
+ ] extends [never] ? [Exclude<keyof B, keyof A>] extends [never] ? true : false : false;
101
+ /**
102
+ * Builds a `{ key: 'key', ... }` object from a schema's shape.
103
+ * Each value is typed as the literal key name, so `schemaKeys(PxFooSchema).bar`
104
+ * is typed as `'bar'` — use in @serializable calls to get a compile-time error
105
+ * if the field is renamed in the schema.
106
+ */
107
+ declare function schemaKeys<S extends {
108
+ readonly _shape: Record<string, any>;
109
+ }>(schema: S): { [K in keyof S["_shape"]]: K; };
110
+ /**
111
+ * Describes the structural kind of a schema for traversal purposes.
112
+ * Use with `getMissingCoveragePaths` or similar tree-walking utilities.
113
+ *
114
+ * - `shape` — object schema (Obj/OpenObj); `shape` maps key → sub-schema
115
+ * - `array` — array schema; `item` is the element schema
116
+ * - `optional` — optional wrapper; `inner` is the wrapped schema
117
+ * - `lazy` — lazy/recursive schema; `resolved` is the resolved schema (cached)
118
+ * - `leaf` — primitive, union, record, any, tuple — no traversable children
119
+ */
120
+ type PxSchemaDesc = {
121
+ kind: 'shape';
122
+ shape: Record<string, PxSchema<any, any>>;
123
+ } | {
124
+ kind: 'array';
125
+ item: PxSchema<any, any>;
126
+ } | {
127
+ kind: 'optional';
128
+ inner: PxSchema<any, any>;
129
+ } | {
130
+ kind: 'lazy';
131
+ resolved: PxSchema<any, any>;
132
+ } | {
133
+ kind: 'leaf';
134
+ };
135
+ declare function describeSchema(schema: PxSchema<any, any>): PxSchemaDesc;
136
+ declare const px: {
137
+ /** Matches a string. Default: '' or provided value. */
138
+ readonly string: (defaultVal?: string) => PxSchema<string>;
139
+ /** Matches a finite number. Default: 0 or provided value. */
140
+ readonly number: (defaultVal?: number) => PxSchema<number>;
141
+ /** Matches a boolean. Default: false or provided value. */
142
+ readonly boolean: (defaultVal?: boolean) => PxSchema<boolean>;
143
+ /** Matches one exact primitive value; its default is the value itself. */
144
+ readonly literal: <T extends string | number | boolean>(value: T) => PxSchema<T>;
145
+ /** Matches one of a fixed set of string/number values. Default: first value. */
146
+ readonly enum: <T extends string | number>(values: readonly T[], defaultVal?: T) => PxSchema<T>;
147
+ /**
148
+ * Returns the first schema whose isValid passes.
149
+ * TypeScript infers the union of all member types automatically.
150
+ */
151
+ readonly union: <T extends ReadonlyArray<PxSchema<any, any>>>(schemas: T, defaultVal?: UnionMembers<T>) => PxSchema<UnionMembers<T>>;
152
+ /**
153
+ * Discriminated union — reads `raw[key]`, finds the member schema whose
154
+ * literal at `key` matches, then delegates sanitize/isValid to that member.
155
+ * Each member must be an object schema with a `px.literal(...)` at `key`.
156
+ * TypeScript infers the union of all member types automatically.
157
+ */
158
+ readonly discriminatedUnion: <K extends string, T extends ReadonlyArray<PxSchema<any, any> & {
159
+ readonly _shape: Record<K, PxSchema<string | number | boolean, any>>;
160
+ }>>(key: K, schemas: T) => PxSchema<UnionMembers<T>>;
161
+ /** Typed object — unknown keys are stripped. Required fields fall back to their default. */
162
+ readonly object: <S extends AnyShape>(shape: S) => PxSchema<InferShape<S>> & {
163
+ readonly _shape: S;
164
+ };
165
+ /**
166
+ * Open object — validates known keys; passes unknown keys through as-is,
167
+ * or validates/sanitizes them against `openSchema` when provided.
168
+ */
169
+ readonly openObject: <S extends AnyShape, V = any>(shape: S, openSchema?: PxSchema<V>) => PxSchema<InferOpenShape<S, V>> & {
170
+ readonly _shape: S;
171
+ };
172
+ /**
173
+ * Creates a new closed object schema by merging a base schema's shape with additional fields.
174
+ * The base can be the result of px.object() or px.openObject() — anything with a _shape property.
175
+ *
176
+ * @example
177
+ * const PxSvgNodeSchema = px.extendedObject(PxNodeBase, { width: px.number().optional() });
178
+ */
179
+ readonly extendedObject: <B extends AnyShape, E extends AnyShape>(base: {
180
+ readonly _shape: B;
181
+ }, extra: E) => PxSchema<InferShape<B & E>> & {
182
+ readonly _shape: B & E;
183
+ };
184
+ /** Array whose unrecoverable items are filtered out. Default: []. */
185
+ readonly array: <T>(item: PxSchema<T>) => PxSchema<Array<T>>;
186
+ /** String-keyed record whose unrecoverable values are dropped. Default: {}. */
187
+ readonly record: <T>(value: PxSchema<T>) => PxSchema<Record<string, T>>;
188
+ /** Passes anything through unchanged — always valid. */
189
+ readonly any: () => PxSchema<any>;
190
+ /** Fixed-length tuple — validates element count and each position individually. */
191
+ readonly tuple: <T extends ReadonlyArray<PxSchema<any, any>>>(schemas: T) => PxSchema<TupleItems<T>>;
192
+ /** Defers schema creation — required for recursive types. Must supply a default value. */
193
+ readonly lazy: <T>(fn: () => PxSchema<T>, defaultVal: T) => PxSchema<T>;
194
+ };
195
+
1
196
  type FillMode = 'forwards' | 'backwards' | 'both' | 'none';
2
197
  type PlaybackDirection = 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
3
198
  declare const PX_ANIM_SRC_ATTR_NAME = "data-px-animation-src";
4
199
  declare const PX_ANIM_ATTR_NAME = "_px_animator";
5
200
  type StartOn = 'load' | 'mouseOver' | 'click' | 'scrollIntoView';
6
- type StartOnExtra = StartOn | 'programmatic';
7
201
  type OutAction = 'continue' | 'pause' | 'reset' | 'reverse';
8
202
  type JsMode = "auto" | "webapi" | "frames";
9
203
  /**
10
204
  * Easing function definition.
11
205
  * Can be a named reference to a predefined easing or a cubic-bezier array [x1, y1, x2, y2].
12
206
  *
13
- * @example "ease-in" | "easeOut" | [0.68, -0.55, 0.265, 1.55]
14
- */
15
- type PxEasingOrRef = string | [number, number, number, number];
16
- /**
17
- * A single animation keyframe defining the state at a specific point in time.
18
- * Supports both full property names and short aliases for compact notation.
207
+ * @example "ease-in" | [0.68, -0.55, 0.265, 1.55]
208
+ *
209
+ * `string | [x1, y1, x2, y2]`
19
210
  */
20
- interface PxKeyframe {
21
- /** Timestamp in milliseconds from animation start */
22
- time?: number;
23
- /** Short alias for "time" */
24
- t?: number;
25
- /** The value of the animated property at this keyframe */
211
+ declare const PxEasingOrRefSchema: PxSchema<string | [number, number, number, number], false>;
212
+ declare const PxKeyframeSchema: PxSchema<{} & {
213
+ time?: number | undefined;
214
+ t?: number | undefined;
26
215
  value?: any;
27
- /** Short alias for "value" */
28
216
  v?: any;
29
- /** Easing function to use when transitioning to this keyframe from the previous one */
30
- easing?: PxEasingOrRef;
31
- /** Short alias for "easing" */
32
- e?: PxEasingOrRef;
33
- }
217
+ easing?: string | [number, number, number, number] | undefined;
218
+ e?: string | [number, number, number, number] | undefined;
219
+ tangentOut?: [number, number] | undefined;
220
+ to?: [number, number] | undefined;
221
+ tangentIn?: [number, number] | undefined;
222
+ ti?: [number, number] | undefined;
223
+ selected?: boolean | undefined;
224
+ }, false> & {
225
+ readonly _shape: {
226
+ time: PxSchema<number | undefined, true>;
227
+ t: PxSchema<number | undefined, true>;
228
+ value: PxSchema<any, true>;
229
+ v: PxSchema<any, true>;
230
+ easing: PxSchema<string | [number, number, number, number] | undefined, true>;
231
+ e: PxSchema<string | [number, number, number, number] | undefined, true>;
232
+ tangentOut: PxSchema<[number, number] | undefined, true>;
233
+ to: PxSchema<[number, number] | undefined, true>;
234
+ tangentIn: PxSchema<[number, number] | undefined, true>;
235
+ ti: PxSchema<[number, number] | undefined, true>;
236
+ selected: PxSchema<boolean | undefined, true>;
237
+ };
238
+ };
239
+ /** A single animation keyframe defining the state at a specific point in time. */
240
+ type PxKeyframe$1 = PxInfer<typeof PxKeyframeSchema>;
241
+ declare const PxLoopSchema: PxSchema<{} & {
242
+ segmentCount?: number | undefined;
243
+ before?: boolean | undefined;
244
+ alternate?: boolean | undefined;
245
+ }, false> & {
246
+ readonly _shape: {
247
+ segmentCount: PxSchema<number | undefined, true>;
248
+ before: PxSchema<boolean | undefined, true>;
249
+ alternate: PxSchema<boolean | undefined, true>;
250
+ };
251
+ };
252
+ declare const PxPropertyAnimationSchema: PxSchema<{} & {
253
+ keyframes?: ({} & {
254
+ time?: number | undefined;
255
+ t?: number | undefined;
256
+ value?: any;
257
+ v?: any;
258
+ easing?: string | [number, number, number, number] | undefined;
259
+ e?: string | [number, number, number, number] | undefined;
260
+ tangentOut?: [number, number] | undefined;
261
+ to?: [number, number] | undefined;
262
+ tangentIn?: [number, number] | undefined;
263
+ ti?: [number, number] | undefined;
264
+ selected?: boolean | undefined;
265
+ })[] | undefined;
266
+ kfs?: ({} & {
267
+ time?: number | undefined;
268
+ t?: number | undefined;
269
+ value?: any;
270
+ v?: any;
271
+ easing?: string | [number, number, number, number] | undefined;
272
+ e?: string | [number, number, number, number] | undefined;
273
+ tangentOut?: [number, number] | undefined;
274
+ to?: [number, number] | undefined;
275
+ tangentIn?: [number, number] | undefined;
276
+ ti?: [number, number] | undefined;
277
+ selected?: boolean | undefined;
278
+ })[] | undefined;
279
+ loop?: boolean | ({} & {
280
+ segmentCount?: number | undefined;
281
+ before?: boolean | undefined;
282
+ alternate?: boolean | undefined;
283
+ }) | undefined;
284
+ autoOrient?: boolean | undefined;
285
+ }, false> & {
286
+ readonly _shape: {
287
+ keyframes: PxSchema<({} & {
288
+ time?: number | undefined;
289
+ t?: number | undefined;
290
+ value?: any;
291
+ v?: any;
292
+ easing?: string | [number, number, number, number] | undefined;
293
+ e?: string | [number, number, number, number] | undefined;
294
+ tangentOut?: [number, number] | undefined;
295
+ to?: [number, number] | undefined;
296
+ tangentIn?: [number, number] | undefined;
297
+ ti?: [number, number] | undefined;
298
+ selected?: boolean | undefined;
299
+ })[] | undefined, true>;
300
+ kfs: PxSchema<({} & {
301
+ time?: number | undefined;
302
+ t?: number | undefined;
303
+ value?: any;
304
+ v?: any;
305
+ easing?: string | [number, number, number, number] | undefined;
306
+ e?: string | [number, number, number, number] | undefined;
307
+ tangentOut?: [number, number] | undefined;
308
+ to?: [number, number] | undefined;
309
+ tangentIn?: [number, number] | undefined;
310
+ ti?: [number, number] | undefined;
311
+ selected?: boolean | undefined;
312
+ })[] | undefined, true>;
313
+ loop: PxSchema<boolean | ({} & {
314
+ segmentCount?: number | undefined;
315
+ before?: boolean | undefined;
316
+ alternate?: boolean | undefined;
317
+ }) | undefined, true>;
318
+ autoOrient: PxSchema<boolean | undefined, true>;
319
+ };
320
+ };
321
+ /** Animation definition for a single CSS/SVG property. */
322
+ type PxPropertyAnimation = PxInfer<typeof PxPropertyAnimationSchema>;
34
323
  /**
35
- * Defines how a property's keyframe animation is extended beyond its defined keyframe range
36
- * by continuously repeating a chosen segment of the sequence.
37
- *
38
- * The repeated segment is a contiguous run of keyframe *intervals* (gaps between consecutive
39
- * keyframes). Which end of the sequence is repeated is controlled by `before`, and whether
40
- * each repetition plays in the same direction or alternates is controlled by `alternate`.
324
+ * Names of the transform parts that can appear inside a transform value record.
325
+ * The unified `transform` slot replaces the earlier per-part top-level keys
326
+ * (`translate`, `rotate`, `scale`, `origin`) — those names now live as keys
327
+ * inside a `PxTransformParts` record.
41
328
  */
42
- interface PxLoop {
43
- /**
44
- * Number of keyframe intervals (gaps between consecutive keyframes) that form the repeating
45
- * segment.
46
- *
47
- * - `undefined` → the entire keyframe sequence is used as the loop segment.
48
- * - `N` → only the first `N` intervals (when `before: true`) or the last `N` intervals
49
- * (when `before: false`) are looped. Clamped to `[1, keyframes.length - 1]`.
50
- */
51
- segmentCount?: number;
52
- /**
53
- * Selects which end of the keyframe sequence is looped.
54
- *
55
- * - `true` → the source segment is taken from the *start* of the keyframe sequence.
56
- * The animation is extended *before* the first keyframe — useful for intro loops
57
- * that run before the main timeline begins.
58
- *
59
- * - `false` (default) → the source segment is taken from the *end* of the keyframe sequence.
60
- * The animation is extended *after* the last keyframe — useful for idle or outro
61
- * loops that continue once the main timeline has finished.
62
- */
63
- before?: boolean;
64
- /**
65
- * Controls playback direction on each successive loop iteration.
66
- *
67
- * - `false` (default) → **cycle**: every iteration replays the segment in the same direction.
68
- *
69
- * - `true` → **pingpong**: iterations alternate between forward and backward playback
70
- * (even iterations play forward, odd iterations play in reverse).
71
- */
72
- alternate?: boolean;
73
- }
329
+ declare const PX_TRANSFORM_PART_KEYS: readonly ["translate", "rotate", "scale", "origin"];
330
+ /** One of the transform-part key strings. */
331
+ type PxTransformPartKey = typeof PX_TRANSFORM_PART_KEYS[number];
332
+ declare const PxTransformPartsSchema: PxSchema<{} & {
333
+ translate?: [number, number] | undefined;
334
+ rotate?: number | undefined;
335
+ scale?: [number, number] | undefined;
336
+ origin?: [number, number] | undefined;
337
+ }, false> & {
338
+ readonly _shape: {
339
+ translate: PxSchema<[number, number] | undefined, true>;
340
+ rotate: PxSchema<number | undefined, true>;
341
+ scale: PxSchema<[number, number] | undefined, true>;
342
+ origin: PxSchema<[number, number] | undefined, true>;
343
+ };
344
+ };
345
+ /** Record of transform parts forming a single transform `value`. */
346
+ type PxTransformParts = PxInfer<typeof PxTransformPartsSchema>;
74
347
  /**
75
- * Animation definition for a single CSS/SVG property.
76
- * Contains an array of keyframes that define how the property changes over time.
77
- */
78
- interface PxPropertyAnimation {
79
- /** Array of keyframes defining the animation timeline */
80
- keyframes?: PxKeyframe[];
81
- /** Short alias for "keyframes" */
82
- kfs?: PxKeyframe[];
83
- /** Optional loop configuration. When set, the keyframe sequence is extended beyond its defined
84
- * range by repeating a chosen segment. See {@link PxLoop} for details. */
85
- loop?: PxLoop | boolean;
86
- }
348
+ * Unified `transform` slot value. Three valid shapes:
349
+ *
350
+ * - **SVG transform string** — `"translate(10,10)rotate(45)scale(2,2)"`. What
351
+ * plain renderers consume directly.
352
+ * - **Structured static** — `{value: PxTransformParts}`. Parametric record;
353
+ * parts stay independently addressable.
354
+ * - **Animated** — `{keyframes: [{time, value: PxTransformParts, …}, …]}`.
355
+ * Each keyframe's `value` is a parts record. The interpolator composes the
356
+ * parts into a single transform string per frame.
357
+ *
358
+ * Replaces the earlier convention of putting each animated transform part
359
+ * under its own top-level attribute name (`translate`, `rotate`, `scale`,
360
+ * `origin`).
361
+ */
362
+ declare const PxTransformValueSchema: PxSchema<string | ({} & {
363
+ keyframes?: ({} & {
364
+ time?: number | undefined;
365
+ t?: number | undefined;
366
+ value?: any;
367
+ v?: any;
368
+ easing?: string | [number, number, number, number] | undefined;
369
+ e?: string | [number, number, number, number] | undefined;
370
+ tangentOut?: [number, number] | undefined;
371
+ to?: [number, number] | undefined;
372
+ tangentIn?: [number, number] | undefined;
373
+ ti?: [number, number] | undefined;
374
+ selected?: boolean | undefined;
375
+ })[] | undefined;
376
+ kfs?: ({} & {
377
+ time?: number | undefined;
378
+ t?: number | undefined;
379
+ value?: any;
380
+ v?: any;
381
+ easing?: string | [number, number, number, number] | undefined;
382
+ e?: string | [number, number, number, number] | undefined;
383
+ tangentOut?: [number, number] | undefined;
384
+ to?: [number, number] | undefined;
385
+ tangentIn?: [number, number] | undefined;
386
+ ti?: [number, number] | undefined;
387
+ selected?: boolean | undefined;
388
+ })[] | undefined;
389
+ loop?: boolean | ({} & {
390
+ segmentCount?: number | undefined;
391
+ before?: boolean | undefined;
392
+ alternate?: boolean | undefined;
393
+ }) | undefined;
394
+ autoOrient?: boolean | undefined;
395
+ }) | ({
396
+ value: {} & {
397
+ translate?: [number, number] | undefined;
398
+ rotate?: number | undefined;
399
+ scale?: [number, number] | undefined;
400
+ origin?: [number, number] | undefined;
401
+ };
402
+ } & {}), false>;
403
+ /** Unified `transform` slot value: string | structured static | animated. */
404
+ type PxTransformValue = PxInfer<typeof PxTransformValueSchema>;
405
+ declare const PxAnimationDefinitionSchema: PxSchema<Record<string, {} & {
406
+ keyframes?: ({} & {
407
+ time?: number | undefined;
408
+ t?: number | undefined;
409
+ value?: any;
410
+ v?: any;
411
+ easing?: string | [number, number, number, number] | undefined;
412
+ e?: string | [number, number, number, number] | undefined;
413
+ tangentOut?: [number, number] | undefined;
414
+ to?: [number, number] | undefined;
415
+ tangentIn?: [number, number] | undefined;
416
+ ti?: [number, number] | undefined;
417
+ selected?: boolean | undefined;
418
+ })[] | undefined;
419
+ kfs?: ({} & {
420
+ time?: number | undefined;
421
+ t?: number | undefined;
422
+ value?: any;
423
+ v?: any;
424
+ easing?: string | [number, number, number, number] | undefined;
425
+ e?: string | [number, number, number, number] | undefined;
426
+ tangentOut?: [number, number] | undefined;
427
+ to?: [number, number] | undefined;
428
+ tangentIn?: [number, number] | undefined;
429
+ ti?: [number, number] | undefined;
430
+ selected?: boolean | undefined;
431
+ })[] | undefined;
432
+ loop?: boolean | ({} & {
433
+ segmentCount?: number | undefined;
434
+ before?: boolean | undefined;
435
+ alternate?: boolean | undefined;
436
+ }) | undefined;
437
+ autoOrient?: boolean | undefined;
438
+ }>, false>;
87
439
  /**
88
440
  * Complete animation definition containing one or more property animations.
89
441
  * Each key is a CSS/SVG property name (e.g., "opacity", "scale", "rotate").
90
- *
91
- * @example
92
- * {
93
- * "opacity": { keyframes: [...] },
94
- * "scale": { keyframes: [...] }
95
- * }
96
442
  */
97
- interface PxAnimationDefinition {
98
- [property: string]: PxPropertyAnimation;
99
- }
443
+ type PxAnimationDefinition = PxInfer<typeof PxAnimationDefinitionSchema>;
444
+ declare const PxElementAnimationSchema: PxSchema<string | Record<string, {} & {
445
+ keyframes?: ({} & {
446
+ time?: number | undefined;
447
+ t?: number | undefined;
448
+ value?: any;
449
+ v?: any;
450
+ easing?: string | [number, number, number, number] | undefined;
451
+ e?: string | [number, number, number, number] | undefined;
452
+ tangentOut?: [number, number] | undefined;
453
+ to?: [number, number] | undefined;
454
+ tangentIn?: [number, number] | undefined;
455
+ ti?: [number, number] | undefined;
456
+ selected?: boolean | undefined;
457
+ })[] | undefined;
458
+ kfs?: ({} & {
459
+ time?: number | undefined;
460
+ t?: number | undefined;
461
+ value?: any;
462
+ v?: any;
463
+ easing?: string | [number, number, number, number] | undefined;
464
+ e?: string | [number, number, number, number] | undefined;
465
+ tangentOut?: [number, number] | undefined;
466
+ to?: [number, number] | undefined;
467
+ tangentIn?: [number, number] | undefined;
468
+ ti?: [number, number] | undefined;
469
+ selected?: boolean | undefined;
470
+ })[] | undefined;
471
+ loop?: boolean | ({} & {
472
+ segmentCount?: number | undefined;
473
+ before?: boolean | undefined;
474
+ alternate?: boolean | undefined;
475
+ }) | undefined;
476
+ autoOrient?: boolean | undefined;
477
+ }> | (string | Record<string, {} & {
478
+ keyframes?: ({} & {
479
+ time?: number | undefined;
480
+ t?: number | undefined;
481
+ value?: any;
482
+ v?: any;
483
+ easing?: string | [number, number, number, number] | undefined;
484
+ e?: string | [number, number, number, number] | undefined;
485
+ tangentOut?: [number, number] | undefined;
486
+ to?: [number, number] | undefined;
487
+ tangentIn?: [number, number] | undefined;
488
+ ti?: [number, number] | undefined;
489
+ selected?: boolean | undefined;
490
+ })[] | undefined;
491
+ kfs?: ({} & {
492
+ time?: number | undefined;
493
+ t?: number | undefined;
494
+ value?: any;
495
+ v?: any;
496
+ easing?: string | [number, number, number, number] | undefined;
497
+ e?: string | [number, number, number, number] | undefined;
498
+ tangentOut?: [number, number] | undefined;
499
+ to?: [number, number] | undefined;
500
+ tangentIn?: [number, number] | undefined;
501
+ ti?: [number, number] | undefined;
502
+ selected?: boolean | undefined;
503
+ })[] | undefined;
504
+ loop?: boolean | ({} & {
505
+ segmentCount?: number | undefined;
506
+ before?: boolean | undefined;
507
+ alternate?: boolean | undefined;
508
+ }) | undefined;
509
+ autoOrient?: boolean | undefined;
510
+ }>)[], false>;
100
511
  /**
101
- * Defines when and how an animation should be triggered.
512
+ * Element animation specification.
513
+ * Can be a string reference, array of references, inline definition, or a mixed array.
102
514
  */
103
- interface PxTrigger {
104
- /** Event that starts the animation */
105
- startOn?: StartOnExtra;
106
- /** Action to take when the trigger condition is no longer met (e.g., mouse leaves) */
107
- outAction?: 'continue' | 'pause' | 'reset' | 'reverse';
108
- /** Percentage of element visibility required to trigger (0-1). Only applies to scrollIntoView. */
109
- scrollIntoViewThreshold?: number;
110
- }
515
+ type PxElementAnimation = PxInfer<typeof PxElementAnimationSchema>;
516
+ declare const PxTriggerSchema: PxSchema<{} & {
517
+ startOn?: "load" | "mouseOver" | "click" | "scrollIntoView" | "programmatic" | undefined;
518
+ outAction?: "reverse" | "continue" | "pause" | "reset" | undefined;
519
+ scrollIntoViewThreshold?: number | undefined;
520
+ }, false> & {
521
+ readonly _shape: {
522
+ startOn: PxSchema<"load" | "mouseOver" | "click" | "scrollIntoView" | "programmatic" | undefined, true>;
523
+ outAction: PxSchema<"reverse" | "continue" | "pause" | "reset" | undefined, true>;
524
+ scrollIntoViewThreshold: PxSchema<number | undefined, true>;
525
+ };
526
+ };
527
+ /** Defines when and how an animation should be triggered. */
528
+ type PxTrigger = PxInfer<typeof PxTriggerSchema>;
529
+ declare const PxDefsSchema: PxSchema<{} & {
530
+ easings?: Record<string, [number, number, number, number]> | undefined;
531
+ animations?: Record<string, Record<string, {} & {
532
+ keyframes?: ({} & {
533
+ time?: number | undefined;
534
+ t?: number | undefined;
535
+ value?: any;
536
+ v?: any;
537
+ easing?: string | [number, number, number, number] | undefined;
538
+ e?: string | [number, number, number, number] | undefined;
539
+ tangentOut?: [number, number] | undefined;
540
+ to?: [number, number] | undefined;
541
+ tangentIn?: [number, number] | undefined;
542
+ ti?: [number, number] | undefined;
543
+ selected?: boolean | undefined;
544
+ })[] | undefined;
545
+ kfs?: ({} & {
546
+ time?: number | undefined;
547
+ t?: number | undefined;
548
+ value?: any;
549
+ v?: any;
550
+ easing?: string | [number, number, number, number] | undefined;
551
+ e?: string | [number, number, number, number] | undefined;
552
+ tangentOut?: [number, number] | undefined;
553
+ to?: [number, number] | undefined;
554
+ tangentIn?: [number, number] | undefined;
555
+ ti?: [number, number] | undefined;
556
+ selected?: boolean | undefined;
557
+ })[] | undefined;
558
+ loop?: boolean | ({} & {
559
+ segmentCount?: number | undefined;
560
+ before?: boolean | undefined;
561
+ alternate?: boolean | undefined;
562
+ }) | undefined;
563
+ autoOrient?: boolean | undefined;
564
+ }>> | undefined;
565
+ styles?: Record<string, any> | undefined;
566
+ }, false> & {
567
+ readonly _shape: {
568
+ easings: PxSchema<Record<string, [number, number, number, number]> | undefined, true>;
569
+ animations: PxSchema<Record<string, Record<string, {} & {
570
+ keyframes?: ({} & {
571
+ time?: number | undefined;
572
+ t?: number | undefined;
573
+ value?: any;
574
+ v?: any;
575
+ easing?: string | [number, number, number, number] | undefined;
576
+ e?: string | [number, number, number, number] | undefined;
577
+ tangentOut?: [number, number] | undefined;
578
+ to?: [number, number] | undefined;
579
+ tangentIn?: [number, number] | undefined;
580
+ ti?: [number, number] | undefined;
581
+ selected?: boolean | undefined;
582
+ })[] | undefined;
583
+ kfs?: ({} & {
584
+ time?: number | undefined;
585
+ t?: number | undefined;
586
+ value?: any;
587
+ v?: any;
588
+ easing?: string | [number, number, number, number] | undefined;
589
+ e?: string | [number, number, number, number] | undefined;
590
+ tangentOut?: [number, number] | undefined;
591
+ to?: [number, number] | undefined;
592
+ tangentIn?: [number, number] | undefined;
593
+ ti?: [number, number] | undefined;
594
+ selected?: boolean | undefined;
595
+ })[] | undefined;
596
+ loop?: boolean | ({} & {
597
+ segmentCount?: number | undefined;
598
+ before?: boolean | undefined;
599
+ alternate?: boolean | undefined;
600
+ }) | undefined;
601
+ autoOrient?: boolean | undefined;
602
+ }>> | undefined, true>;
603
+ styles: PxSchema<Record<string, any> | undefined, true>;
604
+ };
605
+ };
606
+ /** Reusable definitions library for easings, animations, and styles. */
607
+ type PxDefs = PxInfer<typeof PxDefsSchema>;
608
+ declare const PxAnimatorConfigSchema: PxSchema<{} & {
609
+ mode?: "auto" | "webapi" | "frames" | undefined;
610
+ duration?: number | undefined;
611
+ delay?: number | undefined;
612
+ iterations?: number | "infinite" | undefined;
613
+ fill?: "forwards" | "backwards" | "both" | "none" | undefined;
614
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
615
+ frameRate?: number | undefined;
616
+ trigger?: ({} & {
617
+ startOn?: "load" | "mouseOver" | "click" | "scrollIntoView" | "programmatic" | undefined;
618
+ outAction?: "reverse" | "continue" | "pause" | "reset" | undefined;
619
+ scrollIntoViewThreshold?: number | undefined;
620
+ }) | undefined;
621
+ definitions?: ({} & {
622
+ easings?: Record<string, [number, number, number, number]> | undefined;
623
+ animations?: Record<string, Record<string, {} & {
624
+ keyframes?: ({} & {
625
+ time?: number | undefined;
626
+ t?: number | undefined;
627
+ value?: any;
628
+ v?: any;
629
+ easing?: string | [number, number, number, number] | undefined;
630
+ e?: string | [number, number, number, number] | undefined;
631
+ tangentOut?: [number, number] | undefined;
632
+ to?: [number, number] | undefined;
633
+ tangentIn?: [number, number] | undefined;
634
+ ti?: [number, number] | undefined;
635
+ selected?: boolean | undefined;
636
+ })[] | undefined;
637
+ kfs?: ({} & {
638
+ time?: number | undefined;
639
+ t?: number | undefined;
640
+ value?: any;
641
+ v?: any;
642
+ easing?: string | [number, number, number, number] | undefined;
643
+ e?: string | [number, number, number, number] | undefined;
644
+ tangentOut?: [number, number] | undefined;
645
+ to?: [number, number] | undefined;
646
+ tangentIn?: [number, number] | undefined;
647
+ ti?: [number, number] | undefined;
648
+ selected?: boolean | undefined;
649
+ })[] | undefined;
650
+ loop?: boolean | ({} & {
651
+ segmentCount?: number | undefined;
652
+ before?: boolean | undefined;
653
+ alternate?: boolean | undefined;
654
+ }) | undefined;
655
+ autoOrient?: boolean | undefined;
656
+ }>> | undefined;
657
+ styles?: Record<string, any> | undefined;
658
+ }) | undefined;
659
+ animate?: Record<string, string | Record<string, {} & {
660
+ keyframes?: ({} & {
661
+ time?: number | undefined;
662
+ t?: number | undefined;
663
+ value?: any;
664
+ v?: any;
665
+ easing?: string | [number, number, number, number] | undefined;
666
+ e?: string | [number, number, number, number] | undefined;
667
+ tangentOut?: [number, number] | undefined;
668
+ to?: [number, number] | undefined;
669
+ tangentIn?: [number, number] | undefined;
670
+ ti?: [number, number] | undefined;
671
+ selected?: boolean | undefined;
672
+ })[] | undefined;
673
+ kfs?: ({} & {
674
+ time?: number | undefined;
675
+ t?: number | undefined;
676
+ value?: any;
677
+ v?: any;
678
+ easing?: string | [number, number, number, number] | undefined;
679
+ e?: string | [number, number, number, number] | undefined;
680
+ tangentOut?: [number, number] | undefined;
681
+ to?: [number, number] | undefined;
682
+ tangentIn?: [number, number] | undefined;
683
+ ti?: [number, number] | undefined;
684
+ selected?: boolean | undefined;
685
+ })[] | undefined;
686
+ loop?: boolean | ({} & {
687
+ segmentCount?: number | undefined;
688
+ before?: boolean | undefined;
689
+ alternate?: boolean | undefined;
690
+ }) | undefined;
691
+ autoOrient?: boolean | undefined;
692
+ }> | (string | Record<string, {} & {
693
+ keyframes?: ({} & {
694
+ time?: number | undefined;
695
+ t?: number | undefined;
696
+ value?: any;
697
+ v?: any;
698
+ easing?: string | [number, number, number, number] | undefined;
699
+ e?: string | [number, number, number, number] | undefined;
700
+ tangentOut?: [number, number] | undefined;
701
+ to?: [number, number] | undefined;
702
+ tangentIn?: [number, number] | undefined;
703
+ ti?: [number, number] | undefined;
704
+ selected?: boolean | undefined;
705
+ })[] | undefined;
706
+ kfs?: ({} & {
707
+ time?: number | undefined;
708
+ t?: number | undefined;
709
+ value?: any;
710
+ v?: any;
711
+ easing?: string | [number, number, number, number] | undefined;
712
+ e?: string | [number, number, number, number] | undefined;
713
+ tangentOut?: [number, number] | undefined;
714
+ to?: [number, number] | undefined;
715
+ tangentIn?: [number, number] | undefined;
716
+ ti?: [number, number] | undefined;
717
+ selected?: boolean | undefined;
718
+ })[] | undefined;
719
+ loop?: boolean | ({} & {
720
+ segmentCount?: number | undefined;
721
+ before?: boolean | undefined;
722
+ alternate?: boolean | undefined;
723
+ }) | undefined;
724
+ autoOrient?: boolean | undefined;
725
+ }>)[]> | undefined;
726
+ debug?: boolean | undefined;
727
+ debugInstName?: string | undefined;
728
+ }, false> & {
729
+ readonly _shape: {
730
+ mode: PxSchema<"auto" | "webapi" | "frames" | undefined, true>;
731
+ duration: PxSchema<number | undefined, true>;
732
+ delay: PxSchema<number | undefined, true>;
733
+ iterations: PxSchema<number | "infinite" | undefined, true>;
734
+ fill: PxSchema<"forwards" | "backwards" | "both" | "none" | undefined, true>;
735
+ direction: PxSchema<"reverse" | "normal" | "alternate" | "alternate-reverse" | undefined, true>;
736
+ frameRate: PxSchema<number | undefined, true>;
737
+ trigger: PxSchema<({} & {
738
+ startOn?: "load" | "mouseOver" | "click" | "scrollIntoView" | "programmatic" | undefined;
739
+ outAction?: "reverse" | "continue" | "pause" | "reset" | undefined;
740
+ scrollIntoViewThreshold?: number | undefined;
741
+ }) | undefined, true>;
742
+ definitions: PxSchema<({} & {
743
+ easings?: Record<string, [number, number, number, number]> | undefined;
744
+ animations?: Record<string, Record<string, {} & {
745
+ keyframes?: ({} & {
746
+ time?: number | undefined;
747
+ t?: number | undefined;
748
+ value?: any;
749
+ v?: any;
750
+ easing?: string | [number, number, number, number] | undefined;
751
+ e?: string | [number, number, number, number] | undefined;
752
+ tangentOut?: [number, number] | undefined;
753
+ to?: [number, number] | undefined;
754
+ tangentIn?: [number, number] | undefined;
755
+ ti?: [number, number] | undefined;
756
+ selected?: boolean | undefined;
757
+ })[] | undefined;
758
+ kfs?: ({} & {
759
+ time?: number | undefined;
760
+ t?: number | undefined;
761
+ value?: any;
762
+ v?: any;
763
+ easing?: string | [number, number, number, number] | undefined;
764
+ e?: string | [number, number, number, number] | undefined;
765
+ tangentOut?: [number, number] | undefined;
766
+ to?: [number, number] | undefined;
767
+ tangentIn?: [number, number] | undefined;
768
+ ti?: [number, number] | undefined;
769
+ selected?: boolean | undefined;
770
+ })[] | undefined;
771
+ loop?: boolean | ({} & {
772
+ segmentCount?: number | undefined;
773
+ before?: boolean | undefined;
774
+ alternate?: boolean | undefined;
775
+ }) | undefined;
776
+ autoOrient?: boolean | undefined;
777
+ }>> | undefined;
778
+ styles?: Record<string, any> | undefined;
779
+ }) | undefined, true>;
780
+ animate: PxSchema<Record<string, string | Record<string, {} & {
781
+ keyframes?: ({} & {
782
+ time?: number | undefined;
783
+ t?: number | undefined;
784
+ value?: any;
785
+ v?: any;
786
+ easing?: string | [number, number, number, number] | undefined;
787
+ e?: string | [number, number, number, number] | undefined;
788
+ tangentOut?: [number, number] | undefined;
789
+ to?: [number, number] | undefined;
790
+ tangentIn?: [number, number] | undefined;
791
+ ti?: [number, number] | undefined;
792
+ selected?: boolean | undefined;
793
+ })[] | undefined;
794
+ kfs?: ({} & {
795
+ time?: number | undefined;
796
+ t?: number | undefined;
797
+ value?: any;
798
+ v?: any;
799
+ easing?: string | [number, number, number, number] | undefined;
800
+ e?: string | [number, number, number, number] | undefined;
801
+ tangentOut?: [number, number] | undefined;
802
+ to?: [number, number] | undefined;
803
+ tangentIn?: [number, number] | undefined;
804
+ ti?: [number, number] | undefined;
805
+ selected?: boolean | undefined;
806
+ })[] | undefined;
807
+ loop?: boolean | ({} & {
808
+ segmentCount?: number | undefined;
809
+ before?: boolean | undefined;
810
+ alternate?: boolean | undefined;
811
+ }) | undefined;
812
+ autoOrient?: boolean | undefined;
813
+ }> | (string | Record<string, {} & {
814
+ keyframes?: ({} & {
815
+ time?: number | undefined;
816
+ t?: number | undefined;
817
+ value?: any;
818
+ v?: any;
819
+ easing?: string | [number, number, number, number] | undefined;
820
+ e?: string | [number, number, number, number] | undefined;
821
+ tangentOut?: [number, number] | undefined;
822
+ to?: [number, number] | undefined;
823
+ tangentIn?: [number, number] | undefined;
824
+ ti?: [number, number] | undefined;
825
+ selected?: boolean | undefined;
826
+ })[] | undefined;
827
+ kfs?: ({} & {
828
+ time?: number | undefined;
829
+ t?: number | undefined;
830
+ value?: any;
831
+ v?: any;
832
+ easing?: string | [number, number, number, number] | undefined;
833
+ e?: string | [number, number, number, number] | undefined;
834
+ tangentOut?: [number, number] | undefined;
835
+ to?: [number, number] | undefined;
836
+ tangentIn?: [number, number] | undefined;
837
+ ti?: [number, number] | undefined;
838
+ selected?: boolean | undefined;
839
+ })[] | undefined;
840
+ loop?: boolean | ({} & {
841
+ segmentCount?: number | undefined;
842
+ before?: boolean | undefined;
843
+ alternate?: boolean | undefined;
844
+ }) | undefined;
845
+ autoOrient?: boolean | undefined;
846
+ }>)[]> | undefined, true>;
847
+ debug: PxSchema<boolean | undefined, true>;
848
+ debugInstName: PxSchema<string | undefined, true>;
849
+ };
850
+ };
111
851
  /**
112
852
  * Global animation configuration that applies to all animations in the document.
113
853
  * Defines timing, playback behavior, and rendering strategy.
114
854
  */
115
- interface PxAnimatorConfig {
116
- /** JavaScript animation implementation strategy */
117
- mode?: JsMode;
118
- /** Total animation duration in milliseconds */
119
- duration?: number;
120
- /** Delay before animation starts in milliseconds */
121
- delay?: number;
122
- /** Number of times to repeat the animation. Use "infinite" for endless loop. */
123
- iterations?: number | "infinite";
124
- /** Defines which values are applied before/after the animation */
125
- fill?: FillMode;
126
- /** Direction of animation playback */
127
- direction?: PlaybackDirection;
128
- /** Target frame rate for frame-based animations (only applicable when mode="frames") */
129
- frameRate?: number;
130
- /** Trigger configuration for when animation should start */
131
- trigger?: PxTrigger;
132
- debug?: boolean;
133
- debugInstName?: string;
134
- }
855
+ type PxAnimatorConfig = PxInfer<typeof PxAnimatorConfigSchema>;
856
+ declare const PxBindingSchema: PxSchema<{
857
+ id: string;
858
+ animate: string | Record<string, {} & {
859
+ keyframes?: ({} & {
860
+ time?: number | undefined;
861
+ t?: number | undefined;
862
+ value?: any;
863
+ v?: any;
864
+ easing?: string | [number, number, number, number] | undefined;
865
+ e?: string | [number, number, number, number] | undefined;
866
+ tangentOut?: [number, number] | undefined;
867
+ to?: [number, number] | undefined;
868
+ tangentIn?: [number, number] | undefined;
869
+ ti?: [number, number] | undefined;
870
+ selected?: boolean | undefined;
871
+ })[] | undefined;
872
+ kfs?: ({} & {
873
+ time?: number | undefined;
874
+ t?: number | undefined;
875
+ value?: any;
876
+ v?: any;
877
+ easing?: string | [number, number, number, number] | undefined;
878
+ e?: string | [number, number, number, number] | undefined;
879
+ tangentOut?: [number, number] | undefined;
880
+ to?: [number, number] | undefined;
881
+ tangentIn?: [number, number] | undefined;
882
+ ti?: [number, number] | undefined;
883
+ selected?: boolean | undefined;
884
+ })[] | undefined;
885
+ loop?: boolean | ({} & {
886
+ segmentCount?: number | undefined;
887
+ before?: boolean | undefined;
888
+ alternate?: boolean | undefined;
889
+ }) | undefined;
890
+ autoOrient?: boolean | undefined;
891
+ }> | (string | Record<string, {} & {
892
+ keyframes?: ({} & {
893
+ time?: number | undefined;
894
+ t?: number | undefined;
895
+ value?: any;
896
+ v?: any;
897
+ easing?: string | [number, number, number, number] | undefined;
898
+ e?: string | [number, number, number, number] | undefined;
899
+ tangentOut?: [number, number] | undefined;
900
+ to?: [number, number] | undefined;
901
+ tangentIn?: [number, number] | undefined;
902
+ ti?: [number, number] | undefined;
903
+ selected?: boolean | undefined;
904
+ })[] | undefined;
905
+ kfs?: ({} & {
906
+ time?: number | undefined;
907
+ t?: number | undefined;
908
+ value?: any;
909
+ v?: any;
910
+ easing?: string | [number, number, number, number] | undefined;
911
+ e?: string | [number, number, number, number] | undefined;
912
+ tangentOut?: [number, number] | undefined;
913
+ to?: [number, number] | undefined;
914
+ tangentIn?: [number, number] | undefined;
915
+ ti?: [number, number] | undefined;
916
+ selected?: boolean | undefined;
917
+ })[] | undefined;
918
+ loop?: boolean | ({} & {
919
+ segmentCount?: number | undefined;
920
+ before?: boolean | undefined;
921
+ alternate?: boolean | undefined;
922
+ }) | undefined;
923
+ autoOrient?: boolean | undefined;
924
+ }>)[];
925
+ } & {}, false> & {
926
+ readonly _shape: {
927
+ id: PxSchema<string, false>;
928
+ animate: PxSchema<string | Record<string, {} & {
929
+ keyframes?: ({} & {
930
+ time?: number | undefined;
931
+ t?: number | undefined;
932
+ value?: any;
933
+ v?: any;
934
+ easing?: string | [number, number, number, number] | undefined;
935
+ e?: string | [number, number, number, number] | undefined;
936
+ tangentOut?: [number, number] | undefined;
937
+ to?: [number, number] | undefined;
938
+ tangentIn?: [number, number] | undefined;
939
+ ti?: [number, number] | undefined;
940
+ selected?: boolean | undefined;
941
+ })[] | undefined;
942
+ kfs?: ({} & {
943
+ time?: number | undefined;
944
+ t?: number | undefined;
945
+ value?: any;
946
+ v?: any;
947
+ easing?: string | [number, number, number, number] | undefined;
948
+ e?: string | [number, number, number, number] | undefined;
949
+ tangentOut?: [number, number] | undefined;
950
+ to?: [number, number] | undefined;
951
+ tangentIn?: [number, number] | undefined;
952
+ ti?: [number, number] | undefined;
953
+ selected?: boolean | undefined;
954
+ })[] | undefined;
955
+ loop?: boolean | ({} & {
956
+ segmentCount?: number | undefined;
957
+ before?: boolean | undefined;
958
+ alternate?: boolean | undefined;
959
+ }) | undefined;
960
+ autoOrient?: boolean | undefined;
961
+ }> | (string | Record<string, {} & {
962
+ keyframes?: ({} & {
963
+ time?: number | undefined;
964
+ t?: number | undefined;
965
+ value?: any;
966
+ v?: any;
967
+ easing?: string | [number, number, number, number] | undefined;
968
+ e?: string | [number, number, number, number] | undefined;
969
+ tangentOut?: [number, number] | undefined;
970
+ to?: [number, number] | undefined;
971
+ tangentIn?: [number, number] | undefined;
972
+ ti?: [number, number] | undefined;
973
+ selected?: boolean | undefined;
974
+ })[] | undefined;
975
+ kfs?: ({} & {
976
+ time?: number | undefined;
977
+ t?: number | undefined;
978
+ value?: any;
979
+ v?: any;
980
+ easing?: string | [number, number, number, number] | undefined;
981
+ e?: string | [number, number, number, number] | undefined;
982
+ tangentOut?: [number, number] | undefined;
983
+ to?: [number, number] | undefined;
984
+ tangentIn?: [number, number] | undefined;
985
+ ti?: [number, number] | undefined;
986
+ selected?: boolean | undefined;
987
+ })[] | undefined;
988
+ loop?: boolean | ({} & {
989
+ segmentCount?: number | undefined;
990
+ before?: boolean | undefined;
991
+ alternate?: boolean | undefined;
992
+ }) | undefined;
993
+ autoOrient?: boolean | undefined;
994
+ }>)[], false>;
995
+ };
996
+ };
997
+ /**
998
+ * Binds animations to existing DOM elements via CSS selectors.
999
+ * Used when the SVG tree is pre-rendered and animations are applied separately.
1000
+ */
1001
+ type PxBinding = PxInfer<typeof PxBindingSchema>;
135
1002
  /**
136
- * Reusable definitions library for easings, animations, and styles.
137
- * Allows to define once and referencing by name.
1003
+ * Per-attribute value shape on the element body. A property key carries either:
1004
+ * - a primitive (string/number) — static SVG attribute
1005
+ * - a `{value: …}` object — structured static parametric source (record-shaped
1006
+ * static value, used by attributes whose static representation is itself a
1007
+ * record — notably `transform: {value: PxTransformParts}`)
1008
+ * - a `{keyframes}` / `{kfs}` object — inline property animation
1009
+ *
1010
+ * The unified rule (primitive | `{value}` | `{keyframes}`) applies across the
1011
+ * format. For most attributes the `{value}` form is rarely used on the body
1012
+ * (a primitive suffices for static); for `transform` it is the canonical
1013
+ * structured-static shape. See `PxTransformValueSchema`.
138
1014
  */
139
- interface PxDefs {
140
- /** Named cubic-bezier easing functions */
141
- easings?: {
142
- [name: string]: [number, number, number, number];
1015
+ declare const PxAttrValueSchema: PxSchema<string | number | ({} & {
1016
+ keyframes?: ({} & {
1017
+ time?: number | undefined;
1018
+ t?: number | undefined;
1019
+ value?: any;
1020
+ v?: any;
1021
+ easing?: string | [number, number, number, number] | undefined;
1022
+ e?: string | [number, number, number, number] | undefined;
1023
+ tangentOut?: [number, number] | undefined;
1024
+ to?: [number, number] | undefined;
1025
+ tangentIn?: [number, number] | undefined;
1026
+ ti?: [number, number] | undefined;
1027
+ selected?: boolean | undefined;
1028
+ })[] | undefined;
1029
+ kfs?: ({} & {
1030
+ time?: number | undefined;
1031
+ t?: number | undefined;
1032
+ value?: any;
1033
+ v?: any;
1034
+ easing?: string | [number, number, number, number] | undefined;
1035
+ e?: string | [number, number, number, number] | undefined;
1036
+ tangentOut?: [number, number] | undefined;
1037
+ to?: [number, number] | undefined;
1038
+ tangentIn?: [number, number] | undefined;
1039
+ ti?: [number, number] | undefined;
1040
+ selected?: boolean | undefined;
1041
+ })[] | undefined;
1042
+ loop?: boolean | ({} & {
1043
+ segmentCount?: number | undefined;
1044
+ before?: boolean | undefined;
1045
+ alternate?: boolean | undefined;
1046
+ }) | undefined;
1047
+ autoOrient?: boolean | undefined;
1048
+ }) | ({
1049
+ value: any;
1050
+ } & {}), false>;
1051
+ /** Per-attribute value: primitive for static, `{value}` for structured static, `PxPropertyAnimation` for animated. */
1052
+ type PxAttrValue = string | number | {
1053
+ value: any;
1054
+ } | PxPropertyAnimation;
1055
+ /** Per-part editor transform (`transformation` effect). All parts optional and animatable. */
1056
+ declare const PxTransformationEffectSchema: PxSchema<{} & {
1057
+ translate?: number[] | ({
1058
+ value: number[];
1059
+ } & {}) | ({
1060
+ keyframes: ({} & {
1061
+ time?: number | undefined;
1062
+ t?: number | undefined;
1063
+ value?: any;
1064
+ v?: any;
1065
+ easing?: string | [number, number, number, number] | undefined;
1066
+ e?: string | [number, number, number, number] | undefined;
1067
+ tangentOut?: [number, number] | undefined;
1068
+ to?: [number, number] | undefined;
1069
+ tangentIn?: [number, number] | undefined;
1070
+ ti?: [number, number] | undefined;
1071
+ selected?: boolean | undefined;
1072
+ })[];
1073
+ } & {
1074
+ autoOrient?: boolean | undefined;
1075
+ }) | undefined;
1076
+ rotate?: number | ({
1077
+ value: number;
1078
+ } & {}) | ({
1079
+ keyframes: ({} & {
1080
+ time?: number | undefined;
1081
+ t?: number | undefined;
1082
+ value?: any;
1083
+ v?: any;
1084
+ easing?: string | [number, number, number, number] | undefined;
1085
+ e?: string | [number, number, number, number] | undefined;
1086
+ tangentOut?: [number, number] | undefined;
1087
+ to?: [number, number] | undefined;
1088
+ tangentIn?: [number, number] | undefined;
1089
+ ti?: [number, number] | undefined;
1090
+ selected?: boolean | undefined;
1091
+ })[];
1092
+ } & {
1093
+ autoOrient?: boolean | undefined;
1094
+ }) | undefined;
1095
+ scale?: number[] | ({
1096
+ value: number[];
1097
+ } & {}) | ({
1098
+ keyframes: ({} & {
1099
+ time?: number | undefined;
1100
+ t?: number | undefined;
1101
+ value?: any;
1102
+ v?: any;
1103
+ easing?: string | [number, number, number, number] | undefined;
1104
+ e?: string | [number, number, number, number] | undefined;
1105
+ tangentOut?: [number, number] | undefined;
1106
+ to?: [number, number] | undefined;
1107
+ tangentIn?: [number, number] | undefined;
1108
+ ti?: [number, number] | undefined;
1109
+ selected?: boolean | undefined;
1110
+ })[];
1111
+ } & {
1112
+ autoOrient?: boolean | undefined;
1113
+ }) | undefined;
1114
+ skew?: number[] | ({
1115
+ value: number[];
1116
+ } & {}) | ({
1117
+ keyframes: ({} & {
1118
+ time?: number | undefined;
1119
+ t?: number | undefined;
1120
+ value?: any;
1121
+ v?: any;
1122
+ easing?: string | [number, number, number, number] | undefined;
1123
+ e?: string | [number, number, number, number] | undefined;
1124
+ tangentOut?: [number, number] | undefined;
1125
+ to?: [number, number] | undefined;
1126
+ tangentIn?: [number, number] | undefined;
1127
+ ti?: [number, number] | undefined;
1128
+ selected?: boolean | undefined;
1129
+ })[];
1130
+ } & {
1131
+ autoOrient?: boolean | undefined;
1132
+ }) | undefined;
1133
+ origin?: number[] | ({
1134
+ value: number[];
1135
+ } & {}) | ({
1136
+ keyframes: ({} & {
1137
+ time?: number | undefined;
1138
+ t?: number | undefined;
1139
+ value?: any;
1140
+ v?: any;
1141
+ easing?: string | [number, number, number, number] | undefined;
1142
+ e?: string | [number, number, number, number] | undefined;
1143
+ tangentOut?: [number, number] | undefined;
1144
+ to?: [number, number] | undefined;
1145
+ tangentIn?: [number, number] | undefined;
1146
+ ti?: [number, number] | undefined;
1147
+ selected?: boolean | undefined;
1148
+ })[];
1149
+ } & {
1150
+ autoOrient?: boolean | undefined;
1151
+ }) | undefined;
1152
+ }, false> & {
1153
+ readonly _shape: {
1154
+ translate: PxSchema<number[] | ({
1155
+ value: number[];
1156
+ } & {}) | ({
1157
+ keyframes: ({} & {
1158
+ time?: number | undefined;
1159
+ t?: number | undefined;
1160
+ value?: any;
1161
+ v?: any;
1162
+ easing?: string | [number, number, number, number] | undefined;
1163
+ e?: string | [number, number, number, number] | undefined;
1164
+ tangentOut?: [number, number] | undefined;
1165
+ to?: [number, number] | undefined;
1166
+ tangentIn?: [number, number] | undefined;
1167
+ ti?: [number, number] | undefined;
1168
+ selected?: boolean | undefined;
1169
+ })[];
1170
+ } & {
1171
+ autoOrient?: boolean | undefined;
1172
+ }) | undefined, true>;
1173
+ rotate: PxSchema<number | ({
1174
+ value: number;
1175
+ } & {}) | ({
1176
+ keyframes: ({} & {
1177
+ time?: number | undefined;
1178
+ t?: number | undefined;
1179
+ value?: any;
1180
+ v?: any;
1181
+ easing?: string | [number, number, number, number] | undefined;
1182
+ e?: string | [number, number, number, number] | undefined;
1183
+ tangentOut?: [number, number] | undefined;
1184
+ to?: [number, number] | undefined;
1185
+ tangentIn?: [number, number] | undefined;
1186
+ ti?: [number, number] | undefined;
1187
+ selected?: boolean | undefined;
1188
+ })[];
1189
+ } & {
1190
+ autoOrient?: boolean | undefined;
1191
+ }) | undefined, true>;
1192
+ scale: PxSchema<number[] | ({
1193
+ value: number[];
1194
+ } & {}) | ({
1195
+ keyframes: ({} & {
1196
+ time?: number | undefined;
1197
+ t?: number | undefined;
1198
+ value?: any;
1199
+ v?: any;
1200
+ easing?: string | [number, number, number, number] | undefined;
1201
+ e?: string | [number, number, number, number] | undefined;
1202
+ tangentOut?: [number, number] | undefined;
1203
+ to?: [number, number] | undefined;
1204
+ tangentIn?: [number, number] | undefined;
1205
+ ti?: [number, number] | undefined;
1206
+ selected?: boolean | undefined;
1207
+ })[];
1208
+ } & {
1209
+ autoOrient?: boolean | undefined;
1210
+ }) | undefined, true>;
1211
+ skew: PxSchema<number[] | ({
1212
+ value: number[];
1213
+ } & {}) | ({
1214
+ keyframes: ({} & {
1215
+ time?: number | undefined;
1216
+ t?: number | undefined;
1217
+ value?: any;
1218
+ v?: any;
1219
+ easing?: string | [number, number, number, number] | undefined;
1220
+ e?: string | [number, number, number, number] | undefined;
1221
+ tangentOut?: [number, number] | undefined;
1222
+ to?: [number, number] | undefined;
1223
+ tangentIn?: [number, number] | undefined;
1224
+ ti?: [number, number] | undefined;
1225
+ selected?: boolean | undefined;
1226
+ })[];
1227
+ } & {
1228
+ autoOrient?: boolean | undefined;
1229
+ }) | undefined, true>;
1230
+ origin: PxSchema<number[] | ({
1231
+ value: number[];
1232
+ } & {}) | ({
1233
+ keyframes: ({} & {
1234
+ time?: number | undefined;
1235
+ t?: number | undefined;
1236
+ value?: any;
1237
+ v?: any;
1238
+ easing?: string | [number, number, number, number] | undefined;
1239
+ e?: string | [number, number, number, number] | undefined;
1240
+ tangentOut?: [number, number] | undefined;
1241
+ to?: [number, number] | undefined;
1242
+ tangentIn?: [number, number] | undefined;
1243
+ ti?: [number, number] | undefined;
1244
+ selected?: boolean | undefined;
1245
+ })[];
1246
+ } & {
1247
+ autoOrient?: boolean | undefined;
1248
+ }) | undefined, true>;
143
1249
  };
144
- /** Named animation definitions that can be referenced by elements */
145
- animations?: {
146
- [name: string]: PxAnimationDefinition;
1250
+ };
1251
+ /** Per-copy repeater offsets. All static (animated repeater not yet supported). */
1252
+ declare const PxRepeaterEffectSchema: PxSchema<{} & {
1253
+ copies?: number | undefined;
1254
+ translate?: number[] | undefined;
1255
+ rotate?: number | undefined;
1256
+ scale?: number[] | undefined;
1257
+ origin?: number[] | undefined;
1258
+ }, false> & {
1259
+ readonly _shape: {
1260
+ copies: PxSchema<number | undefined, true>;
1261
+ translate: PxSchema<number[] | undefined, true>;
1262
+ rotate: PxSchema<number | undefined, true>;
1263
+ scale: PxSchema<number[] | undefined, true>;
1264
+ origin: PxSchema<number[] | undefined, true>;
147
1265
  };
148
- /**
149
- * FIXME - do we need it?
150
- * Named style presets for common styling patterns
151
- */
152
- styles?: {
153
- [name: string]: Record<string, string | number>;
1266
+ };
1267
+ /** Mask source ref + standard `<mask>` attributes. */
1268
+ declare const PxMaskedByEffectSchema: PxSchema<{} & {
1269
+ href?: string | undefined;
1270
+ maskType?: string | undefined;
1271
+ maskUnits?: string | undefined;
1272
+ maskContentUnits?: string | undefined;
1273
+ }, false> & {
1274
+ readonly _shape: {
1275
+ href: PxSchema<string | undefined, true>;
1276
+ maskType: PxSchema<string | undefined, true>;
1277
+ maskUnits: PxSchema<string | undefined, true>;
1278
+ maskContentUnits: PxSchema<string | undefined, true>;
154
1279
  };
155
- }
1280
+ };
1281
+ /** Trim-path effect payload — opaque to the player materialiser; lives on `meta`. */
1282
+ declare const PxTrimPathEffectSchema: PxSchema<any, false>;
1283
+ /** `<use>` retime: `baseId` = source; `start`/`timeCrop` in ms. */
1284
+ declare const PxRetimeEffectSchema: PxSchema<{} & {
1285
+ baseId?: string | undefined;
1286
+ start?: number | undefined;
1287
+ stretch?: number | undefined;
1288
+ timeCrop?: number[] | undefined;
1289
+ }, false> & {
1290
+ readonly _shape: {
1291
+ baseId: PxSchema<string | undefined, true>;
1292
+ start: PxSchema<number | undefined, true>;
1293
+ stretch: PxSchema<number | undefined, true>;
1294
+ timeCrop: PxSchema<number[] | undefined, true>;
1295
+ };
1296
+ };
1297
+ /** `<use>` ref: `baseId` = source; `type: 'content'` = exclude object-translate. */
1298
+ declare const PxRefEffectSchema: PxSchema<{} & {
1299
+ baseId?: string | undefined;
1300
+ type?: string | undefined;
1301
+ }, false> & {
1302
+ readonly _shape: {
1303
+ baseId: PxSchema<string | undefined, true>;
1304
+ type: PxSchema<string | undefined, true>;
1305
+ };
1306
+ };
1307
+ /** The full `node.effects` bucket. Closed — each known effect is declared
1308
+ * (strict-mode validation flags an unknown effect key as a wire-format drift). */
1309
+ declare const PxEffectsSchema: PxSchema<{} & {
1310
+ transformation?: ({} & {
1311
+ translate?: number[] | ({
1312
+ value: number[];
1313
+ } & {}) | ({
1314
+ keyframes: ({} & {
1315
+ time?: number | undefined;
1316
+ t?: number | undefined;
1317
+ value?: any;
1318
+ v?: any;
1319
+ easing?: string | [number, number, number, number] | undefined;
1320
+ e?: string | [number, number, number, number] | undefined;
1321
+ tangentOut?: [number, number] | undefined;
1322
+ to?: [number, number] | undefined;
1323
+ tangentIn?: [number, number] | undefined;
1324
+ ti?: [number, number] | undefined;
1325
+ selected?: boolean | undefined;
1326
+ })[];
1327
+ } & {
1328
+ autoOrient?: boolean | undefined;
1329
+ }) | undefined;
1330
+ rotate?: number | ({
1331
+ value: number;
1332
+ } & {}) | ({
1333
+ keyframes: ({} & {
1334
+ time?: number | undefined;
1335
+ t?: number | undefined;
1336
+ value?: any;
1337
+ v?: any;
1338
+ easing?: string | [number, number, number, number] | undefined;
1339
+ e?: string | [number, number, number, number] | undefined;
1340
+ tangentOut?: [number, number] | undefined;
1341
+ to?: [number, number] | undefined;
1342
+ tangentIn?: [number, number] | undefined;
1343
+ ti?: [number, number] | undefined;
1344
+ selected?: boolean | undefined;
1345
+ })[];
1346
+ } & {
1347
+ autoOrient?: boolean | undefined;
1348
+ }) | undefined;
1349
+ scale?: number[] | ({
1350
+ value: number[];
1351
+ } & {}) | ({
1352
+ keyframes: ({} & {
1353
+ time?: number | undefined;
1354
+ t?: number | undefined;
1355
+ value?: any;
1356
+ v?: any;
1357
+ easing?: string | [number, number, number, number] | undefined;
1358
+ e?: string | [number, number, number, number] | undefined;
1359
+ tangentOut?: [number, number] | undefined;
1360
+ to?: [number, number] | undefined;
1361
+ tangentIn?: [number, number] | undefined;
1362
+ ti?: [number, number] | undefined;
1363
+ selected?: boolean | undefined;
1364
+ })[];
1365
+ } & {
1366
+ autoOrient?: boolean | undefined;
1367
+ }) | undefined;
1368
+ skew?: number[] | ({
1369
+ value: number[];
1370
+ } & {}) | ({
1371
+ keyframes: ({} & {
1372
+ time?: number | undefined;
1373
+ t?: number | undefined;
1374
+ value?: any;
1375
+ v?: any;
1376
+ easing?: string | [number, number, number, number] | undefined;
1377
+ e?: string | [number, number, number, number] | undefined;
1378
+ tangentOut?: [number, number] | undefined;
1379
+ to?: [number, number] | undefined;
1380
+ tangentIn?: [number, number] | undefined;
1381
+ ti?: [number, number] | undefined;
1382
+ selected?: boolean | undefined;
1383
+ })[];
1384
+ } & {
1385
+ autoOrient?: boolean | undefined;
1386
+ }) | undefined;
1387
+ origin?: number[] | ({
1388
+ value: number[];
1389
+ } & {}) | ({
1390
+ keyframes: ({} & {
1391
+ time?: number | undefined;
1392
+ t?: number | undefined;
1393
+ value?: any;
1394
+ v?: any;
1395
+ easing?: string | [number, number, number, number] | undefined;
1396
+ e?: string | [number, number, number, number] | undefined;
1397
+ tangentOut?: [number, number] | undefined;
1398
+ to?: [number, number] | undefined;
1399
+ tangentIn?: [number, number] | undefined;
1400
+ ti?: [number, number] | undefined;
1401
+ selected?: boolean | undefined;
1402
+ })[];
1403
+ } & {
1404
+ autoOrient?: boolean | undefined;
1405
+ }) | undefined;
1406
+ }) | undefined;
1407
+ repeater?: ({} & {
1408
+ copies?: number | undefined;
1409
+ translate?: number[] | undefined;
1410
+ rotate?: number | undefined;
1411
+ scale?: number[] | undefined;
1412
+ origin?: number[] | undefined;
1413
+ }) | undefined;
1414
+ maskedBy?: ({} & {
1415
+ href?: string | undefined;
1416
+ maskType?: string | undefined;
1417
+ maskUnits?: string | undefined;
1418
+ maskContentUnits?: string | undefined;
1419
+ }) | undefined;
1420
+ trimPath?: any;
1421
+ retime?: ({} & {
1422
+ baseId?: string | undefined;
1423
+ start?: number | undefined;
1424
+ stretch?: number | undefined;
1425
+ timeCrop?: number[] | undefined;
1426
+ }) | undefined;
1427
+ isCombinedShape?: boolean | undefined;
1428
+ ref?: ({} & {
1429
+ baseId?: string | undefined;
1430
+ type?: string | undefined;
1431
+ }) | undefined;
1432
+ }, false> & {
1433
+ readonly _shape: {
1434
+ transformation: PxSchema<({} & {
1435
+ translate?: number[] | ({
1436
+ value: number[];
1437
+ } & {}) | ({
1438
+ keyframes: ({} & {
1439
+ time?: number | undefined;
1440
+ t?: number | undefined;
1441
+ value?: any;
1442
+ v?: any;
1443
+ easing?: string | [number, number, number, number] | undefined;
1444
+ e?: string | [number, number, number, number] | undefined;
1445
+ tangentOut?: [number, number] | undefined;
1446
+ to?: [number, number] | undefined;
1447
+ tangentIn?: [number, number] | undefined;
1448
+ ti?: [number, number] | undefined;
1449
+ selected?: boolean | undefined;
1450
+ })[];
1451
+ } & {
1452
+ autoOrient?: boolean | undefined;
1453
+ }) | undefined;
1454
+ rotate?: number | ({
1455
+ value: number;
1456
+ } & {}) | ({
1457
+ keyframes: ({} & {
1458
+ time?: number | undefined;
1459
+ t?: number | undefined;
1460
+ value?: any;
1461
+ v?: any;
1462
+ easing?: string | [number, number, number, number] | undefined;
1463
+ e?: string | [number, number, number, number] | undefined;
1464
+ tangentOut?: [number, number] | undefined;
1465
+ to?: [number, number] | undefined;
1466
+ tangentIn?: [number, number] | undefined;
1467
+ ti?: [number, number] | undefined;
1468
+ selected?: boolean | undefined;
1469
+ })[];
1470
+ } & {
1471
+ autoOrient?: boolean | undefined;
1472
+ }) | undefined;
1473
+ scale?: number[] | ({
1474
+ value: number[];
1475
+ } & {}) | ({
1476
+ keyframes: ({} & {
1477
+ time?: number | undefined;
1478
+ t?: number | undefined;
1479
+ value?: any;
1480
+ v?: any;
1481
+ easing?: string | [number, number, number, number] | undefined;
1482
+ e?: string | [number, number, number, number] | undefined;
1483
+ tangentOut?: [number, number] | undefined;
1484
+ to?: [number, number] | undefined;
1485
+ tangentIn?: [number, number] | undefined;
1486
+ ti?: [number, number] | undefined;
1487
+ selected?: boolean | undefined;
1488
+ })[];
1489
+ } & {
1490
+ autoOrient?: boolean | undefined;
1491
+ }) | undefined;
1492
+ skew?: number[] | ({
1493
+ value: number[];
1494
+ } & {}) | ({
1495
+ keyframes: ({} & {
1496
+ time?: number | undefined;
1497
+ t?: number | undefined;
1498
+ value?: any;
1499
+ v?: any;
1500
+ easing?: string | [number, number, number, number] | undefined;
1501
+ e?: string | [number, number, number, number] | undefined;
1502
+ tangentOut?: [number, number] | undefined;
1503
+ to?: [number, number] | undefined;
1504
+ tangentIn?: [number, number] | undefined;
1505
+ ti?: [number, number] | undefined;
1506
+ selected?: boolean | undefined;
1507
+ })[];
1508
+ } & {
1509
+ autoOrient?: boolean | undefined;
1510
+ }) | undefined;
1511
+ origin?: number[] | ({
1512
+ value: number[];
1513
+ } & {}) | ({
1514
+ keyframes: ({} & {
1515
+ time?: number | undefined;
1516
+ t?: number | undefined;
1517
+ value?: any;
1518
+ v?: any;
1519
+ easing?: string | [number, number, number, number] | undefined;
1520
+ e?: string | [number, number, number, number] | undefined;
1521
+ tangentOut?: [number, number] | undefined;
1522
+ to?: [number, number] | undefined;
1523
+ tangentIn?: [number, number] | undefined;
1524
+ ti?: [number, number] | undefined;
1525
+ selected?: boolean | undefined;
1526
+ })[];
1527
+ } & {
1528
+ autoOrient?: boolean | undefined;
1529
+ }) | undefined;
1530
+ }) | undefined, true>;
1531
+ repeater: PxSchema<({} & {
1532
+ copies?: number | undefined;
1533
+ translate?: number[] | undefined;
1534
+ rotate?: number | undefined;
1535
+ scale?: number[] | undefined;
1536
+ origin?: number[] | undefined;
1537
+ }) | undefined, true>;
1538
+ maskedBy: PxSchema<({} & {
1539
+ href?: string | undefined;
1540
+ maskType?: string | undefined;
1541
+ maskUnits?: string | undefined;
1542
+ maskContentUnits?: string | undefined;
1543
+ }) | undefined, true>;
1544
+ trimPath: PxSchema<any, true>;
1545
+ retime: PxSchema<({} & {
1546
+ baseId?: string | undefined;
1547
+ start?: number | undefined;
1548
+ stretch?: number | undefined;
1549
+ timeCrop?: number[] | undefined;
1550
+ }) | undefined, true>;
1551
+ isCombinedShape: PxSchema<boolean | undefined, true>;
1552
+ ref: PxSchema<({} & {
1553
+ baseId?: string | undefined;
1554
+ type?: string | undefined;
1555
+ }) | undefined, true>;
1556
+ };
1557
+ };
156
1558
  /**
157
- * Element animation specification.
158
- * Can be:
159
- * - A string referencing a named animation from defs
160
- * - An array of named animation references
161
- * - An inline PxAnimationDefinition object
162
- * - A mixed array of references and inline definitions
1559
+ * Walks `root` and validates every `node.effects` bucket against `PxEffectsSchema`.
1560
+ * Returns an array of human-readable warning strings (empty when all good).
1561
+ * Doesn't mutate the tree. Called by `createAnimatorImpl` before applying effects.
163
1562
  *
164
- * @example
165
- * "fadeIn"
166
- * ["fadeIn", "spin"]
167
- * { opacity: { keyframes: [...] } }
168
- * ["fadeIn", { scale: { keyframes: [...] } }]
1563
+ * Pass `strict: true` to also flag undeclared keys (useful in dev / tests).
169
1564
  */
170
- type PxElementAnimation = string | string[] | PxAnimationDefinition | (string | PxAnimationDefinition)[];
1565
+ declare function validateNodeEffects(root: PxNode$1, opts?: {
1566
+ strict?: boolean;
1567
+ }): Array<string>;
171
1568
  /**
172
- * Base interface for all SVG elements.
173
- * Represents a node in the SVG tree with optional animations and children.
1569
+ * Base shape for all SVG element nodes.
1570
+ * Open object: validated known keys + arbitrary SVG attributes whose values are
1571
+ * either primitives (static) or PxPropertyAnimation objects (in-place animation).
1572
+ * Non-recursive — excludes `children` (circular reference). Used for type extraction via PxInfer.
1573
+ *
1574
+ * `{ type:string, style?:…, [key:string]: string|number|PxPropertyAnimation }`
174
1575
  */
175
- interface PxNode {
176
- /** SVG element type (e.g., "circle", "rect", "path", "g") */
1576
+ declare const PxNodeBase: PxSchema<{
177
1577
  type: string;
178
- /** Child elements (for container elements like <g>) */
179
- children?: PxNode[];
180
- /** Animation applied to this element */
181
- animate?: PxElementAnimation;
182
- /**
183
- * FIXME - do we need it?
184
- * Style applied to this element (named reference or inline object)
185
- */
186
- style?: string | Record<string, string | number>;
187
- /** All other SVG attributes (cx, cy, r, fill, stroke, etc.) */
1578
+ } & {
1579
+ id?: string | undefined;
1580
+ meta?: any;
1581
+ effects?: ({} & {
1582
+ transformation?: ({} & {
1583
+ translate?: number[] | ({
1584
+ value: number[];
1585
+ } & {}) | ({
1586
+ keyframes: ({} & {
1587
+ time?: number | undefined;
1588
+ t?: number | undefined;
1589
+ value?: any;
1590
+ v?: any;
1591
+ easing?: string | [number, number, number, number] | undefined;
1592
+ e?: string | [number, number, number, number] | undefined;
1593
+ tangentOut?: [number, number] | undefined;
1594
+ to?: [number, number] | undefined;
1595
+ tangentIn?: [number, number] | undefined;
1596
+ ti?: [number, number] | undefined;
1597
+ selected?: boolean | undefined;
1598
+ })[];
1599
+ } & {
1600
+ autoOrient?: boolean | undefined;
1601
+ }) | undefined;
1602
+ rotate?: number | ({
1603
+ value: number;
1604
+ } & {}) | ({
1605
+ keyframes: ({} & {
1606
+ time?: number | undefined;
1607
+ t?: number | undefined;
1608
+ value?: any;
1609
+ v?: any;
1610
+ easing?: string | [number, number, number, number] | undefined;
1611
+ e?: string | [number, number, number, number] | undefined;
1612
+ tangentOut?: [number, number] | undefined;
1613
+ to?: [number, number] | undefined;
1614
+ tangentIn?: [number, number] | undefined;
1615
+ ti?: [number, number] | undefined;
1616
+ selected?: boolean | undefined;
1617
+ })[];
1618
+ } & {
1619
+ autoOrient?: boolean | undefined;
1620
+ }) | undefined;
1621
+ scale?: number[] | ({
1622
+ value: number[];
1623
+ } & {}) | ({
1624
+ keyframes: ({} & {
1625
+ time?: number | undefined;
1626
+ t?: number | undefined;
1627
+ value?: any;
1628
+ v?: any;
1629
+ easing?: string | [number, number, number, number] | undefined;
1630
+ e?: string | [number, number, number, number] | undefined;
1631
+ tangentOut?: [number, number] | undefined;
1632
+ to?: [number, number] | undefined;
1633
+ tangentIn?: [number, number] | undefined;
1634
+ ti?: [number, number] | undefined;
1635
+ selected?: boolean | undefined;
1636
+ })[];
1637
+ } & {
1638
+ autoOrient?: boolean | undefined;
1639
+ }) | undefined;
1640
+ skew?: number[] | ({
1641
+ value: number[];
1642
+ } & {}) | ({
1643
+ keyframes: ({} & {
1644
+ time?: number | undefined;
1645
+ t?: number | undefined;
1646
+ value?: any;
1647
+ v?: any;
1648
+ easing?: string | [number, number, number, number] | undefined;
1649
+ e?: string | [number, number, number, number] | undefined;
1650
+ tangentOut?: [number, number] | undefined;
1651
+ to?: [number, number] | undefined;
1652
+ tangentIn?: [number, number] | undefined;
1653
+ ti?: [number, number] | undefined;
1654
+ selected?: boolean | undefined;
1655
+ })[];
1656
+ } & {
1657
+ autoOrient?: boolean | undefined;
1658
+ }) | undefined;
1659
+ origin?: number[] | ({
1660
+ value: number[];
1661
+ } & {}) | ({
1662
+ keyframes: ({} & {
1663
+ time?: number | undefined;
1664
+ t?: number | undefined;
1665
+ value?: any;
1666
+ v?: any;
1667
+ easing?: string | [number, number, number, number] | undefined;
1668
+ e?: string | [number, number, number, number] | undefined;
1669
+ tangentOut?: [number, number] | undefined;
1670
+ to?: [number, number] | undefined;
1671
+ tangentIn?: [number, number] | undefined;
1672
+ ti?: [number, number] | undefined;
1673
+ selected?: boolean | undefined;
1674
+ })[];
1675
+ } & {
1676
+ autoOrient?: boolean | undefined;
1677
+ }) | undefined;
1678
+ }) | undefined;
1679
+ repeater?: ({} & {
1680
+ copies?: number | undefined;
1681
+ translate?: number[] | undefined;
1682
+ rotate?: number | undefined;
1683
+ scale?: number[] | undefined;
1684
+ origin?: number[] | undefined;
1685
+ }) | undefined;
1686
+ maskedBy?: ({} & {
1687
+ href?: string | undefined;
1688
+ maskType?: string | undefined;
1689
+ maskUnits?: string | undefined;
1690
+ maskContentUnits?: string | undefined;
1691
+ }) | undefined;
1692
+ trimPath?: any;
1693
+ retime?: ({} & {
1694
+ baseId?: string | undefined;
1695
+ start?: number | undefined;
1696
+ stretch?: number | undefined;
1697
+ timeCrop?: number[] | undefined;
1698
+ }) | undefined;
1699
+ isCombinedShape?: boolean | undefined;
1700
+ ref?: ({} & {
1701
+ baseId?: string | undefined;
1702
+ type?: string | undefined;
1703
+ }) | undefined;
1704
+ }) | undefined;
1705
+ animate?: Record<string, {} & {
1706
+ keyframes?: ({} & {
1707
+ time?: number | undefined;
1708
+ t?: number | undefined;
1709
+ value?: any;
1710
+ v?: any;
1711
+ easing?: string | [number, number, number, number] | undefined;
1712
+ e?: string | [number, number, number, number] | undefined;
1713
+ tangentOut?: [number, number] | undefined;
1714
+ to?: [number, number] | undefined;
1715
+ tangentIn?: [number, number] | undefined;
1716
+ ti?: [number, number] | undefined;
1717
+ selected?: boolean | undefined;
1718
+ })[] | undefined;
1719
+ kfs?: ({} & {
1720
+ time?: number | undefined;
1721
+ t?: number | undefined;
1722
+ value?: any;
1723
+ v?: any;
1724
+ easing?: string | [number, number, number, number] | undefined;
1725
+ e?: string | [number, number, number, number] | undefined;
1726
+ tangentOut?: [number, number] | undefined;
1727
+ to?: [number, number] | undefined;
1728
+ tangentIn?: [number, number] | undefined;
1729
+ ti?: [number, number] | undefined;
1730
+ selected?: boolean | undefined;
1731
+ })[] | undefined;
1732
+ loop?: boolean | ({} & {
1733
+ segmentCount?: number | undefined;
1734
+ before?: boolean | undefined;
1735
+ alternate?: boolean | undefined;
1736
+ }) | undefined;
1737
+ autoOrient?: boolean | undefined;
1738
+ }> | undefined;
1739
+ style?: string | Record<string, string | number> | undefined;
1740
+ } & {
188
1741
  [key: string]: any;
189
- }
1742
+ }, false> & {
1743
+ readonly _shape: {
1744
+ type: PxSchema<string, false>;
1745
+ id: PxSchema<string | undefined, true>;
1746
+ meta: PxSchema<any, true>;
1747
+ effects: PxSchema<({} & {
1748
+ transformation?: ({} & {
1749
+ translate?: number[] | ({
1750
+ value: number[];
1751
+ } & {}) | ({
1752
+ keyframes: ({} & {
1753
+ time?: number | undefined;
1754
+ t?: number | undefined;
1755
+ value?: any;
1756
+ v?: any;
1757
+ easing?: string | [number, number, number, number] | undefined;
1758
+ e?: string | [number, number, number, number] | undefined;
1759
+ tangentOut?: [number, number] | undefined;
1760
+ to?: [number, number] | undefined;
1761
+ tangentIn?: [number, number] | undefined;
1762
+ ti?: [number, number] | undefined;
1763
+ selected?: boolean | undefined;
1764
+ })[];
1765
+ } & {
1766
+ autoOrient?: boolean | undefined;
1767
+ }) | undefined;
1768
+ rotate?: number | ({
1769
+ value: number;
1770
+ } & {}) | ({
1771
+ keyframes: ({} & {
1772
+ time?: number | undefined;
1773
+ t?: number | undefined;
1774
+ value?: any;
1775
+ v?: any;
1776
+ easing?: string | [number, number, number, number] | undefined;
1777
+ e?: string | [number, number, number, number] | undefined;
1778
+ tangentOut?: [number, number] | undefined;
1779
+ to?: [number, number] | undefined;
1780
+ tangentIn?: [number, number] | undefined;
1781
+ ti?: [number, number] | undefined;
1782
+ selected?: boolean | undefined;
1783
+ })[];
1784
+ } & {
1785
+ autoOrient?: boolean | undefined;
1786
+ }) | undefined;
1787
+ scale?: number[] | ({
1788
+ value: number[];
1789
+ } & {}) | ({
1790
+ keyframes: ({} & {
1791
+ time?: number | undefined;
1792
+ t?: number | undefined;
1793
+ value?: any;
1794
+ v?: any;
1795
+ easing?: string | [number, number, number, number] | undefined;
1796
+ e?: string | [number, number, number, number] | undefined;
1797
+ tangentOut?: [number, number] | undefined;
1798
+ to?: [number, number] | undefined;
1799
+ tangentIn?: [number, number] | undefined;
1800
+ ti?: [number, number] | undefined;
1801
+ selected?: boolean | undefined;
1802
+ })[];
1803
+ } & {
1804
+ autoOrient?: boolean | undefined;
1805
+ }) | undefined;
1806
+ skew?: number[] | ({
1807
+ value: number[];
1808
+ } & {}) | ({
1809
+ keyframes: ({} & {
1810
+ time?: number | undefined;
1811
+ t?: number | undefined;
1812
+ value?: any;
1813
+ v?: any;
1814
+ easing?: string | [number, number, number, number] | undefined;
1815
+ e?: string | [number, number, number, number] | undefined;
1816
+ tangentOut?: [number, number] | undefined;
1817
+ to?: [number, number] | undefined;
1818
+ tangentIn?: [number, number] | undefined;
1819
+ ti?: [number, number] | undefined;
1820
+ selected?: boolean | undefined;
1821
+ })[];
1822
+ } & {
1823
+ autoOrient?: boolean | undefined;
1824
+ }) | undefined;
1825
+ origin?: number[] | ({
1826
+ value: number[];
1827
+ } & {}) | ({
1828
+ keyframes: ({} & {
1829
+ time?: number | undefined;
1830
+ t?: number | undefined;
1831
+ value?: any;
1832
+ v?: any;
1833
+ easing?: string | [number, number, number, number] | undefined;
1834
+ e?: string | [number, number, number, number] | undefined;
1835
+ tangentOut?: [number, number] | undefined;
1836
+ to?: [number, number] | undefined;
1837
+ tangentIn?: [number, number] | undefined;
1838
+ ti?: [number, number] | undefined;
1839
+ selected?: boolean | undefined;
1840
+ })[];
1841
+ } & {
1842
+ autoOrient?: boolean | undefined;
1843
+ }) | undefined;
1844
+ }) | undefined;
1845
+ repeater?: ({} & {
1846
+ copies?: number | undefined;
1847
+ translate?: number[] | undefined;
1848
+ rotate?: number | undefined;
1849
+ scale?: number[] | undefined;
1850
+ origin?: number[] | undefined;
1851
+ }) | undefined;
1852
+ maskedBy?: ({} & {
1853
+ href?: string | undefined;
1854
+ maskType?: string | undefined;
1855
+ maskUnits?: string | undefined;
1856
+ maskContentUnits?: string | undefined;
1857
+ }) | undefined;
1858
+ trimPath?: any;
1859
+ retime?: ({} & {
1860
+ baseId?: string | undefined;
1861
+ start?: number | undefined;
1862
+ stretch?: number | undefined;
1863
+ timeCrop?: number[] | undefined;
1864
+ }) | undefined;
1865
+ isCombinedShape?: boolean | undefined;
1866
+ ref?: ({} & {
1867
+ baseId?: string | undefined;
1868
+ type?: string | undefined;
1869
+ }) | undefined;
1870
+ }) | undefined, true>;
1871
+ animate: PxSchema<Record<string, {} & {
1872
+ keyframes?: ({} & {
1873
+ time?: number | undefined;
1874
+ t?: number | undefined;
1875
+ value?: any;
1876
+ v?: any;
1877
+ easing?: string | [number, number, number, number] | undefined;
1878
+ e?: string | [number, number, number, number] | undefined;
1879
+ tangentOut?: [number, number] | undefined;
1880
+ to?: [number, number] | undefined;
1881
+ tangentIn?: [number, number] | undefined;
1882
+ ti?: [number, number] | undefined;
1883
+ selected?: boolean | undefined;
1884
+ })[] | undefined;
1885
+ kfs?: ({} & {
1886
+ time?: number | undefined;
1887
+ t?: number | undefined;
1888
+ value?: any;
1889
+ v?: any;
1890
+ easing?: string | [number, number, number, number] | undefined;
1891
+ e?: string | [number, number, number, number] | undefined;
1892
+ tangentOut?: [number, number] | undefined;
1893
+ to?: [number, number] | undefined;
1894
+ tangentIn?: [number, number] | undefined;
1895
+ ti?: [number, number] | undefined;
1896
+ selected?: boolean | undefined;
1897
+ })[] | undefined;
1898
+ loop?: boolean | ({} & {
1899
+ segmentCount?: number | undefined;
1900
+ before?: boolean | undefined;
1901
+ alternate?: boolean | undefined;
1902
+ }) | undefined;
1903
+ autoOrient?: boolean | undefined;
1904
+ }> | undefined, true>;
1905
+ style: PxSchema<string | Record<string, string | number> | undefined, true>;
1906
+ };
1907
+ };
1908
+ declare let PxNodeSchema: PxSchema<any>;
1909
+
190
1910
  /**
191
- * Binds animations to existing DOM elements via CSS selectors.
192
- * Used when the SVG tree is pre-rendered and animations are applied separately.
1911
+ * Base interface for all SVG elements.
1912
+ * Extends schema-derived typed fields; adds recursive children and the open
1913
+ * index signature for arbitrary SVG attributes (cx, cy, r, fill, etc.).
1914
+ * Named properties take precedence over the index signature when accessed.
193
1915
  */
194
- interface PxBinding {
195
- /** ID targeting elements in the DOM (data-px-id="...") */
196
- id: string;
197
- /** Animation to apply to matched elements */
198
- animate: PxElementAnimation;
1916
+ interface PxNode$1 extends PxInfer<typeof PxNodeBase> {
1917
+ children?: PxNode$1[];
1918
+ [key: string]: any;
199
1919
  }
1920
+ /**
1921
+ * Extra fields present on the root SVG node, on top of PxNode.
1922
+ * Used for type extraction via PxInfer.
1923
+ *
1924
+ * `{ width?:number, height?:number, viewBox?:string, animator?:AnimatorConfig }`
1925
+ */
1926
+ declare const PxSvgNodeExtra: PxSchema<{} & {
1927
+ width?: number | undefined;
1928
+ height?: number | undefined;
1929
+ viewBox?: string | undefined;
1930
+ animator?: ({} & {
1931
+ mode?: "auto" | "webapi" | "frames" | undefined;
1932
+ duration?: number | undefined;
1933
+ delay?: number | undefined;
1934
+ iterations?: number | "infinite" | undefined;
1935
+ fill?: "forwards" | "backwards" | "both" | "none" | undefined;
1936
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
1937
+ frameRate?: number | undefined;
1938
+ trigger?: ({} & {
1939
+ startOn?: "load" | "mouseOver" | "click" | "scrollIntoView" | "programmatic" | undefined;
1940
+ outAction?: "reverse" | "continue" | "pause" | "reset" | undefined;
1941
+ scrollIntoViewThreshold?: number | undefined;
1942
+ }) | undefined;
1943
+ definitions?: ({} & {
1944
+ easings?: Record<string, [number, number, number, number]> | undefined;
1945
+ animations?: Record<string, Record<string, {} & {
1946
+ keyframes?: ({} & {
1947
+ time?: number | undefined;
1948
+ t?: number | undefined;
1949
+ value?: any;
1950
+ v?: any;
1951
+ easing?: string | [number, number, number, number] | undefined;
1952
+ e?: string | [number, number, number, number] | undefined;
1953
+ tangentOut?: [number, number] | undefined;
1954
+ to?: [number, number] | undefined;
1955
+ tangentIn?: [number, number] | undefined;
1956
+ ti?: [number, number] | undefined;
1957
+ selected?: boolean | undefined;
1958
+ })[] | undefined;
1959
+ kfs?: ({} & {
1960
+ time?: number | undefined;
1961
+ t?: number | undefined;
1962
+ value?: any;
1963
+ v?: any;
1964
+ easing?: string | [number, number, number, number] | undefined;
1965
+ e?: string | [number, number, number, number] | undefined;
1966
+ tangentOut?: [number, number] | undefined;
1967
+ to?: [number, number] | undefined;
1968
+ tangentIn?: [number, number] | undefined;
1969
+ ti?: [number, number] | undefined;
1970
+ selected?: boolean | undefined;
1971
+ })[] | undefined;
1972
+ loop?: boolean | ({} & {
1973
+ segmentCount?: number | undefined;
1974
+ before?: boolean | undefined;
1975
+ alternate?: boolean | undefined;
1976
+ }) | undefined;
1977
+ autoOrient?: boolean | undefined;
1978
+ }>> | undefined;
1979
+ styles?: Record<string, any> | undefined;
1980
+ }) | undefined;
1981
+ animate?: Record<string, string | Record<string, {} & {
1982
+ keyframes?: ({} & {
1983
+ time?: number | undefined;
1984
+ t?: number | undefined;
1985
+ value?: any;
1986
+ v?: any;
1987
+ easing?: string | [number, number, number, number] | undefined;
1988
+ e?: string | [number, number, number, number] | undefined;
1989
+ tangentOut?: [number, number] | undefined;
1990
+ to?: [number, number] | undefined;
1991
+ tangentIn?: [number, number] | undefined;
1992
+ ti?: [number, number] | undefined;
1993
+ selected?: boolean | undefined;
1994
+ })[] | undefined;
1995
+ kfs?: ({} & {
1996
+ time?: number | undefined;
1997
+ t?: number | undefined;
1998
+ value?: any;
1999
+ v?: any;
2000
+ easing?: string | [number, number, number, number] | undefined;
2001
+ e?: string | [number, number, number, number] | undefined;
2002
+ tangentOut?: [number, number] | undefined;
2003
+ to?: [number, number] | undefined;
2004
+ tangentIn?: [number, number] | undefined;
2005
+ ti?: [number, number] | undefined;
2006
+ selected?: boolean | undefined;
2007
+ })[] | undefined;
2008
+ loop?: boolean | ({} & {
2009
+ segmentCount?: number | undefined;
2010
+ before?: boolean | undefined;
2011
+ alternate?: boolean | undefined;
2012
+ }) | undefined;
2013
+ autoOrient?: boolean | undefined;
2014
+ }> | (string | Record<string, {} & {
2015
+ keyframes?: ({} & {
2016
+ time?: number | undefined;
2017
+ t?: number | undefined;
2018
+ value?: any;
2019
+ v?: any;
2020
+ easing?: string | [number, number, number, number] | undefined;
2021
+ e?: string | [number, number, number, number] | undefined;
2022
+ tangentOut?: [number, number] | undefined;
2023
+ to?: [number, number] | undefined;
2024
+ tangentIn?: [number, number] | undefined;
2025
+ ti?: [number, number] | undefined;
2026
+ selected?: boolean | undefined;
2027
+ })[] | undefined;
2028
+ kfs?: ({} & {
2029
+ time?: number | undefined;
2030
+ t?: number | undefined;
2031
+ value?: any;
2032
+ v?: any;
2033
+ easing?: string | [number, number, number, number] | undefined;
2034
+ e?: string | [number, number, number, number] | undefined;
2035
+ tangentOut?: [number, number] | undefined;
2036
+ to?: [number, number] | undefined;
2037
+ tangentIn?: [number, number] | undefined;
2038
+ ti?: [number, number] | undefined;
2039
+ selected?: boolean | undefined;
2040
+ })[] | undefined;
2041
+ loop?: boolean | ({} & {
2042
+ segmentCount?: number | undefined;
2043
+ before?: boolean | undefined;
2044
+ alternate?: boolean | undefined;
2045
+ }) | undefined;
2046
+ autoOrient?: boolean | undefined;
2047
+ }>)[]> | undefined;
2048
+ debug?: boolean | undefined;
2049
+ debugInstName?: string | undefined;
2050
+ }) | undefined;
2051
+ }, false> & {
2052
+ readonly _shape: {
2053
+ width: PxSchema<number | undefined, true>;
2054
+ height: PxSchema<number | undefined, true>;
2055
+ viewBox: PxSchema<string | undefined, true>;
2056
+ animator: PxSchema<({} & {
2057
+ mode?: "auto" | "webapi" | "frames" | undefined;
2058
+ duration?: number | undefined;
2059
+ delay?: number | undefined;
2060
+ iterations?: number | "infinite" | undefined;
2061
+ fill?: "forwards" | "backwards" | "both" | "none" | undefined;
2062
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
2063
+ frameRate?: number | undefined;
2064
+ trigger?: ({} & {
2065
+ startOn?: "load" | "mouseOver" | "click" | "scrollIntoView" | "programmatic" | undefined;
2066
+ outAction?: "reverse" | "continue" | "pause" | "reset" | undefined;
2067
+ scrollIntoViewThreshold?: number | undefined;
2068
+ }) | undefined;
2069
+ definitions?: ({} & {
2070
+ easings?: Record<string, [number, number, number, number]> | undefined;
2071
+ animations?: Record<string, Record<string, {} & {
2072
+ keyframes?: ({} & {
2073
+ time?: number | undefined;
2074
+ t?: number | undefined;
2075
+ value?: any;
2076
+ v?: any;
2077
+ easing?: string | [number, number, number, number] | undefined;
2078
+ e?: string | [number, number, number, number] | undefined;
2079
+ tangentOut?: [number, number] | undefined;
2080
+ to?: [number, number] | undefined;
2081
+ tangentIn?: [number, number] | undefined;
2082
+ ti?: [number, number] | undefined;
2083
+ selected?: boolean | undefined;
2084
+ })[] | undefined;
2085
+ kfs?: ({} & {
2086
+ time?: number | undefined;
2087
+ t?: number | undefined;
2088
+ value?: any;
2089
+ v?: any;
2090
+ easing?: string | [number, number, number, number] | undefined;
2091
+ e?: string | [number, number, number, number] | undefined;
2092
+ tangentOut?: [number, number] | undefined;
2093
+ to?: [number, number] | undefined;
2094
+ tangentIn?: [number, number] | undefined;
2095
+ ti?: [number, number] | undefined;
2096
+ selected?: boolean | undefined;
2097
+ })[] | undefined;
2098
+ loop?: boolean | ({} & {
2099
+ segmentCount?: number | undefined;
2100
+ before?: boolean | undefined;
2101
+ alternate?: boolean | undefined;
2102
+ }) | undefined;
2103
+ autoOrient?: boolean | undefined;
2104
+ }>> | undefined;
2105
+ styles?: Record<string, any> | undefined;
2106
+ }) | undefined;
2107
+ animate?: Record<string, string | Record<string, {} & {
2108
+ keyframes?: ({} & {
2109
+ time?: number | undefined;
2110
+ t?: number | undefined;
2111
+ value?: any;
2112
+ v?: any;
2113
+ easing?: string | [number, number, number, number] | undefined;
2114
+ e?: string | [number, number, number, number] | undefined;
2115
+ tangentOut?: [number, number] | undefined;
2116
+ to?: [number, number] | undefined;
2117
+ tangentIn?: [number, number] | undefined;
2118
+ ti?: [number, number] | undefined;
2119
+ selected?: boolean | undefined;
2120
+ })[] | undefined;
2121
+ kfs?: ({} & {
2122
+ time?: number | undefined;
2123
+ t?: number | undefined;
2124
+ value?: any;
2125
+ v?: any;
2126
+ easing?: string | [number, number, number, number] | undefined;
2127
+ e?: string | [number, number, number, number] | undefined;
2128
+ tangentOut?: [number, number] | undefined;
2129
+ to?: [number, number] | undefined;
2130
+ tangentIn?: [number, number] | undefined;
2131
+ ti?: [number, number] | undefined;
2132
+ selected?: boolean | undefined;
2133
+ })[] | undefined;
2134
+ loop?: boolean | ({} & {
2135
+ segmentCount?: number | undefined;
2136
+ before?: boolean | undefined;
2137
+ alternate?: boolean | undefined;
2138
+ }) | undefined;
2139
+ autoOrient?: boolean | undefined;
2140
+ }> | (string | Record<string, {} & {
2141
+ keyframes?: ({} & {
2142
+ time?: number | undefined;
2143
+ t?: number | undefined;
2144
+ value?: any;
2145
+ v?: any;
2146
+ easing?: string | [number, number, number, number] | undefined;
2147
+ e?: string | [number, number, number, number] | undefined;
2148
+ tangentOut?: [number, number] | undefined;
2149
+ to?: [number, number] | undefined;
2150
+ tangentIn?: [number, number] | undefined;
2151
+ ti?: [number, number] | undefined;
2152
+ selected?: boolean | undefined;
2153
+ })[] | undefined;
2154
+ kfs?: ({} & {
2155
+ time?: number | undefined;
2156
+ t?: number | undefined;
2157
+ value?: any;
2158
+ v?: any;
2159
+ easing?: string | [number, number, number, number] | undefined;
2160
+ e?: string | [number, number, number, number] | undefined;
2161
+ tangentOut?: [number, number] | undefined;
2162
+ to?: [number, number] | undefined;
2163
+ tangentIn?: [number, number] | undefined;
2164
+ ti?: [number, number] | undefined;
2165
+ selected?: boolean | undefined;
2166
+ })[] | undefined;
2167
+ loop?: boolean | ({} & {
2168
+ segmentCount?: number | undefined;
2169
+ before?: boolean | undefined;
2170
+ alternate?: boolean | undefined;
2171
+ }) | undefined;
2172
+ autoOrient?: boolean | undefined;
2173
+ }>)[]> | undefined;
2174
+ debug?: boolean | undefined;
2175
+ debugInstName?: string | undefined;
2176
+ }) | undefined, true>;
2177
+ };
2178
+ };
200
2179
  /**
201
2180
  * Root SVG element containing the entire animated graphic.
202
- * Extends PxNode with SVG-specific properties and global configuration.
203
- */
204
- interface PxSvgNode extends PxNode {
205
- /** FIXME - do we need it?
206
- * SVG viewport width */
207
- width?: number;
208
- /** FIXME - do we need it?
209
- * SVG viewport height */
210
- height?: number;
211
- /** FIXME - do we need it?
212
- * SVG viewBox attribute defining coordinate system */
213
- viewBox?: string;
214
- /** Global animation configuration */
215
- animator?: PxAnimatorConfig;
216
- /** Reusable definitions library */
217
- defs?: PxDefs;
218
- /** Animation bindings for pre-rendered DOM elements */
219
- bindings?: PxBinding[];
220
- design?: PxNode;
2181
+ * Extends PxNode (inheriting the open index signature) plus schema-derived
2182
+ * SVG-root fields.
2183
+ */
2184
+ interface PxSvgNode extends PxNode$1, PxInfer<typeof PxSvgNodeExtra> {
221
2185
  }
2186
+ /**
2187
+ * Root SVG document schema. Enforces `type === 'svg'` to distinguish from child nodes.
2188
+ * This is the root type for the entire file format.
2189
+ *
2190
+ * `{ type:'svg', style?:…, width?:number, height?:number,
2191
+ * viewBox?:string, animator?:AnimatorConfig, children?:PxNode[],
2192
+ * [svgAttr]: string|number|PxPropertyAnimation }`
2193
+ */
2194
+ declare const PxAnimatedSvgDocumentSchema: PxSchema<{
2195
+ type: "svg";
2196
+ } & {
2197
+ children?: any[] | undefined;
2198
+ width?: number | undefined;
2199
+ height?: number | undefined;
2200
+ viewBox?: string | undefined;
2201
+ animator?: ({} & {
2202
+ mode?: "auto" | "webapi" | "frames" | undefined;
2203
+ duration?: number | undefined;
2204
+ delay?: number | undefined;
2205
+ iterations?: number | "infinite" | undefined;
2206
+ fill?: "forwards" | "backwards" | "both" | "none" | undefined;
2207
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
2208
+ frameRate?: number | undefined;
2209
+ trigger?: ({} & {
2210
+ startOn?: "load" | "mouseOver" | "click" | "scrollIntoView" | "programmatic" | undefined;
2211
+ outAction?: "reverse" | "continue" | "pause" | "reset" | undefined;
2212
+ scrollIntoViewThreshold?: number | undefined;
2213
+ }) | undefined;
2214
+ definitions?: ({} & {
2215
+ easings?: Record<string, [number, number, number, number]> | undefined;
2216
+ animations?: Record<string, Record<string, {} & {
2217
+ keyframes?: ({} & {
2218
+ time?: number | undefined;
2219
+ t?: number | undefined;
2220
+ value?: any;
2221
+ v?: any;
2222
+ easing?: string | [number, number, number, number] | undefined;
2223
+ e?: string | [number, number, number, number] | undefined;
2224
+ tangentOut?: [number, number] | undefined;
2225
+ to?: [number, number] | undefined;
2226
+ tangentIn?: [number, number] | undefined;
2227
+ ti?: [number, number] | undefined;
2228
+ selected?: boolean | undefined;
2229
+ })[] | undefined;
2230
+ kfs?: ({} & {
2231
+ time?: number | undefined;
2232
+ t?: number | undefined;
2233
+ value?: any;
2234
+ v?: any;
2235
+ easing?: string | [number, number, number, number] | undefined;
2236
+ e?: string | [number, number, number, number] | undefined;
2237
+ tangentOut?: [number, number] | undefined;
2238
+ to?: [number, number] | undefined;
2239
+ tangentIn?: [number, number] | undefined;
2240
+ ti?: [number, number] | undefined;
2241
+ selected?: boolean | undefined;
2242
+ })[] | undefined;
2243
+ loop?: boolean | ({} & {
2244
+ segmentCount?: number | undefined;
2245
+ before?: boolean | undefined;
2246
+ alternate?: boolean | undefined;
2247
+ }) | undefined;
2248
+ autoOrient?: boolean | undefined;
2249
+ }>> | undefined;
2250
+ styles?: Record<string, any> | undefined;
2251
+ }) | undefined;
2252
+ animate?: Record<string, string | Record<string, {} & {
2253
+ keyframes?: ({} & {
2254
+ time?: number | undefined;
2255
+ t?: number | undefined;
2256
+ value?: any;
2257
+ v?: any;
2258
+ easing?: string | [number, number, number, number] | undefined;
2259
+ e?: string | [number, number, number, number] | undefined;
2260
+ tangentOut?: [number, number] | undefined;
2261
+ to?: [number, number] | undefined;
2262
+ tangentIn?: [number, number] | undefined;
2263
+ ti?: [number, number] | undefined;
2264
+ selected?: boolean | undefined;
2265
+ })[] | undefined;
2266
+ kfs?: ({} & {
2267
+ time?: number | undefined;
2268
+ t?: number | undefined;
2269
+ value?: any;
2270
+ v?: any;
2271
+ easing?: string | [number, number, number, number] | undefined;
2272
+ e?: string | [number, number, number, number] | undefined;
2273
+ tangentOut?: [number, number] | undefined;
2274
+ to?: [number, number] | undefined;
2275
+ tangentIn?: [number, number] | undefined;
2276
+ ti?: [number, number] | undefined;
2277
+ selected?: boolean | undefined;
2278
+ })[] | undefined;
2279
+ loop?: boolean | ({} & {
2280
+ segmentCount?: number | undefined;
2281
+ before?: boolean | undefined;
2282
+ alternate?: boolean | undefined;
2283
+ }) | undefined;
2284
+ autoOrient?: boolean | undefined;
2285
+ }> | (string | Record<string, {} & {
2286
+ keyframes?: ({} & {
2287
+ time?: number | undefined;
2288
+ t?: number | undefined;
2289
+ value?: any;
2290
+ v?: any;
2291
+ easing?: string | [number, number, number, number] | undefined;
2292
+ e?: string | [number, number, number, number] | undefined;
2293
+ tangentOut?: [number, number] | undefined;
2294
+ to?: [number, number] | undefined;
2295
+ tangentIn?: [number, number] | undefined;
2296
+ ti?: [number, number] | undefined;
2297
+ selected?: boolean | undefined;
2298
+ })[] | undefined;
2299
+ kfs?: ({} & {
2300
+ time?: number | undefined;
2301
+ t?: number | undefined;
2302
+ value?: any;
2303
+ v?: any;
2304
+ easing?: string | [number, number, number, number] | undefined;
2305
+ e?: string | [number, number, number, number] | undefined;
2306
+ tangentOut?: [number, number] | undefined;
2307
+ to?: [number, number] | undefined;
2308
+ tangentIn?: [number, number] | undefined;
2309
+ ti?: [number, number] | undefined;
2310
+ selected?: boolean | undefined;
2311
+ })[] | undefined;
2312
+ loop?: boolean | ({} & {
2313
+ segmentCount?: number | undefined;
2314
+ before?: boolean | undefined;
2315
+ alternate?: boolean | undefined;
2316
+ }) | undefined;
2317
+ autoOrient?: boolean | undefined;
2318
+ }>)[]> | undefined;
2319
+ debug?: boolean | undefined;
2320
+ debugInstName?: string | undefined;
2321
+ }) | undefined;
2322
+ id?: string | undefined;
2323
+ meta?: any;
2324
+ effects?: ({} & {
2325
+ transformation?: ({} & {
2326
+ translate?: number[] | ({
2327
+ value: number[];
2328
+ } & {}) | ({
2329
+ keyframes: ({} & {
2330
+ time?: number | undefined;
2331
+ t?: number | undefined;
2332
+ value?: any;
2333
+ v?: any;
2334
+ easing?: string | [number, number, number, number] | undefined;
2335
+ e?: string | [number, number, number, number] | undefined;
2336
+ tangentOut?: [number, number] | undefined;
2337
+ to?: [number, number] | undefined;
2338
+ tangentIn?: [number, number] | undefined;
2339
+ ti?: [number, number] | undefined;
2340
+ selected?: boolean | undefined;
2341
+ })[];
2342
+ } & {
2343
+ autoOrient?: boolean | undefined;
2344
+ }) | undefined;
2345
+ rotate?: number | ({
2346
+ value: number;
2347
+ } & {}) | ({
2348
+ keyframes: ({} & {
2349
+ time?: number | undefined;
2350
+ t?: number | undefined;
2351
+ value?: any;
2352
+ v?: any;
2353
+ easing?: string | [number, number, number, number] | undefined;
2354
+ e?: string | [number, number, number, number] | undefined;
2355
+ tangentOut?: [number, number] | undefined;
2356
+ to?: [number, number] | undefined;
2357
+ tangentIn?: [number, number] | undefined;
2358
+ ti?: [number, number] | undefined;
2359
+ selected?: boolean | undefined;
2360
+ })[];
2361
+ } & {
2362
+ autoOrient?: boolean | undefined;
2363
+ }) | undefined;
2364
+ scale?: number[] | ({
2365
+ value: number[];
2366
+ } & {}) | ({
2367
+ keyframes: ({} & {
2368
+ time?: number | undefined;
2369
+ t?: number | undefined;
2370
+ value?: any;
2371
+ v?: any;
2372
+ easing?: string | [number, number, number, number] | undefined;
2373
+ e?: string | [number, number, number, number] | undefined;
2374
+ tangentOut?: [number, number] | undefined;
2375
+ to?: [number, number] | undefined;
2376
+ tangentIn?: [number, number] | undefined;
2377
+ ti?: [number, number] | undefined;
2378
+ selected?: boolean | undefined;
2379
+ })[];
2380
+ } & {
2381
+ autoOrient?: boolean | undefined;
2382
+ }) | undefined;
2383
+ skew?: number[] | ({
2384
+ value: number[];
2385
+ } & {}) | ({
2386
+ keyframes: ({} & {
2387
+ time?: number | undefined;
2388
+ t?: number | undefined;
2389
+ value?: any;
2390
+ v?: any;
2391
+ easing?: string | [number, number, number, number] | undefined;
2392
+ e?: string | [number, number, number, number] | undefined;
2393
+ tangentOut?: [number, number] | undefined;
2394
+ to?: [number, number] | undefined;
2395
+ tangentIn?: [number, number] | undefined;
2396
+ ti?: [number, number] | undefined;
2397
+ selected?: boolean | undefined;
2398
+ })[];
2399
+ } & {
2400
+ autoOrient?: boolean | undefined;
2401
+ }) | undefined;
2402
+ origin?: number[] | ({
2403
+ value: number[];
2404
+ } & {}) | ({
2405
+ keyframes: ({} & {
2406
+ time?: number | undefined;
2407
+ t?: number | undefined;
2408
+ value?: any;
2409
+ v?: any;
2410
+ easing?: string | [number, number, number, number] | undefined;
2411
+ e?: string | [number, number, number, number] | undefined;
2412
+ tangentOut?: [number, number] | undefined;
2413
+ to?: [number, number] | undefined;
2414
+ tangentIn?: [number, number] | undefined;
2415
+ ti?: [number, number] | undefined;
2416
+ selected?: boolean | undefined;
2417
+ })[];
2418
+ } & {
2419
+ autoOrient?: boolean | undefined;
2420
+ }) | undefined;
2421
+ }) | undefined;
2422
+ repeater?: ({} & {
2423
+ copies?: number | undefined;
2424
+ translate?: number[] | undefined;
2425
+ rotate?: number | undefined;
2426
+ scale?: number[] | undefined;
2427
+ origin?: number[] | undefined;
2428
+ }) | undefined;
2429
+ maskedBy?: ({} & {
2430
+ href?: string | undefined;
2431
+ maskType?: string | undefined;
2432
+ maskUnits?: string | undefined;
2433
+ maskContentUnits?: string | undefined;
2434
+ }) | undefined;
2435
+ trimPath?: any;
2436
+ retime?: ({} & {
2437
+ baseId?: string | undefined;
2438
+ start?: number | undefined;
2439
+ stretch?: number | undefined;
2440
+ timeCrop?: number[] | undefined;
2441
+ }) | undefined;
2442
+ isCombinedShape?: boolean | undefined;
2443
+ ref?: ({} & {
2444
+ baseId?: string | undefined;
2445
+ type?: string | undefined;
2446
+ }) | undefined;
2447
+ }) | undefined;
2448
+ animate?: Record<string, {} & {
2449
+ keyframes?: ({} & {
2450
+ time?: number | undefined;
2451
+ t?: number | undefined;
2452
+ value?: any;
2453
+ v?: any;
2454
+ easing?: string | [number, number, number, number] | undefined;
2455
+ e?: string | [number, number, number, number] | undefined;
2456
+ tangentOut?: [number, number] | undefined;
2457
+ to?: [number, number] | undefined;
2458
+ tangentIn?: [number, number] | undefined;
2459
+ ti?: [number, number] | undefined;
2460
+ selected?: boolean | undefined;
2461
+ })[] | undefined;
2462
+ kfs?: ({} & {
2463
+ time?: number | undefined;
2464
+ t?: number | undefined;
2465
+ value?: any;
2466
+ v?: any;
2467
+ easing?: string | [number, number, number, number] | undefined;
2468
+ e?: string | [number, number, number, number] | undefined;
2469
+ tangentOut?: [number, number] | undefined;
2470
+ to?: [number, number] | undefined;
2471
+ tangentIn?: [number, number] | undefined;
2472
+ ti?: [number, number] | undefined;
2473
+ selected?: boolean | undefined;
2474
+ })[] | undefined;
2475
+ loop?: boolean | ({} & {
2476
+ segmentCount?: number | undefined;
2477
+ before?: boolean | undefined;
2478
+ alternate?: boolean | undefined;
2479
+ }) | undefined;
2480
+ autoOrient?: boolean | undefined;
2481
+ }> | undefined;
2482
+ style?: string | Record<string, string | number> | undefined;
2483
+ } & {
2484
+ [key: string]: any;
2485
+ }, false> & {
2486
+ readonly _shape: {
2487
+ type: PxSchema<"svg", false>;
2488
+ children: PxSchema<any[] | undefined, true>;
2489
+ width: PxSchema<number | undefined, true>;
2490
+ height: PxSchema<number | undefined, true>;
2491
+ viewBox: PxSchema<string | undefined, true>;
2492
+ animator: PxSchema<({} & {
2493
+ mode?: "auto" | "webapi" | "frames" | undefined;
2494
+ duration?: number | undefined;
2495
+ delay?: number | undefined;
2496
+ iterations?: number | "infinite" | undefined;
2497
+ fill?: "forwards" | "backwards" | "both" | "none" | undefined;
2498
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
2499
+ frameRate?: number | undefined;
2500
+ trigger?: ({} & {
2501
+ startOn?: "load" | "mouseOver" | "click" | "scrollIntoView" | "programmatic" | undefined;
2502
+ outAction?: "reverse" | "continue" | "pause" | "reset" | undefined;
2503
+ scrollIntoViewThreshold?: number | undefined;
2504
+ }) | undefined;
2505
+ definitions?: ({} & {
2506
+ easings?: Record<string, [number, number, number, number]> | undefined;
2507
+ animations?: Record<string, Record<string, {} & {
2508
+ keyframes?: ({} & {
2509
+ time?: number | undefined;
2510
+ t?: number | undefined;
2511
+ value?: any;
2512
+ v?: any;
2513
+ easing?: string | [number, number, number, number] | undefined;
2514
+ e?: string | [number, number, number, number] | undefined;
2515
+ tangentOut?: [number, number] | undefined;
2516
+ to?: [number, number] | undefined;
2517
+ tangentIn?: [number, number] | undefined;
2518
+ ti?: [number, number] | undefined;
2519
+ selected?: boolean | undefined;
2520
+ })[] | undefined;
2521
+ kfs?: ({} & {
2522
+ time?: number | undefined;
2523
+ t?: number | undefined;
2524
+ value?: any;
2525
+ v?: any;
2526
+ easing?: string | [number, number, number, number] | undefined;
2527
+ e?: string | [number, number, number, number] | undefined;
2528
+ tangentOut?: [number, number] | undefined;
2529
+ to?: [number, number] | undefined;
2530
+ tangentIn?: [number, number] | undefined;
2531
+ ti?: [number, number] | undefined;
2532
+ selected?: boolean | undefined;
2533
+ })[] | undefined;
2534
+ loop?: boolean | ({} & {
2535
+ segmentCount?: number | undefined;
2536
+ before?: boolean | undefined;
2537
+ alternate?: boolean | undefined;
2538
+ }) | undefined;
2539
+ autoOrient?: boolean | undefined;
2540
+ }>> | undefined;
2541
+ styles?: Record<string, any> | undefined;
2542
+ }) | undefined;
2543
+ animate?: Record<string, string | Record<string, {} & {
2544
+ keyframes?: ({} & {
2545
+ time?: number | undefined;
2546
+ t?: number | undefined;
2547
+ value?: any;
2548
+ v?: any;
2549
+ easing?: string | [number, number, number, number] | undefined;
2550
+ e?: string | [number, number, number, number] | undefined;
2551
+ tangentOut?: [number, number] | undefined;
2552
+ to?: [number, number] | undefined;
2553
+ tangentIn?: [number, number] | undefined;
2554
+ ti?: [number, number] | undefined;
2555
+ selected?: boolean | undefined;
2556
+ })[] | undefined;
2557
+ kfs?: ({} & {
2558
+ time?: number | undefined;
2559
+ t?: number | undefined;
2560
+ value?: any;
2561
+ v?: any;
2562
+ easing?: string | [number, number, number, number] | undefined;
2563
+ e?: string | [number, number, number, number] | undefined;
2564
+ tangentOut?: [number, number] | undefined;
2565
+ to?: [number, number] | undefined;
2566
+ tangentIn?: [number, number] | undefined;
2567
+ ti?: [number, number] | undefined;
2568
+ selected?: boolean | undefined;
2569
+ })[] | undefined;
2570
+ loop?: boolean | ({} & {
2571
+ segmentCount?: number | undefined;
2572
+ before?: boolean | undefined;
2573
+ alternate?: boolean | undefined;
2574
+ }) | undefined;
2575
+ autoOrient?: boolean | undefined;
2576
+ }> | (string | Record<string, {} & {
2577
+ keyframes?: ({} & {
2578
+ time?: number | undefined;
2579
+ t?: number | undefined;
2580
+ value?: any;
2581
+ v?: any;
2582
+ easing?: string | [number, number, number, number] | undefined;
2583
+ e?: string | [number, number, number, number] | undefined;
2584
+ tangentOut?: [number, number] | undefined;
2585
+ to?: [number, number] | undefined;
2586
+ tangentIn?: [number, number] | undefined;
2587
+ ti?: [number, number] | undefined;
2588
+ selected?: boolean | undefined;
2589
+ })[] | undefined;
2590
+ kfs?: ({} & {
2591
+ time?: number | undefined;
2592
+ t?: number | undefined;
2593
+ value?: any;
2594
+ v?: any;
2595
+ easing?: string | [number, number, number, number] | undefined;
2596
+ e?: string | [number, number, number, number] | undefined;
2597
+ tangentOut?: [number, number] | undefined;
2598
+ to?: [number, number] | undefined;
2599
+ tangentIn?: [number, number] | undefined;
2600
+ ti?: [number, number] | undefined;
2601
+ selected?: boolean | undefined;
2602
+ })[] | undefined;
2603
+ loop?: boolean | ({} & {
2604
+ segmentCount?: number | undefined;
2605
+ before?: boolean | undefined;
2606
+ alternate?: boolean | undefined;
2607
+ }) | undefined;
2608
+ autoOrient?: boolean | undefined;
2609
+ }>)[]> | undefined;
2610
+ debug?: boolean | undefined;
2611
+ debugInstName?: string | undefined;
2612
+ }) | undefined, true>;
2613
+ id: PxSchema<string | undefined, true>;
2614
+ meta: PxSchema<any, true>;
2615
+ effects: PxSchema<({} & {
2616
+ transformation?: ({} & {
2617
+ translate?: number[] | ({
2618
+ value: number[];
2619
+ } & {}) | ({
2620
+ keyframes: ({} & {
2621
+ time?: number | undefined;
2622
+ t?: number | undefined;
2623
+ value?: any;
2624
+ v?: any;
2625
+ easing?: string | [number, number, number, number] | undefined;
2626
+ e?: string | [number, number, number, number] | undefined;
2627
+ tangentOut?: [number, number] | undefined;
2628
+ to?: [number, number] | undefined;
2629
+ tangentIn?: [number, number] | undefined;
2630
+ ti?: [number, number] | undefined;
2631
+ selected?: boolean | undefined;
2632
+ })[];
2633
+ } & {
2634
+ autoOrient?: boolean | undefined;
2635
+ }) | undefined;
2636
+ rotate?: number | ({
2637
+ value: number;
2638
+ } & {}) | ({
2639
+ keyframes: ({} & {
2640
+ time?: number | undefined;
2641
+ t?: number | undefined;
2642
+ value?: any;
2643
+ v?: any;
2644
+ easing?: string | [number, number, number, number] | undefined;
2645
+ e?: string | [number, number, number, number] | undefined;
2646
+ tangentOut?: [number, number] | undefined;
2647
+ to?: [number, number] | undefined;
2648
+ tangentIn?: [number, number] | undefined;
2649
+ ti?: [number, number] | undefined;
2650
+ selected?: boolean | undefined;
2651
+ })[];
2652
+ } & {
2653
+ autoOrient?: boolean | undefined;
2654
+ }) | undefined;
2655
+ scale?: number[] | ({
2656
+ value: number[];
2657
+ } & {}) | ({
2658
+ keyframes: ({} & {
2659
+ time?: number | undefined;
2660
+ t?: number | undefined;
2661
+ value?: any;
2662
+ v?: any;
2663
+ easing?: string | [number, number, number, number] | undefined;
2664
+ e?: string | [number, number, number, number] | undefined;
2665
+ tangentOut?: [number, number] | undefined;
2666
+ to?: [number, number] | undefined;
2667
+ tangentIn?: [number, number] | undefined;
2668
+ ti?: [number, number] | undefined;
2669
+ selected?: boolean | undefined;
2670
+ })[];
2671
+ } & {
2672
+ autoOrient?: boolean | undefined;
2673
+ }) | undefined;
2674
+ skew?: number[] | ({
2675
+ value: number[];
2676
+ } & {}) | ({
2677
+ keyframes: ({} & {
2678
+ time?: number | undefined;
2679
+ t?: number | undefined;
2680
+ value?: any;
2681
+ v?: any;
2682
+ easing?: string | [number, number, number, number] | undefined;
2683
+ e?: string | [number, number, number, number] | undefined;
2684
+ tangentOut?: [number, number] | undefined;
2685
+ to?: [number, number] | undefined;
2686
+ tangentIn?: [number, number] | undefined;
2687
+ ti?: [number, number] | undefined;
2688
+ selected?: boolean | undefined;
2689
+ })[];
2690
+ } & {
2691
+ autoOrient?: boolean | undefined;
2692
+ }) | undefined;
2693
+ origin?: number[] | ({
2694
+ value: number[];
2695
+ } & {}) | ({
2696
+ keyframes: ({} & {
2697
+ time?: number | undefined;
2698
+ t?: number | undefined;
2699
+ value?: any;
2700
+ v?: any;
2701
+ easing?: string | [number, number, number, number] | undefined;
2702
+ e?: string | [number, number, number, number] | undefined;
2703
+ tangentOut?: [number, number] | undefined;
2704
+ to?: [number, number] | undefined;
2705
+ tangentIn?: [number, number] | undefined;
2706
+ ti?: [number, number] | undefined;
2707
+ selected?: boolean | undefined;
2708
+ })[];
2709
+ } & {
2710
+ autoOrient?: boolean | undefined;
2711
+ }) | undefined;
2712
+ }) | undefined;
2713
+ repeater?: ({} & {
2714
+ copies?: number | undefined;
2715
+ translate?: number[] | undefined;
2716
+ rotate?: number | undefined;
2717
+ scale?: number[] | undefined;
2718
+ origin?: number[] | undefined;
2719
+ }) | undefined;
2720
+ maskedBy?: ({} & {
2721
+ href?: string | undefined;
2722
+ maskType?: string | undefined;
2723
+ maskUnits?: string | undefined;
2724
+ maskContentUnits?: string | undefined;
2725
+ }) | undefined;
2726
+ trimPath?: any;
2727
+ retime?: ({} & {
2728
+ baseId?: string | undefined;
2729
+ start?: number | undefined;
2730
+ stretch?: number | undefined;
2731
+ timeCrop?: number[] | undefined;
2732
+ }) | undefined;
2733
+ isCombinedShape?: boolean | undefined;
2734
+ ref?: ({} & {
2735
+ baseId?: string | undefined;
2736
+ type?: string | undefined;
2737
+ }) | undefined;
2738
+ }) | undefined, true>;
2739
+ animate: PxSchema<Record<string, {} & {
2740
+ keyframes?: ({} & {
2741
+ time?: number | undefined;
2742
+ t?: number | undefined;
2743
+ value?: any;
2744
+ v?: any;
2745
+ easing?: string | [number, number, number, number] | undefined;
2746
+ e?: string | [number, number, number, number] | undefined;
2747
+ tangentOut?: [number, number] | undefined;
2748
+ to?: [number, number] | undefined;
2749
+ tangentIn?: [number, number] | undefined;
2750
+ ti?: [number, number] | undefined;
2751
+ selected?: boolean | undefined;
2752
+ })[] | undefined;
2753
+ kfs?: ({} & {
2754
+ time?: number | undefined;
2755
+ t?: number | undefined;
2756
+ value?: any;
2757
+ v?: any;
2758
+ easing?: string | [number, number, number, number] | undefined;
2759
+ e?: string | [number, number, number, number] | undefined;
2760
+ tangentOut?: [number, number] | undefined;
2761
+ to?: [number, number] | undefined;
2762
+ tangentIn?: [number, number] | undefined;
2763
+ ti?: [number, number] | undefined;
2764
+ selected?: boolean | undefined;
2765
+ })[] | undefined;
2766
+ loop?: boolean | ({} & {
2767
+ segmentCount?: number | undefined;
2768
+ before?: boolean | undefined;
2769
+ alternate?: boolean | undefined;
2770
+ }) | undefined;
2771
+ autoOrient?: boolean | undefined;
2772
+ }> | undefined, true>;
2773
+ style: PxSchema<string | Record<string, string | number> | undefined, true>;
2774
+ };
2775
+ };
222
2776
  /**
223
2777
  * The complete animated SVG document.
224
2778
  * This is the root type for the entire file format.
@@ -238,18 +2792,22 @@ interface PxAnimatorCallbacksConfig {
238
2792
  /** Callback executed when the animation is removed. */
239
2793
  onRemove?: () => void;
240
2794
  }
241
- type PxPoint2D = Array<number>;
2795
+ declare const PxBezierPathSchema: PxSchema<{
2796
+ v: number[][];
2797
+ } & {
2798
+ i?: number[][] | undefined;
2799
+ o?: number[][] | undefined;
2800
+ c?: boolean | undefined;
2801
+ }, false> & {
2802
+ readonly _shape: {
2803
+ v: PxSchema<number[][], false>;
2804
+ i: PxSchema<number[][] | undefined, true>;
2805
+ o: PxSchema<number[][] | undefined, true>;
2806
+ c: PxSchema<boolean | undefined, true>;
2807
+ };
2808
+ };
242
2809
  /** Represents a vector path for SVG shape animations. */
243
- interface PxBezierPath {
244
- /** An array of vertex points [[x, y], ...]. */
245
- v: Array<PxPoint2D>;
246
- /** An array of 'in' tangent handles for each vertex [[x, y], ...]. */
247
- i?: Array<PxPoint2D>;
248
- /** An array of 'out' tangent handles for each vertex [[x, y], ...]. */
249
- o?: Array<PxPoint2D>;
250
- /** A boolean indicating if the path is closed. */
251
- c?: boolean;
252
- }
2810
+ type PxBezierPath = PxInfer<typeof PxBezierPathSchema>;
253
2811
  /** Basic animation controls common to all animator types. */
254
2812
  interface PxBasicAnimatorAPI {
255
2813
  isReady(): boolean;
@@ -283,15 +2841,14 @@ interface PxValidationResult {
283
2841
  errors: string[];
284
2842
  }
285
2843
  /**
286
- * Deep validation of PxAnimatedSvgDocument.
287
- * Validates all nested properties against their type definitions.
2844
+ * Deep validation of PxAnimatedSvgDocument using the PxAnimatedSvgDocumentSchema.
288
2845
  * @returns PxValidationResult with valid flag and array of error messages
289
2846
  */
290
2847
  declare function isPxElementFileFormatDeep(fileJson: any): PxValidationResult;
291
2848
  declare function getAnimatorConfig(doc: PxAnimatedSvgDocument): PxAnimatorConfig | undefined;
292
2849
  declare function getDefs(doc: PxAnimatedSvgDocument): PxDefs | undefined;
293
2850
  declare function getBindings(doc: PxAnimatedSvgDocument): PxBinding[] | undefined;
294
- declare function getChildren(doc: PxAnimatedSvgDocument): PxNode[] | undefined;
2851
+ declare function getChildren(doc: PxAnimatedSvgDocument): PxNode$1[] | undefined;
295
2852
 
296
2853
  /**
297
2854
  * Platform adapter interface for abstracting DOM-specific operations.
@@ -349,16 +2906,28 @@ declare function generateNewIds(doc: PxAnimatedSvgDocument): PxAnimatedSvgDocume
349
2906
  * @returns An PxAnimatorAPI instance to programmatically control the animation.
350
2907
  */
351
2908
  declare function createAnimatorImpl(doc: PxAnimatedSvgDocument, adapter?: PxPlatformAdapter, callbacks?: PxAnimatorCallbacksConfig, containerElement?: string | Element): PxAnimatorAPI;
2909
+ declare const PX_ANIMATOR_DATA_KEY = "data";
2910
+ interface PxAnimatorOptions {
2911
+ /** URL to fetch the animation document from. Provide either this or `data`, not both. */
2912
+ src?: string;
2913
+ /** Inline animation document object. Provide either this or `src`, not both. */
2914
+ data?: PxAnimatedSvgDocument;
2915
+ /** Platform adapter for frame-loop rendering. */
2916
+ adapter?: PxPlatformAdapter;
2917
+ /** Callback functions for animation lifecycle events. */
2918
+ callbacks?: PxAnimatorCallbacksConfig;
2919
+ /** CSS selector or element to render the SVG into. */
2920
+ container?: string | Element;
2921
+ }
352
2922
  /**
353
2923
  * Creates an animator instance to control SVG animations.
354
- * Accepts either a document object or a URL to fetch.
355
2924
  *
356
- * @param docOrUrl The animated SVG document or URL to fetch it from.
357
- * @param callbacks Optional object with callback functions for animation lifecycle events.
358
- * @param containerElement Optional selector or element to render the SVG into.
359
- * @returns An PxAnimatorAPI instance to programmatically control the animation.
2925
+ * @param options.src URL to fetch the animation document from.
2926
+ * @param options.data Inline animation document object.
2927
+ * @param options.container CSS selector or element to render the SVG into.
2928
+ * @returns A PxAnimatorAPI instance to programmatically control the animation.
360
2929
  */
361
- declare function createAnimator(docOrUrl: PxAnimatedSvgDocument | string, adapter?: PxPlatformAdapter, callbacks?: PxAnimatorCallbacksConfig, containerElement?: string | Element): PxAnimatorAPI;
2930
+ declare function createAnimator(options: PxAnimatorOptions): PxAnimatorAPI;
362
2931
  /**
363
2932
  * Scan and load for tags, e.g.
364
2933
  * <div data-px-animation-src="animation.json"></div>
@@ -424,7 +2993,7 @@ declare function getNormalizedProps(props: Record<string, any>): Record<string,
424
2993
  /**
425
2994
  * Renders a PxNode tree to DOM elements.
426
2995
  */
427
- declare function renderNode(node: PxNode, defs?: PxDefs): Element | null;
2996
+ declare function renderNode(node: PxNode$1, defs?: PxDefs): Element | null;
428
2997
 
429
2998
  /**
430
2999
  * Creates an animator instance that uses the native Web Animations API.
@@ -440,4 +3009,127 @@ declare function renderNode(node: PxNode, defs?: PxDefs): Element | null;
440
3009
  */
441
3010
  declare function createWebApiAnimator(doc: PxAnimatedSvgDocument, callbacks?: PxAnimatorCallbacksConfig, rootElement?: Element | null, forceEvenIfHasUnsupportedAttrs?: boolean): PxAnimatorAPI | null;
442
3011
 
443
- export { COLOUR_ATTR_NAMES, type FillMode, type JsMode, type OutAction, PX_ANIM_ATTR_NAME, PX_ANIM_SRC_ATTR_NAME, type PlaybackDirection, type PxAnimatedSvgDocument, type PxAnimationDefinition, type PxAnimatorAPI, type PxAnimatorCallbacksConfig, type PxAnimatorConfig, type PxBezierPath, type PxBinding, type PxDefs, type PxElementAnimation, type PxKeyframe, type PxNode, type PxPlatformAdapter, type PxPropertyAnimation, type PxSvgNode, type PxTrigger, type PxValidationResult, STYLE_ATTR_NAMES, type StartOn, TRANSFORM_FN_NAMES, calcAnimationValues, camelCaseToKebabWordIfNeeded, createAnimator, createAnimatorImpl, createBasicFrameLoopAnimator, createFrameLoopAnimator, createWebApiAnimator, generateNewIds, getAnimatorConfig, getBindings, getChildren, getDefs, getNormalizedProps, isPxElementFileFormat, isPxElementFileFormatDeep, loadTagAnimators, getNormalisedBindings as normalizeDocument, renderNode, setupAnimationTriggers, toRGBA };
3012
+ /**
3013
+ * Shared types for the lightweight player-effects applier.
3014
+ *
3015
+ * The node keys used across these files (`type`, `children`, `transform`,
3016
+ * `animate`, `href`, …) are the stable on-disk WIRE keys — accessed by literal
3017
+ * dot-notation on purpose. Nothing here imports anything but plain TS, so the
3018
+ * whole `effects/` folder can move into the Player codebase verbatim.
3019
+ */
3020
+ /** A serialised SVGA node. Loose by design — this is parsed wire JSON. */
3021
+ interface PxNode {
3022
+ type?: string;
3023
+ children?: Array<PxNode>;
3024
+ effects?: PxEffects;
3025
+ [attr: string]: any;
3026
+ }
3027
+ /** The `node.effects` bucket the player-effects writer emits (render effects only). */
3028
+ interface PxEffects {
3029
+ transformation?: PxTransformationEffect;
3030
+ repeater?: PxRepeaterEffect;
3031
+ maskedBy?: PxMaskedByEffect;
3032
+ trimPath?: object;
3033
+ retime?: PxRetimeEffect;
3034
+ isCombinedShape?: boolean;
3035
+ ref?: PxRefEffect;
3036
+ }
3037
+ /** `<use>` retime effect: `baseId` = source symbol/element; `start`/`timeCrop` in ms
3038
+ * (no frame rate in the Player). The source's keyframe times are remapped
3039
+ * `t' = start + t·stretch`. */
3040
+ interface PxRetimeEffect {
3041
+ baseId?: string;
3042
+ start?: number;
3043
+ stretch?: number;
3044
+ timeCrop?: [number, number];
3045
+ }
3046
+ /** `<use>` reference effect: `baseId` = source element id; `type` = sub-ref mode
3047
+ * (`content` = exclude object-translate, the former `noRefTranslate`). */
3048
+ interface PxRefEffect {
3049
+ baseId?: string;
3050
+ type?: string;
3051
+ }
3052
+ type Vec2 = [number, number];
3053
+ /** An animatable value: a raw static value, a `{value}` static, or `{keyframes}`.
3054
+ * Animated translate may additionally carry `autoOrient` (motion-path rotation
3055
+ * derived from the curve tangent) at the animation level, and `tangentOut` /
3056
+ * `tangentIn` on individual keyframes (curve handles). */
3057
+ type PxAnimatable<T> = T | {
3058
+ value: T;
3059
+ } | {
3060
+ keyframes: Array<PxKeyframe<T>>;
3061
+ autoOrient?: boolean;
3062
+ };
3063
+ interface PxKeyframe<T> {
3064
+ time?: number;
3065
+ value?: T;
3066
+ easing?: Array<number>;
3067
+ tangentOut?: Vec2;
3068
+ tangentIn?: Vec2;
3069
+ }
3070
+ interface PxTransformationEffect {
3071
+ translate?: PxAnimatable<Vec2>;
3072
+ rotate?: PxAnimatable<number>;
3073
+ scale?: PxAnimatable<Vec2>;
3074
+ skew?: PxAnimatable<Vec2>;
3075
+ origin?: PxAnimatable<Vec2>;
3076
+ }
3077
+ interface PxRepeaterEffect {
3078
+ copies?: number;
3079
+ translate?: Vec2;
3080
+ rotate?: number;
3081
+ scale?: Vec2;
3082
+ origin?: Vec2;
3083
+ }
3084
+ interface PxMaskedByEffect {
3085
+ href?: string;
3086
+ maskType?: string;
3087
+ maskUnits?: string;
3088
+ maskContentUnits?: string;
3089
+ }
3090
+ /** Collected diagnostics + new <defs> nodes accumulated during a run. */
3091
+ interface ApplyResult {
3092
+ root: PxNode;
3093
+ defs: Array<PxNode>;
3094
+ warnings: Array<string>;
3095
+ errors: Array<string>;
3096
+ }
3097
+
3098
+ /**
3099
+ * Applies all player-effects in `root` and returns a materialised copy plus any
3100
+ * generated <defs> nodes, warnings and errors. `root` is not mutated.
3101
+ *
3102
+ * Two passes:
3103
+ * 1. `applyPlayerEffects_exceptRetime` — materialises every effect except retime.
3104
+ * 2. `applyPlayerEffects_retime` — applies retime, cloning the NOW-materialised
3105
+ * subtrees so retimed `<use>`s see the same wrappers/animations the heavy
3106
+ * editor path would produce.
3107
+ *
3108
+ * Pre-pass identifies every element that is the target of a `<use>` with
3109
+ * `ref:{type:'content'}` and allocates a fresh "inner" id for it; pass 1 then
3110
+ * splits those sources into outer-translate + inner-content layers so the use
3111
+ * can target the inner layer (mirrors the editor's heavy materialisation).
3112
+ */
3113
+ declare function applyPlayerEffects(root: PxNode): ApplyResult;
3114
+
3115
+ interface VmNode {
3116
+ type?: string;
3117
+ children?: Array<VmNode>;
3118
+ [attr: string]: any;
3119
+ }
3120
+ /** Every keyframe `time` found anywhere in the tree, plus 0. */
3121
+ declare function collectSampleTimes(node: VmNode, into: Set<number>): void;
3122
+ /** Sorted, painted-primitive multiset for the tree at time `t`. */
3123
+ declare function visualModelAt(root: VmNode, t: number): Array<string>;
3124
+ interface EffectDiff {
3125
+ time: number;
3126
+ onlyInA: Array<string>;
3127
+ onlyInB: Array<string>;
3128
+ }
3129
+ /**
3130
+ * Compares two trees "in effect" across all keyframe instants found in either.
3131
+ * Returns one entry per time where the painted-primitive multisets differ.
3132
+ */
3133
+ declare function diffInEffect(a: VmNode, b: VmNode): Array<EffectDiff>;
3134
+
3135
+ export { type ApplyResult, COLOUR_ATTR_NAMES, type FillMode, type JsMode, type KeysMatch, type OutAction, PX_ANIMATOR_DATA_KEY, PX_ANIM_ATTR_NAME, PX_ANIM_SRC_ATTR_NAME, PX_TRANSFORM_PART_KEYS, type PlaybackDirection, type PxAnimatedSvgDocument, PxAnimatedSvgDocumentSchema, type PxAnimationDefinition, PxAnimationDefinitionSchema, type PxAnimatorAPI, type PxAnimatorCallbacksConfig, type PxAnimatorConfig, PxAnimatorConfigSchema, type PxAnimatorOptions, type PxAttrValue, PxAttrValueSchema, type PxBezierPath, PxBezierPathSchema, type PxBinding, PxBindingSchema, type PxDefs, PxDefsSchema, PxEasingOrRefSchema, type PxEffects, type PxNode as PxEffectsNode, PxEffectsSchema, type PxElementAnimation, PxElementAnimationSchema, type PxInfer, type PxKeyframe$1 as PxKeyframe, PxKeyframeSchema, PxLoopSchema, PxMaskedByEffectSchema, type PxNode$1 as PxNode, PxNodeBase, PxNodeSchema, type PxPlatformAdapter, type PxPropertyAnimation, PxPropertyAnimationSchema, PxRefEffectSchema, PxRepeaterEffectSchema, PxRetimeEffectSchema, type PxSchema, type PxSchemaDesc, type PxSvgNode, PxSvgNodeExtra, type PxTransformPartKey, type PxTransformParts, PxTransformPartsSchema, type PxTransformValue, PxTransformValueSchema, PxTransformationEffectSchema, type PxTrigger, PxTriggerSchema, PxTrimPathEffectSchema, type PxValidationContext, type PxValidationResult, type RemoveIndex, STYLE_ATTR_NAMES, type StartOn, TRANSFORM_FN_NAMES, applyPlayerEffects, calcAnimationValues, camelCaseToKebabWordIfNeeded, collectSampleTimes, createAnimator, createAnimatorImpl, createBasicFrameLoopAnimator, createFrameLoopAnimator, createWebApiAnimator, describeSchema, diffInEffect, generateNewIds, getAnimatorConfig, getBindings, getChildren, getDefs, getNormalizedProps, isPxElementFileFormat, isPxElementFileFormatDeep, loadTagAnimators, getNormalisedBindings as normalizeDocument, px, renderNode, schemaKeys, setupAnimationTriggers, toRGBA, validateNodeEffects, visualModelAt };