@pixodesk/svg-animator-web 1.0.8 → 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,177 +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";
200
+ type StartOn = 'load' | 'mouseOver' | 'click' | 'scrollIntoView';
201
+ type OutAction = 'continue' | 'pause' | 'reset' | 'reverse';
202
+ type JsMode = "auto" | "webapi" | "frames";
5
203
  /**
6
204
  * Easing function definition.
7
205
  * Can be a named reference to a predefined easing or a cubic-bezier array [x1, y1, x2, y2].
8
206
  *
9
- * @example "ease-in" | "easeOut" | [0.68, -0.55, 0.265, 1.55]
10
- */
11
- type PxEasingOrRef = string | [number, number, number, number];
12
- /**
13
- * A single animation keyframe defining the state at a specific point in time.
14
- * 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]`
15
210
  */
16
- interface PxKeyframe {
17
- /** Timestamp in milliseconds from animation start */
18
- time?: number;
19
- /** Short alias for "time" */
20
- t?: number;
21
- /** 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;
22
215
  value?: any;
23
- /** Short alias for "value" */
24
216
  v?: any;
25
- /** Easing function to use when transitioning to this keyframe from the previous one */
26
- easing?: PxEasingOrRef;
27
- /** Short alias for "easing" */
28
- e?: PxEasingOrRef;
29
- }
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>;
30
323
  /**
31
- * Animation definition for a single CSS/SVG property.
32
- * Contains an array of keyframes that define how the property changes over time.
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.
33
328
  */
34
- interface PxPropertyAnimation {
35
- /** Array of keyframes defining the animation timeline */
36
- keyframes?: PxKeyframe[];
37
- /** Short alias for "keyframes" */
38
- kfs?: PxKeyframe[];
39
- }
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>;
347
+ /**
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>;
40
439
  /**
41
440
  * Complete animation definition containing one or more property animations.
42
441
  * Each key is a CSS/SVG property name (e.g., "opacity", "scale", "rotate").
43
- *
44
- * @example
45
- * {
46
- * "opacity": { keyframes: [...] },
47
- * "scale": { keyframes: [...] }
48
- * }
49
442
  */
50
- interface PxAnimationDefinition {
51
- [property: string]: PxPropertyAnimation;
52
- }
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>;
53
511
  /**
54
- * 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.
55
514
  */
56
- interface PxTrigger {
57
- /** Event that starts the animation */
58
- startOn?: 'load' | 'mouseOver' | 'click' | 'scrollIntoView' | 'programmatic';
59
- /** Action to take when the trigger condition is no longer met (e.g., mouse leaves) */
60
- outAction?: 'continue' | 'pause' | 'reset' | 'reverse';
61
- /** Percentage of element visibility required to trigger (0-1). Only applies to scrollIntoView. */
62
- scrollIntoViewThreshold?: number;
63
- }
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
+ };
64
851
  /**
65
852
  * Global animation configuration that applies to all animations in the document.
66
853
  * Defines timing, playback behavior, and rendering strategy.
67
854
  */
68
- interface PxAnimatorConfig {
69
- /** JavaScript animation implementation strategy */
70
- mode?: "auto" | "webapi" | "frames";
71
- /** Total animation duration in milliseconds */
72
- duration?: number;
73
- /** Delay before animation starts in milliseconds */
74
- delay?: number;
75
- /** Number of times to repeat the animation. Use "infinite" for endless loop. */
76
- iterations?: number | "infinite";
77
- /** Defines which values are applied before/after the animation */
78
- fill?: FillMode;
79
- /** Direction of animation playback */
80
- direction?: PlaybackDirection;
81
- /** Target frame rate for frame-based animations (only applicable when mode="frames") */
82
- frameRate?: number;
83
- /** Trigger configuration for when animation should start */
84
- trigger?: PxTrigger;
85
- debug?: boolean;
86
- debugInstName?: string;
87
- }
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>;
88
1002
  /**
89
- * Reusable definitions library for easings, animations, and styles.
90
- * 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`.
91
1014
  */
92
- interface PxDefs {
93
- /** Named cubic-bezier easing functions */
94
- easings?: {
95
- [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>;
96
1249
  };
97
- /** Named animation definitions that can be referenced by elements */
98
- animations?: {
99
- [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>;
100
1265
  };
101
- /**
102
- * FIXME - do we need it?
103
- * Named style presets for common styling patterns
104
- */
105
- styles?: {
106
- [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>;
107
1279
  };
108
- }
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
+ };
109
1558
  /**
110
- * Element animation specification.
111
- * Can be:
112
- * - A string referencing a named animation from defs
113
- * - An array of named animation references
114
- * - An inline PxAnimationDefinition object
115
- * - 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.
116
1562
  *
117
- * @example
118
- * "fadeIn"
119
- * ["fadeIn", "spin"]
120
- * { opacity: { keyframes: [...] } }
121
- * ["fadeIn", { scale: { keyframes: [...] } }]
1563
+ * Pass `strict: true` to also flag undeclared keys (useful in dev / tests).
122
1564
  */
123
- type PxElementAnimation = string | string[] | PxAnimationDefinition | (string | PxAnimationDefinition)[];
1565
+ declare function validateNodeEffects(root: PxNode$1, opts?: {
1566
+ strict?: boolean;
1567
+ }): Array<string>;
124
1568
  /**
125
- * Base interface for all SVG elements.
126
- * 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 }`
127
1575
  */
128
- interface PxNode {
129
- /** SVG element type (e.g., "circle", "rect", "path", "g") */
1576
+ declare const PxNodeBase: PxSchema<{
130
1577
  type: string;
131
- /** Child elements (for container elements like <g>) */
132
- children?: PxNode[];
133
- /** Animation applied to this element */
134
- animate?: PxElementAnimation;
135
- /**
136
- * FIXME - do we need it?
137
- * Style applied to this element (named reference or inline object)
138
- */
139
- style?: string | Record<string, string | number>;
140
- /** 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
+ } & {
141
1741
  [key: string]: any;
142
- }
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
+
143
1910
  /**
144
- * Binds animations to existing DOM elements via CSS selectors.
145
- * 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.
146
1915
  */
147
- interface PxBinding {
148
- /** ID targeting elements in the DOM (data-px-id="...") */
149
- id: string;
150
- /** Animation to apply to matched elements */
151
- animate: PxElementAnimation;
1916
+ interface PxNode$1 extends PxInfer<typeof PxNodeBase> {
1917
+ children?: PxNode$1[];
1918
+ [key: string]: any;
152
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
+ };
153
2179
  /**
154
2180
  * Root SVG element containing the entire animated graphic.
155
- * Extends PxNode with SVG-specific properties and global configuration.
156
- */
157
- interface PxSvgNode extends PxNode {
158
- /** FIXME - do we need it?
159
- * SVG viewport width */
160
- width?: number;
161
- /** FIXME - do we need it?
162
- * SVG viewport height */
163
- height?: number;
164
- /** FIXME - do we need it?
165
- * SVG viewBox attribute defining coordinate system */
166
- viewBox?: string;
167
- /** Global animation configuration */
168
- animator?: PxAnimatorConfig;
169
- /** Reusable definitions library */
170
- defs?: PxDefs;
171
- /** Animation bindings for pre-rendered DOM elements */
172
- bindings?: PxBinding[];
173
- 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> {
174
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
+ };
175
2776
  /**
176
2777
  * The complete animated SVG document.
177
2778
  * This is the root type for the entire file format.
@@ -191,18 +2792,22 @@ interface PxAnimatorCallbacksConfig {
191
2792
  /** Callback executed when the animation is removed. */
192
2793
  onRemove?: () => void;
193
2794
  }
194
- 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
+ };
195
2809
  /** Represents a vector path for SVG shape animations. */
196
- interface PxBezierPath {
197
- /** An array of vertex points [[x, y], ...]. */
198
- v: Array<PxPoint2D>;
199
- /** An array of 'in' tangent handles for each vertex [[x, y], ...]. */
200
- i?: Array<PxPoint2D>;
201
- /** An array of 'out' tangent handles for each vertex [[x, y], ...]. */
202
- o?: Array<PxPoint2D>;
203
- /** A boolean indicating if the path is closed. */
204
- c?: boolean;
205
- }
2810
+ type PxBezierPath = PxInfer<typeof PxBezierPathSchema>;
206
2811
  /** Basic animation controls common to all animator types. */
207
2812
  interface PxBasicAnimatorAPI {
208
2813
  isReady(): boolean;
@@ -236,15 +2841,14 @@ interface PxValidationResult {
236
2841
  errors: string[];
237
2842
  }
238
2843
  /**
239
- * Deep validation of PxAnimatedSvgDocument.
240
- * Validates all nested properties against their type definitions.
2844
+ * Deep validation of PxAnimatedSvgDocument using the PxAnimatedSvgDocumentSchema.
241
2845
  * @returns PxValidationResult with valid flag and array of error messages
242
2846
  */
243
2847
  declare function isPxElementFileFormatDeep(fileJson: any): PxValidationResult;
244
2848
  declare function getAnimatorConfig(doc: PxAnimatedSvgDocument): PxAnimatorConfig | undefined;
245
2849
  declare function getDefs(doc: PxAnimatedSvgDocument): PxDefs | undefined;
246
2850
  declare function getBindings(doc: PxAnimatedSvgDocument): PxBinding[] | undefined;
247
- declare function getChildren(doc: PxAnimatedSvgDocument): PxNode[] | undefined;
2851
+ declare function getChildren(doc: PxAnimatedSvgDocument): PxNode$1[] | undefined;
248
2852
 
249
2853
  /**
250
2854
  * Platform adapter interface for abstracting DOM-specific operations.
@@ -302,16 +2906,28 @@ declare function generateNewIds(doc: PxAnimatedSvgDocument): PxAnimatedSvgDocume
302
2906
  * @returns An PxAnimatorAPI instance to programmatically control the animation.
303
2907
  */
304
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
+ }
305
2922
  /**
306
2923
  * Creates an animator instance to control SVG animations.
307
- * Accepts either a document object or a URL to fetch.
308
2924
  *
309
- * @param docOrUrl The animated SVG document or URL to fetch it from.
310
- * @param callbacks Optional object with callback functions for animation lifecycle events.
311
- * @param containerElement Optional selector or element to render the SVG into.
312
- * @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.
313
2929
  */
314
- declare function createAnimator(docOrUrl: PxAnimatedSvgDocument | string, adapter?: PxPlatformAdapter, callbacks?: PxAnimatorCallbacksConfig, containerElement?: string | Element): PxAnimatorAPI;
2930
+ declare function createAnimator(options: PxAnimatorOptions): PxAnimatorAPI;
315
2931
  /**
316
2932
  * Scan and load for tags, e.g.
317
2933
  * <div data-px-animation-src="animation.json"></div>
@@ -377,7 +2993,7 @@ declare function getNormalizedProps(props: Record<string, any>): Record<string,
377
2993
  /**
378
2994
  * Renders a PxNode tree to DOM elements.
379
2995
  */
380
- declare function renderNode(node: PxNode, defs?: PxDefs): Element | null;
2996
+ declare function renderNode(node: PxNode$1, defs?: PxDefs): Element | null;
381
2997
 
382
2998
  /**
383
2999
  * Creates an animator instance that uses the native Web Animations API.
@@ -393,4 +3009,127 @@ declare function renderNode(node: PxNode, defs?: PxDefs): Element | null;
393
3009
  */
394
3010
  declare function createWebApiAnimator(doc: PxAnimatedSvgDocument, callbacks?: PxAnimatorCallbacksConfig, rootElement?: Element | null, forceEvenIfHasUnsupportedAttrs?: boolean): PxAnimatorAPI | null;
395
3011
 
396
- export { COLOUR_ATTR_NAMES, type FillMode, 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, 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 };