@clypra/engine 1.2.1 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { z } from 'zod';
2
+
1
3
  declare const SCENE_VERSION: 1;
2
4
  /** Default canvas width in pixels. */
3
5
  declare const DEFAULT_CANVAS_WIDTH: 800;
@@ -209,12 +211,100 @@ interface EffectIndexItem {
209
211
  description?: string;
210
212
  tags?: string[];
211
213
  isPremium?: boolean;
212
- previewType?: 'static' | 'video' | 'lottie';
214
+ previewType?: "static" | "video" | "lottie";
213
215
  thumbnailUrl?: string;
214
216
  thumbnail?: string;
215
217
  previewUrl?: string;
216
218
  durationMs?: number;
217
219
  }
220
+ interface EffectFill {
221
+ type: "solid" | "linear" | "radial" | "pattern" | "none";
222
+ color?: string;
223
+ gradient?: {
224
+ angle: number;
225
+ stops: Array<{
226
+ color: string;
227
+ offset: number;
228
+ }>;
229
+ };
230
+ patternType?: string;
231
+ perCharFillEnabled?: boolean;
232
+ charFillColors?: string[];
233
+ }
234
+ interface EffectStroke {
235
+ color: string;
236
+ width: number;
237
+ position?: "outside" | "center" | "inside";
238
+ opacity?: number;
239
+ lineJoin?: "round" | "miter" | "bevel";
240
+ blur?: number;
241
+ type?: "solid" | "gradient";
242
+ colorSecondary?: string;
243
+ widthSecondary?: number;
244
+ fadeRange?: [number, number];
245
+ }
246
+ interface EffectShadow {
247
+ type?: "drop" | "inner";
248
+ color: string;
249
+ blur: number;
250
+ offset?: {
251
+ x: number;
252
+ y: number;
253
+ };
254
+ offsetX?: number;
255
+ offsetY?: number;
256
+ opacity?: number;
257
+ }
258
+ interface EffectBevel {
259
+ depth: number;
260
+ highlight?: string;
261
+ highlightColor?: string;
262
+ shadow?: string;
263
+ shadowColor?: string;
264
+ direction?: "bottom-right" | "bottom" | "right";
265
+ coreColor?: string;
266
+ edgeColor?: string;
267
+ edgeWidth?: number;
268
+ blur?: number;
269
+ blurColor?: string;
270
+ perspectiveEnabled?: boolean;
271
+ vanishingPointX?: number;
272
+ vanishingPointY?: number;
273
+ focalLength?: number;
274
+ }
275
+ interface EffectGlow {
276
+ color: string;
277
+ blur: number;
278
+ opacity: number;
279
+ type?: "outer" | "inner";
280
+ strength?: number;
281
+ spread?: number;
282
+ }
283
+ interface EffectPanel {
284
+ color: string;
285
+ opacity: number;
286
+ radius: number;
287
+ padding?: {
288
+ x: number;
289
+ y: number;
290
+ };
291
+ paddingX?: number;
292
+ paddingY?: number;
293
+ stroke?: {
294
+ color: string;
295
+ width: number;
296
+ } | null;
297
+ }
298
+ interface EffectStack {
299
+ count: number;
300
+ offsetX: number;
301
+ offsetY: number;
302
+ opacityDecay: number;
303
+ color1?: string;
304
+ color2?: string;
305
+ color3?: string;
306
+ color4?: string;
307
+ }
218
308
  interface EffectFullDefinition extends EffectIndexItem {
219
309
  version?: string;
220
310
  description: string;
@@ -226,13 +316,13 @@ interface EffectFullDefinition extends EffectIndexItem {
226
316
  letterSpacing: number;
227
317
  lineHeight: number;
228
318
  };
229
- fills: any[];
230
- strokes: any[];
231
- shadows: any[];
232
- bevel?: any;
233
- glow?: any;
234
- glows?: any[];
235
- panel?: any;
319
+ fills: EffectFill[];
320
+ strokes: EffectStroke[];
321
+ shadows: EffectShadow[];
322
+ bevel?: EffectBevel;
323
+ glow?: EffectGlow;
324
+ glows?: EffectGlow[];
325
+ panel?: EffectPanel;
236
326
  glitch?: any;
237
327
  animation?: {
238
328
  type: "none" | "typewriter" | "wave" | "fade" | "glitch";
@@ -241,7 +331,7 @@ interface EffectFullDefinition extends EffectIndexItem {
241
331
  frequency?: number;
242
332
  };
243
333
  background?: any;
244
- stack?: any;
334
+ stack?: EffectStack;
245
335
  }
246
336
  interface TextEffectDefinition extends EffectFullDefinition {
247
337
  text?: string;
@@ -293,6 +383,1039 @@ interface EvaluatedTextLayer {
293
383
  readonly styleId?: string;
294
384
  }
295
385
 
386
+ /**
387
+ * Runtime validation schemas for text effect definitions
388
+ * Uses Zod for runtime type safety and validation
389
+ */
390
+
391
+ declare const GradientStopSchema: z.ZodObject<{
392
+ color: z.ZodString;
393
+ offset: z.ZodNumber;
394
+ }, z.core.$strip>;
395
+ declare const EffectFillSchema: z.ZodObject<{
396
+ type: z.ZodEnum<{
397
+ linear: "linear";
398
+ solid: "solid";
399
+ radial: "radial";
400
+ pattern: "pattern";
401
+ none: "none";
402
+ }>;
403
+ color: z.ZodOptional<z.ZodString>;
404
+ gradient: z.ZodOptional<z.ZodObject<{
405
+ angle: z.ZodNumber;
406
+ stops: z.ZodArray<z.ZodObject<{
407
+ color: z.ZodString;
408
+ offset: z.ZodNumber;
409
+ }, z.core.$strip>>;
410
+ }, z.core.$strip>>;
411
+ patternType: z.ZodOptional<z.ZodString>;
412
+ perCharFillEnabled: z.ZodOptional<z.ZodBoolean>;
413
+ charFillColors: z.ZodOptional<z.ZodArray<z.ZodString>>;
414
+ }, z.core.$strip>;
415
+ declare const EffectStrokeSchema: z.ZodObject<{
416
+ color: z.ZodString;
417
+ width: z.ZodNumber;
418
+ position: z.ZodOptional<z.ZodEnum<{
419
+ center: "center";
420
+ outside: "outside";
421
+ inside: "inside";
422
+ }>>;
423
+ opacity: z.ZodOptional<z.ZodNumber>;
424
+ lineJoin: z.ZodOptional<z.ZodEnum<{
425
+ round: "round";
426
+ miter: "miter";
427
+ bevel: "bevel";
428
+ }>>;
429
+ blur: z.ZodOptional<z.ZodNumber>;
430
+ type: z.ZodOptional<z.ZodEnum<{
431
+ solid: "solid";
432
+ gradient: "gradient";
433
+ }>>;
434
+ colorSecondary: z.ZodOptional<z.ZodString>;
435
+ widthSecondary: z.ZodOptional<z.ZodNumber>;
436
+ fadeRange: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
437
+ }, z.core.$strip>;
438
+ declare const EffectShadowSchema: z.ZodObject<{
439
+ type: z.ZodOptional<z.ZodEnum<{
440
+ inner: "inner";
441
+ drop: "drop";
442
+ }>>;
443
+ color: z.ZodString;
444
+ blur: z.ZodNumber;
445
+ offset: z.ZodOptional<z.ZodObject<{
446
+ x: z.ZodNumber;
447
+ y: z.ZodNumber;
448
+ }, z.core.$strip>>;
449
+ offsetX: z.ZodOptional<z.ZodNumber>;
450
+ offsetY: z.ZodOptional<z.ZodNumber>;
451
+ opacity: z.ZodOptional<z.ZodNumber>;
452
+ }, z.core.$strip>;
453
+ declare const EffectBevelSchema: z.ZodObject<{
454
+ depth: z.ZodNumber;
455
+ highlight: z.ZodOptional<z.ZodString>;
456
+ highlightColor: z.ZodOptional<z.ZodString>;
457
+ shadow: z.ZodOptional<z.ZodString>;
458
+ shadowColor: z.ZodOptional<z.ZodString>;
459
+ direction: z.ZodOptional<z.ZodEnum<{
460
+ right: "right";
461
+ bottom: "bottom";
462
+ "bottom-right": "bottom-right";
463
+ }>>;
464
+ coreColor: z.ZodOptional<z.ZodString>;
465
+ edgeColor: z.ZodOptional<z.ZodString>;
466
+ edgeWidth: z.ZodOptional<z.ZodNumber>;
467
+ blur: z.ZodOptional<z.ZodNumber>;
468
+ blurColor: z.ZodOptional<z.ZodString>;
469
+ perspectiveEnabled: z.ZodOptional<z.ZodBoolean>;
470
+ vanishingPointX: z.ZodOptional<z.ZodNumber>;
471
+ vanishingPointY: z.ZodOptional<z.ZodNumber>;
472
+ focalLength: z.ZodOptional<z.ZodNumber>;
473
+ }, z.core.$strip>;
474
+ declare const EffectGlowSchema: z.ZodObject<{
475
+ color: z.ZodString;
476
+ blur: z.ZodNumber;
477
+ opacity: z.ZodNumber;
478
+ type: z.ZodOptional<z.ZodEnum<{
479
+ outer: "outer";
480
+ inner: "inner";
481
+ }>>;
482
+ strength: z.ZodOptional<z.ZodNumber>;
483
+ spread: z.ZodOptional<z.ZodNumber>;
484
+ }, z.core.$strip>;
485
+ declare const EffectPanelSchema: z.ZodObject<{
486
+ color: z.ZodString;
487
+ opacity: z.ZodNumber;
488
+ radius: z.ZodNumber;
489
+ padding: z.ZodOptional<z.ZodObject<{
490
+ x: z.ZodNumber;
491
+ y: z.ZodNumber;
492
+ }, z.core.$strip>>;
493
+ paddingX: z.ZodOptional<z.ZodNumber>;
494
+ paddingY: z.ZodOptional<z.ZodNumber>;
495
+ stroke: z.ZodOptional<z.ZodNullable<z.ZodObject<{
496
+ color: z.ZodString;
497
+ width: z.ZodNumber;
498
+ }, z.core.$strip>>>;
499
+ }, z.core.$strip>;
500
+ declare const EffectStackSchema: z.ZodObject<{
501
+ count: z.ZodNumber;
502
+ offsetX: z.ZodNumber;
503
+ offsetY: z.ZodNumber;
504
+ opacityDecay: z.ZodNumber;
505
+ color1: z.ZodOptional<z.ZodString>;
506
+ color2: z.ZodOptional<z.ZodString>;
507
+ color3: z.ZodOptional<z.ZodString>;
508
+ color4: z.ZodOptional<z.ZodString>;
509
+ }, z.core.$strip>;
510
+ declare const FontSchema: z.ZodObject<{
511
+ family: z.ZodString;
512
+ weight: z.ZodNumber;
513
+ style: z.ZodEnum<{
514
+ normal: "normal";
515
+ italic: "italic";
516
+ }>;
517
+ letterSpacing: z.ZodNumber;
518
+ lineHeight: z.ZodNumber;
519
+ }, z.core.$strip>;
520
+ declare const AnimationSchema: z.ZodObject<{
521
+ type: z.ZodEnum<{
522
+ none: "none";
523
+ typewriter: "typewriter";
524
+ wave: "wave";
525
+ fade: "fade";
526
+ glitch: "glitch";
527
+ }>;
528
+ speed: z.ZodOptional<z.ZodNumber>;
529
+ amplitude: z.ZodOptional<z.ZodNumber>;
530
+ frequency: z.ZodOptional<z.ZodNumber>;
531
+ }, z.core.$strip>;
532
+ declare const EffectIndexItemSchema: z.ZodObject<{
533
+ id: z.ZodString;
534
+ name: z.ZodString;
535
+ category: z.ZodString;
536
+ description: z.ZodOptional<z.ZodString>;
537
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
538
+ isPremium: z.ZodOptional<z.ZodBoolean>;
539
+ previewType: z.ZodOptional<z.ZodEnum<{
540
+ static: "static";
541
+ video: "video";
542
+ lottie: "lottie";
543
+ }>>;
544
+ thumbnailUrl: z.ZodOptional<z.ZodString>;
545
+ thumbnail: z.ZodOptional<z.ZodString>;
546
+ previewUrl: z.ZodOptional<z.ZodString>;
547
+ durationMs: z.ZodOptional<z.ZodNumber>;
548
+ }, z.core.$strip>;
549
+ declare const EffectFullDefinitionSchema: z.ZodObject<{
550
+ id: z.ZodString;
551
+ name: z.ZodString;
552
+ category: z.ZodString;
553
+ isPremium: z.ZodOptional<z.ZodBoolean>;
554
+ previewType: z.ZodOptional<z.ZodEnum<{
555
+ static: "static";
556
+ video: "video";
557
+ lottie: "lottie";
558
+ }>>;
559
+ thumbnailUrl: z.ZodOptional<z.ZodString>;
560
+ thumbnail: z.ZodOptional<z.ZodString>;
561
+ previewUrl: z.ZodOptional<z.ZodString>;
562
+ durationMs: z.ZodOptional<z.ZodNumber>;
563
+ version: z.ZodOptional<z.ZodString>;
564
+ description: z.ZodString;
565
+ tags: z.ZodArray<z.ZodString>;
566
+ font: z.ZodObject<{
567
+ family: z.ZodString;
568
+ weight: z.ZodNumber;
569
+ style: z.ZodEnum<{
570
+ normal: "normal";
571
+ italic: "italic";
572
+ }>;
573
+ letterSpacing: z.ZodNumber;
574
+ lineHeight: z.ZodNumber;
575
+ }, z.core.$strip>;
576
+ fills: z.ZodArray<z.ZodObject<{
577
+ type: z.ZodEnum<{
578
+ linear: "linear";
579
+ solid: "solid";
580
+ radial: "radial";
581
+ pattern: "pattern";
582
+ none: "none";
583
+ }>;
584
+ color: z.ZodOptional<z.ZodString>;
585
+ gradient: z.ZodOptional<z.ZodObject<{
586
+ angle: z.ZodNumber;
587
+ stops: z.ZodArray<z.ZodObject<{
588
+ color: z.ZodString;
589
+ offset: z.ZodNumber;
590
+ }, z.core.$strip>>;
591
+ }, z.core.$strip>>;
592
+ patternType: z.ZodOptional<z.ZodString>;
593
+ perCharFillEnabled: z.ZodOptional<z.ZodBoolean>;
594
+ charFillColors: z.ZodOptional<z.ZodArray<z.ZodString>>;
595
+ }, z.core.$strip>>;
596
+ strokes: z.ZodArray<z.ZodObject<{
597
+ color: z.ZodString;
598
+ width: z.ZodNumber;
599
+ position: z.ZodOptional<z.ZodEnum<{
600
+ center: "center";
601
+ outside: "outside";
602
+ inside: "inside";
603
+ }>>;
604
+ opacity: z.ZodOptional<z.ZodNumber>;
605
+ lineJoin: z.ZodOptional<z.ZodEnum<{
606
+ round: "round";
607
+ miter: "miter";
608
+ bevel: "bevel";
609
+ }>>;
610
+ blur: z.ZodOptional<z.ZodNumber>;
611
+ type: z.ZodOptional<z.ZodEnum<{
612
+ solid: "solid";
613
+ gradient: "gradient";
614
+ }>>;
615
+ colorSecondary: z.ZodOptional<z.ZodString>;
616
+ widthSecondary: z.ZodOptional<z.ZodNumber>;
617
+ fadeRange: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
618
+ }, z.core.$strip>>;
619
+ shadows: z.ZodArray<z.ZodObject<{
620
+ type: z.ZodOptional<z.ZodEnum<{
621
+ inner: "inner";
622
+ drop: "drop";
623
+ }>>;
624
+ color: z.ZodString;
625
+ blur: z.ZodNumber;
626
+ offset: z.ZodOptional<z.ZodObject<{
627
+ x: z.ZodNumber;
628
+ y: z.ZodNumber;
629
+ }, z.core.$strip>>;
630
+ offsetX: z.ZodOptional<z.ZodNumber>;
631
+ offsetY: z.ZodOptional<z.ZodNumber>;
632
+ opacity: z.ZodOptional<z.ZodNumber>;
633
+ }, z.core.$strip>>;
634
+ bevel: z.ZodOptional<z.ZodObject<{
635
+ depth: z.ZodNumber;
636
+ highlight: z.ZodOptional<z.ZodString>;
637
+ highlightColor: z.ZodOptional<z.ZodString>;
638
+ shadow: z.ZodOptional<z.ZodString>;
639
+ shadowColor: z.ZodOptional<z.ZodString>;
640
+ direction: z.ZodOptional<z.ZodEnum<{
641
+ right: "right";
642
+ bottom: "bottom";
643
+ "bottom-right": "bottom-right";
644
+ }>>;
645
+ coreColor: z.ZodOptional<z.ZodString>;
646
+ edgeColor: z.ZodOptional<z.ZodString>;
647
+ edgeWidth: z.ZodOptional<z.ZodNumber>;
648
+ blur: z.ZodOptional<z.ZodNumber>;
649
+ blurColor: z.ZodOptional<z.ZodString>;
650
+ perspectiveEnabled: z.ZodOptional<z.ZodBoolean>;
651
+ vanishingPointX: z.ZodOptional<z.ZodNumber>;
652
+ vanishingPointY: z.ZodOptional<z.ZodNumber>;
653
+ focalLength: z.ZodOptional<z.ZodNumber>;
654
+ }, z.core.$strip>>;
655
+ glow: z.ZodOptional<z.ZodObject<{
656
+ color: z.ZodString;
657
+ blur: z.ZodNumber;
658
+ opacity: z.ZodNumber;
659
+ type: z.ZodOptional<z.ZodEnum<{
660
+ outer: "outer";
661
+ inner: "inner";
662
+ }>>;
663
+ strength: z.ZodOptional<z.ZodNumber>;
664
+ spread: z.ZodOptional<z.ZodNumber>;
665
+ }, z.core.$strip>>;
666
+ glows: z.ZodOptional<z.ZodArray<z.ZodObject<{
667
+ color: z.ZodString;
668
+ blur: z.ZodNumber;
669
+ opacity: z.ZodNumber;
670
+ type: z.ZodOptional<z.ZodEnum<{
671
+ outer: "outer";
672
+ inner: "inner";
673
+ }>>;
674
+ strength: z.ZodOptional<z.ZodNumber>;
675
+ spread: z.ZodOptional<z.ZodNumber>;
676
+ }, z.core.$strip>>>;
677
+ panel: z.ZodOptional<z.ZodObject<{
678
+ color: z.ZodString;
679
+ opacity: z.ZodNumber;
680
+ radius: z.ZodNumber;
681
+ padding: z.ZodOptional<z.ZodObject<{
682
+ x: z.ZodNumber;
683
+ y: z.ZodNumber;
684
+ }, z.core.$strip>>;
685
+ paddingX: z.ZodOptional<z.ZodNumber>;
686
+ paddingY: z.ZodOptional<z.ZodNumber>;
687
+ stroke: z.ZodOptional<z.ZodNullable<z.ZodObject<{
688
+ color: z.ZodString;
689
+ width: z.ZodNumber;
690
+ }, z.core.$strip>>>;
691
+ }, z.core.$strip>>;
692
+ glitch: z.ZodOptional<z.ZodAny>;
693
+ animation: z.ZodOptional<z.ZodObject<{
694
+ type: z.ZodEnum<{
695
+ none: "none";
696
+ typewriter: "typewriter";
697
+ wave: "wave";
698
+ fade: "fade";
699
+ glitch: "glitch";
700
+ }>;
701
+ speed: z.ZodOptional<z.ZodNumber>;
702
+ amplitude: z.ZodOptional<z.ZodNumber>;
703
+ frequency: z.ZodOptional<z.ZodNumber>;
704
+ }, z.core.$strip>>;
705
+ background: z.ZodOptional<z.ZodAny>;
706
+ stack: z.ZodOptional<z.ZodObject<{
707
+ count: z.ZodNumber;
708
+ offsetX: z.ZodNumber;
709
+ offsetY: z.ZodNumber;
710
+ opacityDecay: z.ZodNumber;
711
+ color1: z.ZodOptional<z.ZodString>;
712
+ color2: z.ZodOptional<z.ZodString>;
713
+ color3: z.ZodOptional<z.ZodString>;
714
+ color4: z.ZodOptional<z.ZodString>;
715
+ }, z.core.$strip>>;
716
+ }, z.core.$strip>;
717
+ declare const TextEffectDefinitionSchema: z.ZodObject<{
718
+ id: z.ZodString;
719
+ name: z.ZodString;
720
+ category: z.ZodString;
721
+ isPremium: z.ZodOptional<z.ZodBoolean>;
722
+ previewType: z.ZodOptional<z.ZodEnum<{
723
+ static: "static";
724
+ video: "video";
725
+ lottie: "lottie";
726
+ }>>;
727
+ thumbnailUrl: z.ZodOptional<z.ZodString>;
728
+ thumbnail: z.ZodOptional<z.ZodString>;
729
+ previewUrl: z.ZodOptional<z.ZodString>;
730
+ durationMs: z.ZodOptional<z.ZodNumber>;
731
+ version: z.ZodOptional<z.ZodString>;
732
+ description: z.ZodString;
733
+ tags: z.ZodArray<z.ZodString>;
734
+ font: z.ZodObject<{
735
+ family: z.ZodString;
736
+ weight: z.ZodNumber;
737
+ style: z.ZodEnum<{
738
+ normal: "normal";
739
+ italic: "italic";
740
+ }>;
741
+ letterSpacing: z.ZodNumber;
742
+ lineHeight: z.ZodNumber;
743
+ }, z.core.$strip>;
744
+ fills: z.ZodArray<z.ZodObject<{
745
+ type: z.ZodEnum<{
746
+ linear: "linear";
747
+ solid: "solid";
748
+ radial: "radial";
749
+ pattern: "pattern";
750
+ none: "none";
751
+ }>;
752
+ color: z.ZodOptional<z.ZodString>;
753
+ gradient: z.ZodOptional<z.ZodObject<{
754
+ angle: z.ZodNumber;
755
+ stops: z.ZodArray<z.ZodObject<{
756
+ color: z.ZodString;
757
+ offset: z.ZodNumber;
758
+ }, z.core.$strip>>;
759
+ }, z.core.$strip>>;
760
+ patternType: z.ZodOptional<z.ZodString>;
761
+ perCharFillEnabled: z.ZodOptional<z.ZodBoolean>;
762
+ charFillColors: z.ZodOptional<z.ZodArray<z.ZodString>>;
763
+ }, z.core.$strip>>;
764
+ strokes: z.ZodArray<z.ZodObject<{
765
+ color: z.ZodString;
766
+ width: z.ZodNumber;
767
+ position: z.ZodOptional<z.ZodEnum<{
768
+ center: "center";
769
+ outside: "outside";
770
+ inside: "inside";
771
+ }>>;
772
+ opacity: z.ZodOptional<z.ZodNumber>;
773
+ lineJoin: z.ZodOptional<z.ZodEnum<{
774
+ round: "round";
775
+ miter: "miter";
776
+ bevel: "bevel";
777
+ }>>;
778
+ blur: z.ZodOptional<z.ZodNumber>;
779
+ type: z.ZodOptional<z.ZodEnum<{
780
+ solid: "solid";
781
+ gradient: "gradient";
782
+ }>>;
783
+ colorSecondary: z.ZodOptional<z.ZodString>;
784
+ widthSecondary: z.ZodOptional<z.ZodNumber>;
785
+ fadeRange: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
786
+ }, z.core.$strip>>;
787
+ shadows: z.ZodArray<z.ZodObject<{
788
+ type: z.ZodOptional<z.ZodEnum<{
789
+ inner: "inner";
790
+ drop: "drop";
791
+ }>>;
792
+ color: z.ZodString;
793
+ blur: z.ZodNumber;
794
+ offset: z.ZodOptional<z.ZodObject<{
795
+ x: z.ZodNumber;
796
+ y: z.ZodNumber;
797
+ }, z.core.$strip>>;
798
+ offsetX: z.ZodOptional<z.ZodNumber>;
799
+ offsetY: z.ZodOptional<z.ZodNumber>;
800
+ opacity: z.ZodOptional<z.ZodNumber>;
801
+ }, z.core.$strip>>;
802
+ bevel: z.ZodOptional<z.ZodObject<{
803
+ depth: z.ZodNumber;
804
+ highlight: z.ZodOptional<z.ZodString>;
805
+ highlightColor: z.ZodOptional<z.ZodString>;
806
+ shadow: z.ZodOptional<z.ZodString>;
807
+ shadowColor: z.ZodOptional<z.ZodString>;
808
+ direction: z.ZodOptional<z.ZodEnum<{
809
+ right: "right";
810
+ bottom: "bottom";
811
+ "bottom-right": "bottom-right";
812
+ }>>;
813
+ coreColor: z.ZodOptional<z.ZodString>;
814
+ edgeColor: z.ZodOptional<z.ZodString>;
815
+ edgeWidth: z.ZodOptional<z.ZodNumber>;
816
+ blur: z.ZodOptional<z.ZodNumber>;
817
+ blurColor: z.ZodOptional<z.ZodString>;
818
+ perspectiveEnabled: z.ZodOptional<z.ZodBoolean>;
819
+ vanishingPointX: z.ZodOptional<z.ZodNumber>;
820
+ vanishingPointY: z.ZodOptional<z.ZodNumber>;
821
+ focalLength: z.ZodOptional<z.ZodNumber>;
822
+ }, z.core.$strip>>;
823
+ glow: z.ZodOptional<z.ZodObject<{
824
+ color: z.ZodString;
825
+ blur: z.ZodNumber;
826
+ opacity: z.ZodNumber;
827
+ type: z.ZodOptional<z.ZodEnum<{
828
+ outer: "outer";
829
+ inner: "inner";
830
+ }>>;
831
+ strength: z.ZodOptional<z.ZodNumber>;
832
+ spread: z.ZodOptional<z.ZodNumber>;
833
+ }, z.core.$strip>>;
834
+ glows: z.ZodOptional<z.ZodArray<z.ZodObject<{
835
+ color: z.ZodString;
836
+ blur: z.ZodNumber;
837
+ opacity: z.ZodNumber;
838
+ type: z.ZodOptional<z.ZodEnum<{
839
+ outer: "outer";
840
+ inner: "inner";
841
+ }>>;
842
+ strength: z.ZodOptional<z.ZodNumber>;
843
+ spread: z.ZodOptional<z.ZodNumber>;
844
+ }, z.core.$strip>>>;
845
+ panel: z.ZodOptional<z.ZodObject<{
846
+ color: z.ZodString;
847
+ opacity: z.ZodNumber;
848
+ radius: z.ZodNumber;
849
+ padding: z.ZodOptional<z.ZodObject<{
850
+ x: z.ZodNumber;
851
+ y: z.ZodNumber;
852
+ }, z.core.$strip>>;
853
+ paddingX: z.ZodOptional<z.ZodNumber>;
854
+ paddingY: z.ZodOptional<z.ZodNumber>;
855
+ stroke: z.ZodOptional<z.ZodNullable<z.ZodObject<{
856
+ color: z.ZodString;
857
+ width: z.ZodNumber;
858
+ }, z.core.$strip>>>;
859
+ }, z.core.$strip>>;
860
+ glitch: z.ZodOptional<z.ZodAny>;
861
+ animation: z.ZodOptional<z.ZodObject<{
862
+ type: z.ZodEnum<{
863
+ none: "none";
864
+ typewriter: "typewriter";
865
+ wave: "wave";
866
+ fade: "fade";
867
+ glitch: "glitch";
868
+ }>;
869
+ speed: z.ZodOptional<z.ZodNumber>;
870
+ amplitude: z.ZodOptional<z.ZodNumber>;
871
+ frequency: z.ZodOptional<z.ZodNumber>;
872
+ }, z.core.$strip>>;
873
+ background: z.ZodOptional<z.ZodAny>;
874
+ stack: z.ZodOptional<z.ZodObject<{
875
+ count: z.ZodNumber;
876
+ offsetX: z.ZodNumber;
877
+ offsetY: z.ZodNumber;
878
+ opacityDecay: z.ZodNumber;
879
+ color1: z.ZodOptional<z.ZodString>;
880
+ color2: z.ZodOptional<z.ZodString>;
881
+ color3: z.ZodOptional<z.ZodString>;
882
+ color4: z.ZodOptional<z.ZodString>;
883
+ }, z.core.$strip>>;
884
+ text: z.ZodOptional<z.ZodString>;
885
+ }, z.core.$strip>;
886
+ /**
887
+ * Validates an effect definition with detailed error reporting
888
+ * @param data - The effect definition to validate
889
+ * @returns Validation result with success/error details
890
+ */
891
+ declare function validateEffectDefinition(data: unknown): z.ZodSafeParseResult<{
892
+ id: string;
893
+ name: string;
894
+ category: string;
895
+ description: string;
896
+ tags: string[];
897
+ font: {
898
+ family: string;
899
+ weight: number;
900
+ style: "normal" | "italic";
901
+ letterSpacing: number;
902
+ lineHeight: number;
903
+ };
904
+ fills: {
905
+ type: "linear" | "solid" | "radial" | "pattern" | "none";
906
+ color?: string;
907
+ gradient?: {
908
+ angle: number;
909
+ stops: {
910
+ color: string;
911
+ offset: number;
912
+ }[];
913
+ };
914
+ patternType?: string;
915
+ perCharFillEnabled?: boolean;
916
+ charFillColors?: string[];
917
+ }[];
918
+ strokes: {
919
+ color: string;
920
+ width: number;
921
+ position?: "center" | "outside" | "inside";
922
+ opacity?: number;
923
+ lineJoin?: "round" | "miter" | "bevel";
924
+ blur?: number;
925
+ type?: "solid" | "gradient";
926
+ colorSecondary?: string;
927
+ widthSecondary?: number;
928
+ fadeRange?: [number?, number?, ...unknown[]];
929
+ }[];
930
+ shadows: {
931
+ color: string;
932
+ blur: number;
933
+ type?: "inner" | "drop";
934
+ offset?: {
935
+ x: number;
936
+ y: number;
937
+ };
938
+ offsetX?: number;
939
+ offsetY?: number;
940
+ opacity?: number;
941
+ }[];
942
+ isPremium?: boolean;
943
+ previewType?: "static" | "video" | "lottie";
944
+ thumbnailUrl?: string;
945
+ thumbnail?: string;
946
+ previewUrl?: string;
947
+ durationMs?: number;
948
+ version?: string;
949
+ bevel?: {
950
+ depth: number;
951
+ highlight?: string;
952
+ highlightColor?: string;
953
+ shadow?: string;
954
+ shadowColor?: string;
955
+ direction?: "right" | "bottom" | "bottom-right";
956
+ coreColor?: string;
957
+ edgeColor?: string;
958
+ edgeWidth?: number;
959
+ blur?: number;
960
+ blurColor?: string;
961
+ perspectiveEnabled?: boolean;
962
+ vanishingPointX?: number;
963
+ vanishingPointY?: number;
964
+ focalLength?: number;
965
+ };
966
+ glow?: {
967
+ color: string;
968
+ blur: number;
969
+ opacity: number;
970
+ type?: "outer" | "inner";
971
+ strength?: number;
972
+ spread?: number;
973
+ };
974
+ glows?: {
975
+ color: string;
976
+ blur: number;
977
+ opacity: number;
978
+ type?: "outer" | "inner";
979
+ strength?: number;
980
+ spread?: number;
981
+ }[];
982
+ panel?: {
983
+ color: string;
984
+ opacity: number;
985
+ radius: number;
986
+ padding?: {
987
+ x: number;
988
+ y: number;
989
+ };
990
+ paddingX?: number;
991
+ paddingY?: number;
992
+ stroke?: {
993
+ color: string;
994
+ width: number;
995
+ };
996
+ };
997
+ glitch?: any;
998
+ animation?: {
999
+ type: "none" | "typewriter" | "wave" | "fade" | "glitch";
1000
+ speed?: number;
1001
+ amplitude?: number;
1002
+ frequency?: number;
1003
+ };
1004
+ background?: any;
1005
+ stack?: {
1006
+ count: number;
1007
+ offsetX: number;
1008
+ offsetY: number;
1009
+ opacityDecay: number;
1010
+ color1?: string;
1011
+ color2?: string;
1012
+ color3?: string;
1013
+ color4?: string;
1014
+ };
1015
+ }>;
1016
+ /**
1017
+ * Validates an effect definition and throws on error
1018
+ * @param data - The effect definition to validate
1019
+ * @returns The validated effect definition
1020
+ * @throws {z.ZodError} If validation fails
1021
+ */
1022
+ declare function validateEffectDefinitionStrict(data: unknown): {
1023
+ id: string;
1024
+ name: string;
1025
+ category: string;
1026
+ description: string;
1027
+ tags: string[];
1028
+ font: {
1029
+ family: string;
1030
+ weight: number;
1031
+ style: "normal" | "italic";
1032
+ letterSpacing: number;
1033
+ lineHeight: number;
1034
+ };
1035
+ fills: {
1036
+ type: "linear" | "solid" | "radial" | "pattern" | "none";
1037
+ color?: string;
1038
+ gradient?: {
1039
+ angle: number;
1040
+ stops: {
1041
+ color: string;
1042
+ offset: number;
1043
+ }[];
1044
+ };
1045
+ patternType?: string;
1046
+ perCharFillEnabled?: boolean;
1047
+ charFillColors?: string[];
1048
+ }[];
1049
+ strokes: {
1050
+ color: string;
1051
+ width: number;
1052
+ position?: "center" | "outside" | "inside";
1053
+ opacity?: number;
1054
+ lineJoin?: "round" | "miter" | "bevel";
1055
+ blur?: number;
1056
+ type?: "solid" | "gradient";
1057
+ colorSecondary?: string;
1058
+ widthSecondary?: number;
1059
+ fadeRange?: [number?, number?, ...unknown[]];
1060
+ }[];
1061
+ shadows: {
1062
+ color: string;
1063
+ blur: number;
1064
+ type?: "inner" | "drop";
1065
+ offset?: {
1066
+ x: number;
1067
+ y: number;
1068
+ };
1069
+ offsetX?: number;
1070
+ offsetY?: number;
1071
+ opacity?: number;
1072
+ }[];
1073
+ isPremium?: boolean;
1074
+ previewType?: "static" | "video" | "lottie";
1075
+ thumbnailUrl?: string;
1076
+ thumbnail?: string;
1077
+ previewUrl?: string;
1078
+ durationMs?: number;
1079
+ version?: string;
1080
+ bevel?: {
1081
+ depth: number;
1082
+ highlight?: string;
1083
+ highlightColor?: string;
1084
+ shadow?: string;
1085
+ shadowColor?: string;
1086
+ direction?: "right" | "bottom" | "bottom-right";
1087
+ coreColor?: string;
1088
+ edgeColor?: string;
1089
+ edgeWidth?: number;
1090
+ blur?: number;
1091
+ blurColor?: string;
1092
+ perspectiveEnabled?: boolean;
1093
+ vanishingPointX?: number;
1094
+ vanishingPointY?: number;
1095
+ focalLength?: number;
1096
+ };
1097
+ glow?: {
1098
+ color: string;
1099
+ blur: number;
1100
+ opacity: number;
1101
+ type?: "outer" | "inner";
1102
+ strength?: number;
1103
+ spread?: number;
1104
+ };
1105
+ glows?: {
1106
+ color: string;
1107
+ blur: number;
1108
+ opacity: number;
1109
+ type?: "outer" | "inner";
1110
+ strength?: number;
1111
+ spread?: number;
1112
+ }[];
1113
+ panel?: {
1114
+ color: string;
1115
+ opacity: number;
1116
+ radius: number;
1117
+ padding?: {
1118
+ x: number;
1119
+ y: number;
1120
+ };
1121
+ paddingX?: number;
1122
+ paddingY?: number;
1123
+ stroke?: {
1124
+ color: string;
1125
+ width: number;
1126
+ };
1127
+ };
1128
+ glitch?: any;
1129
+ animation?: {
1130
+ type: "none" | "typewriter" | "wave" | "fade" | "glitch";
1131
+ speed?: number;
1132
+ amplitude?: number;
1133
+ frequency?: number;
1134
+ };
1135
+ background?: any;
1136
+ stack?: {
1137
+ count: number;
1138
+ offsetX: number;
1139
+ offsetY: number;
1140
+ opacityDecay: number;
1141
+ color1?: string;
1142
+ color2?: string;
1143
+ color3?: string;
1144
+ color4?: string;
1145
+ };
1146
+ };
1147
+ /**
1148
+ * Validates a text effect definition with detailed error reporting
1149
+ * @param data - The text effect definition to validate
1150
+ * @returns Validation result with success/error details
1151
+ */
1152
+ declare function validateTextEffectDefinition(data: unknown): z.ZodSafeParseResult<{
1153
+ id: string;
1154
+ name: string;
1155
+ category: string;
1156
+ description: string;
1157
+ tags: string[];
1158
+ font: {
1159
+ family: string;
1160
+ weight: number;
1161
+ style: "normal" | "italic";
1162
+ letterSpacing: number;
1163
+ lineHeight: number;
1164
+ };
1165
+ fills: {
1166
+ type: "linear" | "solid" | "radial" | "pattern" | "none";
1167
+ color?: string;
1168
+ gradient?: {
1169
+ angle: number;
1170
+ stops: {
1171
+ color: string;
1172
+ offset: number;
1173
+ }[];
1174
+ };
1175
+ patternType?: string;
1176
+ perCharFillEnabled?: boolean;
1177
+ charFillColors?: string[];
1178
+ }[];
1179
+ strokes: {
1180
+ color: string;
1181
+ width: number;
1182
+ position?: "center" | "outside" | "inside";
1183
+ opacity?: number;
1184
+ lineJoin?: "round" | "miter" | "bevel";
1185
+ blur?: number;
1186
+ type?: "solid" | "gradient";
1187
+ colorSecondary?: string;
1188
+ widthSecondary?: number;
1189
+ fadeRange?: [number?, number?, ...unknown[]];
1190
+ }[];
1191
+ shadows: {
1192
+ color: string;
1193
+ blur: number;
1194
+ type?: "inner" | "drop";
1195
+ offset?: {
1196
+ x: number;
1197
+ y: number;
1198
+ };
1199
+ offsetX?: number;
1200
+ offsetY?: number;
1201
+ opacity?: number;
1202
+ }[];
1203
+ isPremium?: boolean;
1204
+ previewType?: "static" | "video" | "lottie";
1205
+ thumbnailUrl?: string;
1206
+ thumbnail?: string;
1207
+ previewUrl?: string;
1208
+ durationMs?: number;
1209
+ version?: string;
1210
+ bevel?: {
1211
+ depth: number;
1212
+ highlight?: string;
1213
+ highlightColor?: string;
1214
+ shadow?: string;
1215
+ shadowColor?: string;
1216
+ direction?: "right" | "bottom" | "bottom-right";
1217
+ coreColor?: string;
1218
+ edgeColor?: string;
1219
+ edgeWidth?: number;
1220
+ blur?: number;
1221
+ blurColor?: string;
1222
+ perspectiveEnabled?: boolean;
1223
+ vanishingPointX?: number;
1224
+ vanishingPointY?: number;
1225
+ focalLength?: number;
1226
+ };
1227
+ glow?: {
1228
+ color: string;
1229
+ blur: number;
1230
+ opacity: number;
1231
+ type?: "outer" | "inner";
1232
+ strength?: number;
1233
+ spread?: number;
1234
+ };
1235
+ glows?: {
1236
+ color: string;
1237
+ blur: number;
1238
+ opacity: number;
1239
+ type?: "outer" | "inner";
1240
+ strength?: number;
1241
+ spread?: number;
1242
+ }[];
1243
+ panel?: {
1244
+ color: string;
1245
+ opacity: number;
1246
+ radius: number;
1247
+ padding?: {
1248
+ x: number;
1249
+ y: number;
1250
+ };
1251
+ paddingX?: number;
1252
+ paddingY?: number;
1253
+ stroke?: {
1254
+ color: string;
1255
+ width: number;
1256
+ };
1257
+ };
1258
+ glitch?: any;
1259
+ animation?: {
1260
+ type: "none" | "typewriter" | "wave" | "fade" | "glitch";
1261
+ speed?: number;
1262
+ amplitude?: number;
1263
+ frequency?: number;
1264
+ };
1265
+ background?: any;
1266
+ stack?: {
1267
+ count: number;
1268
+ offsetX: number;
1269
+ offsetY: number;
1270
+ opacityDecay: number;
1271
+ color1?: string;
1272
+ color2?: string;
1273
+ color3?: string;
1274
+ color4?: string;
1275
+ };
1276
+ text?: string;
1277
+ }>;
1278
+ /**
1279
+ * Validates a text effect definition and throws on error
1280
+ * @param data - The text effect definition to validate
1281
+ * @returns The validated text effect definition
1282
+ * @throws {z.ZodError} If validation fails
1283
+ */
1284
+ declare function validateTextEffectDefinitionStrict(data: unknown): {
1285
+ id: string;
1286
+ name: string;
1287
+ category: string;
1288
+ description: string;
1289
+ tags: string[];
1290
+ font: {
1291
+ family: string;
1292
+ weight: number;
1293
+ style: "normal" | "italic";
1294
+ letterSpacing: number;
1295
+ lineHeight: number;
1296
+ };
1297
+ fills: {
1298
+ type: "linear" | "solid" | "radial" | "pattern" | "none";
1299
+ color?: string;
1300
+ gradient?: {
1301
+ angle: number;
1302
+ stops: {
1303
+ color: string;
1304
+ offset: number;
1305
+ }[];
1306
+ };
1307
+ patternType?: string;
1308
+ perCharFillEnabled?: boolean;
1309
+ charFillColors?: string[];
1310
+ }[];
1311
+ strokes: {
1312
+ color: string;
1313
+ width: number;
1314
+ position?: "center" | "outside" | "inside";
1315
+ opacity?: number;
1316
+ lineJoin?: "round" | "miter" | "bevel";
1317
+ blur?: number;
1318
+ type?: "solid" | "gradient";
1319
+ colorSecondary?: string;
1320
+ widthSecondary?: number;
1321
+ fadeRange?: [number?, number?, ...unknown[]];
1322
+ }[];
1323
+ shadows: {
1324
+ color: string;
1325
+ blur: number;
1326
+ type?: "inner" | "drop";
1327
+ offset?: {
1328
+ x: number;
1329
+ y: number;
1330
+ };
1331
+ offsetX?: number;
1332
+ offsetY?: number;
1333
+ opacity?: number;
1334
+ }[];
1335
+ isPremium?: boolean;
1336
+ previewType?: "static" | "video" | "lottie";
1337
+ thumbnailUrl?: string;
1338
+ thumbnail?: string;
1339
+ previewUrl?: string;
1340
+ durationMs?: number;
1341
+ version?: string;
1342
+ bevel?: {
1343
+ depth: number;
1344
+ highlight?: string;
1345
+ highlightColor?: string;
1346
+ shadow?: string;
1347
+ shadowColor?: string;
1348
+ direction?: "right" | "bottom" | "bottom-right";
1349
+ coreColor?: string;
1350
+ edgeColor?: string;
1351
+ edgeWidth?: number;
1352
+ blur?: number;
1353
+ blurColor?: string;
1354
+ perspectiveEnabled?: boolean;
1355
+ vanishingPointX?: number;
1356
+ vanishingPointY?: number;
1357
+ focalLength?: number;
1358
+ };
1359
+ glow?: {
1360
+ color: string;
1361
+ blur: number;
1362
+ opacity: number;
1363
+ type?: "outer" | "inner";
1364
+ strength?: number;
1365
+ spread?: number;
1366
+ };
1367
+ glows?: {
1368
+ color: string;
1369
+ blur: number;
1370
+ opacity: number;
1371
+ type?: "outer" | "inner";
1372
+ strength?: number;
1373
+ spread?: number;
1374
+ }[];
1375
+ panel?: {
1376
+ color: string;
1377
+ opacity: number;
1378
+ radius: number;
1379
+ padding?: {
1380
+ x: number;
1381
+ y: number;
1382
+ };
1383
+ paddingX?: number;
1384
+ paddingY?: number;
1385
+ stroke?: {
1386
+ color: string;
1387
+ width: number;
1388
+ };
1389
+ };
1390
+ glitch?: any;
1391
+ animation?: {
1392
+ type: "none" | "typewriter" | "wave" | "fade" | "glitch";
1393
+ speed?: number;
1394
+ amplitude?: number;
1395
+ frequency?: number;
1396
+ };
1397
+ background?: any;
1398
+ stack?: {
1399
+ count: number;
1400
+ offsetX: number;
1401
+ offsetY: number;
1402
+ opacityDecay: number;
1403
+ color1?: string;
1404
+ color2?: string;
1405
+ color3?: string;
1406
+ color4?: string;
1407
+ };
1408
+ text?: string;
1409
+ };
1410
+ /**
1411
+ * Formats Zod validation errors into human-readable messages
1412
+ * @param error - The Zod error object
1413
+ * @returns Array of formatted error messages
1414
+ */
1415
+ declare function formatValidationErrors(error: z.ZodError): string[];
1416
+ type ValidatedEffectDefinition = z.infer<typeof EffectFullDefinitionSchema>;
1417
+ type ValidatedTextEffectDefinition = z.infer<typeof TextEffectDefinitionSchema>;
1418
+
296
1419
  declare function renderTextEffectCore(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, cfg: TextEffectConfig): void;
297
1420
  declare class TextEffectRenderer {
298
1421
  static draw(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, cfg: TextEffectConfig, _time?: number): void;
@@ -1042,6 +2165,264 @@ declare function updateKeyframe(doc: SceneDocument, trackIndex: number, keyframe
1042
2165
  declare function removeKeyframe(doc: SceneDocument, trackIndex: number, keyframeIndex: number): SceneDocument;
1043
2166
  declare function duplicateTrackAtPlayhead(doc: SceneDocument, trackIndex: number, previewTime: number): SceneDocument;
1044
2167
 
2168
+ /**
2169
+ * Updates text properties on a SceneDocument and its cached legacy config.
2170
+ */
2171
+ declare function updateSceneText(doc: SceneDocument, patch: Partial<{
2172
+ content: string;
2173
+ fontFamily: string;
2174
+ fontWeight: number;
2175
+ fontStyle: "normal" | "italic";
2176
+ fontSize: number;
2177
+ letterSpacing: number;
2178
+ lineHeight: number;
2179
+ textPosX: "left" | "center" | "right";
2180
+ textPosY: "top" | "middle" | "bottom";
2181
+ wrapText: boolean;
2182
+ autoFitText: boolean;
2183
+ perCharFillEnabled: boolean;
2184
+ charFillColors: string[];
2185
+ }>): SceneDocument;
2186
+ /**
2187
+ * Updates or creates the Background Panel (bounding plate) in a SceneDocument.
2188
+ */
2189
+ declare function updateScenePanel(doc: SceneDocument, patch: Partial<{
2190
+ enabled: boolean;
2191
+ color: string;
2192
+ opacity: number;
2193
+ radius: number;
2194
+ paddingX: number;
2195
+ paddingY: number;
2196
+ strokeEnabled: boolean;
2197
+ strokeColor: string;
2198
+ strokeWidth: number;
2199
+ }>): SceneDocument;
2200
+ /**
2201
+ * Updates or creates the Stroke (outline styling) in a SceneDocument.
2202
+ */
2203
+ declare function updateSceneStroke(doc: SceneDocument, patch: Partial<{
2204
+ enabled: boolean;
2205
+ strokeColor: string;
2206
+ strokeWidth: number;
2207
+ strokePosition: "outside" | "center" | "inside";
2208
+ strokeOpacity: number;
2209
+ strokeLineJoin: "round" | "miter" | "bevel";
2210
+ strokeBlur: number;
2211
+ strokeType: "single" | "double" | "neon";
2212
+ strokeColorSecondary: string;
2213
+ strokeWidthSecondary: number;
2214
+ strokeFadeRange: number;
2215
+ }>): SceneDocument;
2216
+ /**
2217
+ * Updates or creates the Shadow in a SceneDocument.
2218
+ */
2219
+ declare function updateSceneShadow(doc: SceneDocument, patch: Partial<{
2220
+ enabled: boolean;
2221
+ shadowColor: string;
2222
+ shadowBlur: number;
2223
+ shadowOffsetX: number;
2224
+ shadowOffsetY: number;
2225
+ shadowOpacity: number;
2226
+ shadowType: "drop" | "inner";
2227
+ }>): SceneDocument;
2228
+ /**
2229
+ * Updates or creates the 3D Bevel/Extrusion in a SceneDocument.
2230
+ */
2231
+ declare function updateSceneBevel(doc: SceneDocument, patch: Partial<{
2232
+ enabled: boolean;
2233
+ bevelDepth: number;
2234
+ bevelHighlight: string;
2235
+ bevelShadow: string;
2236
+ bevelDirection: "bottom-right" | "bottom" | "right";
2237
+ bevelCoreColor: string;
2238
+ bevelEdgeColor: string;
2239
+ bevelEdgeWidth: number;
2240
+ bevelBlur: number;
2241
+ bevelBlurColor: string;
2242
+ bevelPerspectiveEnabled: boolean;
2243
+ bevelVanishingPointX: number;
2244
+ bevelVanishingPointY: number;
2245
+ bevelFocalLength: number;
2246
+ }>): SceneDocument;
2247
+ /**
2248
+ * Updates or creates the Stack Extrusion (multi-layer overlaps) in a SceneDocument.
2249
+ */
2250
+ declare function updateSceneStack(doc: SceneDocument, patch: Partial<{
2251
+ enabled: boolean;
2252
+ stackCount: number;
2253
+ stackOffsetX: number;
2254
+ stackOffsetY: number;
2255
+ stackOpacityDecay: number;
2256
+ stackColor1: string;
2257
+ stackColor2: string;
2258
+ stackColor3: string;
2259
+ stackColor4: string;
2260
+ }>): SceneDocument;
2261
+ /**
2262
+ * Updates or creates the Fill layer in a SceneDocument.
2263
+ */
2264
+ declare function updateSceneFill(doc: SceneDocument, patch: Partial<{
2265
+ fillType: "solid" | "linear" | "radial" | "pattern" | "none";
2266
+ fillColor: string;
2267
+ fillGradientAngle: number;
2268
+ fillGradientStops: GradientStop[];
2269
+ patternType: "chalk" | "noise" | "grunge" | "carbon" | "stripes" | "film" | "brushed" | "marble" | "halftone" | "paper";
2270
+ perCharFillEnabled: boolean;
2271
+ charFillColors: string[];
2272
+ }>): SceneDocument;
2273
+ /**
2274
+ * Updates a specific Glow layer in a SceneDocument by index.
2275
+ * If the index is out of bounds, appends new default glow layers until reached.
2276
+ */
2277
+ declare function updateSceneGlow(doc: SceneDocument, index: number, patch: Partial<GlowLayer>): SceneDocument;
2278
+ /**
2279
+ * Updates Canvas dimensions on a SceneDocument.
2280
+ */
2281
+ declare function updateSceneCanvas(doc: SceneDocument, patch: Partial<{
2282
+ width: number;
2283
+ height: number;
2284
+ background: string;
2285
+ }>): SceneDocument;
2286
+ /**
2287
+ * Updates Custom/Procedural Engine parameters (like Ink Brush) on a SceneDocument.
2288
+ */
2289
+ declare function updateSceneCustomEngine(doc: SceneDocument, patch: Partial<{
2290
+ customRenderer: string;
2291
+ inkColor: string;
2292
+ bristleDensity: number;
2293
+ bristleSkipRate: number;
2294
+ dripRate: number;
2295
+ dripMaxLength: number;
2296
+ grainDensity: number;
2297
+ skewX: number;
2298
+ }>): SceneDocument;
2299
+ /**
2300
+ * Fluent API builder class designed to easily construct, update, and export
2301
+ * text effects programmatically.
2302
+ */
2303
+ declare class TextEffectBuilder {
2304
+ private config;
2305
+ constructor(initialConfig?: Partial<TextEffectConfig>);
2306
+ /** Load builder from an existing TextEffectConfig object */
2307
+ static fromConfig(config: TextEffectConfig): TextEffectBuilder;
2308
+ /** Load builder from an existing SceneDocument */
2309
+ static fromScene(scene: SceneDocument): TextEffectBuilder;
2310
+ /**
2311
+ * Load builder from a downloaded TextEffectDefinition.
2312
+ * Resolves the styling definition structure to a flat engine config.
2313
+ */
2314
+ static fromDefinition(effect: TextEffectDefinition, text?: string, fontSize?: number, canvasWidth?: number, canvasHeight?: number): TextEffectBuilder;
2315
+ /** Set text string content */
2316
+ setText(text: string): this;
2317
+ /** Configure Font and alignment settings */
2318
+ setFont(font: Partial<{
2319
+ family: string;
2320
+ weight: number;
2321
+ style: "normal" | "italic";
2322
+ size: number;
2323
+ letterSpacing: number;
2324
+ lineHeight: number;
2325
+ }>): this;
2326
+ /** Configure Background Panel (bounding plate) */
2327
+ setPanel(panel: Partial<{
2328
+ enabled: boolean;
2329
+ color: string;
2330
+ opacity: number;
2331
+ radius: number;
2332
+ paddingX: number;
2333
+ paddingY: number;
2334
+ strokeEnabled: boolean;
2335
+ strokeColor: string;
2336
+ strokeWidth: number;
2337
+ }>): this;
2338
+ /** Configure outline / stroke styling */
2339
+ setStroke(stroke: Partial<{
2340
+ enabled: boolean;
2341
+ color: string;
2342
+ width: number;
2343
+ position: "outside" | "center" | "inside";
2344
+ opacity: number;
2345
+ lineJoin: "round" | "miter" | "bevel";
2346
+ blur: number;
2347
+ type: "single" | "double" | "neon";
2348
+ colorSecondary: string;
2349
+ widthSecondary: number;
2350
+ fadeRange: number;
2351
+ }>): this;
2352
+ /** Configure drop shadow / inner shadow styling */
2353
+ setShadow(shadow: Partial<{
2354
+ enabled: boolean;
2355
+ color: string;
2356
+ blur: number;
2357
+ offsetX: number;
2358
+ offsetY: number;
2359
+ opacity: number;
2360
+ type: "drop" | "inner";
2361
+ }>): this;
2362
+ /** Configure a specific glow layer by index */
2363
+ setGlow(index: number, glow: Partial<GlowLayer>): this;
2364
+ /** Configure solid color fill */
2365
+ setFillColor(color: string): this;
2366
+ /** Configure linear gradient fill */
2367
+ setFillGradient(angle: number, stops: GradientStop[]): this;
2368
+ /** Configure texture pattern fill */
2369
+ setFillPattern(patternType: NonNullable<TextEffectConfig["patternType"]>): this;
2370
+ /** Configure per-character solid color fill overrides */
2371
+ setPerCharFill(enabled: boolean, colors: string[]): this;
2372
+ /** Configure 3D extrusion/bevel settings */
2373
+ setBevel(bevel: Partial<{
2374
+ enabled: boolean;
2375
+ depth: number;
2376
+ highlight: string;
2377
+ bevelShadow: string;
2378
+ direction: "bottom-right" | "bottom" | "right";
2379
+ coreColor: string;
2380
+ edgeColor: string;
2381
+ edgeWidth: number;
2382
+ blur: number;
2383
+ blurColor: string;
2384
+ perspectiveEnabled: boolean;
2385
+ vanishingPointX: number;
2386
+ vanishingPointY: number;
2387
+ focalLength: number;
2388
+ }>): this;
2389
+ /** Configure multi-stack duplicate extrusion */
2390
+ setStack(stack: Partial<{
2391
+ enabled: boolean;
2392
+ count: number;
2393
+ offsetX: number;
2394
+ offsetY: number;
2395
+ opacityDecay: number;
2396
+ color1: string;
2397
+ color2: string;
2398
+ color3: string;
2399
+ color4: string;
2400
+ }>): this;
2401
+ /** Configure canvas viewport size, alignment positioning, and wrapping behavior */
2402
+ setCanvas(canvas: Partial<{
2403
+ width: number;
2404
+ height: number;
2405
+ posX: "left" | "center" | "right";
2406
+ posY: "top" | "middle" | "bottom";
2407
+ wrapText: boolean;
2408
+ autoFitText: boolean;
2409
+ }>): this;
2410
+ /** Configure procedural InkBrushEngine variables (when customRenderer = InkBrushEngine) */
2411
+ setInkBrush(ink: Partial<{
2412
+ inkColor: string;
2413
+ bristleDensity: number;
2414
+ bristleSkipRate: number;
2415
+ dripRate: number;
2416
+ dripMaxLength: number;
2417
+ grainDensity: number;
2418
+ skewX: number;
2419
+ }>): this;
2420
+ /** Build and return a copy of the updated TextEffectConfig */
2421
+ buildConfig(): TextEffectConfig;
2422
+ /** Build and return a SceneDocument prepared for rendering with evaluateScene */
2423
+ buildScene(): SceneDocument;
2424
+ }
2425
+
1045
2426
  /**
1046
2427
  * Platform Capability Detection
1047
2428
  *
@@ -1183,4 +2564,4 @@ declare class InkBrushEngine {
1183
2564
  drawFrame(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1184
2565
  }
1185
2566
 
1186
- export { type AnimBuildOpts, type AnimKeyframe, type AnimTrack, type AnimTrackDef, type AnimatableParamDef, type AnimationCategory, type BatchInjection, COMPOSITION_PRESETS, CUSTOM_ENGINE_IDS, CanvasDevice, type CompositionPreset, type CompositorFromScene, type CompositorSettings, type CustomEngineId, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_DURATION, DEFAULT_FONT_SIZE, DEFAULT_FPS, DEFAULT_TEXT_STYLE, type DotLottieManifest, type DrawPerCharTextOptions, EMPHASIS_PRESETS, ENGINE_ID_TO_LEGACY, ENTRANCE_PRESETS, EXIT_PRESETS, type EasingControlPoint, type EffectFullDefinition, type EffectIndexItem, type EffectLayer, type EffectLayerType, type EvaluateOptions, type EvaluatedTextLayer, FONT_WEIGHT_OPTIONS, type FillType, type FontDescriptor, type FontLoadResult, FontLoader, type FontVariant, type GifExportOptions, type GifFrame, type GlowLayer, type GradientDir, type GradientStop, InkBrushEngine, type Keyframe, LEGACY_RENDERER_MAP, LOOP_PRESETS, LOTTIE_ANIM_PRESETS, LOTTIE_TEMPLATE_PRESETS, type LayerTarget, type LottieAnimPreset, type LottieFileInfo, type LottieFontEntry, type LottieFontUsage, type LottieGradientStop, type LottieKeyframe, type LottiePropertyPath, type LottieTemplatePreset, type ParsedTextLayer, type PngSequenceFrame, type PngSequenceOptions, type Preset, SCENE_VERSION, SUPPORTED_FONT_FAMILIES, type SceneCanvas, type SceneDocument, type SceneText, type StyleRecipe, TEMPLATE_CATEGORIES, type TemplatePresetCategory, type TextAlign, type TextCustomization, type TextEffectConfig, type TextEffectDefinition, TextEffectRenderer, type TextLayerConfig, type TextLayerStyle, type TextLayoutBounds, type TextLayoutResult, type TextStyleOverride, type Timeline, WEBM_EXPORT_MAX_FRAMES, WebGLCompositor, type WebMExportOptions, _buildConfig, _resetPlatformCache, addImageLayer, addKeyframeAtTime, addOrUpdateKeyframe, addShapeLayer, addSolidLayer, addTextLayer, addTrack, addVectorShape, advanceSceneTime, alignToLottieJ, applyFillColorToAll, applyLetterSpacing, applyMaskReveal, applyRecipeToScene, applyStyleToLottie, applyStyleToLottieLayer, applyTimelineAtTime, bakeAnimationIntoLayer, blendConfigs, blendScenes, buildDotLottie, buildFontEntries, buildLottieFontName, buildPngSequenceZip, builtInPresets, builtInRecipes, captureLottieFrames, checkFontVariant, clearAnimationFromLayer, clearFontCache, clearRecipeCache, cloneSceneWithNewIds, computeAutoFitFontSize, computeFitZoom, computeTextLayout, countTextGlyphs, createBlankLottie, createCanvas, createDefaultRevealTrack, createEmptyScene, createPulseOpacityTrack, defaultConfig, deleteKeyframe, disposeSharedCompositor, downloadDotLottie, downloadLottieJson, downloadPngSequenceZip, downloadSceneWebM, drawPerCharText, drawRoundedRect, duplicateTrackAtPlayhead, ease, enableKeyframing, encodeGif, ensureDefaultTimeline, ensureFontInLottie, ensureFontsLoaded, evaluateConfig, evaluateScene, findTrackIndex, getAnimPreset, getAnimatableParamDef, getAnimatableParamsForLayer, getDefaultText, getFontLoader, getLayerById, getPresetScene, getSceneTime, getSupportedWebMMimeType, getTemplatePreset, getTemplatesByCategory, getWebMFrameCount, hexToLottieColor, hexToLottieRgb, initializeFontSystem, injectBatch, injectColor, injectFontVariantRules, injectGlobalTextStyle, injectSolidColor, injectText, injectTextStyle, isWebMExportSupported, layerToTextEffectConfig, loadLottieFonts, lottieColorToHex, lottieJToAlign, measureTextFits, mergeSceneIntoConfig, moveKeyframe, newLayerId, parseHistorySnapshot, parseLottieJson, preloadGoogleFont, presetToRecipe, pruneTracksForLayer, rainbowCharFillColors, readLayerScalar, readStyleFromLottieLayer, reindexLayers, releaseCanvas, removeKeyframe, removeTrack, renderPngSequence, renderSceneWebM, renderTextEffectCore, resetFontLoader, resetSceneTime, resizeCharFillColors, resolveAnimatedScalar, resolveCustomEngineId, resolveFontFamilyName, restoreLetterSpacing, scanLottieFonts, scanTextLayers, sceneToConfig, setCharFillColor, setSceneTime, setTracks, shouldUsePerCharFill, snapshotScene, sortKeyframes, supportsCtxFilter, supportsLetterSpacing, supportsOffscreenCanvas, supportsRoundRect, supportsWebGL2, syncCompositorFromScene, textEffectConfigToScene, trackId, updateKeyframe, updateStaticProperty, updateTimeline, updateTrack, updateTrackMatte, upsertKeyframe, waitForFontsReady, wrapTextToWidth };
2567
+ export { type AnimBuildOpts, type AnimKeyframe, type AnimTrack, type AnimTrackDef, type AnimatableParamDef, type AnimationCategory, AnimationSchema, type BatchInjection, COMPOSITION_PRESETS, CUSTOM_ENGINE_IDS, CanvasDevice, type CompositionPreset, type CompositorFromScene, type CompositorSettings, type CustomEngineId, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_DURATION, DEFAULT_FONT_SIZE, DEFAULT_FPS, DEFAULT_TEXT_STYLE, type DotLottieManifest, type DrawPerCharTextOptions, EMPHASIS_PRESETS, ENGINE_ID_TO_LEGACY, ENTRANCE_PRESETS, EXIT_PRESETS, type EasingControlPoint, type EffectBevel, EffectBevelSchema, type EffectFill, EffectFillSchema, type EffectFullDefinition, EffectFullDefinitionSchema, type EffectGlow, EffectGlowSchema, type EffectIndexItem, EffectIndexItemSchema, type EffectLayer, type EffectLayerType, type EffectPanel, EffectPanelSchema, type EffectShadow, EffectShadowSchema, type EffectStack, EffectStackSchema, type EffectStroke, EffectStrokeSchema, type EvaluateOptions, type EvaluatedTextLayer, FONT_WEIGHT_OPTIONS, type FillType, type FontDescriptor, type FontLoadResult, FontLoader, FontSchema, type FontVariant, type GifExportOptions, type GifFrame, type GlowLayer, type GradientDir, type GradientStop, GradientStopSchema, InkBrushEngine, type Keyframe, LEGACY_RENDERER_MAP, LOOP_PRESETS, LOTTIE_ANIM_PRESETS, LOTTIE_TEMPLATE_PRESETS, type LayerTarget, type LottieAnimPreset, type LottieFileInfo, type LottieFontEntry, type LottieFontUsage, type LottieGradientStop, type LottieKeyframe, type LottiePropertyPath, type LottieTemplatePreset, type ParsedTextLayer, type PngSequenceFrame, type PngSequenceOptions, type Preset, SCENE_VERSION, SUPPORTED_FONT_FAMILIES, type SceneCanvas, type SceneDocument, type SceneText, type StyleRecipe, TEMPLATE_CATEGORIES, type TemplatePresetCategory, type TextAlign, type TextCustomization, TextEffectBuilder, type TextEffectConfig, type TextEffectDefinition, TextEffectDefinitionSchema, TextEffectRenderer, type TextLayerConfig, type TextLayerStyle, type TextLayoutBounds, type TextLayoutResult, type TextStyleOverride, type Timeline, type ValidatedEffectDefinition, type ValidatedTextEffectDefinition, WEBM_EXPORT_MAX_FRAMES, WebGLCompositor, type WebMExportOptions, _buildConfig, _resetPlatformCache, addImageLayer, addKeyframeAtTime, addOrUpdateKeyframe, addShapeLayer, addSolidLayer, addTextLayer, addTrack, addVectorShape, advanceSceneTime, alignToLottieJ, applyFillColorToAll, applyLetterSpacing, applyMaskReveal, applyRecipeToScene, applyStyleToLottie, applyStyleToLottieLayer, applyTimelineAtTime, bakeAnimationIntoLayer, blendConfigs, blendScenes, buildDotLottie, buildFontEntries, buildLottieFontName, buildPngSequenceZip, builtInPresets, builtInRecipes, captureLottieFrames, checkFontVariant, clearAnimationFromLayer, clearFontCache, clearRecipeCache, cloneSceneWithNewIds, computeAutoFitFontSize, computeFitZoom, computeTextLayout, countTextGlyphs, createBlankLottie, createCanvas, createDefaultRevealTrack, createEmptyScene, createPulseOpacityTrack, defaultConfig, deleteKeyframe, disposeSharedCompositor, downloadDotLottie, downloadLottieJson, downloadPngSequenceZip, downloadSceneWebM, drawPerCharText, drawRoundedRect, duplicateTrackAtPlayhead, ease, enableKeyframing, encodeGif, ensureDefaultTimeline, ensureFontInLottie, ensureFontsLoaded, evaluateConfig, evaluateScene, findTrackIndex, formatValidationErrors, getAnimPreset, getAnimatableParamDef, getAnimatableParamsForLayer, getDefaultText, getFontLoader, getLayerById, getPresetScene, getSceneTime, getSupportedWebMMimeType, getTemplatePreset, getTemplatesByCategory, getWebMFrameCount, hexToLottieColor, hexToLottieRgb, initializeFontSystem, injectBatch, injectColor, injectFontVariantRules, injectGlobalTextStyle, injectSolidColor, injectText, injectTextStyle, isWebMExportSupported, layerToTextEffectConfig, loadLottieFonts, lottieColorToHex, lottieJToAlign, measureTextFits, mergeSceneIntoConfig, moveKeyframe, newLayerId, parseHistorySnapshot, parseLottieJson, preloadGoogleFont, presetToRecipe, pruneTracksForLayer, rainbowCharFillColors, readLayerScalar, readStyleFromLottieLayer, reindexLayers, releaseCanvas, removeKeyframe, removeTrack, renderPngSequence, renderSceneWebM, renderTextEffectCore, resetFontLoader, resetSceneTime, resizeCharFillColors, resolveAnimatedScalar, resolveCustomEngineId, resolveFontFamilyName, restoreLetterSpacing, scanLottieFonts, scanTextLayers, sceneToConfig, setCharFillColor, setSceneTime, setTracks, shouldUsePerCharFill, snapshotScene, sortKeyframes, supportsCtxFilter, supportsLetterSpacing, supportsOffscreenCanvas, supportsRoundRect, supportsWebGL2, syncCompositorFromScene, textEffectConfigToScene, trackId, updateKeyframe, updateSceneBevel, updateSceneCanvas, updateSceneCustomEngine, updateSceneFill, updateSceneGlow, updateScenePanel, updateSceneShadow, updateSceneStack, updateSceneStroke, updateSceneText, updateStaticProperty, updateTimeline, updateTrack, updateTrackMatte, upsertKeyframe, validateEffectDefinition, validateEffectDefinitionStrict, validateTextEffectDefinition, validateTextEffectDefinitionStrict, waitForFontsReady, wrapTextToWidth };